Как создать telegram-бота с помощью библиотеки python-telegram-bot

Структура проекта

Основные компоненты и файлы для создания чат-бота на Rasa:

  1. Rasa NLU или Natural language understanding. Встроенные в Rasa алгоритмы NLU отвечают за определение намерения и извлечение сущностей. Как правило, для того, чтобы прописать интенты и все относящиеся к ним примеры, создается файл с названием “nlu.yml” (при инициализации бота такой файл создается автоматически и уже содержит примеры для обучения).
    Пример “nlu.yml”:

    А что, бот понимает текст на русском? Не совсем. Вот что примерно происходит под капотом:

    • Встроенный в Rasa алгоритм преобразует примеры для интентов в вектора через bag of words, они подаются на вход нейросетям:
      Таким образом, после обучения каждому намерению будет поставлен в соответствие некий вектор.
    • При получении пользовательского ввода предложение точно также векторизируется и прогоняется через обученную модель. После чего рассчитывается расстояние от полученного вектора до всех векторов наших намерений. В результате мы получаем ранжированный список наиболее вероятных намерений, а интенты, вектора которых находятся совсем далеко от пользовательского, то есть совсем далекие по смыслу, отсекаются. Из введенных данных также вычленяются сущности, список которых прописывается разработчиком, далее сущности хранятся в памяти бота, в своего рода ячейках или слотах.
  2. Rasa stories: истории диалогов чат-бота с пользователями в виде интент — действие.
    Истории диалогов обычно фиксируются следующим образом:

    В вышеописанном примере чат-бот определил намерение или интент как “приветствие” и выполнил действие — отправил текстовое сообщение пользователю, в котором поинтересовался о том, как у него дела.

    То, как именно должен ответить ассистент можно прописать в файле “domain.yml” или (что чуть-чуть сложнее) с помощью функции на python (actions.py). Рассмотрим первый вариант, определение реакции в DOMAIN с ключевым словом “utter”:

    Еще один пример типичной истории диалога с примерами выделенных ботом сущностей :

  3. Rasa actions: набор действий, которые может предпринимать бот, например, вызов API, отправка изображения или текстовый ответ. Есть ряд дефолтных действий для чат-бота, например, вернуться в начальную точку диалога, на каком шаге не находился бы бот или ожидать пользовательского сообщения. Действие также можно кастомизировать в виде функций на python (подробнее о действиях).
  4. Rasa rules: это небольшие кусочки диалогов, описывающие как бот должен действовать в определенной ситуации, причем эти правила строго выполняются ботом.

Подробнее с документацией Rasa можно ознакомиться на официальном сайте.

Как всё будет работать

В этом проекте три звена: наш компьютер с Python, сервер Телеграма и Телеграм-клиент.

На компьютере работает интерпретатор Python, а внутри интерпретатора крутится наша программа на Python. Она отвечает за весь контент: в неё заложены все шаблоны текста, вся логика, всё поведение.

Внутри программы на Python работает библиотека, которая отвечает за общение с сервером Телеграма. В библиотеку мы вшили секретный ключ, чтобы сервер Телеграма понимал, что наша программа связана с определённым ботом.

Когда клиент с Телеграмом запрашивает у бота гороскоп, запрос приходит на сервер, а сервер отправляет его на наш компьютер. Запрос обрабатывается программой на Python, ответ идёт на сервер Телеграма, сервер отдаёт ответ клиенту. Изи:

Обратите внимание, что работать наш бот будет только тогда, когда включён компьютер и на нём запущена программа на Python. Если компьютер выключится, пропадёт интернет или вы отключите интерпретатор, то бот работать перестанет: запросы будут приходить, но никто на них не ответит

В одной из следующих частей мы сделаем так, чтобы это всё работало на удалённом сервере и было всегда доступно.

Обработка ошибок¶

При работе бота неизбежно возникновение различных ошибок, связанных не с кодом, а с внешними событиями. Простейший пример:
попытка отправить сообщение пользователю, заблокировавшему бота. Чтобы не оборачивать каждый вызов в ,
в aiogram существует специальный хэндлер для исключений, связанных с Bot API.
Рассмотрим следующий пример кода, имитирующий задержку перед ответом пользователю:

За эти 10 секунд пользователь может успеть заблокировать бота со своей стороны и попытка вызвать метод приведёт
к появлению исключения . Напишем специальный хэндлер для этого исключения:

Аналогично пишутся обработчики и на другие исключения. Таким образом, если одна и та же непредвиденная ситуация может
возникнуть в различных хэндлерах, то можно вынести её обработку в отдельный хэндлер ошибок. Кода будет меньше, а оставшийся
станет читабельнее.

Важно

У errors_handler есть одна особенность, из-за которой его использование может быть нежелательно. Дело в том, что
после срабатывания и завершения хэндлера, управление в исходную функцию не возвращается. Проще говоря, если,
например, 57-я итерация цикла из 100 привела к срабатыванию errors_handler, остальные итерации выполнены не будут,
как и весь остальной код исходной функции. В этом случае ничего не остаётся, кроме как использовать .

Как новичку создать бота для Телеграма на Python?

Сейчас будет небольшая и не очень подробная теоретическая инструкция по созданию. Здесь же скажу пару слов о возможных языках, которые вы можете выбрать: PHP и Javascript. И в том и в другом случае скорость работы результата будет выше, но в целом процесс написания сложнее и дольше. Именно поэтому Питон и является самым распространённым решением.

  1. Регистрируем робота у @BotFather. Стандартная процедура. Для этого пишем ему start, затем – /newbot, далее пишем имя и username, который должен заканчиваться на bot. Сохраняем токен, который «батя» нам пришлёт.
  2. Необходимо установить на компьютер следующее:
  • Python, желательно версии 3.4 или новее.
  • Систему управления пакетами pip – get-pip.py.
  • Это – библиотека API, значительно упрощает жизнь в плане обработки и отправки запросов.
  1. Пишем код. Как я писала до этого, инструкция будет минимальной и больше теоретической, поэтому каких-то сугубо практических решений я вам не дам, но могу порекомендовать решение для некоторых нюансов, с которыми столкнулась сама при моей неудачной попытке.
  2. Для обработки получаемой информации используйте handler. Этот обработчик притом может работать не только с текстом, но и с различными медиа-файлами. С его же помощью, кстати, можно задать нашему роботу и различные команды, которые очень упростят работу с ним как вам, так и пользователям.
  3. Для постоянного обновления запросов от серверов Телеграм подключите функцию Polling и задайте параметр «non_stop=True». Это предотвратит прекращение работы при ошибках. Чаще всего такое происходит при долгом ответе серверов мессенджера.

Какой способ создания выбрать?

Итак, мы подошли к главному – вы уже примерно знаете, с чем столкнётесь на каждом из путей, с которым столкнётесь. И какой же выбрать? С одной стороны, если вам не нужен какой-то особенный функционал, и нужно создать, например, чат-бота, достаточно будет обычного конструктора. Зачем в этом случае платить кому-то или тратить время на изучение языков программирования? Если же функционала таких инструментов-помощников вам мало, уже стоит задуматься либо над тем, где изучить Питона, либо над тем, где достать деньги на услуги профессионалов. И здесь уже я не могу дать вам точного ответа – всё зависит от вас. Если ваше время вам дороже, чем деньги, стоит заплатить. Если же наоборот – вперёд навстречу новым знаниям.

Также можете просто найти Телеграм-ботов. О том, где их искать, читайте в статье “Ищем ботов в Телеграм правильно“.

Установка¶

Для начала давайте создадим каталог для бота, организуем там virtual environment (далее venv) и
установим библиотеку aiogram.
Проверим, что установлен Python версии 3.7 (если вы знаете, что установлен 3.8 и выше, можете пропустить этот кусок):

О версиях aiogram

В этой главе используется aiogram версии 2.9.2, но перед началом работы рекомендую заглянуть в
канал релизов библиотеки и проверить наличие более новой версии. Подойдёт любая
более новая, начинающаяся с цифры 2, поскольку в будущем ожидается релиз aiogram 3.0 с заметными изменениями
и без обратной совместимости.
Чтобы избежать неприятностей, зафиксируемся на 2.9.2 и далее будем обновляться вручную.

Обратите внимание на префикс «venv» в терминале. Он указывает, что мы находимся в виртуальном окружении с именем «venv».
Проверим, что внутри venv вызов команды указывает на всё тот же Python 3.7:. Последней командой мы вышли из venv, чтобы он нам не мешал

Последней командой мы вышли из venv, чтобы он нам не мешал.

Часть 2 Написание кода

sudo apt-get install python python-pip

Далее воспользуемся системой управления пакетами PIP, которая используется для установки и управления программными пакетами, и установим библиотеку PyTelegramBotAPI (Telebot):

Создадим логику работы нашего бота. Используя полноценный IDE или простой текстовый редактор создадим файл ourbot.py и заполним его необходимой логикой.

import telebot 

bot = telebot.TeleBot(‘851216368:AAG6_JHHsIqAK-lX2CxOWQHTAM109zdrcZM’)

Теперь создадим метод, для получения сообщений.

Возможности PyTelegramBotAPI позволяют отправлять боту аудио (content_types=[‘audio’), видео (content_types=[‘video’), документы (content_types=[‘document’), текст (content_types=[‘text’), географический адрес (content_types=[‘location’), данные контакта (content_types=[‘contact’) и стикеры (content_types=[‘sticker’).  Мы, для простоты опыта, будем общаться с ботом только текстом:

@bot.message_handler(content_types=)
def handle_text_messages(message):

Теперь рассмотрим логику обработки наших текстовых сообщений. Мы хотим захардкодить простое общение бота с пользователем: бот должен уметь здороваться, когда с ним здороваются, уметь отвечать на вопросы «Кто ты?», «Как тебя зовут?» и «Что ты умеешь?».

Видео курсы по схожей тематике:

UX/UI Design Стартовый

Артур Рыгус

UX/UI Design мобильных приложений

Владислав Шевченко

Создаем игру типа “Pokémon Go“

Роман Самчук

    if message.text == «Привет»:
        bot.send_message(message.from_user.id, «Привет»)
    elif message.text == «Кто ты?»:
        bot.send_message(message.from_user.id, «Я тестовый чатбот для учебного примера.»)
    elif message.text == «Как тебя зовут?»:
        bot.send_message(message.from_user.id, «Меня зовут MyFirstTestBot.»)
    elif message.text == «Что ты умеешь?»:
        bot.send_message(message.from_user.id, «Я умею отвечать на несколько простых вопросов — кто я, как меня зовут и что я умею делать.»)
    else:
        bot.send_message(message.from_user.id, «Я тебя не понимаю. Напиши что-то другое.»)

После тела метода, обрабатывающего наши запросы к боту, добавим вызов метода:

bot.polling(none_stop=True, interval=0)

Задачей этого метода является создание потока, в котором бот отправляет запросы на сервер, уточняя таким способом, не писал ли ему кто-то сообщение. Параметр none_stop: False означает, что наша программа будет продолжать отправлять запросы на сервер после получения сообщения об ошибке от сервера Telegram.

Сохраним наш код:

Мы можем протестировать работу нашего бота, запустив его код в той IDE, в которой мы писали. И написав нашему боту в мессенджере.

Все работает.

Наш учебный Telegram-бот создан. Мы можем запустить наш файл локально, и он будет отрабатывать запросы к нему через мессенджер прямо на нашем компьютере, выступающим в роли сервера. Но это не очень удобная практика. Для нормальной работы код желательно залить на отдельный сервер и запустить его там.

Вопросы заливки нашего простого бота на сервер мы рассмотрим в следующей статье.

Сохраняем и предлагаем

В 11-м уроке я использовал библиотеку Vedis для сохранения состояний в файле, чтобы те не сбрасывались после перезагрузки бота. В этот раз мы будем сохранять всё в памяти, а выбор постоянного хранилища останется за читателем, чтобы не навязывать то или иное решение. Разумеется, данные в памяти сотрутся при остановке бота, но для примера так даже лучше.

Наше хранилище будет основано на стандартных питоновских словарях (dict), причём их будет два: первый словарь содержит пары (“id пользователя”, “массив сохранённых викторин”), а второй — пары (“id викторины”, “id автора викторины”). Зачем два словаря? В дальнейшем нам нужно будет по идентификатору викторины получать некоторую информацию о ней. Необходимые нам сведения лежат в первом словаре, но в виде значений, а не ключей. Поэтому нам пришлось бы проходиться по всем возможным парам ключ-значение, чтобы найти нужную викторину.

Для ускорения поиска мы заведём второй словарь, чтобы по идентификатору викторины сразу же найти идентификатор её автора, который, в свою очередь, является ключом в первом словаре. А дальше проход по небольшому массиву и вуаля! Наши данные получены. На словах звучит сложно, но на практике реализуется довольно быстро и с минимальной избыточностью. Если придумаете решение лучше — пишите, буду рад исправить текст.

Помимо определения викторины, нам нужно хранить некоторую дополнительную информацию

Поэтому давайте создадим файл , опишем наш класс Quiz со всеми нужными полями в конструкторе класса (обратите внимание, в конструктор передаются не все поля, т.к. часть из них будет заполнена позднее):

Если вы раньше не сталкивались с подсказками типов (type hints), код вида “chat_id: int = 0” может ввести в замешательство. Здесь — это имя переменной, далее через двоеточие — её тип (число), а дальше инициализация числом 0. Python по-прежнему является языком с динамической типизацией, отсюда и название “подсказка типа”. В реальности это влияет только на восприятие кода и предупреждения в полноценных IDE типа PyCharm. Никто не мешает вам написать , но зачем так делать?
Вернёмся в наш основной файл (я его далее буду называть ) и импортируем наш класс: . Также добавим в начале файла под определением бота два пустых словаря:

Теперь будем отлавливать викторины, приходящие в бота. Как только прилетает что-то, похожее на неё, извлекаем информацию и создаём две записи. В первом словаре храним параметры викторины, чтобы потом её воспроизвести, а во втором просто создаём пару викторина-создатель. Идентификаторы, составляющие ключ словаря, конвертируем в строки методом :

Раз уж мы сохраняем викторины, давайте теперь позволим пользователям их отправлять, причём через инлайн-режим. Есть одна загвоздка: в BotAPI через инлайн-режим нельзя напрямую отправлять опросы (нет объекта InlineQueryResultPoll), поэтому придётся доставать костыли. Будем возвращать обычное сообщение с URL-кнопкой вида https://t.me/нашбот?startgroup=id_викторины. Параметры startgroup и start — это т.н. “глубокие ссылки” (). Когда пользователь нажмёт на кнопку, он перейдёт по указанной выше ссылке, что, в свою очередь, благодаря параметру перекинет его к выбору группы, а затем, уже после подтверждения выбора, бот будет добавлен в группу с вызовом команды .

Начнём разбираться с инлайн-режимом (не забудьте включить его у @BotFather). Когда пользователь вызывает нашего бота через инлайн, показываем все созданные им викторины, плюс кнопку “Создать новую”. Если ничего нет, то только кнопку.

Очень важно выставить флаг равным True (ответ на запрос будет уникален для каждого Telegram ID) и указать небольшое значение параметра , чтобы кэш инлайн-ответов оперативно обновлялся по мере появления новых викторин.Теперь при вызове бота через инлайн мы увидим наши сохранённые викторины, а при выборе одной из них — сообщение с кнопкой, по нажатию на которую нам предложат выбрать группу для отправки сообщения. Как только группа будет выбрана, в неё будет автоматически добавлен бот с сообщением вида

Но ничего не происходит! Сейчас разберёмся.

Автоматизируем работу браузера

Для разработки простейшей версии нашего Instagram бота мы будем использовать Selenium, инструмент для тестирования web интерфейсов, который по факту InstaPy использует «под капотом».

Для начала работы сначала установите Selenium. При его установке убедитесь, что вы также установили поскольку последняя версия . Это также означает, что на вашем компьютере должен быть установлен браузер Firefox.

Теперь создадим файл со следующим Python кодом:

from time import sleep
from selenium import webdriver

browser = webdriver.Firefox()
browser.get('https://www.instagram.com/')

sleep(5)
 
browser.close()

Запустим наш код на выполнение, и вы увидим, что открывается окно браузера Firefox, который самостоятельно переходит на страницу входа в Instagram. Вот построчный разбор этого кода:

  • Строка 1 и 2 импортируют и .
  • Строка 4 инициализирует экземпляр объекта драйвера браузера Firefox и передает ссылку на него переменной .
  • Строка 6 вводит в адресную строку брузера и осуществляет переход по этому адресу путем эмуляции нажатия Enter.
  • Строка 8 запускает интервал ожидания пять секунд, чтобы мы могли увидеть результат. В противном случае браузер будет мгновенно закрыт.
  • Строка 10 закрывает браузер.

Это Selenium версия классического Hello, World. Теперь мы готовы добавить в файл код, который позволит боту входить в ваш Instagram профиль. Но сначала подумаем о том, что необходимо сделать для того, чтобы войти в свой профиль. Для этого вы бы сделали следующее:

  1. Перейти по адресу .
  2. Кликнуть по ссылки для входа.
  3. Ввести свои учетные данные.
  4. Нажать кнопку входа.
from time import sleep
from selenium import webdriver

browser = webdriver.Firefox()
browser.implicitly_wait(5)
 
browser.get('https://www.instagram.com/')

login_link = browser.find_element_by_xpath("//a")
login_link.click()

sleep(5)
 
browser.close()

Обратите внимание на следующие строки нашего кода:

  • Строка 5 устанавливает пятисекундный интервал времени ожидания. Если Selenium не может найти элемент то, он будет ожидать пять секунд, в течение которых будут догружаться элементы страницы, и потом попытается снова сделать это.
  • Строка 9 находит элемент ссылки , который содержит текст . В нашем коде это делается с использованием синктаксиса XPath, но существуют и другие методы как это вы можете сделать.
  • Строка 10 эмулирует «клик» на найденном элементе для входа в наш профиль.

На странице входа login page расположены три нужных нам элемента:

  1. Поле ввода имени пользователя;
  2. Поле ввода пароля;
  3. Кнопка входа.

Изменим наш скрипт таким образом, чтобы он находил эти элементы, вводил наши учетные данные, а затем нажал кнопку входа в профиль:

from time import sleep
from selenium import webdriver

browser = webdriver.Firefox()
browser.implicitly_wait(5)

browser.get('https://www.instagram.com/')
 
login_link = browser.find_element_by_xpath("//a")
login_link.click()

sleep(2)
 
username_input = browser.find_element_by_css_selector("input")
password_input = browser.find_element_by_css_selector("input")

username_input.send_keys("<your username>")
password_input.send_keys("<your password>")

login_button = browser.find_element_by_xpath("//button")
login_button.click()

sleep(5)

browser.close()

Посмотрим, что изменилось в нашем коде:

  1. Строка 12 задерживает выполнение кода в течение двух секунд для того, чтобы страница полностью загрузилась.
  2. Строки 14 и 15 находят элементы полей ввода имени пользователя и пароля по их CSS селекторам. Для этих целей вы можете использовать любой другой метод, который вам наиболее предпочтителен.
  3. Строки 17 и 18 вводят имя пользователя и пароль в соответствующие поля ввода. Не забудьте заполнить и вашими данными!
  4. Строка 20 находит кнопку входа, используя синтаксис XPath.
  5. Строка 21 нажимает на кнопку входа.

Запустите скрипт, и вы автоматически войдете в свой профиль Instagram. Для того, что бы окно браузера не закрылось по истечении 5 секунд уберите или закомментируйте строки и .

И так мы хорошо начали с написания своего бота в Instagram. Если вы продолжите писать этот скрипт, то все остальные манипуляции с вашим профилем будут выглядеть очень похожи. Чтобы найти «понравившиеся» сообщения, прокрутите вниз вашу ленту постов, найдите кнопку «Нравится» по ее селектору CSS, нажмите на нее, найдите элемент раздела комментариев, оставьте комментарий и далее продолжайте в том же направлении.

Хорошей новостью является то, что все эти шаги могут быть выполнены более быстрым и надежным способом с использованием библиотеки InstaPy . Но прежде чем перейти к использованию Instapy, необходимо еще кое-что узнать про нее, чтобы лучше понять, как она работает: шаблон объекта страницы (Page Object Pattern).

Как улучшить бот

Теперь, когда у нас есть базовый бот, мы улучшаем это. Это называется «поощряйте бот» по причине.

Этот бот ответит с посланием поощрения всякий раз, когда кто-то отправляет сообщение, содержащее грустное или угнетающее слово.

Любой, кто сможет добавить поощренные сообщения для использования бота, и представленные пользователем сообщения будут сохранены в базе данных REPL.IT.

Бот также вернет случайную вдохновляющую цитату из API, когда кто-то набирает сообщение «$ вдохновлять» в чат.

Мы начнем с добавления функции «$ Inspire».

Как добавить вдохновляющие цитаты в бот

Мы получим вдохновляющие цитаты из API под названием Zenquotes.io. Нам нужно импортировать пару больше модулей Python, добавить Функция и обновить наш бот код для вызова функции.

Вот обновленный код. После кода я объясню новые части.

import discord
import os
import requests
import json

client = discord.Client()

def get_quote():
  response = requests.get("https://zenquotes.io/api/random")
  json_data = json.loads(response.text)
  quote = json_data + " -" + json_data
  return(quote)

@client.event
async def on_ready():
  print('We have logged in as {0.user}'.format(client))

@client.event
async def on_message(message):
  if message.author == client.user:
    return

  if message.content.startswith('$inspire'):
    quote = get_quote()
    await message.channel.send(quote)

client.run(os.getenv('TOKEN'))

Теперь мы должны импортировать модуль. Этот модуль позволяет нашему коду сделать HTTP-запрос, чтобы получить данные из API. API возвращает JSON, так что Модуль облегчает работу с возвращаемыми данными.

Функция довольно простая. Во-первых, он использует модуль запросов для запроса данных из URL API. API возвращает случайную вдохновляющую цитату. Эта функция может быть легко переписана, чтобы получить цитаты из другого API, если текущий перестает работать.

Далее внутри функции мы используем Чтобы преобразовать ответ от API на JSON. С помощью проб и ошибок я выяснил, как получить цитату от JSON в формат строки, который я хотел. Цитата возвращается из функции в виде строки.

Заключительная часть, обновленная в коде, является к концу. Ранее он искал сообщение, которое началось с «$ Hello». Теперь это ищет «$ Inspire». Вместо того, чтобы возвращать «Привет!», Это получает цитату с и возвращает цитату.

На этом этапе вы можете запустить свой код и попробовать.

Шаг №0: немного теории об API Telegram-ботов

Начать руководство стоит с простого вопроса: как создавать чат-ботов в Telegram?

Ответ очень простой: для чтения сообщений отправленных пользователями и для отправки сообщений назад используется API HTML. Это требует использования URL:

Токен — уникальная строка из символов, которая нужна для того, чтобы установить подлинность бота в системе. Токен генерируется при создании бота. METHOD_NAME — это метод, например, , , и так далее.

Токен выглядит приблизительно так:

Для выполнения запросов используются как GET, так и . Многие методы требуют дополнительных параметров (методу , например, нужно передать chat_id и текст). Эти параметры могут быть переданы как строка запроса URL, application/x-www-form-urlencoded и application-json (кроме загрузки файлов). Еще одно требование — кодировка UTF-8.

После отправки запроса к API, вы получаете ответ в формате JSON. Например, если извлечь данные с помощью метода , ответ будет такой:

Если значение ‘ok’ — true, значит запрос был успешным и результат отобразится в поле ‘field’. Если false — в поле ‘description’ будет сообщение об ошибке.

Список всех типов данных и методов API Telegram-бота можно найти здесь (ENG) или с переводом здесь (ру) .

Следующий вопрос: как получать пользовательские сообщения?

Есть два варианта.

Первый — вручную создавать запросы с помощью метода . В качестве объекта вы получите массив объектов . Этот метод работает как технология длинных опросов (long polling), когда вы отправляете запрос, обрабатываете данные и начинаете повторяете процесс. Чтобы избежать повторной обработки одних и тех же данных рекомендуется использовать параметр .

Второй вариант — использовать webhooks. Метод нужно будет применить только один раз. После этого Telegram будет отправлять все обновления на конкретный URL-адрес, как только они появятся. Единственное ограничение — необходим HTTPS, но можно использовать и сертификаты, заверенные самостоятельно.

Как выбрать оптимальный метод? Метод лучше всего подходит, если:

  1. Вы не хотите или не можете настраивать HTTPS во время разработки.
  2. Вы работаете со скриптовыми языками, которые сложно интегрировать в веб-сервер.
  3. У бота высокая нагрузка.
  4. Вы меняете сервер бота время от времени.

Метод с Webhook лучше подойдет в таких случаях:

  1. Вы используете веб-языки (например, PHP).
  2. У бота низкая нагрузка, и нет смысла делать запросы вручную.
  3. Бот на постоянной основе интегрирован в веб-сервер.

В этом руководстве будет использоваться метод .

Еще один вопрос: как создать зарегистрировать бота?

@BotFather используется для создания ботов в Telegram. Он также отвечает за базовую настройку (описание, фото профиля, встроенная поддержка и так далее).

Существует масса библиотек, которые облегчают процесс работы с API Telegram-бота. Вот некоторые из них:

  • PythonpyTelegramBotAPI (TeleBot)TelepotAiogram
  • PHPTelegram Bot API — PHP SDK + Laravel Integration
  • JavaTelegramBots
  • NodeJSTelegram Node Bot
  • RubyTelegram Bot
  • C#Telegram Bot API LIbrary

По своей сути, все эти библиотеки — оболочки HTML-запросов. Большая часть из них написана с помощью принципов ООП. Типы данных Telegram Bot API представлены в виде классов.

В этом руководстве будет использоваться библиотека pyTelegramBotApi.

Почему создание бота на Python лучше доверить профессионалу?

Выше я явно негативно выразилась о покупке готового робота. Но на самом деле этот вариант не так уж и плох. Если вам нужен помощник, функционал которого нельзя запрограммировать на конструкторе, лучше найдите человека, который сделает хороший инструмент за вас. Так вы, во-первых, сэкономите время и деньги, и во-вторых, получите результат. Если же делаете сами и изучаете язык программирования с нуля, результат не обязательно будет и далеко не факт, что вы получите ровно то, чего хотели. Кроме того, если вы воспользуетесь услугами фрилансера или целого агентства по работе с роботами, скорее всего вам предоставят примеры уже созданного, по которым вы и поймёте, чего ждать в конце.

Также о ботах во ВКонтакте, их назначении и использовании, смотрите в нашем материале.

Взаимодействуя с нашим ботом через ваш веб-браузер

Мы можем контролировать наш бот, отправив HTTPS-запросы на телеграмму. Это означает, что самый простой способ взаимодействовать с нашим ботом через веб-браузер. Посещая разные URL-адреса, мы отправляем разные команды нашу бот. SimpleSt Command – это то, где мы получаем информацию о нашем боте. Посетите следующий URL в вашем браузере (подставляя токен бота, который вы получили раньше)

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

Первая часть URL указывает, что мы хотим общаться с Telegram API (API.TELEGRAMAM.ORG). Мы следуем это с Чтобы сказать, что мы хотим отправить команду нашему боту, и сразу после того, как мы добавим наш токен, чтобы определить, какой бот мы хотим отправить команду и доказать, что у нас есть. Наконец, мы указываем команду, которую мы хотим отправить ( ), которая в этом случае только что возвращает базовую информацию о нашем боте, используя JSON. Ответ должен выглядеть похоже на следующее:

{"ok":true,"result":{"id":248718785,"first_name":"To Do Bot","username":"exampletodo_bot"}}

Получение сообщений, отправленных на наш бот

Самый простой способ для нас для получения сообщений, отправленных на наш бот, проходит через вызов. Если вы посетите , вы получите ответ JSON всех новых сообщений, отправленных на ваш бот. Наш бот – совершенно новый и, вероятно, еще не получил никаких сообщений, поэтому, если вы сейчас посетите это, вы должны увидеть пустой ответ.

Telegram Bots не могут говорить с пользователями, пока пользователь сначала не инициирует разговор (это уменьшить спам). Для того, чтобы попробовать Звоните, мы сначала отправлю сообщение на наш бот из нашей собственной учетной записи Telegram. Посетить Чтобы открыть разговор с вашим ботом в веб-клиенте (или найти в любой из клиентов Telegram). Вы должны увидеть ваш бот, отображаемый с . кнопка в нижней части экрана. Нажмите эту кнопку, чтобы начать общаться со своим ботом. Отправьте свой бот короткое сообщение, например «Hello».

Теперь посетите URL снова, и вы должны увидеть ответ JSON, показывающую сообщения, которые получили ваш бот (включая один из при нажатии кнопки «Пуск»). Давайте посмотрим на пример этого и выделите данные импорта, которые мы будем писать код для извлечения в следующем разделе.

{"ok":true,"result":[{"update_id":625407400,
"message":{"message_id":1,"from":{"id":24860000,"first_name":"Gareth","last_name":"Dwyer (sixhobbits)","username":"sixhobbits"},"chat":{"id":24860000,"first_name":"Gareth","last_name":"Dwyer (sixhobbits)","username":"sixhobbits","type":"private"},"date":1478087433,"text":"\/start","entities":}},{"update_id":625407401,
"message":{"message_id":2,"from":{"id":24860000,"first_name":"Gareth","last_name":"Dwyer (sixhobbits)","username":"sixhobbits"},"chat":{"id":24860000,"first_name":"Gareth","last_name":"Dwyer (sixhobbits)","username":"sixhobbits","type":"private"},"date":1478087624,"text":"test"}}]}

Раздел JSON – список обновлений, которые мы еще не подтвердили (мы поговорим о том, как подтвердить обновления позже). В этом примере наш бот имеет два новых сообщения. Каждое сообщение содержит кучу данных о том, кто его отправил, какой чат он является частью, и содержимое сообщения. Две детали информации, на которой мы сосредоточимся на данный момент, – это идентификатор чата, который позволит нам отправить ответное сообщение и текст сообщения, который содержит текст сообщения. В следующем разделе мы увидим, как извлечь эти две части данных с помощью Python.

Отправка сообщения от нашего бота

Окончательный вызов API, который мы попробуем в нашем браузере, которое используется для отправки сообщения. Для этого нам нужен идентификатор чата для чата, где мы хотим отправить сообщение. Есть куча разных идентификаторов в ответе JSON от Позвоните, так что убедитесь, что вы получите правильный. Это поле, которое находится внутри поле (24860000 в примере выше, но ваши будут разные). Как только у вас есть этот идентификатор, посетите следующий URL в вашем браузере, подставляя для вашего идентификатора чата.

https://api.telegram.org/bot/sendMessage?chat_id=&text=TestReply

После того, как вы посетили этот URL, вы должны увидеть сообщение от вашего бота, отправленного на ваш, который говорит «Testreply».

Теперь, когда мы знаем, как отправлять и получать сообщения, используя API Telegram, мы можем перейти с автоматическим использованием этого процесса, написав несколько логики в Python.

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *

Adblock
detector