如何检测字符串并替换为用户生成的消息中的URL

Jef*_*ert 11 slack-api slack

Slack编程的新功能,不可否认,自从我开发了很多东西以来已经有一段时间了.

我正在寻找有关如何自动转换任何渠道中任何人发布的任何机票的方向,并将其转换为我们的票务系统的深层链接.

所以,也许最初的消息是这样的:

"嘿伙计们,谁正在使用Ticket#212373?"

我希望'#212373'能够自动转换为我们票务系统的链接.如果它将与目标系统中的故障单中的其他详细信息/属性一起扩展,例如客户名称,问题描述,当前状态等,则奖励积分.

任何人都可以给我一些指导,也许是向我展示目标是哪种API,是否可行,推荐方法等?

Jes*_*sse 8

2018-12-08 更新:使用 OAuth

我终于开始通过 OAuth 正确实现这一点,考虑到幕后发生的事情的复杂性,这非常简单。要完全具有您上面描述的行为,请执行以下操作:

  1. 注册一个 Slack 应用
  2. message.channels事件订阅添加到您的应用程序并设置您的请求 URL
  3. 根据 Slack 的文档设置Oauth 流程。这是生成用户令牌的过程。
  4. 指示您的用户使用“添加到 Slack ”按钮指定(至少)chat:write:user范围来授权您的 Slack 应用程序。这是允许您的应用程序实际更新用户消息的关键组件。
  5. 在步骤 2 中指定的请求 URL 处,处理message来自 Slack 的传入事件。在您(和我)的情况下,您需要解析 的text属性event,即用户发布的消息。
  6. 最后,使用在步骤 4 中生成的适当用户的访问令牌chat.update将解析(和链接)的文本发送回 Slack。
  7. 或者chat.postEphemeral当您的应用程序解析由于缺乏权限而无法更新的消息时,将机器人用户配置为发送。您可以向用户发送临时消息,让他知道他可以授权您的应用代表他链接事物。

如果您想message.channels从私人群组和/或直接消息中获取事件,则需要分别指定groups:historyim:history

请注意,message_changed如果您想维护已编辑消息中的链接,则需要额外处理事件,因为当用户直接编辑消息时,Slack 会剥离链接标签。message_changed事件的结构与包含在新message参数中的原始消息和新参数中的先前消息略有不同,previous_message但可以像简单消息一样解析和更新。

此外,您可以attachments为您的chat.update方法提供格式正确的参数,以添加您在问题中提到的其他详细信息,例如客户姓名和票证信息。

原文 2018-10-27:遗留方法,不推荐

这是可能的,但 Slack 团队并不鼓励这样做。该方法已被弃用,将来可能会被删除。

  • 在此处生成旧令牌:https : //api.slack.com/custom-integrations/legacy-tokens
  • 为要监控的频道配置传出 Webhook。
  • 向配置了传出 Webhook 的通道发布消息。
  • 解析端点上的消息。
  • 如果消息包含要链接的内容,请修改消息,然后将传入的 webhook 发送到chat.update端点,以作为上面生成的令牌进行身份验证。

我已经实现了您要求的确切行为,并且它已经完美运行了好几年。但是,请注意以下缺点:

  • 所有希望解析其消息的用户都必须生成旧令牌,并且该令牌必须以可检索的方式存储在您的端点上,Slack 不建议这样做并且可能不安全。
  • Legacy Token 具有分配给它的强大范围,并且可以在坏人手中造成一些真正的伤害。
  • 这已被弃用,将来可能会随时删除。
  • 每个传出的 webhook 都计入免费计划的集成限制,因此您可能无法覆盖每个频道。
  • 这不适用于直接消息——仅适用于公共频道。


Eri*_*ken 2

无法编辑其他用户的消息内容。因此您不能直接用链接替换 ​​Ticket #。

但是您可以做的解决方法是让您的机器人“回复”消息并使用线程系统以这种方式添加直接链接。

所以基本方法是:

  1. 使用机器人用户创建 Slack 应用程序

  2. 订阅机器人用户的消息事件

  3. Bot用户加入所有需要监控的频道

  4. Slack 应用程序接收该频道的所有消息,解析它们并回复有票证的消息#