尧图网络 高端网站定制 · 原创设计
免费咨询热线
400-888-6620
免费获取方案
企业微信API开发:Webhook 回调与 SCRM 事件总线架构
官方文档平台介绍 - QiWe API企微 API 开发文档一、业务痛点与技术背景自动回复、入群欢迎、消息存档、SOP 触达都依赖回调。QiWe 官方约束配置方式控制台「应用凭证 → 配置」或 API「设置回调地址」POST application/json3 秒内响应可返回空串 / HTTP 200必须公网可达配置成功会推送「验证回调地址是否可用」Token 下所有已登录账号消息都会转到同一回调 URL接口主动发送的消息不触发回调好友/群消息与手机端发送会触发SCRM 若在回调里同步写库 调 LLM必丢事件。二、核心架构设计与数据流转QiWe Webhook │ ▼ SCRM Ingress (TLS, ≤300ms ACK) │ 验签/限流/去重 ▼ Event Bus (Kafka topic: qiwe.inbound) │ ├─ customer-profile-updater ├─ ai-cs-worker ├─ group-sop-engine └─ message-archive-writer多guid共用回调时第一字段分流键就是guid再进租户路由。三、关键代码与配置示例3.1 IngressFastAPIfrom fastapi import FastAPI, Request, Response import hashlib, json, time import redis, aiokafka app FastAPI() r redis.Redis.from_url(os.environ[REDIS_URL]) producer None # 启动时初始化 def dedupe_key(body: dict) - str: # 以实际回调字段为准guid msgId / uniqueId raw f{body.get(guid)}:{body.get(msgId) or body.get(uniqueId) or body.get(id)} return qiwe:dedupe: hashlib.sha256(raw.encode()).hexdigest() app.post(/webhook/qiwe) async def qiwe_webhook(request: Request): body await request.json() # 先准备 ACK业务异步 text json.dumps(body, ensure_asciiFalse) if 验证回调地址是否可用 in text: return Response(content, media_typetext/plain) key dedupe_key(body) if not r.set(key, 1, nxTrue, ex72 * 3600): return Response(content, media_typetext/plain) await producer.send_and_wait(qiwe.inbound, json.dumps(body).encode(utf-8)) return Response(content, media_typetext/plain)3.2 控制台 / API 配置回调# 方式 A控制台手动配置推荐 # 控制台 → 应用凭证 → 配置 # 方式 B程序化method 以文档「设置回调地址」为准 curl -X POST https://new.qiweapi.com/qiwe/api/qw/doApi \ -H X-QIWEI-TOKEN: $QIWEI_TOKEN \ -H Content-Type: application/json \ -d { method: /callback/setUrl, params: { url: https://scrm.example.com/webhook/qiwe } }3.3 租户与 guid 路由async function routeEvent(evt: any) { const tenant await tenantRepo.byGuid(evt.guid); if (!tenant) { metrics.unknownGuid.inc(); return; } await bus.publish(qiwe.tenant.${tenant.id}, { ...evt, tenantId: tenant.id }); }3.4 事件类型分发器HANDLERS { text: handle_text, image: handle_image, friend_add: handle_friend, room_member: handle_room_member, } def dispatch(evt: dict): t normalize_type(evt) # 按文档字段映射 HANDLERS.get(t, handle_unknown)(evt)四、生产环境避坑与安全风控3 秒铁律Ingress 只做去重入队排障看队列积压而不是回调线程。共用回调一个 Token 多账号务必按guid隔离数据防串租户。验证包配置后立刻打日志确认失败先用 Apifox 公网自测。内网穿透仅开发用生产用正式域名 TLS。主动发送无回调投递状态靠 API 响应 自建发送日志。细节见文首官方文档中的 Webhook 专题。五、本篇交付清单3 秒 ACK Ingress去重 Kafka 事件总线guid 租户路由回调配置两种方式
RELATED

相关推荐

GO [ 泛型 ]

GO [ 泛型 ]

泛型 前面我们已经学习了 Go 的变量、常量、数据类型、输入输出、条件控制、切片、字符串、映射表、指针、结构体、函数、方法、接口、类型、错误、文件和反射。接下来学习 Go 语言中一个很重要、也最容易被“写复杂”的能力:泛型(Generics)…

📅 2026/9/30 12:12:55
AI工程从零开始:模型训练到稳定部署的完整实践

AI工程从零开始:模型训练到稳定部署的完整实践

1. 为什么"会调模型"不等于"会做AI工程"AI engineering from scratch,这个话题在我电脑里躺了好几个版本。每次想动笔写,都感觉还没到火候,直到最近帮一个创业团队收拾了一套"跑不起来"的推荐系统,…

📅 2026/9/30 12:07:55
DeepSeek+AI大模型智慧办公系统智能化建设方案:从PPT到落地实践

DeepSeek+AI大模型智慧办公系统智能化建设方案:从PPT到落地实践

简介:这份PPT方案面向企业行政、法务、IT及数字化转型负责人,围绕DeepSeek与AI大模型在智慧办公场景的落地路径展开,帮助解决流程审批低效、公文流转繁琐、合同审查耗时、知识沉淀困难等痛点。资源包共1个文件,为ppt格式&#xff…

📅 2026/9/30 12:07:55
MORE NEWS

更多资讯

📰

雷达回波信号处理:小波降噪原理与MATLAB仿真实现

1. 项目核心拆解 1.1 这个雷达探测项目到底在做什么 先把这个项目的本质说清楚。它不是一个完整的雷达硬件系统,也不是要你去造天线和收发机,而是一个 基于仿真数据的雷达回波信号处理方案 ,核心工作链是:构建目标的雷达回波模…

📰

RAG知识库构建与检索全链路实战:从文档切块到混合检索与重排

做RAG项目越久越觉得,能跑通demo只是起点,能在真实问答场景里站住脚才是分水岭。第一次搭RAG都会觉得特别省事——装个LangChain,扔几个PDF进去,聊天窗口敲一句"帮我总结这份合同",机器人答得头头是道。可一…

📰

RAG知识库构建与检索全链路实战:从文档解析到混合检索优化

这篇是系列的第六篇了,前面几篇讲了LLM的基础使用、Prompt工程、微调尝试,还有Agent框架的搭建,今天终于聊到重头戏——RAG知识库构建与检索全链路。先说个我自己的体会:2024年下半年到2025年,我经手的RAG项目不下十个…

📰

Node.js+Vue全栈实战:校园足球比赛网站开发

1. 技术方案选型与系统架构设计1.1 为什么是Node.js Vue组合前阵子学校体育部想搞一个校园足球联赛的报名和信息公示系统,我接了这个需求。当时第一反应就是用传统的老三样:HTML CSS jQuery 配上一个PHP后台,但后来想了想,这种…

📰

ITIL 5 落地前,先补齐工单数据底座的 4 步

写给 IT 经理:ITIL 5 落地前,先把工单数据底座补齐的 4 步一句话结论:智能体能不能接管 L1,不取决于你选哪家平台,取决于你家的工单数据是不是"可读、可查、可复用"。这篇写给正在推进 ITSM 平台升级的 IT 经…

📰

基于YOLO的疼痛检测数据集实战:2200张医疗数据从标注到部署

疼痛识别这个方向,我最早接触是在做养老监护类项目的时候。当时客户提的需求很直接:老人卧床或者术后恢复期间,疼不疼、疼到什么程度,护士不可能24小时盯着,能不能用摄像头自动判断。一开始我觉得这事挺玄的&#xff0…

TODAY

今日更新

THIS WEEK

本周精选

THIS MONTH

本月热门

读完文章,想聊聊您的网站?

告诉我们您的行业与需求,资深顾问一对一梳理方案与报价,全程免费。

📞 💬