From f3f0bdcb07934e49a903052814a82e497008ea8b Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Sun, 15 Mar 2026 18:43:08 -0700 Subject: [PATCH] Outbound: preserve shared interactive payloads --- src/infra/outbound/payloads.ts | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/src/infra/outbound/payloads.ts b/src/infra/outbound/payloads.ts index 754d3434445..63cdf09673f 100644 --- a/src/infra/outbound/payloads.ts +++ b/src/infra/outbound/payloads.ts @@ -5,10 +5,12 @@ import { shouldSuppressReasoningPayload, } from "../../auto-reply/reply/reply-payloads.js"; import type { ReplyPayload } from "../../auto-reply/types.js"; +import type { InteractiveReply } from "../../interactive/payload.js"; export type NormalizedOutboundPayload = { text: string; mediaUrls: string[]; + interactive?: InteractiveReply; channelData?: Record; }; @@ -16,6 +18,7 @@ export type OutboundPayloadJson = { text: string; mediaUrl: string | null; mediaUrls?: string[]; + interactive?: InteractiveReply; channelData?: Record; }; @@ -89,15 +92,18 @@ export function normalizeOutboundPayloads( const normalizedPayloads: NormalizedOutboundPayload[] = []; for (const payload of normalizeReplyPayloadsForDelivery(payloads)) { const mediaUrls = payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : []); + const interactive = payload.interactive; const channelData = payload.channelData; const hasChannelData = Boolean(channelData && Object.keys(channelData).length > 0); + const hasInteractive = Boolean(interactive?.blocks.length); const text = payload.text ?? ""; - if (!text && mediaUrls.length === 0 && !hasChannelData) { + if (!text && mediaUrls.length === 0 && !hasInteractive && !hasChannelData) { continue; } normalizedPayloads.push({ text, mediaUrls, + ...(hasInteractive ? { interactive } : {}), ...(hasChannelData ? { channelData } : {}), }); } @@ -113,6 +119,7 @@ export function normalizeOutboundPayloadsForJson( text: payload.text ?? "", mediaUrl: payload.mediaUrl ?? null, mediaUrls: payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : undefined), + interactive: payload.interactive, channelData: payload.channelData, }); }