рдХреНрдпреВрдП рдЗрдВрдЬреАрдирд┐рдпрд░ рдХреЗ рд░реВрдк рдореЗрдВ, рдореИрдВрдиреЗ рдПрдХ рдЖрддреНрдо-рдкрд░реАрдХреНрд╖рдг рдкреНрд░рдгрд╛рд▓реА рд╡рд┐рдХрд╕рд┐рдд рдХреАред рдХрдИ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХрд╛ рд╕рд╛рдордирд╛ рдХрд░рдирд╛ рдкрдбрд╝рд╛:
- рдкреНрд░рддреНрдпреЗрдХ рдкреНрд░рдХрд╛рд░ рдХреЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП, рдореБрдЭреЗ CI рдореЗрдВ рдЕрдкрдиреА рдиреМрдХрд░рд┐рдпрд╛рдВ рдмрдирд╛рдиреА рдереАрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд╣рд╛рде рд╕реЗ рдЪрд▓рд╛рдирд╛ рдерд╛ред
- рдбреЗрд╡рд▓рдкрд░реНрд╕ рдиреЗ рд╕реНрд╡-рдкрд░реАрдХреНрд╖рдг рдорд╛рдорд▓реЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рд╕реЗ рдЗрдирдХрд╛рд░ рдХрд░ рджрд┐рдпрд╛ред
- рдбрд┐рд╡рд╛рдЗрд╕ рдкрд░ рдХрд╣реАрдВ рд╕реЗ рднреА рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдиреЗ рдореЗрдВ рдЕрд╕рдорд░реНрдерддрд╛ред
- рдХреНрдпреВрдП рдореИрдиреБрдЕрд▓ рдЯреЗрд╕реНрдЯ рдЗрдВрдЬреАрдирд┐рдпрд░ рдЦреБрдж рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдирд╣реАрдВ рдЪрд▓рд╛ рд╕рдХрддреЗ рдереЗред
рдЗрд╕рд▓рд┐рдП, рдореИрдВрдиреЗ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЛ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдмреЙрдЯ рдХрд╛ рдПрдХ рдЫреЛрдЯрд╛ рдкреНрд░реЛрдЯреЛрдЯрд╛рдЗрдк рдмрдирд╛рдиреЗ рдХрд╛ рдлреИрд╕рд▓рд╛ рдХрд┐рдпрд╛, рдЬреЛ рдКрдкрд░ рд╡рд░реНрдгрд┐рдд рдЕрдзрд┐рдХрд╛рдВрд╢ рд╕рдорд╕реНрдпрд╛рдУрдВ рдХреЛ рдХрд╡рд░ рдХрд░реЗрдЧрд╛ред
рд╡рд┐рдЪрд╛рд░ рдХрд╛ рд╡рд┐рд╡рд░рдг:рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪреИрдЯ рдореЗрдВ рдЖрд╡рд╢реНрдпрдХ рдХрдорд╛рдВрдб рднреЗрдЬрддрд╛ рд╣реИ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдореЗрдВ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдирд┐рдпрдореЛрдВ рдХреЗ рдЕрдиреБрд╕рд╛рд░, рд╕реАрдЖрдИ рд╕рд┐рд╕реНрдЯрдо рдореЗрдВ рдмрд┐рд▓реНрдб рд▓реЙрдиреНрдЪ рдХрд░рддрд╛ рд╣реИред CI pytest рдЕрдВрдХреЛрдВ рдХреЗ рд╕рд╛рде рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рддрд╛ рд╣реИред рд░рди рдХреЗ рдмрд╛рдж, рдЯреЗрд╕реНрдЯ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рдЕрдВрджрд░ рдХреА рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрд┐рд▓реНрдб рдХреА рд╕реНрдерд┐рддрд┐ рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИ, рд▓реЙрдЧ рдПрдХрддреНрд░ рдХрд░рддреА рд╣реИ рдФрд░ рдЗрд╕реЗ рдЯреЗрд▓реАрдлрд╝реЛрди рдЪреИрдЯ рдореЗрдВ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдХреЛ рд╡рд╛рдкрд╕ рднреЗрдЬрддреА рд╣реИред
рдЙрдкрдХрд░рдг:рдЙрдкрдХрд░рдг- рдкреНрд░реЛрдЧреНрд░рд╛рдорд┐рдВрдЧ рднрд╛рд╖рд╛ - рдкрд╛рдпрдерди
- рдЯреЗрд╕реНрдЯ рдлреНрд░реЗрдорд╡рд░реНрдХ - рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ
- HTTP рдХреНрд▓рд╛рдЗрдВрдЯ - рдЕрдиреБрд░реЛрдз
- DataBase - SQLite3
- ORM - Peewee
- CI рд╕рд┐рд╕реНрдЯрдо - рдЯреНрд░реИрд╡рд┐рд╕ CI
рд╕рд╛рдордЧреНрд░реА- рдЯреНрд░реЗрдирд┐рдВрдЧ
- рдмреЙрдЯ рдкрдВрдЬреАрдХрд░рдг
- рдПрдХ рдкрд░реАрдХреНрд╖рдг рднрдВрдбрд╛рд░ рддреИрдпрд╛рд░ рдХрд░рдирд╛
- рдЯреЗрд╕реНрдЯ рдФрд░ рд▓реЙрдЧрд┐рдВрдЧ
- рд░рд┐рдкреЛрд░реНрдЯ рдЬрдирд░реЗрд╢рди
- рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЛ рдХреЙрдиреНрдлрд╝рд┐рдЧрд░ рдХрд░реЗрдВ
- рдмреЙрдЯ рд╕реЗрдЯрдЕрдк
- рдмреЙрдЯ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрдд
- рд╣рд░реЛрдХреВ рдкрд░ рддреИрдирд╛рддреА
рдмреЙрдЯ рдкрдВрдЬреАрдХрд░рдг
рд╕рдмрд╕реЗ рдкрд╣рд▓реЗ, рд╣рдореЗрдВ рдмреЙрдЯ рдХреЗ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреЛ рдкрдВрдЬреАрдХреГрдд рдХрд░рдиреЗ рдФрд░ рдЗрд╕рдХреА рдЕрдиреВрдареА рдЖрдИрдбреА рдкреНрд░рд╛рдкреНрдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдЬреЛ рдПрдХ рдЯреЛрдХрди рд╣реИред рдРрд╕рд╛ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рд╕рдВрджреЗрд╢ рд▓рд┐рдЦреЗрдВ / @BotFather bot рдкрд░ рдкреНрд░рд╛рд░рдВрдн рдХрд░реЗрдВред
рд╣рдорд╛рд░реА рдореБрдЦреНрдп рдЯреАрдо / рдиреНрдпреВрдмреЙрдЯ рд╣реИ, рдЬрд┐рд╕рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдХреЗ рд╣рдореЗрдВ рдмреЙрдЯ рдХреЗ рдирд╛рдо рдХреЗ рд╕рд╛рде рдЖрдиреЗ рдХреЗ рд▓рд┐рдП рдХрд╣рд╛ рдЬрд╛рдПрдЧрд╛ред
рд▓реЗрдХрд┐рди рдПрдХ рдирд┐рдпрдо рд╣реИ - рдирд╛рдо рдмреЙрдЯ рдореЗрдВ рд╕рдорд╛рдкреНрдд рд╣реЛрдирд╛ рдЪрд╛рд╣рд┐рдПред рдмреЛрдЯрдлрд╝рд╛рджрд░ рдмреЙрдЯ рдХрд╛ рдирд╛рдо рд▓реЗрддрд╛ рд╣реИ рдФрд░ рдЖрдкрдХрд╛ рдЯреЛрдХрди рд▓реМрдЯрд╛рддрд╛ рд╣реИред рдЪреИрдЯрд┐рдВрдЧ рд╢реБрд░реВ рдХрд░рдХреЗ рдмреЙрдЯ рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВред рдЗрд╕рдХреЗ рдмрд╛рдж, рдЖрдкрдХреЛ рдЧреЗрдЯрдЕрдк рд╡рд┐рдзрд┐ рдХреЗ рд▓рд┐рдП рдПрдкреАрдЖрдИ рдЕрдиреБрд░реЛрдз рднреЗрдЬрдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
https://api.telegram.org/bot{_}/getUpdates
рдкреНрд░рд╛рдкреНрдд hat_id рдпрд╛рдж рд░рдЦреЗрдВред
рдПрдХ рдкрд░реАрдХреНрд╖рдг рднрдВрдбрд╛рд░ рддреИрдпрд╛рд░ рдХрд░рдирд╛
рдЕрдЧрд▓рд╛, рдЖрдкрдХреЛ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХреЗ рд╕рд╛рде рдПрдХ рднрдВрдбрд╛рд░ рдХреЛ рд╡реНрдпрд╡рд╕реНрдерд┐рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ, рдпрд╛ рдкрд╣рд▓реЗ рд╕реЗ
рддреИрдпрд╛рд░ рд▓реЗрдЦ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдирд╛ рдЪрд╛рд╣рд┐рдПред
рдЯреЗрд╕реНрдЯ рдФрд░ рд▓реЙрдЧрд┐рдВрдЧрдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдп рдмрдирд╛рдПрдВ рдФрд░ рдЙрдиреНрд╣реЗрдВ рдкрд╛рдЗрд╕реНрдЯреЗрд╕реНрдЯ рдорд╛рд░реНрдХ рдХреЗ рд╕рд╛рде рдЪрд┐рд╣реНрдирд┐рдд рдХрд░реЗрдВ - рдкреВрд░реНрдг, рдзреВрдореНрд░рдкрд╛рди рдФрд░ рдкрдХреНрд╖реАред
Pytest.ini рдлрд╝рд╛рдЗрд▓ рдмрдирд╛рдХрд░ рдФрд░ рдкрд░реАрдХреНрд╖рдг рдХрд╛рд░реНрдпреЛрдВ рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рд▓рд╛рдЗрдмреНрд░реЗрд░реА рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рд╡рд┐рдзрд┐ рдореЗрдВ рдХреЙрд▓ рдЬреЛрдбрд╝рдХрд░ рд╣рдорд╛рд░реЗ рдкрд░реАрдХреНрд╖рдгреЛрдВ рдореЗрдВ рд▓реЙрдЧрд┐рдВрдЧ рдЬреЛрдбрд╝рдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИред
Pytest.ini рдлрд╝рд╛рдЗрд▓ рдореЗрдВ рд▓рд╛рдЗрд╡ рд▓реЙрдЧ рдФрд░ рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ рдХреЗ рд▓рд┐рдП рдЯреЗрдореНрдкрд▓реЗрдЯ рд╣реИрдВред
рдЙрджрд╛рд╣рд░рдг рдХрд╛ рдкрд░реАрдХреНрд╖рдг рдХрд░реЗрдВ import pytest import requests import logging @pytest.mark.full @pytest.mark.smoke def test_cat_facts(): query = {"animal_type": "cat", "amount": "2"} response = requests.get("https://cat-fact.herokuapp.com/facts/random", params=query) logging.info(f"Request url: {response.request.url}, body: {response.request.body}") logging.info(f"Request status: {response.status_code}, body: {response.text}") assert response.status_code == 200 @pytest.mark.full @pytest.mark.smoke def test_dog_facts(): query = {"animal_type": "dog", "amount": "2"} response = requests.get("https://cat-fact.herokuapp.com/facts/random", params=query) logging.info(f"Request url: {response.request.url}, body: {response.request.body}") logging.info(f"Request status: {response.status_code}, body: {response.text}") assert response.status_code == 200 @pytest.mark.full def test_horse_facts(): query = {"animal_type": "horse", "amount": "2"} response = requests.get("https://cat-fact.herokuapp.com/facts/random", params=query) logging.info(f"Request url: {response.request.url}, body: {response.request.body}") logging.info(f"Request status: {response.status_code}, body: {response.text}") assert response.status_code == 200 @pytest.mark.bird def test_bird_facts(): query = {"animal_type": "bird", "amount": "2"} response = requests.get("https://cat-fact.herokuapp.com/facts/random", params=query) logging.info(f"Request url: {response.request.url}, body: {response.request.body}") logging.info(f"Request status: {response.status_code}, body: {response.text}") assert response.status_code == 200
pytest.ini [pytest] markers = smoke: for smoking testing full: for regression testing bird: facts only bird log_cli = 1 log_cli_level=INFO log_cli_format = %(asctime)s [%(levelname)8s] %(message)s log_cli_date_format='%Y-%m-%d %H:%M:%S' log_file = test_log.log log_file_level=INFO log_file_format= %(asctime)s [%(levelname)8s] %(message)s log_file_date_format='%Y-%m-%d %H:%M:%S'
рд░рд┐рдкреЛрд░реНрдЯ рдЬрдирд░реЗрд╢рдирд╣рдо рдПрдХ рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдмрдирд╛рддреЗ рд╣реИрдВ, рдЬреЛ рдЕрд╕реЗрдВрдмрд▓реА рдкреВрд░реА рд╣реЛрдиреЗ рдХреЗ рдмрд╛рдж, CI рд╕рд┐рд╕реНрдЯрдо рд╕реЗ рдЬрд╛рдирдХрд╛рд░реА рдПрдХрддреНрд░ рдХрд░рддрд╛ рд╣реИ рдФрд░ рдЙрдиреНрд╣реЗрдВ рд▓реЙрдЧ рдХреЗ рд╕рд╛рде рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЪреИрдЯ рдореЗрдВ рднреЗрдЬ рджреЗрддрд╛ рд╣реИред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЗ рдЕрдВрджрд░, рдЖрдкрдХреЛ рдкрд╣рд▓реЗ рдкреНрд░рд╛рдкреНрдд рдХрд┐рдП рдЧрдП TELEGRAM_BOT рдФрд░ CHAT_ID рдорд╛рдиреЛрдВ рдХреЛ рдмрджрд▓рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рдХреЛрдб import requests import os TRAVIS_TEST_RESULT = os.environ.get("TRAVIS_TEST_RESULT") TRAVIS_REPO_SLUG = os.environ.get("TRAVIS_REPO_SLUG") TRAVIS_BRANCH = os.environ.get("TRAVIS_BRANCH") TRAVIS_JOB_WEB_URL = os.environ.get("TRAVIS_JOB_WEB_URL") TRAVIS_COMMIT_MESSAGE = os.environ.get("TRAVIS_COMMIT_MESSAGE") TELEGRAM_TOKEN = "808619876:GHrtj9zs-KvKhhtWyu1YoxjtIikUYMGVjD8g" CHAT_ID = "272560060" if TRAVIS_TEST_RESULT != 0: build_status = "" else: build_status = "" TEXT = f" : {build_status} \n : {TRAVIS_REPO_SLUG} \n : {TRAVIS_BRANCH} \n Commit : {TRAVIS_COMMIT_MESSAGE} \n -: {TRAVIS_JOB_WEB_URL}" def send_message(): URL = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendMessage" body = {'chat_id': CHAT_ID, 'text': TEXT} response = requests.post(url=URL, json=body) return response def send_file(): URL = f"https://api.telegram.org/bot{TELEGRAM_TOKEN}/sendDocument" body = {'chat_id': CHAT_ID} file = {"document": open("test_log.log")} response = requests.post(url=URL, data=body, files=file) return response send_message() send_file()
рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕рд┐рд╕реНрдЯрдо рдЪрд░ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рддреА рд╣реИ рдФрд░ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рд╕реЗ рдорд╛рди рдкреНрд░рд╛рдкреНрдд рдХрд░рддреА рд╣реИред
рдпрджрд┐ TRAVIS_TEST_RESULT рдХрд╛ рдорд╛рди рд╢реВрдиреНрдп рдХреЗ рдмрд░рд╛рдмрд░ рдирд╣реАрдВ рд╣реИ, рддреЛ рдорд╛рди "рд╕рдлрд▓рддрд╛рдкреВрд░реНрд╡рдХ" рдкрд░ рд╕реЗрдЯ рд╣реИ, Send_message рдлрд╝рдВрдХреНрд╢рди рдХреЛ рдкрд╣рд▓реЗ рдирд┐рд╖реНрдкрд╛рджрд┐рдд рдХрд┐рдпрд╛ рдЬрд╛рддрд╛ рд╣реИ, рдЬреЛ рдЕрд╕реЗрдВрдмрд▓реА рдХреА рдЬрд╛рдирдХрд╛рд░реА рдЪреИрдЯ (рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдирд╛рдо, рдЪрдпрдирд┐рдд рд╢рд╛рдЦрд╛, рдЙрдкрдпреЛрдЧ рдХрд┐рдП рдЧрдП рдХрдорд┐рдЯ рдХрд╛ рдирд╛рдо, рд╡реЗрдм рд▓реЙрдЧ рдХрд╛ рд▓рд┐рдВрдХ) рдХреЛ рднреЗрдЬрддрд╛ рд╣реИ, рдлрд┐рд░ send_file рдлрд╝рдВрдХреНрд╢рди рднреЗрдЬрддрд╛ рд╣реИред рд▓реЙрдЧ рдлрд╝рд╛рдЗрд▓ред
рдкрд░реАрдХреНрд╖рдг рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ, рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдлрд╝рд╛рдЗрд▓ - travis.yml рдЬреЛрдбрд╝реЗрдВред рдЕрдВрджрд░ рд╣рдо рдкрд╛рдЗрдкрд▓рд╛рдЗрди рдХрд╛ рд╡рд░реНрдгрди рдХрд░рддреЗ рд╣реИрдВ рдЬрд┐рд╕рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╡рд┐рдзрд╛рдирд╕рднрд╛ рдХрд╛рдо рдХрд░реЗрдЧреАред
travis.yml language: python python: - "3.7" install: - pip install -r requirements.txt script: pytest -m smoke after_script: - python tg_command.py
рдЗрд╕рдХреЗ рдмрд╛рдж, рд╣рдореЗрдВ рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдореЗрдВ рдЗрд╕реЗ рдЬреЛрдбрд╝рдиреЗ рдХреЗ рд▓рд┐рдП GitHub рдкрд░ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЛ рддреИрдирд╛рдд рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
TRAVIS_CI рдХреА рд╕реНрдерд╛рдкрдирд╛
рд╣рдо
рд╕рд╛рдЗрдЯ рдкрд░ рдЬрд╛рддреЗ рд╣реИрдВ ред
рдЕрдкрдиреЗ GitHub рдЦрд╛рддреЗ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ рд▓реЙрдЧ рдЗрди рдХрд░реЗрдВред рдбреИрд╢рдмреЛрд░реНрдб рдЯреИрдм рдкрд░ рдЬрд╛рдПрдВред рдкрд╣рд▓реЗ рд╕реЗ рдЦреЛрд▓реЗ рдЧрдП DevTools (Network), рдкрд░реАрдХреНрд╖рдг рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреЗ рд╕рд╛рдордиреЗ рд╡рд╛рд▓реА рд╕рд╛рдЗрдЯ рдкрд░ Repositories рд╕рдм-рдЯреИрдм рдореЗрдВ, рд╕реНрд▓рд╛рдЗрдбрд░ рдХреЛ рд╕реНрдерд╛рдирд╛рдВрддрд░рд┐рдд рдХрд░реЗрдВ - рдЗрд╕рдХреА рдЕрд╕реЗрдВрдмрд▓реА рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░реЗрдВред рдиреЗрдЯрд╡рд░реНрдХ рдЯреИрдм (DevTools) рдореЗрдВ, рдПрдХ рд╕рдХреНрд░рд┐рдп рдЕрдиреБрд░реЛрдз рдЖрддрд╛ рд╣реИ, рдЬрд┐рд╕рдХреЗ рдкреВрд░реНрд╡рд╛рд╡рд▓реЛрдХрди рдореЗрдВ рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЖрдИрдбреА рдХреЗ рдмрд╛рд░реЗ рдореЗрдВ рдЬрд╛рдирдХрд╛рд░реА рд╣реЛрддреА рд╣реИ, рд╕рдВрдЦреНрдпрд╛ рдХреЛ рдпрд╛рдж рд░рдЦрдирд╛ рдЪрд╛рд╣рд┐рдП (рдХреЙрдкреА / рд▓рд┐рдЦрдирд╛)ред рд╕реЗрдЯрд┐рдВрдЧ рдЯреИрдм рдореЗрдВ рд╕рд╛рдЗрдЯ рдкрд░ рд╕реНрд╡рд┐рдЪ рдХрд░рдирд╛ред рд╣рдо рдЯреЛрдХрди рдХреЛ рдХреЙрдкреА рдпрд╛ рдпрд╛рдж рдХрд░рддреЗ рд╣реИрдВ - рд╣рдореЗрдВ рдЗрд╕рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред
рдмреЙрдЯ рд╕реЗрдЯрдЕрдк
рдЗрд╕ рд▓реЗрдЦ рдореЗрдВ рд╣рдо рдХреЛрдб рдХреЗ рд╡рд┐рд╢реНрд▓реЗрд╖рдг рдкрд░ рдзреНрдпрд╛рди рдХреЗрдВрджреНрд░рд┐рдд рдирд╣реАрдВ рдХрд░реЗрдВрдЧреЗ, рдЖрдк рдЗрд╕реЗ
рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдореЗрдВ рджреЗрдЦ рд╕рдХрддреЗ рд╣реИрдВред рдЕрдм рд╣рдорд╛рд░реЗ рд▓рд┐рдП рд╡рд┐рд╖рдп рдХреА рдореВрд▓ рдмрд╛рддреЗрдВ рд╕рдордЭрдирд╛ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ, рддреЛ рдЪрд▓рд┐рдП рдЕрдкрдиреЗ рдмреЙрдЯ рдХреА рд╕реНрдерд╛рдкрдирд╛ рдХреЗ рд▓рд┐рдП рдЖрдЧреЗ рдмрдврд╝рддреЗ рд╣реИрдВ:
рднрдВрдбрд╛рд░ рдХреЗ рдЕрдВрджрд░ рдлрд╛рдЗрд▓реЗрдВ рд╣реИрдВ:
- main.py - bot script;
- рдореЙрдбрд▓-рдПрдПрдордбреА - рдУрдЖрд░рдПрдо рдХреЗ рд▓рд┐рдП рдореЙрдбрд▓ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓;
- conf.ini - рдХреЙрдиреНрдлрд╝рд┐рдЧрд░реЗрд╢рди рдЪрд░ рдХреЗ рд╕рд╛рде рдлрд╝рд╛рдЗрд▓;
- runtime.txt - рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЗ рд▓рд┐рдП рдирд┐рд╢реНрдЪрд┐рдд рдкрд╛рдпрдерди рд╕рдВрд╕реНрдХрд░рдг рдорд╛рди;
- procfile - gunicorn рдХреЗ рд▓рд┐рдП рд╕реЗрдЯрд┐рдВрдЧ;
- wsgi.py - gunicorn рдХреЗ рд╕рд╛рде рдПрдкреНрд▓рд┐рдХреЗрд╢рди рд▓реЙрдиреНрдЪ рдлрд╝рд╛рдЗрд▓ред
рдЕрдкрдиреЗ рдмреЙрдЯ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЖрдкрдХреЛ рдбреЗрдЯрд╛ рдХреЛ conf.ini рдореЗрдВ рдмрджрд▓рдирд╛ рд╣реЛрдЧрд╛, рдЕрд░реНрдерд╛рддреН:
- travis_token - рдЯреНрд░реИрд╡рд┐рд╕ рд╕реАрдЖрдИ рдХреЛ рдкреНрд░рд╛рдкреНрдд рдЯреЛрдХрди рдЗрдВрдЧрд┐рдд рдХрд░реЗрдВ;
- travis_base_url - рдЯреНрд░реИрд╡рд┐рд╕ CI рдПрдкреАрдЖрдИ рдХрд╛ рдкрддрд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ;
- travis_repository_id - рдЯреНрд░реИрд╡рд┐рд╕ CI рдХреЗ рдЕрдВрджрд░ рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдХреЗ рд╕рд╛рде рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЖрдИрдбреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ;
- telegram_chat_id - рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдХреА рдЪреИрдЯ рдЖрдИрдбреА рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВ рдЬрд╣рд╛рдВ рдмреЙрдЯ рд╕реЗ рд╕рдВрджреЗрд╢ рднреЗрдЬреЗ рдЬрд╛рдПрдВрдЧреЗ;
- telegram_bot_url - bot рдХреЛ url рдирд┐рд░реНрджрд┐рд╖реНрдЯ рдХрд░реЗрдВред
Conf.ini рдЙрджрд╛рд╣рд░рдг [travis] travis_token = token HkjhkjgGKJhjgFGfdgd travis_base_url = https://api.travis-ci.org travis_repository_id = 10898384 [telegram] telegram_chat_id = 24234234 telegram_bot_url = https://api.telegram.org/bot87543366:AAHtj9zs-Kv4zGWyu1eTXegikUYMGVjD8g/
рдмреЙрдЯ рдХреЗ рд╕рд┐рджреНрдзрд╛рдВрддрдпрд╣ рдорд╣рддреНрд╡рдкреВрд░реНрдг рд╣реИ рдХрд┐ рдкреНрд░рддреНрдпреЗрдХ рдЕрдиреБрд░реЛрдз рдХреЛ 200 рдХреА рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдХреА рд╕реНрдерд┐рддрд┐ рджреЗрдиреА рдЪрд╛рд╣рд┐рдПред рдЕрдиреНрдпрдерд╛, рдЬрдм рддрдХ рдХрд┐ рдпрд╣ рдПрдХ рд╡реИрдз рдкреНрд░рддрд┐рдХреНрд░рд┐рдпрд╛ рдкреНрд░рд╛рдкреНрдд рдирд╣реАрдВ рдХрд░рддрд╛ рд╣реИ рддрдм рддрдХ рдЯреЗрд▓реАрдЧреНрд░рд╛рдо рдЕрдиреБрд░реЛрдзреЛрдВ рдХреЛ рднреЗрдЬрдирд╛ рд╢реБрд░реВ рдХрд░ рджреЗрддрд╛ рд╣реИред
рдмреЙрдЯ рдореЗрдВ рдХрдорд╛рдВрдб рдХрд╛ рдПрдХ рд╕реЗрдЯ рд╣реИ:
рд╕реАрдорд╛рдВрдХрдХ рдХреЛ рдЫреЛрдбрд╝рдХрд░ рдХреЛрдИ рднреА рд╡рд┐рд╢реЗрд╖ рд╡рд░реНрдг рд╣реЛ рд╕рдХрддрд╛ рд╣реИред
- add_m - рдПрдХ рдкрд░реАрдХреНрд╖рдг рдХрд┐рдЯ (рдЕрдЬрдЧрд░ рдХреЗ рдирд┐рд╢рд╛рди) рдЬреЛрдбрд╝реЗрдВред
рд╕рд╛рдБрдЪрд╛: * рдХрдорд╛рдВрдб * {рдХрд┐рдЯ рд╡рд┐рд╡рд░рдг} {рд╕реАрдорд╛рдВрдХрдХ} {рдирд╛рдо рдЪрд┐рд╣реНрди}ред
рдЙрджрд╛рд╣рд░рдг: add_m рдкрд░реАрдХреНрд╖рдг рдкрдХреНрд╖реА / рдкрдХреНрд╖реАред - add_b - рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдЦрд╛ рдЬреЛрдбрд╝реЗрдВред
рд╕рд╛рдБрдЪрд╛: * рдХрдорд╛рдВрдб * {рд╢рд╛рдЦрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг} {рдкрд░рд┐рд╕реАрдорди} {рдЧрд┐рдЯ рд╕реЗ рд╢рд╛рдЦрд╛ рдХрд╛ рдирд╛рдо}ред
рдЙрджрд╛рд╣рд░рдг: add_b рдорд╛рд╕реНрдЯрд░ред - рдЪрдпрди рдХрд░реЗрдВ - рдЖрдк рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд░реВрдк рд╕реЗ рдкрд░реАрдХреНрд╖рдг рдХреЗ рд▓рд┐рдП рдПрдХ рд╢рд╛рдЦрд╛ рдХрд╛ рдЪрдпрди рдХрд░рдиреЗ рдХреА рдЕрдиреБрдорддрд┐ рджреЗрддрд╛ рд╣реИред
рд╕рд╛рдБрдЪрд╛: * рдХрдорд╛рдВрдб *ред
рдЙрджрд╛рд╣рд░рдг: рд╕реЗрд▓реЗрдХреНрдЯ рдХрдорд╛рдВрдб рджрд░реНрдЬ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, рдмрдЯрди рдЙрди рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВ рдЬреЛ add_b рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдереЗред - рд░рди - рдЕрд╕реЗрдВрдмрд▓реА рд╢реБрд░реВ рдХрд░рдиреЗ рдХрд╛ рдЖрджреЗрд╢ред
рд╕рд╛рдБрдЪрд╛: * рдХрдорд╛рдВрдб *ред
рдЙрджрд╛рд╣рд░рдг: рд░рди рдХрдорд╛рдВрдб рдореЗрдВ рдкреНрд░рд╡реЗрд╢ рдХрд░рдиреЗ рдХреЗ рдмрд╛рдж, add_m рдХрдорд╛рдВрдб рдХреЗ рд╕рд╛рде рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рдЬреЛрдбрд╝реЗ рдЧрдП рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдХреЗ рд╕реЗрдЯ рдХреЛ рдЪреБрдирдиреЗ рдХреЗ рд▓рд┐рдП рдмрдЯрди рджрд┐рдЦрд╛рдИ рджреЗрддреЗ рд╣реИрдВред рд╕реНрдЯрд╛рд░реНрдЯрдЕрдк рдкрд░, рдЪрдпрдирд┐рдд рдХрдорд╛рдВрдб рджреНрд╡рд╛рд░рд╛ рдирд┐рд░реНрджрд┐рд╖реНрдЯ рд╢рд╛рдЦрд╛ рд╕реНрд╡рдЪрд╛рд▓рд┐рдд рд░реВрдк рд╕реЗ рдЪреБрдиреА рдЬрд╛рддреА рд╣реИред - del_m - рдкрд░реАрдХреНрд╖рдгреЛрдВ рдХрд╛ рдПрдХ рд╕реЗрдЯ рдирд┐рдХрд╛рд▓рддрд╛ рд╣реИред
рд╕рд╛рдБрдЪрд╛: * рдХрдорд╛рдВрдб * {рдирд╛рдо рдирд┐рд╢рд╛рди}ред
рдЙрджрд╛рд╣рд░рдг: del_m рдкрдХреНрд╖реАред - del_b - рдбреЗрдЯрд╛рдмреЗрд╕ рдореЗрдВ рджрд░реНрдЬ рд╢рд╛рдЦрд╛рдУрдВ рдХреЛ рд╣рдЯрд╛рддрд╛ рд╣реИред
рд╕рд╛рдБрдЪрд╛: * рдХрдорд╛рдВрдб * {git рд╕реЗ рд╢рд╛рдЦрд╛}ред
рдЙрджрд╛рд╣рд░рдг: del_b рдорд╛рд╕реНрдЯрд░ред
рдмреЙрдЯ рдХреИрд╕реЗ рдХрд╛рдо рдХрд░рддрд╛ рд╣реИ?1. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдПрдХ рдкрд░реАрдХреНрд╖рдг рд╕реВрдЯ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (add_m):
рдХрдорд╛рдВрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЧрд┐рдЯ рдореЗрдВ рд╢рд╛рдЦрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рдирд╛рдоред рдирд╛рдо рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЕрдВрджрд░ mark_name рдХреЙрд▓рдо рдореЗрдВ рдФрд░ mark_description рдХреЙрд▓рдо рдореЗрдВ рд╡рд┐рд╡рд░рдг рд▓рд┐рдЦрд╛ рдЬрд╛рддрд╛ рд╣реИред
2. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╢рд╛рдЦрд╛рдПрдВ рдЬреЛрдбрд╝рддрд╛ рд╣реИ (add_b):
рдХрдорд╛рдВрдб рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбреЗрдЯрд╛ рдХреЛ 2 рднрд╛рдЧреЛрдВ рдореЗрдВ рд╡рд┐рднрд╛рдЬрд┐рдд рдХрд░рддрд╛ рд╣реИ - рдЧрд┐рдЯ рдореЗрдВ рд╢рд╛рдЦрд╛ рдХрд╛ рд╡рд┐рд╡рд░рдг рдФрд░ рдирд╛рдоред рдирд╛рдо рдХреЛ рдбреЗрдЯрд╛рдмреЗрд╕ рдХреЗ рдЕрдВрджрд░ Branch_name рдХреЙрд▓рдо рдореЗрдВ рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИ рдФрд░ рдЗрд╕рдХрд╛ рд╡рд┐рд╡рд░рдг Branch_description рдХреЙрд▓рдо рдореЗрдВ рд╣реИред
3. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдбрд┐рдлрд╝реЙрд▓реНрдЯ рд╢рд╛рдЦрд╛ рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИ (рдЪреБрдиреЗрдВ):
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪреИрдЯ рдореЗрдВ рдмрдЯрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рдЬреЛ рдЯреЗрдмрд▓ рдмреНрд░рд╛рдВрдЪ_рдбрд┐рд╕реНрдХреНрд░рд┐рдкреНрд╢рди рдФрд░ рдмреНрд░рд╛рдВрдЪ_рдирд╛рдо рдХреЗ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдирддрд╛ рд╣реИред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рд╡рд╛рдВрдЫрд┐рдд рд╢рд╛рдЦрд╛ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдЯрди рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред рдпрд╣ рдкрд╕рдВрджреАрджрд╛_рдмреНрд░рдВрдЪ рддрд╛рд▓рд┐рдХрд╛ рдХреЗ рд▓рд┐рдП рд▓рд┐рдЦрд╛ рдЧрдпрд╛ рд╣реИред
4. рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдмрд┐рд▓реНрдб рдЗрдирд┐рд╢рд┐рдпрд▓рд╛рдЗрдЬрд╝реЗрд╢рди (рд░рди) рд╢реБрд░реВ рдХрд░рддрд╛ рд╣реИ:
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдЪреИрдЯ рдореЗрдВ рдмрдЯрди рдкреНрд░рд╛рдкреНрдд рдХрд░рддрд╛ рд╣реИ, рддрд╛рд▓рд┐рдХрд╛рдУрдВ рд╕реЗ рдбреЗрдЯрд╛ рдХреЗ рдЕрдиреБрд╕рд╛рд░ рдмрдирддрд╛ рд╣реИ
mark_description рдФрд░ mark_nameред рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рдСрдЯреЛрдЯреЗрд╕реНрдЯ рдЪрд▓рд╛рдиреЗ рдХреЗ рд▓рд┐рдП рдХрд┐рдЯ рдХреЗ рд╕рд╛рде рдПрдХ рдмрдЯрди рдХрд╛ рдЪрдпрди рдХрд░рддрд╛ рд╣реИред
рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЪреБрдиреЗ рдЧрдП рдбреЗрдЯрд╛ рдХреЗ рдЖрдзрд╛рд░ рдкрд░, рдмреЙрдЯ TravisCI рд╡рд░реНрдЧ рдореЗрдВ рдЯреНрд░рд┐рдЧрд░ рд╡рд┐рдзрд┐ рдореЗрдВ рдПрдХ рдЕрдиреБрд░реЛрдз рдЙрддреНрдкрдиреНрди рдХрд░рддрд╛ рд╣реИ рдФрд░ рдирд┐рд╖реНрдкрд╛рджрди рдХреЗ рд▓рд┐рдП рдЯреНрд░реИрд╡рд┐рд╕ рдХреЛ рднреЗрдЬрддрд╛ рд╣реИред рдЯреНрд░реИрд╡рд┐рд╕ рдкреНрд░рдгрд╛рд▓реА рдХреЗ рдЕрдВрджрд░, рдПрдХ рдмрд┐рд▓реНрдб рд╡рд┐рдХрд▓реНрдк рд╕рдХреНрд░рд┐рдп рд╣реЛрддрд╛ рд╣реИред рдпрд╣ рд╡рд┐рдХрд▓реНрдк travis.yml рдлрд╝рд╛рдЗрд▓ рдХреЛ рдУрд╡рд░рд░рд╛рдЗрдб рдХрд░рддрд╛ рд╣реИ, рд╕реНрдХреНрд░рд┐рдкреНрдЯ рд╕реЗрдХреНрд╢рди рдХреЛ рдЙрдкрдпреЛрдЧрдХрд░реНрддрд╛ рджреНрд╡рд╛рд░рд╛ рдЪрдпрдирд┐рдд рдбреЗрдЯрд╛ рдореЗрдВ рдмрджрд▓рддрд╛ рд╣реИред
HEROKU рдкрд░ рддреИрдирд╛рддреА
рдмреЙрдЯ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдЗрд╕реЗ рд╣реЛрд╕реНрдЯрд┐рдВрдЧ рдкрд░ рддреИрдирд╛рдд рдХрд░рдирд╛ рд╣реЛрдЧрд╛ред рдореИрдВ рд╣реЗрд░реЛрдХреВ рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдиреЗ рдХреА рд╕рд▓рд╛рд╣ рджреЗрддрд╛ рд╣реВрдВ, рдХреНрдпреЛрдВрдХрд┐ рдЗрд╕ рдкреНрд▓реЗрдЯрдлреЙрд░реНрдо рдореЗрдВ рдПрдХ рдореБрдлреНрдд рдЯреИрд░рд┐рдл рд╣реИ, рдЬреЛ рдмреЙрдЯ рдХреЛ рдХрд╛рдо рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП рдЖрд╡рд╢реНрдпрдХ рд╢рдХреНрддрд┐ рдкреНрд░рджрд╛рди рдХрд░рддрд╛ рд╣реИред
рдмреЙрдЯ рдХреА рддреИрдирд╛рддреА рдХреИрд╕реЗ рдХрд░реЗрдВ?рдкреВрд░реА рдкреНрд░рдХреНрд░рд┐рдпрд╛ рдХрд╛ рд╡рд░реНрдгрди рдирд╣реАрдВ рдХрд░рдиреЗ рдХреЗ рд▓рд┐рдП, рдореИрдВ рд╢реБрд░реБрдЖрдд рдХреЗ рд▓рд┐рдП рдЖрдзрд┐рдХрд╛рд░рд┐рдХ
рджрд╕реНрддрд╛рд╡реЗрдЬ рдХрд╛ рд▓рд┐рдВрдХ рдЫреЛрдбрд╝ рджреВрдВрдЧрд╛:
рдпрджрд┐ рдЖрдк GUI рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рд╣рд░реЛрдХреВ рдХреЗ рд╕рд╛рде рдХрд╛рдо рдХрд░рдирд╛ рдЪрд╛рд╣рддреЗ рд╣реИрдВ, рддреЛ Github рдкрд░ рдХреЛрдб рднрд░реЗрдВред рдЖрдкрдХреЛ рд╣рд░реЛрдХреВ рд╡реЗрдм рдЗрдВрдЯрд░рдлрд╝реЗрд╕ рдХреЗ рдорд╛рдзреНрдпрдо рд╕реЗ рдкрдВрдЬреАрдХрд░рдг рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИред рдкрдВрдЬреАрдХрд░рдг рдХреЗ рдмрд╛рдж, рдирдпрд╛ -> рдирдпрд╛ рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдмрдирд╛рдПрдВ -> рдПрдкреНрд▓рд┐рдХреЗрд╢рди рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдПрдХ рдХреНрд╖реЗрддреНрд░ рдЪреБрдиреЗрдВред рдкрд░рд┐рдирд┐рдпреЛрдЬрди рдЯреИрдм рдкрд░ рдЬрд╛рдПрдБ рдФрд░ рдкрд░рд┐рдирд┐рдпреЛрдЬрди рд╡рд┐рдзрд┐ рдореЗрдВ Github рдХреЗ рд╕рд╛рде рдПрдХреАрдХрд░рдг рдХрд╛ рдЪрдпрди рдХрд░реЗрдВред
рдЗрд╕рд╕реЗ рдкрд╣рд▓реЗ рдХрд┐ рд╣рдо рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХреА рдЦреЛрдЬ рдХреЗ рд▓рд┐рдП рдПрдХ рдмреНрд▓реЙрдХ рдкреНрд░рдХрдЯ рдХрд░реЗрдВред рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдХрд╛ рдирд╛рдо рджрд░реНрдЬ рдХрд░реЗрдВ рдФрд░ рдЦреЛрдЬ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдЦреЛрдЬ рдкрд░рд┐рдгрд╛рдореЛрдВ рдореЗрдВ, рд░рд┐рдкреЙрдЬрд┐рдЯрд░реА рдирд╛рдо рдХреЗ рд╡рд┐рдкрд░реАрдд, рдХрдиреЗрдХреНрдЯ рдмрдЯрди рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред рдореИрдиреНрдпреБрдЕрд▓ рдирд┐рдпреЛрдЬрд┐рдд рдмреНрд▓реЙрдХ рдореЗрдВ, рд╢рд╛рдЦрд╛ рдХрд╛ рдЪрдпрди рдХрд░реЗрдВ рдФрд░ "рддреИрдирд╛рдд рдХрд░реЗрдВ" рдкрд░ рдХреНрд▓рд┐рдХ рдХрд░реЗрдВред
рдЕрдВрддрд┐рдо рдХреНрд╖рдг - рдЖрдкрдХреЛ рдПрдХ GET рдЕрдиреБрд░реЛрдз рдХрд╛ рдЙрдкрдпреЛрдЧ рдХрд░рдХреЗ webhooks рдХреЛ рд╕рдХреНрд░рд┐рдп рдХрд░рдиреЗ рдХреА рдЖрд╡рд╢реНрдпрдХрддрд╛ рд╣реИ:
https://api.telegram.org/bot{id_}/setWebhook?url=https://{_}.herokuapp.com/bot
рдмреЙрдЯ рдХрд╛ рдЗрд╕реНрддреЗрдорд╛рд▓ рдХрд┐рдпрд╛ рдЬрд╛ рд╕рдХрддрд╛ рд╣реИред рд╣рдо рдЬрд╛рдБрдЪрддреЗ рд╣реИрдВ рдХрд┐ рд╕рдм рдХреБрдЫ рд╣рдорд╛рд░реЗ рд▓рд┐рдП рдХрд╛рдо рдХрд░ рд░рд╣рд╛ рд╣реИ:
