在Synology Chat里添加一个聊天机器人

作者:

在

想在Synology Chat里添加一个自定义聊天机器人,该怎么弄呢?今天这篇文章以一个简单 echo 应答机器人为例,教大家怎么弄。

第一步,在Chat里新建一个机器人。

右上角点击“整合”,然后“机器人”,再点击“创建”,创建一个新机器人:

注意把“在聊天机器人列表中隐藏”给勾掉,不然就不能和这个机器人聊天了。

Synology Chat是用webhook的方式来实现机器人通信的,上图中“传出URL”就是当有人在Chat里给机器人发消息时,Chat就会把信息通过调用“传出URL”发出去。“传入URL”则是给机器人给用户回复消息用的,也就是说我们在机器人的实现代码里通过调用这个URL实现给用户返回数据的效果。“令牌”则用于验证合法性,调用时必须带上。

第二步,准备一个Python脚本,这是聊天机器人的主程序,把令牌和“传入URL”填进去:

import json
import os
import threading
from datetime import datetime
import requests
from flask import Flask, request

application = Flask(__name__)

# ====== 配置区 ======
OUTGOING_TOKEN = "机器人令牌"
INCOMING_URL = "传入URL"
# ===================

def push(text: str, user_id: str):
    payload = {"text": text, "user_ids": [int(user_id)]}  # 关键:user_ids 是整数数组
    resp = requests.post(
        INCOMING_URL,
        data={"payload": json.dumps(payload, ensure_ascii=False)},
        verify=False,
        timeout=10,
    )

@application.route("/webhook", methods=["POST"])
def webhook():
    token = request.form.get("token", "")
    username = request.form.get("username", "")
    text = request.form.get("text", "")
    user_id = request.form.get("user_id", "")  # 新增:取发送者 ID
    if token != OUTGOING_TOKEN:
        return "forbidden", 403
    threading.Thread(
        target=push,
        args=(f"收到 {username} 的消息:{text}", user_id),
        daemon=True,
    ).start()
    return "", 200

需要特别注意的是:因为我们要在NAS本机上部署聊天机器人服务器,所以要把“传入URL”的前面的地址改为localhost,而不用管聊天机器人配置里的地址(那个地址是Chat根据你打开Chat的网址自动帮你填的,不用管它)。例如我就把这个URL改为http://localhost:5000/webapi开头。

将这段Python代码保存为main.py,放到NAS的磁盘上,例如我放在了web/webhooks/ChatBot里:

第三步,搭建一个服务端作为聊天机器人的服务器。

首先配置Python(如果没装的话,要先在套件中心里装一下):

确保安装了Flask、requests模块,因为这两个模块在我们的机器人脚本里用到了。如果你还用了其他模块,也都要安装,否则Python脚本无法执行。

然后在Web Station里新增一个网页服务,选择刚才配置好的Python服务:

点击“下一步”后,配置好名字,选中我们在磁盘上放好的main.py:

最后建一个网络门户:

按下图进行配置,选中我们刚才创建的Python服务,“门户类型”选择“基于端口”,端口号填入8085(你可以自己选择一个端口号,但要和Chat里机器人配置那边保持一致)。

点击“应用”,我们的聊天机器人服务器就运行起来了。

做了这些后,终于可以开聊了。

在“机器人”那里先把我们的机器人加进来:

发个“你好”试试:

好了,添加自定义聊天机器人大功告成!

最后讲讲添加自定义机器人有啥用。我想了几个玩法:

  1. 用来给NAS发各种命令,进行远程控制,例如把喜爱的油管视频链接发给机器人,然后在Python代码里通过yt-dlp进行下载。
  2. 搭建自己的AI问答。我试过连接Kimi,可以成功进行聊天。你也可以连接其他模型,做个智能知识库助理也挺好。
  3. 连接家里的各种智能设备。因为我的NAS放家里,所以我可以在Python脚本里对家里局域网内的各种设备进行控制。

可能有人会问,这些需求也可以有其他方式实现,为什么选择通过Synology Chat机器人来做呢?那就得提下这个方案的优势了:

  1. 基础设施好,群晖已经构建了完整套件。有Synology Chat Server套件,有各个平台的Chat客户端软件,这些都是现成的,拿来用即可,很稳定。当然现在国区下载这些稍微麻烦些,我后面会讲。
  2. 通过群晖QuickConnect服务连接,任何地方都可以使用,无需自己掏钱购买云服务器或者中转服务,手机app上连消息推送都有。
  3. 数据、代码都在NAS上,安全、稳定。

最后说下国内如何下载安装Synology Chat。Chat Server在套件中心里已经找不到了,要自行去群晖官网下载:

https://www.synology.com/en-global/support/download。iOS端的Chat App也在国区下架了,要去美区下载。

评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注