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

モーダルでの送信のリスニング

view メソッドを使うと、ユーザーのビューとのインタラクションをリッスンすることができます。

ユーザーがモーダルからデータ送信したとき、Slack から view_submission のリクエストが送信されます。送信された input ブロックの値は state オブジェクトから取得できます。state 内には values というオブジェクトがあり、これは block_id と一意な action_id に紐づける形で入力値を保持しています。 モーダルでの notify_on_close プロパティを true に設定した場合、ユーザーが Close ボタンを押したときに Slack から view_closed リクエストが送信されます。 より詳細な情報は以下の モーダルを閉じるときのハンドリング を参照してください。 view_submissionview_closed リクエストをリッスンするには、組み込みの view() メソッドを使用できます。

view() メソッドでは、文字列か正規表現の callback_id の指定が必要です。typecallback_id を含む制約付きオブジェクトを渡すこともできます。


モーダル送信でのビューの更新

view_submission リクエストに対してモーダルを更新するには、リクエストの確認の中で update という response_action と新しく作成した view を指定します。

// モーダル送信でのビューの更新
app.view('modal-callback-id', async ({ ack, body }) => {
await ack({
response_action: 'update',
view: buildNewModalView(body),
});
});

この例と同様に、モーダルでの送信リクエストに対して、エラーを表示する ためのオプションもあります。

より詳細な情報は API ドキュメントを参照してください。


モーダルを閉じるときのハンドリング

💡 view_closed リクエストをリッスンするとき、callback_idtype: 'view_closed' を含むオブジェクトの指定が必要です。以下の例を参照してください。

view_closed に関するより詳細な情報は API ドキュメントを参照してください。

// view_closed リクエストの処理
app.view({ callback_id: 'view_b', type: 'view_closed' }, async ({ ack, body, view, client }) => {
// view_closed リクエストの確認
await ack();
// close リクエストについて何らかの処理
});
// モーダルでのデータ送信リクエストを処理します
app.view('view_b', async ({ ack, body, view, client, logger }) => {
// モーダルでのデータ送信リクエストを確認
await ack();

// 入力値を使ってやりたいことをここで実装 - ここでは DB に保存して送信内容の確認を送っている

// block_id: block_1 という input ブロック内で action_id: input_a の場合の入力
const val = view['state']['values']['block_1']['input_a'];
const user = body['user']['id'];

// ユーザーに対して送信するメッセージ
let msg = '';
// DB に保存
const results = await db.set(user.input, val);

if (results) {
// DB への保存が成功
msg = 'Your submission was successful';
} else {
msg = 'There was an error with your submission';
}

// ユーザーにメッセージを送信
try {
await client.chat.postMessage({
channel: user,
text: msg
});
}
catch (error) {
logger.error(error);
}

});