Skip to content

सन्देश स्थिति जाँच गर्नुहोस्

स्थिति जाँच अन्त्य बिन्दु प्रयोग गरेर तपाईंको सन्देशहरूको डेलिभरी स्थिति ट्र्याक गर्नुहोस्।

अन्तिम बिन्दु

GET /bat/message/{messageId}

अनुरोध

URL प्यारामिटरहरू

प्यारामिटर प्रकार आवश्यक विवरण
'messageId' स्ट्रिङ हो पठाउने प्रतिक्रियाबाट अद्वितीय सन्देश पहिचानकर्ता

प्रमाणीकरण

कुनै पनि तीन प्रमाणीकरण विधिहरू प्रयोग गर्नुहोस्:

curl -X GET https://restapi.smsbat.com/bat/message/abc123def456 \
  -H "X-Authorization-Key: your-api-key"
curl -X GET https://restapi.smsbat.com/bat/message/abc123def456 \
  -u "username:password"
curl -X GET https://restapi.smsbat.com/bat/message/abc123def456 \
  -u "@:your-api-key"

प्रतिक्रिया

आधारभूत प्रतिक्रिया

{
  "messagelistId": 123456,
  "messageId": "abc123def456",
  "deliverystatus": "delivered",
  "partscount": 1,
  "cost": 0.05
}

प्रतिक्रिया क्षेत्रहरू

क्षेत्र प्रकार विवरण
'messagelistId' पूर्णांक ब्याच पहिचानकर्ता
'messageId' स्ट्रिङ अद्वितीय सन्देश पहिचानकर्ता
वितरण स्थिति स्ट्रिङ हालको डेलिभरी स्थिति
partscount पूर्णांक सन्देश भागहरूको संख्या
'लागत' नम्बर मुद्रा एकाइहरूमा सन्देश लागत

विस्तारित प्रतिक्रिया (फलब्याक संग)

जब फलब्याक कन्फिगर हुन्छ, प्रतिक्रियाले अतिरिक्त क्षेत्रहरू समावेश गर्दछ:

{
  "messagelistId": 123456,
  "messageId": "abc123def456",
  "deliverystatus": "delivered",
  "partscount": 1,
  "cost": 0.05,
  "fallbacks": [
    {
      "type": "sms",
      "status": "not_used"
    }
  ],
  "extendedStatuses": {
    "viber": "delivered",
    "sms": "not_used"
  },
  "rate": 0.05,
  "rateAmount": 0.05,
  "rateCurrency": "USD",
  "billAmount": 0.05,
  "billCurrency": "USD"
}

डेलिभरी स्थिति मानहरू

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

स्थिति जीवनचक्र

graph LR
    A[scheduled] --> B[processing]
    B --> C[delivered]
    B --> D[undeliverable]
    B --> E[permanenterror]

अनुसूचित

सन्देश स्वीकार गरिएको छ र डेलिभरीको लागि लामबद्ध छ:

{
  "deliverystatus": "scheduled",
  "partscount": 1
}

प्रशोधन गर्दै

सन्देश हाल प्राप्तकर्तालाई पठाइँदैछ:

{
  "deliverystatus": "processing",
  "partscount": 1
}

वितरण गरियो

सन्देश सफलतापूर्वक प्राप्तकर्तालाई डेलिभर गरियो:

{
  "deliverystatus": "delivered",
  "partscount": 1,
  "cost": 0.05
}

वितरण नहुने

सन्देश डेलिभर गर्न सकिएन (अमान्य नम्बर, नेटवर्क त्रुटि):

{
  "deliverystatus": "undeliverable",
  "partscount": 1,
  "cost": 0.00
}

स्थायी त्रुटि

लगातार डेलिभरी समस्याहरूको कारणले लामबाट सन्देश हटाइयो:

{
  "deliverystatus": "permanenterror",
  "partscount": 1,
  "cost": 0.00
}

बहु सन्देशहरू जाँच गर्नुहोस्

तपाईको एप्लिकेसनमा धेरै सन्देशहरूको लागि स्थिति जाँच गर्नुहोस्:

// JavaScript example
async function checkMessageStatuses(messageIds) {
  const statuses = await Promise.all(
    messageIds.map(async (messageId) => {
      const response = await fetch(
        `https://restapi.smsbat.com/bat/message/${messageId}`,
        {
          headers: {
            'X-Authorization-Key': 'your-api-key'
          }
        }
      );
      return response.json();
    })
  );

  return statuses;
}

// Usage
const messageIds = ['abc123', 'def456', 'ghi789'];
const statuses = await checkMessageStatuses(messageIds);

statuses.forEach(status => {
  console.log(`Message ${status.messageId}: ${status.deliverystatus}`);
});

स्थिति अद्यावधिकहरूको लागि मतदान

डेलिभरी ट्र्याक गर्न स्थितिको अन्तिम बिन्दु पोल गर्नुहोस्:

// Poll every 5 seconds until delivered
async function waitForDelivery(messageId, maxAttempts = 12) {
  for (let i = 0; i < maxAttempts; i++) {
    const response = await fetch(
      `https://restapi.smsbat.com/bat/message/${messageId}`,
      {
        headers: { 'X-Authorization-Key': 'your-api-key' }
      }
    );

    const status = await response.json();

    if (status.deliverystatus === 'delivered') {
      return { success: true, status };
    }

    if (status.deliverystatus === 'undeliverable' ||
        status.deliverystatus === 'permanenterror') {
      return { success: false, status };
    }

    // Wait 5 seconds before next check
    await new Promise(resolve => setTimeout(resolve, 5000));
  }

  // Timeout after 60 seconds
  return { success: false, timeout: true };
}

वेबहुक वैकल्पिक

मतदानको सट्टा, वास्तविक-समय स्थिति अद्यावधिकहरूको लागि वेबहुकहरू प्रयोग गर्नुहोस्:

POST https://your-server.com/webhook
{
  "messageId": "abc123def456",
  "deliverystatus": "delivered",
  "timestamp": "2025-01-23T10:30:00Z",
  "cost": 0.05
}

वेबहुक URL कन्फिगर गर्न आफ्नो खाता प्रबन्धकलाई सम्पर्क गर्नुहोस्।

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

पाइथन

import requests
import time

def check_status(message_id, api_key):
    url = f"https://restapi.smsbat.com/bat/message/{message_id}"
    headers = {"X-Authorization-Key": api_key}

    response = requests.get(url, headers=headers)
    return response.json()

def wait_for_delivery(message_id, api_key, timeout=60):
    """Poll until delivered or timeout"""
    start_time = time.time()

    while time.time() - start_time < timeout:
        status = check_status(message_id, api_key)

        if status['deliverystatus'] == 'delivered':
            return {'success': True, 'status': status}

        if status['deliverystatus'] in ['undeliverable', 'permanenterror']:
            return {'success': False, 'status': status}

        time.sleep(5)

    return {'success': False, 'timeout': True}

# Usage
message_id = "abc123def456"
result = wait_for_delivery(message_id, "your-api-key")

if result['success']:
    print(f"Message delivered! Cost: {result['status']['cost']}")
else:
    print("Message delivery failed or timeout")

PHP

<?php

function checkStatus($messageId, $apiKey) {
    $url = "https://restapi.smsbat.com/bat/message/" . $messageId;

    $ch = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_HTTPHEADER, [
        "X-Authorization-Key: " . $apiKey
    ]);

    $response = curl_exec($ch);
    curl_close($ch);

    return json_decode($response, true);
}

function waitForDelivery($messageId, $apiKey, $timeout = 60) {
    $startTime = time();

    while (time() - $startTime < $timeout) {
        $status = checkStatus($messageId, $apiKey);

        if ($status['deliverystatus'] === 'delivered') {
            return ['success' => true, 'status' => $status];
        }

        if (in_array($status['deliverystatus'],
                    ['undeliverable', 'permanenterror'])) {
            return ['success' => false, 'status' => $status];
        }

        sleep(5);
    }

    return ['success' => false, 'timeout' => true];
}

// Usage
$messageId = "abc123def456";
$result = waitForDelivery($messageId, "your-api-key");

if ($result['success']) {
    echo "Message delivered! Cost: " . $result['status']['cost'];
} else {
    echo "Message delivery failed or timeout";
}

Node.js

const axios = require('axios');

async function checkStatus(messageId, apiKey) {
  const response = await axios.get(
    `https://restapi.smsbat.com/bat/message/${messageId}`,
    {
      headers: { 'X-Authorization-Key': apiKey }
    }
  );

  return response.data;
}

async function waitForDelivery(messageId, apiKey, timeout = 60000) {
  const startTime = Date.now();

  while (Date.now() - startTime < timeout) {
    const status = await checkStatus(messageId, apiKey);

    if (status.deliverystatus === 'delivered') {
      return { success: true, status };
    }

    if (['undeliverable', 'permanenterror'].includes(
      status.deliverystatus
    )) {
      return { success: false, status };
    }

    // Wait 5 seconds
    await new Promise(resolve => setTimeout(resolve, 5000));
  }

  return { success: false, timeout: true };
}

// Usage
const messageId = 'abc123def456';
const result = await waitForDelivery(messageId, 'your-api-key');

if (result.success) {
  console.log(`Message delivered! Cost: ${result.status.cost}`);
} else {
  console.log('Message delivery failed or timeout');
}

उत्तम अभ्यासहरू

मतदान आवृत्ति

  • ✅ प्रत्येक ५-१० सेकेन्डमा पोल गर्नुहोस्
  • ✅ घातीय ब्याकअफ लागू गर्नुहोस्
  • ✅ उचित टाइमआउट सेट गर्नुहोस् (60-120 सेकेन्ड)
  • ❌ प्रति सेकेन्ड एक पटक भन्दा बढी मतदान नगर्नुहोस्
  • ❌ अनिश्चितकालका लागि मतदान नगर्नुहोस्

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

async function checkStatusWithRetry(messageId, apiKey, retries = 3) {
  for (let i = 0; i < retries; i++) {
    try {
      const response = await fetch(
        `https://restapi.smsbat.com/bat/message/${messageId}`,
        {
          headers: { 'X-Authorization-Key': apiKey }
        }
      );

      if (!response.ok) {
        throw new Error(`HTTP ${response.status}`);
      }

      return await response.json();
    } catch (error) {
      if (i === retries - 1) throw error;

      // Wait before retry (exponential backoff)
      await new Promise(resolve =>
        setTimeout(resolve, Math.pow(2, i) * 1000)
      );
    }
  }
}

क्यासिङ

API कलहरू कम गर्न क्यास स्थिति परिणामहरू:

const statusCache = new Map();

async function getCachedStatus(messageId, apiKey, cacheTTL = 30000) {
  const cached = statusCache.get(messageId);

  if (cached && Date.now() - cached.timestamp < cacheTTL) {
    return cached.status;
  }

  const status = await checkStatus(messageId, apiKey);

  statusCache.set(messageId, {
    status,
    timestamp: Date.now()
  });

  return status;
}

ब्याच प्रशोधन

धेरै सन्देशहरू जाँच गर्दा, ब्याच अनुरोधहरू:

async function checkBatchStatus(messageIds, apiKey, batchSize = 10) {
  const results = [];

  for (let i = 0; i < messageIds.length; i += batchSize) {
    const batch = messageIds.slice(i, i + batchSize);
    const batchResults = await Promise.all(
      batch.map(id => checkStatus(id, apiKey))
    );
    results.push(...batchResults);

    // Rate limiting
    if (i + batchSize < messageIds.length) {
      await new Promise(resolve => setTimeout(resolve, 1000));
    }
  }

  return results;
}

केसहरू प्रयोग गर्नुहोस्

अर्डर पुष्टि

अर्डर पुष्टिकरण सन्देशहरूको डेलिभरी ट्र्याक गर्नुहोस्:

const orderMessage = await sendMessage({
  to: customer.phone,
  text: `Order #${orderId} confirmed`
});

// Wait for delivery
const result = await waitForDelivery(orderMessage.messageId, apiKey);

if (result.success) {
  await updateOrder(orderId, { notificationSent: true });
} else {
  await scheduleRetry(orderId);
}

दुई-कारक प्रमाणीकरण

समय समाप्ति अघि OTP डेलिभरी प्रमाणित गर्नुहोस्:

const otpMessage = await sendOTP(userPhone, otpCode);

// Poll for delivery
const delivered = await waitForDelivery(
  otpMessage.messageId,
  apiKey,
  30 // 30 second timeout
);

if (!delivered.success) {
  // Send via alternative channel
  await sendEmailOTP(userEmail, otpCode);
}

मार्केटिङ अभियानहरू

अभियान सन्देश डेलिभरी दरहरू ट्र्याक गर्नुहोस्:

const messageIds = await sendCampaign(recipientList);

// Check all statuses after 5 minutes
setTimeout(async () => {
  const statuses = await checkBatchStatus(messageIds, apiKey);

  const delivered = statuses.filter(s =>
    s.deliverystatus === 'delivered'
  ).length;

  console.log(`Delivery rate: ${delivered / statuses.length * 100}%`);
}, 5 * 60 * 1000);

अर्को चरणहरू