做企微生态的二次开发,如果只做单向的“发消息”,那只能算是个推送工具。真正有业务价值的系统,必须是一套能够“感知 -> 决策 -> 执行”的完整自动化链路。比如:客户在群里发了指定指令(触发),系统去查内部 ERP 库(决策),最后把库存数据精准推回给客户(执行)。
今天我们抛开企微原生复杂的 AES 加解密和 Token 刷新逻辑,直接基于标准化的 JSON 数据流,手写一套从事件触发到接口执行的完整闭环。
一、 链路起点:事件触发与监听
自动化的第一步是让系统拥有“听觉”。在企微中,无论是单聊、群聊,还是进退群这种系统动作,都可以通过配置 Webhook 实时推送到我们的服务器。
配置完成后,底层通道会把复杂的密文剥离,直接将明文 JSON 发送给你。建议大家在写接收代码前,先对照 接口文档 梳理一下你需要监听的事件类型。
在推送过来的数据中,核心关注三个字段:instance_guid(确认是哪个企微号收到的消息)、MsgType(判断是文本还是图片)和 Event(判断是否为系统动作)。
二、 链路中枢:动态路由与业务决策
拿到明文 JSON 后,服务器不能把所有逻辑揉在一坨,而是要建立一个路由分发器。这也是整套自动化链路的“大脑”。
我们的策略是:先把系统事件和普通聊天彻底剥离开,然后再根据具体的关键词调用内部业务接口。为了提高通信效率,耗时的业务查询(比如拉取长报表)必须放进异步线程中执行,主线程直接给企微平台返回 success,防止超时重推。
三、 链路终点:接口执行与数据回传
当内部系统(如 CRM、ERP)把业务数据准备好后,最后一步就是通过主动调用发送接口,把结果精准触达给触发该事件的用户或群聊。发送时,同样是通过 instance_guid 来指定发送通道。
如果你还不清楚不同类型消息的组装格式,可以随时查阅 星云开放文档https://api.xingyapi.com/api-docs,或者访问 星云API官网https://www.xingyapi.com/ 获取更多对接指引。日常开发中,直接将 星云API www.xingyapi.com 的通道作为基座,能省去绝大部分的基建时间。
四、 核心代码实战
下面是一段跑通整条链路的 Python (Flask) 骨架代码,演示了如何监听“查进度”指令,并自动响应执行结果:
Python
from flask import Flask, request, jsonify
import requests
import threading
import time
app = Flask(__name__)
# 全局凭证与接口地址
API_KEY = "你的专属_X-Nebula-Key"
SEND_TEXT_URL = "https://api.xingyapi.com/api/message/sendText"
@app.route('/automation_webhook', methods=['POST'])
def event_trigger():
data = request.json
instance_guid = data.get("instance_guid")
msg_type = data.get("MsgType")
# 第一步:事件触发监听
if msg_type == "text":
content = data.get("Content", "")
sender_id = data.get("FromUserName")
# 第二步:业务决策(命中特定指令)
if "查进度" in content:
# 开启异步线程执行耗时任务
threading.Thread(target=execute_business_logic, args=(instance_guid, sender_id)).start()
# 立即响应底层通道
return jsonify({"status": "success"})
def execute_business_logic(instance_guid, sender_id):
"""第三步:执行内部业务逻辑并调用接口回传"""
print(f"正在为用户 {sender_id} 查询内部业务系统...")
time.sleep(2) # 模拟查询耗时
result_text = "您好,您查询的工单已处理完毕,预计今日下午发货。"
# 组装参数,调用接口完成闭环
headers = {
"Content-Type": "application/json",
"X-Nebula-Key": API_KEY
}
payload = {
"instance_guid": instance_guid,
"touser": sender_id,
"text": {"content": result_text}
}
requests.post(SEND_TEXT_URL, json=payload, headers=headers)
print("闭环执行完成,结果已推回。")
if __name__ == '__main__':
app.run(port=5000)
在这套链路跑通后,你可以把 execute_business_logic 里的逻辑替换成任何你公司内部的 API,比如打通大模型的问答能力、对接财务系统的打款通知。剥离了企业微信繁杂的鉴权认证,这套代码架构具备极强的复用性,能轻松支撑高并发的业务场景。如果在联调参数时遇到问题,欢迎把报错日志发在评论区一起排查。

391




被折叠的 条评论
为什么被折叠?



