برنامه نویسی کیبورد تلگرام با php: قسمت سوم

نوشته شده توسط:
قسمت های دیگر این مطلب:

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

در این قسمت از آموزش قصد داریم کیبوردی از نام شعرای ایرانی را نمایش داده که وقتی روی نام شاعر کلیک شود بیتی از آن شاعر نمایش داده شود.

برای شروع در botFather کامند poets را اضافه می‌کنیم:

برای ارسال کیبورد به کاربر از متد sendMessage استفاده می‌کنیم و پارامتر text و reply_markup را برای آن ارسال می‌کنیم. پارامتر text پیام مناسب کیبورد را برای کاربر ارسال می‌کند؛ و Replay_markup آرایه‌ای است که مقادیر کیبورد را ارسال می‌کند.

سورس قبلی را که برای مشاهده متن درباره ما بود به شکل زیر تغییر می‌دهیم:

<?php
header('Content-Type: text/html; charset=utf-8');
$message= file_get_contents("php://input");
$arrayMessage= json_decode($message, true);

$token= "249879980:AAHNdWnXjdq6Fw17NF81xXTtjA3xs19Sc6w";
$chat_id= $arrayMessage['message']['from']['id'];
$command= $arrayMessage['message']['text'];

if($command == '/start'){
    $text= "سلام، به ربات ما خوش آمدید";
    $url= "https://api.telegram.org/bot".$token."/sendMessage?chat_id=".$chat_id."&text=".$text;
    file_get_contents($url);    
}else if($command == '/aboutus'){
    $text= "این یک متن درباره ماست";
    $url= "https://api.telegram.org/bot".$token."/sendMessage?chat_id=".$chat_id."&text=".$text;
    file_get_contents($url);
}else if($command == '/poets'){
    $poets= array(
        'keyboard' => array(
                array('/Ferdowsi', '/Mawlawi', '/Hafez', '/Rudaki')
            ),
        );
    $jsonPoets= json_encode($poets);
    $text= "نام یکی از شعرای بزرگ ایرانی را انتخاب کنید";
    $url= "https://api.telegram.org/bot".$token."/sendMessage?chat_id=".$chat_id."&text=".$text."&reply_markup=".$jsonPoets;
    file_get_contents($url);
}else{
    $text= "دستور نا معتبر است";
    $url= "https://api.telegram.org/bot".$token."/sendMessage?chat_id=".$chat_id."&text=".$text;
    file_get_contents($url);
}

اگر این فایل را به هاست خود منتقل کنید مشاهده خواهید کرد که کاربر به محض کلیک روی poets یک کیبورد چهار کلیده با نام‌های سه شاعر ایرانی مشاهده می‌کند.

در این مرحله ما چهار کامند جدید /Rudaki و /Hafez و /Mawlawi و /Ferdowsi داریم که هر کدام یک بیت شعر را به کاربر نمایش می‌دهد.

اگر سورس بالا را چک کنید متوجه می‌شوید بعد از کلیک بر روی نام شاعر و نمایش بیت شعر مرتبط کیبورد باز ظاهر می‌ماند. برای مخفی کردن کیبورد پس از نمایش بیت شعر باید یک آرایه hide_keyboard => true  ایجاد می‌کنیم و آن را ضمیمه url نمایش بیت شعر می‌کنیم:

}else if($command == "/Ferdowsi"){
    $text= "خردمند باش وبی آزارباش     همیشه زبانرا نگهدار باش";
    $hide_keyboard= json_encode(array('hide_keyboard' => true));
    $url= "https://api.telegram.org/bot".$token."/sendMessage?chat_id=".$chat_id."&text=".$text."&reply_markup=".$hide_keyboard;
    file_get_contents($url);
}

در سطر 9 متغیر hide_keyboard آرایه‌ای دارد که با ارسال آن کیبورد بسته می‌شود.

تگ ها: messenger / پیام رسان ربات تلگرام / Telegram Bot تلگرام
نظر خود را برای این مطلب وارد کنید
دریافت خبرنامه
محمد
سلام با استفاده از setWebhook نتونستم استفاده کنم.
تلگرام پیغام ست شدن رو میده. ولی هیچ پستی به url ام نمی فرسته
ابوالفضل

چطوری دکمه ها رو کوچیکتر یا دو ردیف کنم؟

پاسخ:

به تعداد آیتم هر آرایه کلید تولید می شه.

Fati

سلام!
من چطوری یه کدی بنویسم که هر آپدیتی که تلگرام به url ام میفرسته (مثلا کاربر یه متنی رو برام میفرسته ) دوباره نره تموم if هارو از اول چک کنه؟؟

پاسخ:

سلام

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

Fati

سلام من منظورم اینه که مثلا الان یه کدی نوشتم که اسم طرف رو دریافت کنه بعد سنشو چطوری بفهمونم بهش که الان باید سن طرفو بگیره ینی باید بایه نشونه ای یه جاییش بذارم؟؟؟؟

امیدوارم که منظورمو درست رسونده باشم!!!

پاسخ:

سلام

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

cfr

سلام
آموزشتون خیلی عالی بود. واقعا ممنونم
سوالی داشتم در خصوص ایجاد <br> در خطوط. شما شیوه ی خاصی مدنظر دارید؟

پاسخ:

سلام

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

cfr

سلام

روزتون بخیر

برای replay markup میشه مثالی بزنید؟ اگر ورودی X بود، replay markup بشه با پیام Y از طرف ربات.

پاسخ:

تو BotFather یک کامند ایجاد کنید به نام numbers و وقتی چنین دستوری رو در تلگرام درخواست بدید یک کیبورد با کلید های one و two ایجاد می شه.

if($command == '/numbers'){
    $numbers= array(
        'keyboard' => array(
                array('/one', '/two')
            ),
        );
    $url= "https://api.telegram.org/bot".$token."/sendMessage?chat_id=".$chat_id."&text=یکی از گزینه های زیر را انتخاب کنید&reply_markup=".json_encode($numbers);
    file_get_contents($url);
}

 

پوریا

سلام دوست عزیز مقالتون خیلی عالی بود فقط یک سوال:وقتی از متد sendMessage استفاده میکنیم ی متدهای مشابه برای ارسال متن,متن هارو به صورت متراکم و بدونه فاصله و شکست خط میفرسته و امکان استفاده از اموجی های تلگرامم نیست ولی تو روبات های دیگه دیدم که استفاده میکنن ممنون میشم در این باره راهنماییم کنین

پاسخ:

سلام

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

موسوی

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

پاسخ:

سلام

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

mohammadsal

عرض سلام و وقت بخیر مهندس
سوال من هم مثل سوال fati خانوم هستش
میشه یه مثلای بزنین؟
من تو وارد کردن و سرچ کردن دیتا بیس و ارسال پیام مشکلی ندارم
فقط نمیتونم با message که از یوزر میگیرم کار کنم چون دیگه تو شرط If نمیدونم باید چی بذارم
البته میخواستم وقتی یوزر start رو میزنه من با استفاده از Messag_id بتونم ولی اونم نشد..
لطفا راهنمایی کن خیلی کلافه شدم ممنون

پاسخ:

سلام

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

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

mohammadsal
user: /start
bot: send "please send me title of story"
uesr: for example "jang"
bot:now send me story
user:"bshsjnshdd"
bot:your title is jang and your story is bshsjnshdd

این دقیقا چیزی که میخوام گفتم صریحتر بگم شاید بهتر باشه

پاسخ:

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

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

محمد

سلام

برای ارسال متن های طولانی چیکار کنم که تو پیامی که برای مخاطب ارسال میشه آخر هر بند(پاراگراف) متن م خط تیره یعنی _ نمایش داده نشه.

البته برای جدا سازی بند(پاراگراف) های متن م از کلید Space استفاده کردم که شلوغ شدن کدنویسی شده.
ممنونم میشم اگه راهنمایی کنید.

پاسخ:

سلام

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

farid

سلام
میبخشین من اگه بخوام ی مقداری و از کاربر بگیرم و مثلا از تو دیتابیس بخونم
راهش چیه؟
بعد اینکه
کیبورد اینلاین و چه طور میشه ازش استفاده کرد؟

پاسخ:

سلام

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

موضوعات بخش برنامه نویسی و نرم افزار

مطالب برگزیده برنامه نویسی php

مطالب برگزیده سایت