メインコンテンツまでスキップ

オプションのリスニングと応答

options() メソッドは、Slack からのオプション(セレクトメニュー内の動的な選択肢)をリクエストするペイロードをリッスンします。 action() と同様に、文字列型の action_id または制約付きオブジェクトが必要です。

外部データソースを使って選択メニューをロードするためには、末部に /slack/events が付加された URL を Options Load URL として予め設定しておく必要があります。

external_select メニューでは action_id を指定することをおすすめしています。ただし、ダイアログを利用している場合、ダイアログが Block Kit に対応していないため、callback_id をフィルタリングするための制約オブジェクトを使用する必要があります。

オプションのリクエストに応答するときは、有効なオプションを含む options または option_groups のリストとともに ack() を呼び出す必要があります。API サイトにある外部データを使用する選択メニューに応答するサンプル例と、ダイアログでの応答例を参考にしてください。

さらに、ユーザーが入力したキーワードに基づいたオプションを返すようフィルタリングロジックを適用することもできます。 これは payload という引数の value の値に基づいて、それぞれのパターンで異なるオプションの一覧を返すように実装することができます。 Bolt for Python のすべてのリスナーやミドルウェアでは、多くの有用な引数にアクセスすることができますので、チェックしてみてください。

指定可能な引数の一覧はモジュールドキュメントを参考にしてください。
# 外部データを使用する選択メニューオプションに応答するサンプル例
@app.options("external_action")
def show_options(ack, payload):
options = [
{
"text": {"type": "plain_text", "text": "Option 1"},
"value": "1-1",
},
{
"text": {"type": "plain_text", "text": "Option 2"},
"value": "1-2",
},
]
keyword = payload.get("value")
if keyword is not None and len(keyword) > 0:
options = [o for o in options if keyword in o["text"]["text"]]
ack(options=options)