Անցնել պարունակությանը

Ուղարկեք Կասկադ հաղորդագրություններ

Ուղարկեք հաղորդագրություններ բազմաթիվ ալիքներով մեկ API հարցումով: Կասկադը ավտոմատ կերպով ուղղորդում է ձեր հաղորդագրությունը Telegram Bot-ի, Viber Bot-ի, Viber Business Messages-ի, RCS-ի և SMS-ի միջոցով:

Վերջնակետեր

Ստանդարտ Կասկադ

POST /api/CascadeMessage/send_message/async

Հաղորդագրությունների երթուղիները հաջորդաբար հասանելի բոլոր ալիքներով:

Telegram-Viber Priority

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

Ավելի արագ առաքման համար առաջնահերթություն է տալիս Telegram և Viber ալիքներին:

Նույնականացում

Cascade API-ն աջակցում է նույնականացման երեք վերնագրեր: Ներառեք առնվազն մեկը.

Վերնագիր Նկարագրություն
«X-Authorization-Key» SMSBAT API բանալի (խորհուրդ է տրվում)
«X-Viber-Auth-Token» Viber bot հավատարմագրերը
«X-Tg-Bot-Key» Telegram բոտի բանալի

Հարցման կառուցվածքը

Վերնագրեր

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» լարային Այո Ձեր հետագծման նույնացուցիչը
«Name»-ից լարային Այո Ուղարկողի ցուցադրման անունը
«toPhone» լարային Այո Ստացողի հեռախոսահամարը (E.164 ձևաչափ)
«հաղորդագրությունների տեսակ» լարային Այո Հաղորդագրության տեսակը՝ «գործարք», «պրոմո», «viber_survey», «flashcall»
«տեքստ» լարային Այո* Հաղորդագրության բովանդակությունը (* պահանջվում է շատ տեսակների համար)
«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
}

Viber հարցում

Ինտերակտիվ հարցումներ 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»՝ ձեր համակարգի հետ փոխկապակցվելու համար:

Իրականացման օրինակներ

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-ում (օրինակ՝ «պատվեր-12345», «promo-summer-2025»)
  • Պահպանեք ID-ները 255 նիշից ցածր
  • Խուսափեք հատուկ կերպարներից

TTL (Ապրելու ժամանակը)

Առաջարկվող TTL արժեքներ.

  • OTP/Ստուգում՝ 300-600 վայրկյան (5-10 րոպե)
  • Գործարքային ՝ 3600-86400 վայրկյան (1-24 ժամ)
  • Գովազդային՝ 86400-259200 վայրկյան (1-3 օր)
  • Հարցումներ՝ 604800 վայրկյան (7 օր)

Պլանավորված հաղորդագրություններ

  • Օգտագործեք UTC ժամային գոտին «scheduledSent»-ի համար
  • Նախապես 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)
      );
    }
  }
}

Հաջորդ քայլերը