我正在开发一个包含僵尸用户的Node.js松弛应用程序。但我不知道如何用丰富的消息作为机器人来响应用户。
示例:
我可以使用此代码轻松回复简单消息:
import * as SlackClient from '@slack/client';
slackBot = new SlackClient.RtmClient(bot_access_token)
slackBot.on(SlackClient.RTM_EVENTS.MESSAGE, message => {
slackBot.sendMessage('Hello', message.channel);
});
slackBot.start();
但RTM API不支持丰富的消息:
RTM API仅支持发布使用我们的默认邮件格式化模式格式化的简单邮件。它不支持附件或其他邮件格式化模式。要发布更复杂的消息,用户客户端可以调用chat.postMessage Web API方法,并将as_user设置为true。
所以我尝试使用Web客户端回复丰富的消息并转移到此代码:
import * as SlackClient from '@slack/client';
slackWebClient = new SlackClient.WebClient(access_token);
slackBot = new SlackClient.RtmClient(bot_access_token)
slackBot.on(SlackClient.RTM_EVENTS.MESSAGE, message => {
slackWebClient.chat.postMessage(message.channel, 'Hello', { attachments: myAttachments });
});
slackBot.start();
当我用我的帐户测试机器人时,这种方法正在运行。但是,如果其他团队用户将DM写入机器人,则slackWebClient.chat.postMessage
会因错误error: channel_not_found
而失败。 (我还尝试添加参数as_user: true
- 但行为是相同的,除了使用我的名字而不是机器人名称签名消息。)
答案 0 :(得分:0)
已解决:我使用 Bot用户OAuth访问令牌创建了SlackClient.WebClient
个实例,而不是 OAuth访问令牌(同时设置了as_user
为了真实)现在它按预期工作。我不知道 Bot用户OAuth访问令牌也可以用作Web API客户端的令牌。
工作代码:
import * as SlackClient from '@slack/client';
slackWebClient = new SlackClient.WebClient(bot_access_token);
slackBot = new SlackClient.RtmClient(bot_access_token)
slackBot.on(SlackClient.RTM_EVENTS.MESSAGE, message => {
slackWebClient.chat.postMessage(message.channel, 'Hello', { attachments: myAttachments, as_user: true });
});
slackBot.start();