



























@@ -422,6 +422,7 @@ async function dispatchMessage(params: {
422422cfg: ClawdbotConfig;
423423currentCfg?: ClawdbotConfig;
424424event: FeishuMessageEvent;
425+channelRuntime?: PluginRuntime["channel"];
425426}) {
426427const runtime = createRuntimeEnv();
427428const feishuConfig = params.cfg.channels?.feishu;
@@ -443,6 +444,7 @@ async function dispatchMessage(params: {
443444 cfg,
444445event: params.event,
445446 runtime,
447+channelRuntime: params.channelRuntime,
446448});
447449return runtime;
448450}
@@ -960,6 +962,30 @@ describe("handleFeishuMessage ACP routing", () => {
960962);
961963expect(dispatcherOptions.allowReasoningPreview).toBe(true);
962964});
965+966+it("falls back to full runtime channel when partial channelRuntime lacks inbound", async () => {
967+const partialChannelRuntime = {
968+runtimeContexts: {} as PluginRuntime["channel"]["runtimeContexts"],
969+} as PluginRuntime["channel"];
970+971+await dispatchMessage({
972+cfg: {
973+session: { mainKey: "main", scope: "per-sender" },
974+channels: { feishu: { enabled: true, allowFrom: ["ou_sender_1"], dmPolicy: "open" } },
975+},
976+event: {
977+sender: { sender_id: { open_id: "ou_sender_1" } },
978+message: {
979+message_id: "msg-partial-runtime",
980+chat_id: "oc_dm",
981+chat_type: "p2p",
982+message_type: "text",
983+content: JSON.stringify({ text: "hello" }),
984+},
985+},
986+channelRuntime: partialChannelRuntime,
987+});
988+});
963989});
964990965991describe("handleFeishuMessage command authorization", () => {
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。