Ochiq
Yopish

Telegram api. Telegram API va undan foydalanish. Keling, kodlashni boshlaylik

  • Oʻquv qoʻllanma

Chat botlari - bu juda qiziq mavzu bo'lib, u ham geek ishqibozlarini, ham o'z mijozlari bilan o'zaro munosabatlarni ular uchun eng qulay tarzda tashkil qilishni xohlaydigan kompaniyalarni qiziqtiradi.


Bugun men sizga foydalanuvchi bilan salomlashadigan va ob-havo haqidagi savollarga javob beradigan API.AI suhbat interfeysi yaratish platformasidan foydalangan holda Telegram botini yaratishning oddiy misolini tasvirlab beraman. Ko'pincha men ushbu ko'rsatmalarga amal qildim, haqiqiy amaliyotda siz ob-havodan tashqariga chiqishingiz va interfeyslarni amalga oshirishingiz mumkin
avtomatlashtirilgan qo'llab-quvvatlash yoki sotish uchun.

Birinchi qadam: infratuzilmani tayyorlang.

Bunda biz faqat Telegram boti va API.AI dan foydalanamiz, ikkala xizmat ham bepul taqdim etiladi – biz qilishimiz kerak bo‘lgan yagona narsa akkaunt yaratish.

Telegram bot yarating

Bot yaratish uchun @BotFather yozing (bu boshqa botlarni yaratishi va sozlashi mumkin bo'lgan bot):

  1. /newbot buyrug'ini yuboring - biz @BotFatherga yangi bot kerakligini aytamiz
  2. Endi @BotFather bizdan yangi botga nom berishimizni so'raydi. Bu nomni bizning ko'rishimiz mumkin
    kelajakdagi foydalanuvchilar, shuning uchun ism aniq va sodda bo'lishi kerak.
  3. Oxirgi qadam bot uchun foydalanuvchi nomini ko'rsatishdir, uning oxirida siz kerak
    "bot" deb yozing.
  4. Agar ism olinmasa, biz tasdiqlash xabari va kirish tokenini olamiz.

Buni aniqroq qilish uchun quyida barcha harakatlar bilan skrinshot mavjud:

Bir oz nazariya

API.AI agentini yaratish vaqti keldi, u mohiyatan loyiha yoki konteyner (nima deb nomlashni xohlasangiz). Agent kontekstlar, ob'ektlar va javoblar uchun sozlamalarni o'z ichiga oladi:

  • "kontekst" (niyat) o‘rtasidagi bog‘liqlikni aks ettiradi foydalanuvchi nima dedi Va
    bular dasturimiz nima qilishi kerak
  • "shaxslar" uchun parametr qiymatlarini olish uchun vositadir
    bizning dasturimiz tabiiy tildan (nima aytilgan yoki yozilgan
    foydalanuvchi)
  • "javoblar” bu bizning dasturimizning yakuniy natijasidir
    foydalanuvchiga uning xabarini yuboring

Ba'zan joriy dialogdagi ma'lumotlar foydalanuvchiga javob berish uchun etarli bo'ladi, bu holda siz statikni o'rnatishingiz mumkin; javoblar V kontekstlar. Aslida, aniq javob olish uchun bizga tashqi xizmat yoki o'z biznes mantiqimiz kerak bo'lishi mumkin, masalan, ertangi kun uchun ob-havo haqida ma'lumot olish uchun tegishli xizmatning tashqi API-ga qo'ng'iroq qilishimiz kerak. Keyinchalik men sizga tashqi tizimlardan ma'lumotni qanday qabul qilishni aytaman, lekin birinchi navbatda, bazani tayyorlaylik.

API.AI da loyiha yarating

API.AI-da ro'yxatdan o'tish uchun sizga Google hisobi kerak bo'ladi (uni Gmail hisobingizga qo'shing). Endi https://api.ai/ saytiga o‘ting, “BEPUL RO‘YXATLANISH” tugmasini bosing va keyin siz nomidan tizimga kirmoqchi bo‘lgan hisobni tanlang.


Endi agentning o'zini yaratishga o'tamiz. "Agent yaratish" tugmasini bosing va kamida ism, til va vaqt zonasini belgilang.


Ikkinchi qadam: agentni o'rnating.

Kontekst foydalanuvchi aytgani va bizning agentimiz nima qilishi kerakligi o'rtasidagi munosabatni aks ettiradi. Bizning holatda, ob-havo prognozini ko'rib chiqing:


  1. "Kontekst" bo'limida ustiga bosing. Agent salomlashish va xatolar uchun "kontekst" ni allaqachon sozlagan; keling, ularni hozircha o'zgarishsiz qoldiraylik.
  2. "Kontekst" uchun ismni ko'rsating - har qanday ism, agar u sizga va sizning hamkasblaringizga tushunarli bo'lsa.
  3. "Foydalanuvchi aytadi" bo'limida foydalanuvchi so'rashi mumkin bo'lgan savollarga misollar keltiring. Biz ob-havo haqida gapirayotganimiz sababli, odam vaqt va joyga qarab savol berishi mumkin - buni hisobga olaylik. Sozlamalarda qancha ko'p misol keltirsangiz, agent shunchalik aniq ishlaydi. Men skrinshotda ba'zi misollar keltirdim:


Oxirgi misolda "ertaga" va "Nijniy Tagil" so'zlari turli xil ranglarda ta'kidlangan - shuning uchun so'zlar ob'ektlar bilan bog'langan ( Ob'ektlar) (bizning holatlarimizda tizim ob'ektlari). Ushbu parametrlardan foydalanib, agent qaysi shaharda va qaysi sanada ob-havoni tekshirish kerakligini "tushunadi".


Yana bir nechta misollaringizni qo'shing va "SAQLASH" tugmasini bosing.

Keling, sinab ko'raylik!

Keling, oddiy savollar yordamida agentning ish faoliyatini tekshiramiz, masalan, "Chorshanba kuni Permdagi ob-havo":



Shu vaqt ichida ekranning yuqori o'ng qismida "Hozir sinab ko'ring" yozuvi paydo bo'ldi - bu maydonga yozing yoki ob-havo haqida oddiy savol bering va "Enter" tugmasini bosing.


Biz hali avtomatik javobni sozlamadik, ammo agent allaqachon ba'zi parametrlarni aniqlashni o'rgangan! NIZMAT bo'limi agentning "fikri"ga ko'ra, foydalanuvchi ob-havoga (biz o'rnatgan "kontekst") qiziqishini aks ettiradi va PARAMETER tegishli o'zgaruvchilarda shaharning sanasi va nomini ko'rsatadi.

Avtomatik javoblarni qo'shing

Keling, agentimizni ko'proq suhbatdosh qilaylik! Ob-havo ma'lumotlarini tashqi manbalardan olishni o'rganmagunimizcha, javob sifatida oddiy iboralarni qo'shamiz.


"Javob" bo'limiga o'ting va "Foydalanuvchi javoblari" ni to'ldirganingizdek oddiy javoblarni kiriting:



Ko'rib turganingizdek, javoblarda aniqlangan ob'ektlarga havolalardan foydalanishingiz mumkin - va interfeys sizga ma'lum bir o'zgaruvchini tanlashni taklif qiladi.


Javobni yaratishda agent ma'lum ob'ektlar sonini hisobga oladi va ma'lumotlar etarli bo'lmagan javoblardan foydalanmaydi. Masalan, shahar ko'rsatilmagan savol uchun agent ikkinchi qatordagi javobdan foydalanadi.


Sozlamalarni saqlang va yana sinab ko'ring:



Endi bizda ham javob bor!

Uchinchi qadam: tashqi xizmatni qo'shing.

Bizning agentimiz foydalanuvchi qaysi hollarda ob-havo, qaysi sana va qaysi shaharda bo'lishini bilishni istayotganini allaqachon "tushunadi". Endi faqat tegishli xizmatdan ushbu ma'lumotlarni olish va agentga o'tkazish qoladi. Buni amalga oshirish uchun siz JS-da bir nechta skript yozishingiz va ularni bulut xizmatiga joylashtirishingiz kerak, bizning holatlarimizda Google Cloud Project.

Starter JS faylini yarating

Boshlash uchun loyihangiz nomi bilan katalog yarating va unga o'ting:

    Linux yoki Mac OS X:


    mkdir ~/
    cd ~/


    mkdir %HOMEPATH%
    CD %HOMEPATH%

Endi quyidagi tarkibga ega index.js faylini yarating:


index.js kodi

/* * HTTP bulutli funksiyasi. * * @param (Ob'ekt) Cloud Function so'rov kontekstini talab qiladi. * @param (ob'ekt) res Cloud Function javob konteksti. */ exports.itsm365Weather = itsm365Weather funksiyasi (talab, res) ( javob = "Bu sizning veb-hukingizdan namunali javob!" //Vebhukdan standart javob uning ishlayotganini ko'rsatish uchun res.setHeader("Content-Type", "application/json"); //Ilova/json MIME turini talab qiladi res.send(JSON.stringify(("speech": javob, "displayText": javob //"nutq" - javobning og'zaki versiyasi, "displayText " bu vizual versiya)));

Google Cloud loyihasini sozlang

  • Sozlamalarni qiling “Sizdan oldin
    boshlang” 1 dan 5 ballgacha
  • Konsolda ishga tushirish orqali funktsiyani bulutda joylashtiring:


    gcloud beta funksiyalari itsm365Weather --stage-bucket --trigger-http

bu yerda itsm365Weather funksiya nomi va saqlash nomidir
loyiha uchun ma'lumotlar.


Amaliyot tugallangandan so'ng, http trigger URL bilan natijani ko'rasiz:


API.AI da Webhook-ni yoqing

  1. To'g'ri agentda ekanligingizga ishonch hosil qiling va keyin "ni bosing. Bajarish” chap yashirish menyusida.
  2. Ekranning yuqori o'ng burchagida Webhook-ni yoqing.
  3. Oldingi bosqichda olingan URL manzilini kiriting.
  4. O'zgartirishlaringizni saqlang.

"Kontekst" sozlamalarida yangi funktsiyani bajarishni yoqing

  1. Ob-havo ma'lumotlarining "kontekst" sozlamalariga o'ting
  2. Blokni kengaytiring Bajarish sahifaning pastki qismida
  3. "Vebhukdan foydalanish" katagiga belgi qo'ying.
  4. Sozlamalarni saqlang va natijani tekshiring:

Ob-havo API-ni sozlang

Oddiylik uchun biz WWO (World Weather Online) xizmatidan foydalanamiz, bu erda siz API kalitini olishingiz kerak (faqat Facebook yoki Github orqali ro'yxatdan o'ting).


Ob-havo ma'lumotlarini olish uchun API kalitini kiritishni unutmang, boshlang'ich JS faylidagi kodni yangilang:


Ob-havo ma'lumoti xizmati uchun manba kodi

// Mualliflik huquqi 2017, Google, Inc. // Apache litsenziyasi, 2.0 versiyasi ("Litsenziya") ostida litsenziyalangan; // Siz ushbu fayldan Litsenziyaga muvofiq foydalana olmaysiz. // Litsenziyaning nusxasini quyidagi manzildan olishingiz mumkin // // http://www.apache.org/licenses/LICENSE-2.0 // // Agar amaldagi qonunchilik talab qilmasa yoki yozma ravishda kelishilmagan bo'lsa, dasturiy ta'minot // taqsimlanadi. Litsenziya "XAMDA" ASOSIDA, // KAFOLATLAR YOKI SHARTLARSIZ, aniq yoki nazarda tutilgan holda tarqatiladi. // Litsenziya ostidagi ruxsatlar va // cheklovlarni boshqaradigan maxsus til uchun Litsenziyaga qarang. "qat'iy foydalaning"; const http = talab ("http"); const host = "api.worldweatheronline.com"; const wwoApiKey = "98cfb8e40ecc47c4a2f205209172608"; exports.itsm365Weather = (req, res) => ( // So'rovdan shahar va sanani oling, shahar = req.body.result.parameters["geo-city"]; // shahar - bu zarur parametr // Oling ob-havo ma'lumoti uchun sana (agar mavjud bo'lsa) let sana = ""; agar (req.body.result.parameters["date"]) ( sana = req.body.result.parameters["date"]; console.log ("Sana: " + sana ) // ob-havo API chaqiruvi WeatherApi(shahar, sana).then((chiqish) => ( // API.AI res.setHeader("Content) uchun ob-havo ma'lumotlari natijalarini qaytarish -Type", "application/json"); res.send(JSON.stringify(( "speech": output, "displayText": output ))); )).catch((xato) => ( // Agar mavjud bo'lsa bu xatolik foydalanuvchiga xabar beradi res.setHeader("Content-Type", "application/json"); funktsiya callWeatherApi (shahar, sana) ( yangi va'dani qaytarish ((hal qilish, rad etish) => ( // Ob-havo ruxsat berish yo'lini olish uchun HTTP so'rovi uchun yo'l yarating = "/premium/v1/weather.ashx?format=json&num_of_days= 1" + "&q=" + encodeURIComponent(shahar) + "&key=" + wwoApiKey + "&date=" + sana + "&lang=ru"; console.log("API so'rovi: " + xost + yo'l); // Ob-havo ma'lumotlarini olish uchun HTTP so'rovini qiling http.get((host: host, path: path), (res) => ( let body = ""; // var javob qismlarini saqlash uchun res.on("data", (d) => ( body += d; )); // har bir javob qismini saqlash res.on("end", () => ( // Barcha ma'lumotlar olingandan so'ng, kerakli ma'lumot uchun JSON-ni tahlil qiling. = JSON.parse(body); let prognoz = respond["data"]["weather"] let location = respond["data"]["request"]; ["value"] // Javob yaratish let output = `On $(forecast["date"]) in $(location["query"]) $(currentConditions) , havo harorati $(forecast["mintempC"]; )°C dan $(prognoz["maxtempC"])°C gacha. `; // va'dani chiqish matni bilan hal qiling console.log(output); hal qilish (chiqish); ))) res.on("xato", (xato) => ( rad etish(xato); )); ))) ))) )


Funktsiyani bulut loyihasiga qayta joylashtiring.

To'rtinchi qadam: Dialog filiallarini sozlash

Foydalanuvchi bilan muloqotda bo'lganimizda, u bizga birinchi xabarda darhol tashqi xizmatda javob tayyorlash uchun zarur bo'lgan barcha ma'lumotlarni taqdim etishiga ishonchimiz komil emas. Bizning misolimizda, prognozni olish uchun xizmatga sana va shahar kerak bo'ladi. Agar sana noma'lum bo'lsa, foydalanuvchi "bugun" degan ma'noni anglatadi deb ishonch bilan taxmin qilishimiz mumkin, ammo biz shahar haqida faqat foydalanuvchining o'zidan bilib olamiz.

"Joylashuv" ni kerakli parametrga aylantiring


"Ob-havo ma'lumoti" kontekst sozlamalarini oching va kerak bo'lganda geo-shahar parametrini belgilang. Keyin "Ko'rsatmalar" ustunidagi havoladan foydalanib, aniqlovchi savolni o'rnating.


Sozlamalarni saqlang va oddiy ob-havo savolini berish orqali agentning xatti-harakatlarini tekshiring:



Agent bizga aniq savol berdi, konsolda oqim parametrlari ko'rsatiladi
vaziyatlar.

Joylashuv uchun qaytaruvchi aniqlagich yarating

Oldingi foydalanuvchi sayohatlaridan olingan ma'lumotlardan foydalanish uchun siz tegishli tuzatishlarni sozlashingiz kerak bo'ladi.



"Ob-havo prognozi" kontekst sozlamalarida "Chiqish kontekstini qo'shish" maydoniga qaytarilgan tushuntirish "joylashuvi" nomini kiriting va sozlamalarni saqlang.

Tushuntirish uchun yangi kontekst yarating

Agar foydalanuvchi qaysi shaharni nazarda tutayotganini so'ramasdan bir xil joylashuv haqida bir nechta savol berishingiz mumkin bo'lsa, bu qulay. Kuzatuv savollarini qayta ishlash uchun foydalanishingiz mumkin bo'lgan qaytish malakasini allaqachon sozlagansiz.


  1. Bo'limda yangi kontekst yarating Niyatlar yoki qatordagi belgini bosing
    Niyatlar chap ochiladigan menyu.
  2. Yangi kontekstni "Ob-havo yangilanishi" deb nomlang (yoki sizga mantiqiy bo'lgan boshqa nom).
  3. Kiruvchi va chiquvchi qayta ishlovchilarni "joylashuv" ga o'rnating
  4. Foydalanuvchi izohlarini qo'shing, masalan, "Ertaga nima bo'ladi?"
  5. Quyidagi qiymatlarga ega ob'ekt parametrini qo'shing:
    - Parametr nomi:
    geo-shahar
    - Qiymat:#location.geo-city
  6. "Bo'limiga foydalanuvchi uchun javob qo'shing Javob”:
    - “Kechirasiz, lekin men #location.geo-city saytida $date-period prognozini ololmayapman”
  7. Foydalanishni yoqish webhook menyuda Bajarish.
  8. Sozlamalarni saqlang va konsolda sinab ko'ring:

Beshinchi qadam: Salomlashish va kutilmagan vaziyatlarni hal qilish

Agentning asosiy skeleti tayyor, endi robot yasash yaxshi fikr
foydalanuvchi bilan salomlashdi va kutilmagan savollarga qanday javob berishni ham bilardi.

Kutilmagan vaziyatlar uchun standart javoblarni o'rnating

Agar foydalanuvchi kutilmagan savol bersa (bizning holatda ob-havo haqida emas), agent kutilmagan vaziyatlarni hal qilish uchun kontekstni o'z ichiga oladi ( Standart orqaga qaytish niyati):



Ushbu kontekstni sozlashga o'ting, agar kerak bo'lsa, javob variantlarini sozlang.

Salomlashish kontekstini sozlang

Tabriknoma shunga o'xshash tarzda mos keladigan tarkibda sozlanishi mumkin -
Birlamchi xush kelibsiz niyat


Oltinchi qadam: Botni ishga tushiring

Telegram botini agentga ulang

"Integratsiya" sozlamalariga o'ting va bo'limda botni yoqing
"Bir marta bosish bilan integratsiya":



@botFather dan olgan tokenni “Telegram tokeni” maydoniga nusxalang va
START tugmasini bosing.

Botning ishlashini tekshiring

Botingizga o'ting va unga biror narsa yozishga harakat qiling, mening holimda bu
@itsm365_weather_bot (Men bepul ob-havo hisoblaridan foydalanganman, shuning uchun kuniga 500 ta so'rovdan keyin bot qovoqqa aylanadi).


Xulosa

API.AI allaqachon messenjerlarda interaktiv interfeyslarni yaratish va ijtimoiy tarmoqlar bilan suhbatlarni qo'llab-quvvatlash uchun ishlatilishi mumkin. Asbob sizning xizmatlaringiz bilan osongina birlashtirilishi mumkinligini hisobga olsak, bu sizning foydalanuvchilaringiz bilan muloqotni avtomatlashtirish uchun qulay vositadir.


P.S. Bu mening birinchi postim, konstruktiv fikr-mulohazalaringiz uchun minnatdorman!

Teglar:

  • api.ai
  • telegramma
  • telegram botlari
Teglar qo'shing

Telegram-da xabarlarni yuborishni qanday sozlash haqida bir necha so'z (va siz dasturlashingiz shart emas, albatta).

Ushbu maqola uchun men boshqa bot yaratdim va API kalitlarini ham yashirmayman, chunki... Men unga achinmayman. O'qiyotganingizda, siz undan foydalanishingiz mumkin, garchi men sizga o'z botingizni yaratishni va API kalitlarini hech kimga bermaslikni maslahat beraman.

Bot yaratish

Shunday qilib, siz qilishingiz kerak bo'lgan birinchi narsa - bot yaratish. Buning uchun kontaktlar ro‘yxatidan @BotFather ni toping. Bu Telegram'dan maxsus bot bo'lib, u botlarni yaratish uchun kerak. Bunday holda, men web.telegram.org dan foydalanaman, bu qulay, telefoningizdan kompyuteringizga hech narsa o'tkazishingiz shart emas.

@BotFather toping va unga uchta buyruq yuboring: /newBot (aynan skrinshotdagi kabi yozing) va yangi bot nomini ikki marta belgilang. Bot nomi "bot" bilan tugashi muhim - bu talablar.

Shundan so'ng, BotFather sizga hamma narsa yaxshi ekanligini aytadi va keyinroq kerak bo'ladigan API kalitini qaytaradi. Tajribalar uchun hozircha siz mening kalitimni olishingiz mumkin - 515479662:AAF1wTj2Xcb3HVURbc_5DbZ9qiz4ddds9iQ.

Ulanish

Endi, kontaktlar ro'yxatida o'zingiz yaratgan botni nomi bilan toping (mening holimda, BablofilDemoBot) va boshlash tugmasini bosing. Bu muhim, chunki Botning o'zi odamlarga o'zini yuklay olmaydi.

Shundan so'ng, ushbu havolani brauzeringizda oching

(botingiz uchun API kalitini oʻzingiz bilan almashtiring, masalan https://api.telegram.org/bot APIAPIAPIAPIAPI/getUpdates). Siz taxminan skrinshotdagi kabi ko'rishingiz kerak - botning oxirgi faoliyati - kim ulangan, kim nima yozgan va hokazo. Agar u bo'sh bo'lsa, botga telegrammada qandaydir bema'ni narsalarni yozing va sahifani yangilang. Sizning yakuniy maqsadingiz chat_id ni topishdir

Men nimani topishingiz kerakligini ta'kidladim. DIQQAT - agar siz mening botimdan foydalansangiz, uni har kim ulashi mumkinligini yodda tuting, shunda siz boshqa birovning chat_id ni topishingiz mumkin - bu yerda taxallusingiz qayd etilganligiga ishonch hosil qiling. Yaxshisi, alohida bot oling) Aks holda, har kim sizga bot nomidan yozishi mumkin - API kalitlari hammaga ma'lum.

Xabar yuborilmoqda

Ushbu bosqichda siz API kaliti va chat_id-ni bilasiz. Faqat xabar yozish qoladi.

Shunga ko'ra, API, chat_id va xabar matnini o'zingizniki bilan almashtiring. Men PING so'zini bot xabari sifatida yuboryapman.

https://api.telegram.org/bot APIAPIAPI/sendMessage?chat_id= CHATID&matn= MATN

Aaaand... Bot sizga telegramda xabar yuboradi.

Xo'sh, endi, agar siz o'zingizga yoki guruhga xabar yubormoqchi bo'lsangiz (ha, agar siz guruhga kirmoqchi bo'lsangiz, botni guruhga qo'shing va yana chat_id-ni oling, faqat bu safar guruh uchun) skriptni oching, so'ngra quyidagi kod yordamida havolani torting:

import urllib.request urllib. iltimos. urlopen(""" https://api.telegram.org/bot(API_TOKEN)/sendMessage?chat_id=(CHAT_ID)&text=(TEXT)""" formati (API_TOKEN = "515479662:AAF1wTj2Xcb3HVURbc_5DbZ9qiz4ddds9iQ", CHAT_ID = "303964420" , TEXT = "TEST TEST TEST" ))

Telegram so'nggi paytlarda hammaning og'zida. Biz ushbu ilovaning marketing bo'limiga kredit berishimiz kerak, ular katta shov-shuv yaratdilar. Telegram’ning asosiy xususiyatlaridan biri uning taxminiy xavfsizligi – Pavel Durovning so‘zlariga ko‘ra, foydalanuvchilar o‘rtasidagi barcha yozishmalar shifrlangan. Bundan tashqari, dunyodagi hech bir razvedka xizmati sizning xabarlaringizga kira olmaydi. Ammo bu maqola bu haqda emas. Bugun men Telegram-dagi bir xil ajoyib xususiyat, ya'ni botlar haqida gapirmoqchiman. Tarmoq har xil turdagi Telegram botlari (masalan, github bot) haqida ma’lumotlarga to‘lib ketganidan tashqari, messenjer ishlab chiquvchilar uchun o‘z API’sini ochdi va endi har bir kishi blackjack va bonuslar bilan o‘z botini yaratishi mumkin.

Ushbu maqolada men Python va Django ramkalaridan foydalangan holda onlayn bot yozishga misol keltiraman. Ya'ni, biz masofaviy xostda ishlaydigan va foydalanuvchilardan buyruqlarni qabul qiladigan to'liq huquqli veb-ilovani yaratamiz. Barcha manba kodi mening github omborimda mavjud.

Telegram botlari bilan ishlash jarayonini tavsiflovchi hujjatlar joylashgan. G'ildirakni qayta ixtiro qilmaslik uchun men botlarning barcha asosiy funktsiyalarini - telepotni amalga oshiradigan yaxshi Python kutubxonasini topdim. Yuqorida aytib o'tganimdek, botimiz foydalanuvchilariga xizmat ko'rsatish uchun biz Django ramkasidan foydalangan holda veb-ilovani ishlab chiqamiz.

Telegram botini qanday yaratish mumkin?

Birinchidan, Telegram’da bo‘lajak botimizni ro‘yxatdan o‘tkazishimiz kerak. Bu quyidagicha amalga oshiriladi:

  • Telefoningiz yoki kompyuteringizga Telegram ilovasini o'rnatishingiz kerak. Ilovani yuklab olishingiz mumkin
  • Kontaktlar ro'yxatiga ismli bot qo'shing BotFather
  • Biz tugmani bosish orqali bot bilan "muloqot" protsedurasini boshlaymiz Boshlash. Keyinchalik, biz skrinshotdagi kabi buyruqlar ro'yxatini ko'ramiz.
  • Yangi bot yaratish uchun siz buyruqni bajarishingiz kerak / newbot va ko'rsatmalarga rioya qiling. shu esta tutilsinki bot uchun foydalanuvchi nomi har doim oxirida bot so'zini o'z ichiga olishi kerak. Masalan, DjangoBot yoki Django_bot.

  • Bizning botimiz uchun men PythonPlanetBot nomini tanladim, chunki uning asosiy vazifasi Python Planet veb-saytining RSS tasmasini tahlil qilish va foydalanuvchiga so'nggi xabarlar haqida ma'lumot berish :)

Botni yaratgandan so'ng, matnli qatorga e'tibor bering:

HTTP API ga kirish uchun ushbu tokendan foydalaning:

deb atalmish tomonidan ta'qib biz botimizni boshqaradigan token. Telegram bot yaratish funksiyasidan tashqari BotFather ham bir qator boshqa xususiyatlarga ega:

  • Botga tavsif bering
  • Avatarni o'rnating
  • Tokenni o'zgartirish

Keling, kodlashni boshlaylik

Yuqorida aytib o'tganimdek, biz yozamiz Django veb-ilovasi. Ammo shuni ta'kidlash kerakki, bu kerak emas. Oddiy Python skripti bilan ishlashingiz mumkin, ammo bu holda siz bot foydalanuvchilarining yangi so'rovlari uchun vaqti-vaqti bilan Telegram orqali so'rov o'tkazishingiz kerak bo'ladi (usul yordamida). getUpdates) va takrorlanmasdan so'nggi ma'lumotlarni olish uchun ofsetni oshirish. Telegram-da sizning botingiz uchun buyruqlar/xabarlarni qabul qilishning ikkita o'zaro eksklyuziv usuli mavjud.

  • API usuli chaqiruvidan foydalanish getUpdates
  • Webhook o'rnatish

Webhookni sozlash botga har safar kimdir botga xabar yuborishni boshlaganida POST so'rovi yuboriladigan maxsus URL manzilini o'tkazishni o'z ichiga oladi. Bu biz bot va uning foydalanuvchisi o'rtasidagi o'zaro aloqa uchun foydalanamiz. URL manzilini o'rnatish uchun siz API usulidan foydalanishingiz kerak setWebhook. Shuni ta'kidlaymanki, URL https bilan boshlanishi kerak, ya'ni haqiqiy sertifikat bilan xavfsiz SSL ulanishiga ega bo'lishi kerak. Telegram sizga o'z-o'zidan imzolangan sertifikatdan foydalanishga imkon beradi, garchi bu usulni talab qiladi setWebhook ochiq kalitni PEM formatida ham uzatadi (ASCII base64). Yoki uni Let's Encrypt-dan olishingiz mumkin.

haqida ko'proq o'qing getUpdates Va setWebhook mos ravishda o'qilishi mumkin va .

Shunday qilib, keling, Telegram bilan ishlash uchun python kutubxonasiga qaytaylik - telepot. Hozirda uning so'nggi versiyasi 6.7. Uni python virtualenv virtual muhitiga o'rnating:

Pip o'rnatish telepot

Python-da Telegram bot bilan ishlashning eng oddiy usuli quyidagicha:

Import telepot token = "123456" TelegramBot = telepot.Bot(token) TelegramBot.getMe()ni chop eting

Token o'zgaruvchisiga BotFather orqali bot yaratishda qabul qilingan tokenning qiymati tayinlanadi. Natijada, ushbu buyruqlarni bajargandan so'ng, biz quyidagilarni olamiz:

(u"foydalanuvchi nomi": u"PythonPlanetBot", u"first_name": u"Python Planet Bot", u"id": 199266571)

Tabriklaymiz! Biz eng oddiy API so'rovini getMe deb nomladik, u bot haqida ma'lumotni qaytaradi: foydalanuvchi nomi, identifikatori, familiyasi.

Keling, botimizni kontaktlar ro'yxatiga qo'shamiz va unga birinchi standart buyruqni yuboramiz / start

Keling, kodni ishga tushiramiz:

TelegramBot.getUpdates() [(u"xabar": (u"sana": 1459927254, u"matn": u"/start", u"from": (u"foydalanuvchi nomi": u"adilkash", u"first_name ": u"Odil", u"id": 31337), u"message_id": 1, u"chat": (u"username": u"adilkash", u"first_name": u"Odil", u" type": u"private", u"id": 7350)), u"update_id": 649179764)]

Telegram boti bilan aloqa qilish jarayoni HTTPS orqali amalga oshiriladi; JSON ma'lumotlarni uzatish uchun ishlatiladi. Usul getUpdates Yangilash tipidagi ob'ektlar ro'yxatini/massivni qaytaradi. Inside Update - bu Xabar obyekti. Bot bilan standart o‘zaro aloqada bo‘lish uchun biz aslida Message ob’ektiga qiziqamiz, undan biz botga yuborilgan matnni saqlaydigan matn atributini va Telegram’imiz bilan suhbatni boshlagan foydalanuvchi haqidagi ma’lumotlarni o‘z ichiga olgan chat obyektini o‘qiymiz. bot. GetUpdates usulini chaqirganda ofset parametri sifatida xizmat qiluvchi update_id parametri ham mavjud. Ya'ni, update_id+1 oxirgi update_iddan keyin olingan barcha xabarlarni qaytaradi, oldingi barcha xabarlar esa o'chiriladi.

TelegramBot.getUpdates(649179764+1) [(u"xabar": (u"date": 1459928527, u"matn": u"salom aka", u"from": (u"foydalanuvchi nomi": u"adilkash", u"first_name": u"Odil", u"id": 31337), u"message_id": 13, u"chat": (u"username": u"adilkash", u"first_name": u"Odil" , u"type": u"private", u"id": 7350)), u"update_id": 649179765)]

Eng oddiy Telegram botini yozish bosqichida bu qo'ng'iroqlar biz uchun yetarli. Keling, foydalanuvchilarga xizmat ko'rsatish uchun Django ilovasini yozishni boshlaylik.

Oddiy Planet Python RSS tasmasini tahlil qilish funksiyasi shunday ko'rinadi.

Telegrammalarning rivojlanishi asosan ko'p sonli botlarning mavjudligi bilan belgilanadi - kichik xizmat robot dasturlari. Ularni o'rta darajada dasturlash bilan tanish bo'lgan har qanday foydalanuvchi yaratishi mumkin. Telegram API Bot - bu o'z botingizni dasturlash imkonini beruvchi dasturiy interfeys.

API Telegram boti harakatini sozlash uchun mo'ljallangan ob'ektlar va buyruqlarni o'z ichiga oladi. Interfeys yordamida siz Telegram’da ishga tushirilganda botlar kabi ishlay boshlaydigan o‘z dastur kodlaringizni yaratishingiz mumkin.

Boshqaruv

Bot Telegram API-da barcha boshqaruv elementlari JSON-da, ya'ni ma'lum qoidalarga muvofiq belgilangan qator sifatida taqdim etilgan ob'ektlardir. Bu sizga imkon qadar tezroq va eng kam xarajat bilan tarmoq orqali ma'lumotlarni almashish imkonini beradi, chunki u uzatiladigan dastur kodi emas, balki matn ko'rinishidagi kalit: qiymat juftliklari to'plamidir. Jadvalda barcha API turlari ko'rsatilgan. Ko'pgina ob'ektlar bot buyruqlarini yaratish uchun mo'ljallangan. Kalitlar ob'ektning imkoniyatlari haqida kengroq tushuncha beradi.

Ism Tavsif Kalitlar
Foydalanuvchi Telegramdagi foydalanuvchi id
ism
familiya
foydalanuvchi nomi
Chat Chat id
turi
sarlavha
foydalanuvchi nomi
ism
familiya
barcha_a'zolar_administratorlar
Xabar Xabar message_id
dan
sana
suhbat
oldinga_
oldinga_sana
xabarga_javob
matn
sub'ektlar
audio
hujjat
fotosurat
stiker
video
ovoz
sarlavha
aloqa
Manzil
joy
yangi_chat_a'zosi
chap_chat_a'zosi
yangi_chat_sarlavhasi
yangi_chat_foto
o'chirish_chat_foto
guruh_chat_yaratilgan
superguruh_chat_yaratilgan
kanal_chat_yaratilgan
chat_idga_ko'chirish
chat_iddan_migrate
pinned_xabar
MessageEntity Matnli xabardagi alohida ob'ekt (heshteg, havola va boshqalar) turi
uzunligi
url
ofset
Fotosurat oʻlchami Berilgan o'lchamdagi rasm yoki fotosurat, fayl yoki stikerning oldindan ko'rishi file_id
kengligi
balandlik
fayl_sizi
Audio Audio yozib olish file_id
davomiyligi
ijrochi
sarlavha
mime_turi
fayl_sizi
Hujjat Tasvir, audio yozuv yoki ovozli yozuv bo'lmagan har qanday fayl file_id
bosh barmog'i
Fayl nomi
mime_turi
fayl_sizi
Stiker Stiker file_id
kengligi
balandlik
bosh barmog'i
fayl_sizi
Video Video yozib olish file_id
kengligi
balandlik
davomiyligi
bosh barmog'i
mime_turi
fayl_sizi
Ovoz Ovozli xabar file_id
davomiyligi
mime_turi
fayl_sizi
Aloqa Telefon aloqasi telefon raqami
ism
familiya
Foydalanuvchi IDsi
Manzil Xaritadagi nuqta uzunlik
kenglik
Joy Xaritadagi ob'ekt Manzil
sarlavha
manzil
foursquare_id
UserProfilePhotos Foydalanuvchi profili fotosurati jami_son
fotosuratlar
Fayl Fayl yuklab olishga tayyor file_id
fayl_sizi
file_path
ReplyKeyboardMarkup Javob varianti bilan klaviatura klaviatura
o'lchamini_klaviatura
bir martalik_klaviatura
selektiv
Klaviatura tugmasi Javob berish uchun klaviatura tugmasi matn
so'rov_aloqa
so'rov_joylashuvi
ReplyKeyboardHide Bot klaviaturasini standart Telegram klaviaturasi bilan almashtiradi yashirin_klaviatura
selektiv
InlineKeyboardMarkup Xabar ostida paydo bo'ladigan o'rnatilgan klaviatura inline_klaviatura
Inline klaviatura tugmasi O'rnatilgan klaviaturada bitta tugma matn
url
qayta qo'ng'iroq qilish_ma'lumotlari
switch_inline_query
switch_inline_query_current_chat
qayta qo'ng'iroq qilish_o'yin
Qayta qo'ng'iroq so'rovi Belgilangan callback_data parametri bilan o'rnatilgan tugma uchun kiruvchi fikr-mulohaza so'rovi id
dan
xabar
inline_xabar_identifikatori
ma'lumotlar
ForceReply Foydalanuvchi harakatlarini taqlid qiladi: xabarni tanlash va “Javob berish” tugmasini bosish majbur_javob
selektiv
ResponseParameters Nima uchun so'rov muvaffaqiyatli bajarilmagani haqida xabar beradi chat_idga_ko'chirish
qayta urinib ko'ring

Xabarchi tomonidan yuborilgan natija qatorlari bir xil API ob'ektlari sifatida taqdim etiladi.

Xabarlar so'rovlar shaklida almashiladi. Quyidagi jadvalda ulardan ba'zilariga misollar keltirilgan.

Barcha usullar (va ularning ko'pi bor) guruhlarga bo'lingan:

  1. Yangilanishlar va ma'lumotlarni oling.
  2. Chat ishi.
  3. Turli xil narsalarni yuborish.
  4. Stikerlar bilan ishlash.
  5. Xabarlarni yangilash.
  6. Inline rejimi.
  7. To'lov funksiyasi.
  8. O'yinlar uchun.

Telegram Bot API-ning rus tilidagi to‘liq hujjatlari hozircha mavjud emas. Biroq, Google Chrome brauzeridagi standart tarjima ishni mukammal bajaradi.

Dasturlash tillari

Telegram API ko'plab dasturlash tillari tomonidan qo'llab-quvvatlanadi. Bu ijodkorga tanlash imkoniyatini beradi.

JavaScript-ni sevuvchilar Node.js Telegram Bot API-dan foydalanishlari mumkin. Bu erda sizga nafaqat tilni bilish, balki mijoz tilini to'liq huquqli server interfeysiga aylantirgan ushbu ramka bilan ishlash qobiliyati ham kerak.

Telegram Bot API yordamida botlarni yozish uchun eng mashhurlaridan biri bu PHP. Bu til dastlab server tomonida veb-ilovalarni yaratish uchun mo'ljallangan edi. Bu oddiy, mantiqiy va veb-muhit uchun maxsus mo'ljallangan.

Python-da Telegram Bot API tez-tez ishlatiladi. Bu til minimalist va o'rganish juda oson. Uning ishlashi tufayli juda mashhur.
Klassik - bu C++ da Telegram Bot API-dan foydalanish. Tilni oddiy deb atash mumkin emas, lekin bu yuqorida sanab o'tilgan barcha boshqa tillar yaratilgan asosdir. Shunga ko'ra, u muayyan ixtisoslikni o'z ichiga olmaydi. Asboblar har qanday dasturni yaratishga imkon beradi.

Foydalanish misoli

Ob'ektlarga qo'shimcha ravishda, API sizga xabarlar, fayl, fotosurat stikerlari, tahrirlash va boshqa ko'p narsalarni yuborish imkonini beruvchi usullar to'plamiga ega. Ushbu buyruqlarning barchasini rasmiy veb-saytdagi API tavsifida topish mumkin.

Telegramda @Botfather yaratish uchun maxsus xizmat mavjud. Unga kiring va yangi robot yaratilgan buyruqlar to'plamini ko'ring. Boshlash uchun /newbot buyrug'ini kiriting. Keyin, foydalanuvchi nomi va sarlavhani ketma-ket kiriting. Ikkinchisi har doim "bot" bilan tugaydi. Ular sizga token (identifikator) yuborganlaridan so'ng, yangi bot yaratiladi. Avtorizatsiya token orqali amalga oshiriladi. Dasturni Telegram’da ishga tushirish uchun o‘z fikringizni toping va “Boshlash” tugmasini bosing. Bu oldindan belgilangan /start buyrug'ini ishga tushiradi. Shuningdek, /settings va /help buyruqlari har bir robot uchun ajratilgan.

Barcha so'rovlar quyidagicha ko'rinadi:

https://api.telegram.org/bot /TEAM

Ariza topshirishning 4 usuli mavjud:

  1. URL manzilida so'rov
  2. ilova/x-www-form-urlencoded
  3. application/json (fayllarni yuklash uchun mos emas)
  4. ko'p qismli/forma-ma'lumotlar (fayllarni yuklash uchun)

GET va POST so'rovlari mavjud.

API buyruqlarini sinab ko'rishning eng oson yo'li brauzeringizdagi manzillar satrida. Veb-versiyada yoki mobil qurilmadan botingizga kiring. Keyin brauzeringizda buyruqni kiriting:

https://api.telegram.org/bot507226896:AAGT_fsEfg1milOkqbNp-VolQDJ0tGjaPvD7/getUpdates

Natijada, oynada JSON satri paydo bo'ladi

("ok": rost, "natija":[("update_id":231886689,
"message":("message_id":3,"from":("id":391911270,"is_bot":false,"first_name":"Irina","familiya":"12345678","til_kodi":"ru "),,"chat":("id":391911270,"first_name":"Irina","familiya":"12345678","turi":"xususiy"),"sana":1514900431,"matn": " \u044b\u0443\u0442\u0430\u043b\u043e\u0430\u043c\u0440"))])

Parametr chat":("id - chat identifikatori. Keyin qatorni kiriting:

https://api.telegram.org/ bot507226896:AAGT_fsEfg1milOkqbNp-VolQDJ0tGjaPvD7/sendMessage?chat_id=391911270&text=Salom

Brauzerda chiziq paydo bo'ladi

("ok":true,"result":("message_id":4,"from":("id":507226896,"is_bot":true,"first_name":"Anna","username":"Annatuola_bot" ),"chat":("id":391911270,"first_name":"Irina","familiya":"12345678","type":"private"),"sana":1514900499,"matn":"Salom "))

Telegram chatida esa yaratilgan robotning salomini ko‘rasiz.

Ko'rib turganingizdek, noldan yangi Telegram elementini yaratish qiyin emas. Qiyinchiliklar dasturlash vaqtida boshlanadi, ammo biz bu haqda boshqa maqolalarda gaplashamiz.