From fa896704d2cf76fa5a2012ff80d9b74e94d39ba6 Mon Sep 17 00:00:00 2001 From: Gustavo Madeira Santana Date: Wed, 18 Mar 2026 04:03:14 +0000 Subject: [PATCH] WhatsApp: move outbound session routing behind plugin boundary --- extensions/whatsapp/src/channel.ts | 2 ++ extensions/whatsapp/src/session-route.ts | 26 ++++++++++++++++++++++++ 2 files changed, 28 insertions(+) create mode 100644 extensions/whatsapp/src/session-route.ts diff --git a/extensions/whatsapp/src/channel.ts b/extensions/whatsapp/src/channel.ts index 89883742a46..45a5f6b61b8 100644 --- a/extensions/whatsapp/src/channel.ts +++ b/extensions/whatsapp/src/channel.ts @@ -18,6 +18,7 @@ import { isWhatsAppGroupJid, normalizeWhatsAppTarget } from "openclaw/plugin-sdk import { resolveWhatsAppAccount, type ResolvedWhatsAppAccount } from "./accounts.js"; import { looksLikeWhatsAppTargetId, normalizeWhatsAppMessagingTarget } from "./normalize.js"; import { getWhatsAppRuntime } from "./runtime.js"; +import { resolveWhatsAppOutboundSessionRoute } from "./session-route.js"; import { whatsappSetupAdapter } from "./setup-core.js"; import { createWhatsAppPluginBase, @@ -82,6 +83,7 @@ export const whatsappPlugin: ChannelPlugin = { }, messaging: { normalizeTarget: normalizeWhatsAppMessagingTarget, + resolveOutboundSessionRoute: (params) => resolveWhatsAppOutboundSessionRoute(params), parseExplicitTarget: ({ raw }) => parseWhatsAppExplicitTarget(raw), inferTargetChatType: ({ to }) => parseWhatsAppExplicitTarget(to)?.chatType, targetResolver: { diff --git a/extensions/whatsapp/src/session-route.ts b/extensions/whatsapp/src/session-route.ts new file mode 100644 index 00000000000..61750689409 --- /dev/null +++ b/extensions/whatsapp/src/session-route.ts @@ -0,0 +1,26 @@ +import { + buildChannelOutboundSessionRoute, + type ChannelOutboundSessionRouteParams, +} from "openclaw/plugin-sdk/core"; +import { isWhatsAppGroupJid, normalizeWhatsAppTarget } from "openclaw/plugin-sdk/whatsapp"; + +export function resolveWhatsAppOutboundSessionRoute(params: ChannelOutboundSessionRouteParams) { + const normalized = normalizeWhatsAppTarget(params.target); + if (!normalized) { + return null; + } + const isGroup = isWhatsAppGroupJid(normalized); + return buildChannelOutboundSessionRoute({ + cfg: params.cfg, + agentId: params.agentId, + channel: "whatsapp", + accountId: params.accountId, + peer: { + kind: isGroup ? "group" : "direct", + id: normalized, + }, + chatType: isGroup ? "group" : "direct", + from: normalized, + to: normalized, + }); +}