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

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-KeySMSBAT API သော့ (အကြံပြုထားသည်)
X-Viber-Auth-TokenViber bot အထောက်အထားများ
X-Tg-Bot-KeyTelegram 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"
  }
]

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

ကန့်သတ်ချက်ရိုက်လိုအပ်သည်ဖော်ပြချက်
idstringဟုတ်တယ်သင်၏ခြေရာခံအမှတ်အသား
fromNamestringဟုတ်တယ်ပေးပို့သူအမည်
toPhonestringဟုတ်တယ်လက်ခံသူဖုန်းနံပါတ် (E.164 ဖော်မတ်)
messageTypestringဟုတ်တယ်မက်ဆေ့ဂျ်အမျိုးအစား- ငွေပေးငွေယူပရိုမိုရှင်းviber_surveyflashcall
စာသားstringဟုတ်တယ်*မက်ဆေ့ခ်ျအကြောင်းအရာ (အမျိုးအစားအများစုအတွက် * လိုအပ်သည်)
ttlကိန်းပြည့်မရှိTime-to-s live in စက္ကန့်
schedledSentstringမရှိစီစဉ်ထားသောပေးပို့မှုအတွက် 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"
  }
]

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

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

အခြေအနေခြေရာခံခြင်းအတွက် 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)
      );
    }
  }
}

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