Python Slack Bot не будет публиковать в личных сообщениях - PullRequest
0 голосов
/ 28 января 2019

Я написал Slack Bot на Python, и он работает, как задумано, когда я использую команду слэша в канале чата, но когда я пытаюсь взаимодействовать с ботом в прямом сообщении с другим пользователем, ответ никогда не отображается,Однако, когда я просматриваю журналы приложений, я все еще получаю POST от Slack, поэтому мое приложение получает ответ и отправляет ответ обратно.

У меня включены следующие разрешения:

  • Отправлять сообщения как [MyBotName]
  • Отправлять сообщения как пользователь
  • Публиковать на определенных каналах в Slack
  • Добавить пользователя бота с именем пользователя @mybotname
  • Добавление команд косой черты и добавление действий к сообщениям (и просмотр соответствующего содержимого)
  • Просмотр некоторых URL-адресов в сообщениях
  • Добавление предварительного просмотра ссылок к сообщениям

В моем коде, Я делаю следующее api_call:

slack_client.api_call(
        "chat.postMessage",
        channel=[channelId],
        attachments=[],
        unfurl_links=True,
        unfurl_media=True,
        as_user=True
    )

Регистрация показывает, что я получаю правильный ChannelId независимо от того, является ли это каналом или прямым сообщением.

Мой вопрос: мне не хватает разрешения или команды в моем slack_client.api_call?

1 Ответ

0 голосов
/ 28 января 2019

Ваш подход не будет работать для прямых каналов и, честно говоря, не для некоторых частных каналов.

Причина заключается в одной из основных функций безопасности Slack: ваш пользователь бота или владелец токена вашего приложения (например,установщик приложения) должен быть участником прямого или частного канала, чтобы ваше приложение / бот имели доступ к этому каналу, например, могли отправлять на него сообщения.Никакие настройки или области действия разрешений не могут изменить это.

Хотя для вашей конкретной ситуации есть простое решение: вместо отправки сообщения через API просто ответьте непосредственно на запрос команды слеша из Slack.Это будет работать для любого канала, включая прямые и частные каналы.

Ответ работает аналогично отправке сообщений через API, и вы можете использовать обычный текст или JSON.См. Ответ на команды в официальной документации по синтаксису.

Вот пример полного сообщения с вложением.Обратите внимание, что вам нужно установить заголовок содержимого в JSON:

{
    "text": "It's 80 degrees right now.",
    "attachments": [
        {
            "text":"Partly cloudy today and tomorrow"
        }
    ]
}
...