Публикация сообщения с помощью 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, где вы можете увидеть свой токен рабочей области, перечисленный в верхней части страницы - сохраните его для дальнейшего использования.

SLACK API ССЫЛКА

Этот код будет работать как положено:

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);
});
Другие вопросы по тегам