Телеграм бот у Пајтону. Комплетан водич за писање бота са курсевима од нуле

Ботови у Телеграму су програми који помажу у успостављању контакта са публиком или поједностављују радње које су се раније морале изводити ручно. Ови програми су написани посебно за месинџер платформу. Ботови раде на овај начин: корисник шаље команду кроз линију за унос, а систем одговара текстуалном или интерактивном поруком. Понекад програм чак имитира радње стварне особе - такав бот изазива више поверења међу купцима.

Постоји неколико врста система за аутоматску помоћ корисницима. Неки ботови само комуницирају са купцима, други редовно пружају информације. Немогуће је јасно поделити програме на типове - програмери често комбинују неколико функција у једном боту.

Можете написати једноставан бот за Телеграм са интерактивним елементима у облику дугмади на екрану у 9 корака. Погледајмо сваки од њих детаљно и одговоримо на неколико питања:

  • како покренути бот;
  • како регистровати уграђену тастатуру са једног или више тастера;
  • како програмирати дугмад за жељене функције;
  • шта је инлине режим и како га подесити за постојећег бота.

Корак 0: теоријска позадина о АПИ-ју за Телеграм ботове

Главни алат који се користи за креирање Телеграм ботова је ХТМЛ Апплицатион Программинг Интерфаце, или ХТМЛ АПИ. Овај елемент прихвата захтеве посетилаца и шаље одговоре у облику информација. Готови дизајни поједностављују рад на програму. Да бисте написали бота за Телеграм, потребно је да користите ову адресу е-поште: хттпс://апи.телеграм.орг/бот/МЕТХОД_НАМЕ

За исправно функционисање бота потребан је и токен – комбинација знакова која штити програм и отвара приступ њему поузданим програмерима. Сваки токен је јединствен. Стринг се додељује боту приликом креирања. Методе могу бити различите: гетУпдатес, гетЦхат и други. Избор методе зависи од тога који алгоритам програмери очекују од бота. Пример токена:

123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Ботови користе ГЕТ и ПОСТ захтеве. Параметри методе често морају да се допуњују – на пример, када метод сендМессаге треба да пошаље ИД за ћаскање и неки текст. Параметри за прецизирање метода могу се пренети као стринг УРЛ упита користећи апплицатион/к-ввв-форм-урленцодед или преко апплицатион-јсон. Ове методе нису погодне за преузимање датотека. Такође је потребно УТФ-8 кодирање. Слањем захтева АПИ-ју можете добити резултат у ЈСОН формату. Погледајте одговор програма на преузимање информација путем гетМЕ методе:

ПРЕУЗМИТЕ хттпс://апи.телеграм.орг/бот/гетМе{ ок: истина, резултат: { ид: 231757398, фирст_наме: "Бот за девизни курс", корисничко име: "екцхангетестбот" } }

Резултат ће се добити ако ok једнако прави. У супротном, систем ће показати грешку.

Постоје два начина да добијете прилагођене поруке у ботовима. Обе методе су ефикасне, али су погодне у различитим случајевима. Да бисте добијали поруке, можете ручно да напишете захтев методом гетУпдатес – програм ће приказати низ података за ажурирање на екрану. Захтеви се морају слати редовно, након анализе сваког низа, слање се понавља. Оффсет је параметар који одређује број прескочених записа пре учитавања новог резултата да би се избегло поновно појављивање проверених објеката. Предности методе гетУпдатес ће доћи у обзир ако:

  • не постоји начин да се конфигурише ХТТПС;
  • користе се сложени скриптни језици;
  • бот сервер се мења с времена на време;
  • бот је напуњен корисницима.

Други метод који се може написати за примање корисничких порука је сетВебхоок. Користи се једном, нема потребе да се стално шаљу нови захтеви. Веб-хук шаље ажурирања података на наведени УРЛ. Овај метод захтева ССЛ сертификат. Вебхоок ће бити користан у овим случајевима:

  • користе се веб програмски језици;
  • бот није преоптерећен, нема превише корисника;
  • сервер се не мења, програм остаје на истом серверу дуго времена.

У даљим упутствима користићемо гетУпдатес.

Услуга @БотФатхер Телеграм је дизајнирана да креира ботове за ћаскање. Основна подешавања су такође постављена кроз овај систем – БотФатхер ће вам помоћи да направите опис, поставите слику профила, додате алате за подршку. Библиотеке – скупови ХТМЛ захтева за Телеграм ботове – доступни су на Интернету, има их доста. Приликом креирања примера програма коришћен је пиТелеграмБотАпи.

Корак 1: Имплементација захтева за девизни курс

Прво морате написати код који извршава упите. Користићемо при писању ПриватБанк АПИ-а, у наставку је линк до њега: хттпс://апи.приватбанк.уа/п24апи/пубинфо?јсон&екцханге&цоурсид=5. Морате да користите ове методе у свом коду:

  • лоад_екцханге – проналази курсеве и приказује кодиране информације;
  • гет_екцханге – приказује податке о одређеној валути;
  • гет_екцхангес – приказује листу валута према узорку.

Као резултат тога, код у датотеци пб.пи изгледа овако:

импорт ре импорт рекуестс импорт јсон УРЛ = 'хттпс://апи.приватбанк.уа/п24апи/пубинфо?јсон&екцханге&цоурсид=5' деф лоад_екцханге(): ретурн јсон.лоадс(рекуестс.гет(УРЛ).тект) деф гет_екцханге(цци_кеи) ): за екц у лоад_екцханге(): иф цци_кеи == екц['цци']: ретурн екц ретурн Фалсе деф гет_екцхангес(цци_паттерн): резултат = [] цци_паттерн = ре.есцапе(цци_паттерн) + '.*' за екц у лоад_екцханге(): ако ре.матцх(цци_паттерн, екц['цци'], ре.ИГНОРЕЦАСЕ) није Ништа: ресулт.аппенд(екц) врати резултат

Програм може да изда следећи одговор на наведене захтеве:

[ { цци:"УСД", басе_цци:"УАХ", куповина:"25.90000", продаја:"26.25000" }, { цци:"ЕУР", басе_цци:"УАХ", куповина:"29.10000", продаја:"29.85000 " }, { цци:"РУР", басе_цци:"УАХ", куповина:"0.37800", продаја:"0.41800" }, { цци:"БТЦ", басе_цци:"УСД", куповина:"11220.0384", продаја: "12401.0950" } ]

Корак 2: Направите Телеграм бота са @БотФатхер

Можете креирати програм за примање порука и одговарање на њих помоћу услуге @БотФатхер. Идите на његову Телеграм страницу и унесите команду /невбот. У ћаскању ће се појавити упутства према којима прво треба да запишете име бота, а затим његову адресу. Када се бот налог креира, на екрану ће се појавити порука добродошлице која садржи токен. За даље конфигурисање користите ове команде:

  • /сетдесцриптион – опис;
  • /сетабоуттект – информације о новом боту;
  • /сетусерпиц – фотографија профила;
  • /сетинлине – инлине режим;
  • /сетцоммандс – опис команди.

У последњем кораку конфигурације описујемо /хелп и /екцханге. Када су сви кораци завршени, време је да пређемо на кодирање.

Корак 3: Подешавање и покретање бота

Хајде да направимо датотеку цонфиг.пи. У њему морате навести јединствени код бота и временску зону у којој ће програм пронаћи информације.

ТОКЕН = '' # замените токеном вашег ботаТИМЕЗОНЕ = 'Европа/Кијев' ТИМЕЗОНЕ_ЦОММОН_НАМЕ = 'Кијев'

Затим креирамо другу датотеку са увозом претходно написаног пб.пи, библиотека и других потребних компоненти. Библиотеке које недостају се инсталирају из система за управљање пакетима (пип).

импорт телеботимпорт цонфигимпорт пбимпорт датетимеимпорт питзимпорт јсонимпорт трацебацк П_ТИМЕЗОНЕ = питз.тимезоне(цонфиг.ТИМЕЗОНЕ) ТИМЕЗОНЕ_ЦОММОН_НАМЕ = цонфиг.ТИМЕЗОНЕ_ЦОММОН_НАМЕ

Хајде да користимо садржај пиТелеграмБотАпи за креирање бота. Примљени токен шаљемо помоћу следећег кода:

бот = телебот.ТелеБот(цонфиг.ТОКЕН) бот.поллинг(ноне_стоп=Труе)

Параметар ноне_стоп осигурава да се захтеви стално шаљу. Грешке методе неће утицати на рад параметра.

Корак 4: Напишите /старт руковалац командама

Ако су сви претходни кораци урађени исправно, бот је почео да ради. Програм редовно генерише захтеве јер користи метод гетУпдатес. Пре реда са елементом ноне_стоп, потребан нам је део кода који обрађује команду /старт:

@бот.мессаге_хандлер(цоммандс=['старт']) деф старт_цомманд(мессаге): бот.сенд_мессаге( мессаге.цхат.ид, 'Поздрав! Могу да вам покажем курсеве.н' + 'Да бисте добили курсеве притисните / екцханге.н' + 'Да бисте добили помоћ притисните /хелп.')

РџСЂРе цоммандс=['старт'] једнако Истина старт_цомманд се позива. Садржај поруке иде тамо. Затим морате имплементирати функцију слања_мессаге у односу на одређену поруку.

Корак 5: Креирајте /хелп руковалац командама

Команда /хелп се може имплементирати као дугме. Кликом на њега, корисник ће бити пребачен на Телеграм налог програмера. Дајте дугмету име, на пример „Питајте програмера“. Поставите параметар репли_маркуп, који преусмерава корисника на везу, за метод сенд_мессаге. Хајде да упишемо у код параметар који креира тастатуру (ИнлинеКеибоардМаркуп). Треба вам само једно дугме (ИнлинеКеибоардБуттон).

Коначни код руковаоца командом изгледа овако:

@бот.мессаге_хандлер(цоммандс=['хелп']) деф хелп_цомманд(мессаге): кеибоард = телебот.типес.ИнлинеКеибоардМаркуп() кеибоард.адд( телебот.типес.ИнлинеКеибоардБуттон( 'Питајте програмера', урл='ваша ссилка на профиль' ) ) бот.сенд_мессаге( мессаге.цхат.ид, '1) Да бисте добили листу доступних валута, притисните /екцханге.н' + '2) Кликните на валуту која вас занима.н' + '3) Ви ће примити поруку која садржи информације о изворној и циљној валути, ' + 'куповни курс и продајни курс.н' + '4) Кликните на "Ажурирај" да бисте примили тренутне информације у вези са захтевом. ' + 'Бот ће такође показати разлику између претходног и тренутног курса.н' + '5) Бот подржава инлине. Тип @ у било ком ћаскању и прва слова валуте.', репли_маркуп=кеибоард )

Акција кода у Телеграм ћаскању:

Телеграм бот у Пајтону. Комплетан водич за писање бота са курсевима од нуле

Корак 6: Додавање руковаоца командама /екцханге

Овај корак је потребан за приказ дугмади са симболима доступних валута у ћаскању. Тастатура на екрану са опцијама ће вам помоћи да избегнете грешке. ПриватБанк пружа информације о рубљи, долару и евру. Опција ИнлинеКеибоардБуттон функционише овако:

  1. Корисник кликне на дугме са жељеном ознаком.
  2. гетУпдатес прима повратни позив (ЦаллбацкКуери).
  3. Постаје познато како се поступа са притиском на тастатуру – преноси се информација о притиснутом дугмету.

/ код руковаоца разменом:

@бот.мессаге_хандлер(цоммандс=['екцханге']) деф екцханге_цомманд(мессаге): кеибоард = телебот.типес.ИнлинеКеибоардМаркуп() кеибоард.ров( телебот.типес.ИнлинеКеибоардБуттон('УСД', цаллбацк_дата='гет-УСД') ) кеибоард.ров( телебот.типес.ИнлинеКеибоардБуттон('ЕУР', цаллбацк_дата='гет-ЕУР'), телебот.типес.ИнлинеКеибоардБуттон('РУР', цаллбацк_дата='гет-РУР') ) бот.сенд_мессаге( мессаге.цхат .ид, 'Кликните на валуту по избору:', репли_маркуп=кеибоард )

Резултат кода у Телеграму:

Телеграм бот у Пајтону. Комплетан водич за писање бота са курсевима од нуле

Корак 7: Писање руковаоца за дугмад уграђене тастатуре

Пакет пиТелеграмБот Апи садржи функцију декоратора @бот.цаллбацк_куери_хандлер. Ова компонента је дизајнирана да преведе повратни позив у функцију – АПИ одмотава и поново креира позив. Пише се овако:

@бот.цаллбацк_куери_хандлер(фунц=ламбда позив: Тачно) деф ик_цаллбацк(куери): дата = куери.дата иф дата.стартсвитх('гет-'): гет_ек_цаллбацк(куери)

Хајде да напишемо и гет_ек_цаллбацк метод:

деф гет_ек_цаллбацк(куери): бот.ансвер_цаллбацк_куери(куери.ид) сенд_екцханге_ресулт(куери.мессаге, куери.дата[4:])

Постоји још један користан метод – ансвер_цаллбацк_куери. Помаже у уклањању оптерећења између притиска на дугме и приказивања резултата на екрану. Можете послати поруку на сенд_екцханге_куери тако што ћете проследити неки код валуте и поруку. Хајде да напишемо сенд_екцханге_ресулт:

деф сенд_екцханге_ресулт(мессаге, ек_цоде): бот.сенд_цхат_ацтион(мессаге.цхат.ид, 'типинг') ек = пб.гет_екцханге(ек_цоде) бот.сенд_мессаге( мессаге.цхат.ид, сериализе_ек(ек), репли_маркуп=гет_упдате(ек) ), парсе_моде='ХТМЛ')

Док цхатбот добија резултат захтева од банке АПИ за, посетилац види натпис „куцање поруке“. Изгледа да права особа одговара. Да бисте приказали такав индикатор на екрану, мораћете да додате статусне линије уноса. Затим ћемо користити гет_екцханге - уз његову помоћ, програм ће добити ознаку валуте (рубље, евре или долари). сенд_мессаге користи додатне методе: сериализе_ек конвертује валуту у други формат, а гет_упдате_кеибоард подешава софтверске тастере који ажурирају информације и шаљу податке о тржишту валута у друге разговоре.

Хајде да напишемо код за гет_упдате_кеибоард. Треба поменути два дугмета – т и е означавају тип и размену. Ставка свитцх_инлине_куери за дугме Дели је потребна како би корисник могао да бира између неколико ћаскања. Посетилац ће моћи да бира коме ће послати тренутни курс долара, рубље или евра.

деф гет_упдате_кеибоард(ек): кеибоард = телебот.типес.ИнлинеКеибоардМаркуп() кеибоард.ров( телебот.типес.ИнлинеКеибоардБуттон( 'Ажурирање', цаллбацк_дата=јсон.думпс({ 'т': 'у', 'е': { ' б': ек['буи'], 'с': ек['сале'], 'ц': ек['цци'] } }).реплаце(' ', '') ), телебот.типес.ИнлинеКеибоардБуттон ('Схаре', свитцх_инлине_куери=ек['цци']) ) врати тастатуру

Понекад треба да видите колико се курс променио за кратко време. Хајде да напишемо две методе за дугме Ажурирај како би корисници могли да виде курсеве у поређењу.

Разлика између курсева се преноси на серијализатор преко параметра дифф.

Прописане методе раде тек након ажурирања података, неће утицати на први приказ курса.

деф сериализе_ек(ек_јсон, дифф=Ништа): резултат = '' + ек_јсон['басе_цци'] + ' -> ' + ек_јсон['цци'] + ':нн' + 'Купити: ' + ек_јсон['купити'] иф дифф: резултат += ' ' + сериализе_екцханге_дифф(дифф['буи_дифф']) + 'н' + 'Продати: ' + ек_јсон['сале'] + ' ' + сериализе_екцханге_дифф(дифф['сале_дифф']) + 'н' елсе: резултат += 'нСелл: ' + ек_јсон['сале'] + 'н' врати резултат деф сериализе_екцханге_дифф(дифф): резултат = '' иф дифф > 0: резултат = '(' + стр(дифф) + ' " срц="хттпс://сворг/имагес/цоре/емоји/2.3/свг/2197.свг">" срц="хттпс://сворг/имагес /цоре/емоји/72к72/2197.пнг">" срц="хттпс://сворг/имагес/цоре/емоји/72к72/2197.пнг">)' елиф дифф < 0: резултат = '(' + стр( дифф)[1:] + ' " срц="хттпс://сворг/имагес/цоре/емоји/2.3/свг/2198.свг">" срц="хттпс://сворг/имагес/цоре/емоји/72к72 /2198.пнг">" срц="хттпс://сворг/имагес/цоре/емоји/72к72/2198.пнг">)' врати резултат

Замислите да је посетилац желео да зна курс долара. Ево шта се дешава ако изаберете УСД у поруци:

Телеграм бот у Пајтону. Комплетан водич за писање бота са курсевима од нуле

Корак 8: Имплементација руковаоца дугмета за ажурирање

Хајде да напишемо код за руковање акцијама помоћу дугмета Ажурирај и додамо му део ик_цаллбацк_метход. Када ставке програма почињу параметром гет, морате написати гет_ек_цаллбацк. У другим ситуацијама, анализирамо ЈСОН и покушавамо да добијемо кључ т.

@бот.цаллбацк_куери_хандлер(фунц=ламбда позив: Труе) деф ик_цаллбацк(куери): дата = куери.дата иф дата.стартсвитх('гет-'): гет_ек_цаллбацк(куери) елсе: три: иф јсон.лоадс(дата)[ 'т'] == 'у': едит_мессаге_цаллбацк(куери) осим ВалуеЕррор: пасс

Ако је т једнако у, мораћете да напишете програм за методу едит_мессаге_цаллбацк. Хајде да разложимо овај процес корак по корак:

  1. Преузимање ажурираних информација о стању на тржишту валута (екцханге_нов = пб.гет_екцханге(дата['ц']).
  1. Писање нове поруке кроз серијализатор са дифф.
  2. Додавање потписа (гет_едитед_сигнатуре).

Ако се почетна порука не промени, позовите методу едит_мессаге_тект.

деф едит_мессаге_цаллбацк(куери): дата = јсон.лоадс(куери.дата)['е'] екцханге_нов = пб.гет_екцханге(дата['ц']) тект = сериализе_ек( екцханге_нов, гет_екцханге_дифф( гет_ек_фром_ик_дата(дата)), екцханге) + 'н' + гет_едитед_сигнатуре() ако куери.мессаге: бот.едит_мессаге_тект(тект, куери.мессаге.цхат.ид, куери.мессаге.мессаге_ид, репли_маркуп=гет_упдате_кеибоард(екцханге_нов), парсе_моде) елиф куери_ХТМЛ : бот.едит_мессаге_тект(тект, инлине_мессаге_ид=куери.инлине_мессаге_ид, репли_маркуп=гет_упдате_кеибоард(екцханге_нов), парсе_моде='ХТМЛ')

Хајде да напишемо метод гет_ек_фром_ик_дата да анализирамо ЈСОН:

деф гет_ек_фром_ик_дата(екц_јсон): ретурн { 'купи': екц_јсон['б'], 'сале': екц_јсон['с'] }

Требаће вам још неколико метода: на пример, гет_екцханге_дифф, који чита старе и нове информације о цени валута и приказује разлику.

деф гет_екцханге_дифф(ласт, сада): ретурн { 'сале_дифф': флоат("%.6ф" % (флоат(сада['сале']) - флоат(ласт['сале']))), 'буи_дифф': флоат („%.6ф“ % (флоат(сада['буи']) - флоат(ласт['буи']))) }

Последњи, гет_едитед_сигнатуре, показује време када је курс последњи пут ажуриран.

деф гет_едитед_сигнатуре(): врати 'Ажурирано ' + стр(датетиме.датетиме.нов(П_ТИМЕЗОНЕ).стрфтиме('%Х:%М:%С')) + ' (' + ТИМЕЗОНЕ_ЦОММОН_НАМЕ + ')'

Као резултат тога, ажурирана порука од бота са стабилним курсом изгледа овако:

Телеграм бот у Пајтону. Комплетан водич за писање бота са курсевима од нуле

Када се курс промени, разлике између вредности се приказују у поруци због прописаних параметара.

Телеграм бот у Пајтону. Комплетан водич за писање бота са курсевима од нуле

Корак 9: Имплементација уграђеног режима

Уграђени режим је потребан за брзо слање информација из програма у било које ћаскање – сада не морате да додајете бота у разговор као учесника. Када корисник Телеграма унесе име бота са знаком @ испред њега, опције конверзије треба да се појаве изнад линије за унос. Ако кликнете на једну од ставки, бот ће послати поруку конверзацији са резултатима и дугмадима за ажурирање и слање података. Име пошиљаоца ће садржати натпис „преко ".

ИнлинеКуери се прослеђује куери_тект преко библиотеке. Код користи функцију ансвер_лине за преузимање резултата претраге као низа података и елемента инлине_куери_ид. Користимо гет_екцхангес тако да бот пронађе неколико валута на захтев.

@бот.инлине_хандлер(фунц=ламбда упит: Тачно) деф куери_тект(инлине_куери): бот.ансвер_инлине_куери( инлине_куери.ид, гет_ик_артицлес(пб.гет_екцхангес(инлине_куери.куери)))

Проследимо низ података гет_ик_артицлес да бисмо вратили објекте из ИнлинеКуериРесултАртицле кроз овај метод.

деф гет_ик_артицлес(екцхангес): резултат = [] за екц у разменама: ресулт.аппенд( телебот.типес.ИнлинеКуериРесултАртицле( ид=екц['цци'], титле=екц['цци'], инпут_мессаге_цонтент=телебот.типес.ИнпутТектМессаге ( сериализе_ек(екц), парсе_моде='ХТМЛ'), репли_маркуп=гет_упдате_кеибоард(екц), десцриптион='Претвори ' + екц['басе_цци'] + ' -> ' + екц['цци'], тхумб_хеигхт=1) ) врати резултат

Сада, ако напишете @ и размак у реду, резултати претраге ће се појавити на екрану – опције за конверзију у три доступне валуте.

Телеграм бот у Пајтону. Комплетан водич за писање бота са курсевима од нуле

Корисници могу филтрирати резултате уносом жељене валуте.

Након клика на жељену валуту са листе, ћаскање добија исту поруку коју добијају корисници бота. Такође можете да користите дугме Ажурирај. Слика испод приказује ажурирану поруку послату преко бота:

Телеграм бот у Пајтону. Комплетан водич за писање бота са курсевима од нуле

Zakljucak

Сада знате како да направите бот за Телеграм. Можете додати корисне алате свом програму: дугмад за ажурирање и слање резултата другим корисницима месинџера и уграђени режим који вам омогућава да користите функције бота ван ћаскања са њим. На основу овог упутства можете креирати било који једноставан бот са другим функцијама – не само оним који ће приказивати курсеве. Немојте се плашити да експериментишете са библиотекама, АПИ-јем и кодом да бисте креирали аутоматизованог помоћника који ће ћаскати са клијентима на Телеграму и ојачати везу заинтересованих људи са компанијом.

1 Коментар

  1. Фантастица публицацион

Ostavite komentar