Cloud Functions + Slack Event API を利用したBotの作成(メッセージの送信)
2022-04-07 / Slack, GCP, Python, Cloud Functions
Slack の Event API を利用した簡単な Echo Bot を作成してみようと思います。今回でメッセージ送信まで完了します。前回は メッセージの受信まで 行いました。
受信データのフォーマットを確認
前回は受け取ったリクエストをそのままログに出力しただけでした。Slack の message.*
イベントがどのような情報を送ってくるかはリファレンスに記載されています。
message.channels event | Slack
以下のような JSON が届くようです。
{
"token": "one-long-verification-token",
"team_id": "T061EG9R6",
"api_app_id": "A0PNCHHK2",
"event": {
"type": "message",
"channel": "C024BE91L",
"user": "U2147483697",
"text": "Live long and prospect.",
"ts": "1355517523.000005",
"event_ts": "1355517523.000005",
"channel_type": "channel"
},
"type": "event_callback",
"authed_teams": ["T061EG9R6"],
"event_id": "Ev0PV52K21",
"event_time": 1355517523
}
今回はおうむ返しするだけなので $.event.text
を利用すれば良いことがわかります。
実装
以下のようにmessage_channel
を修正しました。
from box import Box
@app.event("message")
def message_channel(body, say, logger):
b = Box(body)
say(b.event.text)
body
はディクショナリーになっているみたいなので要素にアクセスしやすくするために python-box · PyPI を利用しています。
say
にテキストを渡すと Bot のメッセージとして処理されます。受け取ったテキストメッセージをそのまま渡しています。
requirements.txt
に python-box
を追加しています。
functions-framework==3.0.0
slack-bolt==1.13.0
python-box[all]~=6.0
確認
Cloud Functions にデプロイが完了したら動作確認します。以下のようにちゃんとおうむ返ししてくれました。
ひとまず簡単な Bot ですが動作させることができました。