Да, это возможно.
В общем случае команды слеша будут работать на любом канале / диалоге, и в Slack API нет возможности ограничить их конкретными разговорами.Но вы можете добавить соответствующую функциональность в ваше приложение, чтобы оно реагировало только на команду, поступающую из канала приложения.Вот как:
1.Обнаружение правильного разговора
Каждый запрос команды слеша от Slack включает в себя идентификатор канала из разговора, в котором он возник, и идентификатор пользователя от соответствующего пользователя.(см. ниже пример команды косой черты).Вашему приложению нужно просто найти идентификатор канала, соответствующий каналу приложения, и соответственно отреагировать.
Вот пример команды косой черты (из официальной документации )
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
Чтобы получить идентификатор канала, соответствующий текущему пользователю, вы можете позвонить conversations.list
с types
, установленным на IM
, что даст вам все прямые каналы сообщений с их идентификаторами каналов вашегоприложение.Тот, где user
равен идентификатору пользователя из текущего запроса косой черты, является правильным.
Вот пример ответа от channel.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.
В качестве альтернативы, вы можете ответить коротким сообщением, объясняющим пользователю, что онследует использовать вашу команду слеш в соответствующем канале.(Я бы порекомендовал эту опцию, поскольку она более удобна для пользователя)