چگونه برای ربات تلگرام کلید خارجی ایجاد کنیم؟

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

function createButton($keys, $one_time_keyboard = false, $resize_keyboard = true, $selective = true)
{


    $keyBoard = array();
    $keyBoardRow = array();
    $text = '';

    foreach ($keys as $key => $value) {

        // we need new row keyboard
        if ($value === '#newRow') {

            array_push($keyBoard, $keyBoardRow);
            $keyBoardRow = array();

        } else {

            // is that share phone button?
            if ($key === 'request_contact' && $value === true) {

                array_push($keyBoardRow, array('text' => $text, 'request_contact' => $value));

                //is that share location button?
            } elseif ($key === 'request_location' && $value === true) {

                array_push($keyBoardRow, array('text' => $text, 'request_location' => $value));

            } else {
                // is that the text of share phone number?
                if ($key === 'textShareNumber') {

                    $text = $value;
                    //is that the text of share location button?
                } elseif ($key === 'textShareLocation') {

                    $text = $value;

                } else {

                    // push key's in row
                    array_push($keyBoardRow, $value);

                }
            }
        }
    }
    array_push($keyBoard, $keyBoardRow);

    $replyMarkup = array(
        'keyboard' => $keyBoard,
        'one_time_keyboard' => $one_time_keyboard,
        'resize_keyboard' => $resize_keyboard,
        'selective' => $selective
    );

    return json_encode($replyMarkup, true);

}

این فانکشن 4 ورودی دریافت می‌کند،

keys

یک آرایه است که نام دکمه‌های شما در آن قرار دارد، کاربرد lموارد دیگر را می‌توانید در قسمت مستندات تلگرام مطالعه کنید.

اما چگونه از این فانکشن استفاده کنیم!؟ برای مثال من صفحه کلیدی با 3 سطر ایجاد خواهم کرد که در هر سطر 3 کلید وجود خواهد داشت.

createButton(
 array(
 'How can i use ?',
 'How can i sendMessage ?',
 'How can i create Keyboard?',
 '#newRow',
 'How can i create inlineKeyboard?',
 'How can i Send File ?',
 'How can i get File ?',
 '#newRow',
 'show inline keyboard.',
 'how can i get chat id etc...',
 'about us'
 ))

همان طور که می‌بینید من فقط اولین پارامتر یعنی

keys

را وارد کردم که آرایه‌ای شامل نام کلیدهای من است، برای ایجاد سطر جدید کافی است از کلمه

#newRow

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

<?php
ini_set('error_reporting', 'E_ALL');

$botToken = "your token id";
$webSite = "https://api.telegram.org/bot" . $botToken;

$update = file_get_contents("php://input");
$update = json_decode($update, TRUE);

$callback_query = $update['callback_query'];
$data = $callback_query['data'];
$chatIdIn = $callback_query['message']['chat']['id'];

//Get Chat Id And Message Content
$chatId = $update["message"]["chat"]["id"];
$message = $update["message"]["text"];


function createButton($keys, $one_time_keyboard = false, $resize_keyboard = true, $selective = true)
{


    $keyBoard = array();
    $keyBoardRow = array();
    $text = '';

    foreach ($keys as $key => $value) {

        // we need new row keyboard
        if ($value === '#newRow') {

            array_push($keyBoard, $keyBoardRow);
            $keyBoardRow = array();

        } else {

            // is that share phone button?
            if ($key === 'request_contact' && $value === true) {

                array_push($keyBoardRow, array('text' => $text, 'request_contact' => $value));

                //is that share location button?
            } elseif ($key === 'request_location' && $value === true) {

                array_push($keyBoardRow, array('text' => $text, 'request_location' => $value));

            } else {
                // is that the text of share phone number?
                if ($key === 'textShareNumber') {

                    $text = $value;
                    //is that the text of share location button?
                } elseif ($key === 'textShareLocation') {

                    $text = $value;

                } else {

                    // push key's in row
                    array_push($keyBoardRow, $value);

                }
            }
        }
    }
    array_push($keyBoard, $keyBoardRow);

    $replyMarkup = array(
        'keyboard' => $keyBoard,
        'one_time_keyboard' => $one_time_keyboard,
        'resize_keyboard' => $resize_keyboard,
        'selective' => $selective
    );

    return json_encode($replyMarkup, true);

}

$myButtons = createButton(
    array(
        'How can i use ?',
        'How can i sendMessage ?',
        'How can i create Keyboard?',
        '#newRow',
        'How can i create inlineKeyboard?',
        'How can i Send File ?',
        'How can i get File ?',
        '#newRow',
        'show inline keyboard.',
        'how can i get chat id etc...',
        'about us'
    ));


function sendMessage($chatId, $message, $r)
{
    $url = $GLOBALS['webSite'] . "/sendMessage?chat_id=" . $chatId . "&text=" . urlencode($message) . "&reply_markup=" . $r;
    file_get_contents($url);
}

switch ($message) {

    case '/start':
        sendMessage($chatId, 'خوش آمدید', $myButtons);
        break;

    case 'How can i use ?':

        sendMessage($chatId, 'my new key board', $myButtons);

        break;

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

۴ دیدگاه دربارهٔ «چگونه برای ربات تلگرام کلید خارجی ایجاد کنیم؟»

  1. عالی بود فقط یه سوال؟
    من دارم یه ربات تلگرام می نویسم که این ربات یه سری سوال از کاربر می گیره و اونو تو بانک sql ذخیره میکنه الان تو قسمت ارسال سوال برای کاربر تلگرامی به این مشکل برخورد کردم که وقتی اولین سوال را برای کاربر میفرستم چیکار کنم تا کاربر که به این سوال جواب داد سوال بعدی براش ارسال بشه واسه من سوالات بلافاصله پشت سر هم اسال میشه

    1. سلام حسن عزیز
      اگر می‌خواهید به هروقت به سوال اول پاسخ داده شد به سوال دوم بره و به همین ترتیب ادامه پیدا کنه، می‌تونید شماره سوال و اینکه پاسخ داده شده یا نه دنبال کنید
      برای مثال می‌تونید دو فیلد در دیتابیس ایجاد کنید یکی برای اینکه بدونید الان کاربر باید به کدام سوال جواب بده و دیگری برای اینکه بدونید جواب داده یا نه
      البته می‌تونید دو جدول داشته باشید برای مثال جدول کاربران و جدول سوالات، در جدول سوالات ID کاربر شماره سوال ( مثلا ۱ به معنای سوال اول) و فیلد دیگری برای اینکه آیا سوال پاسخ داده شده یا نه ( ۰ و ۱) داشته باشید.
      در کد هم اگر کاربر برای اولین بار با ربات شما ارتباط برقرار کرد می تونید شماره سوال ۱ و پاسخ ۰ قرار دید به این معنا که کاربر سوال اول پاسخ نداده، و سپس چک کنید فیلد مربوط به سوال چه شماره ای داره مثلا شماره ۲ و فیلد پاسخ در چه وضعیتیه مثلا ۰ پس کاربر به سوال دوم پاسخ نداده، حالا اگر کاربر بر روی کلید سوال کلیک کرد می‌تونید این دوفیل چک کنید چه مقدار هایی دارند اگر ۲ و ۰ بود پس به سوال دوم پاسخ نداده و سوال دوم دوباره برای کاربر ارسال می کنید

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

  2. سلام ممنون از مطالب بسیار مفیدتون فقط یه مسئله ای هست من بااستفاده از اموزش ساخت ربات یک ربات ساختم حالا میخوام کیلید خارجی بسازم مطالبتون رو خوندم برای منی که تازه کار هستم سوال پیش اومد که کجا باید برنامه نویسیش رو انجام بدم؟

    1. با سلام. خوشحالیم که مطالب مفید واقع شده است. شما باید در هاستتون درون فایلی که ساخته اید برنامه نویسش رو انجام دهید. اگر متوجه نشدید به صورت کاملتر سوالتونو توضیح بدین تا بتونیم بهتر کمکتون کنیم.
      موفق باشید

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

این سایت از اکیسمت برای کاهش هرزنامه استفاده می کند. بیاموزید که چگونه اطلاعات دیدگاه های شما پردازش می‌شوند.