我使用 botkit/node.js/express 服务器创建了一个 slack 应用程序。
我的方法:
controller.on('slash_command', function(bot, message) { SOME_LOGIC }
监听每个 channel 中的所有斜杠命令。现在,我的机器人(slack 应用程序)拥有自己的直接 channel 。我希望我的斜杠命令仅监听该特定 channel 中的斜杠命令。是否可以像这样限制斜杠命令?它会是什么样子?
我似乎找不到直接与 Slack 应用程序机器人对话的唯一标识符。
最佳答案
是的,这是可能的。
一般slash commands将在任何 channel /对话中工作,并且 Slack API 中没有选项将它们限制为特定对话。但是,您可以向应用程序添加适当的功能,因此它仅对来自应用程序 channel 的命令使用react。方法如下:
1。检测正确的对话
来自 Slack 的每个斜杠命令请求都包含发出该命令的对话中的 channel ID 以及相应用户的用户 ID。 (请参阅下面的斜杠命令示例)。您的应用程序只需要查找与应用程序 channel 对应的 channel ID 并做出相应的 react 。
这是斜杠命令的示例(来自 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
获取当前用户对应的 channel ID可以调用 conversations.list
将 types
设置为 IM
,这将为您提供所有直接消息 channel 及其应用的 channel 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
}
}
2。回复其他对话
此外,您还需要响应来自其他对话的斜线命令请求,否则您将在 Slack 上收到超时错误。
对于这些,您可以使用空正文和 HTTP 代码 200 进行响应,这不会在 Slack 上创建任何输出。
或者,您可以回复一条短消息,向用户解释他应该在正确的 channel 中使用您的斜杠命令。 (我推荐这个选项,因为它对用户更友好)
关于slack - 将斜杠命令的使用限制为应用程序 channel ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53824827/