Customers write on WhatsApp. Businesses answer from personal phones.
The conversation that decides a sale happens in a chat app, outside every system the business owns.
No shared history
When the person holding the phone is away, the context goes with them. Nobody else can pick up the thread.
Leads fall between chats
No assignment, no status, no reminder. A question asked on Friday can still be unanswered on Monday.
Messaging outside the rules
Bulk sends from personal numbers break WhatsApp's policies. Doing it properly means the official platform, approved templates and opt-in.
From a Meta webhook to the right person's screen.
Every message takes the same path: verified, stored, acknowledged, de-duplicated, then written to the right workspace and handed to the inbox and the automation engine.
WhatsApp, Messenger, Instagram · where customers write
Meta Graph API · WhatsApp Cloud API · webhooks
Webhook receiver and queues · NestJS checks the signature, stores the event, acknowledges, then works from queues in PostgreSQL.
PostgreSQL on Supabase · multi-tenant · Row Level Security
Team inbox · Next.js · live updates over Realtime
Automation engine · trigger · condition · action
Outbound sends · replies, templates, campaigns · send budget
Built, hosted and operated by Comark · Simplified: one workspace shown
Four things a messaging product has to get right.
None of these show up in a demo. All of them decide whether a business can trust the inbox with its customers.
Store first, then acknowledge
Each webhook event is checked against Meta's signature and stored before it is acknowledged. A unique key on the channel and message id means a redelivery never becomes a double message, and a sweep every minute picks up anything the fast path missed.
Templates in sync with Meta
Outside the 24-hour customer-service window, only approved templates can be sent. Engage keeps each template's approval status in sync with Meta, and campaigns fill its variables from contact data.
Routing is an automation
Assignment is a step in a flow, not a hidden rule: round robin, least loaded, or the contact's owner, after whatever conditions the team sets, such as the channel or the contact's language.
Campaigns within Meta's limits
Each channel gets a send budget inside its number's messaging limit. On a quality or limit signal from Meta, a campaign pauses itself. Opted-out contacts are left out automatically.
What a team gets, in Hebrew, Arabic and English.
One inbox, three channels
WhatsApp, including the Business app on the same number, Messenger and Instagram. Internal notes, quick replies and live updates.
Contacts with their history
Every chat lands on a contact with tags, custom fields, tasks, documents and history. CSV import and export, and duplicate merge.
Leads and pipelines
Lead statuses and conversion, and several pipelines on a board with stage history and products.
Message templates
Create templates, follow Meta's approval and preview them on a phone before sending.
Campaigns
Choose an approved template and a segment, map the variables, review who gets it and who is skipped, then send and read the results.
Automations
A visual builder with triggers from chats, contacts, leads, deals, appointments and website forms, and steps that wait, branch, assign and call your systems over HTTP.
Calendar and appointments
Recurring appointments, staff availability, and reminders on WhatsApp.
Reports
Leads, sales, inbox, team, campaigns, templates and automations, with CSV download.
Roles and permissions
Admin, manager and member roles with per-member permissions, enforced in the database as well as in the app.
We run it ourselves, every day.
In production
Built, hosted and operated by Comark, on Meta's official platforms for WhatsApp, Messenger and Instagram.
Workspaces kept apart
Row Level Security on every table, so each workspace sees only its own data.
Channel tokens encrypted
Access tokens for connected channels are kept in a vault encrypted with AES-256-GCM.
Consent on record
Every opt-in and opt-out is logged per contact, and data is kept for set retention windows.
