【问题标题】:Attach meta data / custom data to slack messages sent through the API将元数据/自定义数据附加到通过 API 发送的松弛消息
【发布时间】:2018-12-27 23:08:05
【问题描述】:

我正在为我的工作区开发一系列 Slack 应用,其中一些旨在与其他应用传递的内容(消息)进行交互:提取其他消息可能引用的内容 ID

一个具体的例子:

假设我有一个应用程序“FindUser”,它能够在松弛用户键入 find me@example.com 时为我提供用户配置文件,并在线程中回复用户配置文件的格式化视图

我正在开发一个应用 B“EditTags”,它基本上为我提供了一个带有“编辑标签”的右键单击选项(请参阅 Slack 的交互式组件/操作),其想法是用户可以首先要求应用 A 查找用户,然后右键单击来自 App A 的回复,然后单击其他应用程序给出的“编辑标签”操作。这个应用程序 B 的作用实际上是为来自应用程序 A 的上一条消息中提到的用户检索标签,并且在对线程的另一个回复中,它提供了一些控件来删除现有标签或显示带有自动完成功能的选择以添加新标签.

B 应用需要检索 A 应用之前提到的用户 ID。所以我需要一些方法来直接在松弛消息中传递这些数据。查看示例时,slack 似乎没有提供向消息添加任意“元数据”的方法,我错了吗? 您有解决方法吗?我的意思是我完全可以在页脚中发送用户 ID,这样我就可以阅读页脚,但我打算将页脚用于其他用途......有没有办法通过隐藏的属性传递元数据给最终用户?

虽然这并不相关,但我正在使用 node slack sdk(尤其是 @slack/interactive-messages 包)构建一个松弛的 nodeJS 应用程序

【问题讨论】:

    标签: slack slack-api


    【解决方案1】:

    在大多数情况下,Slack API 不提供任何官方方法将自定义数据/元数据附加到消息中。但是通过一些简单的“黑客”,它仍然是可能的。方法如下:

    方法

    基本方法是使用消息的现有字段作为数据的容器。显然,您想选择一个与 Slack 功能没有直接关联的字段。

    某些字段并不总是需要,因此您可以将该字段用作数据容器。或者,如果需要,您可以将该字段的功能值与您的自定义数据一起包含在数据容器中。

    例如,对于message buttons,您可以使用按钮的value 字段,并以您在原始功能中不需要它的方式构造您的代码。通常知道用户客户端是哪个按钮就足够了(通过name 字段),所以value 字段可以免费用于您的自定义数据。或者,您可以在该字段的数据容器(例如 JSON 字符串)中包含按钮的功能值以及自定义数据。

    序列化

    所有消息都通过 HTTP 传输,并且大部分以 JSON 格式编码为 UTF-8。所以你想相应地序列化/反序列化你的数据,尤其是二进制数据。如果可能的话,我会推荐使用 JSON。

    长度

    大多数字段的最大允许长度记录在官方 Slack API 文档中。例如消息按钮的value 字段最多可包含2.000 characters。请记住,您需要考虑序列化后数据的长度。例如如果您将二进制数据转换为 Base64 以便可以使用 HTTP 传输,您最终将得到大约 1.33 characters for every byte

    内容

    一般而言,我建议您的数据容器尽可能小,并且不包含实际数据,而仅包含 ID。以下是两种常见的方法:

    • 包含数据对象的 ID 并加载实际对象 在稍后处理请求时从数据存储中获取。
    • 包括服务器会话的 ID 以及在处理请求时您 可以恢复包含所有数据的相应服务器会话 对象。 此外,您可能需要包含功能值,以便您使用的字段的功能仍然有效(例如,菜单选项的值,见下文)

    实施

    对话框

    Dialogs 为自定义数据提供一个名为state 的官方字段。最多 3000 个字符。

    消息按钮

    对于Message buttons,您可以使用消息操作字段/value。最多 2.000 个字符。也可以使用name 字段,但我建议不要这样做,因为没有记录该字段的最大允许长度。

    消息菜单

    对于Message menus,您可以使用选项的value 字段或菜单操作的name 字段。

    通常value 字段是更好的方法,因为您记录的最大长度为 2.000,它为您提供了更大的灵活性。但是,您需要将自定义数据与每个选项的实际功能值结合起来。此外,这不适用于dynamic select elements(如用户),您无法控制值字段。

    使用name 字段注释时,请记住name 的最大允许长度没有记录,因此您希望数据尽可能短。此外,如果您想在每个附件中使用多个菜单,则需要在数据容器中包含菜单的实际名称。

    普通邮件附件

    普通message attachments 不包含任何适合用作自定义数据容器的字段,因为所有字段都链接到 Slack 功能。

    从技术上讲,您可以使用 fallback 字段,但前提是您 100% 确定您的应用永远不会在无法显示附件的客户端上使用。否则您的数据将显示给用户。

    【讨论】:

    • 感谢非常详细的回答!我相信“后备”字段可能是一个不错的选择,因为我正在构建的应用程序主要用于内部使用,而且我们都在使用不错的设备。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-08-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-06-24
    相关资源
    最近更新 更多