چرا سکان آکادمی؟
ساخت ربات telegram - قسمت ششم - تنظیم وب هوک و ربات تاریخ

ساخت ربات telegram - قسمت ششم - تنظیم وب هوک و ربات تاریخ

- ابتدایی ترین پاراگراف این قسمت از مقاله را به مولایم حسین ابن علی علیه السلام تقدیم خواهم کرد ؛ که اسوه مقاومت و مجاهدت در مقابل فاسد ترین افکار، عقاید و رفتار بشری است در تمام تاریخ ؛ شهادت مولا حسین ابن علی علیه السلام را تسلیت می گویم.

- قسمت ششم : ساخت ربات تقویم با استفاده از وب هوک (Webhook)

برای استفاده بهتر و کارایی بیشتر بعضی سیستم ها ، شرکت های توسعه دهنده آنها سولوشن های مختلفی را عرضه میکنند که توسعه دهندگان این سیستم بتوانند در کمترین زمان بیشترین بازده را داشته باشند ؛ شرکت تلگرام هم در این راستا استثنا نیست و با ساخت وب هوک توانسته پیشرفتی زیادی به توسعه دهندگان ربات های تلگرام کند ؛ اگر بخواهیم وب هوک را به ساده ترین شکل ممکن تعریف کنیم ، می توانیم بگوییم سیستمی است که اطلاعات را به url تعیین شده ارسال و با توجه به دستورات و مجموعه کدهایی که بوسیله url بارگذاری شده اند ، خروجی دریافت می کند ، اگر بخواهیم وب هوک به یک فروشگاه مثال بزنیم ؛ می توان گفت فروشگاهی است که هر آنچه شما بخواهید را به شما می دهد اما هیچ کدام از اقلام شما را در فروشگاه ندارد بلکه با اعلام تقاضای شما بلافاصله از شرکت و کارخانه های دیگر تهیه و به شما تحویل میدهد ، در ادامه بیشتر با وب هوک آشنا می شوید.

برای تنظیم وب هوک ابتدا کد ربات تاریخ را قرار میدهیم و سپس به توضیح کد و نحوه تنظیم وب هوک می پردازیم :

<?php
define("_TOKEN", "55298569:AAE6AnvbsjrokndfhoelsmfnvJsKldABDTY");

$json = file_get_contents('php://input');
$result = json_decode($json);

$chatId = $result->message->chat->id;
$message = $result->message->text;

switch ($message) {
  case "/start":
    $text = "Hi !\n";
    $text .= "Welcome to calendar bot.\n";
    $this->sendMessage($chatId, $text);
    break;
  case "/date":
    $text = "[01] Time : " . date('H:i:s');
    $text .= "\n[02] Date : " . date('Y-m-d');
    $this->sendMessage($chatId, $text);
    break;
  default:
    $text = "Unknown command !";
    $this->sendMessage($chatId, $text);
    break;
}

function sendMessage($chatId, $message) {
  $message = urlencode($message);
  $url = "https://api.telegram.org/bot" . _TOKEN;
  $url .= "/sendMessage?chat_id=" . $chatId;
  $url .= "&text=" . $message;
  file_get_contents($url);
}

در ابتدایی ترین سطر بعد از تگ php ، یک ثابت تعریف شده ؛ ثابت ها در زبان php به صورت :

define("_NAME","value");

تعریف می شود و توجه کنید ثابت ها در زبان php نیازی به داشتن $ درابتدای نام جهت تعریف و فراخوانی ندارند و معمولا تمام حروف بزرگ و در اول نام آنها کاراکتر "_" قرار می گیرد. در سطر بعدی همانطور که در قسمت های قبل گفته شد (قسمت چهارم) برای دریافت مقدار یک url از تابع file_get_contents استفاده می کنیم ، اما توجه داشته باشید درآموزش های قبل ، مقدار پارامتر این تابع url مد نظر بود اما اینجا فقط و فقط باید بنویسید : 'php://input'

این پارامتر بدین معناست که وب هوک به این url رجوع کرده و اطلاعات را به ما می دهد و دیگر نیازی به داشتن url در پارامتر ورودی این تابع نیست. بقیه توضیحات این کد به موضوع آموزش زبان php بر میگردد که موضوع بحث ما نمی باشد.

- تنظیم وب هوک (Webhook) :

برای تنظیم وب هوک تلگرام ابتدا شما باید دارای هاست و دامین (فقط Https قابل قبول است) باشید ؛ می توانید از یک دامین استفاده کرده و با ایجاد ساب دامین چندین وب هوک ربات تنظیم کنید ، توجه داشته باشید بعد از تنظیم وب هوک دیگر قادر نخواهید بود از طریق مرورگر یا دیگر برنامه ها از پیام های دریافت شده ربات آگاهی پیدا کنید ، در API های ربات های تلگرام 3 متد برای وب هوک ذکر شده که در زیر به توضیح و نحوه کار متد ها می پردازیم :

1 - setWebhook :

با استفاده از این متد می توانید وب هوک را برای ربات خود تنظیم کنید ، نحوه استفاده از این متد به طریق زیر است :

https://api.telegram.org/bot<-BotToken->/setwebhook?url=https://<-YourDomain->

2 - deleteWebhook :

با استفاده از این متد می توانید وب هوک ایجاد شده را حذف نمایید ؛ لازم به ذکر است اگر وب هوک تنظیمی شما نیاز به اصلاح url یا تغییر آن را دارد نیازی نیست آن را حذف کنید و سپس با url جدید آنرا تنظیم کنید ، فقط کافی است به جای حذف کردن از متد setWebhook دوباره استفاده کنید ، نحوه استفاده از این متد به طریق زیر است :

https://api.telegram.org/bot<-BotToken->/deleteWebhook

3 - getWebhookInfo :

با استفاده از این متد می توانید اطلاعاتی در مورد جزییات وب هوک تنظیم شده برای روب ربات بدست آورید ؛ نحوه استفاده از این متد به طریق زیر است :

https://api.telegram.org/bot<-BotToken->/getWebhookInfo

خروجی url بالا در صورت موفق آمیز بودن ، مانند زیر است :

{
  "ok": true,
  "result": {
    "url": "https://google.com/GmailBot/",
    "has_custom_certificate": false,
    "pending_update_count": 0,
    "max_connections": 40
  }
}

لازم به ذکر است اگر وب هوک تنظیمی شما قابلیت دریافت آپدیت های تلگرام را نداشته باشد مقدار pending_update_count به تعداد پیام هایی که وب هوک شما توانایی پاسخ گویی به آن ها را نداشته ، تغییر می کند.

- این ربات هم اکنون بر روی ادرس JalaliDate_bot@ قابل دسترسی می باشد ، امیدوارم این بخش از آموزش برای شما مفید واقع شده باشد ، در قسمت بعد نحوه ایجاد دکمه در ربات ها را آموزش خواهیم داد.

پایان قسمت ششم.

موفق باشید.