Meta sends webhooks to Galantis for three categories of events: inbound messages from customers, outbound message status updates, and template status changes. These webhooks are the real-time data feed from Meta back into Galantis — they are what makes the Inbox live, what populates campaign and automation analytics with delivery data, and what keeps template approval status current.Documentation Index
Fetch the complete documentation index at: https://docs.digifist.com/llms.txt
Use this file to discover all available pages before exploring further.
What this covers
- The three Meta webhook event categories and what each delivers
- How inbound messages are processed into Inbox conversations
- How message status updates power analytics and automation conditions
- How template status changes update Galantis automatically
- Security validation and retry behavior
Meta webhook event categories
Inbound messages
Event:messages (inbound)
Payload: Message object containing sender phone number, message content (text, media, or interactive reply), and context (which message the customer is replying to, if any).
What Galantis does:
When an inbound message webhook arrives, Galantis:
- Validates the webhook signature
- Identifies the customer by their phone number — matching against contact records in Galantis
- Creates or updates a
Conversationrecord for the customer - Creates a
Messagerecord with the inbound message content - Dispatches the
ConversationMessageCreatedevent - Broadcasts the new message to the merchant dashboard in real time via Laravel Reverb — agents see the message appear in the Inbox immediately without refreshing
QUICK_REPLY button in a template message, the response arrives as an inbound message webhook with the button’s reply payload. Automation condition nodes using USER_REPLY_STATUS evaluate against these reply events.
STOP responses: When a customer replies STOP, the inbound message webhook is received, the reply is processed, and the customer’s marketing_state is immediately updated to UNSUBSCRIBED. See Audience — Consent & Opt-outs.
Message status updates
Event:message_status
Payload: Status update containing the message ID, the new status (sent, delivered, read, failed), and a timestamp.
Status progression:
- Galantis matches the message ID to the corresponding
Messagerecord - Updates
Message.statusand the relevant status timestamp field - Aggregates the updated status into campaign-level or automation-level analytics
SENT, DELIVERED, READ, and FAILED counts in campaign analytics and automation activity logs. Status updates arrive asynchronously — a campaign’s analytics populate gradually as Meta sends callbacks for each message in the send batch.
played status: For audio and video messages, Meta sends a played status in addition to read. Galantis records this status on the Message model.
failed status: A failed status includes an error code and description from Meta indicating why delivery failed. Common failure codes (CUSTOMER_IS_NOT_OPTED_IN, CUSTOMER_IS_MISSING_CALLING_CODE) are exposed in campaign analytics and automation activity logs as human-readable error reasons.
Automation condition evaluation: The MESSAGE_DELIVERY_STATUS condition type in automation flows evaluates against the delivery status recorded via these webhooks. A condition checking whether the last message was “read” evaluates against the read status update received here.
Template status changes
Event:message_template_status_update
Payload: Template identifier and new status — approved, rejected, or paused.
What Galantis does:
When a template status change webhook arrives:
- Galantis matches the template identifier to the corresponding
MessageTemplaterecord - Updates
MessageTemplate.statusto reflect the new state - If the template has moved to
APPROVED, it becomes immediately available for use in campaigns and automation Action Nodes - If the template has moved to
REJECTEDorPAUSED, any active automations using it begin failing at the affected Action Node on subsequent customer executions — the automation is not automatically deactivated
Security validation
All incoming Meta webhooks are validated via signature verification before processing. Meta includes a cryptographic signature in the webhook request headers, computed from the payload using the app secret. Galantis verifies this signature before passing the payload to any handler — requests with invalid or missing signatures are rejected immediately and never processed. This validation prevents replay attacks and unauthorized webhook injection from sources other than Meta.Retry behavior
If Galantis fails to process a Meta webhook — due to a temporary server error, a database issue, or an application exception — the failed processing is retried via Laravel’s queue retry mechanism with exponential backoff. This means a transient error does not permanently lose a webhook event. Meta also retries webhook delivery from its side if the initial delivery attempt receives an error response. Combined with Galantis’s queue retry behavior, the system is resilient to most temporary failures in the processing pipeline.If Galantis is unavailable for an extended period — longer than Meta’s webhook delivery retry window — some webhook events may not be recoverable from Meta’s side. In this case, message status updates may be missing from analytics for messages sent during the outage window, and inbound messages received during the outage may not appear in the Inbox. This is an edge case that applies only to extended outages, not to normal transient errors.
Related guides
- Inbox — Conversation Lifecycle — How inbound message webhooks create and update conversations
- Compliance — Conversation Window — How inbound messages open and reset the 24-hour window
- Campaign Analytics — How status update webhooks populate delivery metrics
- Templates — Approval Lifecycle — How template status webhooks update template state in Galantis