id:kizashi1122 です。
ひとまず Slack から Lambda を呼び出すところまでは終わりました。 (といってもURL確認用のリクエストを受け取っただけです)
ワークスペースにアプリをインストールする
まだコードは何も書いてないですが、Slack から使ってみたいのでインストールします。
クリックします。次の画面では「Accept」すればよいです。 チェックが入りましたね。
ではこの「echoapp」をSlackのチャンネルに追加してみましょう。最初はテスト用に作ったチャンネルで試すのがいいかもしれません。ここでは #app-test
としています。
上記の「Add an App」をクリックして「echoapp」を選択して追加します。
追加されました。ではメンションしてみましょう。
何も起きません・・・。
そもそも Lambda まで届いているのかすらわかりません。ログを確認しましょう。
ここから確認できます。
タイムスタンプを見るにちゃんと届いてそうです。ログを出してみます。Ruby なので p
で引数の event
を標準出力に出力してみるだけです。
ログ出力コードを入れてデプロイし、更にメンションしてみます。
同じようにログを確認し、さらにリンクを飛んで CloudWatch Logs までいきます。
へー、イベントの中身ってこうなってるのねーというのがよくわかります。
中で気になるものを赤枠で囲ってます。1つ目が token です。簡単なリクエストチェック(Slack からのリクエストであるということの検証)に使えます。
2つ目はエコーする内容です。ここをそのまま返せばエコーできそうだなとわかります(このときは「@echoapp hello2」と投稿してました)。
1つ目について、トークンの一致性を見るだけなら簡単なので実装しておきましょう。本当は署名チェックをするのがよいようです。
Verifying requests from Slack | Slack
Slack から送られるトークンについてはここにあります。
これを Lambda 側の環境変数にいれておき(画面省略)、コード上ではこう比較すればよいでしょう。
require 'json' def lambda_handler(event:, context:) # p event req = JSON.parse(event['body']) if ENV['SLACK_VERIFICATION_TOKEN'] != req['token'] return { statusCode: 401, body: "VERIFICATION TOKEN UNMATCHED" } end { statusCode: 200, body: 'done' } end
さて、次はいよいよLambda側からエコーする部分を作りましょう。
続きはこちら。