作为Slack机器人响应丰富的消息

时间:2017-04-26 15:16:46

标签: node.js slack-api slack

我正在开发一个包含僵尸用户的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 - 但行为是相同的,除了使用我的名字而不是机器人名称签名消息。)

1 个答案:

答案 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();