مركز هجرة 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.
لماذا توجد هذه الدليل الإرشادي
معظم منشورات "SMS-Activate مات، إليك قائمة بالبدائل" تفوّت الجزء الذي يستهلك بالفعل ساعات المطورين: الكود. التسجيل لدى مزود جديد يستغرق خمس دقائق. إعادة كتابة تكامل كان يعمل بصمت في الإنتاج لسنوات، مع حالات زاوية غير مختبرة ومتعقب تكلفة مرفق به، يستغرق وقتًا أطول مما تعتقد.
بعد أن أطلقنا طبقة التوافق الخاصة بنا في يناير 2026، بدأنا نتلقى نفس الأسئلة الثلاثة من كل فريق جربها:
- ما هي نقاط النهاية التي تتطابق بشكل نظيف وما هي التي تحتاج إلى تعديلات يدوية؟
- كيف يمكنني الحفاظ على تتبع التكاليف وتدفق استرداد الأموال الخاص بي دون إعادة كتابة؟
- ما الذي يتعطل بصمت ويظهر بعد أسبوع كمفاجأة في الفواتير؟
هذا الدليل الإرشادي يجيب على هذه الأسئلة الثلاثة بالترتيب ويقدم لك كودًا جاهزًا للنسخ واللصق يمكنك تدقيقه قبل تشغيله.
ملخص 48 ساعة: ما حدث بالفعل
أُغلقت SMS-Activate في 29 ديسمبر 2025. لم يكن هناك لافتة صيانة مجدولة، ولا أداة ترحيل، ولا إشعار عام. المستخدمون الذين حاولوا تسجيل الدخول واجهوا صفحة واحدة تقول إن الخدمة أُغلقت بشكل دائم. أعادت واجهة برمجة التطبيقات إعادة تعيين الاتصال على كل نقطة نهاية في غضون ساعات قليلة.
حدثت ثلاثة أشياء بسرعة:
- أصبحت أرصدة لوحة التحكم غير قابلة للوصول. وصفت التقارير على مجتمع
r/smsوقنوات Telegram الرسمية أرصدة تتراوح من 20 دولارًا إلى عدة آلاف من الدولارات مجمدة دون مسار استرداد. - تعطلت التكاملات قيد التشغيل بشدة. أي خدمة تقوم بالاستقصاء لـ
handler_api.phpبدأت في تلقي أخطاء اتصال HTTP، والتي تعني في معظم متتبعات الأخطاء "تم تشغيل قاطع الدائرة، قم بتنبيه الفريق". - انتهت نافذة الترحيل في أيام، وليس أسابيع. في غضون 72 ساعة، كان لدى كل مزود متبقٍ قائمة انتظار. أقرت 5sim و SMSPVA و SMS-MAN بوجود ضغط على السعة. صمدت VerifySMS لأننا كنا الأصغر في المجموعة وكان لدينا هامش احتياطي، لكن الأمر كان قريبًا حقًا.
لا تزال التداعيات تتكشف. اعتبارًا من أبريل 2026، هناك قضايا دعاوى قضائية صغيرة نشطة في روسيا واثنتان على الأقل من الدعاوى القضائية المجتمعية المنسقة التي تحاول استرداد الأرصدة المجمدة. لا شيء من ذلك يساعد الكود الخاص بك، ولهذا السبب سنركز على الجزء الذي يمكنك إصلاحه بالفعل.
الجزء 1: خريطة إيقاف واجهة برمجة التطبيقات
قدمت SMS-Activate نقطة نهاية عامة واحدة في https://sms-activate.org/stubs/handler_api.php. كان كل إجراء عبارة عن معلمة سلسلة استعلام على هذا العنوان. يربط الجدول أدناه كل إجراء رئيسي بما يعادله في VerifySMS. تقبل طبقة التوافق في https://api.verifysms.app/compat/handler_api.php نفس شكل سلسلة الاستعلام بالضبط.
| إجراء SMS-Activate | الغرض | طبقة توافق VerifySMS | واجهة برمجة تطبيقات VerifySMS الأصلية |
|---|---|---|---|
getBalance | إرجاع رصيد USD كنص | تعمل دون تغيير. تُرجع ACCESS_BALANCE:X.YY | GET /v1/balance تُرجع JSON |
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 بتنسيق JSON القديم | GET /v1/prices |
getCountries | خريطة رموز البلدان | تعمل. تُرجع معرفات رقمية قديمة ورموز ISO-3166 | GET /v1/countries |
getTopCountriesByService | أعلى البلدان حسب الخدمة | تُرجع بيانات VerifySMS في الوقت الفعلي بدلاً من ترتيبات SMS-Activate المخزنة مؤقتًا | GET /v1/services/{id}/top-countries |
هناك عدد قليل من إجراءات SMS-Activate الأقل استخدامًا لا تتطابق بشكل مباشر. getRentServicesAndCountries وواجهة برمجة التطبيقات لتأجير طويل الأجل كانت خاصة بـ SMS-Activate وليس لها طبقة توافق. إذا كان تكاملك يستخدم هذه، فيجب عليك الانتقال إلى نقطة النهاية الأصلية لتأجير طويل الأجل في VerifySMS على POST /v1/rentals/long، والتي تم توثيقها بشكل منفصل.
الجزء 2: جولات ترحيل الكود
المقتطفات التالية هي الشكل الدقيق الذي اختبرته مقابل بيئة الاختبار الخاصة بنا في يناير. لقد أبقيتها مملة عمدًا حتى تتمكن من قراءتها مقابل الكود الخاص بك دون تبديل السياق.
Python (requests)
التغيير الوحيد المطلوب هو عنوان URL الأساسي. إذا كنت قد قمت بالفعل بتغليف واجهة برمجة التطبيقات في وحدة عميل صغيرة، فإن الفرق هو سطر واحد.
import os
import requests
# BEFORE
# BASE_URL = "https://sms-activate.org/stubs/handler_api.php"
# AFTER
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"unexpected response: {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)
# Mark as unused so we get the refund
requests.get(BASE_URL, params={
"api_key": API_KEY,
"action": "setStatus",
"status": 8,
"id": rental_id,
}, timeout=15)
raise TimeoutError(f"no code after {deadline_seconds}s")
Node.js (axios)
import axios from "axios";
// BEFORE
// const BASE_URL = "https://sms-activate.org/stubs/handler_api.php";
// AFTER
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(`unexpected response: ${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(`no code after ${deadlineMs}ms`);
}
PHP (curl)
<?php
// BEFORE
// const BASE_URL = "https://sms-activate.org/stubs/handler_api.php";
// AFTER
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("unexpected: $resp");
}
return ["id" => $id, "phone" => $phone];
}
Go (net/http)
package sms
import (
"errors"
"fmt"
"io"
"net/http"
"net/url"
"os"
"strings"
"time"
)
// BEFORE
// const baseURL = "https://sms-activate.org/stubs/handler_api.php"
// AFTER
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("unexpected: " + body)
}
return parts[1], parts[2], nil
}
مثال Go مكتوب عمدًا بدون أي عميل طرف ثالث حتى تتمكن من إدراجه في خدمة بسيطة دون إضافة تبعيات. نفس النمط ينطبق في كل لغة أخرى: قم بتبديل عنوان URL، احتفظ بالباقي، ودع معالجة الأخطاء الحالية الخاصة بك تنتقل.
الجزء 3: مشاكل قد تسبب لك المتاعب
هذه هي الأماكن التي تكون فيها طبقة التوافق وفية لغرائب SMS-Activate ولكن الغرائب نفسها ستفاجئك إذا لم تلمس هذا الكود منذ فترة.
معرفات البلدان ليست رموز ISO
قامت SMS-Activate بترقيم البلدان بترتيبها الخاص: روسيا كانت 0، الولايات المتحدة الأمريكية كانت 187، إندونيسيا كانت 6، وهكذا. إذا كانت تكاملاتك تحتوي على هذه الأرقام السحرية المضمنة، فإنها لا تزال تعمل على طبقة التوافق. إذا كنت تكتب كودًا جديدًا، ففضل تنسيق ISO-3166 alpha-2 (RU، US، ID) الذي تقبله طبقة التوافق أيضًا. لا تخلط بين الأسلوبين في نفس موقع الاستدعاء، لأن تصحيح الأخطاء المستقبلي سيكون مؤلمًا.
رمز الحالة 3 مقابل 6
كان رمز الإجراء 3 في setStatus يعني "طلب رسالة SMS أخرى" في عالم SMS-Activate، وكان الرمز 6 يعني "قبول الرمز كصالح". هذان الرمزان يسهل تبديلهما على عجل ولهما نتائج فوترة معاكسة: 3 يبقيك مدينًا، 6 يؤكد التحقق الناجح. طبقة التوافق تتصرف بنفس الطريقة. ابحث في الكود الخاص بك عن setStatus وتأكد من أن الفرع الذي يأخذ الرمز 6 يعمل فقط بعد أن تتأكد من نجاح التحقق.
مهلات وقواطع الدوائر
أعادت SMS-Activate تحت الحمل أحيانًا استجابة 200 بجسم فارغ بدلاً من خطأ HTTP. العملاء الدفاعيون يغلفون الاستدعاء بمهلة ويعاملون الجسم الفارغ كإشارة إعادة محاولة. VerifySMS لا تُرجع جسمًا فارغًا أبدًا على طبقة التوافق. إذا كان عميلك لا يزال يعامل الجسم الفارغ كإعادة محاولة، فسيؤدي ذلك إلى استهلاك الميزانية بسبب شبكة غير مستقرة لأن إعادة المحاولة ستصطدم بمعرف تأجير مختلف. النمط الأكثر أمانًا هو التحقق من بادئات الاستجابة المعروفة (ACCESS_، STATUS_، BAD_) ومعاملة أي شيء آخر كفشل تام، وليس فشل عابر.
حدود المعدل تنتقل من لكل مفتاح إلى لكل IP
كانت حدود معدل SMS-Activate مرتبطة بمفتاح واجهة برمجة التطبيقات. حدود معدل VerifySMS مرتبطة بمزيج من مفتاح واجهة برمجة التطبيقات وعنوان IP المصدر، لأننا نرى الكثير من الإساءة من نصوص برمجية للكشط تشارك مفتاحًا واحدًا عبر شبكة روبوتات. بالنسبة لحركة المرور العادية في الإنتاج من خادم واحد أو مجموعة موازنة تحميل، يكون هذا غير مرئي. إذا كنت تشغل وظائف CI موزعة تشترك جميعها في مفتاح اختبار واحد، فقد ترى 429 في المرة الأولى التي تسخن فيها الأسطول معًا. الحل هو السماح للاختبار التجريبي بالعمل من عقدة واحدة ليوم واحد قبل التوسع.
توقيت استرداد الأموال يبدو فوريًا لأنه في الواقع فوري
هذه ليست فخًا بقدر ما هي مفاجأة سارة. بينما استغرقت استردادات SMS-Activate بضع ساعات لتظهر في رصيدك، تظهر استردادات VerifySMS في غضون 60 ثانية. إذا كان متعقب التكاليف الخاص بك يقرأ الرصيد بجدول زمني، فسيسجل استرداد الأموال كائتمان لم يكن النظام القديم سيكتشفه. غالبًا ما تشير لوحات معلومات التسوية إلى هذا كشذوذ في اليوم الأول.
الجزء 4: مقارنة الأسعار الواقعية
قبل الإغلاق، كانت SMS-Activate هي الحد الأدنى للسوق. كانت الأرقام الروسية تكلف 0.03 دولار إلى 0.05 دولار لكل عملية تحقق، والمشترون بكميات كبيرة دفعوا أقل من ذلك. هذا الحد الأدنى قد اختفى. هذا هو المكان الذي يتواجد فيه المزودون المتبقون في أبريل 2026 للخدمات الأكثر شيوعًا، مأخوذة من صفحة التسعير العامة لكل مزود في :
| الخدمة | 5sim | TextVerified | SMSPVA | SMS-MAN | VerifySMS |
|---|---|---|---|---|---|
| WhatsApp / Russia | $0.014 | — | $0.05 | $0.035 | $0.10 |
| WhatsApp / USA | $0.27 | $0.25 | $0.28 | $0.22 | $0.18 |
| Telegram / Russia | $0.016 | — | $0.05 | $0.04 | $0.10 |
| Telegram / USA | $0.35 | $0.40 | $0.38 | $0.30 | $0.20 |
| Google / Indonesia | $0.07 | — | $0.08 | $0.06 | $0.10 |
النمط بسيط: تفوز 5sim و SMS-MAN بأسعار روسية منخفضة للغاية، TextVerified هي الفئة المميزة للولايات المتحدة، و VerifySMS تقع في المنتصف مع حد أدنى ثابت قدره 0.10 دولار لكل شيء باستثناء أرقام الولايات المتحدة غير VoIP الأكثر تكلفة. إذا كانت ميزانيتك مضبوطة على أسعار SMS-Activate الدنيا، فتوقع دفع ضعف إلى خمسة أضعاف لكل عملية تحقق بغض النظر عن البديل الذي تختاره.
ملاحظتان على هذا الجدول. أولاً، كل مزود (بما في ذلك VerifySMS) يرفع ويخفض أسعار البلدان الفردية استجابة لتكاليف شركات الاتصالات، لذا قم بتأكيد السعر الحالي في لوحة التحكم الخاصة بك قبل تخصيص ميزانية. ثانيًا، يعتمد السعر *الفعلي* لكل عملية تحقق ناجحة على نسبة استرداد الأموال. مزود بسعر 0.08 دولار ومعدل نجاح 70٪ يكلفك أكثر لكل نجاح من مزود بسعر 0.10 دولار مع استرداد تلقائي ومعدل نجاح 90٪.
الجزء 5: قائمة التحقق من الترحيل المكونة من 10 خطوات
هذا هو التسلسل الفعلي الذي مررنا به مستخدمينا في يناير. يفترض مطورًا واحدًا لديه وصول إلى المستودع، وخدمة إنتاج واحدة، وبيئة اختبار. قم بتوسيع نسب الاختبار التجريبي إذا كنت تشغل خدمات متعددة أو مستودعًا واحدًا.
- جرد كل موقع استدعاء. قم بتشغيل
git grep -n 'sms-activate\.org\|handler_api\.php\|getNumber\|setStatus'وسرد كل ملف يصل إلى واجهة برمجة التطبيقات القديمة. إذا وجدت أكثر من اثني عشر، فاختر وحدة تغليف وقم بمركزة الاستدعاءات أولاً قبل الترحيل. - احصل على مفتاح API لـ VerifySMS. قم بالتسجيل، وأضف مبلغًا صغيرًا من الرصيد، وقم بإنشاء مفتاح مقيد للاختبار. احتفظ بمفتاح الإنتاج خارج المستودع.
- غيّر عنوان URL الأساسي. استبدل مضيف SMS-Activate بـ
api.verifysms.app/compat/handler_api.php. لا تغير سلسلة الاستعلام. قم بتثبيت هذا بمفرده حتى يكون الفرق نظيفًا. - قم بتشغيل اختباراتك الحالية. إذا كانت الاختبارات تصل إلى واجهة برمجة التطبيقات الحقيقية، فقم بتوجيهها إلى بيئة الاختبار وراقب عدم تطابق الأشكال. إذا كانت تحاكي واجهة برمجة التطبيقات، فقم بتشغيلها مقابل نقطة النهاية الحية للاختبار أيضًا حتى تلتقط انحراف العقد.
- أعد تأكيد معرفات البلدان. قم بتصفح الكود الخاص بك بحثًا عن ثوابت البلدان. إذا كنت تستخدم معرفات الأرقام القديمة، فإنها لا تزال تعمل. إذا كانت لديك الفرصة، فاستبدلها برموز ISO-3166 لأن المطور التالي الذي يلمس هذا الملف سيشكرك.
- قم بتوصيل مطالبات استرداد الأموال. تأكد من أن مسار المهلة الخاص بك يستدعي
setStatusبالرمز 8. بدون هذا، ستظل تحصل على استردادات (نقوم تلقائيًا باسترداد الإيجارات المنتهية) ولكن متعقب التكاليف الخاص بك سيتأخر عن الواقع. - قم بتحديث متعقب التكاليف الخاص بك. اقرأ التكلفة من رأس الاستجابة
X-VerifySMS-Costبدلاً من تحليلها من جدول الأسعار. هذا التغيير الوحيد يجعل لوحة معلومات الشؤون المالية الخاصة بك دقيقة إلى السنت. - المراقبة. أضف تنبيهات لمعدل النجاح، وزمن الاستجابة p95، ونسبة استرداد الأموال مقابل خط الأساس الحالي الخاص بك. اختر عتبات يمكنك الدفاع عنها، وليس تلك التي تعتقد أنها ستكون "جيدة بما فيه الكفاية".
- اختبر 5 بالمائة لمدة 24 ساعة. قم بتوجيه شريحة صغيرة من حركة مرور الإنتاج عبر نقطة النهاية الجديدة. راقب لوحة التحكم، وليس فقط التنبيهات.
- قم بتغيير الباقي. بمجرد أن تكون نافذة الاختبار التجريبي نظيفة، قم بنقل الـ 95 بالمائة المتبقية واترك كود العميل القديم معلقًا (وليس محذوفًا) لدورة إصدار واحدة حتى يكون لديك تراجع سريع.
احذف الكود القديم في الإصدار التالي بعد ذلك. لا تترك مواقع استدعاء ميتة لفترة أطول من أسبوع لأن الشخص التالي الذي يلمس الوحدة سيقوم بلصقها مرة أخرى في تكامل جديد عن طريق الخطأ.
أسئلة متكررة
هل طبقة توافق SMS-Activate واجهة برمجة تطبيقات حقيقية أم مجرد واجهة وهمية؟
إنها نقطة نهاية حقيقية في api.verifysms.app/compat/handler_api.php تقبل كل إجراء رئيسي من مستندات SMS-Activate العامة: getBalance، getNumber، getStatus، setStatus، getPrices، و getCountries. يتم توجيه الطلبات إلى واجهة برمجة التطبيقات الأصلية الخاصة بنا في الخلفية، لذا تحصل على تسعير VerifySMS وتغطيتها وسلوك استرداد الأموال دون أي تغييرات في الكود من جانبك.
هل سيعمل مفتاح واجهة برمجة التطبيقات القديم الخاص بي؟
لا. توقفت مفاتيح واجهة برمجة تطبيقات SMS-Activate عن المصادقة في اليوم الذي توقفت فيه الخدمة. تحتاج إلى مفتاح جديد من VerifySMS. قم بالتسجيل، وأضف مبلغًا صغيرًا من الرصيد، وقم بإنشاء مفتاح من لوحة التحكم. تنسيق المفتاح متطابق في الطول حتى تتمكن من لصقه في نفس متغير البيئة.
كيف تعمل استردادات الأموال مقارنة بـ SMS-Activate؟
تطلب SMS-Activate منك استدعاء setStatus بالرمز 8 في غضون 20 دقيقة لوضع علامة على رقم على أنه غير مستخدم، وتمت معالجة استردادات الأموال يدويًا في غضون ساعات قليلة. تقبل VerifySMS نفس استدعاء setStatus وتعيد المبلغ بالكامل إلى رصيدك في غضون 60 ثانية. إذا نسيت استدعاء setStatus تمامًا، فإن نظامنا لا يزال يعيد تلقائيًا أي رقم لم يتلق أبدًا رسالة SMS بعد انتهاء نافذة التأجير.
ما هي البلدان المدعومة؟
تغطي VerifySMS أكثر من 200 دولة. كل دولة قدمتها SMS-Activate متاحة على VerifySMS، بما في ذلك روسيا وإندونيسيا وفيتنام ونيجيريا والولايات المتحدة. يمكنك الاحتفاظ بتعيين معرف البلد الحالي الخاص بك أو الترحيل إلى رموز ISO-3166 alpha-2 في أي وقت تريد.
هل التسعير هو نفسه؟
لا. أسعار SMS-Activate الدنيا البالغة 0.03 دولار إلى 0.05 دولار لكل عملية تحقق للأرقام الروسية قد اختفت من السوق المفتوحة. تتراوح أسعار السوق الحالية من 0.10 دولار للخدمات الشائعة إلى 0.25 دولار لأرقام الولايات المتحدة غير VoIP على المنصات الأكثر صرامة. تتقاضى VerifySMS 0.10 دولار كحد أدنى وتنشر أسعارًا لكل بلد على لوحة التحكم.
هل أحتاج إلى تغيير منطق الاستقصاء الخاص بي؟
لا. يستدعي استدعاء getStatus STATUS_WAIT_CODE و STATUS_OK بنفس التنسيق الذي استخدمته SMS-Activate. لا تزال فترات الاستقصاء من 3 إلى 5 ثوانٍ تعمل. السلوك الجديد الوحيد هو أن VerifySMS تعرض أيضًا عنوان URL لخطاف الويب في لوحة التحكم، لذا يمكنك إيقاف الاستقصاء تمامًا إذا كنت تفضل تدفقًا يعتمد على الأحداث.
ماذا يحدث إذا تم إيقاف طبقة التوافق في أي وقت؟
تعتبر طبقة التوافق واجهة عامة دائمة. إذا قمنا بتغيير سلوكها في أي وقت، فسننشر فترة إيقاف تشغيل مدتها ستة أشهر على الأقل مع ملاحظة ترحيل كاملة. واجهة برمجة التطبيقات الأصلية لـ VerifySMS بتنسيق JSON موثقة أيضًا، لذا يمكنك الانتقال من طبقة التوافق بالسرعة التي تناسبك عندما يصبح ذلك منطقيًا.
كيف يمكنني الاختبار دون إنفاق المال؟
تكشف لوحة تحكم VerifySMS عن وضع صندوق رمل يُرجع أرقام هواتف محاكاة ورموز SMS مُعدة مسبقًا دون خصم رصيدك. قم بتبديل علامة صندوق الرمل في لوحة التحكم أو أرسل رأس X-Sandbox-Mode مع أي طلب لتشغيل مسارات الكود الخاصة بك قبل الانتقال إلى الإنتاج.
هل يمكنني الترحيل من خدمات أخرى أيضًا؟
نعم. تمت كتابة هذا الدليل الإرشادي حول واجهة برمجة تطبيقات SMS-Activate لأن هذا هو المكان الذي يوجد فيه معظم الكود المعلق، ولكن نفس قائمة التحقق تنطبق على عمليات الترحيل من 5sim أو SMS-MAN أو أي خدمة أخرى متوافقة مع handler_api. تتعرف طبقة التوافق على معلمات handler_api.php بغض النظر عن الخدمة التي كنت تتصل بها سابقًا.
كم من الوقت يستغرق الترحيل الحقيقي؟
لتكامل خدمة واحدة مع بضع عشرات من مواقع الاستدعاء، خطط لساعتين إلى أربع ساعات من العمل المركز، بالإضافة إلى نافذة اختبار تجريبي مدتها 24 ساعة قبل أن تقوم بتغيير حركة المرور بالكامل. قد تستغرق عمليات الترحيل الأكبر متعددة الخدمات مع معالجة الأخطاء المخصصة والتحليلات وإعادة المحاولات وقتًا أطول ولكنها عادةً ما تنتهي في يوم عمل واحد.
هل أفقد بياناتي التاريخية؟
ذهب سجل التحقق من SMS-Activate دون اتصال بالإنترنت عندما توقفت الخدمة وهو غير قابل للاسترداد. تحتفظ VerifySMS بسجل تدقيق كامل لكل محاولة تحقق على حسابك لمدة 12 شهرًا، ويمكن الوصول إليه من لوحة التحكم وعبر الامتداد /compat/handler_api.php?action=getHistory.
هل يؤثر هذا على وضع الامتثال أو اللائحة العامة لحماية البيانات (GDPR) الخاص بي؟
VerifySMS مسجلة في المملكة المتحدة وتتبع اللائحة العامة لحماية البيانات في المملكة المتحدة. ننشر سياسة الاحتفاظ بالبيانات الخاصة بنا، والمعالجات الفرعية، واتفاقية حماية البيانات (DPA) على صفحة الخصوصية. إذا كان إعدادك السابق يتطلب اتفاقية حماية بيانات مع SMS-Activate، فاتصل بنا وسنقوم بالتوقيع المشترك على نفس الاتفاقية في غضون يوم عمل واحد.
الخطوات التالية
إذا قرأت حتى هذه النقطة، فلديك بالفعل القطع التي تحتاجها. ابدأ بخطوة الجرد، واجعل تبديل عنوان URL الأساسي أمام زميل للمراجعة، وقم بتشغيل الاختبار التجريبي طوال الليل. الدليل الإرشادي صغير عن قصد؛ الجزء الصعب هو الانضباط للتوقف بعد نافذة الاختبار التجريبي بدلاً من تغيير كل شيء في التزام واحد.
قراءة ذات صلة على بقية الموقع:
- حالة التحقق من الرسائل القصيرة 2026 — معيار مستقل كامل لـ 8 خدمات مع بيانات التسعير وحركة المرور وسياسة استرداد الأموال.
- أفضل بدائل SMS-Activate في 2026 — دليل شامل — دليل غير مطورين لخيارات الاستبدال.
- VerifySMS مقابل SMS-Activate — مقارنة شاملة — مقارنة جنبًا إلى جنب للفرق التي لا تزال تقيّم.
- دليل واجهة برمجة تطبيقات التحقق عبر الرسائل القصيرة 2026: Twilio, Vonage, MessageBird, Plivo — جولة تفصيلية لواجهة برمجة تطبيقات VerifySMS الأصلية عندما تكون جاهزًا للانتقال من طبقة التوافق.
هل أنت مستعد لإنجاز الترحيل في أمسية واحدة؟
إنشاء مفتاح API لـ VerifySMS →وضع صندوق رمل متضمن · ضمان استرداد تلقائي · 200+ دولة · طبقة توافق SMS-Activate على /compat/handler_api.php
مزيد من المقالات باللغة العربية
- أفضل خدمات التحقق عبر الرسائل القصيرة في عام 2026 - مقارنة ضخمة
- أفضل تطبيقات الأرقام الافتراضية للتحقق عبر الرسائل القصيرة
- أفضل تطبيقات الأرقام الافتراضية للتحقق عبر الرسائل القصيرة
- أفضل الدول للأرقام الافتراضية الرخيصة
- VerifySMS مقابل 5SIM — أي خدمة تحقق من الرسائل القصيرة أفضل؟
- أفضل بدائل SMS-Activate في 2026 — دليل شامل
- هاتف مؤقت أم رقم افتراضي — ما الفرق؟
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:
- State of SMS Verification 2026 — full independent benchmark of 8 services with pricing, traffic, and refund policy data.
- أفضل بدائل SMS-Activate في 2026 — دليل شامل — non-developer guide to the replacement options.
- VerifySMS مقابل SMS-Activate — مقارنة شاملة — side-by-side comparison for teams still evaluating.
- دليل واجهة برمجة تطبيقات التحقق عبر الرسائل القصيرة 2026: Twilio, Vonage, MessageBird, Plivo — native VerifySMS API walkthrough for when you are ready to move off the compat layer.
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
