feat: enhance BlueBubbles media and message handling by adding reply context support and improving outbound message ID tracking

This commit is contained in:
Tyler Yust
2026-01-20 01:53:41 -08:00
committed by Peter Steinberger
parent c331bdc27d
commit d029ceab1c
8 changed files with 96 additions and 9 deletions

View File

@@ -82,7 +82,7 @@ describe("queue followups", () => {
});
const first = await getReplyFromConfig(
{ Body: "first", From: "+1001", To: "+2000" },
{ Body: "first", From: "+1001", To: "+2000", MessageSid: "m-1" },
{},
cfg,
);
@@ -105,7 +105,11 @@ describe("queue followups", () => {
await Promise.resolve();
expect(runEmbeddedPiAgent).toHaveBeenCalledTimes(2);
expect(prompts.some((p) => p.includes("[Queued messages while agent was busy]"))).toBe(true);
const queuedPrompt = prompts.find((p) =>
p.includes("[Queued messages while agent was busy]"),
);
expect(queuedPrompt).toBeTruthy();
expect(queuedPrompt).toContain("[message_id: m-1]");
});
});

View File

@@ -377,9 +377,14 @@ export async function runPreparedReply(
const sessionIdFinal = sessionId ?? crypto.randomUUID();
const sessionFile = resolveSessionFilePath(sessionIdFinal, sessionEntry);
const queueBodyBase = [threadStarterNote, baseBodyFinal].filter(Boolean).join("\n\n");
const queuedBody = mediaNote
? [mediaNote, mediaReplyHint, queueBodyBase].filter(Boolean).join("\n").trim()
const queueMessageId = sessionCtx.MessageSid?.trim();
const queueMessageIdHint = queueMessageId ? `[message_id: ${queueMessageId}]` : "";
const queueBodyWithId = queueMessageIdHint
? `${queueBodyBase}\n${queueMessageIdHint}`
: queueBodyBase;
const queuedBody = mediaNote
? [mediaNote, mediaReplyHint, queueBodyWithId].filter(Boolean).join("\n").trim()
: queueBodyWithId;
const resolvedQueue = resolveQueueSettings({
cfg,
channel: sessionCtx.Provider,