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

时间:2017-03-31 21:10:10

标签: slack-api slack

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

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

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

"嘿伙计们,他们在Ticket#212373上工作?"

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

任何人都可以给我一些指导,也许可以向我展示要定位的API,是否可行,推荐的方法等?

2 个答案:

答案 0 :(得分:2)

无法编辑其他用户的消息内容。因此,您不能直接用链接替换票证号。

但是,作为解决方法,您可以让您的机器人“回复”邮件并使用threading system以这种方式添加直接链接。

因此,基本方法是:

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

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

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

  4. Slack应用程序接收了该频道的所有消息,对其进行解析并回复带有票证#

  5. 的消息

答案 1 :(得分:2)

更新2018-12-08:使用OAuth

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

  1. Register a Slack App
  2. message.channels事件订阅添加到您的应用和set your Request URL中。
  3. 根据Slack的文档设置Oauth flow。这是生成用户令牌的过程。
  4. 使用“ Add to Slack”按钮(至少指定)chat:write:user范围,指导用户授权Slack应用。这是使您的应用程序实际更新用户消息的关键组件。
  5. 在第2步中指定的“请求URL”处,处理来自Slack的传入message事件。在您(和我)的情况下,您将需要解析text的{​​{1}}属性,该属性是用户发布的消息。
  6. 最后,使用在步骤4中生成的适当的用户访问令牌,将chat.update与经过解析(并链接)的文本发送回Slack。
  7. (可选),将漫游器用户配置为在您的应用解析由于权限不足而无法更新的消息时发送chat.postEphemeral。您可以向用户发送短暂消息,让他知道他可以授权您的应用程序代表他链接事物。

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

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

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

原始版本2018-10-27:传统方法,不推荐

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

  • 在此处生成旧版令牌: https://api.slack.com/custom-integrations/legacy-tokens
  • 为您要监视的频道配置外拨网钩。
  • 将消息发布到配置了传出Webhook的频道。
  • 在端点上解析消息。
  • 如果邮件中包含要链接的内容,请修改邮件,然后发送 到chat.update端点的传入Webhook身份验证为 上面生成的令牌。

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

  • 所有希望对其消息进行解析的用户必须生成一个Legacy Token,并且该令牌必须以可检索的方式存储在您的端点上,Slack不建议这样做,并且这可能是不安全的。
  • 旧版令牌具有强大的作用域,并可能在不当之手造成某些实际损害。
  • 已弃用此标签,以后可能会随时删除。
  • 每个传出的Webhook都计入免费计划的集成限制,因此您可能无法涵盖所有​​频道。
  • 这不适用于直接消息-仅适用于公共渠道。