- برنامه نویسی با PHP برای ربات تلگرام: قسمت اول
- ساخت ربات تلگرام با php: قسمت دوم (setWebhook و getUpdates)
- برنامه نویسی کیبورد تلگرام با php: قسمت سوم
- ارسال عکس، فیلم و صوت با ربات تلگرام: قسمت چهارم ربات تلگرام با 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
آرایهای دارد که با ارسال آن کیبورد بسته میشود.
تلگرام پیغام ست شدن رو میده. ولی هیچ پستی به url ام نمی فرسته
چطوری دکمه ها رو کوچیکتر یا دو ردیف کنم؟
به تعداد آیتم هر آرایه کلید تولید می شه.
سلام!
من چطوری یه کدی بنویسم که هر آپدیتی که تلگرام به url ام میفرسته (مثلا کاربر یه متنی رو برام میفرسته ) دوباره نره تموم if هارو از اول چک کنه؟؟
سلام
این مباحث به الگوریتم شما بستگی داره. ولی الگوریتم باید به گونه ای عمل کند که بعد از صادق بودن یک شرط از برنامه خارج شود.
سلام من منظورم اینه که مثلا الان یه کدی نوشتم که اسم طرف رو دریافت کنه بعد سنشو چطوری بفهمونم بهش که الان باید سن طرفو بگیره ینی باید بایه نشونه ای یه جاییش بذارم؟؟؟؟
امیدوارم که منظورمو درست رسونده باشم!!!
سلام
ببینید شما اسم طرف رو دریافت می کنید و در پایگاه داده ذخیره می کنید، در وهله بعدی پیغام مناسب برای دریافت سن رو نمایش می دید. وقتی کاربر سن رو ارسال کرد چون در پایگاه داده نام ذخیره شده و ورودی جدید عددیه متوجه می شید سن وارد شده.
سلام
آموزشتون خیلی عالی بود. واقعا ممنونم
سوالی داشتم در خصوص ایجاد <br> در خطوط. شما شیوه ی خاصی مدنظر دارید؟
سلام
در آینده آموزشی برای این مساله در سایت منتشر می کنم.
سلام
روزتون بخیر
برای replay markup میشه مثالی بزنید؟ اگر ورودی X بود، replay markup بشه با پیام Y از طرف ربات.
تو BotFather یک کامند ایجاد کنید به نام numbers و وقتی چنین دستوری رو در تلگرام درخواست بدید یک کیبورد با کلید های one و two ایجاد می شه.
سلام دوست عزیز مقالتون خیلی عالی بود فقط یک سوال:وقتی از متد sendMessage استفاده میکنیم ی متدهای مشابه برای ارسال متن,متن هارو به صورت متراکم و بدونه فاصله و شکست خط میفرسته و امکان استفاده از اموجی های تلگرامم نیست ولی تو روبات های دیگه دیدم که استفاده میکنن ممنون میشم در این باره راهنماییم کنین
سلام
شما یک متن با اموجی های مورد نظرتون تو ربات تلگرام ارسال کنید و سمت سرور اونو دریافت کنید و از همون اموجی ها تو متد sendMessage استفاده کنید.
با سلام و خسته نباشید.
بنده میخوام بعد از اینکه کاربر استارت رو زد بتونه یوزر نیم رو وارد کنه و بعد از اون یه مرحله دیگه هست که پسورد رو وارد میکنه و من نمیدونم اونطرف چطوری اینارو هندل کنم که الان یوزر نیم رو بررسی کنم یا پسورد رو، ممنون میشم راهنمائیم کنید.
سلام
باید از دیتابیس استفاده کنید و سمت سرور یک برنامه برای این کار بنویسید.
عرض سلام و وقت بخیر مهندس
سوال من هم مثل سوال fati خانوم هستش
میشه یه مثلای بزنین؟
من تو وارد کردن و سرچ کردن دیتا بیس و ارسال پیام مشکلی ندارم
فقط نمیتونم با message که از یوزر میگیرم کار کنم چون دیگه تو شرط If نمیدونم باید چی بذارم
البته میخواستم وقتی یوزر start رو میزنه من با استفاده از Messag_id بتونم ولی اونم نشد..
لطفا راهنمایی کن خیلی کلافه شدم ممنون
سلام
این کار با دیتابیس انجام می شه، و به یک الگوریتم مناسب نیاز داره.
ذکر الگوریتم الان مقدور نیست ولی در نسخه بعدی و پیشرفته آموزش ربات تمام این نوع الگوریتم ها رو براتون آموزش می دم.
این دقیقا چیزی که میخوام گفتم صریحتر بگم شاید بهتر باشه
این کار با دیتابیس انجام می شه، و به یک الگوریتم مناسب نیاز داره.
ذکر الگوریتم الان مقدور نیست ولی در نسخه بعدی و پیشرفته آموزش ربات تمام این نوع الگوریتم ها رو براتون آموزش می دم.
سلام
برای ارسال متن های طولانی چیکار کنم که تو پیامی که برای مخاطب ارسال میشه آخر هر بند(پاراگراف) متن م خط تیره یعنی _ نمایش داده نشه.
البته برای جدا سازی بند(پاراگراف) های متن م از کلید Space استفاده کردم که شلوغ شدن کدنویسی شده.
ممنونم میشم اگه راهنمایی کنید.
سلام
انشالله در آینده نزدیک یک آموزش برای این کار در سایت منتشر می شه.
سلام
میبخشین من اگه بخوام ی مقداری و از کاربر بگیرم و مثلا از تو دیتابیس بخونم
راهش چیه؟
بعد اینکه
کیبورد اینلاین و چه طور میشه ازش استفاده کرد؟
سلام
در آینده آموزشی برای این کار در سایت منتشر می شود.