是的,这是可能的。
一般slash commands 可以在任何频道/对话中工作,并且 Slack API 中没有选项可以将它们限制为特定的对话。但是,您可以将适当的功能添加到您的应用程序,因此它只对来自应用程序频道的命令作出反应。方法如下:
1。检测正确的对话
来自 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,您可以调用 conversations.list 并将 types 设置为 IM,这将为您提供所有直接消息频道及其应用的频道 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 上创建任何输出。
或者,您可以回复一条短消息,向用户解释他应该在正确的频道中使用您的斜杠命令。 (我会推荐这个选项,因为它对用户更友好)