Свободная подписка на присутствие пользователя с помощью Botkit startRtm - PullRequest
0 голосов
/ 24 мая 2018

Я пытаюсь выяснить, как подписаться на изменения присутствия в Slack с помощью вызова startRTM Botkit.В настоящее время я использую начальный слабый бот Botkit , в котором есть скрипт rtm_manager для обработки всех запусков и закрытий rtm.

bot.startRTM(function(err, bot) {
   ...do stuff
});

Я изучил новый способ подписки Slack на события присутствия и понял, что мне нужно отправить параметр sence_sub или batch_presence_aware , чтобыподписаться на событие sence_change .

Я также просмотрел документацию для клиента rtm node-slack-sdk для обработки обновлений присутствия, который использует сам rtm.start

rtm.start({
   batch_presence_aware: true
}); 

.Я использую Botkit, который использует метод startRTM, я изо всех сил пытаюсь понять, как объединить всю эту информацию. Есть ли документация или примеры для подписки на обновления присутствия при использовании метода startRTM от Botkit?

1 Ответ

0 голосов
/ 07 июня 2018

Я думаю, что сначала мы должны разделить две концепции: presence_sub и batch_presence_aware.

  1. presence_sub - это тип сообщения RTM, который ваше приложение может отправить в Slack, чтобы указатьдля каких пользователей ваш клиент хотел бы, чтобы обновления присутствия касались.

  2. batch_presence_aware - это аргумент, который ваше приложение может установить при вызове rtm.start, если вы хотите, чтобы обновления присутствия о разных пользователяхбыть сгруппированы в одно сообщение.Каждое обновление приходит как presence_change событие.Компромисс в том, что ваше приложение может не получить presence_change как можно скорее, но оно будет иметь дело с меньшим количеством сообщений, которые могут повысить производительность.Это необязательно, но рекомендуется.

«Новый способ», на который вы ссылаетесь, - это изменение поведения с января 2018 года. До изменения ваше приложение могло иметь передал presence_sub аргумент rtm.start, который позволил бы вашему соединению получать presence_change события только для тех пользователей, которые были указаны в последнем presence_sub сообщении;в противном случае ваше приложение получит эти обновления для каждого пользователя в рабочей области.После изменения presence_sub=true для всех соединений, что фактически означает, что ваше приложение должно отправить сообщение presence_sub, чтобы получить любые presence_change события.


Теперь давайте пройдемсякак вы можете использовать эту информацию в Botkit.

  1. Настройте контроллер для отправки сообщений через RTM.

    var controller = Botkit.slackbot({
      // ...
      send_via_rtm: true,
    });
    

    В репозитории для начинающих контроллер создается вbot.js и уже содержит несколько параметров в bot_options.Вам нужно будет указать опцию send_via_rtm, чтобы отправленные сообщения проходили через RTM.К сожалению, у Botkit нет API, который позволил бы вам использовать batch_presence_aware, о котором я знаю.Если это то, что вы хотите, я рекомендую открыть вопрос о проекте.

  2. Настройка подписок присутствия для пользователей, которым вы хотите получать обновления.

    controller.say({
      type: "presence_sub",
      ids: [
        "U061F7AUR",
        "W123456"
      ]
    });
    

    You 'Я хочу сделать это как можно раньше в вашей программе.В начальном репозитории вы можете сгруппировать этот и следующий шаг в «навык», поэтому хорошим вариантом будет размещение его в новом файле в этом каталоге внутри экспортируемой функции.Обратите внимание, что вам понадобится список идентификаторов пользователей, для которых вы хотите подписки.Это зависит от вас, как вы хотели бы получить этот список. Вы также хотите выполнить то же действие с полным списком пользователей, каждый раз, когда вы хотите добавить или удалить подписку.

  3. Прослушивание изменений присутствияevents

    controller.on('presence_change', (bot, event) => {
      // `event` contains presence information
      console.log(event);
    });
    

    Как только пользователь, для которого вы настроили подписку на присутствие, изменит статус присутствия, вы получите событие в этом обратном вызове.Точная структура описана здесь: https://api.slack.com/events/presence_change.

...