مقدمه: چرا از Webhook استفاده کنیم؟

ساخت ربات تلگرام یکی از جذاب‌ترین پروژه‌ها برای توسعه‌دهندگان وب است. اگرچه روش Polling (استعلام مداوم) ساده است، اما برای پروژه‌های واقعی و پرترافیک، استفاده از Webhook استانداردترین و بهینه‌ترین روش است. در این روش، تلگرام به محض دریافت پیام جدید، آن را به آدرس سرور شما ارسال می‌کند و نیازی به استعلام مکرر نیست. این مقاله به شما آموزش می‌دهد چگونه با استفاده از زبان PHP و یک هاست معمولی، یک ربات تلگرام پایدار و سریع راه‌اندازی کنید.

مرحله اول: ایجاد ربات و دریافت توکن

قبل از هر چیز، باید ربات خود را در تلگرام بسازید. برای این کار:

  • به ربات @BotFather در تلگرام پیام دهید.
  • دستور /newbot را ارسال کنید.
  • یک نام برای ربات انتخاب کنید (مثلاً MySuperBot).
  • یک نام کاربری یکتا برای ربات تعیین کنید (مثلاً @MySuperBot_Bot).

پس از ایجاد، BotFather یک Token به شما می‌دهد. این کلید، شناسه امنیتی ربات شماست. آن را در جای امنی ذخیره کنید و هرگز در کدهای عمومی منتشر نکنید.

مرحله دوم: آماده‌سازی فایل PHP

برای دریافت اطلاعات از تلگرام، باید یک فایل PHP روی هاست خود داشته باشید. بیایید یک فایل به نام bot.php ایجاد کنیم. ساختار کلی کد به شرح زیر است:

۱. دریافت ورودی‌ها

تلگرام اطلاعات را به صورت JSON در بدنه درخواست (Body) ارسال می‌کند. ما باید این داده‌ها را بخوانیم و به آرایه تبدیل کنیم:


$json = file_get_contents('php://input');
$update = json_decode($json, true);

۲. استخراج اطلاعات پیام

حالا باید بررسی کنیم که آیا این درخواست شامل پیام است یا خیر. اگر شامل پیام باشد، متن پیام و شناسه چت را استخراج می‌کنیم:


if (isset($update['message'])) {
    $chat_id = $update['message']['chat']['id'];
    $text = $update['message']['text'];
    
    // منطق ربات اینجا نوشته می‌شود
}

۳. ارسال پاسخ

برای ارسال پاسخ به کاربر، باید به API تلگرام درخواست HTTP بفرستیم. تابع زیر این کار را انجام می‌دهد:


function send_message($chat_id, $text) {
    $token = 'TOKEN_SHOMA_INJA'; // توکن ربات خود را اینجا قرار دهید
    $url = "https://api.telegram.org/bot{$token}/sendMessage";
    
    $data = [
        'chat_id' => $chat_id,
        'text' => $text
    ];
    
    $options = [
        'http' => [
            'header'  => "Content-type: application/x-www-form-urlencoded\r\n",
            'method'  => 'POST',
            'content' => http_build_query($data)
        ]
    ];
    
    $context  = stream_context_create($options);
    $result = file_get_contents($url, false, $context);
    
    if ($result === FALSE) {
        // مدیریت خطا
    }
    return $result;
}

مرحله سوم: تنظیم Webhook روی هاست

این مهم‌ترین بخش کار است. شما باید به تلگرام بگویید که پیام‌ها را به آدرس زیر بفرستد:

https://yourdomain.com/bot.php

برای این کار، یک بار دیگر باید از طریق API یک درخواست POST به آدرس زیر ارسال کنید:

https://api.telegram.org/bot[TOKEN]/setWebhook?url=https://yourdomain.com/bot.php

می‌توانید این کار را مستقیماً از مرورگر انجام دهید (اگر SSL فعال باشد) یا با کد PHP بنویسید. پس از ارسال موفق، تلگرام پاسخ {"ok":true,"result":true} را برمی‌گرداند.

نکات حیاتی درباره SSL و دامنه

  • HTTPS اجباری است: تلگرام فقط Webhook‌هایی را می‌پذیرد که روی پروتکل امن HTTPS باشند. اگر هاست شما گواهی SSL ندارد، ربات کار نخواهد کرد.
  • دامنه معتبر: استفاده از دامنه‌های رایگان یا Subdomainهای نامعتبر ممکن است باعث رد درخواست شود.

مرحله چهارم: آپلود فایل‌ها در هاست

اکنون نوبت به آپلود فایل‌ها می‌رسد. مراحل زیر را دنبال کنید:

  1. فایل bot.php خود را با کدهای کامل ذخیره کنید.
  2. وارد کنترل پنل هاست خود (مانند cPanel یا DirectAdmin) شوید.
  3. به بخش File Manager بروید.
  4. به پوشه public_html یا ریشه دامنه خود بروید.
  5. فایل bot.php را در این پوشه آپلود کنید.
  6. مطمئن شوید که دسترسی فایل (Permission) روی 644 تنظیم شده باشد.

تست و عیب‌یابی

پس از آپلود، به آدرس https://yourdomain.com/bot.php در مرورگر مراجعه کنید. اگر صفحه خالی باز شد یا ارور 403/404 نداد، یعنی فایل درست است. حالا به ربات خود در تلگرام پیام دهید. اگر پاسخ دریافت کردید، یعنی Webhook به درستی تنظیم شده است.

عیب‌یابی رایج:

  • ارور 404: فایل در مسیر اشتباه آپلود شده است.
  • ارور 500: خطای سینتکس در PHP یا محدودیت‌های سرور.
  • عدم دریافت پیام: بررسی کنید که آیا Webhook واقعاً ست شده است یا خیر. با دستور getWebhookInfo در BotFather می‌توانید وضعیت را چک کنید.

جمع‌بندی

ساخت ربات تلگرام با Webhook و PHP، روشی حرفه‌ای برای میزبانی ربات‌های سبک و سریع روی هاست‌های اشتراکی است. با رعایت نکات امنیتی، استفاده از HTTPS و مدیریت صحیح خطاها، می‌توانید رباتی بسازید که حتی با ترافیک بالا نیز عملکرد خوبی داشته باشد. این روش جایگزین مناسبی برای استفاده از سرورهای مجازی (VPS) گران‌قیمت برای پروژه‌های کوچک و متوسط است.