SlackbotのAWS Lambdaでの作り方 - Python編

この記事を書いたメンバー:

Ken'ichi Suzuki

SlackbotのAWS Lambdaでの作り方 - Python編

目次

前回の記事ではSlackボットをNode.jsのAWS Lambdaで作成しました。今回はそのPython版です。

以下のような作り方の流れは前回の記事とまったく同じです。今回の記事では、5のLambdaで動かすコンテナをPythonで作成するところのみをご紹介します。

  1. Slackのサイトでアプリのためのキーを取得
  2. アプリに許可する権限(発言の書き込みなど)を設定
  3. Slackのワークスペースにアプリをインストール
  4. Slackアプリ用のキーを取得
  5. Lambdaのソースコード作成
  6. AWS環境にAPI GatewayとLambdaを構築
  7. API GatewayのURLをアプリのURLとしてSlackに登録し、アプリに通知したいイベントを設定
  8. Slackのチャンネルにボットを招待
  9. ボットにメンションを送ってみる

Pythonで実装

Pythonのslack_bolt

Pythonにも slack_bolt という名前のSlackのライブラリがあります。Node.js版と同じくAWS Lambdaで動かすための仕組みもライブラリの中で提供されています。

AWS LambdaのPythonでSlackボットを作成するチュートリアルが公式ドキュメントに見つからなかったのですが、 Node.js版と似たような設計だろうと当たりを付けながら、ライブラリのAPIレファレンスを参考にします。

APIレファレンスは以下のページを参考にしました。

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など大規模言語モデルの活用が広まっています。この流行に乗ってボットアプリケーションを開発したいというエンジニアの方がいらっしゃいましたら、ぜひ一緒にお仕事しましょう。詳細は採用情報のページをご覧ください。


採用情報|基幹システムのクラウド移行・構築・導入支援のBeeX

世界に先駆け企業の基幹システムをクラウド環境へ数多くマイグレーション(移行)してきた実績を持つ、株式会社BeeXの採用情報ページです。業務拡大につき、一緒に成長できるメンバーを募集しております。

beex-inc.com

og_img



カテゴリー

SAPシステムや基幹システムのクラウド移行・構築・保守、
DXに関して
お気軽にご相談ください

03-6260-6240 (受付時間 平日9:30〜18:00)