Как я могу отправить результаты? Slack bolt-js, JavaScript

#javascript #bots #slack-api #slack-block-kit

Вопрос:

Дело в том, что у меня есть этот первый фрагмент кода, в котором он отправляет мне два ввода: один для добавления встречи, а второй для ее удаления. Я оставляю изображение под этим кодом, чтобы вы могли его визуализировать.

 @Command('/echo')
  async appontmentCommand({ ack, say }) {
    await ack();
    try {
      await say({
        type: 'home',
        blocks: [
          {
            type: 'section',
            text: {
              type: 'plain_text',
              text: 'Ici, vous pouvez ajouter ou supprimer votre rendez-vous manuellement.',
              emoji: true,
            },
          },
          {
            type: 'divider',
          },
          {
            type: 'section',
            text: {
              type: 'mrkdwn',
              text: 'Pour ajouter un rendez-vous.',
            },
            accessory: {
              type: 'button',
              text: {
                type: 'plain_text',
                text: 'Ajouter',
                emoji: true,
              },
              value: 'click_me_123',
              action_id: 'button-action-add',
            },
          },
          {
            type: 'section',
            text: {
              type: 'mrkdwn',
              text: 'Pour supprimer un rendez-vous',
            },
            accessory: {
              type: 'button',
              text: {
                type: 'plain_text',
                text: 'Supprimer',
                emoji: true,
              },
              value: 'click_me_123',
              action_id: 'button-action',
            },
          },
        ],
      });

      console.log('Works correctly $¤¤$');
    } catch (error) {
      console.error('error right here $¤¤$: ',error);
    }
  } 

ИЗОБРАЖЕНИЕ С РЕЗУЛЬТАТОМ ПОСЛЕДНЕГО ФРАГМЕНТА КОДА ПРЯМО ЗДЕСЬ

Когда я нажимаю на кнопку добавить, на изображении которой написано «Ajouter», открывается модал с этими метками и входными данными, и это код, который позволяет мне это сделать.

 @Action('button-action-add')
  async addAppointmentAction({ ack, body }) {
    await ack();
    try {
      const result = await this.app.client.views.open({
        token: process.env.SLACK_BOT_TOKEN,
        trigger_id: body.trigger_id,
        view: {
          type: 'modal',
          callback_id: 'view_1',
          title: {
            type: 'plain_text',
            text: 'Add rdv',
          },
          submit: {
            type: 'plain_text',
            text: 'Add',
          },
          close: {
            type: 'plain_text',
            text: 'Cancel',
            emoji: true,
          },

          blocks: [
            {
              type: 'input',
              element: {
                type: 'datepicker',
                initial_date: ''   format(new Date(), 'yyyy-MM-dd'),
                placeholder: {
                  type: 'plain_text',
                  text: 'Select a date',
                  emoji: true,
                },
                action_id: 'datepicker-action',
              },
              label: {
                type: 'plain_text',
                text: 'Day appointment',
                emoji: true,
              },
            },
            {
              type: 'input',
              element: {
                type: 'plain_text_input',
                action_id: 'plain_text_input-action',
                placeholder: {
                  type: 'plain_text',
                  text: 'Select a hour, ex: 14:30',
                  emoji: true,
                },
              },
              label: {
                type: 'plain_text',
                text: 'Time of appointment',
                emoji: true,
              },
            },
            {
              type: 'input',
              element: {
                type: 'plain_text_input',
                action_id: 'plain_text_input-action',
                placeholder: {
                  type: 'plain_text',
                  text: 'Issue',
                  emoji: true,
                },
              },
              label: {
                type: 'plain_text',
                text: 'Issue ',
                emoji: true,
              },
            },
          ],
        },
      });
      console.log(body.trigger_id);
    } catch (error) {
      console.error(error);
    }
  } 

ИЗОБРАЖЕНИЕ С РЕЗУЛЬТАТОМ ПОСЛЕДНЕГО ФРАГМЕНТА КОДА ПРЯМО ЗДЕСЬ

Но когда я нажимаю на кнопку «Отправить» (там написано «Добавить», но это кнопка sumbit), чтобы получить результаты в фоновом режиме, я получаю эту ошибку: ОШИБКА, КОТОРУЮ я ПОЛУЧАЮ

Я знаю, что вам нужно нажать, чтобы иметь возможность использовать метод view.sumbition, но я понятия не имею, как это сделать, кто-нибудь мог бы мне в этом помочь.

Ответ №1:

Чтобы прочитать полезную нагрузку модального представления, вам необходимо обработать view_submission

 // Listen for view_submission modal events
app.view(callbackId, fn);
 

Проверьте это : https://slack.dev/bolt-js/concepts#view_submissions

Технические подробности: https://github.com/slackapi/bolt-js#прослушивание событий

Комментарии:

1. Но сначала я должен надавить, не так ли?

2. Если ваше модальное окно отображается в пользовательском интерфейсе, это означает, что push был обработан. Теперь вам нужно принять значение после нажатия кнопки «Добавить» отправить. Попробуйте это и дайте мне знать, если это сработает.

3. Я не могу найти способ сделать это, поэтому я пытался сделать это до вашего последнего сообщения… Как бы ты это сделал

4. ваша функция будет выглядеть следующим образом : app.view(‘view_1’, асинхронный ({ ack, тело, представление, клиент }) => { } . вам также необходимо добавить block_id в свое представление. тогда вы можете использовать что-то вроде : const val = просмотр[‘состояние’][‘значения’][‘идентификатор блока’][‘выбор даты-действие’]