WhatsApp: preserve document filenames

This commit is contained in:
fancy 2026-01-26 11:12:05 +08:00
parent a989fe8af9
commit c988970064
4 changed files with 11 additions and 4 deletions

View File

@ -5,6 +5,7 @@ import { DEFAULT_ACCOUNT_ID } from "../routing/session-key.js";
export type ActiveWebSendOptions = {
gifPlayback?: boolean;
accountId?: string;
fileName?: string;
};
export type ActiveWebListener = {

View File

@ -38,9 +38,10 @@ export function createWebSendApi(params: {
...(gifPlayback ? { gifPlayback: true } : {}),
};
} else {
const fileName = sendOptions?.fileName?.trim() || "file";
payload = {
document: mediaBuffer,
fileName: "file",
fileName,
caption: text || undefined,
mimetype: mediaType,
};

View File

@ -131,7 +131,9 @@ describe("web outbound", () => {
verbose: false,
mediaUrl: "/tmp/file.pdf",
});
expect(sendMessage).toHaveBeenLastCalledWith("+1555", "doc", buf, "application/pdf");
expect(sendMessage).toHaveBeenLastCalledWith("+1555", "doc", buf, "application/pdf", {
fileName: "file.pdf",
});
});
it("sends polls via active listener", async () => {

View File

@ -44,11 +44,13 @@ export async function sendMessageWhatsApp(
const jid = toWhatsappJid(to);
let mediaBuffer: Buffer | undefined;
let mediaType: string | undefined;
let mediaFileName: string | undefined;
if (options.mediaUrl) {
const media = await loadWebMedia(options.mediaUrl);
const caption = text || undefined;
mediaBuffer = media.buffer;
mediaType = media.contentType;
mediaFileName = media.fileName;
if (media.kind === "audio") {
// WhatsApp expects explicit opus codec for PTT voice notes.
mediaType =
@ -69,10 +71,11 @@ export async function sendMessageWhatsApp(
const hasExplicitAccountId = Boolean(options.accountId?.trim());
const accountId = hasExplicitAccountId ? resolvedAccountId : undefined;
const sendOptions: ActiveWebSendOptions | undefined =
options.gifPlayback || accountId
options.gifPlayback || accountId || mediaFileName
? {
...(options.gifPlayback ? { gifPlayback: true } : {}),
accountId,
...(accountId ? { accountId } : {}),
...(mediaFileName ? { fileName: mediaFileName } : {}),
}
: undefined;
const result = sendOptions