Mattermost × Webhook × Python：チャット通知ボットの作り方をまとめてみた

## はじめに

本記事では、Mattermost にメッセージを自動投稿するボットを Python で簡単に作成する方法を紹介します。

:::note info
**思ったよりもスムーズに作成できたので、興味のある方はぜひ参考にしてみてください！**
:::

Webhook 機能を利用することで、サーバーへの通知や定期投稿が手軽に実現でき感動しました...！！

## 書こうと思ったきっかけ

個人的にWebhook（ウェブフック）の仕組みを理解したいと考え、前回技術検証した Mattermost を使って、今回は Webhook を使った自動投稿の検証をしてみようと思いました。

**前回の記事の続きになります！まだの方はぜひ！！**

https://qiita.com/free-honda/items/e8dab4831ff3f1ce72f3

※内容に不備などがございましたら、お手数ですが優しくご指摘いただけますと幸いです。

## Webhook（ウェブフック）とは？

Webhook（ウェブフック）は、特定のイベントが発生した際に、事前に指定されたURLに自動でHTTPリクエストを送信する仕組みです。

![Screenshot 2025-06-09 at 20.53.35.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/cf2a9d34-864e-4d92-a9f0-b6e3dd896a21.png)

引用画像：https://bcart.jp/functions/detail/158/

リアルタイムに外部サービスと連携でき、通知や処理の自動化に活用されます。たとえば、GitHubのプッシュ通知やチャットアプリへの自動投稿などがあります。

**参考文献**

https://circleci.com/ja/blog/webhook-explained/#:~:text=%E3%82%AC%E3%82%A4%E3%83%89%E3%81%A8%E8%A8%98%E4%BA%8B-,Webhook%EF%BC%88%E3%82%A6%E3%82%A7%E3%83%96%E3%83%95%E3%83%83%E3%82%AF%EF%BC%89%E3%81%A8%E3%81%AF%EF%BC%9F,%E3%81%AF%E3%80%8C%E3%82%A6%E3%82%A7%E3%83%96%E3%83%95%E3%83%83%E3%82%AF%E3%80%8D%E3%81%A7%E3%81%99%E3%80%82

## 実際にやってみた

### 検証内容の概要について

* Mattermost の Webhook URL を取得
* Python スクリプトで Webhook 経由で投稿
* 任意の時間に実行（例：cron で定期投稿も可）

### Step 1: Webhook の作成（Mattermost）

* Mattermost に管理者または Bot 権限でログイン

![Screenshot 2025-06-09 at 20.57.25.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/e1cc5a49-b481-49cf-a875-124afd87f315.png)

* 任意のチャンネルに移動（Town Squareで検証を進めていきます）

![Screenshot 2025-06-09 at 20.58.30.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/d5e95bc1-cc1d-4b80-b740-79e5a3bc3f40.png)

* メニューから「インテグレーション > 入力用 Webhook」を選択

![Screenshot 2025-06-09 at 20.59.46.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/783442ef-38dd-4c7a-96e2-b1dfe28d8033.png)

**Incoming Webhooksになります！**

![Screenshot 2025-06-09 at 21.00.43.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/e8b093d6-3265-4517-befd-4869e4bfb484.png)

* 「新しい入力用Webhookを追加」

![Screenshot 2025-06-09 at 21.02.48.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/300a5af1-ee32-49dd-a741-610cc61e539b.png)

   * 名前: `my-bot`
   * チャンネル: 任意の投稿先チャンネル
* 「Save」を押すと Webhook URL（例: `https://mattermost.example.com/hooks/xxxxxxxx`）が発行される

**こんな感じです！**

![Screenshot 2025-06-09 at 21.04.04.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/a91e2eb1-e48a-4533-a9e6-fcb385d91a08.png)

### Apple Silicon 対応のPython環境を作成

#### ステップ1：venv で仮想環境を作成する

```bash
cd ~/Desktop/macbook\ pro/docker
python3 -m venv venv
source venv/bin/activate
```

#### ステップ2：ライブラリをクリーンにインストール

```bash
pip install --upgrade pip
pip install requests
```

**こんな感じで問題なく仮想環境を構築できました！**

![Screenshot 2025-06-09 at 21.06.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/5b1607d4-9a63-4823-b63d-6969551214a0.png)

### Step 2: Python スクリプトを書く

```python
import requests

WEBHOOK_URL = "https://mattermost.example.com/hooks/xxxxxxxx"
MESSAGE = "こんにちは！ボットからのメッセージです🌟"

def post_to_mattermost():
    res = requests.post(WEBHOOK_URL, json={"text": MESSAGE})
    print("投稿成功" if res.status_code == 200 else f"投稿失敗: {res.status_code}")

if __name__ == "__main__":
    post_to_mattermost()
```

**コードの中でしていること**

**Mattermost の Webhook を使って指定メッセージを送信する処理** を行っています。  
簡単にまとめると以下の通りです：

- `WEBHOOK_URL` に **送信先の Webhook URL を指定**  
- `MESSAGE` に **送るメッセージを定義**  
- `requests.post()` で **メッセージを送信**  
- 成功すれば「**投稿成功**」、失敗すれば **ステータスコード付きで「投稿失敗」** と表示  

実行すると、**Mattermost に「こんにちは！ボットからのメッセージです🌟」** が投稿されます。  

### 実行方法

```bash
python mattermost_bot.py
```

**問題なくメッセージが届いていることが確認できました！**

![Screenshot 2025-06-09 at 21.10.40.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3662571/d67c6e86-1bb3-4997-bcff-bb078b36f0fe.png)

## 補足

* 投稿内容に `@channel` や `@here` を含めれば通知にも使えます。
* 複雑な処理が必要な場合は、Mattermost の Bot Token を使って API 経由でやり取りする方法もありますが、Webhook を使う方法が最も簡単だと思いました！

## まとめ

ここまでお読みいただき、ありがとうございました！

Mattermost の Webhook 機能を使えば、簡単にチャット通知ボットを作ることができます。

:::note warn
***Python スクリプトと組み合わせれば、定期実行やイベント駆動型の通知などもすぐに実現できます。***
:::

まずは Webhook の仕組みを試して、用途に応じて拡張してみてください...！（楽しい検証だったので、またいろいろ試してみようと思います！！）

### おまけ：定期投稿したい場合（Linux）

```bash
crontab -e
```

cron（クーロン） というスケジューラーを使って、毎日特定の時間に Python スクリプトを実行する設定も可能です...

```bash
# 毎日9時に投稿
0 9 * * * /usr/bin/python3 /path/to/mattermost_bot.py
```