Dërgo Mesazhe Kaskadë
Dërgoni mesazhe nëpër kanale të shumta me një kërkesë të vetme API. Cascade drejton automatikisht mesazhin tuaj përmes Telegram Bot, Viber Bot, Viber Business Messages, RCS dhe SMS.
Pikat fundore
Kaskada standarde
Drejton mesazhet nëpër të gjitha kanalet e disponueshme në sekuencë.
Prioriteti Telegram-Viber
KODI_BLOCK_1
I jep përparësi kanaleve Telegram dhe Viber për shpërndarje më të shpejtë.
Autentifikimi
Cascade API mbështet tre tituj të vërtetimit. Përfshi të paktën një:
| Kreu | Përshkrimi |
|---|---|
X-Autorization-Key |
Çelësi SMSBAT API (rekomandohet) |
X-Viber-Auth-Token |
Kredencialet e Viber bot |
X-Tg-Bot-Key |
Çelësi i botit të telegramit |
Struktura e kërkesës
Titujt
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
Trupi i kërkesës
Dërgoni një grup objektesh mesazhesh:
KODI_BLOCK_3
Parametrat
| Parametri | Lloji | Kërkohet | Përshkrimi |
|---|---|---|---|
id |
varg | Po | Identifikuesi juaj i gjurmimit |
ngaEmri |
varg | Po | Emri i shfaqur i dërguesit |
Telefon |
varg | Po | Numri i telefonit të marrësit (format E.164) |
Lloji i mesazhit |
varg | Po | Lloji i mesazhit: transaksion, promo, viber_survey, flashcall |
tekst |
varg | Po* | Përmbajtja e mesazhit (* kërkohet për shumicën e llojeve) |
ttl |
numër i plotë | Jo | Koha për të jetuar në sekonda |
Dërguar i planifikuar |
varg | Jo | ISO 8601 data data për dorëzimin e planifikuar |
Llojet e mesazheve
Mesazhet e transaksionit
Njoftimet kritike si konfirmimet e porosive dhe përditësimet e llogarisë:
{
"id": "order-12345",
"fromName": "YourStore",
"toPhone": "+380XXXXXXXXX",
"messageType": "transaction",
"text": "Your order #12345 has been confirmed and will arrive tomorrow.",
"ttl": 86400
}
Mesazhe Promo
Fushata marketingu me media të pasura:
{
"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
}
Anketa Viber
Sondazhe interaktive me 2-5 opsione përgjigjeje:
{
"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
}
Maksimumi i tekstit të anketës: 85 karaktere
Thirrje flash
Verifikimi i telefonit përmes telefonatës së automatizuar:
{
"id": "verify-user-123",
"fromName": "YourApp",
"toPhone": "+380XXXXXXXXX",
"messageType": "flashcall",
"ttl": 300
}
Shembuj
Transaksioni bazë
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"
}
]'
Promo e planifikuar
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
}
]'
Mesazhe me shumicë
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"
}
]'
Përgjigje
Përgjigja e suksesit
[
{
"messageId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
"trackinId": "tx-001"
},
{
"messageId": "8b2f1e9a-4c6d-4e2a-9f8b-1a3d5c7e9f0b",
"trackinId": "tx-002"
}
]
Fushat e përgjigjes
| Fusha | Lloji | Përshkrimi |
|---|---|---|
Id mesazhi |
varg (UUID) | Identifikuesi i mesazhit të sistemit |
trackinId |
varg | Identifikuesi juaj i gjurmimit (nga kërkesa) |
Përdorni 'messageId' për gjurmimin e statusit dhe 'trackinId' për lidhjen me sistemin tuaj.
Shembuj zbatimi
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";
Praktikat më të mira
Numrat e telefonit
Përdorni gjithmonë formatin E.164:
- ✅ +380XXXXXXXXX
- ❌ 380XXXXXXXXX
- ❌ 0XXXXXXXXX
ID-të përcjellëse
- Përdorni ID unike për çdo mesazh
- Përfshi kontekstin në ID (p.sh., "order-12345", "promo-summer-2025")
- Mbani ID-të nën 255 karaktere
- Shmangni karakteret speciale
TTL (Koha për të jetuar)
Vlerat e rekomanduara TTL:
- OTP/Verifikimi : 300-600 sekonda (5-10 minuta)
- Transaksionale: 3600-86400 sekonda (1-24 orë)
- Promocionale: 86400-259200 sekonda (1-3 ditë)
- Anketat: 604800 sekonda (7 ditë)
Mesazhe të planifikuara
- Përdorni zonën kohore të UTC për 'scheduledSent'
- Mos planifikoni më shumë se 30 ditë përpara
- Llogaritni ndryshimet në zonën kohore
- Së pari provoni me oraret e së ardhmes
Dërgim me shumicë
- Dërgoni në grupe prej 100-1000 mesazhesh
- Zbatoni kufizimin e normës
- Trajto gabimet me hijeshi
- Provo sërish mesazhet e dështuara
Trajtimi i gabimeve
Kodet e statusit HTTP
| Kodi | Përshkrimi |
|---|---|
| 200 | Sukses |
| 400 | Kërkesë e keqe - parametra të pavlefshëm |
| 401 | I paautorizuar - çelësi i pavlefshëm API |
| 429 | Shumë kërkesa |
| 500 | Gabim serveri |
Përgjigja e gabimit
{
"error": {
"code": "INVALID_PHONE",
"message": "Invalid phone number format",
"field": "toPhone"
}
}
Riprovo Logic
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)
);
}
}
}
Hapat e ardhshëm
- Message Variables - Përdor përmbajtje dinamike
- Llojet e mesazheve - Eksploroni llojet e mesazheve
- Statusi i dorëzimit - Gjurmo dorëzimin