Outbound: preserve shared interactive payloads

This commit is contained in:
Vincent Koc
2026-03-15 18:43:08 -07:00
committed by Peter Steinberger
parent 7018412102
commit f3f0bdcb07

View File

@@ -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<string, unknown>;
};
@@ -16,6 +18,7 @@ export type OutboundPayloadJson = {
text: string;
mediaUrl: string | null;
mediaUrls?: string[];
interactive?: InteractiveReply;
channelData?: Record<string, unknown>;
};
@@ -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,
});
}