Я создал слабое приложение с помощью сервера botkit / node.js / express.
Мой метод:
controller.on('slash_command', function(bot, message) { SOME_LOGIC }
слушает все команды косой черты на каждом канале. Теперь у моего бота (приложение Slack) есть собственный прямой канал. Я хочу, чтобы моя команда косой черты прослушивала только команды косой черты в этом конкретном канале. Можно ли ограничить команды косой черты как это? Как бы это выглядело?
Кажется, я не могу найти уникальный идентификатор для разговора напрямую с ботом приложения Slack.
Да, это возможно.
Как правило, команды с косой чертой будет работать в любом канале / разговоре, и в Slack API нет возможности ограничить их конкретными разговорами. Но вы можете добавить в свое приложение соответствующие функции, чтобы оно реагировало только на команду, поступающую из канала приложения. Вот как:
Каждый запрос команды с косой чертой от 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
равен идентификатору пользователя из текущего запроса косой черты, является правильным.
Вот пример ответа от 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.
В качестве альтернативы вы можете ответить коротким сообщением, объясняющим пользователю, что он должен использовать вашу команду косой черты в соответствующем канале. (Я бы порекомендовал этот вариант, так как он более удобен для пользователя)
Я рад помочь вам и с этим вопросом, но мне кажется, что это совершенно новая тема. Создайте для него новый вопрос. Ty.
Привет, Эрик, спасибо! Моим первоначальным вопросом был вопрос о том, как определить, общается ли пользователь напрямую со Slack-ботом.
Насколько я понимаю, этот вопрос касается только того, как ограничить команду косой черты, на что, как мне кажется, я ответил исчерпывающе. Если вы также хотите узнать о личных сообщениях, задайте другой вопрос.
Благодарю за ваш ответ! Я специально ищу, когда пользователь напрямую взаимодействует со слабым приложением через прямое сообщение. Когда я использую chatations.list, он показывает только общедоступные каналы. Есть ли способ определить, что пользователь напрямую взаимодействует с приложением?