Как добавить кнопку сообщения Slack, чтобы открыть прямой чат с пользователем? - PullRequest
0 голосов
/ 14 ноября 2018

У меня есть бот Slack, который должен вернуть сообщение со списком пользователей Slack и кнопку для отправки сообщения каждому пользователю.

Я хочу, чтобы опыт взаимодействия оставался неизменным для пользователя. Если пользователь взаимодействует с ботом через настольное приложение Slack, тогда я хочу, чтобы пользователь оставался в приложении (чтобы его не отводили веб-клиенту, где он, вероятно, не прошел проверку подлинности).

Что-то вроде:

Results:

User A - click link to view User A's profile in Slack
[Message] - click button to open direct message with user A

User B - click link to view User B's profile in Slack
[Message] - click button to open direct message with user B

Я застрял на пару вопросов:

  1. Как сделать ссылку на профиль пользователя, потому что я не знаю, используют ли они приложение Slack или веб-сайт Slack (таким образом, как выбрать между показом slack://user?team=&id=.. или domain.slack.com/team/{id} подхода? Это предполагает, что я использую свойство title_link или author_link.

  2. Как создать кнопку сообщения, которая откроет прямое сообщение пользователю (а еще лучше открыть его и предварительно заполнить сообщение)? В настоящее время я играю с действием ссылки, но мне не повезло.

Полагаю, я мог бы обойти это, попросив бота отправить DM, а затем @mention первоначального пользователя. Не очень хорошо с точки зрения UX.

UPDATE

Благодаря комментариям от Адиля и Эрика, я думаю, что у меня есть лучшее возможное решение. В итоге я создал вложение для каждого результата следующим образом:

    {
        "fallback": `${user['name']} likes pizza`,
        "text": `<@${user['uid']}>`,
        "actions": [
          {
            "type": "button",
            "text": "View Pizza Profile",
            "url": url(`/directory/${user['id']}`),
            "style": "primary"
          },
          {
            "type": "button",
            "text": "Order Pizza",
            "url": `https://slack.com/app_redirect?channel=${user['uid']}`
          }
        ]
    }

Это решение обеспечивает:

  • Текстовое поле, содержащее @mention для пользователя (при нажатии на него открывается профиль в браузере или в нативном). Он использует текст в качестве заголовка сообщения (и удаляет поля автора и заголовка).
  • Ссылка на кнопку действия, чтобы открыть чат с прямым сообщением через app_redirect

Есть несколько серьезных ограничений:

  1. Для нативной ссылки на прямое сообщение открывается браузер, а затем (если пользователь решает) перенаправляет обратно в приложение.
  2. Пользователь ДОЛЖЕН использовать окно браузера, которое уже аутентифицировано в той же рабочей области, что и собственный клиент (это огромная проблема для UX, так как у многих пользователей открыто несколько рабочих областей, и в этом случае перенаправление завершается неудачно с неочевидным сообщение об ошибке).

Ответы [ 2 ]

0 голосов
/ 14 ноября 2018

Добавление к отличному ответу Adil о ссылках на профиль пользователя

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

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

Пример для пользователя U12345678:

https://slack.com/app_redirect?channel=U12345678

Вы можете предоставить эту ссылку через кнопку ссылки или текстовую ссылку.

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

Другой подход заключается в том, чтобы просто указать упоминание пользователя в вашем сообщении и позволить пользователю щелкнуть по нему, чтобы получить меню, которое включает «Прямые сообщения». Это будет работать с каждым пользователем и на любой платформе / типе клиента:

Просто включите стандартное упоминание пользователя в свой текст с некоторыми инструкциями для пользователя:

<@U12345678>
0 голосов
/ 14 ноября 2018

Чтобы создать ссылку на профиль пользователя, попробуйте выполнить действия, описанные на этой странице :

Создайте ссылку, объединив URL своей рабочей области с идентификаторами пользователей участников.Вот как это делается:

Первая часть ссылки - это URL-адрес рабочей области.Например, https://acmeco.slack.com. Вторая часть ссылки - это идентификатор пользователя.Идентификаторы пользователя для нескольких членов можно найти с помощью метода users.list API.Либо идентификатор пользователя можно найти, щелкнув значок «Дополнительные действия» в профиле участника и выбрав «Копировать идентификатор участника».Добавьте идентификатор пользователя в конец URL-адреса рабочей области.Вот пример: https://acmeco.slack.com/team/U1H63D8SZ.

Используя тот же идентификатор пользователя, используйте метод API conversations.open, чтобы создать сообщение DM / нескольких человек с цельюпользователь :

from slackclient import SlackClient

slack_token = os.environ["SLACK_API_TOKEN"]
sc = SlackClient(slack_token)

sc.api_call(
  "conversations.open",
  users=["W1234567890","U2345678901","U3456789012"]
)
...