Публикация сообщения с помощью Slack RTM api
Я следую учебному пособию здесь https://slackapi.github.io/node-slack-sdk/bots, и я сбит с толку, почему я не могу заставить эту часть учебного кода работать. Я скопировал и вставил код из этого раздела, который ниже
var RtmClient = require('@slack/client').RtmClient;
var RTM_CLIENT_EVENTS = require('@slack/client').CLIENT_EVENTS.RTM;
var bot_token = process.env.SLACK_BOT_TOKEN || ''; //I know the problem is not here.
var rtm = new RtmClient(bot_token);
rtm.start();
var channel = "#general"; //could also be a channel, group, DM, or user ID (C1234), or a username (@don)
// you need to wait for the client to fully connect before you can send messages
rtm.on(RTM_CLIENT_EVENTS.RTM_CONNECTION_OPENED, function () {
rtm.sendMessage("Hello!", channel);
});
Так как первый раздел учебного кода работал, проблема определенно исходит из последних 3 строк кода. Предположительно это проблема с событием. Мое сообщение об ошибке
Unhandled rejection Error
at RTMClient.handleMessageAck [as _handleMessageAck] (/Users/mg/projects/slack_projects/games/s
lack_connect_four/node_modules/@slack/client/lib/clients/rtm/client.js:496:40)
at RTMClient._handleWsMessageViaEventHandler (/Users/mg/projects/slack_projects/games/slack_con
nect_four/node_modules/@slack/client/lib/clients/rtm/client.js:459:12)
at RTMClient.handleWsMessage (/Users/mg/projects/slack_projects/games/slack_connect_four/node_m
odules/@slack/client/lib/clients/rtm/client.js:419:10)
at WebSocket.wrapper (/Users/mg/projects/slack_projects/games/slack_connect_four/node_modules/l
odash/lodash.js:4968:19)
at emitTwo (events.js:106:13)
at WebSocket.emit (events.js:191:7)
at Receiver.ontext (/Users/mg/projects/slack_projects/games/slack_connect_four/node_modules/ws/
lib/WebSocket.js:841:10)
at /Users/mg/projects/slack_projects/games/slack_connect_four/node_modules/ws/lib/Receiver.js:5
36:18
at Receiver.applyExtensions (/Users/mg/projects/slack_projects/games/slack_connect_four/node_mo
dules/ws/lib/Receiver.js:371:5)
at /Users/mg/projects/slack_projects/games/slack_connect_four/node_modules/ws/lib/Receiver.js:5
08:14
at Receiver.flush (/Users/mg/projects/slack_projects/games/slack_connect_four/node_modules/ws/l
ib/Receiver.js:347:3) at Receiver.finish (/Users/mg/projects/slack_projects/games/slack_connect_four/node_modules/ws/
lib/Receiver.js:541:12)
at Receiver.expectHandler (/Users/mg/projects/slack_projects/games/slack_connect_four/node_modu
les/ws/lib/Receiver.js:499:31)
at Receiver.add (/Users/mg/projects/slack_projects/games/slack_connect_four/node_modules/ws/lib
/Receiver.js:103:24)
at TLSSocket.realHandler (/Users/mg/projects/slack_projects/games/slack_connect_four/node_modul
es/ws/lib/WebSocket.js:825:20)
at emitOne (events.js:96:13)
Я был бы очень признателен за любую помощь.
3 ответа
Это сообщение может быть старым, но я хотел бы поделиться своим опытом с этой ошибкой. Я тоже тестировал этот код и использовал частный канал. Даже если бот уже является участником канала, он выдает эту ошибку. Затем я попытался использовать общедоступный канал, после чего все прошло. Надеюсь, это поможет.
Возможно, ваш бот не присоединился к #general
канал еще. Пригласи его на канал первым.
Вы не можете использовать имена каналов, имена пользователей или идентификаторы пользователей. Вместо этого используйте идентификаторы каналов / групп /DM.
Изменить:
var channel = "#general";
Для того, чтобы:
var channel = "C--------";
Вы можете получить идентификатор этого канала с URL вашего канала:
https://yourworkspace.slack.com/messages/C-------/details/
И ваш бот должен быть добавлен в целевой канал, как подробно описано здесь:
- На странице настроек вашего приложения щелкните элемент настроек OAuth & Permissions в меню навигации.
- В разделе Scopes добавьте область действия chat:write write, затем нажмите Save Changes.
- Теперь, когда вы изменили области действия для своего приложения, вам нужно будет установить его снова - в верхней части экрана вы увидите желтый баннер, указывающий, что нужно щелкнуть здесь, чтобы переустановить приложение. Нажмите на нее и просмотрите страницу авторизации разрешений.
- Вы будете перенаправлены обратно на страницу OAuth & Permissions, где вы можете увидеть свой токен рабочей области, перечисленный в верхней части страницы - сохраните его для дальнейшего использования.
Этот код будет работать как положено:
var RtmClient = require('@slack/client').RtmClient;
var CLIENT_EVENTS = require('@slack/client').CLIENT_EVENTS;
var rtm = new RtmClient('.....'); // your token
rtm.start();
let channel = 'C--------' ; //your channel
rtm.on(CLIENT_EVENTS.RTM.RTM_CONNECTION_OPENED, function () {
rtm.sendMessage("Hello stack!", channel);
});