Skip to Content
IntegrationsTroubleshooting

Troubleshooting

Every inbound webhook — whether it resulted in a message or not — is captured in the Logs tab of each integration’s detail page. Start there. The list below maps each status value to the likely cause and fix.

Reading the audit log

Open Integrations → <vendor> → Logs. Each row shows:

  • Timestamp — when the webhook arrived
  • Event type — what the vendor said happened (payment.captured, orders/paid, etc.)
  • Event ID — the vendor’s own id for the event
  • Status — the outcome (see below)
  • HTTP status — what we returned to the vendor
  • Error message — specific reason if status ≠ sent

Click a row to see the raw request body, the captured headers, and the upstream Interakt response.

Status reference

sent

Everything worked. Message left your WABA for the recipient. Check delivery separately via Messages or Broadcasts.

Note: if the row has sent without signature verification — configure webhook_secret to enable in the error column, the event went out but was unverified. Anyone who discovers the webhook URL could forge a fake event. Configure webhook_secret to lock it down.

duplicate

The same event (by event ID or content hash) came in within the last 7 days. We deduped and didn’t resend. This is normal — vendors retry aggressively on timeouts / 5xxs, and we’d rather drop a duplicate than double-send.

Fix: nothing to do. If you’re testing and want the same event to fire twice, change a field in the payload between attempts or wait 7 days.

signature_failed 🔒

HMAC signature verification failed. The request was rejected with HTTP 401.

Fix:

  1. Open Configuration → copy webhook_secret from Splashify
  2. Open the vendor’s webhook settings → verify the secret matches character-for-character (no trailing newline or whitespace)
  3. If you rotated the secret on either side, update it on the other

If you want to accept unsigned requests (not recommended in production), clear webhook_secret — requests will come through as unverified.

config_missing

The integration is enabled but something in the config is missing — usually a template name or phone field, or an event that has no automation mapped.

Fix: go to Configuration, ensure:

  • Enabled toggle is on
  • A template is picked for the specific event you want to fire on
  • Phone Field is set to a valid path that exists in this payload

phone_missing

The phone field resolved to an empty string. Either the vendor didn’t send a phone, or your field path is wrong.

Fix:

  1. Click the log row → expand the Request body
  2. Find where the phone actually is in the JSON
  3. Update Phone Field in Configuration to the correct dot path (e.g. customer.phone, billing.mobile, metadata.phone)

Common vendor-specific fixes:

  • Stripe — store phone in metadata.phone at PaymentIntent creation
  • Shopify — require phone at checkout in store settings
  • Freshdesk — add a Phone custom field to your ticket form
  • PayPal — pass phone as custom_id at order creation

send_failed

We received the webhook, picked a template, resolved the phone — but the downstream Interakt send API returned an error.

Fix: click the row → look at Send response. Common causes:

  • Template not approved / paused by Meta — re-submit it in Templates
  • WABA not connected — complete WhatsApp setup first
  • Invalid phone format — country code missing / wrong
  • Insufficient wallet balance — recharge

skipped_event

Multi-event integration received an event type you haven’t configured an automation for. Not an error — it just means “we saw order.paid but you only mapped order.created, so we did nothing.”

Fix: add an automation for the event in Configuration → Event Automations if you want a template to fire on it.

disabled

Integration exists but the Enabled toggle is off. We stored the webhook but didn’t process it.

Fix: toggle Enabled on in Configuration.

unverified (in the error column, not as a status)

Appears alongside sent when webhook_secret is empty for a signature-capable integration (Razorpay / Stripe / Shopify / WooCommerce). Message went through but the request wasn’t authenticated.

Fix: follow the vendor’s guide to configure a webhook secret and paste it into the integration.

”The vendor says the webhook succeeded but no log shows up”

Rare — means the request arrived but the Splashify DB write failed. Check:

  1. Apex URL — are you POSTing to the exact URL Splashify gave you? Typos in user_id silently 200.
  2. Content-Type — we expect application/json. Form-urlencoded bodies (some PayU / PayPal legacy configs) get rejected at parse time and log bad_request.
  3. Firewall / origin — your server or proxy may be stripping headers we rely on (X-Shopify-Topic, X-WC-Webhook-Topic, Stripe-Signature).

”I’m getting duplicate messages”

If you haven’t set up webhook_secret, your URL could have been leaked and someone is replaying old events.

Fix:

  1. Set webhook_secret on both ends
  2. Delete and re-create the integration to get a fresh URL (in the future we’ll support rotating without deleting)

Still stuck?

  • Re-check the Overview for shared concepts
  • Look at the vendor-specific page (e.g. Razorpay, Shopify)
  • File a ticket via Support → Raise a Ticket — include the Log ID from the audit log and we can look at the exact request