Telegram láni í Python. Heildar leiðbeiningar um að skrifa vélmenni með gengi frá grunni

Bottar í Telegram eru forrit sem hjálpa til við að koma á sambandi við áhorfendur eða einfalda aðgerðir sem áður þurfti að framkvæma handvirkt. Þessi forrit eru skrifuð sérstaklega fyrir messenger vettvang. Bottar virka á þennan hátt: notandinn sendir skipun í gegnum innsláttarlínuna og kerfið svarar með texta eða gagnvirkum skilaboðum. Stundum líkir forritið jafnvel eftir gjörðum raunverulegs einstaklings - slíkur láni vekur meira traust meðal viðskiptavina.

Til eru nokkrar gerðir af kerfum fyrir sjálfvirka aðstoð við notendur. Sumir vélmenni hafa bara samskipti við viðskiptavini, aðrir veita reglulega upplýsingar. Það er ómögulegt að skipta forritum greinilega í gerðir - forritarar sameina oft nokkrar aðgerðir í einum vélmenni.

Þú getur skrifað einfaldan vélmenni fyrir Telegram með gagnvirkum þáttum í formi skjáhnappa í 9 skrefum. Við skulum skoða hvert þeirra í smáatriðum og svara nokkrum spurningum:

  • hvernig á að stofna vélmenni;
  • hvernig á að skrá innbyggt lyklaborð frá einum eða fleiri hnöppum;
  • hvernig á að forrita hnappana fyrir viðeigandi aðgerðir;
  • hvað er inline mode og hvernig á að setja það upp fyrir núverandi bot.

Skref 0: fræðilegur bakgrunnur um Telegram bots API

Helsta tólið sem notað er til að búa til Telegram vélmenni er HTML forritunarviðmótið, eða HTML API. Þessi þáttur tekur við beiðnum gesta og sendir svör í formi upplýsinga. Tilbúin hönnun einfaldar vinnuna við forritið. Til að skrifa bot fyrir Telegram þarftu að nota þetta netfang: https://api.telegram.org/bot/METHOD_NAME

Til að vélmennið virki rétt, þarf líka tákn – samsetningu stafa sem verndar forritið og opnar traustum hönnuðum aðgang að því. Hvert tákn er einstakt. Strenginum er úthlutað til botni við stofnun. Aðferðir geta verið mismunandi: getUpdates, getChat og fleiri. Val á aðferð fer eftir því hvaða reiknirit forritararnir búast við frá botninum. Token dæmi:

123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11

Botsmenn nota GET og POST beiðnir. Oft þarf að bæta við aðferðarbreytur – til dæmis þegar sendMessage aðferðin á að senda spjallauðkenni og smá texta. Hægt er að senda færibreytur fyrir aðferðarbetrumbætur sem vefslóð fyrirspurnarstreng með því að nota application/x-www-form-urlencoded eða í gegnum application-json. Þessar aðferðir henta ekki til að hlaða niður skrám. UTF-8 kóðun er einnig nauðsynleg. Með því að senda beiðni til API geturðu fengið niðurstöðuna á JSON sniði. Skoðaðu viðbrögð forritsins við að sækja upplýsingar með getME aðferðinni:

FÁ https://api.telegram.org/bot/getMe{ allt í lagi: satt, niðurstaða: { id: 231757398, first_name: "Exchange Rate Bot", notandanafn: "exchangetestbot" } }

Niðurstaðan fæst ef ok jafngildir satt. Annars mun kerfið gefa til kynna villu.

Það eru tvær leiðir til að fá sérsniðin skilaboð í vélmennum. Báðar aðferðirnar eru árangursríkar en henta í mismunandi tilfellum. Til að fá skilaboð geturðu skrifað beiðni handvirkt með getUpdates aðferðinni - forritið mun sýna Uppfæra gagnafylki á skjánum. Senda þarf beiðnir reglulega, eftir að hafa greint hverja fylkingu er sendingin endurtekin. Offset er færibreyta sem ákvarðar fjölda skráninga sem var sleppt áður en ný niðurstaða er hlaðin til að forðast að merktir hlutir komi fram aftur. Kostir getUpdates aðferðarinnar munu koma við sögu ef:

  • það er engin leið til að stilla HTTPS;
  • flókin forskriftarmál eru notuð;
  • botaþjónninn breytist frá einum tíma til annars;
  • botninn er hlaðinn notendum.

Önnur aðferðin sem hægt er að skrifa til að taka á móti notendaskilaboðum er setWebhook. Það er notað einu sinni, engin þörf á að senda stöðugt nýjar beiðnir. Webhook sendir gagnauppfærslur á tilgreinda vefslóð. Þessi aðferð krefst SSL vottorðs. Webhook mun nýtast í þessum tilvikum:

  • vefforritunarmál eru notuð;
  • vélinni er ekki of mikið, það eru ekki of margir notendur;
  • þjónninn breytist ekki, forritið helst á sama netþjóninum í langan tíma.

Í frekari leiðbeiningum munum við nota getUpdates.

@BotFather Telegram þjónustan er hönnuð til að búa til spjallbots. Grunnstillingar eru einnig stilltar í gegnum þetta kerfi - BotFather mun hjálpa þér að gera lýsingu, setja prófílmynd, bæta við stuðningsverkfærum. Bókasöfn – sett af HTML beiðnum fyrir Telegram vélmenni – eru fáanleg á netinu, það eru töluvert mikið af þeim. Þegar forritið var búið til var pyTelegramBotApi notað.

Skref 1: Innleiða gengisbeiðnir

Fyrst þarftu að skrifa kóðann sem framkvæmir fyrirspurnir. Við munum nota þegar við skrifum PrivatBank API, hér að neðan er hlekkur á það: https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5. Þú þarft að nota þessar aðferðir í kóðanum þínum:

  • load_exchange – finnur gengi og sýnir kóðaðar upplýsingar;
  • get_exchange – sýnir gögn um ákveðinn gjaldmiðil;
  • get_exchanges – sýnir skráningu gjaldmiðla samkvæmt úrtakinu.

Fyrir vikið lítur kóðinn í pb.py skránni svona út:

import re import requests import json URL = 'https://api.privatbank.ua/p24api/pubinfo?json&exchange&coursid=5' def load_exchange(): skila json.loads(requests.get(URL).text) def get_exchange(ccy_key) ): fyrir exc í load_exchange(): ef ccy_key == exc['ccy']: skila exc return False def get_exchanges(ccy_pattern): niðurstaða = [] ccy_pattern = re.escape(ccy_pattern) + '.*' fyrir exc í load_exchange(): ef re.match(ccy_pattern, exc['ccy'], re.IGNORECASE) er ekki Enginn: result.append(exc) skilar niðurstöðu

Forritið getur gefið út eftirfarandi svar við tilgreindum beiðnum:

[ { ccy:"USD", base_ccy:"UAH", buy:"25.90000", sale:"26.25000" }, { ccy:"EUR", base_ccy:"UAH", buy:"29.10000", sale:"29.85000 " }, { ccy:"RUR", base_ccy:"UAH", kaupa:"0.37800", sale:"0.41800" }, { ccy:"BTC", base_ccy:"USD", kaupa:"11220.0384", sala: "12401.0950" } ]

Skref 2: Búðu til Telegram Bot með @BotFather

Þú getur búið til forrit til að taka á móti skilaboðum og svara þeim með @BotFather þjónustunni. Farðu á Telegram síðuna hans og sláðu inn / newbot skipunina. Leiðbeiningar munu birtast í spjallinu, þar sem þú þarft að skrifa niður nafn botnsins fyrst og síðan heimilisfang hans. Þegar botareikningurinn er búinn til birtast velkomin skilaboð sem innihalda tákn á skjánum. Fyrir frekari stillingar, notaðu þessar skipanir:

  • /setjalýsing – lýsing;
  • /setabouttext – upplýsingar um nýja láni;
  • /setuserpic – prófílmynd;
  • /setinline – innbyggður háttur;
  • /setcommands – lýsing á skipunum.

Í síðasta stillingarskrefinu lýsum við /help og /exchange. Þegar öllum skrefum hefur verið lokið er kominn tími til að halda áfram í kóðun.

Skref 3: Setja upp og ræsa botninn

Við skulum búa til config.py skrá. Í því þarftu að tilgreina einstaka lánakóðann og tímabeltið þar sem forritið finnur upplýsingar.

TOKEN = '' # skipta út með auðkenni lánmanns þínsTIMEZONE = 'Evrópa/Kiev' TIMEZONE_COMMON_NAME = 'Kiev'

Næst búum við til aðra skrá með innflutningi á áður skrifuðum pb.py, bókasöfnum og öðrum nauðsynlegum hlutum. Söfnin sem vantar eru sett upp úr pakkastjórnunarkerfinu (pip).

flytja inn telebotimport configimport pbimport dagsetningutímainnflutningur pytzimport jsoninnflutningur rekja bak P_TIMEZONE = pytz.timezone(config.TIMEZONE) TIMEZONE_COMMON_NAME = config.TIMEZONE_COMMON_NAME

Við skulum nota innihald pyTelegramBotApi til að búa til vélmenni. Við sendum móttekna táknið með eftirfarandi kóða:

bot = telebot.TeleBot(config.TOKEN) bot.polling(none_stop=True)

None_stop færibreytan tryggir að beiðnir séu stöðugt sendar. Aðferðarvillur munu ekki hafa áhrif á virkni færibreytunnar.

Skref 4: Skrifaðu /start Command Handler

Ef öll fyrri skref eru unnin á réttan hátt hefur vélmenni byrjað að virka. Forritið býr til beiðnir reglulega vegna þess að það notar getUpdates aðferðina. Á undan línunni með none_stop þættinum þurfum við kóða sem vinnur /start skipunina:

@bot.message_handler(commands=['byrja']) def start_command(message): bot.send_message( message.chat.id, 'Sælir! Ég get sýnt þér gengi.n' + 'Til að fá gengi ýttu á / exchange.n' + 'Til að fá hjálp ýttu á /help.')

RџSЂRё commands=['byrja'] jafnt og True start_command er kallað. Efni skilaboðanna fer þangað. Næst þarftu að innleiða sendingaraðgerðina_skilaboð í tengslum við ákveðin skilaboð.

Skref 5: Búðu til /help Command Handler

Hægt er að útfæra skipunina /help sem hnapp. Með því að smella á það verður notandinn færður á Telegram reikning þróunaraðilans. Gefðu hnappnum nafn, svo sem „Spyrðu verktaki“. Stilltu reply_markup færibreytuna, sem vísar notandanum á tengil, fyrir send_message aðferðina. Skrifum í kóðann færibreytuna sem býr til lyklaborðið (InlineKeyboardMarkup). Þú þarft aðeins einn hnapp (InlineKeyboardButton).

Síðasti stjórnunarkóði lítur svona út:

@bot.message_handler(commands=['hjálp']) def help_command(message): keyboard = telebot.types.InlineKeyboardMarkup() keyboard.add( telebot.types.InlineKeyboardButton( 'Spyrðu verktaki', url='ваша ссылка на профиль' ) ) bot.send_message( message.chat.id, '1) Til að fá lista yfir tiltæka gjaldmiðla ýttu á /exchange.n' + '2) Smelltu á gjaldmiðilinn sem þú hefur áhuga á.n' + '3) Þú mun fá skilaboð sem innihalda upplýsingar um uppruna og markgjaldmiðla, ' + 'kaupgengi og sölugengi.n' + '4) Smelltu á "Uppfæra" til að fá núverandi upplýsingar um beiðnina. ' + 'Boðmaðurinn mun einnig sýna muninn á fyrra og núverandi gengi.n' + '5) Botninn styður inline. Tegund @ í hvaða spjalli sem er og fyrstu stafina í gjaldmiðli.', reply_markup=lyklaborð )

Kóðaaðgerð í Telegram spjalli:

Telegram láni í Python. Heildar leiðbeiningar um að skrifa vélmenni með gengi frá grunni

Skref 6: Bæta við /exchange Command Handler

Þetta skref er nauðsynlegt til að sýna hnappa með táknum fyrir tiltæka gjaldmiðla í spjallinu. Skjályklaborð með valkostum mun hjálpa þér að forðast mistök. PrivatBank veitir upplýsingar um rúblur, dollara og evru. InlineKeyboardButton valkosturinn virkar svona:

  1. Notandinn smellir á hnappinn með viðkomandi tilnefningu.
  2. getUpdates fær svarhringingu (CallbackQuery).
  3. Það verður vitað hvernig á að höndla að ýta á lyklaborðið - upplýsingar um ýtt á hnappinn eru sendar.

/skiptastjórnunarkóði:

@bot.message_handler(commands=['exchange']) def exchange_command(message): lyklaborð = telebot.types.InlineKeyboardMarkup() keyboard.row( telebot.types.InlineKeyboardButton('USD', callback_data='get-USD') ) keyboard.row( telebot.types.InlineKeyboardButton('EUR', callback_data='get-EUR'), telebot.types.InlineKeyboardButton('RUR', callback_data='get-RUR') ) bot.send_message( message.chat .id, 'Smelltu á valinn gjaldmiðil:', reply_markup=lyklaborð )

Niðurstaða kóðans í Telegram:

Telegram láni í Python. Heildar leiðbeiningar um að skrifa vélmenni með gengi frá grunni

Skref 7: Að skrifa stjórnanda fyrir innbyggðu lyklaborðshnappana

pyTelegramBot Api pakkinn inniheldur @bot.callback_query_handler skreytingaraðgerðina. Þessi hluti er hannaður til að þýða svarhringingu yfir í aðgerð - API tekur upp og endurbýr símtalið. Það er skrifað svona:

@bot.callback_query_handler(func=lambda call: True) def iq_callback(query): data = query.data if data.startswith('get-'): get_ex_callback(query)

Við skulum líka skrifa get_ex_callback aðferðina:

def get_ex_callback(query): bot.answer_callback_query(query.id) send_exchange_result(query.message, query.data[4:])

Það er önnur gagnleg aðferð - answer_callback_query. Það hjálpar til við að fjarlægja álagið á milli þess að ýta á hnappinn og sýna niðurstöðuna á skjánum. Þú getur sent skilaboð til send_exchange_query með því að senda einhvern gjaldmiðilskóða og skilaboð. Við skulum skrifa send_exchange_result:

def send_exchange_result(message, ex_code): bot.send_chat_action(message.chat.id, 'typeing') ex = pb.get_exchange(ex_code) bot.send_message( message.chat.id, serialize_ex(ex), reply_markup=get_update_keyboard(ex_code) ), parse_mode='HTML' )

Á meðan spjallbotninn fær niðurstöðu beiðninnar frá bankanum API, gesturinn sér áletrunina „að skrifa skilaboð“. Það lítur út fyrir að raunveruleg manneskja sé að svara. Til að birta slíkan vísi á skjánum þarftu að bæta við inntaksstöðulínum. Næst munum við nota get_exchange - með hjálp þess mun forritið fá gjaldmiðilstilnefninguna (rúblur, evrur eða dollara). send_message notar viðbótaraðferðir: serialize_ex breytir gjaldmiðlinum í annað snið og get_update_keyboard setur upp mjúklykla sem uppfæra upplýsingar og senda gjaldeyrismarkaðsgögn til annarra spjalla.

Við skulum skrifa kóðann fyrir get_update_keyboard. Nefna þarf tvo hnappa – t og e standa fyrir gerð og skipti. Switch_inline_query atriðið fyrir Share hnappinn er nauðsynlegt svo notandinn geti valið úr nokkrum spjallum. Gesturinn mun geta valið til hvers hann sendir núverandi gengi dollars, rúbla eða evru.

def get_update_keyboard(ex): lyklaborð = telebot.types.InlineKeyboardMarkup() keyboard.row( telebot.types.InlineKeyboardButton( 'Update', callback_data=json.dumps({ 't': 'u', 'e': { ' b': ex['buy'], 's': ex['sale'], 'c': ex['ccy'] } }).replace(' ', '') ), telebot.types.InlineKeyboardButton ('Deila', switch_inline_query=ex['ccy']) ) skila lyklaborði

Stundum þarf að sjá hversu mikið gengið hefur breyst á stuttum tíma. Skrifum tvær aðferðir fyrir hnappinn Uppfæra svo notendur geti séð námskeið í samanburði.

Mismunurinn á genginu er færður til serializer í gegnum diff færibreytuna.

Ávísaðar aðferðir virka aðeins eftir að gögnin eru uppfærð, þær hafa ekki áhrif á fyrstu birtingu námskeiðsins.

def serialize_ex(ex_json, diff=None): niðurstaða = '' + ex_json['base_ccy'] + ' -> ' + ex_json['ccy'] + ':nn' + 'Kaupa: ' + ex_json['buy'] if diff: result += ' ' + serialize_exchange_diff(diff['buy_diff']) + 'n' + 'Sel: ' + ex_json['sale'] + ' ' + serialize_exchange_diff(diff['sale_diff']) + 'n' else: result += 'nSell: ' + ex_json['sale'] + 'n' skilar niðurstöðu def serialize_exchange_diff(diff): niðurstaða = '' ef mismunur > 0: niðurstaða = '(' + str(diff) + ' " src="https://sworg/images/core/emoji/2.3/svg/2197.svg">" src="https://sworg/images /core/emoji/72x72/2197.png">" src="https://sworg/images/core/emoji/72x72/2197.png">)' elif diff < 0: result = '(' + str( diff)[1:] + ' " src="https://sworg/images/core/emoji/2.3/svg/2198.svg">" src="https://sworg/images/core/emoji/72x72 /2198.png">" src="https://sworg/images/core/emoji/72x72/2198.png">)' skila niðurstöðu

Ímyndaðu þér að gesturinn vildi vita gengi dollars. Hér er það sem gerist ef þú velur USD í skilaboðunum:

Telegram láni í Python. Heildar leiðbeiningar um að skrifa vélmenni með gengi frá grunni

Skref 8: Innleiðing uppfærsluhnappahöndlarans

Við skulum skrifa kóðann til að meðhöndla aðgerðir með Update takkanum og bæta iq_callback_method hlutanum við hann. Þegar forritsatriði byrja á get færibreytunni verður þú að skrifa get_ex_callback. Í öðrum aðstæðum þáttum við JSON og reynum að fá lykilinn t.

@bot.callback_query_handler(func=lambda call: True) def iq_callback(query): data = query.data if data.startswith('get-'): get_ex_callback(query) else: try: if json.loads(data)[ 't'] == 'u': edit_message_callback(fyrirspurn) nema ValueError: pass

Ef t jafngildir u þarftu að skrifa forrit fyrir edit_message_callback aðferðina. Við skulum brjóta niður þetta ferli skref fyrir skref:

  1. Sækja uppfærðar upplýsingar um stöðu gjaldeyrismarkaðarins (exchange_now = pb.get_exchange(gögn['c']).
  1. Að skrifa ný skilaboð í gegnum serializer með diff.
  2. Að bæta við undirskrift (get_edited_signature).

Ef upphafsskilaboðin breytast ekki skaltu hringja í edit_message_text aðferðina.

def edit_message_callback(query): gögn = json.loads(query.data)['e'] exchange_now = pb.get_exchange(gögn['c']) text = serialize_ex( exchange_now, get_exchange_diff( get_ex_from_iq_data(data)), )_now + 'n' + get_edited_signature() ef query.message: bot.edit_message_text(text, query.message.chat.id, query.message.message_id, reply_markup=get_update_keyboard(exchange_now), parse_mode='elif_message' )_ : bot.edit_message_text( text, inline_message_id=query.inline_message_id, reply_markup=get_update_keyboard(exchange_now), parse_mode='HTML' )

Við skulum skrifa get_ex_from_iq_data aðferðina til að flokka JSON:

def get_ex_from_iq_data(exc_json): skilaðu { 'buy': exc_json['b'], 'sale': exc_json['s'] }

Þú þarft nokkrar fleiri aðferðir: til dæmis get_exchange_diff, sem les gamlar og nýjar upplýsingar um kostnað gjaldmiðla og sýnir mismuninn.

def get_exchange_diff(last, now): return { 'sale_diff': float("%.6f" % (float(nú['sale']) - float(síðast['sale']))), 'buy_diff': flot ("%.6f" % (float(nú['kaupa']) - flot(síðast['kaupa']))) }

Sá síðasti, get_edited_signature, sýnir tímann sem námskeiðið var síðast uppfært.

def get_edited_signature(): skila 'Uppfært ' + str(datetime.datetime.now(P_TIMEZONE).strftime('%H:%M:%S')) + ' (' + TIMEZONE_COMMON_NAME + ')'

Fyrir vikið lítur uppfærð skilaboð frá botni með stöðugu gengi svona út:

Telegram láni í Python. Heildar leiðbeiningar um að skrifa vélmenni með gengi frá grunni

Þegar námskeiðið breytist er munurinn á gildunum sýndur í skilaboðunum vegna tilgreindra breytu.

Telegram láni í Python. Heildar leiðbeiningar um að skrifa vélmenni með gengi frá grunni

Skref 9: Innleiðing innbyggðrar stillingar

Innbyggða stillingin er nauðsynleg til að senda fljótt upplýsingar úr forritinu í hvaða spjall sem er - nú þarftu ekki að bæta botni við samtalið sem þátttakandi. Þegar Telegram notandi slærð inn botnaheiti með @-merki fyrir framan það, ættu viðskiptavalkostir að birtast fyrir ofan innsláttarlínuna. Ef þú smellir á eitt af atriðunum mun vélin senda skilaboð til samtalsins með niðurstöðunum og hnöppum til að uppfæra og senda gögn. Nafn sendanda mun innihalda yfirskriftina „via ".

InlineQuery er send til query_text í gegnum bókasafnið. Kóðinn notar answer_line aðgerðina til að sækja leitarniðurstöðurnar sem gagnafylki og inline_query_id þáttinn. Við notum get_exchanges þannig að botninn finnur nokkra gjaldmiðla sé þess óskað.

@bot.inline_handler(func=lambda query: True) def query_text(inline_query): bot.answer_inline_query( inline_query.id, get_iq_articles(pb.get_exchanges(inline_query.query)) )

Við sendum fjölda gagna til get_iq_articles til að skila hlutum frá InlineQueryResultArticle með þessari aðferð.

def get_iq_articles(exchanges): result = [] fyrir exc in exchanges: result.append( telebot.types.InlineQueryResultArticle( id=exc['ccy'], title=exc['ccy'], input_message_content=telebot.types.InputTextMessageContent ( serialize_ex(exc), parse_mode='HTML' ), reply_markup=get_update_keyboard(exc), description='Breyta ' + exc['base_ccy'] + ' -> ' + exc['ccy'], thumb_height=1 ) ) skila niðurstöðu

Nú, ef þú skrifar @ og pláss í línunni, leitarniðurstöðurnar birtast á skjánum – valkostir til að breyta í þrjá tiltæka gjaldmiðla.

Telegram láni í Python. Heildar leiðbeiningar um að skrifa vélmenni með gengi frá grunni

Notendur geta síað niðurstöðurnar með því að slá inn viðkomandi gjaldmiðil.

Eftir að hafa smellt á viðkomandi gjaldmiðil af listanum fær spjallið sömu skilaboð og botnotendur fá. Þú getur líka notað Uppfæra hnappinn. Myndin hér að neðan sýnir uppfærðu skilaboðin sem send eru í gegnum botann:

Telegram láni í Python. Heildar leiðbeiningar um að skrifa vélmenni með gengi frá grunni

Niðurstaða

Nú veistu hvernig á að búa til vélmenni fyrir Telegram. Þú getur bætt gagnlegum verkfærum við forritið þitt: hnappa til að uppfæra og senda niðurstöðuna til annarra notenda boðberans og innbyggða stillingu sem gerir þér kleift að nota aðgerðir vélmennisins utan spjallsins við hann. Á grundvelli þessarar leiðbeiningar geturðu búið til hvaða einfaldan vélmenni sem er með öðrum aðgerðum - ekki aðeins þeim sem sýnir gengi. Ekki vera hræddur við að gera tilraunir með bókasöfn, API og kóða til að búa til sjálfvirkan aðstoðarmann sem mun spjalla við viðskiptavini á Telegram og styrkja tengsl áhugasamra við fyrirtækið.

1 Athugasemd

  1. Fantástica publicación

Skildu eftir skilaboð