Обработка взаимодействия с пользователем - сообщение о нажатии кнопки не похоже на документированное - PullRequest
1 голос
/ 30 апреля 2020

Я экспериментирую, чтобы пользователи могли взаимодействовать с моим приложением через Slack. До сих пор мне удавалось создать домашнее приложение, чтобы при нажатии пользователем на приложение отображалась аккуратная страница с форматированным текстом, изображениями и некоторыми кнопками действий (созданными с помощью Block Kit).

То, что я не в состоянии сделать, это обрабатывать взаимодействия с пользователем, особенно когда пользователь нажимает одну из кнопок. Я заставил Slack вызвать API моего приложения, но полученное сообщение абсолютно не связано с документацией.

В Slack я настроил интерактивность и ярлыки, отправив все запросы на https://slack-interaction-sample.xpto.com/slack/v1/actions.

Затем я отправляю сообщение Slack, используя Block Kit, содержащее простую кнопку:

"blocks": [
              {
                "type": "section",
                "text": {
                  "type": "mrkdwn",
                  "text": `*JT*\nBackend Developer @ ${  currentTime  }`
                },
                "accessory": {
                  "type": "image",
                  "image_url": "https://i.pinimg.com/474x/fb/b5/b6/fbb5b6798f31538f2497e7ceb2b52674.jpg",
                  "alt_text": "JT"
                }
              },
              {
                "type": "actions",
                "elements": [
                  {
                    "type": "button",
                    "text": {
                      "type": "plain_text",
                      "text": "Do Stuff",
                      "emoji": true
                    },
                    "style": "primary",
                    "value": "doStuff"
                  }
                ]
              }
]

Это сообщение правильно отображается в Slack. Когда я нажимаю кнопку, Slacks отправляет запрос на настроенный URL-адрес, и на моем экземпляре nodejs выполняется следующий код:

app.post("/slack/v1/actions", function(req, res) {
  console.log("**********************************************************");
  console.log("/slack/v1/actions");
  console.log("**********************************************************");
  console.log("Request: %s",req);

  res.status(200);
  res.json({});
  console.log("**********************************************************");
});

В соответствии с документацией Slack (https://api.slack.com/interactivity/handling) я должен получить параметр payload с чем-то вроде этого:

[
  {
    "action_id": "action-id-0",
    "block_id": "/RXP",
    "text": {
      "type": "plain_text",
      "text": "Ask",
      "emoji": true
    },
    "value": "approve",
    "style": "primary",
    "type": "button",
    "action_ts": "1588254893.249857"
  }
]

Вместо этого я получаю следующее:

IncomingMessage {
   _readableState: [ReadableState],
   readable: true,
   _events: [Object: null prototype],
   _eventsCount: 1,
   _maxListeners: undefined,
   socket: [Socket],
   connection: [Socket],
   httpVersionMajor: 1,
   httpVersionMinor: 1,
   httpVersion: '1.1',
   complete: false,
   headers: [Object],
   rawHeaders: [Array],
   trailers: {},
   rawTrailers: [],
   aborted: false,
   upgrade: false,
   url: '/slack/v1/actions',
   method: 'POST',
   statusCode: null,
   statusMessage: null,
   client: [Socket],
   _consuming: false,
   _dumped: false,
   next: [Function: next],
   baseUrl: '',
   originalUrl: '/slack/v1/actions',
   _parsedUrl: [Url],
   params: {},
   query: {},
   res: [ServerResponse],
   body: {},
   route: [Route],
   [Symbol(kCapture)]: false
}:
´´´

Any ideas on what I am doing wrong?

Thank you!
...