新增企业微信、微博、WhatsApp、Workplace 四个渠道扩展。 企业微信渠道扩展主要模块:config, gateway, webhook, webhook_bot, outbound, streaming, pairing, security, crypto, dedupe, persistent_dedupe, card, directory, events, externalcontact, media, mentions, menu, message, oauth, status 微博渠道扩展主要模块:config, gateway, webhook, outbound, streaming, pairing, security, dedupe, passive_reply, broadcast, message, menu, media, subscription, template, status WhatsApp 渠道扩展主要模块:config, gateway, webhook, outbound, streaming, pairing, security, dedupe, actions, monitor, status Workplace 渠道扩展主要模块:config, gateway, webhook, outbound, streaming, pairing, security, dedupe, actions, challenge, groups, media, mentions, menu, monitor, persona, quick_reply, signature, subscriptions, template, threading, users, status
117 lines
4.6 KiB
Python
117 lines
4.6 KiB
Python
import os
|
||
|
||
from yuxi.channel.extensions.weibo.types import WeiboAccount
|
||
|
||
|
||
class WeiboConfig:
|
||
ENV_MAP = {
|
||
"app_key": "WEIBO_APP_KEY",
|
||
"app_secret": "WEIBO_APP_SECRET",
|
||
"callback_token": "WEIBO_CALLBACK_TOKEN",
|
||
"access_token": "WEIBO_ACCESS_TOKEN",
|
||
"dm_policy": "WEIBO_DM_POLICY",
|
||
"reply_mode": "WEIBO_REPLY_MODE",
|
||
"subscribe_msg": "WEIBO_SUBSCRIBE_MSG",
|
||
"remove_markdown": "WEIBO_REMOVE_MD",
|
||
"subscribe_guide": "WEIBO_SUBSCRIBE_GUIDE",
|
||
}
|
||
|
||
def list_account_ids(self, config: dict | None = None) -> list[str]:
|
||
if self._resolve_app_key():
|
||
return ["default"]
|
||
return []
|
||
|
||
def resolve_account(self, account_id: str = "default") -> WeiboAccount:
|
||
return WeiboAccount(
|
||
account_id=account_id,
|
||
app_key=self._env_or_config("app_key") or "",
|
||
app_secret=self._env_or_config("app_secret") or "",
|
||
callback_token=self._env_or_config("callback_token") or "",
|
||
access_token=self._env_or_config("access_token") or "",
|
||
dm_policy=self._env_or_config("dm_policy") or "open",
|
||
reply_mode=self._env_or_config("reply_mode") or "active",
|
||
subscribe_msg=self._env_or_config("subscribe_msg") or "",
|
||
remove_markdown=self._env_or_config("remove_markdown") != "false",
|
||
subscribe_guide=self._env_or_config("subscribe_guide") or "",
|
||
)
|
||
|
||
def is_configured(self, account: dict | None = None) -> bool:
|
||
return bool(
|
||
self._resolve_app_key()
|
||
and self._env_or_config("app_secret")
|
||
and self._env_or_config("callback_token")
|
||
and self._env_or_config("access_token")
|
||
)
|
||
|
||
def _resolve_app_key(self) -> str | None:
|
||
return self._env_or_config("app_key")
|
||
|
||
def _env_or_config(self, key: str) -> str | None:
|
||
env_key = self.ENV_MAP.get(key, "")
|
||
if env_key:
|
||
val = os.getenv(env_key)
|
||
if val:
|
||
return val
|
||
return None
|
||
|
||
def config_schema(self) -> dict:
|
||
return {
|
||
"$schema": "https://json-schema.org/draft-07/schema#",
|
||
"type": "object",
|
||
"title": "微博渠道配置",
|
||
"properties": {
|
||
"app_key": {
|
||
"type": "string",
|
||
"title": "App Key",
|
||
"description": "微博开放平台应用的 App Key",
|
||
},
|
||
"app_secret": {
|
||
"type": "string",
|
||
"title": "App Secret",
|
||
"x-ui-password": True,
|
||
"description": "微博开放平台应用的 App Secret",
|
||
},
|
||
"callback_token": {
|
||
"type": "string",
|
||
"title": "回调 Token",
|
||
"description": "微博开放平台配置的自定义 Token(用于 URL 验证签名)",
|
||
},
|
||
"access_token": {
|
||
"type": "string",
|
||
"title": "Access Token",
|
||
"x-ui-password": True,
|
||
"description": "OAuth2 access_token(蓝V后台粉丝服务平台直接获取,有效期约 5 年)",
|
||
},
|
||
"dm_policy": {
|
||
"type": "string",
|
||
"enum": ["open", "pairing", "allowlist", "disabled"],
|
||
"default": "open",
|
||
"title": "DM 策略",
|
||
},
|
||
"reply_mode": {
|
||
"type": "string",
|
||
"enum": ["passive", "active"],
|
||
"default": "active",
|
||
"title": "回复模式",
|
||
"description": "passive=被动回复, active=客服消息 API",
|
||
},
|
||
"subscribe_msg": {
|
||
"type": "string",
|
||
"title": "关注欢迎语",
|
||
"description": "用户关注后自动回复的文本",
|
||
},
|
||
"subscribe_guide": {
|
||
"type": "string",
|
||
"title": "订阅引导语",
|
||
"description": "关注欢迎语后追加的订阅引导文本(如:发送 DY 订阅服务消息)",
|
||
},
|
||
"remove_markdown": {
|
||
"type": "boolean",
|
||
"default": True,
|
||
"title": "移除 Markdown 格式",
|
||
"description": "自动移除 AI 回复中的 Markdown 符号(微博不支持 Markdown 渲染)",
|
||
},
|
||
},
|
||
"required": ["app_key", "app_secret", "callback_token", "access_token"],
|
||
}
|