🚀 Socket Launch Week Day 5:Introducing Repository Access Permissions and Custom Roles.Learn more
Sign In

@openclaw-china/channels

Package Overview
Dependencies
Maintainers
2
Versions
61
Alerts
File Explorer

Advanced tools

Socket logo

Install Socket

Detect and block malicious and high-risk dependencies

Install

@openclaw-china/channels - npm Package Compare versions

Comparing version
2026.3.12
to
2026.3.16
+10
-2
dist/index.d.ts

@@ -5,2 +5,3 @@ export { DEFAULT_ACCOUNT_ID as DINGTALK_DEFAULT_ACCOUNT_ID, DingtalkConfig, DingtalkSendResult, ResolvedDingtalkAccount, dingtalkPlugin, getDingtalkRuntime, sendMessageDingtalk, setDingtalkRuntime } from '@openclaw-china/dingtalk';

export { AccessTokenCacheEntry, ResolvedWecomAppAccount, DEFAULT_ACCOUNT_ID as WECOM_APP_DEFAULT_ACCOUNT_ID, WecomAppConfig, WecomAppDmPolicy, WecomAppInboundMessage, WecomAppSendTarget, clearAccessTokenCache, clearAllAccessTokenCache, downloadAndSendImage, getAccessToken, getWecomAppRuntime, sendWecomAppImageMessage, sendWecomAppMarkdownMessage, sendWecomAppMessage, setWecomAppRuntime, stripMarkdown, wecomAppPlugin } from '@openclaw-china/wecom-app';
export { ResolvedWecomKfAccount, DEFAULT_ACCOUNT_ID as WECOM_KF_DEFAULT_ACCOUNT_ID, WecomKfAccountConfig, WecomKfConfig, WecomKfDmPolicy, SyncMsgItem as WecomKfSyncMsgItem, SyncMsgResponse as WecomKfSyncMsgResponse, getWecomKfRuntime, setWecomKfRuntime, wecomKfPlugin } from '@openclaw-china/wecom-kf';
export { DEFAULT_ACCOUNT_ID as QQBOT_DEFAULT_ACCOUNT_ID, QQBotConfig, QQBotSendResult, ResolvedQQBotAccount, getQQBotRuntime, qqbotPlugin, setQQBotRuntime } from '@openclaw-china/qqbot';

@@ -37,2 +38,8 @@

}
interface WecomKfRouteConfig extends ChannelConfig {
webhookPath?: string;
accounts?: Record<string, {
webhookPath?: string;
}>;
}
/**

@@ -48,2 +55,3 @@ * Moltbot 配置接口(符合官方约定)

"wecom-app"?: WecomAppRouteConfig;
"wecom-kf"?: WecomKfRouteConfig;
qqbot?: ChannelConfig;

@@ -84,3 +92,3 @@ qq?: ChannelConfig;

*/
declare const SUPPORTED_CHANNELS: readonly ["dingtalk", "feishu-china", "wecom", "wecom-app", "qqbot"];
declare const SUPPORTED_CHANNELS: readonly ["dingtalk", "feishu-china", "wecom", "wecom-app", "wecom-kf", "qqbot"];
type SupportedChannel = (typeof SUPPORTED_CHANNELS)[number];

@@ -133,2 +141,2 @@ /**

export { type ChannelConfig, type MoltbotConfig, type MoltbotPluginApi, SUPPORTED_CHANNELS, type SupportedChannel, type WecomAppRouteConfig, type WecomRouteConfig, channelsPlugin as default, registerChannelsByConfig };
export { type ChannelConfig, type MoltbotConfig, type MoltbotPluginApi, SUPPORTED_CHANNELS, type SupportedChannel, type WecomAppRouteConfig, type WecomKfRouteConfig, type WecomRouteConfig, channelsPlugin as default, registerChannelsByConfig };

@@ -9,2 +9,4 @@ import dingtalkEntry from '@openclaw-china/dingtalk';

export { DEFAULT_ACCOUNT_ID as WECOM_APP_DEFAULT_ACCOUNT_ID, clearAccessTokenCache, clearAllAccessTokenCache, downloadAndSendImage, getAccessToken, getWecomAppRuntime, sendWecomAppImageMessage, sendWecomAppMarkdownMessage, sendWecomAppMessage, setWecomAppRuntime, stripMarkdown, wecomAppPlugin } from '@openclaw-china/wecom-app';
import wecomKfEntry from '@openclaw-china/wecom-kf';
export { DEFAULT_ACCOUNT_ID as WECOM_KF_DEFAULT_ACCOUNT_ID, getWecomKfRuntime, setWecomKfRuntime, wecomKfPlugin } from '@openclaw-china/wecom-kf';
import qqbotEntry from '@openclaw-china/qqbot';

@@ -15,3 +17,3 @@ export { DEFAULT_ACCOUNT_ID as QQBOT_DEFAULT_ACCOUNT_ID, getQQBotRuntime, qqbotPlugin, setQQBotRuntime } from '@openclaw-china/qqbot';

// src/index.ts
var SUPPORTED_CHANNELS = ["dingtalk", "feishu-china", "wecom", "wecom-app", "qqbot"];
var SUPPORTED_CHANNELS = ["dingtalk", "feishu-china", "wecom", "wecom-app", "wecom-kf", "qqbot"];
var channelPlugins = {

@@ -38,2 +40,7 @@ dingtalk: {

},
"wecom-kf": {
register: (api) => {
wecomKfEntry.register(api);
}
},
qqbot: {

@@ -40,0 +47,0 @@ register: (api) => {

+1
-1

@@ -1,1 +0,1 @@

{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;AA0LO,IAAM,qBAAqB,CAAC,UAAA,EAAY,cAAA,EAAgB,OAAA,EAAS,aAAa,OAAO;AAK5F,IAAM,cAAA,GAA0F;AAAA,EAC9F,QAAA,EAAU;AAAA,IACR,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,aAAA,CAAc,SAAS,GAAG,CAAA;AAAA,IAC5B;AAAA,GACF;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,WAAA,CAAY,SAAS,GAAG,CAAA;AAAA,IAC1B;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,IACzB;AAAA,GACF;AAAA,EACA,WAAA,EAAa;AAAA,IACX,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,aAAA,CAAc,SAAS,GAAG,CAAA;AAAA,IAC5B;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,IACzB;AAAA;AAEJ,CAAA;AAwBO,SAAS,wBAAA,CACd,KACA,GAAA,EACM;AAEN,EAAA,MAAM,MAAA,GAAS,OAAO,GAAA,CAAI,MAAA;AAC1B,EAAA,MAAM,iBAAiB,MAAA,EAAQ,QAAA;AAE/B,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,aAAa,kBAAA,EAAoB;AAE1C,IAAA,MAAM,aAAA,GAAgB,eAAe,SAAS,CAAA;AAG9C,IAAA,IAAI,CAAC,eAAe,OAAA,EAAS;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,eAAe,SAAS,CAAA;AACvC,IAAA,MAAA,CAAO,SAAS,GAAG,CAAA;AAAA,EACrB;AACF;AAQA,IAAM,cAAA,GAAiB;AAAA,EACrB,EAAA,EAAI,UAAA;AAAA,EACJ,IAAA,EAAM,wBAAA;AAAA,EACN,WAAA,EAAa,0HAAA;AAAA,EAEb,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,QAAA;AAAA,IACN,oBAAA,EAAsB,KAAA;AAAA,IACtB,YAAY;AAAC,GACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,GAAA,EAAuB;AAC9B,IAAA,qBAAA,CAAsB,GAAA,EAAK,EAAE,QAAA,EAAU,kBAAA,EAAoB,CAAA;AAC3D,IAAA,oBAAA,CAAqB,GAAG,CAAA;AACxB,IAAA,wBAAA,CAAyB,GAAG,CAAA;AAAA,EAC9B;AACF,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"index.js","sourcesContent":["/**\r\n * @openclaw-china/channels\r\n * 统一渠道包入口\r\n *\r\n * 导出所有渠道插件,提供统一注册函数\r\n *\r\n * Requirements: Unified Package Entry, Unified Distribution\r\n */\r\n\r\n// 导出 DingTalk 插件\r\nimport {\r\n dingtalkPlugin,\r\n DEFAULT_ACCOUNT_ID as DINGTALK_DEFAULT_ACCOUNT_ID,\r\n sendMessageDingtalk,\r\n setDingtalkRuntime,\r\n getDingtalkRuntime,\r\n} from \"@openclaw-china/dingtalk\";\r\nimport dingtalkEntry from \"@openclaw-china/dingtalk\";\r\nimport {\r\n feishuPlugin,\r\n DEFAULT_ACCOUNT_ID as FEISHU_DEFAULT_ACCOUNT_ID,\r\n sendMessageFeishu,\r\n setFeishuRuntime,\r\n getFeishuRuntime,\r\n} from \"@openclaw-china/feishu-china\";\r\nimport feishuEntry from \"@openclaw-china/feishu-china\";\r\nimport {\r\n wecomPlugin,\r\n DEFAULT_ACCOUNT_ID as WECOM_DEFAULT_ACCOUNT_ID,\r\n setWecomRuntime,\r\n getWecomRuntime,\r\n} from \"@openclaw-china/wecom\";\r\nimport wecomEntry from \"@openclaw-china/wecom\";\r\nimport {\r\n wecomAppPlugin,\r\n DEFAULT_ACCOUNT_ID as WECOM_APP_DEFAULT_ACCOUNT_ID,\r\n setWecomAppRuntime,\r\n getWecomAppRuntime,\r\n sendWecomAppMessage,\r\n getAccessToken,\r\n sendWecomAppMarkdownMessage,\r\n stripMarkdown,\r\n clearAccessTokenCache,\r\n clearAllAccessTokenCache,\r\n downloadAndSendImage,\r\n sendWecomAppImageMessage,\r\n} from \"@openclaw-china/wecom-app\";\r\nimport wecomAppEntry from \"@openclaw-china/wecom-app\";\r\nimport {\r\n qqbotPlugin,\r\n DEFAULT_ACCOUNT_ID as QQBOT_DEFAULT_ACCOUNT_ID,\r\n setQQBotRuntime,\r\n getQQBotRuntime,\r\n} from \"@openclaw-china/qqbot\";\r\nimport qqbotEntry from \"@openclaw-china/qqbot\";\r\nimport { registerChinaSetupCli, showChinaInstallHint } from \"@openclaw-china/shared\";\r\n\r\nexport {\r\n dingtalkPlugin,\r\n DINGTALK_DEFAULT_ACCOUNT_ID,\r\n sendMessageDingtalk,\r\n setDingtalkRuntime,\r\n getDingtalkRuntime,\r\n feishuPlugin,\r\n FEISHU_DEFAULT_ACCOUNT_ID,\r\n sendMessageFeishu,\r\n setFeishuRuntime,\r\n getFeishuRuntime,\r\n wecomPlugin,\r\n WECOM_DEFAULT_ACCOUNT_ID,\r\n setWecomRuntime,\r\n getWecomRuntime,\r\n wecomAppPlugin,\r\n WECOM_APP_DEFAULT_ACCOUNT_ID,\r\n setWecomAppRuntime,\r\n getWecomAppRuntime,\r\n sendWecomAppMessage,\r\n getAccessToken,\r\n sendWecomAppMarkdownMessage,\r\n stripMarkdown,\r\n clearAccessTokenCache,\r\n clearAllAccessTokenCache,\r\n downloadAndSendImage,\r\n sendWecomAppImageMessage,\r\n qqbotPlugin,\r\n QQBOT_DEFAULT_ACCOUNT_ID,\r\n setQQBotRuntime,\r\n getQQBotRuntime,\r\n};\r\n\r\nexport type {\r\n DingtalkConfig,\r\n ResolvedDingtalkAccount,\r\n DingtalkSendResult,\r\n} from \"@openclaw-china/dingtalk\";\r\nexport type {\r\n FeishuConfig,\r\n ResolvedFeishuAccount,\r\n FeishuSendResult,\r\n} from \"@openclaw-china/feishu-china\";\r\nexport type { WecomConfig, ResolvedWecomAccount, WecomInboundMessage } from \"@openclaw-china/wecom\";\r\nexport type {\r\n WecomAppConfig,\r\n ResolvedWecomAppAccount,\r\n WecomAppInboundMessage,\r\n WecomAppDmPolicy,\r\n WecomAppSendTarget,\r\n AccessTokenCacheEntry,\r\n} from \"@openclaw-china/wecom-app\";\r\nexport type { QQBotConfig, ResolvedQQBotAccount, QQBotSendResult } from \"@openclaw-china/qqbot\";\r\n\r\n// TODO: 后续添加其他渠道\r\n// export { qqPlugin } from \"@openclaw-china/qq\";\r\n\r\n/**\r\n * 渠道配置接口\r\n */\r\nexport interface ChannelConfig {\r\n /** 是否启用该渠道 */\r\n enabled?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface WecomRouteConfig extends ChannelConfig {\r\n webhookPath?: string;\r\n accounts?: Record<\r\n string,\r\n {\r\n webhookPath?: string;\r\n }\r\n >;\r\n}\r\n\r\nexport interface WecomAppRouteConfig extends ChannelConfig {\r\n webhookPath?: string;\r\n accounts?: Record<\r\n string,\r\n {\r\n webhookPath?: string;\r\n }\r\n >;\r\n}\r\n\r\n/**\r\n * Moltbot 配置接口(符合官方约定)\r\n * 配置路径: channels.<id>.enabled\r\n */\r\nexport interface MoltbotConfig {\r\n channels?: {\r\n dingtalk?: ChannelConfig;\r\n \"feishu-china\"?: ChannelConfig;\r\n wecom?: WecomRouteConfig;\r\n \"wecom-app\"?: WecomAppRouteConfig;\r\n qqbot?: ChannelConfig;\r\n qq?: ChannelConfig;\r\n [key: string]: ChannelConfig | undefined;\r\n };\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Moltbot 插件 API 接口\r\n */\r\nexport interface MoltbotPluginApi {\r\n registerChannel: (opts: { plugin: unknown }) => void;\r\n registerCli?: (\r\n registrar: (ctx: { program: unknown; config?: MoltbotConfig }) => void | Promise<void>,\r\n opts?: { commands?: string[] }\r\n ) => void;\r\n logger?: {\r\n info?: (message: string) => void;\r\n warn?: (message: string) => void;\r\n error?: (message: string) => void;\r\n };\r\n runtime?: {\r\n config?: {\r\n writeConfigFile?: (cfg: unknown) => Promise<void>;\r\n };\r\n };\r\n config?: MoltbotConfig;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * 支持的渠道列表\r\n */\r\nexport const SUPPORTED_CHANNELS = [\"dingtalk\", \"feishu-china\", \"wecom\", \"wecom-app\", \"qqbot\"] as const;\r\n// TODO: 鍚庣画娣诲姞 \"qq\"\r\n\r\nexport type SupportedChannel = (typeof SUPPORTED_CHANNELS)[number];\r\n\r\nconst channelPlugins: Record<SupportedChannel, { register: (api: MoltbotPluginApi) => void }> = {\r\n dingtalk: {\r\n register: (api: MoltbotPluginApi) => {\r\n dingtalkEntry.register(api);\r\n },\r\n },\r\n \"feishu-china\": {\r\n register: (api: MoltbotPluginApi) => {\r\n feishuEntry.register(api);\r\n },\r\n },\r\n wecom: {\r\n register: (api: MoltbotPluginApi) => {\r\n wecomEntry.register(api);\r\n },\r\n },\r\n \"wecom-app\": {\r\n register: (api: MoltbotPluginApi) => {\r\n wecomAppEntry.register(api);\r\n },\r\n },\r\n qqbot: {\r\n register: (api: MoltbotPluginApi) => {\r\n qqbotEntry.register(api);\r\n },\r\n },\r\n};\r\n\r\n/**\r\n * 根据 Moltbot 配置注册启用的渠道\r\n *\r\n * 符合 Moltbot 官方约定:从 cfg.channels.<id>.enabled 读取配置\r\n *\r\n * @param api Moltbot 鎻掍欢 API\r\n * @param cfg Moltbot 配置(可选,默认从 api.config 读取)\r\n *\r\n * @example\r\n * ```ts\r\n * // moltbot.json 配置\r\n * {\r\n * \"channels\": {\r\n * \"dingtalk\": {\r\n * \"enabled\": true,\r\n * \"clientId\": \"...\",\r\n * \"clientSecret\": \"...\"\r\n * }\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function registerChannelsByConfig(\r\n api: MoltbotPluginApi,\r\n cfg?: MoltbotConfig\r\n): void {\r\n // 从 api.config 或传入的 cfg 获取配置\r\n const config = cfg ?? api.config;\r\n const channelsConfig = config?.channels;\r\n\r\n if (!channelsConfig) {\r\n return;\r\n }\r\n\r\n for (const channelId of SUPPORTED_CHANNELS) {\r\n // 符合官方约定:从 channels.<id>.enabled 读取\r\n const channelConfig = channelsConfig[channelId];\r\n\r\n // 跳过未启用的渠道\r\n if (!channelConfig?.enabled) {\r\n continue;\r\n }\r\n\r\n const plugin = channelPlugins[channelId];\r\n plugin.register(api);\r\n }\r\n}\r\n\r\n/**\r\n * 统一渠道插件定义\r\n *\r\n * 包含所有支持的渠道,通过配置启用\r\n * 配置路径符合 Moltbot 官方约定: channels.<id>\r\n */\r\nconst channelsPlugin = {\r\n id: \"channels\",\r\n name: \"Moltbot China Channels\",\r\n description: \"统一渠道包,支持钉钉、飞书、企业微信、QQ Bot\",\r\n\r\n configSchema: {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {},\r\n },\r\n\r\n /**\r\n * 注册所有启用的渠道\r\n *\r\n * 从 api.config.channels.<id>.enabled 读取配置\r\n */\r\n register(api: MoltbotPluginApi) {\r\n registerChinaSetupCli(api, { channels: SUPPORTED_CHANNELS });\r\n showChinaInstallHint(api);\r\n registerChannelsByConfig(api);\r\n },\r\n};\r\n\r\nexport default channelsPlugin;\r\n"]}
{"version":3,"sources":["../src/index.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;AAwNO,IAAM,qBAAqB,CAAC,UAAA,EAAY,gBAAgB,OAAA,EAAS,WAAA,EAAa,YAAY,OAAO;AAKxG,IAAM,cAAA,GAA0F;AAAA,EAC9F,QAAA,EAAU;AAAA,IACR,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,aAAA,CAAc,SAAS,GAAG,CAAA;AAAA,IAC5B;AAAA,GACF;AAAA,EACA,cAAA,EAAgB;AAAA,IACd,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,WAAA,CAAY,SAAS,GAAG,CAAA;AAAA,IAC1B;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,IACzB;AAAA,GACF;AAAA,EACA,WAAA,EAAa;AAAA,IACX,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,aAAA,CAAc,SAAS,GAAG,CAAA;AAAA,IAC5B;AAAA,GACF;AAAA,EACA,UAAA,EAAY;AAAA,IACV,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,YAAA,CAAa,SAAS,GAAG,CAAA;AAAA,IAC3B;AAAA,GACF;AAAA,EACA,KAAA,EAAO;AAAA,IACL,QAAA,EAAU,CAAC,GAAA,KAA0B;AACnC,MAAA,UAAA,CAAW,SAAS,GAAG,CAAA;AAAA,IACzB;AAAA;AAEJ,CAAA;AAwBO,SAAS,wBAAA,CACd,KACA,GAAA,EACM;AAEN,EAAA,MAAM,MAAA,GAAS,OAAO,GAAA,CAAI,MAAA;AAC1B,EAAA,MAAM,iBAAiB,MAAA,EAAQ,QAAA;AAE/B,EAAA,IAAI,CAAC,cAAA,EAAgB;AACnB,IAAA;AAAA,EACF;AAEA,EAAA,KAAA,MAAW,aAAa,kBAAA,EAAoB;AAE1C,IAAA,MAAM,aAAA,GAAgB,eAAe,SAAS,CAAA;AAG9C,IAAA,IAAI,CAAC,eAAe,OAAA,EAAS;AAC3B,MAAA;AAAA,IACF;AAEA,IAAA,MAAM,MAAA,GAAS,eAAe,SAAS,CAAA;AACvC,IAAA,MAAA,CAAO,SAAS,GAAG,CAAA;AAAA,EACrB;AACF;AAQA,IAAM,cAAA,GAAiB;AAAA,EACrB,EAAA,EAAI,UAAA;AAAA,EACJ,IAAA,EAAM,wBAAA;AAAA,EACN,WAAA,EAAa,0HAAA;AAAA,EAEb,YAAA,EAAc;AAAA,IACZ,IAAA,EAAM,QAAA;AAAA,IACN,oBAAA,EAAsB,KAAA;AAAA,IACtB,YAAY;AAAC,GACf;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA,EAOA,SAAS,GAAA,EAAuB;AAC9B,IAAA,qBAAA,CAAsB,GAAA,EAAK,EAAE,QAAA,EAAU,kBAAA,EAAoB,CAAA;AAC3D,IAAA,oBAAA,CAAqB,GAAG,CAAA;AACxB,IAAA,wBAAA,CAAyB,GAAG,CAAA;AAAA,EAC9B;AACF,CAAA;AAEA,IAAO,aAAA,GAAQ","file":"index.js","sourcesContent":["/**\r\n * @openclaw-china/channels\r\n * 统一渠道包入口\r\n *\r\n * 导出所有渠道插件,提供统一注册函数\r\n *\r\n * Requirements: Unified Package Entry, Unified Distribution\r\n */\r\n\r\n// 导出 DingTalk 插件\r\nimport {\r\n dingtalkPlugin,\r\n DEFAULT_ACCOUNT_ID as DINGTALK_DEFAULT_ACCOUNT_ID,\r\n sendMessageDingtalk,\r\n setDingtalkRuntime,\r\n getDingtalkRuntime,\r\n} from \"@openclaw-china/dingtalk\";\r\nimport dingtalkEntry from \"@openclaw-china/dingtalk\";\r\nimport {\r\n feishuPlugin,\r\n DEFAULT_ACCOUNT_ID as FEISHU_DEFAULT_ACCOUNT_ID,\r\n sendMessageFeishu,\r\n setFeishuRuntime,\r\n getFeishuRuntime,\r\n} from \"@openclaw-china/feishu-china\";\r\nimport feishuEntry from \"@openclaw-china/feishu-china\";\r\nimport {\r\n wecomPlugin,\r\n DEFAULT_ACCOUNT_ID as WECOM_DEFAULT_ACCOUNT_ID,\r\n setWecomRuntime,\r\n getWecomRuntime,\r\n} from \"@openclaw-china/wecom\";\r\nimport wecomEntry from \"@openclaw-china/wecom\";\r\nimport {\r\n wecomAppPlugin,\r\n DEFAULT_ACCOUNT_ID as WECOM_APP_DEFAULT_ACCOUNT_ID,\r\n setWecomAppRuntime,\r\n getWecomAppRuntime,\r\n sendWecomAppMessage,\r\n getAccessToken,\r\n sendWecomAppMarkdownMessage,\r\n stripMarkdown,\r\n clearAccessTokenCache,\r\n clearAllAccessTokenCache,\r\n downloadAndSendImage,\r\n sendWecomAppImageMessage,\r\n} from \"@openclaw-china/wecom-app\";\r\nimport wecomAppEntry from \"@openclaw-china/wecom-app\";\r\nimport {\r\n wecomKfPlugin,\r\n DEFAULT_ACCOUNT_ID as WECOM_KF_DEFAULT_ACCOUNT_ID,\r\n setWecomKfRuntime,\r\n getWecomKfRuntime,\r\n} from \"@openclaw-china/wecom-kf\";\r\nimport wecomKfEntry from \"@openclaw-china/wecom-kf\";\r\nimport {\r\n qqbotPlugin,\r\n DEFAULT_ACCOUNT_ID as QQBOT_DEFAULT_ACCOUNT_ID,\r\n setQQBotRuntime,\r\n getQQBotRuntime,\r\n} from \"@openclaw-china/qqbot\";\r\nimport qqbotEntry from \"@openclaw-china/qqbot\";\r\nimport { registerChinaSetupCli, showChinaInstallHint } from \"@openclaw-china/shared\";\r\n\r\nexport {\r\n dingtalkPlugin,\r\n DINGTALK_DEFAULT_ACCOUNT_ID,\r\n sendMessageDingtalk,\r\n setDingtalkRuntime,\r\n getDingtalkRuntime,\r\n feishuPlugin,\r\n FEISHU_DEFAULT_ACCOUNT_ID,\r\n sendMessageFeishu,\r\n setFeishuRuntime,\r\n getFeishuRuntime,\r\n wecomPlugin,\r\n WECOM_DEFAULT_ACCOUNT_ID,\r\n setWecomRuntime,\r\n getWecomRuntime,\r\n wecomAppPlugin,\r\n WECOM_APP_DEFAULT_ACCOUNT_ID,\r\n setWecomAppRuntime,\r\n getWecomAppRuntime,\r\n sendWecomAppMessage,\r\n getAccessToken,\r\n sendWecomAppMarkdownMessage,\r\n stripMarkdown,\r\n clearAccessTokenCache,\r\n clearAllAccessTokenCache,\r\n downloadAndSendImage,\r\n sendWecomAppImageMessage,\r\n wecomKfPlugin,\r\n WECOM_KF_DEFAULT_ACCOUNT_ID,\r\n setWecomKfRuntime,\r\n getWecomKfRuntime,\r\n qqbotPlugin,\r\n QQBOT_DEFAULT_ACCOUNT_ID,\r\n setQQBotRuntime,\r\n getQQBotRuntime,\r\n};\r\n\r\nexport type {\r\n DingtalkConfig,\r\n ResolvedDingtalkAccount,\r\n DingtalkSendResult,\r\n} from \"@openclaw-china/dingtalk\";\r\nexport type {\r\n FeishuConfig,\r\n ResolvedFeishuAccount,\r\n FeishuSendResult,\r\n} from \"@openclaw-china/feishu-china\";\r\nexport type { WecomConfig, ResolvedWecomAccount, WecomInboundMessage } from \"@openclaw-china/wecom\";\r\nexport type {\r\n WecomAppConfig,\r\n ResolvedWecomAppAccount,\r\n WecomAppInboundMessage,\r\n WecomAppDmPolicy,\r\n WecomAppSendTarget,\r\n AccessTokenCacheEntry,\r\n} from \"@openclaw-china/wecom-app\";\r\nexport type {\r\n WecomKfConfig,\r\n WecomKfAccountConfig,\r\n ResolvedWecomKfAccount,\r\n WecomKfDmPolicy,\r\n SyncMsgItem as WecomKfSyncMsgItem,\r\n SyncMsgResponse as WecomKfSyncMsgResponse,\r\n} from \"@openclaw-china/wecom-kf\";\r\nexport type { QQBotConfig, ResolvedQQBotAccount, QQBotSendResult } from \"@openclaw-china/qqbot\";\r\n\r\n// TODO: 后续添加其他渠道\r\n// export { qqPlugin } from \"@openclaw-china/qq\";\r\n\r\n/**\r\n * 渠道配置接口\r\n */\r\nexport interface ChannelConfig {\r\n /** 是否启用该渠道 */\r\n enabled?: boolean;\r\n [key: string]: unknown;\r\n}\r\n\r\nexport interface WecomRouteConfig extends ChannelConfig {\r\n webhookPath?: string;\r\n accounts?: Record<\r\n string,\r\n {\r\n webhookPath?: string;\r\n }\r\n >;\r\n}\r\n\r\nexport interface WecomAppRouteConfig extends ChannelConfig {\r\n webhookPath?: string;\r\n accounts?: Record<\r\n string,\r\n {\r\n webhookPath?: string;\r\n }\r\n >;\r\n}\r\n\r\nexport interface WecomKfRouteConfig extends ChannelConfig {\r\n webhookPath?: string;\r\n accounts?: Record<\r\n string,\r\n {\r\n webhookPath?: string;\r\n }\r\n >;\r\n}\r\n\r\n/**\r\n * Moltbot 配置接口(符合官方约定)\r\n * 配置路径: channels.<id>.enabled\r\n */\r\nexport interface MoltbotConfig {\r\n channels?: {\r\n dingtalk?: ChannelConfig;\r\n \"feishu-china\"?: ChannelConfig;\r\n wecom?: WecomRouteConfig;\r\n \"wecom-app\"?: WecomAppRouteConfig;\r\n \"wecom-kf\"?: WecomKfRouteConfig;\r\n qqbot?: ChannelConfig;\r\n qq?: ChannelConfig;\r\n [key: string]: ChannelConfig | undefined;\r\n };\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * Moltbot 插件 API 接口\r\n */\r\nexport interface MoltbotPluginApi {\r\n registerChannel: (opts: { plugin: unknown }) => void;\r\n registerCli?: (\r\n registrar: (ctx: { program: unknown; config?: MoltbotConfig }) => void | Promise<void>,\r\n opts?: { commands?: string[] }\r\n ) => void;\r\n logger?: {\r\n info?: (message: string) => void;\r\n warn?: (message: string) => void;\r\n error?: (message: string) => void;\r\n };\r\n runtime?: {\r\n config?: {\r\n writeConfigFile?: (cfg: unknown) => Promise<void>;\r\n };\r\n };\r\n config?: MoltbotConfig;\r\n [key: string]: unknown;\r\n}\r\n\r\n/**\r\n * 支持的渠道列表\r\n */\r\nexport const SUPPORTED_CHANNELS = [\"dingtalk\", \"feishu-china\", \"wecom\", \"wecom-app\", \"wecom-kf\", \"qqbot\"] as const;\r\n// TODO: 鍚庣画娣诲姞 \"qq\"\r\n\r\nexport type SupportedChannel = (typeof SUPPORTED_CHANNELS)[number];\r\n\r\nconst channelPlugins: Record<SupportedChannel, { register: (api: MoltbotPluginApi) => void }> = {\r\n dingtalk: {\r\n register: (api: MoltbotPluginApi) => {\r\n dingtalkEntry.register(api);\r\n },\r\n },\r\n \"feishu-china\": {\r\n register: (api: MoltbotPluginApi) => {\r\n feishuEntry.register(api);\r\n },\r\n },\r\n wecom: {\r\n register: (api: MoltbotPluginApi) => {\r\n wecomEntry.register(api);\r\n },\r\n },\r\n \"wecom-app\": {\r\n register: (api: MoltbotPluginApi) => {\r\n wecomAppEntry.register(api);\r\n },\r\n },\r\n \"wecom-kf\": {\r\n register: (api: MoltbotPluginApi) => {\r\n wecomKfEntry.register(api);\r\n },\r\n },\r\n qqbot: {\r\n register: (api: MoltbotPluginApi) => {\r\n qqbotEntry.register(api);\r\n },\r\n },\r\n};\r\n\r\n/**\r\n * 根据 Moltbot 配置注册启用的渠道\r\n *\r\n * 符合 Moltbot 官方约定:从 cfg.channels.<id>.enabled 读取配置\r\n *\r\n * @param api Moltbot 鎻掍欢 API\r\n * @param cfg Moltbot 配置(可选,默认从 api.config 读取)\r\n *\r\n * @example\r\n * ```ts\r\n * // moltbot.json 配置\r\n * {\r\n * \"channels\": {\r\n * \"dingtalk\": {\r\n * \"enabled\": true,\r\n * \"clientId\": \"...\",\r\n * \"clientSecret\": \"...\"\r\n * }\r\n * }\r\n * }\r\n * ```\r\n */\r\nexport function registerChannelsByConfig(\r\n api: MoltbotPluginApi,\r\n cfg?: MoltbotConfig\r\n): void {\r\n // 从 api.config 或传入的 cfg 获取配置\r\n const config = cfg ?? api.config;\r\n const channelsConfig = config?.channels;\r\n\r\n if (!channelsConfig) {\r\n return;\r\n }\r\n\r\n for (const channelId of SUPPORTED_CHANNELS) {\r\n // 符合官方约定:从 channels.<id>.enabled 读取\r\n const channelConfig = channelsConfig[channelId];\r\n\r\n // 跳过未启用的渠道\r\n if (!channelConfig?.enabled) {\r\n continue;\r\n }\r\n\r\n const plugin = channelPlugins[channelId];\r\n plugin.register(api);\r\n }\r\n}\r\n\r\n/**\r\n * 统一渠道插件定义\r\n *\r\n * 包含所有支持的渠道,通过配置启用\r\n * 配置路径符合 Moltbot 官方约定: channels.<id>\r\n */\r\nconst channelsPlugin = {\r\n id: \"channels\",\r\n name: \"Moltbot China Channels\",\r\n description: \"统一渠道包,支持钉钉、飞书、企业微信、QQ Bot\",\r\n\r\n configSchema: {\r\n type: \"object\",\r\n additionalProperties: false,\r\n properties: {},\r\n },\r\n\r\n /**\r\n * 注册所有启用的渠道\r\n *\r\n * 从 api.config.channels.<id>.enabled 读取配置\r\n */\r\n register(api: MoltbotPluginApi) {\r\n registerChinaSetupCli(api, { channels: SUPPORTED_CHANNELS });\r\n showChinaInstallHint(api);\r\n registerChannelsByConfig(api);\r\n },\r\n};\r\n\r\nexport default channelsPlugin;\r\n"]}
{
"id": "channels",
"name": "Moltbot China Channels",
"description": "统一渠道包,支持钉钉、飞书、企业微信智能机器人、企业微信自建应用、QQ Bot",
"description": "统一渠道包,支持钉钉、飞书、企业微信智能机器人、企业微信自建应用、微信客服、QQ Bot",
"version": "0.1.0",
"channels": ["dingtalk", "feishu-china", "wecom", "wecom-app", "qqbot"],
"channels": ["dingtalk", "feishu-china", "wecom", "wecom-app", "wecom-kf", "qqbot"],
"configSchema": {

@@ -8,0 +8,0 @@ "type": "object",

{
"name": "@openclaw-china/channels",
"version": "2026.3.12",
"version": "2026.3.16",
"type": "module",

@@ -58,8 +58,9 @@ "description": "Unified package for all Moltbot China channel plugins",

"@clack/prompts": "^1.0.0",
"@openclaw-china/dingtalk": "2026.3.12",
"@openclaw-china/feishu-china": "2026.3.12",
"@openclaw-china/qqbot": "2026.3.12",
"@openclaw-china/shared": "2026.3.12",
"@openclaw-china/wecom": "2026.3.12",
"@openclaw-china/wecom-app": "2026.3.12"
"@openclaw-china/dingtalk": "2026.3.16",
"@openclaw-china/feishu-china": "2026.3.16",
"@openclaw-china/qqbot": "2026.3.16",
"@openclaw-china/shared": "2026.3.16",
"@openclaw-china/wecom": "2026.3.16",
"@openclaw-china/wecom-app": "2026.3.16",
"@openclaw-china/wecom-kf": "2026.3.16"
},

@@ -66,0 +67,0 @@ "devDependencies": {