OpeniLink Hub WebSocket 与 Webhook 双通道消息转发实战:毫秒级实时推送全场景配置

发布时间:2026/10/12 8:50:16

OpeniLink Hub WebSocket 与 Webhook 双通道消息转发实战:毫秒级实时推送全场景配置 后端即时通讯插件系统前端消息路由AI 应用【免费下载链接】openilink-hub开源微信 Bot 管理平台 App 应用市场 | Self-hosted WeChat Bot Platform with App Marketplace | Lark · Slack · Discord · DingTalk · GitHub · Notion · 20 Apps | AI Tools | 7 Language SDKs项目地址https://gitcode.com/gh_mirrors/op/openilink-hub点击查看免费下载OpeniLink Hub 是一个开源的微信 Bot 管理平台内置WebSocket 实时推送与Webhook HTTP 回调两条消息转发通道微信消息进来后Hub 会按你选的方式把消息毫秒级推送到你自己的服务。本文用 4 个典型场景讲清楚两种通道的配置思路、消息格式和安全签名新手照着做即可跑通。两条通道先看懂再选型Hub 的消息分发核心逻辑在 internal/sink/ 目录下维度WebSocket 通道Webhook 通道通信方向你的服务主动连Hub长连接收消息Hub主动 POST到你的服务实时性毫秒级无网络穿透要求依赖你的服务可达性适用环境内网、无公网 IP、本地脚本有公网地址的服务、服务器集群离线补发自动补发断线期间漏掉的消息无靠你自己的重试附加能力可在连接上直接发回微信支持 JS 脚本沙箱、鉴权、自动回复一句话总结有长连接条件选 WebSocket只有 HTTP 入口选 Webhook两者可以并存。场景一WebSocket 实时推送推荐首选1. 用 API Key 建立连接每个 Bot 可以创建多个 Channel通道每个 Channel 自带一个 API Key。连接地址形如GET /api/ws?key{你的API_KEY}认证逻辑见 internal/api/ws_handler.goKey 无效或通道被禁用时直接返回 401。连接成功后Hub 会立即下发一帧init告诉你通道和 Bot 的初始状态{type: init, data: {channel_id: ch_xxx, channel_name: default, bot_id: bot_xxx, bot_status: connected}}2. 收消息、发消息帧之后每条微信消息都会以message帧推过来包含seq_id、sender、items文本/图片/语音/文件等等字段协议定义在 internal/relay/protocol.go。你的客户端还可以在同一条连接上反向发消息发send_text帧即可把文本发到指定微信用户Hub 处理完会回一帧send_ack确认结果还支持send_typing输入中状态、get_config查询会话配置。完整帧说明见 internal/api/ws_handler.go。连接保活也很简单服务端每 50 秒发一次 Ping客户端收到客户端级ping时回pong即可参数定义在 internal/relay/conn.go。想 3 分钟验证连接项目自带一个交互式测试客户端直接运行node example/ws-test.mjs ws://localhost:9800/api/ws?keyAPI_KEY连上后输入send 用户ID 你好就能收发双向消息脚本在 example/ws-test.mjs。3. 断线重连自动补发漏消息这是 WebSocket 通道最实用的设计通道会记录last_seq已消费到的消息序号重连时 Hub 自动把断线期间最多 100 条漏掉的消息按序重放再更新游标。补发逻辑见 internal/api/ws_handler.go。也就是说短暂网络抖动不会丢消息。4. App 开发者的两个 WebSocket 端点如果你开发的是 App 而非普通客户端Hub 提供两种粒度详见 docs/app-development.md按安装连接GET /bot/v1/ws?token{app_token}只收自己这个安装实例的事件适合自托管集成端点实现在 internal/api/bot_api_ws.go按 App 连接GET /bot/v1/app/ws?app_id{app_id}secret{webhook_secret}一条连接收该 App 所有安装实例的事件适合托管型第三方 App。Hub 的事件投递优先级是安装级 WS → App 级 WS → Webhook POST → 丢弃。也就是说只要 WS 连着事件就走 WS不会重复走 Webhook。场景二Webhook HTTP 回调1. 配置回调地址与鉴权在 Bot 的 Channel 配置里填入 Webhook URL。Hub 会把每条消息的 JSON 负载 POST 过来负载结构定义在 internal/sink/webhook.go核心字段{ event: message, channel_id: ch_xxx, bot_id: bot_xxx, seq_id: 123, sender: wxid_abc, msg_type: text, content: 你好, timestamp: 1711234567890, items: [{type: text, text: 你好}] }配置支持三种鉴权方式internal/sink/webhook.gobearerAuthorization 头、header自定义请求头、hmac自动加X-Hub-Signature头值为请求体的 HMAC-SHA256 十六进制摘要。生产环境强烈建议开 hmac否则任何人都能向你的回调地址伪造消息。2. 脚本沙箱改请求、自动回复Webhook 通道内置了一个 JS 脚本沙箱基于 goja可在请求发出前和响应回来后各跑一段逻辑能力见 internal/sink/webhook.gomatch text,image—— 只转发指定类型的消息其余自动跳过connect api.example.com—— 白名单限制脚本可改写的目标域名grant reply,skip—— 声明脚本可用reply()回复微信、skip()取消本次投递onRequest(ctx)里可改ctx.req的 URL、头、BodyonResponse(ctx)里可解析响应并调ctx.reply(回复内容)自动回给用户。不写脚本时也有兜底如果你的服务在 HTTP 响应体里返回{reply: ...}Hub 会自动把这段文字回复到微信internal/sink/webhook.go。脚本执行有 5 秒超时保护防止拖垮投递链路。3. App 事件的签名验证如果走的是 App 体系的事件投递DispatcherHub 每次 POST 都会带上签名头internal/app/delivery.go请求头含义X-App-Id应用 IDX-Installation-Id安装实例 IDX-TimestampUnix 秒级时间戳X-Signaturesha256HMAC-SHA256(webhook_secret, {timestamp}:{body})服务端用安装时拿到的webhook_secret按同样算法重算摘要比对即可防止伪造事件。投递超时为 3 秒响应非 2xx 会按 即时 → 10 秒 → 60 秒 的策略重试慢任务请返回{reply_async: true}表示稍后通过 Bot API 异步推送结果。场景四选一张表定方案你的情况推荐通道理由本地脚本/内网服务收消息WebSocket无需公网 IP断线自动补发云上有公网服务的正式业务Webhook hmac 鉴权无状态、易横向扩展托管型第三方 App多租户App 级 WebSocket一条连接服务所有安装实例想给微信自动回复/转媒体Webhook 脚本沙箱reply()一行搞定支持转发图片视频排错与进阶技巧WS 连上后没收到init多半是 Key 错误或通道被禁用Hub 会返回invalid or disabled key401。Webhook 一直失败查 Hub 后台的投递日志每次 POST 的请求、响应、耗时都落库了实现见 internal/sink/webhook.go。按人/按词过滤Channel 支持 FilterRule可按用户 ID、关键词、消息类型过滤后再转发结构见 internal/store/channel.go。消息链路追踪每条消息从收到到投递的完整耗时链路都有 Trace 记录出问题一眼看到卡在哪一步。延伸阅读完整 App 开发协议事件封装、Bot API、OAuth 安装流程docs/app-development.mdWebSocket 中继 Hub 与连接管理internal/relay/hub.go、internal/relay/conn.goWebhook 投递与脚本沙箱internal/sink/webhook.goApp 事件签名投递internal/app/delivery.go本地调试 Mock Server 文档docs/mock-server.md赞分享后端即时通讯插件系统前端消息路由AI 应用【免费下载链接】openilink-hub开源微信 Bot 管理平台 App 应用市场 | Self-hosted WeChat Bot Platform with App Marketplace | Lark · Slack · Discord · DingTalk · GitHub · Notion · 20 Apps | AI Tools | 7 Language SDKs项目地址https://gitcode.com/gh_mirrors/op/openilink-hub点击查看免费下载相关推荐如何利用libSQL实现实时通信WebSocket与消息推送的终极指南如何利用libSQL实现实时通信WebSocket与消息推送的终极指南 libSQL是一个强大的C数据库访问库支持SQLite、MySQL、Postgr数据库关系型数据库嵌入式数据库后端数据同步Bisheng消息推送WebSocket实时通信Bisheng消息推送WebSocket实时通信 引言为什么需要实时消息推送 在AI应用开发中实时通信是提升用户体验的关键技术。传统HTTP请求 响应模AI 应用AI AgentLLMOps工作流自动化RAG后端前端daily-code实时通信WebSocket实时通知与消息推送daily code实时通信WebSocket实时通知与消息推送 痛点传统轮询的局限性 在现代Web应用中实时通信已成为提升用户体验的关键技术。传统的HT创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考
延伸阅读

更多相关文章

2026/10/12 8:50:16

直播带货大数据选品:从凭感觉到数据驱动的完整方法

做直播带货的团队,聊到“大数据选品”时一般会有两种反应:一种觉得是玄学,另一种以为是找个软件自动推荐爆款。实际上,大数据在直播带货商品选品中的应用,既没有玄到不可捉摸,也没有简单到一键生成&#xf…

2026/10/12 8:45:15

预应力塑料波纹管:后张法施工关键材料与质量控制要点

1. 这东西到底是干什么的:先搞懂预应力塑料波纹管的角色做桥梁和大型建筑的人,对"波纹管"三个字肯定不陌生。但有相当一部分刚入行的工程师,甚至一些在现场干了三五年的施工员,会把预应力塑料波纹管和普通穿线管混为一谈…

2026/10/12 8:45:15

Win7安装鼠标键盘失灵?DISM离线注入Intel USB3驱动全攻略

简介:这是一份针对Windows 7系统的Intel USB 3.0主板驱动,面向在较新平台安装Win7后无法识别USB 3.0设备、或接口只能按USB 2.0速度工作的用户;由于Win7发布早于USB 3.0标准,系统缺少对应控制器支持,该驱动可解决设备无…

2026/10/12 10:06:06

大模型融资热潮背后的技术选型与落地避坑指南

最近圈子里都在传某头部大模型团队的新一轮融资消息,传闻金额直接站上了八百亿元量级,参投名单里既有互联网平台的影子,也有新能源产业链里的巨头。很多朋友看到这种新闻的第一反应是“AI行业真有钱”,但作为常年在一线做技术选型…

2026/10/12 10:06:06

S3C2440裸机开发实战:从启动流程到第一个可运行程序

1. 拿到一块裸机开发板,先别急着写代码S3C2440 这颗芯片在嵌入式圈子里算是老资历了,ARM9 架构、主频 400MHz 起步、外设接口丰富,当年多少人的第一个裸机程序就是在它上面跑起来的。现在回头看,拿它入门裸机开发依然是个相当扎实…

2026/10/12 10:06:06

大模型Agent高效化实战:延迟、成本与成功率如何兼得

做了两年多的大模型应用落地,我听过最多的一句感慨就是“Demo跑得飞起,一上真业务就拉胯”。尤其是Agent类的应用,问题几乎出奇一致:慢、贵、还动不动卡死在某个反问循环里。前阵子一个做内部工具链的项目,把Agent流程…

2026/10/12 9:55:40

Agent工程化实践:全插件化架构与可回放会话日志设计

做 Agent 开发半年多的人,大概都会撞到同一堵墙:Agent 框架本身不复杂,复杂的是怎么把工具接入、模型切换、流程编排、会话调试这些问题,在一个体系里收拢干净。我最近基于 DeepSeek Harness 做了一次比较完整的工程化改造&#x…

2026/10/11 0:02:13

Python调用Gemini Structured Outputs实现工单路由门禁

客服工单最怕的不是模型“答错一句话”,而是它给出一段看起来合理的说明,程序却从中猜错优先级。通俗做法是:要求模型只交 JSON(JavaScript Object Notation,轻量数据格式),再让代码验证它。Gem…

2026/10/11 0:02:13

Spring Boot超市进销存系统毕设实战:从需求拆解到答辩通关

最近带的一个学生项目组里,有A同学跑来问我:选什么毕设题目最稳妥,既能让评审老师觉得工作量够,又不会在答辩时被问到语无伦次。我第一反应就是推荐基于Spring Boot的超市仓库管理系统——也就是超市进销存系统。这个题目乍一看平…

2026/10/11 0:02:13

Flutter StatefulWidget 生命周期核心解析

很多刚开始接触 Flutter 的朋友,在看完一堆“Hello World”和基础组件之后,大概率都会撞上同一堵墙:StatefulWidget 里那堆 initState、build、dispose 方法,到底什么时候被调用?为什么顺序是那样?在里面到…

2026/10/12 0:04:22

绝缘子缺陷检测数据集清洗与工业级训练实战指南

简介:本资源是面向电力AI研发人员、工业视觉工程师及智能巡检系统开发者的绝缘子缺陷检测专用YOLO格式数据集,解决无人机航拍场景下绝缘子破损、污闪、积雪等9类典型缺陷的精准识别与定位难题。数据集共2139张真实巡检图像(含训练/验证/测试集…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑