概要
Slackの投稿をLambdaで受け取る方法について調べたので、設定の流れについて記載する
条件
Lambdaの関数URLを使って実施
設定の流れ
Lambda側
Lambda関数作成
関数URLの作成
動作の確認なのでNONEを指定して進める
警告
NONEにすると未認証でパブリックなアクセスを許可となるので誰からもアクセスできる状態となる
そのため、URLは公開されるので扱いには気をつける必要がある
URLにアクセスして確認
Lambdaに以下のコードが初期設定されているため、ブラウザで以下のように表示される
def lambda_handler(event, context):
# TODO implement
return {
'statusCode': 200,
'body': json.dumps('Hello from Lambda!')
}
Lambdaのコードにprintを追加し、CloudWatchログに出力されるように設定しておく
def lambda_handler(event, context):
# TODO implement
print(event['body'])
return {
'statusCode': 200,
'body': json.dumps(event['body'])
}
Slack側
Slack APIアクセス
https://api.slack.com/apps
SlackApp作成
App Nameの入力、workspaceを指定してCreate Appを選択

Event Subscriptions
イベントの有効化と関数URL設定
Enable EventsをOnにし、Request URLにLambdaの関数URLを指定
入力したURLに対して、チェックが通らなかった場合は、以下の警告が発生する

権限設定
以下のEvent Nameを指定
- app_mention
ここで右下のSave Changesを選択して保存する
OAuth & Permissions
Scopesの指定
以下のOAuth Scopeを指定
- app_mentions:read
- chat:write
画面上にスクロールし、Installを実行する
Slackから投稿して確認
Slack投稿
Lambdaのログ確認
Lambda関数>モニタリングタブを開いて、CloudWatchログ表示を選択

ログストリームから、Slackから投稿した情報が送られているのを確認
{
"token": "xxxx",
"team_id": "xxx",
"api_app_id": "xxx",
"event": {
"type": "app_mention",
"user": "xx",
"ts": "xxx.xx",
"client_msg_id": "xxx-xx-xx",
"text": "<@xxx>\nlambdaテスト",
"team": "xx",
"blocks": [
{
"type": "rich_text",
"block_id": "xx",
"elements": [
{
"type": "rich_text_section",
"elements": [
{
"type": "user",
"user_id": "xxx"
},
{
"type": "text",
"text": "\nlambdaテスト"
}
]
}
]
}
],
"channel": "xxx",
"event_ts": "xxx.xxx"
},
:
}
さいごに
- SlackからLambdaへのリクエストが行われ、Lambdaの関数内で確認ができた
- 認証制御は何も行っていないので、以下のページを参考に、Slackからのリクエストを制御するなどの対応が必要となる
https://docs.slack.dev/authentication/verifying-requests-from-slack/












