Yangi formatda davom etish uchun: https://uzfor.net/view.php?id=3446&page=1
PHP dasturlash tilida Telegram bot yozish
Mavzu fayllari (5)
Xabarlar
Assalomu alaykum. Men ba’zi bir sabablarga ko’ra telegramga bot yozishimga to’g’ri keldi. Buning natijasida ozmi ko’pmi tajribaga ega bo’ldim va ba’zilarini sizlar bilan bo’lishmoqchiman. Xozir biz php dasturlash tilida oddiygina bot yasaymiz.
Biz internet saytlarda yoki messenjerlarda turli xil qiziq narsalarni o’qiganimizda kim bilandir ulashgimiz, kimgadir junatgimiz keladi. Unda hech qanday messenjer yoki ijtimoiy tarmoqlardagi accout bo’lmasa unga bu o’qigan matnimizni sms tariqasi yubormoqchi bo’lamiz va o’qigan narsamizni belgilab smsga kirib joylashtiramiz. SMS xizmatini xam o’zini standartlari bor, ba’zi bir belgilar qo’shilgandan keyin smsimizni hajmi oshib ketib 4-5 ta sms bo’lib qoladi yoki mms ga o’tib qoladi. Natijada biz uni yubora olmaymiz. Xozir biz ana shunday vaziyatda kerakli matnni sms standartlariga moslab mmsga aylanib ketmaydigan qilib beradigan bot yasaymiz.
- Men PHP dasturlash tilida ishlayman.
- Bizda web – hostinglar asosan phpga moslashtirilgan yoki chetdan birorta bepul hosting olinsa xam asosan php sozlangan bo’ladi.
Shu sabablarga ko’ra botni PHP tilida yozishga qaror qildim.
Ishni bajarishni asosiy ketma – ketligi quyidagicha.
- Matndagi sms ga “xalaqit” beradigan simvollarni boshqasiga almashtiramiz, Kirilcha qo’shilib qolgan harflarni xam lotin alifbosidagisiga aylantirib chiqadigan funksiya yasaymiz (ko’chiramiz ).
- @botfather dan yangi bot yasab uni boshqarish uchun API kalitini olamiz.
- Fayllarni hostingga yuklab uni webhook sifatida ko’rsatamiz. (Ba’zi bir terminlarni maqola davomida tushuntirib ketaman).
PHPda berilgan matndagi simvollarni smsga moslab beradigan quyidagicha funksiya yozamiz.
Biz internet saytlarda yoki messenjerlarda turli xil qiziq narsalarni o’qiganimizda kim bilandir ulashgimiz, kimgadir junatgimiz keladi. Unda hech qanday messenjer yoki ijtimoiy tarmoqlardagi accout bo’lmasa unga bu o’qigan matnimizni sms tariqasi yubormoqchi bo’lamiz va o’qigan narsamizni belgilab smsga kirib joylashtiramiz. SMS xizmatini xam o’zini standartlari bor, ba’zi bir belgilar qo’shilgandan keyin smsimizni hajmi oshib ketib 4-5 ta sms bo’lib qoladi yoki mms ga o’tib qoladi. Natijada biz uni yubora olmaymiz. Xozir biz ana shunday vaziyatda kerakli matnni sms standartlariga moslab mmsga aylanib ketmaydigan qilib beradigan bot yasaymiz.
- Men PHP dasturlash tilida ishlayman.
- Bizda web – hostinglar asosan phpga moslashtirilgan yoki chetdan birorta bepul hosting olinsa xam asosan php sozlangan bo’ladi.
Shu sabablarga ko’ra botni PHP tilida yozishga qaror qildim.
Ishni bajarishni asosiy ketma – ketligi quyidagicha.
- Matndagi sms ga “xalaqit” beradigan simvollarni boshqasiga almashtiramiz, Kirilcha qo’shilib qolgan harflarni xam lotin alifbosidagisiga aylantirib chiqadigan funksiya yasaymiz (ko’chiramiz ).
- @botfather dan yangi bot yasab uni boshqarish uchun API kalitini olamiz.
- Fayllarni hostingga yuklab uni webhook sifatida ko’rsatamiz. (Ba’zi bir terminlarni maqola davomida tushuntirib ketaman).
PHPda berilgan matndagi simvollarni smsga moslab beradigan quyidagicha funksiya yozamiz.
"Funksiya" (+/-)
{ // Make sure string is in UTF-8 and strip invalid UTF-8 characters ( 'delimiter' => ' ', 'limit' => null, 'lowercase' => true, 'transliterate' => true, ); // Merge options ( // Latin 'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'AE', 'Ç' => 'C', 'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ő' => 'O', 'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ű' => 'U', 'Ý' => 'Y', 'Þ' => 'TH', 'ß' => 'ss', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'ae', 'ç' => 'c', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ő' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'ű' => 'u', 'ý' => 'y', 'þ' => 'th', 'ÿ' => 'y', // Latin symbols '©' => '(c)', // Greek 'Α' => 'A', 'Β' => 'B', 'Γ' => 'G', 'Δ' => 'D', 'Ε' => 'E', 'Ζ' => 'Z', 'Η' => 'H', 'Θ' => '8', 'Ι' => 'I', 'Κ' => 'K', 'Λ' => 'L', 'Μ' => 'M', 'Ν' => 'N', 'Ξ' => '3', 'Ο' => 'O', 'Π' => 'P', 'Ρ' => 'R', 'Σ' => 'S', 'Τ' => 'T', 'Υ' => 'Y', 'Φ' => 'F', 'Χ' => 'X', 'Ψ' => 'PS', 'Ω' => 'W', 'Ά' => 'A', 'Έ' => 'E', 'Ί' => 'I', 'Ό' => 'O', 'Ύ' => 'Y', 'Ή' => 'H', 'Ώ' => 'W', 'Ϊ' => 'I', 'Ϋ' => 'Y', 'α' => 'a', 'β' => 'b', 'γ' => 'g', 'δ' => 'd', 'ε' => 'e', 'ζ' => 'z', 'η' => 'h', 'θ' => '8', 'ι' => 'i', 'κ' => 'k', 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => '3', 'ο' => 'o', 'π' => 'p', 'ρ' => 'r', 'σ' => 's', 'τ' => 't', 'υ' => 'y', 'φ' => 'f', 'χ' => 'x', 'ψ' => 'ps', 'ω' => 'w', 'ά' => 'a', 'έ' => 'e', 'ί' => 'i', 'ό' => 'o', 'ύ' => 'y', 'ή' => 'h', 'ώ' => 'w', 'ς' => 's', 'ϊ' => 'i', 'ΰ' => 'y', 'ϋ' => 'y', 'ΐ' => 'i', // Turkish 'Ş' => 'S', 'İ' => 'I', 'Ç' => 'C', 'Ü' => 'U', 'Ö' => 'O', 'Ğ' => 'G', 'ş' => 's', 'ı' => 'i', 'ç' => 'c', 'ü' => 'u', 'ö' => 'o', 'ğ' => 'g', // Russian 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'Ye', 'Ё' => 'Yo', 'Ж' => 'J', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'X', 'Ц' => 'Ts', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sh', 'Ъ' => '\'', 'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya', 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'j', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'x', 'ц' => 'ts', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sh', 'ъ' => '\'', 'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', // Ukrainian 'Є' => 'Ye', 'І' => 'I', 'Ї' => 'Yi', 'Ґ' => 'G', 'є' => 'ye', 'і' => 'i', 'ї' => 'yi', 'ґ' => 'g', // Czech 'Č' => 'C', 'Ď' => 'D', 'Ě' => 'E', 'Ň' => 'N', 'Ř' => 'R', 'Š' => 'S', 'Ť' => 'T', 'Ů' => 'U', 'Ž' => 'Z', 'č' => 'c', 'ď' => 'd', 'ě' => 'e', 'ň' => 'n', 'ř' => 'r', 'š' => 's', 'ť' => 't', 'ů' => 'u', 'ž' => 'z', // Polish 'Ą' => 'A', 'Ć' => 'C', 'Ę' => 'e', 'Ł' => 'L', 'Ń' => 'N', 'Ó' => 'o', 'Ś' => 'S', 'Ź' => 'Z', 'Ż' => 'Z', 'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z', 'ż' => 'z', // Latvian 'Ā' => 'A', 'Č' => 'C', 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'i', 'Ķ' => 'k', 'Ļ' => 'L', 'Ņ' => 'N', 'Š' => 'S', 'Ū' => 'u', 'Ž' => 'Z', 'ā' => 'a', 'č' => 'c', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n', 'š' => 's', 'ū' => 'u', 'ž' => 'z', // Uzbek "Ў"=>"O'", "ў"=>"o'", "Ғ"=>"G'", "ғ"=>"g'", "Ҳ"=>"H", "ҳ"=>"h", "Қ"=>"Q", "қ"=>"q", //Symbols "\"" => "'", "–" => "-", "‘" => "'", "“" => "\"", "”" => "\"", "’" => "'", "´" => "'", ); // Make custom replacements // Transliterate characters to ASCII if ($options['transliterate']) { } // Replace non-alphanumeric characters with our delimiter // $str = preg_replace("/'[^\p{L}\p{Nd}]+/u", $options['delimiter'], $str); // Remove duplicate delimiters // Truncate slug to max. characters // Remove delimiter from ends return $str; }
Endi botga kimdir xabar yuborsa uni shu funksiya orqali qayta tahrirlab egasiga qaytarib yuborishi uchun maxsus kutubxonadan foydalanamiz. Biz ishlatgan kutubxonani quyidagi manzil bo’yicha olishingiz mumkin:
https://github.com/irazasyed/telegram-bot-sdk
Eslatib o’taman. Bu kutubxona keng imkoniyatli bo’lib men buni faqat ba’zi bir imkoniyatlaridan foydalanganman xolos. To’liq ma’lumot uchun kutubxonani dokumentatsiyasi: https://telegram-bot-sdk.readme.io/docs
Endi yangi php fayl yaratib kutubxonani va funksiyanimiz unga birlashtiramiz:
Natijaviy php kodlar
Mana kodlarni xam yozib oldik. Endi uni hostingga yoki shaxsiy serverga chiqarib bot bilan xabar almashishini ta’minlashimiz kerak. Buni esa botni yasab bo’lganimizdan keyin amalga oshirishga qoldiramiz.
Biz yangi bot yasab unga birorta dastur bilan murojaat qilishimiz uchun uni API kalitini olishimiz kerak bo’ladi.
API kalit bilan uni boshqarish uchun va unga xabar yuborilganda u xabarni bizni dasturimizga yuborishi uchun unga webhook sozlamasiga php scriptimizni manzilini ko’rsatib qo’yamiz. Buning uchun telegramda @botfather bilan salomlashamiz ))
https://github.com/irazasyed/telegram-bot-sdk
Eslatib o’taman. Bu kutubxona keng imkoniyatli bo’lib men buni faqat ba’zi bir imkoniyatlaridan foydalanganman xolos. To’liq ma’lumot uchun kutubxonani dokumentatsiyasi: https://telegram-bot-sdk.readme.io/docs
Endi yangi php fayl yaratib kutubxonani va funksiyanimiz unga birlashtiramiz:
Natijaviy php kodlar
<?php include('vendor/autoload.php'); // Kutubxonani chaqiramiz use Telegram\Bot\Api; $telegram = new Api('token'); // BotFatherdan olingan tokenni o'rnatamiz $result = $telegram -> getWebhookUpdates(); // Foydalanuvchidan kelib tushgan xabar va boshqa ma'lumotlarni o'zgaruvchiga olib olamiz $text = $result["message"]["text"]; // Qabul qilingan xabar matni $chat_id = $result["message"]["chat"]["id"]; // Yozishma IDsi $name = $result["message"]["from"]["username"]; // Yuborgan odamning manzili (username) $keyboard = [["Men xaqimda"]]; // Klaviatura (shart emas lekin kimdir men xaqimda qiziqib qolsa ) if($text){ // Agar botga yuborilgan xabar matndan iborat bo'lsa quyidagilar bajariladi if ($text == "/start") { // Agar kimdir botga start bersa ya'ni yozishmani boshlasa unga birinchi xabar matni $reply = "Bu botni shunchaki o'zim uchun yozganman, jiddiy olinmasin!"; $reply_markup = $telegram->replyKeyboardMarkup([ 'keyboard' => $keyboard, 'resize_keyboard' => true, 'one_time_keyboard' => false ]); $telegram->sendMessage([ 'chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup ]); }elseif ($text == "Men xaqimda") { // Agar kimdir botni muallifi bilan qiziqib "Men xaqimda"ni bossa $reply = "Bu bot juda ko'p turdagi yozuvlarni lotin alifbosiga o'tkazib beradi. Boshida o'zim uchun bu botni yaratish fikri kelgan edi, lekin mendanam boshqa odamlarga kerak bo'lib qolar deb o'yladim. Fikr, mulohaza, taklif yoki kamchiliklar bo'lsa @ErkinPardayev"; $telegram->sendMessage([ 'chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup ]); } else{ // Yuborilgan matnli xabar hech biriga to'g'ri kelmasa demak u qayta ishlash uchun matn yuborgan // Matnni funksiyamiz orqali qayta ishlab o'ziga yuboramiz $reply = toUniversalString($text); // Matnni qayta ishlash $telegram->sendMessage([ 'chat_id' => $chat_id, 'text' => $reply, 'reply_markup' => $reply_markup ]); // Matnni yuborish } }else{ $telegram->sendMessage([ 'chat_id' => $chat_id, 'text' => "Men faqat mant ko'rinishidagi xabarlarni qayta ishlay olaman." ]); } { ( 'delimiter' => ' ', 'limit' => null, 'lowercase' => true, 'transliterate' => true, ); ( // Latin 'À' => 'A', 'Á' => 'A', 'Â' => 'A', 'Ã' => 'A', 'Ä' => 'A', 'Å' => 'A', 'Æ' => 'AE', 'Ç' => 'C', 'È' => 'E', 'É' => 'E', 'Ê' => 'E', 'Ë' => 'E', 'Ì' => 'I', 'Í' => 'I', 'Î' => 'I', 'Ï' => 'I', 'Ð' => 'D', 'Ñ' => 'N', 'Ò' => 'O', 'Ó' => 'O', 'Ô' => 'O', 'Õ' => 'O', 'Ö' => 'O', 'Ő' => 'O', 'Ø' => 'O', 'Ù' => 'U', 'Ú' => 'U', 'Û' => 'U', 'Ü' => 'U', 'Ű' => 'U', 'Ý' => 'Y', 'Þ' => 'TH', 'ß' => 'ss', 'à' => 'a', 'á' => 'a', 'â' => 'a', 'ã' => 'a', 'ä' => 'a', 'å' => 'a', 'æ' => 'ae', 'ç' => 'c', 'è' => 'e', 'é' => 'e', 'ê' => 'e', 'ë' => 'e', 'ì' => 'i', 'í' => 'i', 'î' => 'i', 'ï' => 'i', 'ð' => 'd', 'ñ' => 'n', 'ò' => 'o', 'ó' => 'o', 'ô' => 'o', 'õ' => 'o', 'ö' => 'o', 'ő' => 'o', 'ø' => 'o', 'ù' => 'u', 'ú' => 'u', 'û' => 'u', 'ü' => 'u', 'ű' => 'u', 'ý' => 'y', 'þ' => 'th', 'ÿ' => 'y', // Latin symbols '©' => '(c)', // Greek 'Α' => 'A', 'Β' => 'B', 'Γ' => 'G', 'Δ' => 'D', 'Ε' => 'E', 'Ζ' => 'Z', 'Η' => 'H', 'Θ' => '8', 'Ι' => 'I', 'Κ' => 'K', 'Λ' => 'L', 'Μ' => 'M', 'Ν' => 'N', 'Ξ' => '3', 'Ο' => 'O', 'Π' => 'P', 'Ρ' => 'R', 'Σ' => 'S', 'Τ' => 'T', 'Υ' => 'Y', 'Φ' => 'F', 'Χ' => 'X', 'Ψ' => 'PS', 'Ω' => 'W', 'Ά' => 'A', 'Έ' => 'E', 'Ί' => 'I', 'Ό' => 'O', 'Ύ' => 'Y', 'Ή' => 'H', 'Ώ' => 'W', 'Ϊ' => 'I', 'Ϋ' => 'Y', 'α' => 'a', 'β' => 'b', 'γ' => 'g', 'δ' => 'd', 'ε' => 'e', 'ζ' => 'z', 'η' => 'h', 'θ' => '8', 'ι' => 'i', 'κ' => 'k', 'λ' => 'l', 'μ' => 'm', 'ν' => 'n', 'ξ' => '3', 'ο' => 'o', 'π' => 'p', 'ρ' => 'r', 'σ' => 's', 'τ' => 't', 'υ' => 'y', 'φ' => 'f', 'χ' => 'x', 'ψ' => 'ps', 'ω' => 'w', 'ά' => 'a', 'έ' => 'e', 'ί' => 'i', 'ό' => 'o', 'ύ' => 'y', 'ή' => 'h', 'ώ' => 'w', 'ς' => 's', 'ϊ' => 'i', 'ΰ' => 'y', 'ϋ' => 'y', 'ΐ' => 'i', // Turkish 'Ş' => 'S', 'İ' => 'I', 'Ç' => 'C', 'Ü' => 'U', 'Ö' => 'O', 'Ğ' => 'G', 'ş' => 's', 'ı' => 'i', 'ç' => 'c', 'ü' => 'u', 'ö' => 'o', 'ğ' => 'g', // Russian 'А' => 'A', 'Б' => 'B', 'В' => 'V', 'Г' => 'G', 'Д' => 'D', 'Е' => 'Ye', 'Ё' => 'Yo', 'Ж' => 'J', 'З' => 'Z', 'И' => 'I', 'Й' => 'Y', 'К' => 'K', 'Л' => 'L', 'М' => 'M', 'Н' => 'N', 'О' => 'O', 'П' => 'P', 'Р' => 'R', 'С' => 'S', 'Т' => 'T', 'У' => 'U', 'Ф' => 'F', 'Х' => 'X', 'Ц' => 'Ts', 'Ч' => 'Ch', 'Ш' => 'Sh', 'Щ' => 'Sh', 'Ъ' => '\'', 'Ы' => 'Y', 'Ь' => '', 'Э' => 'E', 'Ю' => 'Yu', 'Я' => 'Ya', 'а' => 'a', 'б' => 'b', 'в' => 'v', 'г' => 'g', 'д' => 'd', 'е' => 'e', 'ё' => 'yo', 'ж' => 'j', 'з' => 'z', 'и' => 'i', 'й' => 'y', 'к' => 'k', 'л' => 'l', 'м' => 'm', 'н' => 'n', 'о' => 'o', 'п' => 'p', 'р' => 'r', 'с' => 's', 'т' => 't', 'у' => 'u', 'ф' => 'f', 'х' => 'x', 'ц' => 'ts', 'ч' => 'ch', 'ш' => 'sh', 'щ' => 'sh', 'ъ' => '\'', 'ы' => 'y', 'ь' => '', 'э' => 'e', 'ю' => 'yu', 'я' => 'ya', // Ukrainian 'Є' => 'Ye', 'І' => 'I', 'Ї' => 'Yi', 'Ґ' => 'G', 'є' => 'ye', 'і' => 'i', 'ї' => 'yi', 'ґ' => 'g', // Czech 'Č' => 'C', 'Ď' => 'D', 'Ě' => 'E', 'Ň' => 'N', 'Ř' => 'R', 'Š' => 'S', 'Ť' => 'T', 'Ů' => 'U', 'Ž' => 'Z', 'č' => 'c', 'ď' => 'd', 'ě' => 'e', 'ň' => 'n', 'ř' => 'r', 'š' => 's', 'ť' => 't', 'ů' => 'u', 'ž' => 'z', // Polish 'Ą' => 'A', 'Ć' => 'C', 'Ę' => 'e', 'Ł' => 'L', 'Ń' => 'N', 'Ó' => 'o', 'Ś' => 'S', 'Ź' => 'Z', 'Ż' => 'Z', 'ą' => 'a', 'ć' => 'c', 'ę' => 'e', 'ł' => 'l', 'ń' => 'n', 'ó' => 'o', 'ś' => 's', 'ź' => 'z', 'ż' => 'z', // Latvian 'Ā' => 'A', 'Č' => 'C', 'Ē' => 'E', 'Ģ' => 'G', 'Ī' => 'i', 'Ķ' => 'k', 'Ļ' => 'L', 'Ņ' => 'N', 'Š' => 'S', 'Ū' => 'u', 'Ž' => 'Z', 'ā' => 'a', 'č' => 'c', 'ē' => 'e', 'ģ' => 'g', 'ī' => 'i', 'ķ' => 'k', 'ļ' => 'l', 'ņ' => 'n', 'š' => 's', 'ū' => 'u', 'ž' => 'z', // Uzbek "Ў"=>"O'", "ў"=>"o'", "Ғ"=>"G'", "ғ"=>"g'", "Ҳ"=>"H", "ҳ"=>"h", "Қ"=>"Q", "қ"=>"q", //Symbols "\"" => "'", "–" => "-", "‘" => "'", "“" => "\"", "”" => "\"", "’" => "'", "´" => "'", ); if ($options['transliterate']) { } return $str; } ?>
Mana kodlarni xam yozib oldik. Endi uni hostingga yoki shaxsiy serverga chiqarib bot bilan xabar almashishini ta’minlashimiz kerak. Buni esa botni yasab bo’lganimizdan keyin amalga oshirishga qoldiramiz.
Biz yangi bot yasab unga birorta dastur bilan murojaat qilishimiz uchun uni API kalitini olishimiz kerak bo’ladi.
API kalit bilan uni boshqarish uchun va unga xabar yuborilganda u xabarni bizni dasturimizga yuborishi uchun unga webhook sozlamasiga php scriptimizni manzilini ko’rsatib qo’yamiz. Buning uchun telegramda @botfather bilan salomlashamiz ))
Biriktirilgan fayllar [1]:
— screen_1.jpg (65.7 KB) (413 ↴)
— screen_1.jpg (65.7 KB) (413 ↴)
Yangi bot yasash uchun \new buyrug’ini yuboramiz
Keyin bizdan botimizga nom berishimizni so’raydi. Men uni String2UTF8 deb nomladim.
Keyin biz unga manzil kiritishimiz kerak bo’ladi va u oxirida bot qo’shimchasi bilan tugashi kerak. Men uni String2UTF8_bot deb nomladim. Agar biz tanlagan manzil band bo’lsa boshqa manzil topishimiz kerak. Manzilni (username) xam to’g’ri kiritganimizda bizga botfather buni takidlab bizga HTTP API beradi. API xabarda "Use this token to access the HTTP API: 445482470:AAGNmQbhHZTOaqe2Aj9R9FY2lffqqCXRd94" kabi yozilgan bo’ladi.
Mana bizni botimiz ishlatishga tayyor bo’ldi va u qo’ygan manzilimiz bo’yicha ishlatishga tayyor. https://t.me/String2UTF8_bot manzili bo’yicha murojaat qilinsa bo’ladi. Lekin u xozircha so’rovlarimizga javob qaytara olmaydi. Botga buyruqni https://api.telegram.org/botAPI/buyruq ko’rinishida berishimiz mumkin. Mavjud buyruqlar to’liq ro’yhatini https://core.telegram.org/bots/api manzilida o’qishingiz mumkin.
Botga kimdir nimadir yozsa uni 24 soat mobaynida telegramning serverida JSON shakida saqlanib turadi. Uni quyidagi manzil bo’yicha o’qishimiz mumkin: https://api.telegram.org/botAPI/getUpdates
Endi maqsadimiz botga kimdir nimadir yozganda u xabarni o’sha zaxotiyoq qayta ishlab egasiga yuborishimiz kerak bo’ladi. Buning uchun botimizga webhook tayinlaymiz, ya’ni botga nimadir yozilganda bot xabarni avtomatik tarzda o’sha manzilga json ko’rinishida yuboradi. Buning uchun https://api.telegram.org/bot[token]/setwebhook?url=[webhook] manzilini ishlatamiz.
Endi tayyor php scriptimizni hostingga yuklab uni bot orqali ishlatishga kiritamiz. Bot birorta web servis bilan xabar almashishi uchun o’rtadagi muloqot shifrlangan (himoyalangan) bo’lishi kerak ya’ni SSL sertifikat kerak bo’ladi. SSL sertifikat esa yaxshigina pul turadi. Bizni oldimizda Let's Encrypt dan bepul sertifikat olib o’rnatish yoki o’zimiz yaratishimiz yoki shunga o’xshash yo’llar turibdi. Men Let's Encryptdan sertifikat olib uni uzinfocomni oddiy hostinggiga sozlab botni ishlataman deganimda hosting bilan muammolar yuzaga keldi va boshqa yo’l izlashimga to’g’ri keldi. Izlanishlarim natijasida COMODO CA Limited tomonidan beriladigan bepul sertifikatli bepul hosting va bepul 3-darajali domen beradigan sayt/firma/tizim xullas “ajib bir narsa” chiqib qoldi )) Manzil quyidagicha: https://www.000webhost.com/ Uni tariflarini bizni hostingerlarimiz yaqin orada hayoliga ham keltira olishmaydi. Ex essiz uzcard bilan tulov qilib bo’lganda pulli tarifidan sotib olardim. Mayli xozircha bepul tarifini tanlab ro’yhatdan o’tamiz va o’zimizga yangi akkount ochamiz. Yangi akkount ochib unga yangi sayt ochishni tushuntirib o’tmayman, o’ylaymanki o’zingiz qila olasiz.
Yangi sayt ochganimizdan keyin unga ftp orqali fayllarimizni yuklaymiz. O'ylaymanki buni xam o'zingiz qila olasiz (jarayonni bajarishda muammolarga duch kelinsa bemalol murojaat qilishingiz mumkin)
Meni yuklagan faylim https://erkin.000webhostapp.com/tbot.php manzili bo’yicha joylashdi. Demak webhookni shu manzil bo’yicha sozlaymiz. Buning uchun brouzerimiz manzillar qatoriga quyidagini yozamiz va murojaat yuboramiz. (enterni bosamiz)
https://api.telegram.org/bot445482470:AAGNmQbhHZTOaqe2Aj9R9FY2lffqqCXRd94/setwebhook?url=https://erkin.000webhostapp.com/tbot.php
Natija ijobiy bo’lsa brouzerimizda quyidagicha natija chiqadi:
Keyin bizdan botimizga nom berishimizni so’raydi. Men uni String2UTF8 deb nomladim.
Keyin biz unga manzil kiritishimiz kerak bo’ladi va u oxirida bot qo’shimchasi bilan tugashi kerak. Men uni String2UTF8_bot deb nomladim. Agar biz tanlagan manzil band bo’lsa boshqa manzil topishimiz kerak. Manzilni (username) xam to’g’ri kiritganimizda bizga botfather buni takidlab bizga HTTP API beradi. API xabarda "Use this token to access the HTTP API: 445482470:AAGNmQbhHZTOaqe2Aj9R9FY2lffqqCXRd94" kabi yozilgan bo’ladi.
Mana bizni botimiz ishlatishga tayyor bo’ldi va u qo’ygan manzilimiz bo’yicha ishlatishga tayyor. https://t.me/String2UTF8_bot manzili bo’yicha murojaat qilinsa bo’ladi. Lekin u xozircha so’rovlarimizga javob qaytara olmaydi. Botga buyruqni https://api.telegram.org/botAPI/buyruq ko’rinishida berishimiz mumkin. Mavjud buyruqlar to’liq ro’yhatini https://core.telegram.org/bots/api manzilida o’qishingiz mumkin.
Botga kimdir nimadir yozsa uni 24 soat mobaynida telegramning serverida JSON shakida saqlanib turadi. Uni quyidagi manzil bo’yicha o’qishimiz mumkin: https://api.telegram.org/botAPI/getUpdates
Endi maqsadimiz botga kimdir nimadir yozganda u xabarni o’sha zaxotiyoq qayta ishlab egasiga yuborishimiz kerak bo’ladi. Buning uchun botimizga webhook tayinlaymiz, ya’ni botga nimadir yozilganda bot xabarni avtomatik tarzda o’sha manzilga json ko’rinishida yuboradi. Buning uchun https://api.telegram.org/bot[token]/setwebhook?url=[webhook] manzilini ishlatamiz.
Endi tayyor php scriptimizni hostingga yuklab uni bot orqali ishlatishga kiritamiz. Bot birorta web servis bilan xabar almashishi uchun o’rtadagi muloqot shifrlangan (himoyalangan) bo’lishi kerak ya’ni SSL sertifikat kerak bo’ladi. SSL sertifikat esa yaxshigina pul turadi. Bizni oldimizda Let's Encrypt dan bepul sertifikat olib o’rnatish yoki o’zimiz yaratishimiz yoki shunga o’xshash yo’llar turibdi. Men Let's Encryptdan sertifikat olib uni uzinfocomni oddiy hostinggiga sozlab botni ishlataman deganimda hosting bilan muammolar yuzaga keldi va boshqa yo’l izlashimga to’g’ri keldi. Izlanishlarim natijasida COMODO CA Limited tomonidan beriladigan bepul sertifikatli bepul hosting va bepul 3-darajali domen beradigan sayt/firma/tizim xullas “ajib bir narsa” chiqib qoldi )) Manzil quyidagicha: https://www.000webhost.com/ Uni tariflarini bizni hostingerlarimiz yaqin orada hayoliga ham keltira olishmaydi. Ex essiz uzcard bilan tulov qilib bo’lganda pulli tarifidan sotib olardim. Mayli xozircha bepul tarifini tanlab ro’yhatdan o’tamiz va o’zimizga yangi akkount ochamiz. Yangi akkount ochib unga yangi sayt ochishni tushuntirib o’tmayman, o’ylaymanki o’zingiz qila olasiz.
Yangi sayt ochganimizdan keyin unga ftp orqali fayllarimizni yuklaymiz. O'ylaymanki buni xam o'zingiz qila olasiz (jarayonni bajarishda muammolarga duch kelinsa bemalol murojaat qilishingiz mumkin)
Meni yuklagan faylim https://erkin.000webhostapp.com/tbot.php manzili bo’yicha joylashdi. Demak webhookni shu manzil bo’yicha sozlaymiz. Buning uchun brouzerimiz manzillar qatoriga quyidagini yozamiz va murojaat yuboramiz. (enterni bosamiz)
https://api.telegram.org/bot445482470:AAGNmQbhHZTOaqe2Aj9R9FY2lffqqCXRd94/setwebhook?url=https://erkin.000webhostapp.com/tbot.php
Natija ijobiy bo’lsa brouzerimizda quyidagicha natija chiqadi:
Rahmat aytdi (1): STRaKER,
Biriktirilgan fayllar [1]:
— screen_2.jpg (17.38 KB) (422 ↴)
— screen_2.jpg (17.38 KB) (422 ↴)
Endi Botfatherdan telegram orqali botimizni izoxini, rasmini va boshqa sozlamalarini o’zgaritirishimiz mumkin.
Tayyor bo’lgan bot: https://t.me/String2UTF8_bot
P.S. Anchadan beri maqola yozmagan edim. Xar xil joydan xar xil o’qigan ma’lumotlarim orqali yasagan botimni eslab ushbu maqolani yozdim. Xato va kamchiliklar bo’lsa uzur surayman va ular yuzasidan menga murojaat qilsangiz albatta to’g’irlash kiritib qo’yaman.
P.P.S Agar natijaviy scriptga optimizatsiya kiritmoqchi bo’lganlar bo’lsa fikrlaringizni kutib qolaman.
Manba: http://itex.uz/programming/108-php-dasturlash-tilida-telegram-bot-yozish.html
Tayyor bo’lgan bot: https://t.me/String2UTF8_bot
P.S. Anchadan beri maqola yozmagan edim. Xar xil joydan xar xil o’qigan ma’lumotlarim orqali yasagan botimni eslab ushbu maqolani yozdim. Xato va kamchiliklar bo’lsa uzur surayman va ular yuzasidan menga murojaat qilsangiz albatta to’g’irlash kiritib qo’yaman.
P.P.S Agar natijaviy scriptga optimizatsiya kiritmoqchi bo’lganlar bo’lsa fikrlaringizni kutib qolaman.
Manba: http://itex.uz/programming/108-php-dasturlash-tilida-telegram-bot-yozish.html
Savolim bor edi mavzuga oid masalan saytimiz johncmsda qurilgan !
Agar saytga misol kutubxonaga birorta yangi maqola yozilsa uni automatik botga yuboradigan qilsa boladimi ? Keyin , botni saytga ulashni toliq tushuntirib bering iltimos !?
.
Maqolangizni o'qib juda hursand boldim men izlagan maqola boldi maqolani tayyorlaganiz uchun raxmat !
Agar saytga misol kutubxonaga birorta yangi maqola yozilsa uni automatik botga yuboradigan qilsa boladimi ? Keyin , botni saytga ulashni toliq tushuntirib bering iltimos !?
.
Maqolangizni o'qib juda hursand boldim men izlagan maqola boldi maqolani tayyorlaganiz uchun raxmat !
MrShaXRuX, Telegramdan BOT va Guruh yaratib turavering maqola qilib yozishga harakat qilaman
Rahmat aytdi (1): MrShaXRuX,
Salom, menda ham kichik savol...
shu botga t.me/bizningbot?file_id=12 deb jo'natsek faylni idsini oddiy $_GET['file_id'] bilan olaveramizmi?
shu botga t.me/bizningbot?file_id=12 deb jo'natsek faylni idsini oddiy $_GET['file_id'] bilan olaveramizmi?
obbbooo, 000webhostdan narmalni ishlab turgan botim ishlame qoldiii, bu bu xosting bloklab qo'ydimikinaa? uxledigon paytimasuu o'zidan o'zi ikki kundan beri ishlame qoldiii
Aspiron, yok text hammasi joyida, adminlar birnima qilgan, biror faylni o'chirgan shekilli ishlamadi, keyin saytni o'chirib boshka ochdim 000webhostda mana ishlayapti @EnUz_bot - Inglizcha-O'zbekcha lug'at
STRaKER, shu botga t.me/bizningbot?file_id=12 deb jo'natsek faylni idsini oddiy $_GET['file_id'] bilan olaveramizmi?
shu gapizga javob yozgandim
shu gapizga javob yozgandim
Aspiron, aha tushunarli, men buni yo'lini topdim, bundey bo'larkan t.me/robot_bot/start=xxxx lekin uni ishi ko'p ekandaaa
CallbackQuery orqali qilinar ekan lekin hozi bu sdkda bunda ishlash qiyin ekan, kodlarni togri yozdim lekin ishlamayaptiii
Aspiron, # Aspiron (29.12.2017 / 22:57)
STRaKER, boshqasini topib ishlangkxeee boshqasi topib ishleng?
ee telegram apidan ko'ringchi callbackqueryni boshqa shunaqa funksiya bormikin
STRaKER, boshqasini topib ishlangkxeee boshqasi topib ishleng?
ee telegram apidan ko'ringchi callbackqueryni boshqa shunaqa funksiya bormikin
Tavsiya etamiz:
- Hoziroq maydonlarni to'ldiring va reklamangizni joylashtiring!
Mavzuga oid xabarlar soni: 71 ta
So'ngi faollik vaqti: 21:37:47, 16 Sep 2021