مفتوح المصدر • رخصة MIT • من فريق مهارة

التحقّق من الجوال عبر تيليجرام

حين أنشأ المستخدم حساب تيليجرام، كان تيليجرام قد تحقّق من رقمه برسالة SMS بالفعل. هذه المكتبة تقبل ذلك التحقّق بدل تكراره، فلا ترسل رسالةً واحدة.

بلا اعتماديّات • بلا قاعدة بيانات • مع أيّ إطار عمل

ثلاث خطوات، وبلا رسالة SMS واحدة

المستخدم لا يكتب رقمه في أيّ حقل. الرقم يصل من تيليجرام نفسه.

  1. 1

    رمزٌ وحيد الاستعمال

    تُنشئ رمزاً، تحفظ نسخته المُجزَّأة عندك، وتفتح للمستخدم رابطاً يقوده إلى بوت تيليجرام الخاصّ بك. صلاحيّة الرمز خمس عشرة دقيقة.

  2. 2

    ضغطةٌ داخل تيليجرام

    يظهر للمستخدم زرّ «مشاركة رقمي». عند ضغطه يرسل تيليجرام بطاقة جهة الاتّصال المسجّلة لديه، لا رقماً مكتوباً بخطّ اليد.

  3. 3

    تحقّقٌ في خادمك

    يصلك الحدث على الـ webhook، فتتأكّد من صحّة مصدره ومن تطابق الرمز، وتحصل على الرقم بصيغة E.164 جاهزاً للحفظ.

الفحص الذي يمنع انتحال أرقام الآخرين

بطاقة جهة الاتّصال في تيليجرام يمكن إعادة توجيهها من دفتر عناوين أيّ شخص، ولو قُبلت كما هي لاستطاع أيّ أحدٍ «التحقّق» من رقمٍ يملك بطاقته فقط. البطاقة الذاتيّة وحدها تحمل معرّف مُرسِلها، لذا لا تُقبل المشاركة إلّا حين يتطابق معرّف صاحب البطاقة مع معرّف مُرسِل الرسالة.

ما الذي تقدّمه المكتبة

لا رسائل SMS دوليّة إطلاقاً

الـ SMS الدوليّة إلى سوريا مكلفة وكثيرة الفشل، وبعض المزوّدين يرفضون التسليم أصلاً. تيليجرام منتشر هناك ومجّاني، والتحقّق يجري عبره بالكامل.

الرقم يأتي من سجلّات تيليجرام

زرّ مشاركة جهة الاتّصال يرسل الرقم المسجّل لدى تيليجرام نفسه، لا رقماً يكتبه المستخدم في حقل. لا مجال لإدخال رقم شخصٍ آخر.

فحصٌ واحد يمنع انتحال الأرقام

بطاقة جهة الاتّصال يمكن إعادة توجيهها من دفتر عناوين أيّ شخص، والبطاقة الذاتيّة وحدها تحمل معرّف مُرسِلها. المكتبة تقبل الرقم فقط حين يتطابق المعرّفان.

بلا اعتماديّات وبلا قاعدة بيانات

دوالّ نقيّة تعطيها المُدخلات وتعيد لك النتيجة. أنت تقرّر أين تُخزّن الرمز والحالة، فتعمل مع Express وNext.js وFastify وأيّ إطارٍ آخر.

رموز بدء موقّعة ووحيدة الاستعمال

الرمز يُخزَّن مُجزَّأً بـ sha256، صالحٌ خمس عشرة دقيقة، ويُقارَن مقارنةً ثابتة الزمن. والـ webhook يفشل مغلقاً: بلا سرٍّ مضبوط لا يُقبل شيء.

وقفٌ تقنيّ، لا منتجاً تجاريّاً

مُهداةٌ للمجتمع التقنيّ السوريّ برخصة MIT، مثل SYROTP. استعملها في مشاريعك ومشاريع عملائك بلا مقابل وبلا إذن.

الاستعمال

دوالّ نقيّة: تعطيها المُدخلات فتعيد لك النتيجة. أنت تقرّر أين تُخزّن الرمز والحالة، ولذلك تعمل مع أيّ إطار عمل دون أن تفرض عليك قاعدة بيانات.

import {
  mintToken, deepLink, isAuthenticWebhook, parseUpdate,
} from "telegram-phone-verify";

// 1. أنشئ الرمز واحفظ نسخته المجزّأة، ثم وجّه المستخدم إلى البوت
const { raw, hash } = mintToken();
await db.saveToken({ userId, hash, expiresAt: Date.now() + 15 * 60_000 });
const url = deepLink("MyBot", raw);

// 2. استقبل الحدث على الـ webhook
export async function POST(req: Request) {
  if (!isAuthenticWebhook(
        req.headers.get("x-telegram-bot-api-secret-token"), WEBHOOK_SECRET)) {
    return new Response("ok");
  }
  const event = parseUpdate(await req.json());
  // event.kind: "start" | "verified" | "rejected" | "ignored"
}
وقفٌ تقنيّ

مُهداةٌ للمجتمع التقنيّ السوريّ

هذه المكتبة وقفٌ تقنيّ دائم برخصة MIT، مثل SYROTP قبلها. لا اشتراك، ولا حدّ استعمال، ولا حاجة إلى إذن. استعملها في مشاريعك وفي مشاريع عملائك، وعدّلها كما تشاء.

بنيناها لأنّنا احتجناها: رسائل SMS الدوليّة إلى سوريا مكلفة وكثيرة الفشل، وبعض المزوّدين يرفضون التسليم أصلاً. ما دام الحلّ مكتوباً، فإبقاؤه مغلقاً لا يفيد أحداً.

الشيفرة كاملةً على GitHub

المكتبة، والاختبارات، ودليل تشغيل البوت خطوةً بخطوة.