IT博客汇
  • 首页
  • 精华
  • 技术
  • 设计
  • 资讯
  • 扯淡
  • 权利声明
  • 登录 注册

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

    1900发表于 2023-12-18 00:00:39
    love 0

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

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

    • Waline
    • Valine
    • Cusdis 
    • Artalk
    • 基于Github的:Utterances、Giscus 

    最后看来看去还是决定使用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),一款自托管通知推送工具,支持多种消息推送方式:

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

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

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

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

    创建通道

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

    alt

    创建接口

    alt

    根据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 必须用这个名字,不能随意起(目前只有 content 和 description 有效,其他的会导致转发的时候数据为空,希望有懂的大佬解答一下),内容则是由上面「提取规则」里定义的变量如 $site_name 等,我的拼接如下:

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

    设置Artalk

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

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

    alt


沪ICP备19023445号-2号
友情链接