در این جلسه روش ساخت صفحه کلید برای ربات تلگرام را آموزش می دهیم. حتما دیده اید که ربات های تلگرام کیبورهایی نشان می دهند که کاربر با لمس هر کدام دستور خاصی به ربات می فرستد. کلید ها یا دکمه های این صفحه کلید معادل فرمان های ربات هستند.   

در جلسات در برنامه api ربات، دستوراتی برای ارسال پیام نوشتیم، در این جلسه برای ربات صفحه کلیدی تعریف کرده و با دستور sendMessage به ربات خواهیم فرستاد تا نمایش دهد.

API تلگرام برای ساخت کیبورد

براساس API موجود در سایت تلگرام، دستورات ارسال داده ها مثل تصویر، صدا، متن و به صورت کلی کلیه دستورات ارسال پیام در تلگرام، امکان ارسال کیبورد شخصی سازی شده همراه با پیام را دارند.

در API تلگرام ساختمان داده ReplyKeyboardMarkup برای تعیین ساختار و شخصی کردن صفحه کلید ربات مورد استفاده قرار می گیرد، که توسط توابع ارسال پیام برای کلاینت های تلگرام ارسال می شود.

این ساختمان داده دارای بخش های زیر است:

keyboard : آرایه ی دو بعدی است که سطر و ستون های صفحه کلید و محتوای خانه های صفحه کلید را مشخص می کند.

resize_keyboard : در صورتی که مقدار این متغییر True باشد کلاینت سعی می کند که ارتفاع صفحه کلید را در بهترین حالت ممکن قرار دهد.

one_time_keyboard : در صورتی که مقدار این متغییر True باشد بعد از انتخاب یکی از کلیدها صفحه کلید پنهان می شود.

selective : در صورتی که مقدار این متغییر True باشد این صفحه کلید فقط به کاربر خاصی که قصد دارید پیام را به او بفرستید، نمایش داده می شود.

روش استفاده از API تلگرام برای صفحه کلید

در آموزش های قبلی برای ارسال پیام به ربات از واسط بات ساز استفاده کردیم. و متد sendMessage آنرا با تعدادی پارامتر صدا زدیم. برای ساخت صفحه کلید ربات، آرایه ای دو بعدی از کلیدهای ربات را پر کرده و همراه با دیگر تنظیمات صفحه کلید در قالب پارامترهای تابع sendMessage به بات ساز می فرستیم.

نمونه برنامه زیر در پاسخ به فرمان date/ صفحه کلیدی با سه کلید year ، /month/ و day/ می فرستد. تا در صفحه تلگرام صفحه کلیدی با سه کلید نمایش داده شود:

<?php
function sendMessage($datas){
$url = "https://panel.botsaz.com/api/bot/sendMessage";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
$datas["api_key"]=API_KEY;
curl_setopt($ch, CURLOPT_POSTFIELDS,
http_build_query($datas));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);
return json_decode($server_output);
}
ob_start();
define("API_KEY" , "584bbd612a4499f7d707b50e053b5664");
$content= file_get_contents("php://input");
$update = json_decode($content);
$text = strtolower($update->message->text);
$chat_id= $update->message->from->id;
if($text == '/date'){
$dates= array(        'keyboard' => array(
array('/year', '/month', '/day')            ),        );
$dates=json_encode($dates);
$text_reply= "کدام قسمت از تاریخ را می خواهید؟";
sendMessage(['text'=>$text_reply, 'chat_id'=>$chat_id, 'reply_markup'=>$dates]);
}else{
$text= "دستور نا معتبر است";
sendMessage(['text'=>$text_reply, 'chat_id'=>$chat_id]    );
}?>

این هم تصویر صفحه چت تلگرام :

ربات دارای صفحه کلید

کاربر می تواند یکی از سه کلید را لمس کند تا یکی از سه دستور فرستاده شود.

پاسخگویی به کلیدهای کیبورد ربات

در ادامه باید برنامه api ربات را توسعه دهیم تا برای هر کدام از سه دستور پاسخ مناسبی بر گرداند. می خواهیم با فرستان فرمان day شماره روزِ ، با فرستان فرمان month شماره ماه و با فرستادن فرمان year ، سال جاری را نشان دهد .

پس برنامه api ربات را بصورت زیر کامل می کنیم:

<?php
function sendMessage($datas){
$url = "https://panel.botsaz.com/api/bot/sendMessage";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url);
curl_setopt($ch, CURLOPT_POST, 1);
$datas["api_key"]=API_KEY;
curl_setopt($ch, CURLOPT_POSTFIELDS,
http_build_query($datas));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$server_output = curl_exec ($ch);
curl_close ($ch);
return json_decode($server_output);
}
ob_start();
define("API_KEY" , "584bbd612a4499f7d707b50e053b5664");
$content= file_get_contents("php://input");
$update = json_decode($content);
$text = strtolower($update->message->text);
$chat_id= $update->message->from->id;
if($text == '/date'){
$dates= array(
'keyboard' => array(                array('/year', '/month', '/day')
),
);
$dates=json_encode($dates);
$text_reply= "کدام قسمت از تاریخ را می خواهید؟";
sendMessage(['text'=>$text_reply, 'chat_id'=>$chat_id, 'reply_markup'=>$dates]);
}else if ($text=="/year"){
$text_reply= "Year:".date("Y");
sendMessage(['text'=>$text_reply, 'chat_id'=>$chat_id]);
}else if ($text=="/month"){
$text_reply= "Month:".date("m");
sendMessage(['text'=>$text_reply, 'chat_id'=>$chat_id]);
}else if ($text=="/day"){
$text_reply= "Day:".date("d");
sendMessage(['text'=>$text_reply, 'chat_id'=>$chat_id]);
}
else{
$text= "دستور نا معتبر است";
sendMessage(['text'=>$text_reply, 'chat_id'=>$chat_id]    );
}?>

دریافت برنامه api  ربات کیبورد دار برای نمایش تاریخ

در این جلسه با روش ساخت صفحه کلید برای ربات های تلگرام و خواندن دستورات کلیدها و پاسخگویی به دستورات آشنا شدید. در آینده نوع دیگری از صفحه کلید ربات که صفحه کلید درجا (inlne keyboard) هست را آموزش خواهیم داد …

نمایش قابل چاپ