Я хотел подтвердить, что вы искали, прежде чем я ответил. Недавно я проделал нечто подобное - когда я возвращал кнопку без команды, главным образом, чтобы, когда пользователь нажимал на кнопку, у меня была trigger_id
, которую я мог бы использовать, чтобы отправить модальную форму для получения дополнительной информации. Пример того, как я справился с этим:
Сначала go в разделе Event Subscriptions
страницы настроек вашего приложения и включите его. Укажите URL, который будет прослушивать указанные события, затем вам нужно выбрать события, которые будет ожидать ваш бот. Я подписался на app_mention
(который будет срабатывать, когда ваш бот @), и message.channels
, который будет срабатывать при каждом сообщении, отправляемом на канал, в котором находится ваш бот.
Как только вы это сделаете, вы сможете подписаться на события ... (используя slack SDK https://slack.dev/node-slack-sdk/)
slackEvents.on('message', (event, body) => {
// do something here
console.log(`Received a message event: user ${event.user} in channel ${event.channel} says ${event.text}`);
});
В моем случае, как только я получил это сообщение (я анализирую текст для обработки нескольких команд ) Затем я использовал бы blocks
, чтобы создать сообщение с кнопкой и отправить его обратно ...
Полезная нагрузка:
channel: context.channelId,
text: "",
blocks: JSON.stringify([
{
type: "section",
text: {
type: "mrkdwn",
text: "So, you say you want to create a new task?\n*Great!*\nI just need your permission first, in order to initiate this action.\nPlease click the button below to launch this process, or cancel if you have changed your mind"
}
},
{
type: "actions",
block_id: "processAddTask",
elements: [
{
type: "button",
text: {
type: "plain_text",
emoji: true,
text: "Process"
},
style: "primary",
value: "1"
},
{
type: "button",
text: {
type: "plain_text",
emoji: true,
text: "Cancel"
},
style: "danger",
value: "0"
}
]
}
])
Затем отправить эту полезную нагрузку обратно к каналу ...
const response = await web.chat.postMessage(responseMessage);
После того, как все это будет сделано, пользователю будет предоставлена пара кнопок, и когда он нажмет на кнопку "go", он вызовет другое событие, которое вы можете поймать:
slackInteractions.action({ callbackId: 'addTaskRequest' }, (payload, respond) => {
console.log('payload', payload);
let triggerId = payload.trigger_id;
let view = payloads.addTaskModal({ triggerId });
(async () => {
try {
let result = await slackClient.callAPIMethod("views.open", view);
respond("");
} catch (error) {
if (error.code === ErrorCode.PlatformError) {
respond(error.data);
} else {
respond('Well, that was unexpected.');
}
}
})();
});