为SaaS通知系统建立Slack集成的细节介绍

326 阅读8分钟

为你的SaaS通知系统建立Slack集成

在这篇文章中,我们为那些计划为他们的通知系统建立Slack集成的开发者提供了一些细节。

根据我们的经验,Slack通知是一种很好的方式,可以在商业用户(因为Slack主要用于商业环境)工作时,向他们发出时间敏感的警报或行动项目。因为用户已经处于工作状态,Slack通知适合于从文档和电子表格的协作到批准请求或数据访问权限等工作流程。Slack不太适合用于工作环境之外或工作时间之外的通知。

为了能够在Slack中发送消息,一个软件系统必须与Slack的API集成。由此产生的集成将允许你的应用程序向Slack频道或直接消息线程发送带有有用信息的Slack消息。下面是一个来自GitHub的Slack集成的Slack消息的例子。

这里是另一个来自Salesforce的Slack集成的例子。

许多组织在建立一个集成,从他们的SaaS产品向Slack频道或直接消息发送消息时,并不十分清楚应该期待什么。在这篇文章中,我们为那些计划为其产品建立Slack集成的开发者提供细节。

Slack集成的技术方面

从技术角度来看,Slack提供了一个相当传统的HTTP REST API,对于处理网络系统的开发人员来说,这将是一个简单易懂的东西。通过API提供的功能是广泛的,而且有复杂的部分,但大多数SaaS的Slack集成可能只需要发送消息。消息是Slack功能的核心,但我们在下面介绍了你的应用程序可能需要在Slack中采取的其他行动。

对于发送消息,Slack API文档中的发送消息指南是一个有用的起点。发送消息所需的步骤是:

  1. 创建一个Slack应用程序。
  2. 向用户申请正确的权限。
  3. 使用Slack的消息类型(或块)之一来编写消息。
  4. 通过API调用发送消息。

发送消息的主要方式是POST chat.postMessage端点,但也可以使用其他功能略有不同的端点:例如chat.postEphemeral端点,它发送的消息只对特定用户暂时可见(对错误信息等事情有帮助)。使用传入的webhook发送消息也是可能的,而且在某些情况下更容易。

除了发送消息,你可以用Slack的API实现的其他功能包括:

  • Slash命令--通过Slack DMs或频道中的命令实现简单的聊天机器人功能
  • 编辑已经发送的信息--例如,如果信息被更新了
  • 对直接提及和互动作出反应的机器人--例如,Hubot就是这样一个机器人的实现,被数百个团队使用。
  • 监测特定Slack频道或直接信息线程中的所有信息流量的机器人(由于扫描大量Slack频道中的所有信息的效率很低,所以不太常见)。

许多软件团队选择在一个专门的微服务中(如果你使用微服务架构)或至少在你的单体应用中的一个单独部分开发与Slack或其他消息服务相关的所有功能。这样做的原因是为了避免将你对通知的思考方式与Slack的API紧密耦合--当需要添加对其他消息API的支持时,这样做会导致问题。为Slack集成使用一个单独的服务或命名空间的另一个原因是实现消息重试和其他以可靠性为重点的调整。这样的代码如果包含在你的业务逻辑中就太复杂了。

根据我们的经验,在构建Slack集成时,有几点是开发者可能没有考虑到的,我们鼓励你考虑这些问题:

  1. 我们的许多用户在使用周期中的某个时间点遇到了Slack API速率限制。所以你很可能在某个时候因为速率限制而需要重试发送消息。考虑从一开始就包括重试功能。
  2. 由集成系统发送的消息可能需要包括图片或其他文件,所以要考虑你如何处理附件。Slack通过API提供方便的文件上传功能,你可以使用,而且它有内置的访问控制。但你可能更喜欢使用你自己的存储。在这种情况下,验证对文件的请求可能会变得很痛苦,因为你没有Slack的访问控制机制可依赖。
  3. 确保你的系统符合相关法规,以防你发送的通知包括PII或其他敏感数据。我们最近在*《开发者的SaaS合规性指南*》中写到了这一点--请看。

Slack集成的用户体验,我们的建议:

当我们为客户提供关于Slack集成的建议时,我们的大部分建议都不太关注实施细节,而是更关注产品功能和客户体验方面。我们看到那些正在为他们的SaaS建立Slack通知功能的团队过多地关注于发送Slack消息,而对这些通知提供给用户的价值关注不够。

在本节中,我们提供了一些关于设计有用的Slack通知体验的建议。

使用Slack状态信息以获得最佳的通知体验

我们发现,对许多客户来说,跟踪Slack状态(你在人们的资料上看到的 "活动 "和 "离开 "的小指标)是很有用的。考虑一下,如果某人在Slack中被标记为不在,你是否要发送Slack通知--他们可能不在电脑上,或者他们可能故意改变了自己的状态。你在Slack中发送的通知对在手机上的人来说是可操作的吗?对于许多SaaS应用来说,答案是否定的。

我们对处理状态的建议是,当用户在Slack中处于活动状态时,就发送Slack通知,而当他们不在活动状态时,就使用不同的渠道,如电子邮件或移动推送。我们在《为通知构建路由和首选项服务》中介绍了通知路由的话题。

创建消息模板并制定更新它们的工作流程

在SaaS产品中,你不可能只需要一种类型的Slack消息。一个应用可能需要通过Slack发送几十甚至几百条不同的通知--在你的代码库中管理如此大量的消息可能会变得很棘手。

我们建议使用模板而不是在你的应用程序中硬编码消息。你的消息模板很可能会随着时间的推移而改变,而且你可能想在开发产品时增加新的通知类型。通过更多地依赖模板,你可以简化代码审查过程--对于同行来说,审查一个单独文件中的模板变化比在模板和代码之间跳跃更容易。

另一个建议是让模板在代码审查过程之外可以编辑。这种能力将使开发团队以外的同事能够自己改变和调整通知模板,而不需要直接提交到代码库中。

翻译和语言首选项

你打算只提供一种语言的通知,还是多种语言的通知?如果你提供多种语言,用户如何配置他们的偏好?你可能想在Slack应用中添加允许用户配置其语言设置的功能,或者在你的网络应用中(Slack之外)有一个包含通知偏好的部分。在任何情况下,你都需要为每个用户存储语言偏好,并且最终也要有一个好的方法来存储通知文本的翻译版本。

我们还建议你考虑通知文本的翻译工作流程--由于权限有限或缺乏技术背景,翻译人员可能无法浏览你的代码库。让翻译人员直接使用你的通知文本将使你更快地实施新的通知语言。

让Slack集成更容易

你打算只提供一种语言的通知,还是多种语言的通知?如果你提供多种语言,用户如何配置他们的偏好?你可能想在Slack应用中添加功能,让用户配置他们的语言设置,或者在你的网络应用中(Slack之外)有一个通知偏好的部分。在任何情况下,你都需要为每个用户存储语言偏好,并且最终也要有一个好的方法来存储通知文本的翻译版本。

我们还建议你考虑通知文本的翻译工作流程--由于权限有限或缺乏技术背景,翻译人员可能无法浏览你的代码库。让翻译人员直接使用你的通知文本,将使实施新的通知语言变得更快。