Appearance
WhatsApp
The WhatsApp integration connects OpsMerge to the official WhatsApp Business Cloud API in two directions. Outbound, when an alert fires at or above a severity you choose, opted-in recipients get a message on WhatsApp, so your on-call techs are reached even when they are away from email. Inbound, a client messaging your WhatsApp Business number opens (or updates) a ticket automatically.
Inbound ticketing is covered in Inbound: messages become tickets, and replying to those tickets over WhatsApp in Replying over WhatsApp.
Bring your own account
OpsMerge never holds a Meta credit line and never resells messages. You connect your own WhatsApp Business Account (WABA), and Meta bills you directly for messages. Your access token and app secret are encrypted at rest (AES-256-GCM, bound to your organisation) and never shown again after you paste them.
Why a template, and why opt-in
WhatsApp does not allow a business to send free-form text to someone who has not messaged them in the last 24 hours. Business-initiated messages, which alerts are, must use a pre-approved utility template submitted in your own WABA. You submit the template once, Meta approves it, and you store its name in OpsMerge.
WhatsApp also expects recipients to have opted in to hear from you. OpsMerge enforces this: an alert only reaches a number when a contact holds that number with WhatsApp opt-in enabled. A recipient number with no opted-in contact is skipped.
Setup
1. Create the Meta app and WhatsApp Business Account
- In the Meta for Developers dashboard, create an app and add the WhatsApp product.
- Create or connect a WhatsApp Business Account (WABA) and register a phone number for it.
- From the WhatsApp setup page, note the phone number ID and the WABA ID.
- Generate a permanent access token (via a system user with the WhatsApp permissions) rather than a temporary one, so sends do not stop working after 24 hours.
- From your app's settings, note the app secret. This is optional for Phase 1 and is used later to verify inbound webhooks.
2. Submit the alert template
In the WhatsApp Manager for your WABA, create a utility template for alerts with three body placeholders, for example:
1 alert on 2: 3
OpsMerge fills the placeholders in order with the alert severity, the affected asset (device hostname) and the alert message. Submit the template and wait for Meta to approve it. Note the exact template name and its language code (for example en or en_GB).
3. Connect in OpsMerge
- Go to Settings → Integrations → WhatsApp.
- Paste the phone number ID, WABA ID and permanent access token. Optionally paste the app secret and a webhook verify token (both used for inbound; see Inbound: messages become tickets). The access token is verified against the Cloud API before it is saved.
- To also receive inbound messages as tickets, follow the inbound setup below. Outbound alerts work without it.
4. Configure alerts
- Turn on Send alerts over WhatsApp.
- Enter the approved template name and its language code.
- Choose the minimum severity and, optionally, restrict to specific alert types. Leave the type list empty to send all of them.
- Add recipient numbers in full international form, for example
447700900123. - Make sure each recipient is held by a contact with WhatsApp opt-in enabled, or the send is skipped.
- Save.
Test send
Use Send a test message on the integration page to send your alert template to one number. The number should be one that has messaged your WhatsApp Business number in the last 24 hours, or one on your allowed test-number list in Meta, otherwise Meta may reject the send.
Message log
Every WhatsApp message OpsMerge sends is recorded in the audit log with its status (Sent, Delivered, Read, Failed) and the template used. Once the inbound webhook is registered (see below), delivery and read status update automatically as Meta reports them.
Inbound: messages become tickets
Phase 2 turns inbound WhatsApp messages into PSA tickets. A client messaging your WhatsApp Business number opens a new ticket, or lands as a reply on the right existing one. Text and media (images, documents) are captured; media is attached to the ticket exactly like an email attachment.
1. Store the app secret and a verify token
Inbound needs two extra credentials on the Settings → Integrations → WhatsApp page:
- The app secret from your Meta app settings. OpsMerge verifies every inbound delivery's signature against it, so an unsigned or forged request is rejected before it is processed.
- A webhook verify token: any high-entropy string you choose. Meta echoes it back once during the subscription handshake to prove the callback URL is yours.
2. Register the callback URL in Meta
OpsMerge generates a per-tenant callback URL of the form:
https://<your-opsmerge-domain>/api/v1/webhooks/whatsapp/<your-webhook-token>
In your Meta app's WhatsApp → Configuration → Webhooks, set the callback URL and the verify token to match what you saved in OpsMerge, then subscribe to the messages field. Meta calls the URL once to verify it (the handshake), then delivers inbound messages and delivery-status events to it.
3. Choose how new tickets are routed
On the integration page, turn on inbound and set:
- A default client: new tickets from an unknown number are filed under this client. Leave it unset to send unknown-number tickets to the triage queue for a human to assign.
- Auto-create contacts: when on, a first message from an unknown number creates a contact under the default client, storing the number so future messages are recognised.
A message from a number that already belongs to a contact is filed under that contact and their client automatically. No email-domain matching is involved; routing is purely by phone number.
Which ticket a message belongs to
WhatsApp is one flat conversation per phone number, so OpsMerge resolves the target ticket most-precise first and never guesses when it is ambiguous:
- Swipe-reply: replying to one of our messages attributes the reply to that message's ticket precisely.
- Ticket reference: a
#<ref>(for example#INC-172) in the message text. - One open ticket: with a single open ticket for that number, the message is appended to it. With none, a new ticket is opened.
- Several open tickets: OpsMerge replies with an interactive list asking which ticket the message is about. The client taps one and the conversation is pinned to it. Messages sent before they choose are held and attributed once they pick, rather than being filed against the wrong ticket.
A reply to a resolved ticket reopens it. A reply to a fully closed ticket opens a fresh ticket instead.
Replying over WhatsApp
When a ticket came in over WhatsApp, replying to it on the ticket sends your reply straight back to the client over WhatsApp instead of by email. The ticket detail composer shows a green WhatsApp marker so you know where the reply is going, and the Send button reads Send over WhatsApp. Internal notes stay internal and never leave the platform, exactly as on any other ticket. Tickets from every other channel keep replying by email as before.
Each reply carries a short footer: Reply to this message to update ticket #INC-172. When the client swipes to reply to it, WhatsApp tags their message so OpsMerge files it back on the exact ticket, even when the client has several open at once.
The 24-hour window
WhatsApp only lets a business send free-form text inside a 24-hour window that opens each time the client messages you. The composer shows the current state:
- Window open: your reply goes out as normal free-form text. This is the usual case, because you are replying to a client who has just messaged you.
- Window closed: the client has not messaged in over 24 hours. Free-form text is no longer allowed. If you have configured an out-of-window reply template (see below), the composer offers to send that instead. If you have not, the reply is blocked with a note to wait for the client to message again, which reopens the window.
Because a template is pre-approved with fixed wording, the swipe-reply footer is not added to a template send.
Configuring an out-of-window reply template
To be able to reply after the window has closed, submit a utility template in your WABA for ticket follow-ups (one body placeholder, which OpsMerge fills with your reply text), wait for Meta to approve it, and enter its name as the reply template on Settings → Integrations → WhatsApp. Without one, replies are only possible while the window is open.
Replies are subject to the outbound kill switch: if outbound is turned off for the connection, no reply is sent and the attempt is recorded as failed rather than dropped silently. Every reply, sent or failed, appears in the message log and its delivery status shows on the ticket.
Costs
Meta charges for WhatsApp messages, billed to you directly under your own WABA. OpsMerge never bills for WhatsApp messages. See Meta's pricing for current per-message rates in your region. From 1 October 2026 Meta also charges for service messages inside the 24-hour window; inbound replies you send back still bill to you, never to OpsMerge.