Получить идентификатор пользователя в прямом сообщении свободного канала - PullRequest
2 голосов
/ 05 марта 2020

Мы разрабатываем бот Slack, и одна из команд sla sh должна - при использовании в прямом канале сообщений - иметь возможность определять Slack-идентификатор целевого пользователя в прямом канале сообщений. Так, например, представьте 3 Slack пользователей User1, User2 и User3. Если Пользователь1 будет делать /someaction в своем канале прямых сообщений с Пользователем3, сервер Slack будет публиковать следующие атрибуты для нашей реализации команды /someaction:

token
team_id
team_domain
channel_id
channel_name=directmessage
user_id
user_name=User1
command=%2Fsomeaction
text=
response_url=https%3A%2F%2Fhooks.slack.com%2Fcommands%2/........
trigger_id=....

user_id/user_name - те, что из человек дал команду, так что User1 в этом случае.

Чтобы получить user_id пользователя 3, мы используем conversations.info API, где мы передаем channel_id, предоставленный команде /someaction выше.

Теперь проблема в том, что когда Пользователь1 запускает команду в Slack, она работает, но когда Пользователь2 делает это (в своем прямом канале сообщений с Пользователем3), она не работает. Мы заметили, что предоставленный channel_id отличается между вызовами User1 и User2, что имеет смысл, поскольку оба имеют свой собственный прямой канал сообщений с User3

Ответ от User2

curl https://slack.com/api/conversations.info?token=TOKEN\&channel=D0123456G&pretty=1
{
    "ok": false,
    "error": "channel_not_found"
}

Вопросы:

  1. Почему это работает для User1, но не для User2? Единственное, что мы можем себе представить, это то, что User1 развернул приложение Slack в рабочей области Slack. Но это не должно влиять на это поведение или оно должно быть?

  2. Есть ли другой способ получить идентификатор пользователя целевого пользователя прямого канала сообщений на основе channel_id этого прямого канала сообщений ?

1 Ответ

2 голосов
/ 05 марта 2020

Причина, по которой этот подход не работает в канале прямых сообщений между Пользователем 2 и Пользователем 3, заключается в том, что ваше приложение не имеет доступа к этому каналу, и поэтому вы получаете channel not found при вызове conversations.info на этом канале.

И у него нет доступа, потому что он был установлен Пользователем 1, и поэтому приложение может видеть только те каналы, к которым у Пользователя 1 есть доступ. Это связано с тем, как работает архитектура безопасности в Slack.

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

...