Discourse Chat(聊天)工具整合

本文中的内容来自于官网的内容:Discourse Chat Integration - plugin - Discourse Meta

:information_source: 聊天整合(Chat Integration) 是将一个外部的 IM 工具整合到 Discourse 中来,你可用使用聊天工具来在 Discourse 中进行聊天,请参考链接: Discourse Chat - plugin - Discourse Meta

:discourse2: 概述 Discourse 聊天整合 允许你将第三方的聊天工具整合到 Discourse 安装实例中。
:hammer_and_wrench: 仓库链接 https://src.isharkfly.com/Discource-C/discourse-chat-integration
:open_book: 安装指南 如何在 Discourse 中安装插件

特性

discourse-chat-integration 允许在 Discourse 有新的 Post 的时候发送消息发送消息到集成好的聊天工具中。

这个小时在聊天工具中是通过群消息的方式来进行处理的。

消息通知可能会因为有新的主题,新的回复或者被 AT 到的时候,消息将会作为一个即时消息发送到平台上。

聊天 IM 工具收到的消息内容大致看起来如下面的样子:

16

配置

  1. 在你的站点中,选择 chat_integration_enabled 配置,并且启用 :heavy_check_mark:
  2. 针对不同的 IM 消息平台,单击下面的链接来进行配置
    3.更多的消息,请阅读 ‘配置规则’ 部分的内容
供应商 通知消息 Slash 命令 Post 改变 主题回复
Slack :white_check_mark: :white_check_mark: :white_check_mark: :white_check_mark:
Telegram :white_check_mark: :white_check_mark:
Discord :white_check_mark:
Mattermost :white_check_mark: :white_check_mark:
Google Chat :white_check_mark:
Matrix (element.io) :white_check_mark:
Zulip :white_check_mark:
Rocket.Chat :white_check_mark:
Gitter :white_check_mark:
Flowdock :white_check_mark:
Stride Docs
Microsoft Teams :white_check_mark:
Basecamp Docs
IRC Cloud Docs
Flock Docs
Webex :white_check_mark:

名词定义

discourse-chat-integration 插件中有 3 个重要的名词定义: Providers, ChannelsRules

配置规则

进入 Discourse 安装实例的管理员界面,选择 Plugins,然后可以看到 Chat Integrations 选项,在这个选项卡下面可以看到被启用的服务供应商,选择供应商后对队则进行配置:

规则的配置有多个配置选项:

  • 类型(Type):
    • Normal - send notifications based on standard posts on the forum
    • Group Message - send notifications based on private messages which a specified group is a part of
    • Group Mention - send notifications whenever specified group is @mentioned in a standard post on the forum (mentions in private messages are ignored)
  • 过滤器(Filter):
    • All posts with threaded replies - notify for new posts matching this rule, create per-topic threads on the chat provider (not available in all integrations)
    • All posts and replies - notify for new posts matching this rule
    • First post only - notify only for new topics matching this rule
    • Tag added to topic - notify when a tag is added to a topic (the create post for category and tag changes site setting must be enabled for this to work)
    • Mute - prevent notifications matching this rule
  • 分类(Category) (if type is ‘Normal’)
    • Match posts based on their category. Leave as “(all categories)” to match all posts on the forum
  • 组(Group) (if type is ‘Group Message’ or ‘Group Mention’)
    • Specify the group you want to receive notifications for
  • 标签(Tags)
    • 输入满足要求的标签。在标签列表中, 最少需要一个 标签。如果这里留空就表示匹配所有的标签。

Multiple rules

When multiple rules match a post, the top-most rule in the user interface is executed. Rules are first sorted according to the criteria:

  1. Group mentions
  2. Group messages
  3. Normal

and then sorted within that by

  1. Mute
  2. All posts and replies
  3. First post only

For example, with the following rules

Filter Category Tags
All posts and replies Mentions of: @team (all tags)
Mute #support (all tags)
First post only #support #unsupported-install::tag
All posts and replies (all categories) (all tags)
Notifications would be triggered for
  • A post in #plugin :white_check_mark:
  • A post in #support mentioning @team :white_check_mark:

but not for

  • A post in #support :x:
  • A post in #support with tag #unsupported-install::tag :x:

安全和权限

Discourse 站点的 “chat integration discourse username” 配置参数允许你能够对发布的消息进行保护从而避免泄露个隐私信息。

在默认情况下,使用的是 system 这个意思是,在发送消息的时候是没有任何限制的。

为了保障系统的安全性,你可用创建一个非管理员用户,然后对这个用户赋予争取的访问权限,然后将用户名输入到上面的配置参数中。

Slash 命令

如果你的供应商能够支持 slash 命令,你就可以通过聊天的界面来管理相关的规则了。

不同的供应商可以使用的 Slash 命令可能会有些不同,但是从整体结构上来说是大同小异的。

需要注意的是,在当前的实现中,只有 Slack 能够支持这个命令。integration implements threads.)

可用的命令为:

Discourse 发布一个聊天记录

如果你选择的供应商支持聊天记录的发布的话,你可以选择将聊天记录发布回 Discourse。

这个功能当前只能够支持 Slack,需要注意的是,你需要使用“Access Token” 方法来配置 Slack。

使用 /discourse post 来查看界面。插件将会尝试猜你对话开始的时间,这个猜测是通过对话的时间间隔来的。

如果对话的时间间隔超过了 3 分钟,插件认为这个对话可能就是一个新的完整对话。

可选的是,你可以在命令行中指定聊天的历史记录数量,或者是第一条消息的 URL。
Alternatively, you can specify a number of posts after the command, or a URL to the first message.

为了能够载入Slack 的主题,你可以使用 /discourse post thread {url} 的方式,{url} 定义的是第一条消息的 URL,例如:

/discourse post thread https://<slackname>.slack.com/archives/C6029G78F/p1522952993000017

另外一种方式是使用 /discourse post 来指定聊天的主题的 URL:

/discourse post https://foo.slack.com/archives/G49KKS6AX/p1523062012000911?thread_ts=1523091738.000088&cid=G49KKS6AC

在上面的 2 种情况下 UI 的 “first/last message” 将会被忽略 —— 完整的聊天记录将会包含在列表中。

添加一个新的 Provider

选项1: 针对你的 Provider 提交一个 PR 实现:

选项2: 使用你自己的插件:
也可以使用一个第三方的插件来注册为一个新的 “providers”。
例如,已经创建了一个新的供应商将会发送一个 webhooks 到 IFTTT

这个将会使用自动发布功能针对所有的主题和回复到 facebook 的分类上等。或者当有东西发布的到 #feature 主题上或者是当有新的插件的时候。

1 Like