Як написати telegram бота практичне керівництво

Як написати telegram бота практичне керівництво
Останнім часом Telegram у всіх на слуху. Потрібно віддати належне відділу маркетингу цього додатка, галас підняли на славу. Однією з основних "фішок" Telegram є його нібито захищеність - за словами Павла Дурова вся переписка між користувачами шифрується. Більш того, жодна спец.служб світу не матиме доступ до ваших повідомлень. Але в даній статті мова не про це. Сьогодні хотілося б поговорити про не менш крутий фішці в Telegram, а саме про ботах. Крім того, що в мережі вже повно інформації про різного роду Telegram ботах (github бот, наприклад), месенджер відкрив своє API для розробників, і тепер кожен може створити свого власного бота з блекджек і пляшками.

У статті я приведу приклад написання онлайн бота з використанням Python і Django фреймворка. Тобто ми "запив" повноцінне веб-додаток, що буде крутитися на віддаленому хості і приймати команди від користувачів. Весь вихідний текст доступний в моєму github репозиторії.

Документація, що описує процес взаємодії з ботами Telegram знаходиться тут. Щоб не винаходити велосипед, я знайшов непогану Python бібліотеку, що реалізує всі основні функції ботів - telepot. Як я вже згадував раніше, для того, щоб обслуговувати користувачів нашого бота ми буде розробляти веб-додаток, використовуючи Django фреймворк.

Як створити Telegram бота?

Для початку нам необхідно зареєструвати в Telegram нашого майбутнього бота. Це робиться в такий спосіб:

Як написати telegram бота практичне керівництво

  • Для нашого бота я вибрав ім'я PythonPlanetBot, так як його основна функція полягає в парсінгу RSS feed сайту Python Planet і видача інформації про останні постах користувачеві :)

Як написати telegram бота практичне керівництво

Після створення бота, зверніть увагу на рядок з текстом:

Use this token to access the HTTP API:

За якою слід т.зв. token за яким ми будемо маніпулювати нашим ботом. Крім функції створення telegram бота, BotFather також має ряд інших можливостей:

і так далі. Повний опис доступних команд можна побачити на першому скріншоті.

Приступаємо до кодування

Як я раніше вже згадував, ми будемо писати веб-додаток на Django. Але варто зазначити, що це робити необов'язково. Можна обійтися і звичайним Python скриптом, правда в цьому випадку необхідно буде періодично опитувати Telegram на предмет нових запитів від користувачів бота (використовуючи метод getUpdates) і збільшуючи offset для отримання найостанніших даних без повторень. У Telegram існує два взаємовиключних методу отримання команд / повідомлень для вашого бота.

  • Використання виклику API методу getUpdates
  • установка Webhook

Отже, повернемося до python бібліотеці для роботи з Telegram - telepot. На поточний момент самої останньої її версій є 6.7. Встановлюємо її в віртуальне оточення python virtualenv:

Найпростіший варіант взаємодії з Telegram ботом на Python виглядає наступним чином:

Змінної token присвоюємо значення токена, отриманого при створенні бота через BotFather. У підсумку після виконання цих команд ми отримаємо:

Вітаю! Ми викликали найпростіший API запит getMe, який повертає інформацію про боті: username, id, first_name.

Додамо нашого бота до себе в контакт-лист і пошлемо йому першу стандартну команду / start

Як написати telegram бота практичне керівництво

Процес спілкування з telegram ботом відбувається по HTTPS; для передачі даних використовується JSON. Метод getUpdates повертає список / масив з об'єктів типу Update. Усередині Update знаходиться об'єкт Message. Для стандартного взаємодії з ботом нас фактично цікавить саме об'єкт Message, у якого ми зчитуємо атрибут text, який зберігає в собі текст, переданий боту і об'єкт chat, в якому лежить інформація про користувача, який ініціював спілкування з нашим Telegram ботом. Також є параметр update_id, який служить в якості offset параметра при виклику методу getUpdates. Тобто update_id + 1 поверне всі повідомлення, що надійшли після останнього update_id, при цьому всі попередні повідомлення будуть видалені.

На етапі написання найпростішого Telegram бота нам цих викликів досить. Приступимо до написання Django додатки для обслуговування наших користувачів.

Проста функція парсинга RSS фида Planet Python виглядає ось так:

Тут я використовую python бібліотеку requests для роботи з HTTP в самому простому варіанті без обробки помилок. Django "в'юшки" виглядає наступним чином:

CommandReceiveView чекає POST запит на себе, парсит його і відповідає виходячи із заданої команди. Повноцінне Django додаток можна знайти за цим посиланням. Варто відзначити в коді використання ще одного API виклику - sendMessage. Цей метод відправляє повідомлення заданому користувачеві, використовуючи при цьому chat_id і сам текст повідомлення. Chat_id - це унікальний ідентифікатор чату між користувачем і ботом (його ідентифікатор є у відповіді на запит getUpdates). У Telegram ботів є одне обмеження, вони не можуть посилати повідомлення користувачам, які попередньо не ініціювали спілкування з ним. Мабуть це зроблено щоб уникнути масового створення спам-ботів.

Отже, веб-додаток на Django запущено. Як же почати тестувати бота? А все дуже просто - необхідно симулювати дії Telegram сервісу. Для цього нам знадобиться HTTP клієнт і тіло запиту. Як HTTP клієнта я часто використовую Chrome плагін під назвою Postman. а тіло запиту ми візьмемо безпосередньо з даних, отриманих за допомогою API виклику getUpdates.

Після запуску runserver, URL на який необхідно надсилати запит виглядає наступним чином:

де BOT_TOKEN - це токен нашого бота. Дивимося скріншот:

Як написати telegram бота практичне керівництво

А давайте-ка відправимо команду feed для отримання списку новин з Planet Python:

Як написати telegram бота практичне керівництво
Як написати telegram бота практичне керівництво

На скріншотах видно, що бот адекватно відреагував на нашу команду вивести список останніх 10 постів.

Наступним кроком є ​​Деплой нашого Django додатки на віддалений хост і наступний виклик методу setWebhook для передачі URL на який буде надсилатися POST запит від сервісу Telegram кожен раз при надходженні команд боту від користувачів. Про це ми поговоримо в наступній статті.

Як написати telegram бота практичне керівництво

На каналі вже понад 1000 учасників, тому приєднуйтесь і Ви - DevBrain