Команда Slack sla sh не работает в каналах publi c, если к ним не добавлено вручную - PullRequest
1 голос
/ 25 февраля 2020

Я не уверен, сколько деталей предоставить, но я постараюсь поместить все, что мне кажется уместным.

У меня есть команда sla sh, которую я делаю с некоторыми логиками c с помощью AWS Lambda и API Gateway. Я использую модуль python slackclient и через это я отправляю сообщения обратно в резерв с WebClient. Чтобы уточнить, я использую новую систему бот-токенов, которую разработала Slack, а не classic bot.

Насколько я понимаю, использование веб-крюка для отправки сообщений по всем каналам в рабочей области очень болезненно. , как веб-крючок предоставляется на канал. Поэтому я использую WebClient для взаимодействия со Slack и отправки сообщений по каналам publi c. Проблема в том, что если я не добавлю свое приложение в канал, команда не будет работать. Журналы Cloudwatch показывают мне, что события идут очень хорошо, так как я вижу событие в порядке. Я также вижу следующий журнал, используя sys.exc_info():
(<class 'slack.errors.SlackApiError'>, SlackApiError("The request to the Slack API failed.\nThe server responded with: {'ok': False, 'error': 'not_in_channel'}"), <traceback object at 0x7ff4a0dc32c0>)

Исходя из этого, мне кажется, что отправка сообщения обратно в каналы, в которые я не добавил это приложение, не кажется, работает, но я не уверен, какие разрешения OAuth / области были бы необходимы для этого. Я включил следующие области действия для токена бота:

  • channels:read
  • chat:write
  • commands

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

Короче говоря, мое желаемое поведение чтобы добавить это приложение в мое рабочее пространство и немедленно получить от него ответ на команду sla sh, независимо от того, из какого publi c канала была вызвана команда sla sh.
Текущее поведение заключается в том, что приложение способен получать данные о событиях со всех опубликованных каналов c, когда из любого из них вызывается команда sla sh, но не может отправлять сообщения по каналам, в которых вызывается команда, если она не находится в канале.

Любая помощь будет принята с благодарностью!

Ответы [ 2 ]

1 голос
/ 27 февраля 2020

Я отправил Slack справку, и оказалось, что эта функция пока недоступна с новыми детальными разрешениями бота. Согласно этой документации Slack :

В настоящее время ваше приложение должно быть участником любого канала, на который он хочет публиковать сообщения. Чтобы присоединиться к каналу, запросите каналы: присоединитесь к области действия и вызовите метод Discussions.join Однако вскоре приложения смогут публиковать сообщения в любом опубликованном канале c, не получая дополнительного доступа к каналу, запрашивая новую область.

Похоже, это не будет проблемой когда функциональность добавлена ​​Slack.

0 голосов
/ 02 апреля 2020

Для людей, мигрирующих приложения из устаревшей области: bot, новая область теперь готова.

Добавьте chat:write.public к вашему Bot Token Scopes, и ошибка not_in_channel больше не будет возвращаться для публикации c каналов.

enter image description here

Хорошая новость: с двумя особыми областями вы можете получить эти способности, явно запросив их. Запросите чат: write.publi c scope и chat: write.customize scope, соответственно, чтобы получить возможность публиковать сообщения на всех каналах publi c и настроить авторство сообщений вашего приложения.

https://api.slack.com/authentication/quickstart#public

...