diff --git a/src/cron/isolated-agent/delivery-target.test.ts b/src/cron/isolated-agent/delivery-target.test.ts index 14d02f0b380..0965c54d6b9 100644 --- a/src/cron/isolated-agent/delivery-target.test.ts +++ b/src/cron/isolated-agent/delivery-target.test.ts @@ -228,7 +228,9 @@ describe("resolveDeliveryTarget", () => { if (result.ok) { throw new Error("expected unresolved delivery target"); } - expect(result.error.message).toContain('No delivery target resolved for channel "telegram"'); + // resolveOutboundTarget provides the standard missing-target error when + // no explicit target, no session lastTo, and no plugin resolveDefaultTo. + expect(result.error.message).toContain("requires target"); }); it("returns an error when channel selection is ambiguous", async () => { diff --git a/src/cron/isolated-agent/delivery-target.ts b/src/cron/isolated-agent/delivery-target.ts index 3905ab695bd..1c27ed08b55 100644 --- a/src/cron/isolated-agent/delivery-target.ts +++ b/src/cron/isolated-agent/delivery-target.ts @@ -148,20 +148,6 @@ export async function resolveDeliveryTarget( }; } - if (!toCandidate) { - return { - ok: false, - channel, - to: undefined, - accountId, - threadId, - mode, - error: - channelResolutionError ?? - new Error(`No delivery target resolved for channel "${channel}". Set delivery.to.`), - }; - } - let allowFromOverride: string[] | undefined; if (channel === "whatsapp") { const resolvedAccountId = normalizeAccountId(accountId); @@ -177,7 +163,7 @@ export async function resolveDeliveryTarget( .filter((entry): entry is string => Boolean(entry)); allowFromOverride = [...new Set([...configuredAllowFrom, ...storeAllowFrom])]; - if (mode === "implicit" && allowFromOverride.length > 0) { + if (toCandidate && mode === "implicit" && allowFromOverride.length > 0) { const normalizedCurrentTarget = normalizeWhatsAppTarget(toCandidate); if (!normalizedCurrentTarget || !allowFromOverride.includes(normalizedCurrentTarget)) { toCandidate = allowFromOverride[0];