wechatbot-webhook 是一个轻量、可部署的微信机器人webhook服务,使用http接口收发微信消息, 用它作为个人通知、AIGC 应用或者 coze、n8n、Dify等自动化工作流的消息节点。
基于 http 请求,与hooks微信不同,因为基于web api,所以优势在于可以部署到arm架构等设备上。
1、开源地址:https://github.com/danni-cool/wechatbot-webhook
2、部署
#拉取最新镜像
dockerpulldannicool/docker-wechatbot-webhook
##启动容器并映射日志目录,日志按天维度生成,e.g:app.2024-08-029.log
dockerrun-d--namewxBotWebhook--restartunless-stopped-p3001:3001-v~/wxBot_logs:/app/log-eACCEPT_RECVD_MSG_MYSELF=true-eRECVD_MSG_API=http://119.91.148.69:3000/receive/-eLOGIN_API_TOKEN=197653dannicool/docker-wechatbot-webhook
ACCEPT_RECVD_MSG_MYSELF=true:机器人能接收自己发的消息。
RECVD_MSG_API=http://http://119.91.148.69:3000/receive:接收消息的 API 地址,实现处理接收消息的逻辑,如果你不想实现这个功能,可以不填,默认为空。
LOGIN_API_TOKEN=197653:自定义登录 API token,可以不填,默认自动生成一个。
使用 compose 部署 (可选)
wget-Odocker-compose.ymlhttps://cdn.jsdelivr.net/gh/danni-cool/wechatbot-webhook@main/docker-compose.yml&&docker-composedown&&docker-compose-pwx_bot_webhookup
3、登录
#-f 表示"follow",即实时跟踪日志输出。
dockerlogs-fwxBotWebhook
#启动容器时,使用-d 选项将其置于后台运行。
dockerrun-d--namewxBotWebhookc7feffe5b169(image_name)
#将日志输出重定向到文件
dockerlogswxBotWebhook>/path/to/logfile.log2>&1&
#查看日志
tail-f/path/to/logfile.log
这样,容器在后台运行,同时日志被写入指定文件,而不会实时打印到终端。
服务器端命令行扫码登录也可以浏览器访问:
http://119.91.148.69:3001/login?token=197653,扫码登录wx。
项目部署成功后,拿到发送消息的 API 地址:http://119.91.148.69:3001/webhook/msg/v2?token=197653。
defsend_to_user(nick_name,data):
"""
私聊
:paramnick_name:昵称
:paramdata:消息内容
:return:
"""
#请求头
headers={
"Content-Type":"application/json",
}
data=create_request_data(nick_name,data)
response=post_request_with_retries(url=BOT_URL,headers=headers,data=json.dumps(data))
print(response.json())
#单条消息
data={
"content":"爬虫与AI前沿"
}
#同一个人发送多条消息
datas=[
{
"type":"text",
"content":"你好?"
},
{
"type":"fileUrl",
"content":"https://static.cninfo.com.cn/finalpage/2024-08-29/1221034055.PDF"
}
]
send_to_user(nick_name='摩诘',data=data)
send_to_user(nick_name='摩诘',data=datas)
defsend_to_room(nick_name,data):
"""
群聊
:paramnick_name:群昵称
:paramdata:消息内容
:return:
"""
#请求头
headers={
"Content-Type":"application/json",
}
data=create_request_data(nick_name,data,is_room=True)
response=post_request_with_retries(url=BOT_URL,headers=headers,data=data)
print(response.json())
#单条消息
data={
"content":"爬虫与AI前沿"
}
#多条消息
datas=[
{
"type":"text",
"content":"你好?"
},
{
"type":"fileUrl",
"content":"https://static.cninfo.com.cn/finalpage/2024-08-29/1221034055.PDF"
}
]
send_to_room(nick_name='爬虫与AI前沿',data=data)
send_to_room(nick_name='爬虫与AI前沿',data=datas)
defsend_to_url(nick_name,content):
#给url拼接query参数$alias可用于指定发送给目标的文件名
#请求头
headers={
"Content-Type":"application/json",
}
data={
"to":nick_name,
"data":{
"type":"fileUrl",
"content":content
}
}
response=post_request_with_retries(url=BOT_URL,headers=headers,data=json.dumps(data))
print(response.json())
#发文件url同时支持修改成目标文件名
content="https://download.samplelib.com/jpeg/sample-clouds-400x300.jpg?$alias=1234.jpg"
send_to_url(nick_name='摩诘',content=content)
defsend_to_local_file(nick_name,file_name,is_room=False):
"""
发送本地文件
:paramnick_name:昵称
:paramfile_name:文件路径
:paramis_room:是否是群聊
:return:
"""
data=create_request_data(to=nick_name,is_room=is_room)
files={'content'
pen(file_name,'rb')}
response=post_request_with_retries(url=BOT_URL_FILE,headers=None,data=data,files=files)
print(response.json())
#发送本地文件-私聊
file_path='/Users/oscar/Downloads/dify.png'
send_to_local_file(nick_name='摩诘',file_name=file_path)
defsend_to_rooms():
"""
群发消息
:return:
"""
#请求头
headers={
"Content-Type":"application/json",
}
data=[
{
"to":"摩诘",
"data":{
"content":"你好?"
}
},
{
"to":"杨",
"data":[
{
"content":"你好?"
},
{
"content":"近况如何?测试群发机器人!"
}
]
}
]
response=post_request_with_retries(url=BOT_URL,headers=headers,data=json.dumps(data))
print(response.json())
返回值 response 结构:
{
"success":true,
"message":"Messagesentsuccessfully",
"task":{
"successCount":3,
"totalCount":3,
"failedCount":0,
"reject":[],
"sentFailed":[],
"notFound":[]
}
}
payload 结构
在最开始部署项目,启动命令里有一个参数
RECVD_MSG_API即:http://119.91.148.69:3000/receive/ ,这个参数就是用来接收消息的。
pip 安装 FastAPI在终端或命令提示符中运行以下命令:
pipinstallfastapi
FastAPI 是一个基于 ASGI 的框架,Uvicorn 是一个高性能的 ASGI 服务器,用于运行 FastAPI 应用。安装 Uvicorn 可以通过以下命令完成:
pipinstalluvicorn
python-multipart 是一个用于处理多部分表单数据(multipart/form-data)的库,通常在处理文件上传时使用。要安装 python-multipart,你可以使用以下 pip 命令:
pipinstallpython-multipart
你可以使用以下代码创建一个简单的 FastAPI 应用,并将其保存为 main.py:
fromfastapiimportFastAPI
app=FastAPI()
@app.get("/")
defread_root():
return{"Hello":"World"}
使用 Uvicorn 运行 FastAPI 应用,可以在终端中运行以下命令:
uvicornserver:app--reload
or
nohuppython3server.py>log.txt2>&1&
main 是你保存 FastAPI 应用的文件名(不包括 .py 后缀)。app 是 FastAPI 实例的名称。--reload 选项启用自动重载,以便在代码更改时自动重新启动服务器。打开浏览器,访问 http://127.0.0.1:3000。你应该能看到返回的 {"Hello": "World"}。
还可以访问自动生成的 API 文档,分别为:
http://127.0.0.1:3000/docshttp://127.0.0.1:3000/redoc1、创建一个名为server.py的文件
fromfastapiimportFastAPI,Form
fromfastapi.responsesimportJSONResponse
importuvicorn
fromloguruimportlogger
app=FastAPI()
#配置Loguru日志
logger.add("logs/app.log",rotation="1week",retention="1month",level="INFO",format="{time}{level}{message}")
@app.post("/receive")
asyncdefreceive_message(
type:str=Form(...),
content:str=Form(...),
source:str=Form(...),
isMentioned:str=Form(...),
isMsgFromSelf:str=Form(...),
):
#处理请求数据
response_data={
"type":type,
"content":content,
"source":source,
"isMentioned":isMentioned,
"isMsgFromSelf":isMsgFromSelf,
}
try:
#填写处理逻辑-开始
logger.info("Receiveddata:{}",response_data)
#填写处理逻辑-结束
returnJSONResponse(content={"status":"success","data":response_data})
exceptExceptionase:
logger.error("Errorprocessingrequest:{}",e)
returnJSONResponse(content={"status":"error","data":"处理失败"})
if__name__=="__main__":
uvicorn.run(app,host="0.0.0.0",port=3000)
比如接入 ChatGPT/文心一言 处理消息后进行回复。2 、启动服务器
#创建虚拟环境
condacreate-nwechatbotpython=3.10
#激活虚拟环境
condaactivatewechatbot
#克隆代码
gitclonehttps://github.com/huanglaoxie0503/wechatbot.git
#安装所需的库
pipinstall-rrequirements.txt
#启动
nohuppythonserver.py>log.txt2>&1&
wechatbot服务已经部署好,接下来咱们考虑接入Dify自动化工作流的消息节点,打造智能的 AI 助理。
测试工作流,并发布为工具。创建一个Agent,把刚才创建的工作流添加到Agent中。
测试Agent,此处使用文心一言大模型。
完整代码:https://github.com/huanglaoxie0503/wechatbo
| 欢迎光临 链载Ai (https://www.lianzai.com/) | Powered by Discuz! X3.5 |