Outbound: preserve shared interactive payloads

This commit is contained in:
Vincent Koc 2026-03-15 18:43:08 -07:00
parent bb34721175
commit b1ac4e1d8e

View File

@ -5,10 +5,12 @@ import {
shouldSuppressReasoningPayload, shouldSuppressReasoningPayload,
} from "../../auto-reply/reply/reply-payloads.js"; } from "../../auto-reply/reply/reply-payloads.js";
import type { ReplyPayload } from "../../auto-reply/types.js"; import type { ReplyPayload } from "../../auto-reply/types.js";
import type { InteractiveReply } from "../../interactive/payload.js";
export type NormalizedOutboundPayload = { export type NormalizedOutboundPayload = {
text: string; text: string;
mediaUrls: string[]; mediaUrls: string[];
interactive?: InteractiveReply;
channelData?: Record<string, unknown>; channelData?: Record<string, unknown>;
}; };
@ -16,6 +18,7 @@ export type OutboundPayloadJson = {
text: string; text: string;
mediaUrl: string | null; mediaUrl: string | null;
mediaUrls?: string[]; mediaUrls?: string[];
interactive?: InteractiveReply;
channelData?: Record<string, unknown>; channelData?: Record<string, unknown>;
}; };
@ -89,15 +92,18 @@ export function normalizeOutboundPayloads(
const normalizedPayloads: NormalizedOutboundPayload[] = []; const normalizedPayloads: NormalizedOutboundPayload[] = [];
for (const payload of normalizeReplyPayloadsForDelivery(payloads)) { for (const payload of normalizeReplyPayloadsForDelivery(payloads)) {
const mediaUrls = payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : []); const mediaUrls = payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : []);
const interactive = payload.interactive;
const channelData = payload.channelData; const channelData = payload.channelData;
const hasChannelData = Boolean(channelData && Object.keys(channelData).length > 0); const hasChannelData = Boolean(channelData && Object.keys(channelData).length > 0);
const hasInteractive = Boolean(interactive?.blocks.length);
const text = payload.text ?? ""; const text = payload.text ?? "";
if (!text && mediaUrls.length === 0 && !hasChannelData) { if (!text && mediaUrls.length === 0 && !hasInteractive && !hasChannelData) {
continue; continue;
} }
normalizedPayloads.push({ normalizedPayloads.push({
text, text,
mediaUrls, mediaUrls,
...(hasInteractive ? { interactive } : {}),
...(hasChannelData ? { channelData } : {}), ...(hasChannelData ? { channelData } : {}),
}); });
} }
@ -113,6 +119,7 @@ export function normalizeOutboundPayloadsForJson(
text: payload.text ?? "", text: payload.text ?? "",
mediaUrl: payload.mediaUrl ?? null, mediaUrl: payload.mediaUrl ?? null,
mediaUrls: payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : undefined), mediaUrls: payload.mediaUrls ?? (payload.mediaUrl ? [payload.mediaUrl] : undefined),
interactive: payload.interactive,
channelData: payload.channelData, channelData: payload.channelData,
}); });
} }