49 lines
2.0 KiB
Python
49 lines
2.0 KiB
Python
import os
|
|
from datetime import datetime
|
|
from typing import Any, Dict, Optional
|
|
|
|
|
|
async def post_tianwang_callback_flow(client, event: str, data: dict, extra: Optional[Dict[str, Any]] = None):
|
|
"""将消息处理事件回调给天网。"""
|
|
if not client._tianwang_callback_url:
|
|
return
|
|
try:
|
|
import httpx
|
|
|
|
trust_env = os.getenv("TIANWANG_CALLBACK_TRUST_ENV", "false").lower() in ("1", "true", "yes")
|
|
payload = {
|
|
"event": event,
|
|
"timestamp": datetime.now().isoformat(),
|
|
"agent_name": client._tianwang_agent_name,
|
|
"acc_id": str(data.get("acc_id", "") or ""),
|
|
"customer_id": str(data.get("from_id", "") or ""),
|
|
"customer_name": client.to_chinese(data.get("from_name", "") or data.get("cy_name", "")),
|
|
"msg_id": str(data.get("msg_id", "") or ""),
|
|
"msg_type": int(data.get("msg_type", 0) or 0),
|
|
"msg": client.to_chinese(data.get("msg", "") or ""),
|
|
"goods_name": client.to_chinese(data.get("goods_name", "") or ""),
|
|
"goods_order": client.to_chinese(data.get("goods_order", "") or ""),
|
|
}
|
|
if extra:
|
|
payload.update(extra)
|
|
async with httpx.AsyncClient(timeout=6, trust_env=trust_env) as http_client:
|
|
resp = await http_client.post(client._tianwang_callback_url, json=payload)
|
|
ok = 200 <= resp.status_code < 300
|
|
client._activity_log(
|
|
"tianwang_callback",
|
|
result="ok" if ok else "http_error",
|
|
event_name=event,
|
|
status_code=resp.status_code,
|
|
acc_id=payload["acc_id"],
|
|
customer_id=payload["customer_id"],
|
|
)
|
|
except Exception as e:
|
|
client._activity_log(
|
|
"tianwang_callback",
|
|
result="error",
|
|
event_name=event,
|
|
acc_id=str(data.get("acc_id", "") or ""),
|
|
customer_id=str(data.get("from_id", "") or ""),
|
|
error=str(e),
|
|
)
|