အကြောင်းအရာသို့ ကရန်

Cascade မက်ဆေ့ခ်ျများပို့ပါ။

API တောင်းဆိုချက်တစ်ခုတည်းဖြင့် ချန်နယ်များစွာတွင် စာတိုပေးပို့ပါ။ Cascade သည် သင့်စာကို Telegram Bot၊ Viber Bot၊ Viber Business Messages၊ RCS နှင့် SMS တို့မှ အလိုအလျောက် ပို့ဆောင်ပေးပါသည်။

အဆုံးမှတ်များ

Standard Cascade

POST /api/CascadeMessage/send_message/async

ရနိုင်သော ချန်နယ်များအားလုံးမှတဆင့် မက်ဆေ့ချ်များကို ဆက်တိုက်လမ်းကြောင်းပေးသည်။

Telegram-Viber ဦးစားပေး

POST /api/CascadeMessage/send_message/tg-viber/async

ပိုမိုမြန်ဆန်စွာ ပေးပို့နိုင်ရန် Telegram နှင့် Viber ချန်နယ်များကို ဦးစားပေးပါသည်။

စစ်မှန်ကြောင်းအထောက်အထားပြခြင်း။

Cascade API သည် authentication headers သုံးခုကို ပံ့ပိုးပေးသည်။ အနည်းဆုံးတစ်ခု ပါဝင်ပါ-

ခေါင်းစီး ဖော်ပြချက်
X-Authorization-Key SMSBAT API သော့ (အကြံပြုထားသည်)
X-Viber-Auth-Token Viber bot အထောက်အထားများ
X-Tg-Bot-Key Telegram bot သော့

တောင်းဆိုဖွဲ့စည်းပုံ

ခေါင်းစီးများ

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

တောင်းခံလွှာ

မက်ဆေ့ချ်အရာဝတ္ထုတစ်ခု၏ အခင်းအကျင်းတစ်ခုကို ပို့ပါ-

[
  {
    "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"
  }
]

ကန့်သတ်ချက်များ

ကန့်သတ်ချက် ရိုက် လိုအပ်သည် ဖော်ပြချက်
id string ဟုတ်တယ် သင်၏ခြေရာခံအမှတ်အသား
fromName string ဟုတ်တယ် ပေးပို့သူအမည်
toPhone string ဟုတ်တယ် လက်ခံသူဖုန်းနံပါတ် (E.164 ဖော်မတ်)
messageType string ဟုတ်တယ် မက်ဆေ့ဂျ်အမျိုးအစား- ငွေပေးငွေယူပရိုမိုရှင်းviber_surveyflashcall
စာသား string ဟုတ်တယ်* မက်ဆေ့ခ်ျအကြောင်းအရာ (အမျိုးအစားအများစုအတွက် * လိုအပ်သည်)
ttl ကိန်းပြည့် မရှိ Time-to-s live in စက္ကန့်
schedledSent string မရှိ စီစဉ်ထားသောပေးပို့မှုအတွက် ISO 8601 ရက်စွဲအချိန်

မက်ဆေ့ခ်ျအမျိုးအစားများ

ငွေလွှဲစာတိုများ

မှာယူမှုအတည်ပြုချက်များနှင့် အကောင့်အပ်ဒိတ်များကဲ့သို့ အရေးကြီးသော သတိပေးချက်များ-

{
  "id": "order-12345",
  "fromName": "YourStore",
  "toPhone": "+380XXXXXXXXX",
  "messageType": "transaction",
  "text": "Your order #12345 has been confirmed and will arrive tomorrow.",
  "ttl": 86400
}

ပရိုမိုးရှင်း မက်ဆေ့ခ်ျ

ကြွယ်ဝသောမီဒီယာများဖြင့် စျေးကွက်ရှာဖွေရေး ကမ်ပိန်းများ-

{
  "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 Survey

တုံ့ပြန်မှုရွေးချယ်စရာ 2-5 ခုပါသော အပြန်အလှန်တုံ့ပြန်မှုစစ်တမ်းများ

{
  "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
}

စစ်တမ်းစာသား အများဆုံး- စာလုံးရေ ၈၅ လုံး

Flash Call

အလိုအလျောက်ခေါ်ဆိုမှုမှတစ်ဆင့် ဖုန်းအတည်ပြုခြင်း-

{
  "id": "verify-user-123",
  "fromName": "YourApp",
  "toPhone": "+380XXXXXXXXX",
  "messageType": "flashcall",
  "ttl": 300
}

ဥပမာများ

အခြေခံငွေလွှဲခြင်း။

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"
    }
  ]'

စီစဉ်ထားသော ပရိုမိုးရှင်း

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
    }
  ]'

အစုလိုက် မက်ဆေ့ချ်များ

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"
    }
  ]'

တုံ့ပြန်မှု

အောင်မြင်မှုတုံ့ပြန်ခြင်း။

[
  {
    "messageId": "3fa85f64-5717-4562-b3fc-2c963f66afa6",
    "trackinId": "tx-001"
  },
  {
    "messageId": "8b2f1e9a-4c6d-4e2a-9f8b-1a3d5c7e9f0b",
    "trackinId": "tx-002"
  }
]

တုံ့ပြန်မှုနယ်ပယ်များ

လယ် ရိုက် ဖော်ပြချက်
messageId string (UUID) စနစ်မက်ဆေ့ချ် သတ်မှတ်သူ
trackinId string သင်၏ခြေရာခံအမှတ်အသား (တောင်းဆိုမှုမှ)

အခြေအနေခြေရာခံခြင်းအတွက် messageId နှင့် သင့်စနစ်နှင့်ဆက်စပ်ရန်အတွက် trackinId ကိုသုံးပါ။

အကောင်အထည်ဖော်မှု ဥပမာများ

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";

အကောင်းဆုံးအလေ့အကျင့်များ

ဖုန်းနံပါတ်များ

E.164 ဖော်မတ်ကို အမြဲသုံးပါ- - ✅ +380XXXXXXXXX - ❌ 380XXXXXXXXX - ❌ 0XXXXXXXXX

ခြေရာခံ ID များ

  • မက်ဆေ့ဂျ်တစ်ခုစီအတွက် သီးသန့် ID များကို အသုံးပြုပါ။
  • ID တွင် အကြောင်းအရာကို ထည့်သွင်းပါ (ဥပမာ၊ order-12345promo-summer-2025)
  • ID များကို စာလုံး 255 လုံးအောက်တွင်ထားပါ။
  • အထူးဇာတ်ကောင်များကိုရှောင်ပါ။

TTL (အချိန်မှ တိုက်ရိုက်ထုတ်လွှင့်သည်)

အကြံပြုထားသည့် TTL တန်ဖိုးများ-

  • OTP/Verification: 300-600 စက္ကန့် (5-10 မိနစ်)
  • အရောင်းအ၀ယ်: 3600-86400 စက္ကန့် (1-24 နာရီ)
  • ပရိုမိုးရှင်း: 86400-259200 စက္ကန့် (1-3 ရက်)
  • စစ်တမ်းများ: 604800 စက္ကန့် (7 ရက်)

စီစဉ်ထားသော မက်ဆေ့ချ်များ

  • schedledSent အတွက် UTC အချိန်ဇုန်ကိုသုံးပါ။
  • ရက် 30 ထက်ပို၍ ကြိုတင်စီစဉ်မထားပါနှင့်
  • အချိန်ဇုန်ကွဲပြားမှုအတွက်အကောင့်
  • မကြာမီအချိန်ဇယားများဖြင့် ဦးစွာစမ်းသပ်ပါ။

အစုလိုက်ပို့ခြင်း။

  • မက်ဆေ့ခ်ျ 100-1000 အတွဲလိုက်ပို့ပါ။
  • နှုန်းကန့်သတ်ချက်ကိုအကောင်အထည်ဖော်ပါ။
  • အမှားများကို သပ်ရပ်စွာ ကိုင်တွယ်ပါ။
  • မအောင်မြင်သောမက်ဆေ့ဂျ်များကို ထပ်စမ်းကြည့်ပါ။

ကိုင်တွယ်မှုအမှား

HTTP အခြေအနေကုဒ်များ

ကုတ် ဖော်ပြချက်
200 အောင်မြင်မှု
400 တောင်းဆိုမှု မမှန် - မမှန်ကန်သော ဘောင်များ
401 ခွင့်ပြုချက်မရှိဘဲ - မမှန်ကန်သော API သော့
429 တောင်းဆိုမှုများ
500 ဆာဗာ အမှားအယွင်း

အမှားတုံ့ပြန်မှု

{
  "error": {
    "code": "INVALID_PHONE",
    "message": "Invalid phone number format",
    "field": "toPhone"
  }
}

လော့ဂျစ်ကို ပြန်စမ်းကြည့်ပါ။

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)
      );
    }
  }
}

နောက်အဆင့်များ