← Blog
Developer playbook · 16 मिनट पढ़ें · Published अप्रैल 2026 · Author Serhat Dogan

SMS-Activate माइग्रेशन हब 2026: डेवलपर चेकलिस्ट, API मैपिंग और रिफंड तुलना

If you are still carrying handler_api.php calls in your repo pointed at sms-activate.org, this is the hub you open at 9pm on a Friday and close with a working integration before midnight. Real endpoint mapping, real code diffs, refund policy comparison, and the gotchas that will bite you between the line you change and the alert that wakes you up on Monday morning.

इस प्लेबुक का अस्तित्व क्यों है

अधिकांश "एसएमएस-एक्टिवेट मर चुका है, यहाँ विकल्पों की सूची है" पोस्ट उस हिस्से को याद नहीं करते जो वास्तव में डेवलपर घंटों को जलाता है: कोड। एक नए प्रदाता के लिए साइन अप करने में पांच मिनट लगते हैं। एक एकीकरण को फिर से लिखना जो वर्षों से उत्पादन में चुपचाप चल रहा है, जिसमें अनियंत्रित कोने के मामले और एक लागत ट्रैकर जुड़ा हुआ है, आपको लगता है उससे अधिक समय लेता है।

हमने जनवरी 2026 में अपनी अनुकूलता परत को शिप करने के बाद, हमने हर टीम से वही तीन प्रश्न प्राप्त करना शुरू कर दिया जो इसे आजमाते हैं:

  1. कौन से एंडपॉइंट्स स्वच्छ रूप से मैप करते हैं और किन्हें मैनुअल परिवर्तन की आवश्यकता होती है?
  2. मैं अपने लागत ट्रैकिंग और रिफंड प्रवाह को बिना पुनः लिखे कैसे काम कर सकता हूँ?
  3. क्या मौन रूप से टूटता है और एक सप्ताह बाद बिलिंग आश्चर्य के रूप में सामने आता है?

यह प्लेबुक उन तीन प्रश्नों का क्रम में उत्तर देता है और आपको चलाने से पहले ऑडिट करने के लिए कॉपी-पेस्ट कोड देता है।

48-घंटे की पुनरावलोकन: वास्तव में क्या हुआ

एसएमएस-एक्टिवेट 29 दिसंबर, 2025 को बंद हो गया। कोई अनुसूचित रखरखाव बैनर, कोई प्रवास उपकरण और कोई सार्वजनिक सूचना नहीं थी। लॉगिन करने की कोशिश करने वाले उपयोगकर्ताओं को एक पृष्ठ मिला जिसमें कहा गया था कि सेवा स्थायी रूप से बंद हो गई है। कुछ घंटों के भीतर एपीआई ने हर एंडपॉइंट पर कनेक्शन रीसेट लौटा दिया।

तीन चीजें तेजी से हुईं:

अनुभव अभी भी जारी है। अप्रैल 2026 तक, रूस में और कम से कम दो समन्वित समुदाय मुकदमे हैं जो जमी हुई शेष राशि को पुनर्प्राप्त करने की कोशिश कर रहे हैं। इनमें से कोई भी आपकी मदद नहीं करता है, यही कारण है कि हम उस हिस्से पर ध्यान केंद्रित करने जा रहे हैं जिसे आप वास्तव में ठीक कर सकते हैं।

भाग 1: एपीआई डिप्रेसिएशन मैप

एसएमएस-एक्टिवेट ने https://sms-activate.org/stubs/handler_api.php पर एक सार्वजनिक एंडपॉइंट शिप किया। हर क्रिया एक यूआरएल पर क्वेरी स्ट्रिंग पैरामीटर थी। नीचे दी गई तालिका हर प्रमुख क्रिया को उसके VerifySMS समकक्ष के साथ मैप करती है। https://api.verifysms.app/compat/handler_api.php पर कम्पैट लेयर उसी क्वेरी स्ट्रिंग आकार को स्वीकार करता है।

एसएमएस-एक्टिवेट क्रियाउद्देश्यVerifySMS कम्पैट लेयरनेटिव VerifySMS एपीआई
getBalanceयूएसडी शेष को पाठ के रूप में लौटाएंबदलाव के बिना काम करता है। ACCESS_BALANCE:X.YY लौटाता हैGET /v1/balance जेएसओएन लौटाता है
getNumbersStatusदेश-दर-देश उपलब्धताकाम करता है। विरासत मानचित्र प्रारूप लौटाता हैGET /v1/countries/availability
getNumberकिसी सेवा के लिए एक नंबर पट्टे पर लेंकाम करता है। ACCESS_NUMBER:id:+phone लौटाता हैPOST /v1/rentals
setStatusकिराए की पुष्टि करें या रद्द करेंकाम करता है। स्थिति कोड 1/3/6/8 समान रूप से व्यवहार करते हैंPOST /v1/rentals/{id}/status
getStatusएसएमएस आगमन के लिए पोल करेंकाम करता है। STATUS_WAIT_CODE, STATUS_OK:CODE, STATUS_WAIT_RETRY लौटाता हैGET /v1/rentals/{id}
getPricesमूल्य तालिका प्राप्त करेंकाम करता है। विरासत जेएसओएन आकार में VerifySMS मूल्य निर्धारण लौटाता हैGET /v1/prices
getCountriesदेश कोड मानचित्रकाम करता है। विरासत संख्यात्मक आईडी और आईएसओ-3166 कोड दोनों लौटाता हैGET /v1/countries
getTopCountriesByServiceप्रति सेवा शीर्ष देशकैश किए गए एसएमएस-एक्टिवेट रैंकों के बजाय वास्तविक समय VerifySMS डेटा लौटाता हैGET /v1/services/{id}/top-countries

कम उपयोग किए जाने वाले एसएमएस-एक्टिवेट क्रियाओं का एक मुट्ठी भर एक-से-एक मैप नहीं करते हैं। getRentServicesAndCountries और लंबी-लीज़ रेंटल एपीआई एसएमएस-एक्टिवेट विशिष्ट थे और इनमें कोई कम्पैट लेयर नहीं है। यदि आपके एकीकरण ने उन लोगों का उपयोग किया है, तो आपको देशी VerifySMS लंबी-लीज़ एंडपॉइंट पर जाना चाहिए POST /v1/rentals/long, जो अलग से प्रलेखित है।

भाग 2: कोड माइग्रेशन वॉकथ्रू

निम्नलिखित स्निपेट्स वह सटीक आकार हैं जिसका मैंने जनवरी में हमारे अपने स्टेजिंग वातावरण के खिलाफ परीक्षण किया था। मैंने उन्हें जानबूझकर उबाऊ रखा है ताकि आप उन्हें अपने कोड के खिलाफ बिना संदर्भ स्विच किए पढ़ सकें।

पाइथन (requests)

एकमात्र आवश्यक परिवर्तन आधार यूआरएल है। यदि आप पहले ही एपीआई को एक छोटे क्लाइंट मॉड्यूल में लपेट चुके हैं, तो डिफ एकल पंक्ति है।

import os
import requests

# पहले
# BASE_URL = "https://sms-activate.org/stubs/handler_api.php"
# बाद में
BASE_URL = "https://api.verifysms.app/compat/handler_api.php"
API_KEY = os.environ["SMS_API_KEY"]

def get_number(service: str, country: int) -> tuple[str, str]:
    resp = requests.get(BASE_URL, params={
        "api_key": API_KEY,
        "action": "getNumber",
        "service": service,
        "country": country,
    }, timeout=30)
    resp.raise_for_status()
    # ACCESS_NUMBER:12345:+441234567890
    status, rental_id, phone = resp.text.split(":", 2)
    if status != "ACCESS_NUMBER":
        raise RuntimeError(f"अनपेक्षित प्रतिक्रिया: {resp.text}")
    return rental_id, phone

def wait_for_code(rental_id: str, deadline_seconds: int = 180) -> str:
    import time
    start = time.monotonic()
    while time.monotonic() - start < deadline_seconds:
        resp = requests.get(BASE_URL, params={
            "api_key": API_KEY,
            "action": "getStatus",
            "id": rental_id,
        }, timeout=15).text
        if resp.startswith("STATUS_OK:"):
            return resp.split(":", 1)[1]
        time.sleep(4)
    # मार्क अस उपयोग किया गया ताकि हमें रिफंड मिल सके
    requests.get(BASE_URL, params={
        "api_key": API_KEY,
        "action": "setStatus",
        "status": 8,
        "id": rental_id,
    }, timeout=15)
    raise TimeoutError(f"कोई कोड {deadline_seconds}s के बाद नहीं")

नोड.js (axios)

import axios from "axios";

// पहले
// const BASE_URL = "https://sms-activate.org/stubs/handler_api.php";
// बाद में
const BASE_URL = "https://api.verifysms.app/compat/handler_api.php";
const API_KEY = process.env.SMS_API_KEY;

export async function getNumber(service, country) {
  const { data } = await axios.get(BASE_URL, {
    params: { api_key: API_KEY, action: "getNumber", service, country },
    timeout: 30_000,
  });
  const [status, rentalId, phone] = data.split(":");
  if (status !== "ACCESS_NUMBER") {
    throw new Error(`अनपेक्षित प्रतिक्रिया: ${data}`);
  }
  return { rentalId, phone };
}

export async function waitForCode(rentalId, deadlineMs = 180_000) {
  const start = Date.now();
  while (Date.now() - start < deadlineMs) {
    const { data } = await axios.get(BASE_URL, {
      params: { api_key: API_KEY, action: "getStatus", id: rentalId },
      timeout: 15_000,
    });
    if (data.startsWith("STATUS_OK:")) return data.split(":")[1];
    await new Promise((r) => setTimeout(r, 4000));
  }
  await axios.get(BASE_URL, {
    params: { api_key: API_KEY, action: "setStatus", status: 8, id: rentalId },
    timeout: 15_000,
  });
  throw new Error(`कोई कोड ${deadlineMs}ms के बाद नहीं`);
}

पीएचपी (curl)

<?php
// पहले
// const BASE_URL = "https://sms-activate.org/stubs/handler_api.php";
// बाद में
const BASE_URL = "https://api.verifysms.app/compat/handler_api.php";

function sms_call(array $params): string {
    $params["api_key"] = getenv("SMS_API_KEY");
    $url = BASE_URL . "?" . http_build_query($params);
    $ch  = curl_init($url);
    curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
    curl_setopt($ch, CURLOPT_TIMEOUT, 30);
    $body = curl_exec($ch);
    curl_close($ch);
    return $body;
}

function get_number(string $service, int $country): array {
    $resp = sms_call(["action" => "getNumber", "service" => $service, "country" => $country]);
    [$status, $id, $phone] = explode(":", $resp, 3);
    if ($status !== "ACCESS_NUMBER") {
        throw new RuntimeException("अनपेक्षित: $resp");
    }
    return ["id" => $id, "phone" => $phone];
}

गो (net/http)

package sms

import (
    "errors"
    "fmt"
    "io"
    "net/http"
    "net/url"
    "os"
    "strings"
    "time"
)

// पहले
// const baseURL = "https://sms-activate.org/stubs/handler_api.php"
// बाद में
const baseURL = "https://api.verifysms.app/compat/handler_api.php"

func call(params url.Values) (string, error) {
    params.Set("api_key", os.Getenv("SMS_API_KEY"))
    req, _ := http.NewRequest("GET", baseURL+"?"+params.Encode(), nil)
    client := &http.Client{Timeout: 30 * time.Second}
    resp, err := client.Do(req)
    if err != nil {
        return "", err
    }
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    return string(body), nil
}

func GetNumber(service string, country int) (id, phone string, err error) {
    body, err := call(url.Values{
        "action":  {"getNumber"},
        "service": {service},
        "country": {fmt.Sprint(country)},
    })
    if err != nil {
        return "", "", err
    }
    parts := strings.SplitN(body, ":", 3)
    if len(parts) != 3 || parts[0] != "ACCESS_NUMBER" {
        return "", "", errors.New("अनपेक्षित: " + body)
    }
    return parts[1], parts[2], nil
}

गो उदाहरण जानबूझकर किसी भी तीसरे पक्ष के क्लाइंट के बिना लिखा गया है ताकि आप इसे एक न्यूनतम सेवा में बिना निर्भरता जोड़ने के ड्रॉप कर सकें। हर दूसरे भाषा में यही पैटर्न होता है: यूआरएल स्वैप करें, बाकी रखें, और अपने मौजूदा त्रुटि हैंडलिंग को आगे बढ़ने दें।

भाग 3: गॉटचेस जो आपको जलाएंगे

ये वे स्थान हैं जहां कम्पैट लेयर एसएमएस-एक्टिवेट की विशिष्टताओं के प्रति वफादार है लेकिन विशिष्टताएं ही आपको आश्चर्यचकित करेंगी यदि आप इस कोड को थोड़ी देर में नहीं छुआ है।

देश आईडी आईएसओ कोड नहीं हैं

एसएमएस-एक्टिवेट ने देशों को अपने स्वयं के क्रम में क्रमांकित किया: रूस 0 था, यूएसए 187 था, इंडोनेशिया 6 था, और इसी तरह। यदि आपके एकीकरण में ये जादुई संख्याएं हार्डकोडेड हैं, तो वे अभी भी कम्पैट लेयर पर काम करती हैं। यदि आप नया कोड लिख रहे हैं, तो आईएसओ-3166 अल्फा-2 फॉर्म (RU, US, ID) पसंद करें जो कम्पैट लेयर भी स्वीकार करता है। एक ही कॉल साइट पर दोनों शैलियों को मिश्रित न करें, क्योंकि भविष्य की डिबगिंग दर्दनाक होगी।

स्थिति कोड 3 बनाम 6

setStatus एक्शन कोड 3 का अर्थ था "एक और एसएमएस अनुरोध करें" एसएमएस-एक्टिवेट दुनिया में, और कोड 6 का अर्थ था "कोड को मान्य के रूप में स्वीकार करें।" ये दो कोड स्वैप करने में आसान हैं और उनके विपरीत बिलिंग परिणाम हैं: 3 आपको बिल देता है, 6 पुष्टि करता है कि सफल सत्यापन। कम्पैट लेयर उसी तरह व्यवहार करता है। अपने कोड के लिए setStatus को ग्रेप करें और सुनिश्चित करें कि कोड 6 केवल तभी चलता है जब आप सुनिश्चित हों कि सत्यापन सफल हुआ है।

समय और सर्किट ब्रेकर

एसएमएस-एक्टिवेट लोड के तहत कभी-कभी एक 200 खाली शरीर के साथ एक एचटीटीपी त्रुटि के बजाय लौट आया। रक्षात्मक क्लाइंट कॉल को टाइमआउट में लपेटते हैं और खाली शरीर को रिट्री सिग्नल के रूप में मानते हैं। VerifySMS कम्पैट लेयर पर कभी भी खाली शरीर नहीं लौटाता है। यदि आपका क्लाइंट अभी भी खाली को रिट्री के रूप में मानता है, तो यह एक अलग किराये की आईडी पर हमला करने पर एक फ्लकी नेटवर्क पर बजट जलाएगा। सुरक्षित पैटर्न ज्ञात प्रतिक्रिया उपसर्गों (ACCESS_, STATUS_, BAD_) की जांच करना और कुछ भी इलाज न करना, एक हार्ड विफलता के रूप में व्यवहार करना है।

दर सीमाएं प्रति-आईपी से प्रति-कुंजी तक चलती हैं

एसएमएस-एक्टिवेट दर सीमाएं एपीआई टोकन के लिए कुंजी थीं। VerifySMS दर सीमाएं एपीआई टोकन और स्रोत आईपी पते के संयोजन के लिए कुंजी हैं, क्योंकि हम स्क्रैपर स्क्रिप्टों से बहुत सारे दुरुपयोग देखते हैं जो एक बॉटनेट में एक कुंजी साझा करते हैं। एकल सर्वर या लोड-बैलेंस्ड पूल से सामान्य उत्पादन यातायात के लिए, यह अदृश्य है। यदि आप वितरित सीआई जॉब चलाते हैं जो सभी एक स्टेजिंग कुंजी साझा करते हैं, तो आप पहली बार बेड़े के सभी गर्म होने पर 429 देख सकते हैं। समाधान यह है कि कैनरी को एक नोड से एक दिन के लिए चलने दें इससे पहले कि आप इसे फैलाएं।

रिफंड समय तत्काल महसूस होता है क्योंकि यह वास्तव में तत्काल है

जहां एसएमएस-एक्टिवेट रिफंड आपको कुछ घंटों में दिखाई देता है, VerifySMS रिफंड 60 सेकंड के भीतर दिखाई देता है। यदि आपका लागत ट्रैकर शेड्यूल पर बैलेंस पढ़ता है, तो यह रिफंड को एक क्रेडिट के रूप में पंजीकृत करेगा जिसे पुरानी प्रणाली ने याद किया होगा। पुनर्मिलन डैशबोर्ड कभी-कभी इसे पहले दिन एक विसंगति के रूप में झंडा लगाते हैं।

भाग 4: मूल्य तुलना वास्तविकता जाँच

shutdown से पहले, SMS-Activate बाजार का आधार था। रूसी नंबरों की कीमत $0.03 से $0.05 प्रति सत्यापन थी, और बड़े खरीदारों को और भी कम कीमत मिलती थी। वह आधार अब चला गया है। यहाँ अप्रैल 2026 में सबसे आम सेवाओं के लिए शेष प्रदाताओं की स्थिति है, जो प्रत्येक प्रदाता के सार्वजनिक मूल्य निर्धारण पृष्ठ से निकाली गई है :

सेवा5simTextVerifiedSMSPVASMS-MANVerifySMS
व्हाट्सएप / रूस$0.014$0.05$0.035$0.10
व्हाट्सएप / यूएसए$0.27$0.25$0.28$0.22$0.18
टेलीग्राम / रूस$0.016$0.05$0.04$0.10
टेलीग्राम / यूएसए$0.35$0.40$0.38$0.30$0.20
गूगल / इंडोनेशिया$0.07$0.08$0.06$0.10

पैटर्न सरल है: 5sim और SMS-MAN रूसी मूल्य निर्धारण पर जीत हासिल करते हैं, TextVerified अमेरिकी प्रीमियम स्तर पर है, और VerifySMS सब कुछ के लिए $0.10 के फ्लैट आधार के साथ बीच में बैठता है सिवाय सबसे महंगे अमेरिकी गैर-VoIP नंबरों के। यदि आपका बजट SMS-Activate की आधार कीमतों पर ट्यून किया गया था, तो आप चुने हुए प्रतिस्थापन की परवाह किए बिना प्रति सत्यापन 2 से 5 गुना अधिक भुगतान करने की उम्मीद कर सकते हैं।

इस तालिका पर दो नोट। सबसे पहले, प्रत्येक प्रदाता (VerifySMS सहित) वाहक लागतों के जवाब में व्यक्तिगत देश की कीमतों को बढ़ाता और घटाता है, इसलिए अपने स्वयं के डैशबोर्ड में वर्तमान मूल्य की पुष्टि करने से पहले एक बजट प्रतिबद्ध करें। दूसरा, सफल सत्यापन प्रति प्रभावी मूल्य refund अनुपात पर निर्भर करता है। $0.08 स्टicker मूल्य और 70% सफलता दर वाला प्रदाता स्वचालित रिफंड और 90% सफलता दर के साथ $0.10 प्रदाता की तुलना में प्रति सफलता आपको अधिक खर्च कर सकता है।

भाग 5: 10-चरण प्रवास चेकलिस्ट

यह वास्तविक अनुक्रम है जिसे हमने जनवरी में अपने उपयोगकर्ताओं के माध्यम से चलाया था। यह एक डेवलपर के साथ रिपॉजिटरी एक्सेस, एक प्रोडक्शन सेवा और एक स्टेजिंग वातावरण मानता है। यदि आप कई सेवाएं चला रहे हैं या एक मोनोरेपो हैं, तो कैनरी प्रतिशत बढ़ाएं।

  1. हर कॉल साइट की सूची बनाएं। git grep -n 'sms-activate\.org\|handler_api\.php\|getNumber\|setStatus' चलाएं और पुराने API को हिट करने वाले प्रत्येक फ़ाइल को सूचीबद्ध करें। यदि आप एक दर्जन से अधिक पाते हैं, तो माइग्रेशन से पहले कॉल को सेंट्रलाइज़ करने के लिए एक रैपर मॉड्यूल चुनें।
  2. एक VerifySMS API कुंजी प्राप्त करें। साइन अप करें, थोड़ी सी शेष राशि जोड़ें और स्टेजिंग के लिए एक स्कोप्ड कुंजी उत्पन्न करें। उत्पादन कुंजी को रिपॉजिटरी से बाहर रखें।
  3. आधार URL बदलें। SMS-Activate होस्ट को api.verifysms.app/compat/handler_api.php से बदलें। क्वेरी स्ट्रिंग बदलें नहीं। इसे अकेले प्रतिबद्ध करें ताकि अंतर साफ हो जाए।
  4. अपने मौजूदा परीक्षण चलाएं। यदि परीक्षण वास्तविक API को हिट करते हैं, तो उन्हें स्टेजिंग की ओर इंगित करें और आकार मेल खाने के लिए देखें। यदि वे API का मॉक करते हैं, तो उन्हें लाइव स्टेजिंग एंडपॉइंट के विरुद्ध भी चलाएं ताकि आप अनुबंध बहाव को पकड़ सकें।
  5. देश आईडी की पुष्टि करें। अपने कोड को देश स्थिरांक के लिए स्किम करें। यदि आप विरासत संख्यात्मक आईडी का उपयोग कर रहे हैं, तो वे अभी भी काम करते हैं। यदि आपके पास मौका है, तो उन्हें ISO-3166 कोड से बदलें क्योंकि अगले डेवलपर जो इस फ़ाइल को छूता है वह आपको धन्यवाद देगा।
  6. रिफंड दावों को वायर्ड करें। पुष्टि करें कि आपका टाइमआउट पथ setStatus को status=8 के साथ कॉल करता है। इसके बिना, आप अभी भी रिफंड प्राप्त करेंगे (हम स्वचालित रूप से समाप्त हो चुके पट्टों को रिफंड करते हैं) लेकिन आपका लागत ट्रैकर वास्तविकता से पिछड़ जाएगा।
  7. अपने लागत ट्रैकर को अपडेट करें। X-VerifySMS-Cost प्रतिक्रिया हेडर के बजाय मूल्य निर्धारण तालिका से लागत पढ़ें। यह एकल परिवर्तन आपके वित्त डैशबोर्ड को सटीक से सटीक बनाता है।
  8. निगरानी। सफलता दर, p95 विलंबता और रिफंड अनुपात अलर्ट अपने मौजूदा आधार रेखा के विरुद्ध जोड़ें। थ्रेसहोल्ड चुनें जिन्हें आप अपना सकते हैं, न कि जिन्हें आप "ठीक" सोचते हैं।
  9. 24 घंटे के लिए 5 प्रतिशत कैनरी। उत्पादन यातायात का एक छोटा स्लाइस नए एंडपॉइंट के माध्यम से रूट करें। डैशबोर्ड देखें, न कि केवल अलर्ट।
  10. बाकी को काट लें। एक बार कैनरी विंडो साफ हो जाने के बाद, शेष 95 प्रतिशत को स्थानांतरित करें और पुराने क्लाइंट कोड को एक रिलीज़ चक्र के लिए टिप्पणी किए जाने दें (न कि हटाए गए) ताकि आपके पास एक तेज़ रोलबैक हो।

उसके बाद अगले रिलीज़ में पुराना कोड हटाएं। एक सप्ताह से अधिक समय तक मृत कॉल साइटों को छोड़ दें नहीं क्योंकि अगला व्यक्ति मॉड्यूल को छूने के लिए उन्हें गलती से एक नए एकीकरण में पेस्ट कर देगा।

अक्सर पूछे जाने वाले प्रश्न

क्या SMS-Activate संगतता परत एक वास्तविक API है या सिर्फ एक स्टब?

यह api.verifysms.app/compat/handler_api.php पर एक वास्तविक एंडपॉइंट है जो SMS-Activate सार्वजनिक दस्तावेज़ीकरण से प्रत्येक प्रमुख कार्रवाई को स्वीकार करता है: getBalance, getNumber, getStatus, setStatus, getPrices, और getCountries। अनुरोधों को हमारे मूल API के तहत प्रॉक्सी किया जाता है, इसलिए आपको VerifySMS मूल्य निर्धारण, कवरेज और रिफंड व्यवहार बिना किसी कोड परिवर्तन के मिलता है।

क्या मेरा पुराना API कुंजी काम करेगा?

नहीं। SMS-Activate API कुंजियाँ उस दिन से प्रमाणीकरण करना बंद कर दिया जब सेवा बंद हो गई। आपको VerifySMS से एक नई कुंजी की आवश्यकता है। साइन अप करें, थोड़ी सी शेष राशि जोड़ें और डैशबोर्ड से एक कुंजी उत्पन्न करें। कुंजी प्रारूप लंबाई में समान है ताकि आप इसे उसी पर्यावरण चर में पेस्ट कर सकें।

SMS-Activate की तुलना में रिफंड कैसे काम करते हैं?

SMS-Activate ने आपको 20 मिनट के भीतर स्थिति कोड 8 के साथ setStatus कॉल करने की आवश्यकता थी ताकि एक नंबर को अप्रयुक्त के रूप में चिह्नित किया जा सके, और रिफंड मैन्युअल रूप से कुछ घंटों के भीतर संसाधित किए गए थे। VerifySMS उसी setStatus कॉल को स्वीकार करता है और 60 सेकंड के भीतर पूरी राशि को आपके शेष में रिफंड करता है। यदि आप setStatus कॉल करना भूल जाते हैं, तो हमारा सिस्टम अभी भी लीज विंडो समाप्त होने के बाद किसी भी नंबर को ऑटो-रिफंड करता है जिसने कभी एसएमएस प्राप्त नहीं किया।

कौन से देश समर्थित हैं?

VerifySMS 200 से अधिक देशों को कवर करता है। SMS-Activate द्वारा प्रदान किया गया प्रत्येक देश VerifySMS पर उपलब्ध है, जिसमें रूस, इंडोनेशिया, वियतनाम, नाइजीरिया और यूएस शामिल हैं। आप अपना मौजूदा देश आईडी मैपिंग रख सकते हैं या जब भी आप चाहें ISO-3166 अल्फा-2 कोड पर जा सकते हैं।

क्या मूल्य निर्धारण समान है?

नहीं। SMS-Activate की $0.03 से $0.05 प्रति सत्यापन के लिए रूसी नंबरों की निचली-बाजार की कीमतें खुली बाजार से चली गई हैं। वर्तमान बाजार मूल्य निर्धारण आम सेवाओं के लिए $0.10 से लेकर सख्त प्लेटफ़ॉर्म पर अमेरिकी गैर-VoIP नंबरों के लिए $0.25 तक है। VerifySMS $0.10 को आधार रेखा के रूप में लेता है और डैशबोर्ड पर प्रति देश मूल्य निर्धारण प्रकाशित करता है।

क्या मुझे अपना मतदान तर्क बदलने की आवश्यकता है?

नहीं। getStatus कॉल STATUS_WAIT_CODE और STATUS_OK को उसी प्रारूप में लौटाता है जिसका उपयोग SMS-Activate करता है। 3 से 5 सेकंड के मतदान अंतराल अभी भी काम करते हैं। एकमात्र नया व्यवहार यह है कि VerifySMS डैशबोर्ड में एक वेबहुक URL भी प्रदान करता है, ताकि आप मतदान करना बंद कर सकें यदि आप एक घटना-चालित प्रवाह पसंद करते हैं।

यदि संगतता परत कभी हटा दी जाती है तो क्या होगा?

संगतता परत को एक स्थायी सार्वजनिक इंटरफ़ेस माना जाता है। यदि हम कभी इसके व्यवहार को बदलते हैं, तो हम कम से कम छह महीने का निष्कासन विंडो एक पूर्ण प्रवास नोट के साथ प्रकाशित करेंगे। मूल VerifySMS JSON API भी प्रलेखित है, ताकि आप कभी भी संगतता परत से दूर जा सकें जब भी यह समझ में आए।

मैं बिना पैसा खर्च किए कैसे परीक्षण कर सकता हूँ?

VerifySMS डैशबोर्ड एक सैंडबॉक्स मोड प्रदान करता है जो सिम्युलेटेड फ़ोन नंबर और डिबेट किए बिना आपके शेष राशि के लिए डिबेट किए बिना एसएमएस कोड लौटाता है। डैशबोर्ड में सैंडबॉक्स फ्लैग को फ़्लिप करें या किसी अनुरोध के साथ X-Sandbox-Mode हेडर भेजें ताकि अपने कोड पथों का अभ्यास करने से पहले लाइव हो सकें।

क्या मैं अन्य सेवाओं से भी प्रवास कर सकता हूँ?

हाँ। यह प्लेबुक SMS-Activate API के आसपास लिखा गया है क्योंकि अधिकांश फंसे हुए कोड वहीं रहते हैं, लेकिन समान चेकलिस्ट 5sim, SMS-MAN या किसी अन्य हैंडलर_api-संगत सेवा से माइग्रेशन पर लागू होती है। संगतता परत handler_api.php मापदंडों को पहचानती है चाहे आप पहले किस सेवा को कॉल कर रहे हों।

एक वास्तविक प्रवास में कितना समय लगता है?

कुछ दर्जन कॉल साइटों के साथ एकल सेवा एकीकरण के लिए, दो से चार घंटे के केंद्रित काम की योजना बनाएं, साथ ही एक 24-घंटे का कैनरी विंडो इससे पहले कि आप पूर्ण यातायात काट सकें। बड़े मल्टी-सर्विस माइग्रेशन कस्टम त्रुटि हैंडलिंग, एनालिटिक्स और रिट्राई के साथ लंबे समय तक चल सकते हैं लेकिन आमतौर पर एक ही कार्यदिवस के भीतर समाप्त हो जाते हैं।

क्या मैं अपना ऐतिहासिक डेटा खो देता हूँ?

SMS-Activate सत्यापन इतिहास ऑफ़लाइन चला गया जब सेवा बंद हो गई और पुनर्प्राप्त नहीं की जा सकती। VerifySMS आपके खाते पर प्रत्येक सत्यापन प्रयास का एक पूर्ण ऑडिट लॉग 12 महीनों के लिए बनाए रखता है, जो डैशबोर्ड से और /compat/handler_api.php?action=getHistory एक्सटेंशन के माध्यम से सुलभ है।

क्या यह मेरे GDPR या अनुपालन रुख को प्रभावित करता है?

VerifySMS यूनाइटेड किंगडम में पंजीकृत है और UK GDPR का पालन करता है। हम अपनी डेटा रिटेंशन पॉलिसी, उप-प्रोसेसर और DPA को गोपनीयता पृष्ठ पर प्रकाशित करते हैं। यदि आपके पिछले सेटअप के लिए SMS-Activate के साथ एक DPA की आवश्यकता थी, तो हमसे संपर्क करें और हम उसी समझौते पर एक व्यवसाय दिन के भीतर हस्ताक्षर करेंगे।

अगले कदम

यदि आप यहाँ तक पढ़ चुके हैं, तो आपके पास पहले से ही आवश्यक टुकड़े हैं। इन्वेंट्री चरण से शुरू करें, आधार URL स्वैप की समीक्षा के लिए एक साथी के सामने प्राप्त करें और रात भर कैनरी चलाएं। प्लेबुक छोटा है इसलिए अनुशासन का कठिन हिस्सा है कैनरी विंडो के बाद कटने के बजाय सब कुछ एक कमिट में काट देना।

साइट पर बाकी हिस्सों के बारे में पढ़ना:

एक शाम को माइग्रेशन काटने के लिए तैयार हैं?

एक VerifySMS API कुंजी बनाएं →

सैंडबॉक्स मोड शामिल है · ऑटो-रिफंड गारंटी · 200+ देश · SMS-Activate संगतता परत /compat/handler_api.php पर

Next steps

If you have read this far, you already have the pieces you need. Start with the inventory step, get the base URL swap in front of a teammate for review, and run the canary overnight. The playbook is small on purpose; the hard part is the discipline to stop after the canary window instead of cutting everything over in one commit.

Related reading on the rest of the site:

Ready to cut the migration to a single evening?

Create a VerifySMS API key →

Sandbox mode included · Auto-refund guarantee · 200+ countries · SMS-Activate compat layer on /compat/handler_api.php