Skip to content

क्यास्केड सन्देशहरू पठाउनुहोस्

एकल एपीआई अनुरोधको साथ धेरै च्यानलहरूमा सन्देशहरू पठाउनुहोस्। क्यास्केडले टेलिग्राम बट, भाइबर बट, भाइबर बिजनेस मेसेज, आरसीएस र एसएमएस मार्फत तपाईंको सन्देशलाई स्वचालित रूपमा रुट गर्छ।

अन्तिम बिन्दुहरू

मानक क्यास्केड

POST /api/CascadeMessage/send_message/async

अनुक्रममा सबै उपलब्ध च्यानलहरू मार्फत सन्देशहरू मार्ग गर्दछ।

टेलिग्राम-भाइबर प्राथमिकता

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

छिटो डेलिभरीका लागि टेलिग्राम र भाइबर च्यानलहरूलाई प्राथमिकता दिन्छ।

प्रमाणीकरण

क्यास्केड एपीआईले तीन प्रमाणीकरण हेडरहरूलाई समर्थन गर्दछ। कम्तिमा एक समावेश गर्नुहोस्:

हेडर विवरण
X-प्राधिकरण-कुञ्जी SMSBAT API कुञ्जी (सिफारिस गरिएको)
X-Viber-Auth-Token Viber बोट प्रमाणहरू
X-Tg-Bot-Key टेलिग्राम बोट कुञ्जी

अनुरोध संरचना

हेडरहरू

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 स्ट्रिङ हो तपाईंको ट्र्याकिङ पहिचानकर्ता
fromName स्ट्रिङ हो प्रेषक प्रदर्शन नाम
toPhone स्ट्रिङ हो प्रापकको फोन नम्बर (E.164 ढाँचा)
messageType स्ट्रिङ हो सन्देश प्रकार: लेनदेन, प्रोमो, भाइबर_सर्वे, फ्लैशकल
पाठ स्ट्रिङ हो* सन्देश सामग्री (* धेरै प्रकारका लागि आवश्यक)
ttl पूर्णांक छैन सेकेन्डमा बाँच्ने समय
अनुसूचित पठाइएको स्ट्रिङ छैन निर्धारित डेलिभरीको लागि 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
}

भाइबर सर्वेक्षण

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
}

सर्वेक्षण पाठ अधिकतम: 85 वर्ण

फ्ल्यास कल

स्वचालित कल मार्फत फोन प्रमाणिकरण:

{
  "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' स्ट्रिङ (UUID) प्रणाली सन्देश पहिचानकर्ता
trackinId स्ट्रिङ तपाईंको ट्र्याकिङ पहिचानकर्ता (अनुरोधबाट)

स्थिति ट्र्याकिङको लागि messageId प्रयोग गर्नुहोस् र तपाइँको प्रणालीसँग सम्बन्ध राख्नको लागि trackinId प्रयोग गर्नुहोस्।

कार्यान्वयन उदाहरणहरू

पाइथन

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 ढाँचा प्रयोग गर्नुहोस्: - ✅ +३८०XXXXXXXXX - ❌ ३८०XXXXXXXXX - ❌ 0XXXXXXXXX

ट्र्याकिङ आईडीहरू

  • प्रत्येक सन्देशको लागि अद्वितीय आईडी प्रयोग गर्नुहोस्
  • ID मा सन्दर्भ समावेश गर्नुहोस् (जस्तै, order-12345, promo-summer-2025)
  • आईडीहरू 255 वर्णहरू भन्दा कम राख्नुहोस्
  • विशेष क्यारेक्टरहरू बेवास्ता गर्नुहोस्

TTL (समय-टु-लाइभ)

सिफारिस गरिएका TTL मानहरू:

  • OTP/प्रमाणीकरण: ३००-६०० सेकेन्ड (५-१० मिनेट)
  • लेनदेनात्मक: ३६००-८६४०० सेकेन्ड (१-२४ घण्टा)
  • प्रवर्धनात्मक: ८६४००-२५९२०० सेकेन्ड (१-३ दिन)
  • सर्वेक्षण: ६०४८०० सेकेन्ड (७ दिन)

अनुसूचित सन्देशहरू

  • scheduledSent को लागि UTC समय क्षेत्र प्रयोग गर्नुहोस्
  • 30 दिन भन्दा बढी अग्रिम तालिका नगर्नुहोस्
  • समय क्षेत्र भिन्नताहरूको लागि खाता
  • पहिले निकट भविष्य तालिका संग परीक्षण

थोक पठाउने

  • 100-1000 सन्देशहरूको ब्याचमा पठाउनुहोस्
  • दर सीमा लागू गर्नुहोस्
  • त्रुटिहरू राम्रोसँग ह्यान्डल गर्नुहोस्
  • असफल सन्देशहरू पुन: प्रयास गर्नुहोस्

त्रुटि ह्यान्डलिंग

HTTP स्थिति कोडहरू

कोड विवरण
२०० सफलता
400 खराब अनुरोध - अमान्य प्यारामिटरहरू
४०१ अनाधिकृत - अवैध API कुञ्जी
४२९ धेरै अनुरोधहरू
५०० सर्भर त्रुटि

त्रुटि प्रतिक्रिया

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

अर्को चरणहरू