想在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里机器人配置那边保持一致)。
点击“应用”,我们的聊天机器人服务器就运行起来了。
做了这些后,终于可以开聊了。
在“机器人”那里先把我们的机器人加进来:
发个“你好”试试:
好了,添加自定义聊天机器人大功告成!
最后讲讲添加自定义机器人有啥用。我想了几个玩法:
- 用来给NAS发各种命令,进行远程控制,例如把喜爱的油管视频链接发给机器人,然后在Python代码里通过yt-dlp进行下载。
- 搭建自己的AI问答。我试过连接Kimi,可以成功进行聊天。你也可以连接其他模型,做个智能知识库助理也挺好。
- 连接家里的各种智能设备。因为我的NAS放家里,所以我可以在Python脚本里对家里局域网内的各种设备进行控制。
可能有人会问,这些需求也可以有其他方式实现,为什么选择通过Synology Chat机器人来做呢?那就得提下这个方案的优势了:
- 基础设施好,群晖已经构建了完整套件。有Synology Chat Server套件,有各个平台的Chat客户端软件,这些都是现成的,拿来用即可,很稳定。当然现在国区下载这些稍微麻烦些,我后面会讲。
- 通过群晖QuickConnect服务连接,任何地方都可以使用,无需自己掏钱购买云服务器或者中转服务,手机app上连消息推送都有。
- 数据、代码都在NAS上,安全、稳定。
最后说下国内如何下载安装Synology Chat。Chat Server在套件中心里已经找不到了,要自行去群晖官网下载:
https://www.synology.com/en-global/support/download。iOS端的Chat App也在国区下架了,要去美区下载。