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

ساخت ربات telegram - قسمت هفتم - ساخت کیبورد ربات

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

- ابتدا مقداری از کد ربات که مربوط به کیبورد است را مینویسم و سپس به توضیح آن می پردازم :

} elseif ($messageText == "/button") {
        $url = "https://api.telegram.org/bot" . _TOKEN . "/sendMessage";

        $keyboard = array(
          "keyboard" =>
            array(
              array(
                array(
                  "text" => "One"
                ),
                array(
                  "text" => "Two"
                ),
                array(
                  "text" => "Three"
                ),
                array(
                  "text" => "Four"
                )
              ),
              array(
                array(
                  "text" => "Five"
                ),
                array(
                  "text" => "Six"
                ),
                array(
                  "text" => "Seven"
                )
              ),
              array(
                array(
                  "text" => "Eight"
                ),
                array(
                  "text" => "Nine"
                )
              ),
              array(
                array(
                  "text" => "Ten"
                )
              )
            ),

          "one_time_keyboard" => true,
          "resize_keyboard" => true
        );

        $postFields = array(
          'chat_id' => $chatId,
          'text' => "This is test of button !",
          'reply_markup' => json_encode($keyboard)
        );

        if (!$curld = curl_init()) {
          exit;
        }

        curl_setopt($curld, CURLOPT_POSTFIELDS, $postFields);
        curl_setopt($curld, CURLOPT_URL, $url);

        curl_exec($curld);
        curl_close($curld);

- سطر ابتدایی پس از شرط مربوط به دامنه ربات همراه با توکن است ؛ به سطر بعدی میرویم که آرایه ای بنام keyboard تعریف شده است ؛ این مدل از آرایه نشانگر یک وِیژگی از زبان برنامه نویسی php است که توانایی ساخت آرایه در آرایه را به کاربر می دهد (برای اطلاعات بیشتر در زمینه برنامه نویسی php می توانید به آموزش php همین سایت مراجعه کنید) ، فرض کنید می خواهید یک منویی مانند شکل نشان داده شده در ربات خود ایجاد کنید ؛ اگر این آرایه را مورد تجزیه طراحی قرار بدهیم ، آرایه ای است که نام اندیس اول این آرایه keyboard و دارای سه آرایه در درون هم (مانند حلقه های تو در تو یا شرط های تو در تو) می باشد ، به این نحو آرایه ها داخل یکدیگر قرار گرفته اند که آرایه ای بزرگ ترشامل دو آرایه جهت نشان دادن سطرها و ستون هاست برای بیان بهتر، کد زیر که با کامنت شماره آرایه ها را نشان داده دقت کنید :

$keyboard = array(
          "keyboard" =>
            array( // One
              array( // Two
                array( // Three
                  "text" => "One"
                ),
                array( // Three
                  "text" => "Two"
                )
              ),
              array( // Two
                array( // Three
                  "text" => "Five"
                ),
                array( // Three
                  "text" => "Six"
                )
              )
            ),

- در این مثال شماره آرایه ها با استفاده از کامنت هایی مشخص شده است ، برای ایجاد یک کیبورد نیاز به یک آرایه کلی داریم ، همانطور که مشخص است نام این آرایه در کامنت One است ، بعد از این آرایه ما باید مشخص کنیم چند سطر و ستون دکمه برای کیبور لازم داریم ، به ازای سطرها آرایه از مرتبه Two (منظور از مرتبه همان شماره های است که در کامنت ها نوشته شده است ) و به ازای ستون ها آرایه از مرتبه Three ایجاد می کنیم.

- هر کدام از آرایه ها که از مرتبه Three است باید یک اندیس با نام text داشته باشد تا هم نام نمایشی آن دکمه و هم مقدار ارسال اطلاعات بعد از کلیک کردن را مشخص کند ، لازم به ذکر است نام نمایشی با مقدار برابر است به این معنی که اگر شما نام دکمه را One بگذارید بعد از کلیک شدن بر روی آن مقدار One به ربات ارسال می شود.

- بعد ازتعریف کردن آرایه شما در کد دو اندیس دیگر که از نوع Boolean هستند را مشاهده می کنید ، مانند زیر :

"one_time_keyboard" => true,
"resize_keyboard" => true 

- این دو اندیس مربوط به تنظیمات کیبورد ربات می باشد و همانطور که مشاهده می کنید ، مقدار هر دو برابر صحیح است اما این دو اندیس آرایه چه کاربردی دارند ؟!

- one_time_keyboard : اگر مقدار این اندیس برابر با true باشد ، کاربر بعد از کلیک کردن بر روی آن کیبور ناپدید می شود ولی اگر مقدار آن false باشد ، کاربر هنگام وارد کردن دستورات دیگر نیز این کیبور را مشاهده می کند.

- resize_keyboard : با استفاده از این ویژگی میتوانید کیبورد را به اندازه صفحه گفت و گوی تلگرام تغییر سایز دهید ، بسته به مقداری که به آن میدهید (true یا false) کاربرد آن متفاوت است.

- بعد از این مرحله از کد به بخش زیر می رسیم :

$postFields = array(
          'chat_id' => $chatId,
          'text' => "This is test of button !",
          'reply_markup' => json_encode($keyboard)
        );

- برای نمایش کیبوربه کاربر باید ابتدا متنی را نشان دهید و همراه آن کیبور را ارسال کنید ، برای این منظور نیازمند آرایه ای دیگر می باشیم که این آرایه سه اندیس با مقدار های مشخص شده در کد را داراست ، لازم به توضیح است که مقدار text همان پیامی است که به کاربر نشان داده می شود ، اما چگونه باید کیبور را ارسال کنیم ؟!

- برای ارسال کیبورد لازم است آنرا در قالب جیسون دراندیس reply_markup ذخیره کنیم. (برای تبدیل آرایه به جیسون از متد json_encode استفاده می کنیم)

- حال به قطعه کد زیر می رسیم :

if (!$curld = curl_init()) {
    exit;
}

- وظیفه این قسمت از کد این است که که با استفاده از cUrl که خود کتابخوانه ای است که میتوان با استفاده از آن اطلاعات را با استفاده url جا به جا کرد ، این شرط چک میکند که اگر این کتابخوانه بوسیله سرور قابل پشتیبانی است سازنده این کلاس (همان construct) متد init را فراخوانی کرده و با استفاده از این فراخوانی به پشتیبانی کردن سرور پی برده و یک نمونه از آن تولید می کند.

- حال وقت آن رسیده اطلاعات را به url پیوند دهیم ، به قطعه کد زیر دقت کنید :

curl_setopt($curld, CURLOPT_POSTFIELDS, $postFields);
curl_setopt($curld, CURLOPT_URL, $url);

curl_exec($curld);
curl_close($curld);

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

- در نهایت در خط سوم این قطعه کد ما با استفاده از متد curl_exec مقدار cUrl را که در متغییرcurld$ ذخیره شده را به اجرا در میاوریم و در نهایت با دستور curl_close آنرا می بندیم.

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

پایان قسمت هفتم

موفق باشید.