Прикрепите метаданные / пользовательские данные к слабым сообщениям, отправленным через API - PullRequest
0 голосов
/ 28 декабря 2018

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

Конкретный пример:

Предположим, у меня есть приложение "FindUser", которое способно дать мне профиль пользователя, когда слабый пользователь вводит find me@example.com, и оно отвечает в теме с форматированным представлениемпрофиль пользователя

Я занимаюсь разработкой приложения B "EditTags", которое в основном дает мне возможность щелчка правой кнопкой мыши с помощью "edit tags" (см. Интерактивные компоненты / действия Slack), идея в том, что пользователь может сначала спроситьприложение A, чтобы найти пользователя, а затем щелкните правой кнопкой мыши ответ в приложении A и выберите действие «изменить теги», заданное другим приложением.Что это приложение B делает, оно фактически извлекает теги для пользователя, упомянутого в предыдущем сообщении, из приложения A, и в другом ответе на ветку оно дает некоторые элементы управления, чтобы либо удалить существующий тег, ИЛИ оно показывает выбор с автозаполнением, чтобы добавить новые теги..

Приложение B должно получить идентификатор пользователя, о котором приложение A упоминало ранее.Поэтому мне нужен какой-то способ передать эти данные прямо в слабое сообщение.Глядя на примеры, slack не позволяет добавить произвольные «метаданные» в сообщение , я не прав? У вас есть обходной путь для этого с?Я имею в виду, что я мог бы полностью отправить ID пользователя, скажем, в нижний колонтитул, чтобы я мог просто прочитать нижний колонтитул, но я планировал использовать нижний колонтитул для чего-то еще ... Есть ли способ передать метаданные через свойства, которые будут скрытыдо конечного пользователя?

Хотя это и не кажется актуальным, я создаю приложение slack nodeJS, используя slack sdk (и особенно пакет @slack/interactive-messages)

1 Ответ

0 голосов
/ 28 декабря 2018

По большей части Slack API не предоставляет никаких официальных средств для прикрепления пользовательских данных / метаданных к сообщениям.Но с некоторыми простыми «взломами» это все еще возможно.Вот как:

Подход

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

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

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

Сериализация

Все сообщения транспортируются через HTTP и в основномзакодирован как UTF-8 в JSON.Таким образом, вы хотите сериализовать / десериализовать ваши данные соответственно, особенно если это двоичные данные.Если возможно, я бы рекомендовал использовать JSON.

Длина

Максимально допустимая длина большинства полей задокументирована в официальной документации Slack API.Например, для поля value кнопки сообщений могут содержать до 2.000 символов .Имейте в виду, что вам нужно учитывать длину ваших данных после сериализации.Например, если вы преобразуете двоичные данные в Base64, чтобы их можно было транспортировать по HTTP, вы получите около 1,33 символа на каждый байт .

Содержание

В общем, я быРекомендуем, чтобы ваш контейнер данных был как можно меньше и не содержал реальных данных, а только идентификаторы.Вот два общих подхода:

  • Включение идентификаторов ваших объектов данных и загрузка реальных объектов из хранилища данных при последующей обработке запроса.
  • Включение идентификатора сеанса сервера ипри обработке запроса вы можете восстановить соответствующий сеанс сервера, который содержит все объекты данных.Кроме того, вам может понадобиться включить функциональные значения, чтобы функциональность используемого поля все еще работала (например, значение параметра меню, см. Ниже)

Реализация

Диалоги

Диалоги предоставляют официальное поле для пользовательских данных, которое называется state.До 3000 символов.

Кнопки сообщений

Для Кнопки сообщений можно использовать поля действий сообщения / value.До 2000 символов.Также возможно использовать поле name, но я бы посоветовал против этого, поскольку максимально допустимая длина этого поля не задокументирована.

Меню сообщений

Для Меню сообщений вы можете использовать поле value параметра или поле name действия меню.

Обычно поле valueлучший подход, поскольку у вас задокументированная максимальная длина 2.000, и это дает вам большую гибкость.Однако вам нужно будет объединить ваши пользовательские данные с фактическим функциональным значением для каждой опции.Кроме того, это не будет работать для элементов динамического выбора (например, пользователей), где вы не можете управлять полем значения.

При использовании примечания к полю name имейте в виду, чтомаксимально допустимая длина name не задокументирована, поэтому вы хотите, чтобы ваши данные были как можно более короткими.Кроме того, если вы хотите использовать более одного меню для каждого вложения, вам необходимо включить фактическое имя меню в ваш контейнер данных.

Обычные вложения сообщений

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

Технически вы можете использовать поле fallback, но только если вы на 100% уверены, что ваше приложение никогда не используется на клиенте, который не может отображать вложения.В противном случае ваши данные будут отображаться пользователю.

...