Обучаемый Telegram чат-бот с ИИ в 30 строчек кода на Python / Habr
Сегодня мне в голову пришла мысль: «А почему бы не написать Telegram чат-бота с ИИ, которого потом можно будет обучать?»
Сейчас сделать это совсем легко, поэтому, недолго думая, я принялся к написанию кода.
Языком я выбрал Python, т.к. на нём легче всего работать с подобного рода приложениями.
Итак, для создания Telegram чат-бота с ИИ нам потребуется:
1. API Telegram. В качестве обёртки я взял проверенную библиотеку python-telegram-bot
2. API ИИ. Выбрал я продукт от Google, а именно Dialogflow. Он предоставляет довольно-таки неплохое бесплатное API. Обёртка Dialogflow для Python
Шаг 1. Создаём бота в Telegram
Придумываем имя нашему боту и пишем @botfather. После создания бота нам придёт API токен, который желательно бы где-то сохранить, т.к. в дальнейшем он нам понадобится.
Шаг 2. Пишем основу бота
Создаём папку Bot, в которой потом создаём файл bot.py. Здесь будет код нашего бота.
Открываем консоль и переходим в директорию с файлом, устанавливаем python-telegram-bot.
pip install python-telegram-bot --upgrade
После установки мы уже можем написать «основу», которая пока что будет просто отвечать однотипными сообщениями. Импортируем необходимые модули и прописываем наш токен API:Код настроек и импорта
# Настройки
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
updater = Updater(token='ВАШ API КЛЮЧ') # Токен API к Telegram
dispatcher = updater.dispatcher
Далее напишем 2 обработчика команд. Это callback-функции, которые будут вызываться тогда, когда будет получено обновление. Напишем две таких функции для команды /start и для обычного любого текстового сообщения. В качестве аргументов туда передаются два параметра: bot и update
# Обработка команд
def startCommand(bot, update):
bot.send_message(chat_id=update.message.chat_id, text='Привет, давай пообщаемся?')
def textMessage(bot, update):
response = 'Получил Ваше сообщение: ' + update.message.text
bot.send_message(chat_id=update.message.chat_id, text=response)
Теперь осталось лишь присвоить уведомлениям эти обработчики и начать поиск обновлений.
Делается это очень просто:Код хендлеров
# Хендлеры start_command_handler = CommandHandler('start', startCommand) text_message_handler = MessageHandler(Filters.text, textMessage) # Добавляем хендлеры в диспетчер dispatcher.add_handler(start_command_handler) dispatcher.add_handler(text_message_handler) # Начинаем поиск обновлений updater.start_polling(clean=True) # Останавливаем бота, если были нажаты Ctrl + C updater.idle()
Итого, полная основа скрипта выглядит вот так:Код полной основы бота
# Настройки from telegram.ext import Updater, CommandHandler, MessageHandler, Filters updater = Updater(token='ВАШ API ТОКЕН') # Токен API к Telegram dispatcher = updater.dispatcher # Обработка команд def startCommand(bot, update): bot.send_message(chat_id=update.message.chat_id, text='Привет, давай пообщаемся?') def textMessage(bot, update): response = 'Получил Ваше сообщение: ' + update.message.text bot.send_message(chat_id=update.message.chat_id, text=response) # Хендлеры start_command_handler = CommandHandler('start', startCommand) text_message_handler = MessageHandler(Filters.text, textMessage) # Добавляем хендлеры в диспетчер dispatcher.add_handler(start_command_handler) dispatcher.add_handler(text_message_handler) # Начинаем поиск обновлений updater.start_polling(clean=True) # Останавливаем бота, если были нажаты Ctrl + C updater.idle()
Теперь мы можем проверить работоспособность нашего нового бота. Вставляем на 2 строке наш API токен, сохраняем изменения, переносимся в консоль и запускаем бота:
python bot.py
После запуска пишем ему. Если всё настроено правильно, то Вы увидите вот это:
Основа бота написана, приступаем к следующему шагу!
P.s. не забывайте выключить бота, для этого вернитесь в консоль и нажмите Ctrl + C, подождите пару секунд и бот успешно завершит работу.
Шаг 3. Настройка ИИ
В первую очередь, идём и регистрируемся на Dialogflow (просто входим с помощью своего Google аккаунта). Сразу после авторизации мы попадаем в панель управления.
Жмём на кнопку Create agent
Жмём на Create и видим следующую картину:
Расскажу, почему созданный нами ранее «Агент» никакой роли не играет. Во вкладке Intents есть «команды», по которым работает бот. Сейчас он умеет лишь отвечать на фразы типа «Привет», и если не понимает, то отвечает «Я вас не понял». Не сильно впечатляет.
После создания нашего пустого агента, у нас появилась куча других вкладок. Нам нужно нажать на Prebuilt Agents (это уже специально обученные агенты, которые имеют множество команд) и из всего представленного списка выбрать
Наводим на него и жмём Import. Далее ничего не меняя, жмём Ok. Агент импортировался и теперь мы можем его настроить. Для этого в левом верхнем углу жмём на шестерёнку возле Small-Talk и попадаем на страницу настроек. Теперь мы можем изменить имя агента, как захотим (я оставляю как было). Меняем часовой пояс и во вкладке Languages проверяем, чтобы был установлен русский язык (если не установлен, то ставим).
Возвращаемся на вкладку General, спускаемся немного вниз и копируем Client access token
Теперь наш ИИ полностью настроен, можно возвращаться к боту.
Шаг 4. Собираем всё вместе
ИИ готов, основа бота готова, что дальше? Дальше нам нужно скачать обёртку API от Dialogflow для питона.
pip install apiai
Установили? Возвращаемся к нашему боту. Добавляем в нашу секцию «Настройки» импорт модулей apiai и json (нужно, чтобы в будущем разбирать json ответы от dialogflow). Теперь это выглядит вот так:Код обновлённых настроек
# Настройки
from telegram.ext import Updater, CommandHandler, MessageHandler, Filters
import apiai, json
updater = Updater(token='ВАШ API КЛЮЧ') # Токен API к Telegram
dispatcher = updater.dispatcher
Переходим к функции textMessage (которая отвечает за получение любого текстового сообщения) и посылаем полученные сообщения на сервера Dialogflow:Код отправления сообщений на Dialogflow
def textMessage(bot, update): request = apiai.ApiAI('ВАШ API ТОКЕН').text_request() # Токен API к Dialogflow request.lang = 'ru' # На каком языке будет послан запрос request.session_id = 'BatlabAIBot' # ID Сессии диалога (нужно, чтобы потом учить бота) request.query = update.message.text # Посылаем запрос к ИИ с сообщением от юзера
Этот код будет посылать запрос к Dialogflow, но нам нужно также извлечь ответ. Дописываем парочку строк, итого textMessage выглядит вот так:Полный код функции textMessage
def textMessage(bot, update): request = apiai.ApiAI('ВАШ API ТОКЕН').text_request() # Токен API к Dialogflow request.lang = 'ru' # На каком языке будет послан запрос request.session_id = 'BatlabAIBot' # ID Сессии диалога (нужно, чтобы потом учить бота) request.query = update.message.text # Посылаем запрос к ИИ с сообщением от юзера responseJson = json.loads(request.getresponse().read().decode('utf-8')) response = responseJson['result']['fulfillment']['speech'] # Разбираем JSON и вытаскиваем ответ # Если есть ответ от бота - присылаем юзеру, если нет - бот его не понял if response: bot.send_message(chat_id=update.message.chat_id, text=response) else: bot.send_message(chat_id=update.message.chat_id, text='Я Вас не совсем понял!')
Немного пояснений. С помощью
request.getresponse().read()
получается ответ от сервера, закодированный в байтах. Чтобы декодировать его, просто применяем метод
decode('utf-8')
и после этого «заворачиваем» всё в
json.loads()
чтобы распарсить json ответ.
Итого, полный код бота с ИИ будет выглядеть вот так:Полный код бота с ИИ
# Настройки from telegram.ext import Updater, CommandHandler, MessageHandler, Filters import apiai, json updater = Updater(token='ВАШ API ТОКЕН') # Токен API к Telegram dispatcher = updater.dispatcher # Обработка команд def startCommand(bot, update): bot.send_message(chat_id=update.message.chat_id, text='Привет, давай пообщаемся?') def textMessage(bot, update): request = apiai.ApiAI('ВАШ API ТОКЕН').text_request() # Токен API к Dialogflow request.lang = 'ru' # На каком языке будет послан запрос request.session_id = 'BatlabAIBot' # ID Сессии диалога (нужно, чтобы потом учить бота) request.query = update.message.text # Посылаем запрос к ИИ с сообщением от юзера responseJson = json.loads(request.getresponse().read().decode('utf-8')) response = responseJson['result']['fulfillment']['speech'] # Разбираем JSON и вытаскиваем ответ # Если есть ответ от бота - присылаем юзеру, если нет - бот его не понял if response: bot.send_message(chat_id=update.message.chat_id, text=response) else: bot.send_message(chat_id=update.message.chat_id, text='Я Вас не совсем понял!') # Хендлеры start_command_handler = CommandHandler('start', startCommand) text_message_handler = MessageHandler(Filters.text, textMessage) # Добавляем хендлеры в диспетчер dispatcher.add_handler(start_command_handler) dispatcher.add_handler(text_message_handler) # Начинаем поиск обновлений updater.start_polling(clean=True) # Останавливаем бота, если были нажаты Ctrl + C updater.idle()
Сохраняем изменения, запускаем бота и идём проверять:
Вот и всё! Бот в 30 строк с ИИ написан!
Шаг 5. Заключительная часть
Думаю, Вы убедились, что написать бота с ИИ – дело 10 минут. Осталось лишь теперь его учить и учить. Делать это, кстати, можно во вкладке Training. Там можно посмотреть все сообщения, которые писались и что на них ответил бот (или не ответил). Там же его можно и обучать, говоря боту где он ответил правильно, а где нет.
Надеюсь, статья была Вам полезна, удачи в обучении!
habr.com
Чат бот Телеграм — виды и принципы создания бота
Чат ботов для каналов телеграм достаточно много и они постоянно совершенствуются и создаются новые. В данной статье мы собрали лучшие боты на русском языке с различным списком команд, которые позволяют беспрепятственно общаться и делиться информацией с другими пользователями.
Виды ботов в телеграме
Существует много различных чатов для ботов в telegram, рассмотрим несколько наиболее популярных:
- контролер – дает возможность форматировать текст и отслеживать статистику канала с возможностью удаления отложенных публикаций;
- лайкБот – создает «inline» для лайков в телеграм;
- голосовалка – используется для создания опросов;
- поллБот – выполняет опросы в группах и каналах;
- группБатлер – блокировка и удаление участников за несоблюдение правил чата;
- агент – генерирует приветственный текст для новых подписчиков;
- принт – форматирует текст, добавляет ссылки и реакции.
Принцип работы бота
Что такое боты для чата в телеграм? Данные приложения – это специальный алгоритм в telegram, который используется для ведения диалога в автоматическом режиме с реальным участником канала.
Работают такие чат для ботов в телеграм с использованием специальной системы аналитики входящих смс и подбора нужного варианта ответа из определенной базы вариантов. Искусственный интеллект в данном случае не при чем.
Обратите внимание! Бывают случаи, когда роботом в telegram может быть выбран неуместный ответ, однако, такие ситуации возникают достаточно редко. Как правило, правильно созданный робот умеет не только вести качественный диалог с участником, но и грамотно отвечать на его вопросы и проводить консультации.
Создание чат-бота в telegram
Как сделать бота для чата в telegram? Лучше всего заниматься созданием робота на персональном компьютере, поскольку данная процедура предполагает применение большого количества файлов.
Первым делом вам потребуется скачать и установить сам телеграм, а только потом заниматься созданием бота.
Рассмотрим пошаговую инструкцию, как сделать чат для bot в telegram:
- После установки telegram для канала нужно открыть приложение и поисковой строке ввести надпись «Many бот».
- Затем запускаем поиск.
- После первого появления результатов нужно нажать кнопку «Старт», которая находится в нижнем правом угле программы.
- Далее выбираем вкладку спроектировать нового чат bota.
- После этой процедуры в окошке сообщений должно появиться уведомление от телеграм, в котором содержится полная инструкция ваших дальнейших действий. Руководствоваться нужно ей.
- По этой инструкции вам понадобиться найти учетную запись «BotFather» и выбрать ссылку синего цвета с именем аккаунта.
- Следом выбираем вкладку «Send Message», которая позволяет начать диалог с выбранным пользователем.
- Далее вводим команду «Старт» и получаем список команд, которые потребуется применить при создании робота.
- Отправляем команду «новый бот» и ждем ответа.
- Следом отправляем название для робота, оно должно быть оригинальным и запоминающимся, поскольку оно отображается в поисковых запросах. Помимо этого оно должно быть написанным на английском языке с соответствующим окончанием.
- Затем обязательно копируем токен и снова переходим в «Manybot», чтобы вставить скопированный токен.
- Ждем уведомление.
- Остается только описать возможности чат робота – каким образом он будет работать, и какого его предназначение.
- Приложение для канала сделано и его можно применять.
Обратите внимание! В ответном смс от telegram вам будет прислана ссылка. Она потребуется, чтобы внести ваших пользователей из списка в приложение.
В данной статье мы рассмотрели особенности, принцип работы и алгоритм, как сделать бот для канала в телеграм. Вам остается только четко следовать изложенной в уведомлении от телеграм инструкции, и тогда трудностей с чатом не возникнет.
telegram-rus.ru
Создание бота в Telegram — алгоритм, проверка работы
Современные технологии оказывают влияние на сферы жизнедеятельности человека. Сегодня люди не просто ходят на работу и получают фиксированную заработную плату. Но ищут более прибыльные и менее ресурсозатратные способы заработка.
Сегодня активные пользователи используют не только страницы социальных сетей для дополнительно заработка, но и мессенджеры. Одним из молодых, но самым популярным и большими возможностями для бизнеса, является проест Павла Дурова – Telegram. За последний год, мессенджер преобразился, появились новые опции. Ведения бизнеса и получение прибыли на не паханном поле, приманивает большое количество пользователей.
Телеграм – отличная площадка не только для общения, обмена видео фото, но и для заработка. Не плохо заработать можно на ботах. Что это такое и какими функциями они наделены, читайте ниже. Ниже вы найдете ответ на вопрос как создать бота в телеграме.
Функции и возможности ботов телеграм
Для чего существуют боты? Если вкратце, то бот – это автоматизированный сервис. Он бывает узко тематическим, а также помогает пользователям зарабатывать. Он создан таким образом, что самостоятельно, без помощи пользователя может вести переписку.
Как он работает? Его программа написана таким образом, что происходит автоматический анализ входящей информации. Проанализировав текст входящего сообщения, ресурс самостоятельно начинает подбирать из существующих фраз в библиотеке более подходящую. Делая такие манипуляции за считанные секунды, бот может заменить человека в чате.
Боты существуют:
- для создания опросов, голосований;
- для дополнительного заработка, для ставок, развлечений;
- для размещения контента, автопостинг публикаций;
Внимание! Боты можно использовать готовы, а можно создать самостоятельно, используя специальные сервисы.
Какое применение могут быть у ботов? Рассмотрим несколько вариантов:
- обеспечивает сотрудничество с большим количеством клиентов;
- могут служит консультантами по общим вопросам;
- помогают сократить расход личного времени на ведение аккаунтов нескольких социальных сетей;
- блокировка аккаунта с которого ведутся подозрительные действия в вашем профиле.
Телеграм на сегодняшний день отличная площадка не только общения, обмена медиа файлами, но и ведение бизнеса. Продвигать канал и вести его помогают боты.
Создание
Создание любой программы, которая предназначена для пользования разными социальными сетями требует определенных знаний и навыков. Основная зада при создании бота в telegram довести его до совершенства без ошибок.
Как и любое приложение, создание бота требует соблюдение определенного алгоритма действий. Пока не завершите первый эта, не сможете приступить ко второму. Совсем недавно телеграм, разработали собственную площадку для их создания. Примечательно что таким образом он пишется конкретно под функционал и возможности мессенджера.
Уверенные пользователи утверждают, что создать подобный сервис можно всего лишь за несколько минут в день, а именно примерно за десять минут.
Для создания своего собственного сервиса необходимо понимать и знать язык программирования. Сегодня большое количество сайтов, статей, посвящены данной теме. Общение с ботами заменяет живого человека, конечно всё зависит от его тематики. Он может отвечать разные вопросы, путем подбора информации из своей базы.
Алгоритм создания
В первую очередь необходимо определиться, для чего мы хотим его создать. Чтобы его создать, следует написать и соблюдать алгоритм действия. Существует несколько шагов по созданию. На самом первом этапе необходимо зарегистрировать будущее «чадо» bot, чтобы получить ID. Сделать это можно с помощью официального бота для telegram Bot Father. Сначала добавляете его в свои контакты, а затем пишете – страт (start). В ответ придет сообщение с перечнем команд. Выбираете нужную команду. Пишите имя, в конце фразы добавляете слово bot. На данном этапе можно совершить всю настройку оформления, выбрать и установить аватар, краткое описание и приветственное сообщение для пользователей, которые им будут пользоваться.
Важно! Рекомендуем заранее продумать название своего продукта. Чтобы процесс прошел быстрее. Никаких ограничений нет.
Далее переходим непосредственно к самому программированию. На фото представлен скелет продукта:
Далее нам необходимо установить адрес и сигнал входа. Делается того чтобы можно было управлять вручную:
Код очень легок:
После регистрации и программирования, принимаем соглашение с разработчиками Telegram. И программируем две базовые команды старт и помощь (star/help).
Далее можем писать свою команду.
Прежде всего, бот для Telegram — это по-прежнему приложение, запущенное на вашей стороне и осуществляющее запросы к Telegram Bot API. Причем API довольное простое — бот обращается на определенный URL с параметрами, а Telegram отвечает JSON объектом.
Проверка функциональности
После написание у создателей возникает вопрос, как проверить свой сервис. Это можно сделать с помощью специальных программ, которые укажут на характер существующих ошибок, также работу можете проверить, если добавите его в список в своих контактах.
После чего начинается отправлять разные команды, и таким образом, проверяете как она работает.
Создание команд
Разработка ботов процесс увлекательный, но трудоемкий. Как вписать команды, зависит от того с какой платформой работаете. Например, если рассматривать платформу ManyBot. То после завершения регистрации на втором этапе в меню появятся кнопки с разным функционалом. Кликаете по кнопке «создать команду». Название может быть любым, главное ее содержание, суть. Любая команда начинается со слэш – «/».
Автопостинг и отложенный пост
Программа может быть настроена таким образом, что самостоятельно будет выкладывать посты с определенным промежутком времени. Автопостинг и постинг, очень удобны, если ведете активный аккаунт, а двух площадка. Именно для этих целей используют дополнительные сервисы.
Добавление кнопок
Также на примере Many Bot, рассмотрим, как отредактировать главное меню. Будучи администратором своего сервиса, вы можете добавлять или изменять различные кнопки. Если вы сомневаетесь в правильности действий, то лучше всего начать с изучения подробной инструкции.
Для привлечения пользователей можете в группы отправлять гиперссылку своего бота telegram.
telegram-rus.ru
Как написать Telegram бота: практическое руководство
6 Апрель 2016, Python, 250601 просмотровВ последнее время Telegram у всех на слуху. Нужно отдать должное отделу маркетинга этого приложения, шумиху подняли на славу. Одной из основных «фишек» Telegram является его якобы защищённость — по словам Павла Дурова вся переписка между пользователями шифруется. Более того, ни одна спец.служба мира не будет иметь доступ к вашим сообщениям. Но в данной статье речь не об этом. Сегодня хотелось бы поговорить о не менее крутой фишке в Telegram, а именно о ботах. Помимо того, что в сети уже полно информации о различного рода Telegram ботах (github бот, например), мессенджер открыл своё API для разработчиков, и теперь каждый может создать своего собственного бота с блэкджеком и плюшками.
В статье я приведу пример написания онлайн бота с использованием Python и Django фреймворка. То есть мы «запилим» полноценное веб-приложение, которое будет крутиться на удалённом хосте и принимать команды от пользователей. Весь исходный текст доступен в моём github репозитории.
Документация, описывающая процесс взаимодействия с ботами Telegram находится тут. Чтобы не изобретать велосипед, я нашел неплохую Python библиотеку, реализующую все основные функции ботов — telepot. Как я уже упоминал ранее, для того, чтобы обслуживать пользователей нашего бота мы будет разрабатывать веб-приложение, используя Django фреймворк.
Как создать Telegram бота?
Для начала нам необходимо зарегистрировать в Telegram нашего будущего бота. Это делается следующим образом:
- Необходимо установить приложение Telegram на телефон или компьютер. Скачать приложение можно тут
- Добавляем к себе в контакт-лист бота с именем BotFather
- Запускаем процедуру «общения» с ботом нажатием кнопки Start. Далее перед нами предстанет список команд точно как на скриншоте.
- Для того, чтобы создать нового бота необходимо выполнить команду /newbot и следовать инструкциям. Обратите внимание, что username для бота должен всегда содержать в конце слово bot. Например, DjangoBot или Django_bot.
- Для нашего бота я выбрал имя PythonPlanetBot, так как его основная функция заключается в парсинге RSS feed сайта Python Planet и выдача информации о последних постах пользователю 🙂
После создания бота, обратите внимание на строку с текстом:
Use this token to access the HTTP API:
За которой следует т.н. token по которому мы будем манипулировать нашим ботом. Помимо функции создания telegram бота, BotFather также имеет ряд других возможностей:
- Присвоить боту описание
- Установить аватар
- Поменять token
и так далее. Полное описание доступных команд можно увидеть на первом скриншоте.
Приступаем к кодированию
Как я ранее уже упоминал, мы будем писать веб-приложение на Django. Но стоит отметить, что это делать необязательно. Можно обойтись и обычным Python скриптом, правда в этом случае необходимо будет периодически опрашивать Telegram на предмет новых запросов от пользователей бота (используя метод getUpdates) и увеличивая offset для получения самых последних данных без повторений. В Telegram существует два взаимоисключающих метода получения команд/сообщений для вашего бота.
- Использование вызова API метода getUpdates
- Установка Webhook
Установка Webhook заключается в передаче боту специального URL адреса на который будет поступать POST запрос каждый раз, когда кто-то начнёт посылать сообщения боту. Именно этот вариант мы и будем использовать для взаимодействия между ботом и его пользователем. Для того, чтобы задать URL, необходимо использовать API метод setWebhook. Отмечу, что URL должен начинаться с https, то есть иметь защищённое SSL соединение с валидным сертификатом. Telegram разрешает использовать самоподписанный сертификат, правда для этого необходимо в методе setWebhook передавать также публичный ключ в PEM формате (ASCII base64). Либо же можно получить валидный бесплатный SSL сертификат от Let’s Encrypt.
Подробнее о getUpdates и setWebhook можно почитать соответственно здесь и тут.
Итак, вернёмся к python библиотеке для работы с Telegram — telepot. На текущий момент самой последней её версий является 6.7. Устанавливаем её в виртуальное окружение python virtualenv:
pip install telepot
Самый простой вариант взаимодействия с Telegram ботом на Python выглядит следующим образом:
import telepot
token = '123456'
TelegramBot = telepot.Bot(token)
print TelegramBot.getMe()
Переменной token присваиваем значение токена, полученного при создании бота через BotFather. В итоге после выполнения этих команд мы получим:
{u'username': u'PythonPlanetBot', u'first_name': u'Python Planet Bot', u'id': 199266571}
Поздравляю! Мы вызывали самый простой API запрос getMe, который возвращает информацию о боте: username, id, first_name.
Добавим нашего бота к себе в контакт-лист и пошлём ему первую стандартную команду /start
Выполняем код:
TelegramBot.getUpdates()
[{u'message': {u'date': 1459927254, u'text': u'/start', u'from': {u'username': u'adilkhash', u'first_name': u'Adil', u'id': 31337}, u'message_id': 1, u'chat': {u'username': u'adilkhash', u'first_name': u'Adil', u'type': u'private', u'id': 7350}}, u'update_id': 649179764}]
Процесс общения с telegram ботом происходит по HTTPS; для передачи данных используется JSON. Метод getUpdates возвращает список/массив из объектов типа Update. Внутри Update находится объект Message. Для стандартного взаимодействия с ботом нас фактически интересует именно объект Message, у которого мы считываем атрибут text, хранящий в себе текст, переданный боту и объект chat, в котором лежит информация о пользователе, инициировавшем общение с нашим Telegram ботом. Также имеется параметр update_id, который служит в качестве offset параметра при вызове метода getUpdates. То есть update_id+1 вернёт все сообщения, поступившие после последнего update_id, при этом все предыдущие сообщения будут удалены.
TelegramBot.getUpdates(649179764+1)
[{u'message': {u'date': 1459928527, u'text': u'hello bro', u'from': {u'username': u'adilkhash', u'first_name': u'Adil', u'id': 31337}, u'message_id': 13, u'chat': {u'username': u'adilkhash', u'first_name': u'Adil', u'type': u'private', u'id': 7350}}, u'update_id': 649179765}]
На этапе написания простейшего Telegram бота нам этих вызовов достаточно. Приступим к написанию Django приложения для обслуживания наших пользователей.
Простая функция парсинга RSS фида Planet Python выглядит вот так:
# -*- coding: utf8 -*-
from xml.etree import cElementTree
import requests
def parse_planetpy_rss():
"""Parses first 10 items from http://planetpython.org/rss20.xml
"""
response = requests.get('http://planetpython.org/rss20.xml')
parsed_xml = cElementTree.fromstring(response.content)
items = []
for node in parsed_xml.iter():
if node.tag == 'item':
item = {}
for item_node in list(node):
if item_node.tag == 'title':
item['title'] = item_node.text
if item_node.tag == 'link':
item['link'] = item_node.text
items.append(item)
return items[:10]
Здесь я использую python библиотеку requests для работы с HTTP в самом простейшем варианте без обработки ошибок. Django «вьюшка» выглядит следующим образом:
TOKEN = '<Our_Bot_Token>'
TelegramBot = telepot.Bot(TOKEN)
def _display_help():
return render_to_string('help.md')
def _display_planetpy_feed():
return render_to_string('feed.md', {'items': parse_planetpy_rss()})
class CommandReceiveView(View):
def post(self, request, bot_token):
if bot_token != TOKEN:
return HttpResponseForbidden('Invalid token')
commands = {
'/start': _display_help,
'help': _display_help,
'feed': _display_planetpy_feed,
}
try:
payload = json.loads(request.body.decode('utf-8'))
except ValueError:
return HttpResponseBadRequest('Invalid request body')
else:
chat_id = payload['message']['chat']['id']
cmd = payload['message'].get('text') # command
func = commands.get(cmd.split()[0].lower())
if func:
TelegramBot.sendMessage(chat_id, func(), parse_mode='Markdown')
else:
TelegramBot.sendMessage(chat_id, 'I do not understand you, Sir!')
return JsonResponse({}, status=200)
@method_decorator(csrf_exempt)
def dispatch(self, request, *args, **kwargs):
return super(CommandReceiveView, self).dispatch(request, *args, **kwargs)
CommandReceiveView ждёт POST запрос на себя, парсит его и отвечает исходя из заданной команды. Полноценное Django приложение можно найти по этой ссылке. Стоит отметить в коде использование ещё одного API вызова — sendMessage. Этот метод отправляет сообщение заданному пользователю, используя при этом chat_id и сам текст сообщения. Chat_id — это уникальный идентификатор чата между пользователем и ботом (его идентификатор есть в ответе на запрос getUpdates). У Telegram ботов есть одно ограничение, они не могут посылать сообщения пользователям, которые предварительно не инициировали общение с ним. По-видимому это сделано дабы избежать массового создания спам-ботов.
Я предполагаю, что вы уже клонировали мой репозиторий, настроили окружение и установили все необходимые зависимости: Django, requests, telepot. Если же вы не знаете как это сделать, то совсем скоро я напишу цикл статей о разработке веб-приложений на Python, включая разбор экосистемы: разработка, настройка, деплой. Если вам это интересно, то отпишитесь, пожалуйста, в комментариях к этой статье. Хочется получить обратную связь 🙂
Итак, веб-приложение на Django запущено. Как же начать тестировать бота? А всё очень просто — необходимо симулировать действия Telegram сервиса. Для этого нам понадобится HTTP клиент и тело запроса. В качестве HTTP клиента я часто использую Chrome плагин под названием Postman, а тело запроса мы возьмём напрямую из данных, полученных с помощью API вызова getUpdates.
После запуска runserver, URL на который необходимо посылать запрос выглядит следующим образом:
http://127.0.0.1:8000/planet/b…BOT_TOKEN/
где BOT_TOKEN — это токен нашего бота. Смотрим скриншот:
А давайте-ка отправим команду feed для получения списка новостей из Planet Python:
На скриншотах видно, что бот адекватно отреагировал на нашу команду вывести список последних 10 постов.
Следующим шагом является деплой нашего Django приложения на удалённый хост и последующий вызов метода setWebhook для передачи URL на который будет посылаться POST запрос от сервиса Telegram каждый раз при поступлении команд боту от пользователей. Об этом мы поговорим в следующей заметке.
khashtamov.com
Как создать своего чат-бота для Телеграм новичку?
Привет, друзья! На волне тренда мессенджеров и чат-ботов, наконец, добралась до создания своего бота в Телеграме. Реализовала простенького бота-помощника, а заодно решила поделиться с вами инструкцией, как я это сделала. Кроме того, в мой адрес звучали вопросы такого типа: как через бота отдавать подарок новым подписчикам. В общем-то, я этим тоже озадачилась.
На самом деле, здесь нет ничего сложного. Главное продумать действия (команды) для бота.
Для своего я сделала небольшое меню из 3 пунктов – где можно забрать полезный подарок, получить доступ к моему бесплатному курсу по партнеркам и связаться со мной в личке.
Выглядит эта менюшка следующим образом:
Самого бота я создала через платформу Manybot. Сделать это можно бесплатно, однако в диалоге с вашим ботом пользователи будут видеть ссылку на разработчика.
Какие возможности есть у бота?
1) Создание пользовательских команд и ответов на них.
2) Создание меню из команд. Это удобно, так как пользователям не надо вводить команды, а можно использовать для навигации готовое меню.
3) Возможность отправлять сообщения подписчикам (в том числе отложенные), просматривать количество подписчиков в боте.
4) Несколько языков интерфейса, в том числе русский.
5) Можно настроить автопостинг в бота из rss блога или сайта, а также с YouTube-канала, ВК, Твиттер.
Как создать своего Телеграм-бота?
Я записала пошаговую видеоинструкцию – пример создания простого бота с меню:
Посмотреть на моего бота в действии вы можете здесь. В диалоге с ним нажмите «Начать» (Start), дальнейшие действия он вам подскажет.
Итак, для начала создания своего Телеграм-бота, зайдите на сайт manybot.io, там нажмите по кнопке «Создать бота». Вас перебросит на первоначальные инструкции.
Нужно перейти на Manybot в Телеграме и нажать «Начать» (Start) в чате с ботом, чтобы получить дальнейшие инструкции.
Вы увидите описание возможностей бота на английском, а также вам предложат выбрать язык.
После выбора русского языка вы сможете приступить к созданию бота, все инструкции будут даваться в диалоге (чате).
Первым делом вводим команду /addbot или просто жмем по ней в полученном от бота сообщении.
Далее получаем инструкцию по созданию своего бота в BotFather. Опять же, нам нужно кликнуть по логину из сообщения и перейти на диалог с BotFather.
Следующим шагом нужно напечатать в диалоге с BotFather команду /newbot и следовать дальнейшим подсказкам. А именно:
1) На английском нам предлагают указать название (имя) своего будущего бота. Я его назвала ViktoriaHelps и отправила это название в диалоге BotFather.
2) Далее указываем логин для бота. Обязательное условие, чтобы логин оканчивался на bot. Можно написать концовку слитно или через нижнее подчеркивание: _bot.
3) После этого получила сообщение с поздравлением, что мой бот создан, ссылку на него в Телеграм, а также токен, который мне нужно скопировать.
Далее возвращаюсь к диалогу с Manybot (выбираю его в контактах слева) и отправляю в чат сообщение со скопированным токеном.
В ответ получаю сообщение о том, что мне нужно добавить описание (приветственное сообщение) для своего бота. Это описание пользователь будет видеть в чате с ботом, когда перейдет на него.
Отправив Manybot описание, вижу сообщение, что мой бот успешно создан. Чтобы он появился в контактах слева, перейдите по ссылке на него и нажмите в чате «Начать».
Кстати, описание бота в любое время можно отредактировать. Делается это через команду /setdescription в диалоге с Manybot.
Настраиваем команды и меню в боте
Далее переходим к настройкам нашего бота и переключаемся на диалог с ним. Жмем внизу чата «Начать».
В ответ получаем сообщение с описанием нашего бота (то, что мы указали на предыдущем шаге). Его же будут видеть и подписчики вашего бота.
В сообщении ниже отобразится меню для управления вашим ботом (его видите только вы, как владелец бота). Если это сообщение не появилось, вы можете вызвать его сами, введя в чат команду /help или выбрав раздел «Помощь» в меню бота.
В этом сообщении отображаются команды, которые вы можете использовать для управления ботом. Например, чтобы отправить новое сообщение подписчикам, воспользуйтесь командой /newpost. Просто кликните по ней, либо отправьте в диалог боту и следуйте дальнейшим подсказкам. То же и с другими командами.
Давайте для примера создадим несколько своих команд в боте и затем встроим их в меню, чтобы новые подписчики могли взаимодействовать с вашим ботом.
Для этого в меню под полем ввода сообщения кликаем по пункту «Пользовательские команды».
Выбираем «Создать команду».
Указываем название нашей команды – оно должно быть латиницей и без пробелов. Название может содержать цифры и нижнее подчеркивание (для разделения слов). Перед командой используем значок слеш (косую черту) /.
Вводим команду в поле сообщения и жмем Enter.
Следующим шагом нужно задать ответ бота на команду. То есть, подписчик вводит в чат команду и получает на нее заготовленный ответ. Так это работает.
Мой пример ответа ниже, чтобы его сохранить, жмем «Enter», а затем кнопку «Сохранить».
Получаем сообщение, что команда успешно создана, видим ее в меню бота ниже. Таким же образом создаем и другие команды. В частности, команду, при нажатии на которую пользователь будет получать сообщение со ссылкой на скачивание подарка.
Кстати, при создании команды мы можем добавить вопрос – обычный, развернутый, с вариантами ответа. Чтобы добавить вопрос, следуйте подсказкам бота.
Если вы хотите отредактировать или удалить команду, кликните по ней в меню.
Откроется новое меню, в котором вы сможете выбрать желаемое действие.
Например, выбираем редактирование. Здесь действия будут следующими:
1) Сначала нам нужно удалить предыдущий ответ на команду и подтвердить действие.
2) Затем нажать «Добавить сообщения к команде».
3) Вводим новый ответ, отправляем боту, сохраняем.
4) Получаем сообщение, что команда успешно отредактирована.
Чтобы вернуться к предыдущему меню, нажимаем «Назад».
o-zarabotkeonline.ru
Очень простой чат-бот для Telegram для самых маленьких / Rusonyx corporate blog / Habr
Есть 100500 способов и инструментов создать простого serverless чат-бота для телеграм. А наш все-равно будет проще, хотя бы по числу кликов в интерфейсе. Сам бот будет написан на Python, а выполнятся будет на serverless движке Swifty.
Как и всегда в наших гайдах, никаких особых знаний питона или других языков программирования вам не потребуется. Нужно лишь умение запустить кое-что в командной строке. Если вы находитесь в России, то еще и VPN на вашем компьютере, так как потребуется достучаться до сервера телеграм.
Пока все стандартно — зарегистрируйте бота
Чтобы создать нового бота, нужно попросить другого бота это сделать. Откройте телеграм и найдите там бота @BotFather или откройте ссылку. Далее, наберите /newbot и следуйте инструкциям БотПапы. Для минимальной настройки вам нужно только дать боту display name и username. После создания бота вам будут выданы access token и URL. Сохраните их где-нибудь.
Бот
Для начала вам нужно зарегистрироваться в Swifty — нашей серверлесс платформе. Сделать это можно здесь. Затем зайдите в панель управления и сделайте следующее:
- Нажмите Functions -> New Function. Перейдите на вкладку From repo (Templates) и выберите репозиторий github.com/swiftycloud/swifty.demo, если он не выбран по-умолчанию. Это наш собственный репозиторий, в котором мы храним шаблоны функций.
- Выберите шаблон Simple Telegram Chatbot (python) и нажмите Next.
- Введите имя своего бота, например, swifty_bot (далее я буду использовать это название для ее обозначения) и нажмите Create.
Чтобы телеграм мог позвать функцию бота, нужно создать ей API ссылку. Перейдите на вкладку Triggers, нажмите Add Trigger -> REST API (URL). Сохраните получившуюся ссылку.
Затем, вам нужно дать функции бота доступ к access token, который вы получили от telegram. В Swifty есть специальная сущность — Account, которая позволяет безопасно хранить любые данные, например, связки логин-пароль или токены.
- Выберите Accounts -> Create Account. Используйте тип Telegram API, имя SWIFTYBOT (именно в uppercase) и токен, который вы получили от telegram.
- Выберите Functions -> swifty_bot -> Access -> Add. Выберите Accounts и аккаунт SWIFTYBOT. Теперь ваша функция имеет безопасный доступ к вашему access token.
Update. Обратите внимание! Имя SWIFTYBOT для аккаунта прописано в коде функции вот здесь:
BASE_URL = "https://api.telegram.org/bot{}".format(os.getenv('ACC_TELEGRAMSWIFTYBOT_TOKEN'))
Если вы хотите использовать другое имя аккаунта, то вам нужно поменять его и в коде функции. Например, если имя вашего аккаунта MYOWNBOT, то ваш код будет выглядеть так:
BASE_URL = "https://api.telegram.org/bot{}".format(os.getenv('ACC_TELEGRAMMYOWNBOT_TOKEN'))
Как формируется имя переменной окружения ACC_TELEGRAMMYOWNBOT_TOKEN, через которую функция получает свойство аккаунта, ровно как и любого другого ресурса в Swifty? Здесь:
- ACC — идентификатор, что вы хотите обратиться к ресурсу типа Account;
- TELEGRAM — тип аккаунта;
- MYOWNBOT — имя аккаунта;
- TOKEN — свойство аккаунта;
Код получившейся функции:
import json
import os
import sys
import requests
BASE_URL = "https://api.telegram.org/bot{}".format(os.getenv('ACC_TELEGRAMSWIFTYBOT_TOKEN'))
def Main(req):
try:
data = json.loads(req.body.encode())
message = str(data["message"]["text"])
chat_id = data["message"]["chat"]["id"]
first_name = data["message"]["chat"]["first_name"]
response = "Please /start, {}".format(first_name)
if "start" in message:
response = "Hello {}! Type /help to get list of actions.".format(first_name)
if "help" in message:
response = "/about - get information about Swifty"
if "about" in message:
response = ("Swifty is the serverless platform that allows startups, developers and enterprises to develop and run application backend with minimal time-to-market, costs and without infrastructure management.\n"
"Start creating your backend at\n"
"https://swifty.cloud")
data = {"text": response.encode("utf8"), "chat_id": chat_id}
url = BASE_URL + "/sendMessage"
requests.post(url, data)
except Exception as e:
print(e)
return {"statusCode": 200}, None
Это простейший бот, который умеет отвечать на команды /start, /help и /about. Можете также добавить любые свои команды и расширить его функционал по-желанию.
Подключаем функцию к боту
Теперь вам нужно сказать телеграму, по какой ссылке находится ваш бот. Вам нужно открыть командную строку и выполнить в ней следующую команду. При этом YOUR_API_URL нужно заменить на API ссылку, которую вы скопировали ранее, а YOUR_ACCESS_TOKEN на токен.
curl -XPOST https://api.telegram.org/botYOUR_ACCESS_TOKEN/setWebhook?url=YOUR_API_URL
Если все прошло хорошо, то вы увидите примерно следующее:
{
"ok": true,
"result": true,
"description": "Webhook was set"
}
Если вы находитесь в России, то все пройдет хорошо только в том случае, если у вас включен VPN.
Можно проверять
Найдите в telegram бота с вашим именем и попробуйте выполнить пару команд, например, /start или /about. Если все работает — поздравляем. Если нет — пожалуйтесь здесь в комментарии или в нашем slack канале.
Как работает такой готовый бот можно посмотреть, если найти в телеграме нашего бота с именем swifty_test_bot. Спасибо.
Make your ideas come app, как говорят в swifty.cloud.
habr.com
Как создать чат-бот в Telegram без знаний программирования
Хочется упростить коммуникацию с клиентами в своём telegram-канале — сделайте чат-бота! Он может действительно всё, только правильно его запрограммируй.
Нужна разгрузка техподдержки? Настройте бота так, чтобы он отвечал на все FAQ, а при необходимости переадресовывал на реальных сотрудников. Ноль в программировании? Давно не проблема, это можно сделать без специальных знаний. А с гайдом поможем мы.
Почему нужно завести чат-бота в Telegram
Составили список причин, почему вам нужен чат-бот. На самом деле их намного больше, но как фанаты Игоря Николаева, выделили основные 5:
- Это бесплатно. Никто вас не заставляет платить за создание бота (пока что).
- Весь бизнес переходит в смартфоны и мессенджеры, поэтому наличие бота будет несомненным плюсом для вашей компании.
- Быстрая и простая настройка. Большинство базовых функций можно реализовать и без знания программирования.
- Неограниченное количество подписчиков. Если в имейл-рассылке нужно оплачивать сервис, то здесь вы никому не должны (пока что).
- Можно в любой момент вносить изменения. Не нужно ждать, пока программист полностью перепишет бота ради того, чтобы добавить/удалить несколько команд.
Что может делать телеграм-бот
Всё зависит от ваших желаний. Если вы наймете программиста, который сможет прописать код, то бот сможет даже принимать заказы и сразу грузить их в CMS-админку. У бота, сделанного по упрощённой схеме, функций поменьше, но они полностью перекрывают основные потребности:
- Выдавать заготовленный текст.
- Делать текст с кнопкой реакции (которую можно запрограммировать на что угодно: переход на сайт, в чью-то личку, комментарии).
- Собирать лиды.
- Задавать вопросы и ответы на них.
- Переадресовывать на службу техподдержки.
- Делать кросспостинг и рассылку.
- Принимать заказы.
Создание бота
Изначально нам следует начать чат с @Manybot. Именно он поможет нам создать своего бота.
Вводим команду «Добавить нового бота».
Теперь мы увидим, что делать дальше:
Назовите бота. Именно это и будет логином бота, через который люди будут его искать в будущем.
Теперь вернитесь к @Manybot и введите этот токен.
Введите описание для стартовой страницы своего бота и нажмите Enter.
Всё, основная работа сделана!
Вернитесь к @BotFather, чтобы добавить описание для боковой панели и аватар бота.
Список команд BotFather
Основные настройки:
- /newbot — создать бота;
- /mybots — редактирование бота [beta];
- /setname — изменить имя бота;
- /setdescription — изменить описание бота;
- /setabouttext — изменить блок “about info”;
- /setuserpic — изменить аватар бота;
- /setcommands — изменить лист команд;
- /deletebot — удалить бота.
Настройки бота:
- /token — сгенерировать токен;
- /revoke — revoke bot access token;
- /setinline — переключить режим;
- /setinlinegeo — переключить запросы локации;
- /setinlinefeedback — изменить настройки фидбека;
- /setjoingroups — указать, можно ли добавить бота в группы;
- /setprivacy — изменить режим приватности в группах.
Игры:
- /mygames — редактировать игры [beta];
- /newgame — создать игру;
- /listgames — список игр;
- /editgame — редактировать игру;
- /deletegame — удалить существующую игру.
С его помощью мы настроим базовые вещи, связанные с ботом: можно ли его добавлять в чаты; описание, которое появляется в окне; аватарка; список команд. Более подробная настройка происходит уже внутри самого бота.
Прежде чем перейти к настройке, распишите отдельно на листочке или создайте mind map: это даст вам четкий алгоритм работы и избавит от постоянных правок.
Аватарка добавляется через команду /setuserpic.
Всё, теперь у вас не голый бот 🙂
Теперь устанавливаем about info с помощью /setabouttext.
Если всё прошло успешно, то должно будет выглядеть вот так:
Теперь начинаем настройку команд внутри бота.
Если вы создаёте бота, который просто будет репостить все посты в телеграм, то вам даже не нужно ничего делать. Просто добавьте сюда ссылки на свои страницы и все будет готово.
Теперь нам стала видна панель настроек. Не бойтесь, будущие пользователи её не увидят:
Далее следует прописать все команды.
Выбираем «Пользовательские команды» , далее «Создать команду» и вписываем само название будущей команды. Допустим, «График работы» или «Адреса самовывоза».
Придумываете команду для бота: для этого нужно ввести символ «/» и прописать название команды латиницей. Пример: /arrivals, /shop, /contacts, /aboutcompany. После этого пишем текст, который должен будет выдаваться пользователям после выбора команды.
Представьте, кто-то захотел узнать ваши контакты. Клиент должен будет ввести /contacts или нажать кнопку «Контакты» и ему высветятся все возможности связаться с вами, которые вы ранее прописали. Теперь сделайте команду видимой: зайдите в главное меню и нажмите на кнопку «настроить главное меню»
После этого мы прописываем ответ и нажимаем на кнопку «Сохранить».
Теперь заносим команду в главное меню (делаем её кнопкой) и даем ей название.
Выберите «Настроить главное меню».
Теперь кликните на «+Добавить пункт меню+»
Теперь пропишите желаемое название команды:
Profit!
Повторяйте это столько раз, сколько вам нужно, связывая команды в разветвленную сеть. Не бойтесь, пользователи будут видеть только публично доступные кнопки, а административные останутся вне их поля доступа. Как видите, сделать бота для телеграм намного проще, чем можно представить!
read.kj.media