6

Artalk安装和搭配Message-Pusher实现企业微信评论通知

 9 months ago
source link: https://1900.live/artalk-message-pusher-wework-comment-notification/
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
neoserver,ios ssh client

Artalk 安装和搭配 Message-Pusher 实现企业微信评论通知

发布者:1900

Dec 18, 2023

Posted in 工具箱 , 分享 , 自托管

参与评论

Twiko 是我自 iDisqus 后用的最久的一个自托管评论程序了,期间也没少对它做过折腾,比如 用 emoji-mart 替换 twikoo 的 emoji 选择器 等等。但是作者从几年前开始就不怎么做更新了,期间只有一些缝缝补补的小更新,整个界面依旧十分原始。

这些年也时常有不同的评论程序出现在视野里,包括但不限于以下几个,我还在我的数字花园上使用过其中的 Giscus,不过当时我的 Garden 只运营了一段时间就没维护了,没有深度使用,不过这类基于 Github 的都必须要登录才能评论还是觉得不太「自由」:

最后看来看去还是决定使用 Artalk,​其实早在以前那台 VPS 上的时候就一直想从 Twikoo 换成 Artalk,不过觉得又要去做主题适配、又要做数据转移,太过麻烦,一直没下手,这次搬家索性就把这事给一并给办了。

Artalk 支持 Docker 运行,安装自然就非常简单了,我的 docker-compose 配置文件如下:

version: '3'
services:
  artalk:
    container_name: artalk
    image: artalk/artalk-go
    ports:
      - "2336:2336"
    volumes:
      - /test/data/artalk-data:/data
    restart: always

运行完毕后再通过下面的代码手动创建管理员账号:

docker exec -it artalk artalk admin

并在前端页面上引入对应的 css 和 js 后,设置好初始化函数即可运行:

<!-- CSS -->
<link href="http://your_domain:8080/dist/Artalk.css" rel="stylesheet">

<!-- JS -->
<script src="http://your_domain:8080/dist/Artalk.js"></script>

<!-- Artalk -->
<div id="Comments"></div>
<script>
Artalk.init({
  el:        '#Comments',                // 绑定元素的 Selector
  pageKey:   '/post/1',                  // 固定链接 (留空自动获取)
  pageTitle: '关于引入 Artalk 的这档子事',  // 页面标题 (留空自动获取)
  server:    'http://your_domain:8080',  // 后端地址
  site:      'Artalk 的博客',             // 你的站点名
})
</script>
Artalk.init 内的 pagekek、pagetitle 可以不填。
然后在评论框输入后台创建管理员时设置的用户名和邮箱,会自动弹出管理密码输入界面,输入密码后评论框右下侧会出现「控制中心」字样,点击即可打开评论系统侧边栏了,在侧边栏里添加站点。

数据异常处理

之后就是去 Twikoo 的后台将评论数据导出,并通过 Artalk 提供的 数据迁移工具 转换数据格式后导入。

但是,在导入后我发现最新的文章评论数据多出了很多我博客的早期评论,其中最早的都可以追溯到 2017 年了,而同样的文章,在 Twikoo 中却只有几条数据,这明显是有问题的。

之后我通过比对 JSON 数据,发现多的这部分评论基本上都是 Twikoo 早期的异常数据,且大都是因为缺少 Page-key 引起的,因为 Twikoo 的处理是直接不显示,而 Artalk 则都把他纳入了最新文章下面,所以才出现上述异常。

没办法只能自己手动来修复,但是几千条数据一条条改又不太现实,我目前能想到的办法就是写一段 js 代码处理,手动定义一个 3000 多条的 json,再通过循环处理好所有有问题的数据,再把数据打印到终端后复制,最终完美处理好数据,具体实施如下:

var json = { "Twikoo所有评论数据...3000多条" };

json.forEach(function(e){
  // page_key格式都是如 “/我是文章/”这种格式,如果不是“/”开头肯定就是有问题的
  if(!e.page_key.startsWith("/")){
    // 评论数据中有page_herf字段,格式为:https://1900.live/xxxx/,这里将域名部分替换为空,在重新给page_key即可。
    e.page_key = e.page_herf.replace("https://1900.live","")
  }
});
console.log(json.stringify());
//之后复制json数据,覆盖twikoo.json文件内的数据,再做转换即可。

搭配 Message-Pusher 实现通知

我之前用 Twikoo 是通过企业微信实现通知,但是 Artalk 目前只支持钉钉、飞书、TG、邮件等,前两个我没用,TG 的话 Artalk 又不像 Memos 那样支持 CF Works,所以国内的机器无法使用。邮件倒是配置好了,但是感觉没 IM 工具来的利索,我还跑去提了个 issue

提 issue 的时候想起之前了解过的 Message-Pusher(下文简称 Pusher),一款自托管通知推送工具,支持多种消息推送方式

  • 邮件消息,
  • 微信测试号,
  • 企业微信应用号,
  • 企业微信群机器人
  • 飞书自建应用
  • 飞书群机器人,
  • 钉钉群机器人,
  • Bark App,
  • WebSocket 客户端(官方客户端接入文档),
  • Telegram 机器人,
  • Discord 群机器人,
  • 腾讯云自定义告警:免费的短信提醒,
  • 群组消息:可以将多个推送通道组合成一个群组,然后向群组发送消息,可以实现一次性推送到多个渠道的功能,
  • 自定义消息:可以自定义消息请求 URL 和请求体格式,实现与其他服务的对接,支持众多第三方服务

功能可谓相当强大,而且还提供了在线服务。

因为 Artalk 支持发送通知到 Webhook,而且恰好 Pusher 也支持 Webhook 自定义内容提取,所以我索性就研究起这两个如何搭配。

官方有个简单教程:Message Pusher 的自定义 Webhook 功能如何使用,但是不能完全适用于企业微信应用号,至少我按照教程写的无法正常运行,最后通过我各种测试终于勉强能用了,以下是我整理的 企业微信 的简单设置方式:

登录后先创建一个通道,我这里用的企业微信 APP

17PixPin_2023-12-17_23-28-55.png
17PixPin_2023-12-17_23-29-54.png

根据 Artalk 官方提供的 Webhook 数据请求体 填写设置。设置中创建接口里面的「提取规则」和「构建规则」当时把我搞的有点懵,搞了半天才搞明白。

其实「提取规则」这个地方可以理解成 定义变量 ,Artalk 在收到用户评论后会向目标 Webhook 发送一条固定格式的 json 数据,这个提取规则就是把这个里面的需要的数据定义出来,如下面这个代码,定义了一个 site_name ,值从 Artalk 发送的 comment.site_name 中拿。

{
  "site_name":"comment.site_name",
  "content": "comment.content",
  "nick": "comment.nick",
  "url": "comment.page_url",
  "notify_body": "notify_subject"
}

「构建规则」则是利用上面定义的变量组件成消息体,这里的 content 必须用这个名字,不能随意起(目前只有 contentdescription 有效,其他的会导致转发的时候数据为空,希望有懂的大佬解答一下),内容则是由上面「提取规则」里定义的变量如 $site_name 等,我的拼接如下:

{
  "content": "### 【$site_name】\n\n评论人:$nick\n\n评论:$content\n\n原文链接:[$url]($url)"
}

设置 Artalk

最后保存后回到接口列表,此时会多出一条数据,且有绿色的 复制Webhook链接 按钮,复制链接后填入 Artalk 中的多元通知部分的 Webhook URL 里即可。

最后效果如下,前面两条是以前 Twikoo 的通知,最后一条是 Pusher 发送,同理

17PixPin_2023-12-17_23-40-57.png

About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK