's'
This commit is contained in:
70
app/services/chatbot_miniprogram_card.py
Normal file
70
app/services/chatbot_miniprogram_card.py
Normal file
@@ -0,0 +1,70 @@
|
||||
"""
|
||||
微信开放平台「小程序卡片」客服消息 msg 结构(与发送客服消息文档一致)。
|
||||
|
||||
字段:title, appid, pagepath, thumb_media_id, thumb_url。
|
||||
"""
|
||||
|
||||
from __future__ import annotations
|
||||
|
||||
import os
|
||||
from typing import Any, Mapping, Optional
|
||||
from urllib.parse import quote
|
||||
|
||||
# 默认值可通过环境变量覆盖,便于不同部署环境配置素材与小程序信息
|
||||
_DEFAULT_TITLE = (os.getenv("CHATBOT_MINIPROGRAM_TITLE") or "openai对话插件").strip()
|
||||
_DEFAULT_APPID = (os.getenv("CHATBOT_MINIPROGRAM_APPID") or "wx8c631f7e9f2465e1").strip()
|
||||
_DEFAULT_PAGEPATH = (os.getenv("CHATBOT_MINIPROGRAM_PAGEPATH") or "pages/index/index").strip()
|
||||
_DEFAULT_THUMB_MEDIA_ID = (
|
||||
os.getenv("CHATBOT_MINIPROGRAM_THUMB_MEDIA_ID") or "KegpipQG9t-klMo25My4e8zpBjhjg3JMrMSpgjikB4U"
|
||||
).strip()
|
||||
_DEFAULT_THUMB_URL = (
|
||||
os.getenv("CHATBOT_MINIPROGRAM_THUMB_URL")
|
||||
or "http://mmbiz.qpic.cn/mmbiz_png/W3gQtpV3j8BYhWgfHT5Hfg6auN94c2ec4BBhDOMtPQrx6vEMc1rR4iaDKxDLOfZ1jBUqIEEY4YpvEj6ktSyXT7g/0?wx_fmt=png"
|
||||
).strip()
|
||||
|
||||
|
||||
def normalize_miniprogrampage_msg(msg: Mapping[str, Any]) -> dict:
|
||||
"""仅保留文档约定的 miniprogrampage 五字段,避免多余键导致客户端不渲染。"""
|
||||
raw = msg.get("miniprogrampage") if isinstance(msg, dict) else None
|
||||
inner = raw if isinstance(raw, dict) else {}
|
||||
return {
|
||||
"miniprogrampage": {
|
||||
"title": str(inner.get("title", "")),
|
||||
"appid": str(inner.get("appid", "")),
|
||||
"pagepath": str(inner.get("pagepath", "")),
|
||||
"thumb_media_id": str(inner.get("thumb_media_id", "")),
|
||||
"thumb_url": str(inner.get("thumb_url", "")),
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
def build_miniprogram_card_msg(
|
||||
*,
|
||||
user_id: str = "",
|
||||
title: Optional[str] = None,
|
||||
appid: Optional[str] = None,
|
||||
pagepath: Optional[str] = None,
|
||||
thumb_media_id: Optional[str] = None,
|
||||
thumb_url: Optional[str] = None,
|
||||
append_userid_to_pagepath: bool = True,
|
||||
) -> dict:
|
||||
"""
|
||||
返回完整客服 msg:{\"miniprogrampage\": {...}}。
|
||||
|
||||
若 append_userid_to_pagepath 且 user_id 非空,在 pagepath 上追加 ?userid=(已有查询串则用 &)。
|
||||
"""
|
||||
uid = (user_id or "").strip()
|
||||
base_path = (pagepath if pagepath is not None else _DEFAULT_PAGEPATH).strip()
|
||||
if append_userid_to_pagepath and uid:
|
||||
sep = "&" if "?" in base_path else "?"
|
||||
base_path = f"{base_path}{sep}userid={quote(uid, safe='')}"
|
||||
|
||||
return {
|
||||
"miniprogrampage": {
|
||||
"title": str(title if title is not None else _DEFAULT_TITLE),
|
||||
"appid": str(appid if appid is not None else _DEFAULT_APPID),
|
||||
"pagepath": base_path,
|
||||
"thumb_media_id": str(thumb_media_id if thumb_media_id is not None else _DEFAULT_THUMB_MEDIA_ID),
|
||||
"thumb_url": str(thumb_url if thumb_url is not None else _DEFAULT_THUMB_URL),
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user