Я экспериментирую, чтобы пользователи могли взаимодействовать с моим приложением через 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!