Как отправить сообщения канала с вводом данных из модов Slack - PullRequest
0 голосов
/ 03 мая 2020

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

    app.command('/spotkanie', async ({ ack, body, context }) => {
      // Acknowledge the command request
      await ack();

      try {
        const result = await app.client.views.open({
          token: context.botToken,
          // Pass a valid trigger_id within 3 seconds of receiving it
          trigger_id: body.trigger_id,
          // View payload
          view_id: "view_spotkanie",
          user_id: "user",
          view: {
        "type": "modal",
      "callback_id": "zaplanuj-spotkanie",  
        "title": {
            "type": "plain_text",
            "text": "Zaplanuj spotkanie",
            "emoji": true
        },
        "submit": {
            "type": "plain_text",
            "text": "Wyślij",
            "emoji": true
        },
        "close": {
            "type": "plain_text",
            "text": "Anuluj",
            "emoji": true
        },
        "blocks": [
            {
                "type": "input",
                "element": {
                    "type": "datepicker",
            "action_id": "data",
                    "placeholder": {
                        "type": "plain_text",
                        "text": "To wspaniały dzień na spotkanie!",
                        "emoji": true
                    }
                },
                "label": {
                    "type": "plain_text",
                    "text": "Data",
                    "emoji": true
                }
            },
            {
                "type": "input",
                "element": {
                    "type": "plain_text_input",
            "action_id": "godzina",
                    "placeholder": {
                        "type": "plain_text",
                        "text": "O której godzinie będzie spotkanie?",
                        "emoji": true
                    }
                },
                "label": {
                    "type": "plain_text",
                    "text": "Godzina",
                    "emoji": true
                }
            },
            {
                "type": "input",
                "element": {
                    "type": "static_select",
            "action_id": "rodzaj",
                    "placeholder": {
                        "type": "plain_text",
                        "text": "Jaki jest rodziaj spotkania?",
                        "emoji": true
                    },
                    "options": [
                        {
                            "text": {
                                "type": "plain_text",
                                "text": "spotkanie ogólne",
                                "emoji": true
                            },
                            "value": "value-0"
                        },
                        {
                            "text": {
                                "type": "plain_text",
                                "text": "spotkanie projektowe",
                                "emoji": true
                            },
                            "value": "value-1"
                        },
                        {
                            "text": {
                                "type": "plain_text",
                                "text": "spotkanie integracyjne",
                                "emoji": true
                            },
                            "value": "value-2"
                        }
                    ]
                },
                "label": {
                    "type": "plain_text",
                    "text": "Rodzaj spotkania",
                    "emoji": true
                }
            },
            {
                "type": "input",
                "element": {
                    "type": "plain_text_input",
            "action_id": "miejsce",
                    "placeholder": {
                        "type": "plain_text",
                        "text": "Gdzie odbędzie się spotkanie?",
                        "emoji": true
                    }
                },
                "label": {
                    "type": "plain_text",
                    "text": "Miejsce",
                    "emoji": true
                }
            },
            {
                "type": "input",
          "optional": true,
                "element": {
                    "type": "plain_text_input",
            "action_id": "dodatkowe info",
              "placeholder": {
                        "type": "plain_text",
                        "text": "Wpisz dodatkowe informacje, takie jak agenda, link do spotkania itp",
                        "emoji": true
                    },
                    "multiline": true
                },
                "label": {
                    "type": "plain_text",
                    "text": "Więcej informacji",
                    "emoji": true
                }
            },
        {
            "block_id": "my_block_id",
            "type": "input",
              "label": {
              "type": "plain_text",
              "text": "Wyślij do",
            },
            "element": {
              "action_id": "channel_id",
              "type": "channels_select",
              "response_url_enabled": true,
                "placeholder": {
                          "type": "plain_text",
                          "text": "Gdzie wysłać powiadomienie o spotkaniu?",
                          "emoji": true
                    }
            }
          }
        ]

    }
        });
    console.log(result);
      }
      catch (error) {
        console.error(error);
      }
    });

    app.view('zaplanuj-spotkanie', async ({ ack, body, view, context, say }) => {

Теперь этот app.view должен дать мне доступ к входным данным, в соответствии с инструкциями Slack, но я до сих пор не знаю, как его использовать.

1 Ответ

1 голос
/ 06 мая 2020

для получения входного текста от модального пользователя. Используйте Slack Interactive Messages.

// Example of handling a simple view submission
slackInteractions.viewSubmission('simple_modal_callback_id', (payload) => {
  // Log the input elements from the view submission.
  console.log(payload.view.state);

  // The previous value is an object keyed by block_id, which contains objects keyed by action_id,
  // which contains value properties that contain the input data. Let's log one specific value.
  console.log(payload.view.state.my_block_id.my_action_id.value);

  // Validate the inputs (errors is of the shape in https://api.slack.com/surfaces/modals/using#displaying_errors)
  const errors = validate(payload.view.state);

  // Return validation errors if there were errors in the inputs
  if (errors) {
    return errors;
  }

  // Process the submission
  doWork();
});

здесь есть ссылка https://slack.dev/node-slack-sdk/interactive-messages, а также для отправки любой информации пользователю, использующему чат. почтовый метод. вот ссылка https://api.slack.com/methods/chat.postMessage

...