目次
前回の記事ではSlackボットをNode.jsのAWS Lambdaで作成しました。今回はそのPython版です。
以下のような作り方の流れは前回の記事とまったく同じです。今回の記事では、5のLambdaで動かすコンテナをPythonで作成するところのみをご紹介します。
- Slackのサイトでアプリのためのキーを取得
- アプリに許可する権限(発言の書き込みなど)を設定
- Slackのワークスペースにアプリをインストール
- Slackアプリ用のキーを取得
- Lambdaのソースコード作成
- AWS環境にAPI GatewayとLambdaを構築
- API GatewayのURLをアプリのURLとしてSlackに登録し、アプリに通知したいイベントを設定
- Slackのチャンネルにボットを招待
- ボットにメンションを送ってみる
Pythonで実装
Pythonのslack_bolt
Pythonにも slack_bolt という名前のSlackのライブラリがあります。Node.js版と同じくAWS Lambdaで動かすための仕組みもライブラリの中で提供されています。
AWS LambdaのPythonでSlackボットを作成するチュートリアルが公式ドキュメントに見つからなかったのですが、 Node.js版と似たような設計だろうと当たりを付けながら、ライブラリのAPIレファレンスを参考にします。
APIレファレンスは以下のページを参考にしました。
- https://slack.dev/bolt-python/api-docs/slack_bolt/app/index.html
- https://slack.dev/bolt-python/api-docs/slack_bolt/adapter/aws_lambda/index.html
- https://slack.dev/bolt-python/api-docs/slack_bolt/app/app.html#slack_bolt.app.app.App.event
Pythonソースコード
以下はPythonのソースコードです。前半と最後はSlackボットとしてのおまじないです。onAppMentionというメソッドが、ボットが返信するためのコード本体です。
import os
import re
from slack_bolt import App
from slack_bolt.adapter.aws_lambda import SlackRequestHandler
app = App(
token=os.environ.get("SLACK_BOT_TOKEN"),
signing_secret=os.environ.get("SLACK_SIGNING_SECRET"),
# これがない場合、app_mentionに反応はできるけどsayする前にLambdaが終了してしまい、ボットが返信完了できない
process_before_response=True,
)
receiver = SlackRequestHandler(app)
# メンションのイベントを受信したときに実行されるコード
@app.event("app_mention")
def onAppMention(event, say):
# check if event["text"] starts with a mention '<@...>' using regex, and then remove it from text
textWithoutMention = re.sub(r"^<@(.+?)>", "", event["text"]).strip()
say(
channel=event["channel"],
thread_ts=event["event_ts"], # 返信先スレッドを識別するための文字列
text="Hello! :wave: \n> " + textWithoutMention,
)
def lambda_handler(event, context):
return receiver.handle(event, context)
依存しているパッケージは slack_bolt のみです。requirements.txtには以下のように記載しました。
slack_bolt == 1.18.0
AWS Lambdaをコンテナイメージで動かすためのDockerfileは以下のとおりです。
FROM public.ecr.aws/lambda/python:3.10
COPY requirements.txt app.py ${LAMBDA_TASK_ROOT}/
RUN pip3 install -r requirements.txt
CMD [ "app.lambda_handler" ]
ソースコード一式は以下にアップしてあります。
https://github.com/beex-inc/slack-echo-bot/tree/for-blog-python
最後に
BeeXではアプリ開発もしています。アプリ開発に関するご相談についてはアプリケーション開発支援のページをご覧ください。
現在、ChatGPTなど大規模言語モデルの活用が広まっています。この流行に乗ってボットアプリケーションを開発したいというエンジニアの方がいらっしゃいましたら、ぜひ一緒にお仕事しましょう。詳細は採用情報のページをご覧ください。
- カテゴリー