Slack botを作っていると一方的にメッセージを送りつけるだけでなく、ボタンを押したりセレクトボックスから何らかを選択した時にアクションをとれるようにしたくなる。
これを実現しているのがSlackのInteractive messagesでこれを利用することでボタンをユーザーが押した時、セレクトボックスでユーザーが選択した時をトリガーにメッセージを返信したり、バックエンド側でAPIにその値を用いて送信したりと色々できるようになる。
今回はそのInteractive messagesで提供されるセレクトボックスについての話。
セレクトボックスを作成する
例えばYESかNOを選択するようなセレクトボックスを作ってvalueではYESの時に1, NOの時に0を渡すようにする。
そのJSONは次のようになる。
{ "text":"セレクトボックスのテスト", "attachments":[ { "fallback":"your_fallback", "text":"", "callback_id":"your_callback_id", "color":"#393fe5", "actions":[ { "name":"yes_or_no", "text":"YES OR NO", "type":"select", "options":[ { "text":"YES", "value":1 }, { "text":"NO", "value":0 } ] } ] } ] }
すると次のようなものがSlack上に現れる。
デフォルト値を指定する
ドキュメントを見るとselected_options
を指定すると最初の値が選択された値となる。
次のように指定する。
{ "text":"セレクトボックスのテスト", "attachments":[ { "fallback":"your_fallback", "text":"", "callback_id":"your_callback_id", "color":"#393fe5", "actions":[ { "name":"yes_or_no", "text":"YES OR NO", "type":"select", "options":[ { "text":"YES", "value":1 }, { "text":"NO", "value":0 } ], "selected_options": [ { "text":"NO", "value":0 } ] } ] } ] }
かわらない。。。。。。
何がいけなかったのか
valueの値が文字列でないとだめだった
どういうことかというと次のようなJSONでないといけない。
{ "text":"セレクトボックスのテスト", "attachments":[ { "fallback":"your_fallback", "text":"", "callback_id":"your_callback_id", "color":"#393fe5", "actions":[ { "name":"yes_or_no", "text":"YES OR NO", "type":"select", "options":[ { "text":"YES", "value":"1" }, { "text":"NO", "value":"0" } ], "selected_options": [ { "text":"NO", "value":"0" } ] } ] } ] }
できた!!!
最後
今回はSlackでセレクトボックスを作成する際のデフォルト値の指定方法と気をつけることをメモで書いた。
このselected_options
はデフォルト値として使えるんだけど、配列で定義できるので当然2つ目を設定できる。
しかしドキュメントによると次のように書いてあって無視されると。。。
Any additional elements will be ignored.
SlackのAPIちょいちょい謎がある