Как отправить кнопку в postMessageToChannel на свободный канал и вызвать функцию нажатием кнопки? - PullRequest
0 голосов
/ 30 января 2020

Я хочу отправить кнопку в bot.postMessageToChannel () и хочу вызвать функцию (handleMessage) при нажатии этой кнопки.

//start handler
bot.on('start', () => {
    const params = {
        icon_emoji: ':information_source:'
    }

    //here i want to post a button to a channel.
    bot.postMessageToChannel(
        'ABC', //channel name
        '*Welcome to AB*...',
         params
    )
})

функция, которую я хочу вызвать,

handleMessage = (message) => {
   console.log("hello")
}

Я попробовал слабый API.

Кнопки сообщений с Node.js, но это из команд sla sh.

кнопка интерактивного сообщения просто дает мне похожие JSON данные.

1 Ответ

0 голосов
/ 12 февраля 2020

Я хотел подтвердить, что вы искали, прежде чем я ответил. Недавно я проделал нечто подобное - когда я возвращал кнопку без команды, главным образом, чтобы, когда пользователь нажимал на кнопку, у меня была 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.');
          }
        }
      })();
});
...