Sparrow Telegram connects your bot and your channels to an inbox shared by your teams: you broadcast to every subscriber with no messaging window, routine requests settle themselves, and each private conversation stays attached to the contact in your CRM.
Click a use case to see in detail how Sparrow Telegram sets it up for your business.
This is what sets Telegram apart: a channel broadcasts to every subscriber, as often as you decide, with no reply window and no imposed message category. Subscribing is explicit and unsubscribing takes one tap — so you are talking to an audience that asked to hear from you.
On Telegram, automation is native: your bot exposes commands — /catalogue, /order, /advisor — and a button menu. Order tracking, availability, opening hours: the answer arrives in a second, at any hour, and an agent takes over as soon as the request falls outside the script.
A subscriber who writes to your bot opens a private conversation. It lands in the shared inbox, assigned, tagged and tracked, with the contact's full history — and with no twenty-four-hour window to cut the exchange short.
One HTTP request is enough to post to a channel or write to a subscriber: order confirmation, shipping notice, monitoring alert. Inbound messages are returned to you by webhook, so your application can reply on its own.
Every post carries its view and click counts, every conversation its first response time and its outcome. You can see which posts grow the channel, which ones lose subscribers, and which requests would deserve a command of their own.
One platform, three formats that do different jobs: the channel broadcasts without replies, the group lets members talk to each other, the bot holds the private conversation.
New arrivals, promotions, announcements: one message to every subscriber, as often as you decide.
No frequency limitOrder tracking, availability, opening hours: commands and buttons that answer in a second.
Available 24/7Questions, complaints and advice handled by your agents from a shared inbox.
No reply windowYour customers or resellers talk to each other, under your moderation and your rules.
Up to 200,000 membersOrder placed, parcel shipped, ready for collection: triggered by your application.
Via APICatalogue, invoice, manual, archive: up to 2 GB per file, with no external file-sharing service.
Files up to 2 GBOne question to your audience, an immediate result, public or anonymous.
Live resultsMonitoring, incidents, on-call duty: the internal channel that reaches your teams first.
Internal useA one-time passcode delivered in the conversation, for accounts already linked to your bot.
On linked accountsThe shared inbox, channels, bots and the API in one subscription, with no extra tool to plug in.
One message to every subscriber, with no frequency limit and no reply window. Posts scheduled, pinned, editable after sending, with a view counter.
Commands, button keyboards and guided forms. Routine requests settle themselves and an agent takes over whenever needed.
Private conversations on one screen, assigned, tagged and tracked. Internal notes, mentions between colleagues, and handover without losing the thread.
Up to 2 GB per document: catalogue, invoice, manual, archive. No file-sharing service on the side, no link that expires.
Subscribers, growth, departures, views and clicks per post. CSV export, weekly report, API feed.
Your applications post and reply without going through the interface. One token per application, a test environment, and examples in the main languages.
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.
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.
| Operation | Method | URL |
|---|---|---|
| Get a token | POST | https://app.sparrowmessage.com/api/v1/login |
| Send a message | POST | https://app.sparrowmessage.com/api/v1/telegram/send/one |
| Receive a message | POST inbound | https://your-site.com/sparrow/webhook |
| Message status | POST | https://app.sparrowmessage.com/api/v1/telegram/status |
| Status of a list | POST | https://app.sparrowmessage.com/api/v1/telegram/status/bulk |
SEMS
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/telegram/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}/telegram/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}/telegram/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}/telegram/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}/telegram/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}/telegram/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 + "/telegram/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/telegram/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/telegram/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/telegram/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/telegram/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.
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
A new-arrivals channel, order tracking through the bot, advice in the private conversation.
Account alerts, case tracking, certificates and statements sent as attachments.
An announcements channel for families, timetables, notices and large course materials.
A new-listings channel, floor plans and complete files sent as one document.
Delivery notices through the bot, slot confirmed with one button, complaints handled privately.
Today's menu on the channel, booking through the bot, table confirmation and reminder.
An information channel for members, a discussion group, meeting notices and minutes.
An internal monitoring-alerts channel, on-call staff notified first, logs attached.
Telegram 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.
How many conversations open each month, and how many resolve without a human. This is the main cost driver.
How many people log into the shared inbox, and during which hours. An extra agent can be added at any time.
Guided journeys, catalogue connection, CRM or ERP integration: setup is quoted once, then running costs apply.
Tell us your current volume and your most frequent requests. We come back with a costed proposal and a rollout schedule, with no commitment.
The channel broadcasts: you post, your subscribers read, they do not reply. The group creates discussion: members talk to each other, up to two hundred thousand people, under your moderation. The bot holds the private conversation: a subscriber writes to it, and it either answers alone or hands over to an agent. Most companies use all three — the channel to announce, the bot to serve, the group to run a community.
No, and that is the main difference. Telegram imposes no reply window, no message category and no template to get approved. You can write to a subscriber who last messaged you six months ago, and post to your channel as often as you judge useful. The only limit is commercial common sense: a channel that talks too much loses its subscribers, and unsubscribing takes one tap.
Yes, as with any messaging app. Telegram is very common in some countries and professional circles, far less in others: it is a channel to open when your audience is already there, not one to impose. We look at your database together before recommending it — and if the numbers are not there, SMS or WhatsApp remains the first choice.
A channel does not fill itself: it feeds on your other touchpoints. A link in your emails and SMS, a QR code in store and on your packaging, a button on your website, a mention in your social posts. A public channel is also findable in Telegram search. We put these in place with you in phase four.
Up to 2 GB per file, which no other channel on this list allows. A high-resolution catalogue, a technical manual, an invoice archive, a demo video: the document goes out in the conversation, with no file-sharing service on the side and no link that expires after seven days.
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.
Yes, and it is useful more often than you would think: a wrong price, an incorrect date, a broken link can be fixed in the original post, for every subscriber at once. Deletion is also possible, on both sides of the conversation.
Yes, through the REST API and webhooks. Every inbound message can be pushed to your system, and your system can write into the conversation or post to the channel. 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.
In Morocco, personal data processing falls under Law 09-08 and the CNDP: your conversations and your channel's subscriber list contain personal data and must appear in your declaration. Since Telegram imposes no window and no message category, consent is what sets the limit: subscribing to the channel serves as consent, and unsubscribing must remain immediate. 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 Telegram conversations as to any processing of personal data: legal basis, informing the customer, retention period and the right to erasure. Since Telegram imposes no window and no message category, consent is what sets the limit: subscribing to the channel serves as consent, and unsubscribing must remain immediate. 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. Since Telegram imposes no window and no message category, consent is what sets the limit: subscribing to the channel serves as consent. Subscriptions and opt-outs are kept and exportable. We are not lawyers: have your setup reviewed by your counsel before any campaign.
The bot and the channel are live within twenty-four hours, and the shared inbox is usable immediately. Automated commands 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.
Your Telegram channel live in 4 phases
From creating the bot to the first post on your channel, a mapped-out path and a single point of contact.
Typical timeline: bot and channel live within 24 hours, first automated commands within one to two weeks depending on their complexity.