آموزش ساخت کیبورد اختصاصی ربات تلگرام + پاسخ هوشمند

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

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

$keyboard = array(
		'keyboard' => array(
				array("سرور مجازی", "سرور اختصاصی"),
				array("درباره ما", "تماس با ما","تبلیغات"),
		),'one_time_keyboard'=>true,'resize_keyboard'=>true);
$keyboard = json_encode($keyboard);

با استفاده از تابع keyboard در کد بالا کیبورد اختصاصی ربات رو میسازیم . و در اخر json_encode اطلاعات رو به صورت json ارسال میکنیم .
در پایین کد کامل ربات + کیبورد اختصاصی رو میزارم براتون :

<?php

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


function objectToArray( $object )
{
    if( !is_object( $object ) && !is_array( $object ) )
    {
        return $object;
    }
    if( is_object( $object ) )
    {
        $object = get_object_vars( $object );
    }
    return array_map( 'objectToArray', $object );
}


$result = objectToArray($string);
$user_id = $result['message']['from']['id'];
$text = $result['message']['text'];
$token = 'توکن ربات';


$keyboard = array(
		'keyboard' => array(
				array("سرور مجازی", "سرور اختصاصی"),
				array("درباره ما", "تماس با ما","تبلیغات"),
		),'one_time_keyboard'=>true,'resize_keyboard'=>true);
$keyboard = json_encode($keyboard);


switch ($text) {
	case 'سرور مجازی':
		$text_reply = "http://my.tooba.co/cart.php?gid=3";
		break;
	case 'سرور اختصاصی':
		$text_reply = "http://my.tooba.co/cart.php?gid=4";
		break;	
	default:
		$text_reply = json_encode($result);
		break;
}



$url = 'https://api.telegram.org/bot'.$token .'/sendMessage?text='.$text_reply.'&chat_id='.$user_id.'&reply_markup='.$keyboard;
$res = file_get_contents($url);

ربات مورد نظر آماده میباشد : https://t.me/tooba_testBot
اگر سوالی بود ،کامنت ارسال کنید.
موفق باشید

 

  1. meysam - 24 نوامبر 2017

    سلام خسته نباشید
    اگه بخواییم از چند کیبورد در داخل هم استفاده کنیم چیکار باید کنیم مثلا وقتی سرور اسختصاصی رو زد یه کیبورد جدید بیاد و گزینه های جدید رو بده و وقتی یکی رو انتخواب کرد برای توضیحاتی بیادش
    ممنون میشم اگه مثالی دارین یا نمونه ای برام ارسال کنید . چون هیشکی بهم جواب نمیده یا وقتیم جواب میدن اونقده میپیچونن که ادم سر در نمیاره
    ممنون از اموزش خوبتون .

  2. ali - 25 نوامبر 2017

    سلام
    هنگامی که منوی سرور اختصاصی رو کلیک میکنه، بعد از دریافت متن “سرور اختصاصی” میتونید منو های کیبورد رو به روز کنید و مجدد ارسال کنید .

    case 'سرور اختصاصی':
    $text_reply = "http://my.tooba.co/cart.php?gid=4";
    $keyboard = array(
    'keyboard' => array(
    array("سرور اختصاصی آلمان", "سرور اختصاصی فرانسه")
    ),'one_time_keyboard'=>true,'resize_keyboard'=>true);
    $keyboard = json_encode($keyboard);
    break;

    در مثال بالا میبنید که در حلقه “سرور اختصاصی” هم متن جدیدی برای کاربر ارسال میکنیم و هم اینکه کیبورد اختصاصی رو نیز ارسال میکنم .

  3. meysam - 25 نوامبر 2017

    سلام ببخشید این کد ربات من هستش
    از تله تر هم برای اینکه ssl ندارم استفاده میکنم
    ولی هر کاری میکنم اونی که شما گفتین نمیشه جواب نمیده ولی بدون اون میشه
    ممنون میشم یه نگاهی بندازین
    میخوایم یه کیبورد دیگه اضافه کنم بهش موقع زدن یکی از دگمه ها

    message;
    $text = $message->text;
    $chat = $message->chat;
    $user_id = $chat->id;
    $first_name = $message->from->first_name;

    $action = ‘typing’;
    sendChatAction ($user_id,$action,$token);

    $keyboard = array(
    //array( “Bitfinex Btc \xF0\x9F\x98\x8B”,”Bitfinex Eth \xF0\x9F\x98\x8B”),
    //array( “Percoin \xF0\x9F\x98\x8B”),
    array( “Bitfinex \xF0\x9F\x98\x8B”),
    array( “Bitfinex Btc \xF0\x9F\x98\x8B”),
    array( “Bitfinex Eth \xF0\x9F\x98\x8B”),
    array( “Bitfinex OMG \xF0\x9F\x98\x8B”),
    array( “Bitfinex DAT \xF0\x9F\x98\x8B”),
    );

    $url = “https://api.bitfinex.com/v1/ticker/ethusd”;
    $json = json_decode(file_get_contents($url), true);
    $price_eth = $json[“last_price”];

    $url = “https://api.bitfinex.com/v1/ticker/btcusd”;
    $json = json_decode(file_get_contents($url), true);
    $price_btc = $json[“last_price”];

    $url = “https://api.bitfinex.com/v1/ticker/omgusd”;
    $json = json_decode(file_get_contents($url), true);
    $price_omg = $json[“last_price”];

    $url = “https://api.bitfinex.com/v1/ticker/datusd”;
    $json = json_decode(file_get_contents($url), true);
    $price_dat = $json[“last_price”];

    // http://apps.timwhitlock.info/emoji/tables/unicode

    if ($text == “/start”) {
    $message = urlencode(“welcome”.$first_name.” to bot CoinAlarm \n For Bitcoin, Ethereum, Percoin”);
    } else if ($text == “Bitfinex Eth \xF0\x9F\x98\x8B”) {
    $message = urlencode($price_eth.” USD/Eth”.”\n\n”.”@coin_alarmbot \xF0\x9F\x98\x8B”);
    } else if ($text == “Bitfinex Btc \xF0\x9F\x98\x8B”) {
    $message = urlencode($price_btc.” “.” USD/BTC”.”\n\n”.”@coin_alarmbot \xF0\x9F\x98\x8B”);
    } else if ($text == “Bitfinex OMG \xF0\x9F\x98\x8B”) {
    $message = urlencode($price_omg.” “.” USD/OMG”.”\n\n”.”@coin_alarmbot \xF0\x9F\x98\x8B”);
    } else if ($text == “Bitfinex DAT \xF0\x9F\x98\x8B”) {
    $message = urlencode($price_dat.” “.” USD/DAT”.”\n\n”.”@coin_alarmbot \xF0\x9F\x98\x8B”);
    } else if ($text == “1”) {
    $message = (“5684”);
    } else {
    $message = urlencode(“نمیدونم”.”\n\n”.”@coin_alarmbot \xF0\x9F\x98\x8B”);
    }

    //sendChatAction
    function sendChatAction ($user_id,$chataction,$token) {
    $url = ‘https://api.telegram.org/bot’.$token.’/sendChatAction?chat_id=’.$user_id.’&action=’.$chataction;
    $update = file_get_contents($url);
    }

    coinalarm_keyboardmessage ($user_id,$message,$token,$keyboard);
    // //Send Text Message With Inline Keyboard
    function coinalarm_keyboardmessage ($user_id,$message,$token,$keyboard) {
    $url = “https://api.telegram.org/bot”.$token.”/sendMessage”;
    $replyMarkup = array(
    “keyboard” => $keyboard,
    “resize_keyboard” => true
    );
    $encodedMarkup = json_encode($replyMarkup);
    $url = “https://api.telegram.org/bot”.$token.”/sendMessage?chat_id=”.$user_id.”&text=”.$message.”&reply_markup=”.$encodedMarkup;
    $update = file_get_contents($url);
    }

    ?>

  4. meysam - 25 نوامبر 2017


    $token = "383220550:AAFcaMZ4P5qjiWHTbHTQE2_d1_HMHrtLTbs";
    // read incoming info and grab the chatID
    $json = file_get_contents("php://input");
    $telegram = urldecode ($json);
    $telegram = str_replace ("jason=","",$telegram); //Just for Teletter.net
    $results = json_decode($telegram);

    $message = $results->message;
    $text = $message->text;
    $chat = $message->chat;
    $user_id = $chat->id;
    $first_name = $message->from->first_name;

    $action = 'typing';
    sendChatAction ($user_id,$action,$token);

    $keyboard = array(
    //array( "Bitfinex Btc \xF0\x9F\x98\x8B","Bitfinex Eth \xF0\x9F\x98\x8B"),
    //array( "Percoin \xF0\x9F\x98\x8B"),
    array( "Bitfinex \xF0\x9F\x98\x8B"),
    array( "Bitfinex Btc \xF0\x9F\x98\x8B"),
    array( "Bitfinex Eth \xF0\x9F\x98\x8B"),
    array( "Bitfinex OMG \xF0\x9F\x98\x8B"),
    array( "Bitfinex DAT \xF0\x9F\x98\x8B"),
    );

    $url = "https://api.bitfinex.com/v1/ticker/ethusd";
    $json = json_decode(file_get_contents($url), true);
    $price_eth = $json["last_price"];

    $url = "https://api.bitfinex.com/v1/ticker/btcusd";
    $json = json_decode(file_get_contents($url), true);
    $price_btc = $json["last_price"];

    $url = "https://api.bitfinex.com/v1/ticker/omgusd";
    $json = json_decode(file_get_contents($url), true);
    $price_omg = $json["last_price"];

    $url = "https://api.bitfinex.com/v1/ticker/datusd";
    $json = json_decode(file_get_contents($url), true);
    $price_dat = $json["last_price"];

    // http://apps.timwhitlock.info/emoji/tables/unicode

    if ($text == "/start") {
    $message = urlencode("welcome".$first_name." to bot CoinAlarm \n For Bitcoin, Ethereum, Percoin");
    } else if ($text == "Bitfinex Eth \xF0\x9F\x98\x8B") {
    $message = urlencode($price_eth." USD/Eth"."\n\n"."@coin_alarmbot \xF0\x9F\x98\x8B");
    } else if ($text == "Bitfinex Btc \xF0\x9F\x98\x8B") {
    $message = urlencode($price_btc." "." USD/BTC"."\n\n"."@coin_alarmbot \xF0\x9F\x98\x8B");
    } else if ($text == "Bitfinex OMG \xF0\x9F\x98\x8B") {
    $message = urlencode($price_omg." "." USD/OMG"."\n\n"."@coin_alarmbot \xF0\x9F\x98\x8B");
    } else if ($text == "Bitfinex DAT \xF0\x9F\x98\x8B") {
    $message = urlencode($price_dat." "." USD/DAT"."\n\n"."@coin_alarmbot \xF0\x9F\x98\x8B");
    } else if ($text == "1") {
    $message = ("5684");
    } else {
    $message = urlencode("نمیدونم"."\n\n"."@coin_alarmbot \xF0\x9F\x98\x8B");
    }

    //sendChatAction
    function sendChatAction ($user_id,$chataction,$token) {
    $url = 'https://api.telegram.org/bot'.$token.'/sendChatAction?chat_id='.$user_id.'&action='.$chataction;
    $update = file_get_contents($url);
    }

    coinalarm_keyboardmessage ($user_id,$message,$token,$keyboard);
    // //Send Text Message With Inline Keyboard
    function coinalarm_keyboardmessage ($user_id,$message,$token,$keyboard) {
    $url = "https://api.telegram.org/bot".$token."/sendMessage";
    $replyMarkup = array(
    "keyboard" => $keyboard,
    "resize_keyboard" => true
    );
    $encodedMarkup = json_encode($replyMarkup);
    $url = "https://api.telegram.org/bot".$token."/sendMessage?chat_id=".$user_id."&text=".$message."&reply_markup=".$encodedMarkup;
    $update = file_get_contents($url);
    }

  5. ali - 25 نوامبر 2017

    سلام
    خیلی کدهاتون نامفهومه داخل یه فایل php ارسال کنید (جایی آپلود کنید و لینکش رو ارسال کنید).

  6. meysam - 25 نوامبر 2017

    اپلود کردم اینجا ممنون میشم نگاه کنید و تشکر از شما که عالی هستین و کمک میکنید واقعا تشکر
    http://otom.ir/t.txt

  7. احمد - 22 ژانویه 2018

    سلام.خسته نباشین. من کیبورد ربات رو آپدیت کردم. برای اینکه کاربرا بتونن دکمه های جدید رو ببینن باید یه همه کاربرا پیام بدم که ربات رو ری استارت کنن؟ راه بهتری وجود داره؟

  8. جواد - 30 ژانویه 2018

    بسیار عالی و قابل فهم. استفاده بردم.
    سپاس از زحماتتون

  9. احمد - 31 ژانویه 2018

    مثلا اگه بخوایم
    ۱- یه نوشته BOld بشه
    ۲-یا یه متنی که ارسال میکنه به صورت hyperlink در بیاد ؟
    ۳- اگه بخوایم از طریق آیدی فایل یا ویدئو ، عکس و استیکر یا هر چی اونو بفهمونیم که بفرسته یا از طریق یه Url عکس بفرسته نه اینکه ما بهش مسیر عکس تو هاست بدیم ! از طریق url اون عکس با کپشن نشون بده اینارو هم بگین ممنون

  10. احمد - 31 ژانویه 2018

    این قسمت کدتون یه ایراد داره موقع استارت ربات به این صورت نمایش میده :
    http://s8.picofile.com/file/8318142292/eror.PNG

  11. aliasghar - 24 دسامبر 2018

    کد من چه مشکلی داری؟
    message;
    $from_id = $message->from->id;
    $chat_id = $message->chat->id;
    $textmsg = $message->text;
    $type = $update->message->chat->type;
    $isjoin = bot(‘getChatMember’,[‘chat_id’=>”@$chuser”,’user_id’=>$from_id]);
    $isjoin = $isjoin->result->status;
    if($type == “private”)
    {if($isjoin != “left”)

    //دستورات اصلی ربات
    { if($textmsg == “/start”)
    {
    bot(‘sendMessage’,[‘chat_id’=>$chat_id,’text’=>”?شما با ایدی عددی $from_id در کانال ما عضو شدید برای ادامه گزینه /adame را بزنید ?”]);}}
    else{
    bot (‘sendMessage’,[‘chat_id’=>$chat_id,’text’=>”?شما در کانال @$chuser عضو نیستنید.لطفا پس از عضویت به ربات برگردید و دستور /start را ارسال کنید?”]);}}
    //ابتدای پروژه بعدی
    $string = json_decode(file_get_contents(‘php://input’));
    function objectToArray( $object )
    {
    if( !is_object( $object ) && !is_array( $object ) )
    {
    return $object;
    }
    if( is_object( $object ) )
    {
    $object = get_object_vars( $object );
    }
    return array_map( ‘objectToArray’, $object );
    }
    $result = objectToArray($string);
    $user_id = $result[‘message’][‘from’][‘id’];
    $text = $result[‘message’][‘text’];
    $token = “763988752:AAF7S3c7DI_16AD8MRd0linfnqeE960qPPc”;
    $keyboard = array(
    ‘keyboard’ => array(
    array(“درباره موسسه حسابداری پژوهان”),
    array(“ثبت نام در کارآموزی موسسه”,”ارتباط با ما”),
    array(“ریاست موسسه پژوهان”, “معرفی بکار موسسه حسابداری پژوهان”,”کارآموزی موسسه پژوهان”),
    ),’one_time_keyboard’=>true,’resize_keyboard’=>true);
    $keyboard = json_encode($keyboard);
    switch ($text) {
    case ‘درباره موسسه حسابداری پژوهان’:
    $text_reply = “موسسه حسابداری پژوهان موسسه ای رسمی با سابقه ۲۵ سال حسابداری اماده اراِه انواع خدمات حسابداری نوین در بحث آموزش کار و انجام امور تمامی شرکت های تولیدی خدماتی بازرگانی و … می باشد”;
    break;
    case ‘معرفی بکار موسسه حسابداری پژوهان’:
    $text_reply = “معرفی بکار این موسسه پس از صلاح دید ریس موسسه به کاریابی های معتبر در سطح آبیک (کاریابی شیوه) می باشد “;
    break;
    case ‘ریاست موسسه پژوهان’:
    $text_reply = ‘ریاست موسسه جناب اقای محمد رضا ربانی با رزومه کاری ۲۵ سال سابقه کار در تمامی حوضه های حسابداری و مدیریتی ‘;
    break;
    case ‘ثبت نام در کارآموزی موسسه’:
    $text_reply = “همه روزه کارآموزان و افراد جویای کار از ساعت ۸ الی ۱۲ میتوانند با دفتر حسابداری پژوهان تماس حاصل بفرمایند و یا حضورا در مکانی که در همین ربات بیان شده است بفرمایند”;
    break;
    case ‘/adame’:
    $text_reply = “از گزینه های زیر انتخواب کنید”;
    break;
    case ‘کارآموزی موسسه پژوهان’:
    $text_reply = “کارآموزی در سه سطح :
    ۱-مقدماتی
    ۲-پیشرفته
    ۳-عالی
    برگذار میگردد و تماما زیر نظر اقای محمد رضا ربانی و طبق نظر و تجارب ایشان دوره برگذار میگردد”;
    break;
    case ‘ارتباط با ما’:
    $text_reply = “t.me/Pajohan2020”;
    break;
    break;
    $text_reply = json_encode($result);
    break;}
    $ur3 = ‘https://api.telegram.org/bot’.$token .’/sendMessage?text=’.$text_reply.’&chat_id=’.$user_id.’&reply_markup=’.$keyboard;
    $res = file_get_contents($ur3);
    ?>

  12. امیرحسین - 9 ژانویه 2019

    سلام. چه جوری میشه برای یه دکمه در ربات، لینک اختصاصی درست کرد؟!


همینک دیدگاه خود را برای ما بنویسید!