
お疲れ様です。tkmiです。
Lambda&Slack連携の続きです。前回はLambdaからSlackに挨拶してもらいましたので、今回は
Slackから挨拶してLambdaに応えてもらいましょう。
Lambdaのコードを修正して挨拶応答機能を追加
まず、現在のLambdaコードを修正します。Slackからのメッセージを受け取り、以下のように対応して返答するようにします。
slack_sdkはダウンロードしてコードに含めるようにします。
- おはよう
→おはようございます! - こんにちは
→こんにちは! - こんばんは
→こんばんは! - それ以外
→お疲れ様です!
import os
import json
import re
from slack_sdk import WebClient
from slack_sdk.errors import SlackApiError
# 環境変数からSlackボットのトークンを取得
SLACK_BOT_TOKEN = os.getenv("SLACK_BOT_TOKEN")
slack_client = WebClient(token=SLACK_BOT_TOKEN)
def lambda_handler(event, context):
# body の取得とパース
body = json.loads(event.get("body", "{}"))
# Slackのチャレンジリクエスト対応
if "challenge" in body:
return {"statusCode": 200, "body": body["challenge"]}
slack_event = body.get("event", {})
message_text = slack_event.get("text")
channel_id = slack_event.get("channel")
if message_text and channel_id:
try:
slack_client.chat_postMessage(channel=channel_id, text=get_greeting(message_text))
except SlackApiError as e:
print(f"Error sending message: {e.response['error']}")
return {"statusCode": 200, "body": json.dumps({"message": "OK"})}
def get_greeting(message_text):
greetings = {
"おはよう": "おはようございます!",
"こんにちは": "こんにちは!",
"こんばんは": "こんばんは!"
}
target = re.sub(r'<@\w+>', '', message_text).strip()
return greetings.get(target, "お疲れ様です!")
ついでに余分なコードとか削除してリファクタリングしました。
Lambdaの関数URLを作成してSlackと連携
次に、Lambda関数のURLを作成します。これにより、SlackからのリクエストをLambda関数が受け取ることができるようになります。
AWSマネジメントコンソールでLambda関数の設定を開き、「関数URLを作成」をクリックします。
今回、認証タイプは「NONE」を選択しますが、URLがわかれば誰でもアクセスできてしまうので気を付けましょう。
URLをコピーしておきます。このURLは後ほどSlackアプリの設定で使用します。
Slackアプリの設定を更新
Slackアプリの「Event Subscriptions」設定を開きます。
ここではSlack内のメンションを検知して、先ほどのLambda関数のURLにリクエストを送る設定を行います。
これにより、Slackからのメッセージが自動的にLambda関数に送信されるようになります。
- Enable Eventsを「On」にします。
- Request URLに先ほどコピーしたLambda関数のURLをセットします。
→接続の確認のため「Challenge認証」を行い、「Verified」が表示されたらOKです。
さらに「OAuth&Permissions」を開き、Scopes→Bot Token Scopesでメッセージの読み取りと書き込みが許可されていることを確認します。
SlackAppに設定を適用するために再インストールを求められるので、適用します。
最後にOAuth Tokensから「Bot User OAuth Token」をコピーし、Lambda関数の環境変数「SLACK_BOT_TOKEN」を作成してセットします。
Slackから挨拶してみよう!
すべての設定が完了したら、で挨拶メッセージを送信してみましょう。Slackのチャネルで「こんにちは」とメッセージを送信し、Lambdaからの自動応答が返ってくることを確認します。
もし応答が返ってこない場合は、CloudWatchのログを確かめて修正しましょう。