diff --git a/gateway/src/http/routes/telegram-webhook.ts b/gateway/src/http/routes/telegram-webhook.ts index 994751bab2f..94b2d6e9e3c 100644 --- a/gateway/src/http/routes/telegram-webhook.ts +++ b/gateway/src/http/routes/telegram-webhook.ts @@ -292,6 +292,7 @@ export function createTelegramWebhookHandler(config: GatewayConfig) { } catch (err) { if (err instanceof CircuitBreakerOpenError) { acknowledgeCallbackQuery(normalized.message.callbackQueryId, "start_command_circuit_open"); + if (updateId !== undefined) dedupCache.unreserve(updateId); return Response.json( { error: "Service temporarily unavailable" }, { status: 503, headers: { "Retry-After": String(err.retryAfterSecs) } }, @@ -490,6 +491,7 @@ export function createTelegramWebhookHandler(config: GatewayConfig) { if (err instanceof CircuitBreakerOpenError) { tlog.warn({ retryAfterSecs: err.retryAfterSecs }, "Circuit breaker open — returning 503"); if (isCallback) acknowledgeCallbackQuery(normalized.message.callbackQueryId, "circuit_open"); + if (updateId !== undefined) dedupCache.unreserve(updateId); return Response.json( { error: "Service temporarily unavailable" }, { status: 503, headers: { "Retry-After": String(err.retryAfterSecs) } }, diff --git a/gateway/src/http/routes/twilio-sms-webhook.ts b/gateway/src/http/routes/twilio-sms-webhook.ts index 97746b5328a..4ec90e6939e 100644 --- a/gateway/src/http/routes/twilio-sms-webhook.ts +++ b/gateway/src/http/routes/twilio-sms-webhook.ts @@ -208,6 +208,7 @@ export function createTwilioSmsWebhookHandler(config: GatewayConfig) { } catch (err) { if (err instanceof CircuitBreakerOpenError) { tlog.warn({ retryAfterSecs: err.retryAfterSecs }, "Circuit breaker open — returning 503"); + dedupCache.unreserve(messageSid); return Response.json( { error: "Service temporarily unavailable" }, { status: 503, headers: { "Retry-After": String(err.retryAfterSecs) } }, diff --git a/gateway/src/http/routes/whatsapp-webhook.ts b/gateway/src/http/routes/whatsapp-webhook.ts index 3494cdbc339..5ac3e26d74a 100644 --- a/gateway/src/http/routes/whatsapp-webhook.ts +++ b/gateway/src/http/routes/whatsapp-webhook.ts @@ -209,6 +209,7 @@ export function createWhatsAppWebhookHandler(config: GatewayConfig) { } catch (err) { if (err instanceof CircuitBreakerOpenError) { tlog.warn({ retryAfterSecs: err.retryAfterSecs }, "Circuit breaker open — returning 503"); + dedupCache.unreserve(whatsappMessageId); return Response.json( { error: "Service temporarily unavailable" }, { status: 503, headers: { "Retry-After": String(err.retryAfterSecs) } },