新增 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: 会话状态管理
38 lines
1.0 KiB
Python
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
|