Sūtiet kaskādes ziņojumus
Sūtiet ziņojumus vairākos kanālos ar vienu API pieprasījumu. Kaskāde automātiski maršrutē jūsu ziņojumu, izmantojot Telegram Bot, Viber Bot, Viber Business Messages, RCS un SMS.
Galapunkti
Standarta kaskāde
Maršrutē ziņojumus pa visiem pieejamajiem kanāliem secīgi.
Telegram-Viber prioritāte
Priekšroka tiek dota Telegram un Viber kanāliem, lai nodrošinātu ātrāku piegādi.
Autentifikācija
Kaskādes API atbalsta trīs autentifikācijas galvenes. Iekļaujiet vismaz vienu:
| Virsraksts | Apraksts |
|---|---|
| "X-autorizācijas atslēga" | SMSBAT API atslēga (ieteicams) |
| "X-Viber-Auth-Token" | Viber robota akreditācijas dati |
| "X-Tg-Bot-Key" | Telegrammas robota atslēga |
Pieprasījuma struktūra
Virsraksti
Content-Type: application/json
X-Authorization-Key: your-smsbat-api-key
X-Viber-Auth-Token: your-viber-token
X-Tg-Bot-Key: your-telegram-key
Pieprasījuma struktūra
Nosūtiet ziņojumu objektu masīvu:
[
{
"id": "unique-tracking-id",
"fromName": "YourBrand",
"toPhone": "+380XXXXXXXXX",
"messageType": "transaction",
"text": "Your order #12345 has been confirmed",
"ttl": 3600,
"scheduledSent": "2025-01-25T10:00:00Z"
}
]
Parametri
| Parametrs | Tips | Nepieciešams | Apraksts |
|---|---|---|---|
| "id" | stīga | Jā | Jūsu izsekošanas identifikators |
| "fromName" | stīga | Jā | Sūtītāja parādāmais vārds |
| uz tālruni | stīga | Jā | Saņēmēja tālruņa numurs (E.164 formāts) |
messageType |
stīga | Jā | Ziņojuma veids: "darījums", "reklāma", "viber_survey", "flashcall" |
teksts |
stīga | Jā* | Ziņojuma saturs (* nepieciešams lielākajai daļai veidu) |
ttl |
vesels skaitlis | Nē | Izdzīvošanas laiks sekundēs |
plānoti nosūtīti |
stīga | Nē | ISO 8601 datums un laiks plānotajai piegādei |
Ziņojumu veidi
Darījumu ziņojumi
Kritiskie paziņojumi, piemēram, pasūtījumu apstiprinājumi un konta atjauninājumi:
{
"id": "order-12345",
"fromName": "YourStore",
"toPhone": "+380XXXXXXXXX",
"messageType": "transaction",
"text": "Your order #12345 has been confirmed and will arrive tomorrow.",
"ttl": 86400
}
Reklāmas ziņojumi
Mārketinga kampaņas ar bagātinātu multividi:
{
"id": "promo-summer-sale",
"fromName": "YourBrand",
"toPhone": "+380XXXXXXXXX",
"messageType": "promo",
"text": "Summer Sale! Up to 50% off. Shop now: https://example.com/sale",
"ttl": 259200
}
Viber aptauja
Interaktīvas aptaujas ar 2–5 atbilžu variantiem:
{
"id": "survey-satisfaction",
"fromName": "YourBrand",
"toPhone": "+380XXXXXXXXX",
"messageType": "viber_survey",
"text": "How satisfied are you with our service?",
"surveyOptions": [
"Very Satisfied",
"Satisfied",
"Neutral",
"Dissatisfied",
"Very Dissatisfied"
],
"ttl": 604800
}
Aptaujas teksta maksimālais garums: 85 rakstzīmes
Flash Call
Tālruņa verifikācija, izmantojot automātisku zvanu:
{
"id": "verify-user-123",
"fromName": "YourApp",
"toPhone": "+380XXXXXXXXX",
"messageType": "flashcall",
"ttl": 300
}
Piemēri
Pamata darījums
curl -X POST https://restapi.smsbat.com/api/CascadeMessage/send_message/async \
-H "Content-Type: application/json" \
-H "X-Authorization-Key: your-api-key" \
-d '[
{
"id": "tx-001",
"fromName": "YourBank",
"toPhone": "+380XXXXXXXXX",
"messageType": "transaction",
"text": "Payment of $100 was successful. Transaction ID: ABC123"
}
]'
Plānotā akcija
curl -X POST https://restapi.smsbat.com/api/CascadeMessage/send_message/async \
-H "Content-Type: application/json" \
-H "X-Authorization-Key: your-api-key" \
-d '[
{
"id": "promo-001",
"fromName": "YourStore",
"toPhone": "+380XXXXXXXXX",
"messageType": "promo",
"text": "Flash Sale starts in 1 hour! Visit: https://example.com",
"scheduledSent": "2025-01-25T09:00:00Z",
"ttl": 3600
}
]'
Lielapjoma ziņojumi
curl -X POST https://restapi.smsbat.com/api/CascadeMessage/send_message/async \
-H "Content-Type: application/json" \
-H "X-Authorization-Key: your-api-key" \
-d '[
{
"id": "bulk-001",
"fromName": "YourBrand",
"toPhone": "+380111111111",
"messageType": "transaction",
"text": "Message 1"
},
{
"id": "bulk-002",
"fromName": "YourBrand",
"toPhone": "+380222222222",
"messageType": "transaction",
"text": "Message 2"
},
{
"id": "bulk-003",
"fromName": "YourBrand",
"toPhone": "+380333333333",
"messageType": "transaction",
"text": "Message 3"
}
]'
Atbilde
Veiksmīga atbilde
[
{
"messageId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"trackinId": "tx-001"
},
{
"messageId": "8b2f1e9a-4c6d-4e2a-9f8b-1a3d5c7e9f0b",
"trackinId": "tx-002"
}
]
Atbildes lauki
| Lauks | Tips | Apraksts |
|---|---|---|
messageId |
virkne (UUID) | Sistēmas ziņojuma identifikators |
| "trackinId" | stīga | Jūsu izsekošanas identifikators (no pieprasījuma) |
Izmantojiet “messageId”, lai izsekotu statusu, un “trackinId”, lai veiktu korelāciju ar savu sistēmu.
Īstenošanas piemēri
Python
import requests
from datetime import datetime, timedelta
class CascadeMessenger:
def __init__(self, api_key):
self.base_url = 'https://restapi.smsbat.com'
self.headers = {
'Content-Type': 'application/json',
'X-Authorization-Key': api_key
}
def send_message(self, tracking_id, from_name, to_phone,
message_type, text, ttl=None, scheduled=None):
"""Send single cascade message"""
message = {
'id': tracking_id,
'fromName': from_name,
'toPhone': to_phone,
'messageType': message_type,
'text': text
}
if ttl:
message['ttl'] = ttl
if scheduled:
message['scheduledSent'] = scheduled.isoformat()
response = requests.post(
f'{self.base_url}/api/CascadeMessage/send_message/async',
headers=self.headers,
json=[message]
)
response.raise_for_status()
return response.json()[0]
def send_bulk(self, messages):
"""Send multiple messages"""
response = requests.post(
f'{self.base_url}/api/CascadeMessage/send_message/async',
headers=self.headers,
json=messages
)
response.raise_for_status()
return response.json()
# Usage
messenger = CascadeMessenger('your-api-key')
# Send single message
result = messenger.send_message(
tracking_id='order-12345',
from_name='YourStore',
to_phone='+380XXXXXXXXX',
message_type='transaction',
text='Your order has been confirmed',
ttl=86400
)
print(f"Message ID: {result['messageId']}")
# Send scheduled message
scheduled_time = datetime.now() + timedelta(hours=2)
result = messenger.send_message(
tracking_id='promo-001',
from_name='YourBrand',
to_phone='+380XXXXXXXXX',
message_type='promo',
text='Sale starts now!',
scheduled=scheduled_time
)
# Bulk send
messages = [
{
'id': f'bulk-{i}',
'fromName': 'YourBrand',
'toPhone': f'+38011111111{i}',
'messageType': 'transaction',
'text': f'Message {i}'
}
for i in range(100)
]
results = messenger.send_bulk(messages)
print(f"Sent {len(results)} messages")
JavaScript (Node.js)
const axios = require('axios');
class CascadeMessenger {
constructor(apiKey) {
this.baseUrl = 'https://restapi.smsbat.com';
this.headers = {
'Content-Type': 'application/json',
'X-Authorization-Key': apiKey
};
}
async sendMessage({ id, fromName, toPhone, messageType, text, ttl, scheduledSent }) {
const message = {
id,
fromName,
toPhone,
messageType,
text
};
if (ttl) message.ttl = ttl;
if (scheduledSent) message.scheduledSent = scheduledSent;
const response = await axios.post(
`${this.baseUrl}/api/CascadeMessage/send_message/async`,
[message],
{ headers: this.headers }
);
return response.data[0];
}
async sendBulk(messages) {
const response = await axios.post(
`${this.baseUrl}/api/CascadeMessage/send_message/async`,
messages,
{ headers: this.headers }
);
return response.data;
}
async sendTelegramViber({ id, fromName, toPhone, messageType, text }) {
const response = await axios.post(
`${this.baseUrl}/api/CascadeMessage/send_message/tg-viber/async`,
[{
id,
fromName,
toPhone,
messageType,
text
}],
{ headers: this.headers }
);
return response.data[0];
}
}
// Usage
const messenger = new CascadeMessenger('your-api-key');
// Send single message
const result = await messenger.sendMessage({
id: 'order-12345',
fromName: 'YourStore',
toPhone: '+380XXXXXXXXX',
messageType: 'transaction',
text: 'Your order has been confirmed',
ttl: 86400
});
console.log('Message ID:', result.messageId);
// Send scheduled message
const scheduledTime = new Date(Date.now() + 2 * 60 * 60 * 1000);
await messenger.sendMessage({
id: 'promo-001',
fromName: 'YourBrand',
toPhone: '+380XXXXXXXXX',
messageType: 'promo',
text: 'Sale starts now!',
scheduledSent: scheduledTime.toISOString()
});
// Bulk send
const messages = Array.from({ length: 100 }, (_, i) => ({
id: `bulk-${i}`,
fromName: 'YourBrand',
toPhone: `+38011111111${i}`,
messageType: 'transaction',
text: `Message ${i}`
}));
const results = await messenger.sendBulk(messages);
console.log(`Sent ${results.length} messages`);
PHP
<?php
class CascadeMessenger {
private $baseUrl = 'https://restapi.smsbat.com';
private $apiKey;
public function __construct($apiKey) {
$this->apiKey = $apiKey;
}
public function sendMessage($id, $fromName, $toPhone, $messageType,
$text, $ttl = null, $scheduledSent = null) {
$message = [
'id' => $id,
'fromName' => $fromName,
'toPhone' => $toPhone,
'messageType' => $messageType,
'text' => $text
];
if ($ttl !== null) {
$message['ttl'] = $ttl;
}
if ($scheduledSent !== null) {
$message['scheduledSent'] = $scheduledSent;
}
$ch = curl_init($this->baseUrl . '/api/CascadeMessage/send_message/async');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'X-Authorization-Key: ' . $this->apiKey
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode([$message]));
$response = curl_exec($ch);
curl_close($ch);
$result = json_decode($response, true);
return $result[0];
}
public function sendBulk($messages) {
$ch = curl_init($this->baseUrl . '/api/CascadeMessage/send_message/async');
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_POST, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, [
'Content-Type: application/json',
'X-Authorization-Key: ' . $this->apiKey
]);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($messages));
$response = curl_exec($ch);
curl_close($ch);
return json_decode($response, true);
}
}
// Usage
$messenger = new CascadeMessenger('your-api-key');
// Send single message
$result = $messenger->sendMessage(
'order-12345',
'YourStore',
'+380XXXXXXXXX',
'transaction',
'Your order has been confirmed',
86400
);
echo "Message ID: " . $result['messageId'] . "\n";
// Bulk send
$messages = [];
for ($i = 0; $i < 100; $i++) {
$messages[] = [
'id' => "bulk-$i",
'fromName' => 'YourBrand',
'toPhone' => "+38011111111$i",
'messageType' => 'transaction',
'text' => "Message $i"
];
}
$results = $messenger->sendBulk($messages);
echo "Sent " . count($results) . " messages\n";
Labākā prakse
Tālruņa numuri
Vienmēr izmantojiet E.164 formātu:
- ✅ +380XXXXXXXXX
- ❌ "380XXXXXXXXX".
- ❌ "0XXXXXXXXX".
Izsekošanas ID
- Katram ziņojumam izmantojiet unikālus ID - ID iekļaujiet kontekstu (piemēram, "pasūtījums-12345", "promo-summer-2025") - ID nedrīkst būt garāks par 255 rakstzīmēm
- Izvairieties no īpašām rakstzīmēm
TTL (dzīves laiks)
Ieteicamās TTL vērtības:
- OTP/verifikācija: 300–600 sekundes (5–10 minūtes)
- Darījumu: 3600–86400 sekundes (1–24 stundas)
- Reklāma: 86400-259200 sekundes (1-3 dienas)
- Aptaujas: 604 800 sekundes (7 dienas)
Plānotie ziņojumi
- Izmantojiet UTC laika joslu iestatījumam "scheduledSent". - Neplānojiet to vairāk kā 30 dienas iepriekš - Ņemiet vērā laika joslu atšķirības - Vispirms pārbaudiet ar tuvākajiem grafikiem
Lielapjoma sūtīšana
- Sūtiet 100-1000 ziņojumu paketēs
- Īstenošanas ātruma ierobežošana
- Graciozi rīkojieties ar kļūdām
- Mēģiniet vēlreiz nosūtīt ziņojumus, kas neizdevās
Kļūdu apstrāde
HTTP statusa kodi
| Kods | Apraksts |
|---|---|
| 200 | Panākumi |
| 400 | Nederīgs pieprasījums — nederīgi parametri |
| 401 | Neautorizēts — nederīga API atslēga |
| 429 | Pārāk daudz pieprasījumu |
| 500 | Servera kļūda |
Atbilde uz kļūdu
{
"error": {
"code": "INVALID_PHONE",
"message": "Invalid phone number format",
"field": "toPhone"
}
}
Atkārtot loģiku
async function sendWithRetry(message, maxRetries = 3) {
for (let i = 0; i < maxRetries; i++) {
try {
return await messenger.sendMessage(message);
} catch (error) {
if (error.response?.status === 400) {
// Don't retry validation errors
throw error;
}
if (i === maxRetries - 1) throw error;
// Exponential backoff
await new Promise(resolve =>
setTimeout(resolve, Math.pow(2, i) * 1000)
);
}
}
}
Nākamie soļi
- Ziņojumu mainīgie - Izmantojiet dinamisku saturu
- Ziņojumu veidi - Izpētiet ziņojumu veidus
- Piegādes statuss - Izsekojiet piegādi