У меня есть бот 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
Я застрял на пару вопросов:
Как сделать ссылку на профиль пользователя, потому что я не знаю, используют ли они приложение Slack или веб-сайт Slack (таким образом, как выбрать между показом slack://user?team=&id=..
или domain.slack.com/team/{id}
подхода? Это предполагает, что я использую свойство title_link
или author_link
.
Как создать кнопку сообщения, которая откроет прямое сообщение пользователю (а еще лучше открыть его и предварительно заполнить сообщение)? В настоящее время я играю с действием ссылки, но мне не повезло.
Полагаю, я мог бы обойти это, попросив бота отправить 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
Есть несколько серьезных ограничений:
- Для нативной ссылки на прямое сообщение открывается браузер, а затем (если пользователь решает) перенаправляет обратно в приложение.
- Пользователь ДОЛЖЕН использовать окно браузера, которое уже аутентифицировано в той же рабочей области, что и собственный клиент (это огромная проблема для UX, так как у многих пользователей открыто несколько рабочих областей, и в этом случае перенаправление завершается неудачно с неочевидным сообщение об ошибке).