ForcePilot/backend/package/yuxi/channel/extensions/webex/webhook.py
Kris 7b5d1e5c69 feat(channel): 添加 Webex、微信 iLink 和微信小程序渠道扩展
新增 Webex、微信 iLink、微信小程序三个渠道扩展。

Webex 渠道扩展功能模块:
- config: 渠道配置管理
- gateway: SSE/WebSocket 网关接入
- webhook: Webhook 事件处理
- outbound: 外发消息管理
- streaming: 流式消息处理
- pairing: 用户配对与绑定
- security: 安全校验
- dedupe: 消息去重
- monitor: 渠道状态监控
- status: 会话状态管理
- media: 媒体资源处理

微信 iLink 渠道扩展功能模块:
- config: 渠道配置管理
- gateway: SSE/WebSocket 网关接入
- outbound: 外发消息管理
- streaming: 流式消息处理
- pairing: 用户配对与绑定
- security: 安全校验
- dedupe: 消息去重
- monitor: 渠道状态监控
- status: 会话状态管理
- context_store: 上下文存储
- aes_ecb: AES-ECB 加解密
- media: 媒体资源处理
- typing: 输入状态

微信小程序渠道扩展功能模块:
- config: 渠道配置管理
- gateway: SSE/WebSocket 网关接入
- webhook: Webhook 事件处理
- outbound: 外发消息管理
- streaming: 流式消息处理
- pairing: 用户配对与绑定
- security: 安全校验
- crypto: 加解密处理
- dedupe: 消息去重
- message: 消息处理
- passive_reply: 被动回复
- media: 媒体资源处理
- status: 会话状态管理
2026-05-21 11:59:04 +08:00

38 lines
1.0 KiB
Python

import json
from fastapi import FastAPI, Request, HTTPException
MAX_WEBHOOK_BODY_BYTES = 1 * 1024 * 1024
DEFAULT_WEBHOOK_PATH = "/api/channel/webex/webhook"
def create_webhook_app(
verify_signature,
handle_webhook,
webhook_path: str = DEFAULT_WEBHOOK_PATH,
) -> FastAPI:
app = FastAPI(title="Cisco Webex Webhook", docs_url=None, redoc_url=None)
@app.post(webhook_path)
async def webhook_endpoint(request: Request):
body = await request.body()
if len(body) > MAX_WEBHOOK_BODY_BYTES:
raise HTTPException(status_code=413, detail="Payload too large")
x_spark_signature = request.headers.get("X-Spark-Signature", "")
if not verify_signature(body, x_spark_signature):
raise HTTPException(status_code=401, detail="Invalid signature")
payload = json.loads(body.decode())
result = await handle_webhook(payload)
return result
@app.get(webhook_path)
async def health_check():
return {"status": "healthy", "channel": "webex"}
return app