我使用botkit / node.js / express服务器创建了一个松弛的应用程序。
我的方法:
controller.on('slash_command', function(bot, message) { SOME_LOGIC }
侦听每个通道中的所有斜杠命令。现在,我的机器人(松弛应用)拥有自己的直接渠道。我希望我的slash命令仅侦听该特定通道中的斜杠命令。有可能限制斜杠命令吗?会是什么样?
我似乎找不到直接与slack app bot通话的唯一标识符。
答案 0 :(得分:1)
是的,那是可能的。
通常slash commands可以在任何频道/会话中使用,并且Slack API中没有选项可以将它们限制为特定的会话。但是,您可以将适当的功能添加到您的应用程序,因此它仅对来自应用程序通道的命令做出反应。方法如下:
来自Slack的每个斜杠命令请求都包括来自发出该会话的对话的通道ID和来自相应用户的用户ID。 (参见下面的斜杠命令示例)。您的应用只需查找与该应用频道相对应的频道ID,并做出相应的反应。
以下是斜杠命令的示例(来自official documentation)
token=gIkuvaNzQIHg97ATvDxqgjtO
&team_id=T0001
&team_domain=example
&enterprise_id=E0001
&enterprise_name=Globular%20Construct%20Inc
&channel_id=C2147483705
&channel_name=test
&user_id=U2147483697
&user_name=Steve
&command=/weather
&text=94070
&response_url=https://hooks.slack.com/commands/1234/5678
&trigger_id=13345224609.738474920.8088930838d88f008e0
要获取与当前用户对应的频道ID,您可以在types
设置为IM
的情况下调用conversations.list
,这将为您提供所有直接消息频道及其应用程序的频道ID 。 user
等于当前斜杠请求中的用户ID的那个是正确的。
以下是来自channels.list的直接消息响应示例:
{
"ok": true,
"channels": [
{
"id": "D0G9QPY56",
"created": 1449709280,
"is_im": true,
"is_org_shared": false,
"user": "USLACKBOT",
"is_user_deleted": false,
"priority": 0
},
{
"id": "D1KL59A72",
"created": 1466692204,
"is_im": true,
"is_org_shared": false,
"user": "U0G9QF9C6",
"is_user_deleted": false,
"priority": 0
}
}
此外,您还需要响应其他会话中的斜杠命令请求,否则将在Slack上收到超时错误。
对于那些您可以使用空主体和HTTP代码200进行响应,这将不会在Slack上创建任何输出。
或者,您可以通过一条简短的消息来回应用户,说明他应该在适当的通道中使用您的斜杠命令。 (我建议您使用此选项,因为它对用户更友好)