Cloud Functions + Slack Event API を利用したBotの作成(メッセージの送信)

2022-04-07  /  SlackGCPPythonCloud 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.txtpython-box を追加しています。

functions-framework==3.0.0
slack-bolt==1.13.0
python-box[all]~=6.0

確認

Cloud Functions にデプロイが完了したら動作確認します。以下のようにちゃんとおうむ返ししてくれました。

ひとまず簡単な Bot ですが動作させることができました。