社内で使用する主なwebページのリンクつきボタンを返すslackコマンドを作った。
作成方法を残しておく。
なおコマンド実行後に動作するプログラムはAWS上で構築した。言語はpython。
API GatewayでURLを発行する
「APIの作成」からAPI用のURLを作成する。
POSTでのURL作成後は、「統合リクエスト」にて「Lambda 関数」を選択し「Lambda プロキシ統合の使用」にチェックをつける。
のちに作成するLambda関数の関数名も入力する。
Lambdaで関数を作成する
Amazon Lambda上で作成し、下記のjsonデータを返すようにした。
# リストをjsonに変換
obj = {
"text": "どのページを表示しますか?",
"response_type": "ephemeral",
"attachments": [
{
"fallback": "google",
"text": "Google",
"actions": [
{
"type": "button",
"text": "Google",
"url": "https://www.google.com/",
},
],
"color": "73c118"
},
{
"fallback": "amazon",
"text": "Amazon",
"actions": [
{
"type": "button",
"text": "Amazon",
"url": "https://www.amazon.co.jp/",
},
],
"color": "673ab7"
},
]
}
json_data = json.dumps(obj)
‘response_type’を’ephemeral’としたのは、返ってきた結果を実行者のみに表示したかったから。
チャンネルの他のメンバーにも表示したければ’in_channel’を指定すれば良い。
またslackコマンドを実行した時は下記の内容がPOSTされる。(参考ページより抜粋)
token=gIkuvaNzQIHg97ATvDxqgjtO
team_id=T0001
team_domain=example
channel_id=C2147483705
channel_name=test
user_id=U2147483697
user_name=Steve
command=/weather
text=94070
response_url=https://hooks.slack.com/commands/1234/5678
このtokenをチェックして、不正なリクエストでないかを確認する。
ちなみにtokenはSlack APIページの「Basic Information」 > 「App Credentials」 > 「Verification Token」で確認することが出来る。
slash command登録
Slack APIページの「Slash Commands」 > 「Create New Command」から新規にコマンドを作成。URLにはAPI Gatewayで作成したURLを指定する。
実行結果
コマンドを実行すると下記の結果が返ってくる。
今後の課題
- AWS KMSを使って今後同様のSlack tokenを使用する時に鍵を使い回しできるようにする。
- コマンドの使用量を測ってみる。