Messenger for business

Your customers write to your page. Answer them without keeping them waiting

Sparrow Messenger connects your Facebook page to an inbox shared by your teams: routine requests answer themselves, the rest reach the right person, and the full history stays attached to the contact in your CRM.

Shared inbox Automated replies Click-to-Messenger ads
Sparrow Store
Verified page · Replies within minutes
Today
Hello, has my order 4521 shipped?10:02
Hello! It arrived this morning at the Casablanca Anfa branch, available until 18/08.10:02
Great. What time do you open on Saturday?10:04
9 am to 6 pm without a break. Shall I send you directions?10:04
2 minaverage reply
74 %handled automatically
4 100conversations/month
96 %satisfaction
What you can do

One channel, five ways to serve your customers

Click a use case to see in detail how Sparrow Messenger sets it up for your business.

One inbox, several agents

Messages sent to your page no longer land on one person's phone. They arrive in a shared inbox where every conversation is assigned, tagged and tracked — with the contact's full history in front of the agent.

  • Automatic assignment by queue, by tag or round-robin
  • Internal notes the customer never sees, mentions between colleagues
  • Saved replies, inserted in two keystrokes
  • Full history kept, conversation after conversation
  • Handover between agents without losing the thread
  • First response time and resolution time measured
Shared inbox
3 agents online
Hello, I'd like to exchange an item09:12
Of course. Do you have the order number?09:12
2 min1st reply
18open
3agents

What comes up every day no longer has to be written

Opening hours, address, order tracking, item availability: these requests make up most of the volume and teach your teams nothing. A guided journey answers them instantly, at any hour, and hands over to an agent as soon as the question falls outside the script.

  • Persistent menu and ice breakers shown when the conversation opens
  • Buttons and quick replies rather than free text to interpret
  • Live lookups in your catalogue or your order tracking
  • Handover to a human agent on request, or after two misunderstandings
  • Out-of-hours reply, picked up again the next morning
  • Journeys editable from the interface, with no development
Guided journey
Running 24/7
What can I do for you? 📦 Track my order · 🕐 Opening hours · 💬 Talk to an advisor22:41
Track my order22:41
Order 4521: out for delivery, expected tomorrow.22:41
74 %without an agent
3 sresponse
24/24available

From ad to conversation, with no page in between

A Facebook or Instagram ad that opens Messenger gives you an identified contact from the first click: no form to fill in, no mistyped email address. The conversation starts on the product seen in the ad, and you know which campaign it came from.

  • Messenger opens on click, on the product concerned
  • Campaign source kept for the whole conversation
  • Automatic qualification before handover to sales
  • Contact pushed to your CRM with its source
  • Follow-up possible within the next twenty-four hours
  • An m.me link to place on your website, your emails or a QR code
Back-to-school campaign
Click-to-Messenger
Hello, I've just seen your ad for the office bundle11:30
Hello! It's MAD 2,490 including tax, delivered within 48 hours. Are you in Casablanca?11:30
1 840conversations
31 %qualified
Back to schoolcampaign

Your system speaks to the customer directly

One HTTP request is enough to post a message into an open conversation: order confirmation, shipping notice, appointment reminder. Inbound messages are returned to you by webhook, so your application can reply on its own.

  • Token-authenticated REST API, one token per application
  • Sending text, images, buttons and carousels
  • Webhook on every inbound message and every read receipt
  • Message tags to write beyond the 24-hour window
  • Recurring notifications, on the customer's explicit opt-in
  • Test environment separate from production
API call
POST /messenger/send/one
{ "recipient": "718...", "text": "Order 4521 shipped" }
{ "code": "OK", "result": { "message_id": "8f21c4" } }
140 msresponse
OKcode
1message

What your conversations say about your service

Every conversation carries its first response time, its resolution time, its agent and its tag. You can see where volume concentrates, which hours are understaffed, and which requests would be worth automating.

  • First response and resolution times, by agent and by queue
  • Volume breakdown by hour, by day and by tag
  • Share of conversations resolved without a human
  • Conversation source: ad, m.me link, page, QR code
  • CSV export and automatic weekly report
  • Metrics pushed to your reporting tool via API
Weekly report
Week 33
4,112 conversations · 3,044 handled without an agent
Average first response time: 2 min 10 s
4 112conversations
74 %auto
2 min1st reply
Use cases

The different business uses of Messenger

One channel, different rules: within twenty-four hours of a customer's message you write freely; beyond that, only certain categories of message remain permitted by Meta.

Customer service

Questions, complaints and information requests, handled by your agents from a shared inbox.

24-hour window

Automated replies

Opening hours, address, order tracking: a guided journey answers without involving anyone.

Available 24/7

Click-to-Messenger ads

The ad opens a conversation instead of a landing page, and the source stays attached to the contact.

Campaign source kept

Order confirmations and tracking

Order placed, parcel shipped, ready for collection: triggered by your application.

Post-purchase tag

Appointment reminders

Confirmation, reminder the day before, rescheduling offered in one button.

Confirmed event tag

Account notices

Password change, case update, document expiry.

Account tag

Recurring notifications

The customer subscribes to your updates in one click, and receives your messages at the frequency they accepted.

On explicit opt-in

Conversational selling

Catalogue browsed in the conversation, basket built, payment completed by link.

Carousels and buttons

Comments turned into messages

A comment under a post gets a public reply and a private message.

Public and private
Features

Everything you need to keep the conversation going

The shared inbox, automation and the API in one subscription, with no extra tool to plug in.

Shared inbox

Every conversation on your page in one screen, assigned, tagged and tracked. Internal notes, mentions between colleagues, and handover without losing the thread.

Automated journeys

Persistent menu, ice breakers, quick replies and buttons. Routine requests settle themselves and an agent takes over whenever needed.

Unified contact record

The Messenger profile, the conversation history and your CRM data on one screen. The agent knows who they are talking to before replying.

The 24-hour window under control

The platform shows how long you have left to reply freely and suggests the right tag once the window has closed. No Meta rule broken by accident.

Conversation analytics

First response time, resolution time, automated share, contact source. CSV export, weekly report, API feed.

REST API and webhooks

Your applications send and receive messages without going through the interface. One token per application, a test environment, and examples in the main languages.

Integration

One HTTP request, and the message goes out on Messenger

No proprietary library to install. The REST API is called from any language, and the shared inbox remains available for conversations handled by your agents.

Authentication — a call to POST /api/v1/login with your credentials returns a token (api_token) that you then place in the Authorization: Bearer {api_token} header of every request. One account can hold several applications, each with its own token: statistics stay separate, application by application.
OperationMethodURL
Get a tokenPOSThttps://app.sparrowmessage.com/api/v1/login
Send a messagePOSThttps://app.sparrowmessage.com/api/v1/messenger/send/one
Receive a messagePOST inboundhttps://your-site.com/sparrow/webhook
Message statusPOSThttps://app.sparrowmessage.com/api/v1/messenger/status
Status of a listPOSThttps://app.sparrowmessage.com/api/v1/messenger/status/bulk
PHP Python Node.js .NET Java Ruby WordPress Odoo Salesforce HubSpot Shopify PrestaShop WooCommerce Zapier SEMS SEMS Amplitude HR Amplitude HR

1 — Get the token, then send a message.

<?php
$base = 'https://app.sparrowmessage.com/api/v1';

// — Authentication: keep the token, don't request a new one for every send
$ch = curl_init("$base/login");
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => ['Accept: application/json', 'Content-Type: application/json'],
    CURLOPT_POSTFIELDS     => json_encode([
        'email'    => 'you@company.com',
        'password' => 'your-password',
    ]),
]);
$token = json_decode(curl_exec($ch), true)['api_token'];
curl_close($ch);

// — Send a message
$ch = curl_init("$base/messenger/send/one");
curl_setopt_array($ch, [
    CURLOPT_POST           => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER     => [
        'Accept: application/json',
        'Content-Type: application/json',
        "Authorization: Bearer $token",
    ],
    CURLOPT_POSTFIELDS     => json_encode([
        'recipient'     => '718294106203941',
        'text'      => 'Your verification code is 385 214.',
        // Optional: Sparrow will post status changes here
        'notifyurl' => 'https://your-site.com/sparrow/status',
    ]),
]);
$reponse = json_decode(curl_exec($ch), true);
curl_close($ch);

// Every response carries a code field: OK or KO
echo $reponse['code'] === 'OK' ? "Message envoyé\n" : "Échec : {$reponse['error']}\n";

Single send, then bulk send.

import requests

base = 'https://app.sparrowmessage.com/api/v1'

# — Authentication
token = requests.post(f'{base}/login', json={
    'email': 'you@company.com',
    'password': 'your-password',
}).json()['api_token']

headers = {'Authorization': f'Bearer {token}', 'Accept': 'application/json'}

# — Send a message
r = requests.post(f'{base}/messenger/send/one', headers=headers, json={
    'recipient':     '718294106203941',
    'text':      'Your verification code is 385 214.',
    'notifyurl': 'https://your-site.com/sparrow/status',
}).json()

print('Message envoyé' if r['code'] == 'OK' else f"Échec : {r['error']}")

# — Bulk send: one request, several recipients
requests.post(f'{base}/messenger/send/bulk', headers=headers, json={
    'phones': ['718294106203941', '+2126YYYYYYYY'],
    'text':   'Soldes : -20 % jusqu\'à dimanche. STOP au 36000',
})

# — Delivery status, from the identifier returned
status = requests.post(f'{base}/messenger/status', headers=headers, json={
    'message_id': '8f21c4',
}).json()
print(status['result'])

Node 18 or later: fetch is built in.

const base = 'https://app.sparrowmessage.com/api/v1';

// — Authentication
const { api_token } = await fetch(`${base}/login`, {
  method:  'POST',
  headers: { 'Content-Type': 'application/json', Accept: 'application/json' },
  body:    JSON.stringify({
    email:    'you@company.com',
    password: 'your-password',
  }),
}).then(r => r.json());

const headers = {
  'Content-Type': 'application/json',
  Accept:         'application/json',
  Authorization: `Bearer ${api_token}`,
};

// — Send a message
const reponse = await fetch(`${base}/messenger/send/one`, {
  method:  'POST',
  headers: headers,
  body: JSON.stringify({
    phone:     '718294106203941',
    text:      'Your verification code is 385 214.',
    notifyurl: 'https://your-site.com/sparrow/status',
  }),
}).then(r => r.json());

console.log(reponse.code === 'OK' ? 'Message envoyé' : `Échec : ${reponse.error}`);

// — Bulk send
await fetch(`${base}/messenger/send/bulk`, {
  method:  'POST',
  headers: headers,
  body: JSON.stringify({
    phones: ['718294106203941', '+2126YYYYYYYY'],
    text:   'Soldes : -20 % jusqu\'à dimanche. STOP au 36000',
  }),
});

.NET 6 or later.

using System.Net.Http.Json;

var http = new HttpClient { BaseAddress = new Uri("https://app.sparrowmessage.com/api/v1/") };

// — Authentication
var auth = await http.PostAsJsonAsync("login", new {
    email    = "you@company.com",
    password = "your-password",
});
var token = (await auth.Content.ReadFromJsonAsync<Dictionary<string, string>>())["api_token"];
http.DefaultRequestHeaders.Authorization = new("Bearer", token);

// — Send a message
var msg = await http.PostAsJsonAsync("sms/send/one", new {
    phone     = "718294106203941",
    text      = "Your verification code is 385 214.",
    notifyurl = "https://your-site.com/sparrow/status",
});

var result = await msg.Content.ReadFromJsonAsync<Dictionary<string, object>>();
Console.WriteLine(result["code"].ToString() == "OK" ? "Message envoyé" : $"Échec : {result["error"]}");

// — Bulk send
await http.PostAsJsonAsync("sms/send/bulk", new {
    phones = new[] { "718294106203941", "+2126YYYYYYYY" },
    text   = "Soldes : -20 % jusqu'à dimanche. STOP au 36000",
});

Java 11 or later, native HTTP client.

import java.net.URI;
import java.net.http.*;

var client = HttpClient.newHttpClient();
var base   = "https://app.sparrowmessage.com/api/v1";

// — Authentication
var auth = HttpRequest.newBuilder(URI.create(base + "/login"))
    .header("Content-Type", "application/json")
    .header("Accept", "application/json")
    .POST(HttpRequest.BodyPublishers.ofString("""
        {"email":"you@company.com","password":"your-password"}"""))
    .build();

var token = extract(client.send(auth, HttpResponse.BodyHandlers.ofString()).body(), "api_token");

// — Send a message
var msg = HttpRequest.newBuilder(URI.create(base + "/messenger/send/one"))
    .header("Content-Type", "application/json")
    .header("Accept", "application/json")
    .header("Authorization", "Bearer " + token)
    .POST(HttpRequest.BodyPublishers.ofString("""
        {"recipient":"718294106203941",
         "text":"Your verification code is 385 214.",
         "notifyurl":"https://your-site.com/sparrow/status"}"""))
    .build();

System.out.println(client.send(msg, HttpResponse.BodyHandlers.ofString()).body());

Copy and paste into a terminal.

# — 1. Get the token
curl -X POST https://app.sparrowmessage.com/api/v1/login \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -d '{"email":"you@company.com","password":"your-password"}'

# Response: {"code":"OK","api_token":"eyJ0eXAiOiJKV1Qi..."}

# — 2. Send a message
curl -X POST https://app.sparrowmessage.com/api/v1/messenger/send/one \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer $TOKEN" \
     -d '{"recipient":"718294106203941",
          "text":"Your verification code is 385 214.",
          "notifyurl":"https://your-site.com/sparrow/status"}'

# — 3. Receive inbound messages
curl -X POST https://app.sparrowmessage.com/api/v1/messenger/send/bulk \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer $TOKEN" \
     -d '{"phones":["718294106203941","+2126YYYYYYYY"],
          "text":"Reminder: your appointment is tomorrow at 2:30 pm."}'

# — 4. Delivery status
curl -X POST https://app.sparrowmessage.com/api/v1/messenger/status \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer $TOKEN" \
     -d '{"message_id":"8f21c4"}'

# — 5. Status of a batch
curl -X POST https://app.sparrowmessage.com/api/v1/messenger/status/bulk \
     -H "Accept: application/json" \
     -H "Content-Type: application/json" \
     -H "Authorization: Bearer $TOKEN" \
     -d '{"messages_id":["8f21c4","8f21c5"]}'

Every response carries a code field set to OK ou KO. On anOK, result — or results for bulk calls — carries the detail; on a KO, error gives the reason. Full documentation and a sandbox are provided when your account opens.

Customers

Trusted by

Enterprises, institutions and public bodies, in Morocco and abroad. The same organisations, whatever the channel.

Employee, supplier and customer communication

Customer and employee communication

Customer and employee communication

Supplier communication

Customer and employee communication

Candidate and employer communication

Member and partner communication

Member communication

Partner and donor communication

Customer communication

Customer notifications from the CRM

Customer communication

Candidate and employer communication

Member communication

Customer and partner communication

Supplier communication

Student and partner communication

Tourism industry communication

Customer communication

Member communication

Customer and user communication

Student and administration communication

Student and administration communication

Customer and store communication

Employee communication

Customer and prospect communication

Customer and prospect communication

Customer communication

Customer communication

Customer communication

Customer notifications and relations

Customer and supplier notifications

Customer notifications and campaigns

Industries

A channel built for every industry

Retail and distribution

Item availability, order tracking, in-store collection notices.

Banking and insurance

Case tracking, branch appointments, answers to common questions.

Education

Enrolment enquiries, term start dates, answers for families.

Real estate

Enquiry qualification, viewing appointments, prospect follow-up.

Transport and logistics

Parcel tracking, delivery slot, complaints handled in the conversation.

Hospitality and food service

Booking, today's menu, table confirmation and reminder.

Associations and federations

Member enquiries, event registrations, answers to requests.

Healthcare

Appointment booking, consultation reminders, answers to administrative questions.

Getting started

Your Messenger channel live in 4 phases

From connecting your page to the first automated journey, a mapped-out path and a single point of contact.

1Scoping and page connection
Review of your most frequent requests
Your Facebook page connected to the platform
Agent accounts and roles created
2Inbox and queues
Queues and assignment rules set up
Qualification tags and saved replies
Opening hours and out-of-hours message
3Automation and integration
Guided journeys and persistent menu written
Connection to your website, CRM or ERP
Scenario testing in the sandbox
4Go-live and support
Go-live and switchover of real traffic
Training your agents on the shared inbox
Metrics review and journey tuning

Typical timeline: page connected within 24 hours, first automated journeys live within one to two weeks depending on their complexity.

How pricing works

A proposal built on your volumes

Messenger is not billed per message like SMS: the cost depends on the conversation, the number of agents and what you automate. We therefore build a tailored proposal after a thirty-minute conversation.

Conversation volume

How many conversations open each month, and how many resolve without a human. This is the main cost driver.

Number of agents

How many people log into the shared inbox, and during which hours. An extra agent can be added at any time.

What you automate

Guided journeys, catalogue connection, CRM or ERP integration: setup is quoted once, then running costs apply.

Let's talk — we reply within one business day

Tell us your current volume and your most frequent requests. We come back with a costed proposal and a rollout schedule, with no commitment.

Frequently asked questions

Everything about Messenger for business

As soon as a customer writes to your page, you have twenty-four hours to reply with whatever you like: text, image, button, carousel. Each new message from them restarts the clock. Once that time passes with no message from them, free exchange stops: only certain categories of message remain permitted. The platform shows the time left on each conversation, so your agents never have to work it out.

Meta permits three categories of message outside the window: post-purchase updates (order shipped, ready for collection), account updates (password change, case updated) and reminders for an event the customer confirmed (appointment, booking). These messages cannot be promotional. For marketing you must use recurring notifications, which the customer subscribes to explicitly.

Yes. Messenger sits on top of a page: the page receives the messages and appears as the party you are talking to. If your page already exists, connecting it takes a few minutes. If not, we create it with you. A Meta Business account is also required to attach the page and the access rights.

Yes — that is exactly what the shared inbox is for. Each conversation is assigned to one agent, visible to the others, and cannot receive two competing replies. Handover takes one click, internal notes included, and the history stays attached to the contact whichever agent replied.

This is the most important setting to get right at the start. Automation handles what is repetitive and verifiable: opening hours, order tracking, availability. As soon as a request falls outside that, or the customer asks for an advisor, the conversation moves to an agent with everything already exchanged. We also recommend switching automation off during the hours your teams are available.

A Facebook or Instagram ad whose button opens a Messenger conversation instead of a landing page. The contact is identified from the first click, with no form and no email address to type, and the campaign source stays attached to the conversation. You know which ad produced which enquiry, and your salesperson picks up where the automated journey left off.

Yes, through the REST API and webhooks. Every inbound message can be pushed to your system, and your system can write into the conversation. Connectors exist for the most widely used CRMs and e-commerce platforms; for an in-house tool, integration through the API takes a few days.

Yes, with the full history attached to the contact: a customer who comes back six months later is recognised, and the agent sees what was said. Retention is configurable to match your data policy, and export is available at any time.

There is no technical ceiling on the platform side. The practical limit comes from your headcount and the share of requests you automate: a well-tuned journey routinely absorbs two thirds of the volume, which lets a small team handle several thousand conversations a month.

In Morocco, personal data processing falls under Law 09-08 and the CNDP: Messenger conversations contain personal data and must appear in your declaration. Meta's rules apply on top, forbidding promotional messages outside the twenty-four-hour window and outside accepted recurring notifications. Subscriptions, consent withdrawals and deletion requests are kept and exportable. We are not lawyers: have your setup and your CNDP declaration reviewed by your counsel.

The GDPR applies to Messenger conversations as to any processing of personal data: legal basis, informing the customer, retention period and the right to erasure. Meta's rules apply on top, forbidding promotional messages outside the twenty-four-hour window and outside accepted recurring notifications. Subscriptions, consent withdrawals and deletion requests are kept and exportable, ready to feed your record of processing activities. We are not lawyers: have your setup reviewed by your counsel.

In the United States, commercial solicitation by message falls under the CAN-SPAM Act for email and the TCPA for phone messaging, both enforced by the FTC and the FCC; messaging is treated by analogy and carries the same requirement of consent and easy opt-out. Meta's rules apply on top, forbidding promotional messages outside the twenty-four-hour window and outside accepted recurring notifications. Subscriptions and opt-outs are kept and exportable. We are not lawyers: have your setup reviewed by your counsel before any campaign.

The page is connected and the shared inbox usable within twenty-four hours. Automated journeys take one to two weeks depending on their complexity: you have to list the frequent requests, write the answers, then test them on real cases before going live.

Contact

Let's talk about your Messenger project

Morocco

CAF OFFICE, 1er étage, N° 2
Casablanca 20000, Maroc

+212 662-583818

United States

224 W 35th St Ste 500 N 1018
New York, NY 10001, United States

+1 (347) 789-2280