Как получить идентификатор пользователя из Slack для службы ботов - PullRequest
2 голосов
/ 19 марта 2019

Я создаю простого бота с помощью Azure LUIS, и это мой первый. После некоторых исследований я добился приличного прогресса, а также интегрировал его со Slack в качестве канала для его тестирования.

Функциональность бота работает нормально, но я ищу, чтобы идентифицировать пользователя. Так что я могу персонализировать беседу с ботом, а также извлечь информацию о пользователе из его таблицы профиля.

Есть ли в любом случае, что я могу получить UID или любой ссылочный идентификатор слабого пользователя, и поэтому я могу сохранить его в своей таблице пользователя вместе с профилем пользователя?

Так что в следующий раз, когда пользователь приветствует бота, он может сказать «Привет, Джон ». вместо того, чтобы просто сказать «Привет».

Спасибо!

Ответы [ 2 ]

3 голосов
/ 21 марта 2019

Да.Вы можете использовать объект channelData для получения значений ApiToken и user.Например, в C # вы можете использовать turnContext.Activity.ChannelData для получения этих значений в JSON:

{{
  "SlackMessage": {
    "token": "............",
    "team_id": "<TEAM ID>",
    "event": {
      "type": "message",
      "text": "thanks",
      "user": "<USER WHO MESSAGED>",
      "channel": "............",
      "channel_type": "channel"
    },
    "type": "event_callback",
    "event_id": ""............",
    "event_time": 1553119134,
    "authed_users": [
      "............",
      "<USER WHO MESSAGED>"
    ]
  },
  "ApiToken": "<ACTUAL TOKEN HERE>"
}}

Затем, используя эти две части информации, вы можете затем извлечь информацию из Slack.

https://slack.com/api/users.info?token=<ACTUAL TOKEN HERE>&user=<USER WHO MESSAGED>&pretty=1

И получите ответ, в котором есть нужная вам информация:

{
    "ok": true,
    "user": {
        "id": "<USER WHO MESSAGED>",
        "team_id": "<TEAM ID>",
        "real_name": "Dana V",

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


По сути, вы можете / должны сделать это в событии onTurn.Сначала создайте свое хранилище пользовательских состояний, например здесь .

Затем вы можете проверить это значение и записать его, если оно не заполнено. Этот пример для простых подсказок может быть полезен.Вам не нужно запрашивать имя пользователя, как в этом примере, но вы можете читать / писать имя пользователя из состояния.Вы все еще можете использовать диалоги, но они вам не понадобятся для подсказки имени, поскольку вы делаете это динамически.

Вы можете увидеть здесь , где задается имя пользователя и здесь где это извлекается.В этом случае это в диалогах, но опять же;вы могли бы / могли бы просто сделать это в контексте поворота (используя логику, чтобы получить, а если нет, установить).

0 голосов
/ 23 марта 2019

Я нашел решение, напечатав весь объект сеанса, который имеет всю необходимую информацию.Это может быть таким же, как упомянуто Даной выше, но после отладки это просто, без каких-либо изменений.

var slackID = session.message.address.user.id

С выше, я могу идентифицировать пользователя.

Спасибо.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...