Ограничить использование команды косой черты каналом приложения

Я создал слабое приложение с помощью сервера botkit / node.js / express.

Мой метод:

    controller.on('slash_command', function(bot, message) { SOME_LOGIC } 

слушает все команды косой черты на каждом канале. Теперь у моего бота (приложение Slack) есть собственный прямой канал. Я хочу, чтобы моя команда косой черты прослушивала только команды косой черты в этом конкретном канале. Можно ли ограничить команды косой черты как это? Как бы это выглядело?

Кажется, я не могу найти уникальный идентификатор для разговора напрямую с ботом приложения Slack.

Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Пошаговое руководство по созданию собственного Slackbot: От установки до развертывания
Шаг 1: Создание приложения Slack Чтобы создать Slackbot, вам необходимо создать приложение Slack. Войдите в свою учетную запись Slack и перейдите на...
Интеграция Slack и Spring Boot: как отправлять сообщения из Java-приложений
Интеграция Slack и Spring Boot: как отправлять сообщения из Java-приложений
Как отправлять сообщения в slack с помощью spring boot легко и без зависимостей.
1
0
1 857
1

Ответы 1

Да, это возможно.

Как правило, команды с косой чертой будет работать в любом канале / разговоре, и в 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 равен идентификатору пользователя из текущего запроса косой черты, является правильным.

Вот пример ответа от 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.

В качестве альтернативы вы можете ответить коротким сообщением, объясняющим пользователю, что он должен использовать вашу команду косой черты в соответствующем канале. (Я бы порекомендовал этот вариант, так как он более удобен для пользователя)

Благодарю за ваш ответ! Я специально ищу, когда пользователь напрямую взаимодействует со слабым приложением через прямое сообщение. Когда я использую chatations.list, он показывает только общедоступные каналы. Есть ли способ определить, что пользователь напрямую взаимодействует с приложением?

Faye Hayes 19.12.2018 06:07

Я рад помочь вам и с этим вопросом, но мне кажется, что это совершенно новая тема. Создайте для него новый вопрос. Ty.

Erik Kalkoken 19.12.2018 09:13

Привет, Эрик, спасибо! Моим первоначальным вопросом был вопрос о том, как определить, общается ли пользователь напрямую со Slack-ботом.

Faye Hayes 19.12.2018 21:06

Насколько я понимаю, этот вопрос касается только того, как ограничить команду косой черты, на что, как мне кажется, я ответил исчерпывающе. Если вы также хотите узнать о личных сообщениях, задайте другой вопрос.

Erik Kalkoken 19.12.2018 22:08

Другие вопросы по теме