Телеграмм-бот на python

Часть 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-бот создан. Мы можем запустить наш файл локально, и он будет отрабатывать запросы к нему через мессенджер прямо на нашем компьютере, выступающим в роли сервера. Но это не очень удобная практика. Для нормальной работы код желательно залить на отдельный сервер и запустить его там.

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

Установка библиотеки “rasa”

Установить библиотеку можно воспользовавшись pip:

Для того, чтобы посмотреть установленную версию, наберите:

Чтобы проверить доступные аргументы rasa можно ввести команду:

Вуаля! Сразу же после установки библиотеки можно создать небольшой проект на rasa с примерами тренировочных данных, действий и конфигурационных файлов. Для этого нужно выполнить простую команду:

После запуска команды будет предложено выбрать путь, где будет храниться проект:

а также предоставлен выбор обучать бота или нет:

Если согласитесь, вы сможете поговорить с ботом 😉

Команда rasa shell позволяет сделать это прямо в терминале.

Используя длинный опрос

Последняя серьезная проблема с нашим ботом Echo – это то, что он должен сделать веб-запрос каждые 0,5 секунды. Это не отлично подходит для серверов Telegram (они явно просят людей не делать это вне тестирующих сценариев) и не отлично подходит для наших ресурсов. Длительное опрос использует тот факт, что большую часть времени мы получаем «пустые» ответы. Поскольку наш бот, вероятно, не будет получать сообщения каждой полторы, большую часть времени, когда мы просим обновления, нет. С длинным опросом, вместо телеграммы говорят нам, что нет обновлений, он просто держит соединение, пока нет обновлений, а затем отправляет их в открытую трубу. Конечно, нецелесообразно держать соединение открыть навсегда, поэтому мы можем указать количество секунд, пока мы хотим ждать. Это делается путем прохождения другого дополнительного аргумента для Звоните, а именно Отказ

Чтобы наш код использовать длинный опрос, просто обновите наши Способ следующим образом:

def get_updates(offset=None):
    url = URL + "getUpdates?timeout=100"
    if offset:
        url += "&offset={}".format(offset)
    js = get_json_from_url(url)
    return js

Теперь мы всегда проходим вдоль аргумент Потому что у нас сейчас есть два аргумента, нам также нужно менять, где мы ранее имели к (В URL-адресах мы указываем, что список аргументов начинается с A Но дальнейшие аргументы разделены с ).

Запустите бот снова, и он должен работать точно так же, но теперь он будет делать гораздо меньше запросов и использовать меньше ресурсов вашего компьютера. Если вы хотите проверить, что это работает, просто добавьте строку, как прямо под В функция и запустить бот с и без аргумент, который мы только что добавили. Без ожидания времени вы увидите, что бот проверяет обновления каждые 0,5 секунды. В то время как с таймаутом он будет инициировать только новую проверку каждые 100 секунд, или когда получено новое сообщение.

Создание бота

Для регистрации нового бота необходимо обратиться к боту BotFather. Для этого в строке поиска наберите BotFather и в показанных результатах найдите интересующего нас бота:

Обратите внимание на его имя, изображение и знак в виде галочки, говорящий о том, что это действительно отец всех ботов. Выберите его и в диалоговом окне напишите команду /start и бот в ответном сообщение пришлет список всех доступных команд:

Выберите его и в диалоговом окне напишите команду /start и бот в ответном сообщение пришлет список всех доступных команд:

Нас интересует создание нового бота, поэтому выбираем команду /newbot. Команду можно как напечатать самостоятельно, так и выбрать мышью в сообщении и она автоматически отправится:

Первым шагом нам предлагают дать имя новому боту, оно может быть произвольным. Мы назовем его PocketAdmin:

Теперь требуется указать идентификатор бота (username), он должен заканчиваться на _bot и быть уникальным в системе. Мы укажем PocketAdminTech_bot:

На этом создание бота завершено. В последнем сообщении нам пришла ссылка на нашего нового бота t.me/PocketAdminTech_bot и токен (закрашен), необходимый для взаимодействия с API.

Обязательно сохраните токен и храните его в тайне!

Краткое описание бота

Наш бот будет создан на тематику Белого движения в гражданской войне в России (1917-1922) /сегодня разговор не о политике. Это просто пример/

  • По команде /start бот будет приветствие и посылать стикер;

  • После приветствия появится клавиатура под строкой набора сообщений с двумя кнопками «Вывести случайную цитату белогвардейца» и «Литература»

  • Нажатие на первую кнопку выведет рандомную цитату из excel файла (такое извращение нужно для подготовки к будущему проекту)

  • Нажатие на кнопку «Литература» выдаст инлайновую клавиатуру (далее будет прояснение, для тех кто не понял что это) с названиями произведений белогвардейских авторов или о белогвардейцах.После нажатия клавиатура пропадёт (просто этим навыком, думаю, необходимо обладать), начнётся загрузка pdf файла и появится оповещение «Приятного чтения!»

Вот такой простенький бот у нас по выйдет.

pyTelegramBotApi

Ссылки на документации всех библиотек будут в конце.

Создадим простого бота, отвечающего на команду , с помощью этой библиотеки:

pyTelegramBotApi является просто обёрткой для всего Telegram Bot API, но здесь разберутся только основные составляющие.Взаимодействие с ботом происходит через переменную bot (токен надо вставить свой). Декоратор @message_handler реагирует на входящие сообщение.Message – это объект из Bot API, содержащий в себе информацию о сообщении. Полезные поля: message.chat.id – идентификатор чатаmessage.from.id – идентификатор пользователяmessage.text – текст сообщенияФункция send_message принимает идентификатор чата (берем его из сообщения) и текст для отправки.

Замена клавиатуры

У ботов есть функция замены стандартной клавиатуры на кнопочную. Для этого у всех функций есть опциональный аргумент reply_markup:

ReplyKeyboardMarkup – и есть та самая клавиатура. Метод row() создает ряд (максимум 12) из кнопок, передаваемых в качестве аргумента.Также есть особенная клавиатура types.ReplyMarkupRemove(), которая меняет клавиатуру на стандартную.

Клавиатура для сообщений

Можно создавать клавиатуру для отдельного сообщения. Передавать его нужно так же в аргумент reply_markup:

У кнопок есть несколько режимов, в зависимости от второго аргумента. Подробнее можно прочитать в официальной документации, но я остановлюсь только на callback_data.При нажатии на такую кнопку боту придет отдельный CallbackQuery, который нужно обрабатывать подобно сообщению:

Для обработки обязательно указать аргумент func для «отсеивания» Callback запросов.После обработки каждого запроса нужно выполнить команду answer_callback_query, чтобы Telegram понял, что запрос обработан. В поле callback.data хранится информация из callback_data нажатой кнопки.

Изменение сообщений

У ботов есть функция изменения своих сообщений (можно использовать, чтобы сделать перелистывание страниц, например). Для этого нужно воспользоваться методом edit_message_text (edit_message_caption для картинок):

Смысл аргументов понятен из их названия.

Подробнее о хендлерах

Давайте немножко упростим нашу функцию с приветствием:

Теперь мы передаём в конструктор ChatAction аргумент — это функция для фильтрации событий. Сюда мы перенесли условие. Теперь хендлер будет срабатывать только для нужных событий.

Также обратите внимание на функцию. Она отправляет сообщение в чат, из которого пришёл event

На самом деле это просто сокращение для функции , которую мы использовали выше.

Ну что ж, если у нас всё работает, то можно и поиграться! Вы можете попробовать написать свои хендлеры. Например:

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

Продолжение следует.

Создаём проект

Для начала создадим проект с такой структурой:

В будут находиться хендлеры — обработчики событий.

В будем хранить секретные данные. Давайте сразу его заполним:

Конечно, вы можете хранить эти данные любым удобным для вас способом. Но я буду далее использовать файл config.

Итак, давайте приступим к заполнению . Главное, что нам нужно из библиотеки telethon — класс . Именно с его помощью мы сможем авторизоваться через бота.

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

Пока что мы только создали объект бота и ничего больше. Чуть позже мы реализуем авторизацию бота с помощью токена. (Указанная строка будет названием файла сессии: он создастся после авторизации.)

Зададим для бота — режим разметки по умолчанию. Он будет использоваться при отправке и получении сообщений с разметкой (жирный текст, курсив, ссылки и так далее). Выберем HTML.

И заодно настроим логгинг:

Когда объект bot уже создан, нам нужно зарегистрировать все хендлеры: для этого импортируем app.handlers (сейчас в том файле ничего нет).

Теперь напишем функцию, которая будет авторизовывать бота и обрабатывать его апдейты.

И, наконец, функцию run, которая запускает нашу асинхронную функцию start:

Переходим к хендлерам.

Как я уже говорил, в handlers.py мы будем обрабатывать события. Давайте будем ловить события о добавлении бота в группу.

Как это сделать? Мы должны ловить именно системные сообщения (это сообщения вида «добавил пользователя в группу», «изменил название группы», «закрепил сообщения» и так далее). Если это системное сообщение:а) было в группе,б) говорит о том, что какой-то пользователь добавил другого пользователя,в) относится именно к боту,то это значит, что нашего бота добавили в группу. Пусть тогда бот напишет в эту группу: «Приветствую, господа!»

Чтобы использовать событие с новыми системными сообщениями, нам понадобится класс telethon.events.ChatAction.

Всё это будет выглядеть так:

Декоратором мы привязываем нашу функцию к нужному событию. Функция принимает объект типа «событие о системном сообщении». Если условия выполняются, то отправляется сообщение.

Теперь последний штрих — файл В нём мы просто импортируем и запускаем нашу функцию run:

Готово! Бота можно запускать.

Шаг 2: создание Telegram-бота с помощью @BotFather

Создать программу для приема сообщений и ответа на них можно через сервис @BotFather. Переходим на его страницу в Telegram и вводим команду /newbot. В чате появятся инструкции, согласно которым нужно записать сначала имя бота, а после – его адрес. Когда аккаунт-бот будет создан, на экране появится приветственное сообщение, содержащее токен. Для дальнейшей настройки воспользуемся этими командами:

  • /setdescription – описание;
  • /setabouttext – информация о новом боте;
  • /setuserpic – фотография профиля;
  • /setinline – встроенный режим;
  • /setcommands – описание команд.

На последнем шаге настройки описываем /help и /exchange. Когда все этапы пройдены, пора перейти к составлению кода.

Создание скелета бота

Теперь, когда все настроено, мы можем приступить к программированию! Начнем с нашего файла :

import os

from telegram import Update #upm package(python-telegram-bot)
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters, CallbackContext  #upm package(python-telegram-bot)


def help_command(update: Update, context: CallbackContext) -> None:
    htext = '''
Welcome
Send a message to store it.
Send /fetch to retrieve the most recent message'''
    update.message.reply_text(htext)


def main():
    updater = Updater(os.getenv("TOKEN"))

    dispatcher = updater.dispatcher
    dispatcher.add_handler(CommandHandler("start", help_command))
    dispatcher.add_handler(CommandHandler("help", help_command))

    updater.start_polling()

    updater.idle()


if __name__ == '__main__':
    main() 

Сначала мы импортируем модуль , чтобы получить доступ к токену как переменной окружения.

Затем мы импортируем некоторые классы из библиотеки Telegram.

Комментарии, начинающиеся с , не являются обязательными. Они используются Replit для загрузки правильного пакета. В общем случае это не нужно, но здесь необходимо, потому что подобных библиотек Telegram очень много.

Функция запускается всякий раз, когда пользователь отправляет нам команду или . Команда также выполняется автоматически, когда новый пользователь запускает ваш бот (как мы ранее запускали ). Бот будет знать, как использовать эту функцию, потому что мы сообщим ему об этом позже в теле функции .

В функции main мы инициализируем экземпляр класса , который использует наш токен.

updater = Updater(os.getenv("TOKEN"))

— это класс, который будет постоянно проверять Telegram на наличие новых сообщений в нашем боте.

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

dispatcher.add_handler(CommandHandler("start", help_command))

и

dispatcher.add_handler(CommandHandler("help", help_command))

Чтобы не усложнять задачу, команда и команда имеют здесь один и тот же обработчик, но при желании для обработки каждой из них вы можете использовать разные функции.

Затем нам нужно сказать классу , чтобы он начал проверку новых сообщений. Мы это сделаем при помощи следующей строки.

updater.start_polling()

Важно знать, что — это неблокирующая функция. Это означает, что код в ней не прекращает выполнение

Он будет исполняться, пока программа не завершится.

Другими словами, если мы оставим это в качестве последней строки функции , код будет выполнен, а затем немедленно завершится, потому что больше ничего не блокирует его. Поэтому, чтобы наш бот не прекращал прослушку, мы используем строку , чтобы заблокировать скрипт, пока мы слушаем.

Начало. Создание бота и добавление библиотек.

Для начала добавим библиотеку pyTelegramBotAPI обычным пипом в cmd.

А также загрузим простенькую библиотеку для работы с Excel. (ЧИТАЕТ ТОЛЬКО .xls!!!)

Время импортировать все необходимые библиотеки.

Далее нужно создать самого бота в телеграме. Для этого пройдёмся по следующим шагам:

  1. Найти в поиске телеграма @BotFather

  2. Написать ему команду /newbot

  3. Первым сообщение отправить имя бота, а вторым его юзернейм (который пишется с @). Он должен быть уникальный и оканчиваться на Bot или _bot

После этих шагов батя пришлёт нам ссылку на нашёго бота и его API.

Нужно скопировать всю строку, которая на скрине закрыта красным прямоугольником

Если коротко, то API — это контракт, который предоставляет программа. «Ко мне можно обращаться так и так, я обязуюсь делать то и это». (Более подробная инфа тут API)

Плагины

  • Приветствие (плагин приветствия)
  • Список плагинов (список загруженных плагинов)
  • Музыка (список музыки из ваших рекомендаций в ВК)
  • Случайное число (случайное число в разных диапазонах)
  • Случайные мемы (берутся из паблика, указанного в плагине memes.py)
  • Ближайшие дни рождения в группе (берутся из паблика, указанного в плагине birthday.py)
  • Курс валют (отображение основных курсов валют)
  • Список команд (список всех команд бота с описанием, как их использовать)
  • Шар восьмерка (решает за вас)
  • Время (показывает текущую дату и время)
  • Статистика бота (показывает данные о счетчиках аккаунта)
  • Послать сообщение (посылает сообщение другому пользователю, в том числе анонимное)
  • Блокнот (может запоминать и вспоминать строки)
  • Рассказать шутку (рассказывает случайный анекдот)
  • Контроль бота (только для админов)
  • Поиск видео (Ищет видео в ВК по запросу пользователя)
  • Скриншот сайта (делает скриншот сайта)
  • Погода (показывает погоду в Москве или указанном городе)
  • Перечеркиватель (перечеркивает строку)
  • Автоматическое добавление друзей (принимает входящие заявки в друзья раз в 10 секунд)
  • Новости (показывает последние новости из Yandex)
  • Объявление (не рассылка)(позволяет администраторам оставлять сообщение, которое могут прочитать только определённые люди)
  • Переписка с ботом (пользователи могут пообщаться с ботом от ChatterBot! Работает только при USE_CHATTER = False)
  • Рассылка сообщений (рассылает сообщение пользователям)

Подготовка к написанию бота

Изначально требуется связать Ватсап с имеющимся скриптом, чтобы во время написания кода поверить работу. Последовательность действий включает в себя:

  1. Переход в личный кабинет разработчика на сервере.
  2. Выполняется сканирование QR-кода.
  3. Далее запускается WhatsApp на переносном устройстве.
  4. Осуществляется переход в раздел внесения настроек.
  5. Выбирается WhatsApp Web и повторно сканируется QR-код.

Чтобы сервер автоматически начал вызывать скрипт во время новых мессенджеров, требуется указывать WebHook URL.

Обратите внимание, WebHook URL – ссылка, по которой в дальнейшем будет отправлена полученная информация об оповещениях и сообщениях. Следовательно, пользователям понадобиться сервер для принятия сведений, в противном случае бесперебойная работа бота не гарантируется

Специалисты рекомендуют микрофраемворк Flask, с помощью которого гарантируется максимальный комфорт.

Создание интерфейса бота

Теперь мы можем приступить к написанию той части программы, которая обрабатывает запросы из Telegram. Создадим новую repl-среду, а в качестве языка программирования выберем Python.

Наш бот должен взаимодействовать с Telegram. Для этого нам понадобится доступ к Telegram REST API. Есть много способов сделать это, но в рамках данной статьи мы будем использовать удобную библиотеку, обернутую обернута вокруг API.

Прежде чем мы продолжим, нам нужно сделать наш токен доступным для использования нашим ботом. Создайте переменную среды под названием , щелкнув значок замка на боковой панели, как показано ниже, и вставьте свой токен бота, который вы получили ранее, например :


Создание переменной среды

Это гарантирует, что наш токен доступен как переменная среды и что к нему не смогут получить доступ люди, имеющие доступ к нашей среде repl (в бесплатной версии она открыта для всех, — прим. переводчика).

Установка¶

Для начала давайте создадим каталог для бота, организуем там 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, чтобы он нам не мешал.

Где взять данные для обучения

Чтобы получить данные для обучения бота, можно исследовать достаточно много разных ресурсов. Например, есть сборник диалогов из фильмов от Корнеллского университета (Cornell movie dialogue corpus) — он пользуется большой популярностью. Есть также и множество других источников, но нам бы хотелось найти что-то более сырое, что ли. Что-то менее изысканное, что-то с характером. Естественно, это сразу нас ведет на Reddit!

Сначала нам казалось, что мы сможем использовать Python Reddit API Wrapper, но ограничения, накладываемые Reddit на сканирование, не самые удобные. Чтобы собрать большие объемы данных, вам придется нарушить некоторые правила. Вместо этого мы нашли дамп данных из 1,7 миллиарда комментариев на Reddit. Что ж, это должно сработать!

Reddit имеет древовидную структуру в отличие от ряда других форумов, где все линейно. Родительские комментарии линейны, но ответы на них разветвляются. На всякий случай, если кто-то с этим незнаком:

Структура, которая нам нужна для глубокого обучения, это вход-выход. Так что нам нужно получить что-то большее, например пары комментарий-ответ. В приведенном выше примере мы могли бы использовать следующие пары комментарий-ответ:

Таким образом, нам нужно взять этот дамп Reddit и создать такие пары. Следующее, что нам нужно учитывать, это то, что у нас, вероятно, должен быть только 1 ответ на комментарий. Несмотря на то, что на многие отдельные комментарии может приходиться много ответов, на самом деле нам стоит остановиться на одном.

Мы можем просто взять первый комментарий, либо выбрать лучший — набравший наибольшее количество голосов. Подробнее на этом мы остановимся позже. Наша первая задача — получить данные. Если у вас есть проблемы с хранением данных, вы можете взять данные только за один месяц, за январь 2015 года. В противном случае вы можете скачать весь дамп целиком:

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

Наконец, вы также можете получить доступ к данным через Google BigQuery: Google BigQuery of all Reddit comments. Таблицы BigQuery со временем обновляются, а торрент — нет, так что это тоже хороший вариант.

Мы будем использовать торрент, так как он абсолютно бесплатен, и если вы хотите в точности следовать инструкциям, он вам понадобится. Но никогда не надо стесняться идти своим путем, поэтому при желании вы всегда можете выбрать и другие варианты.

Поскольку загрузка данных может занять значительное время, мы пока прервемся на этом. А после загрузки данных перейдем к следующей статье. Для работы с нашими статьями вам вполне будет достаточно скачать только один файл 2015-01, все 1.7 миллиардов комментариев загружать совсем не обязательно. Комментариев за один месяц должно хватить.

Следующая статья — Чат-бот на Python (Deep Learning + TensorFlow). Часть II.

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

Мы можем контролировать наш бот, отправив 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.

Заключение

Хотя наш примитивный бот едва ли обладает когнитивными навыками, это был неплохой способ разобраться с NLP и узнать о работе чат-ботов. «ROBO», по крайней мере, отвечает на запросы пользователя. Он, конечно, не обманет ваших друзей, и для коммерческой системы вы захотите рассмотреть одну из существующих бот-платформ или фреймворки, но этот пример поможет вам продумать архитектуру бота.

Интересные статьи:

  • Как создать собственную нейронную сеть с нуля на языке Python
  • Word2Vec: как работать с векторными представлениями слов
  • Как применять теорему Байеса для решения реальных задач
Добавить комментарий

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

Adblock
detector