diff --git a/internal/ghl/webhook.go b/internal/ghl/webhook.go index ef2fc7f..4d7a82d 100644 --- a/internal/ghl/webhook.go +++ b/internal/ghl/webhook.go @@ -120,9 +120,17 @@ func (h *WebhookHandler) HandleWebhook(w http.ResponseWriter, r *http.Request) { } func (h *WebhookHandler) processOutbound(webhook OutboundMessageWebhook) { + defer func() { + if r := recover(); r != nil { + slog.Error("webhook: processOutbound panic", "message_id", webhook.MessageID, "panic", r) + } + }() + ctx, cancel := context.WithTimeout(context.Background(), 30*time.Second) defer cancel() + slog.Info("webhook: processing outbound SMS", "message_id", webhook.MessageID, "location_id", webhook.LocationID, "phone", webhook.Phone) + localPhone, err := phone.ToLocal(webhook.Phone) if err != nil { slog.Error("webhook: phone normalization failed", "phone", webhook.Phone, "err", err) @@ -130,9 +138,10 @@ func (h *WebhookHandler) processOutbound(webhook OutboundMessageWebhook) { return } + slog.Info("webhook: calling cast api", "message_id", webhook.MessageID, "to", localPhone) _, err = h.castClient.SendSMS(ctx, localPhone, webhook.Message) if err != nil { - slog.Error("webhook: cast send failed", "message_id", webhook.MessageID, "err", err) + slog.Error("webhook: cast send failed", "message_id", webhook.MessageID, "to", localPhone, "err", err) h.updateStatus(ctx, webhook, "failed") return }