Как обучить бота в телеграмме. Как самостоятельно создать бота в Телеграмм — пошаговая инструкция в картинках. Полезные боты для бизнеса и работы
Пишем ему /start и получаем список всех его команд.
Первая и главная - /newbot - отправляем ему и бот просит придумать имя нашему новому боту. Единственное ограничение на имя - оно должно оканчиваться на «bot». В случае успеха BotFather возвращает токен бота и ссылку для быстрого добавления бота в контакты, иначе придется поломать голову над именем.
Для начала работы этого уже достаточно. Особо педантичные могут уже здесь присвоить боту аватар, описание и приветственное сообщение.
Не забудьте проверить полученный токен с помощью ссылки api.telegram.org/bot
2. Программирование
Создавать бота буду на Python3, однако благодаря адекватности этого языка алгоритмы легко переносятся на любой другой.Telegram позволяет не делать выгрузку сообщений вручную, а поставить webHook, и тогда они сами будут присылать каждое сообщение. Для Python, чтобы не заморачиваться с cgi и потоками, удобно использовать какой-нибудь реактор, поэтому я для реализации выбрал tornado.web. (для GAE удобно использовать связку Python2+Flask)
Каркас бота:
URL = "https://api.telegram.org/bot%s/" % BOT_TOKEN
MyURL = "https://example.com/hook"
api = requests.Session()
application = tornado.web.Application([
(r"/", Handler),
])
if __name__ == "__main__":
signal.signal(signal.SIGTERM, signal_term_handler)
try:
set_hook = api.get(URL + "setWebhook?url=%s" % MyURL)
if set_hook.status_code != 200:
logging.error("Can"t set hook: %s. Quit." % set_hook.text)
exit(1)
application.listen(8888)
tornado.ioloop.IOLoop.current().start()
except KeyboardInterrupt:
signal_term_handler(signal.SIGTERM, None)
Здесь мы при запуске бота устанавливаем вебхук на наш адрес и отлавливаем сигнал выхода, чтобы вернуть поведение с ручной выгрузкой событий.
Приложение торнадо для обработки запросов принимает класс tornado.web.RequestHandler, в котором и будет логика бота.
Class Handler(tornado.web.RequestHandler):
def post(self):
try:
logging.debug("Got request: %s" % self.request.body)
update = tornado.escape.json_decode(self.request.body)
message = update["message"]
text = message.get("text")
if text:
logging.info("MESSAGE\t%s\t%s" % (message["chat"]["id"], text))
if text == "/":
command, *arguments = text.split(" ", 1)
response = CMD.get(command, not_found)(arguments, message)
logging.info("REPLY\t%s\t%s" % (message["chat"]["id"], response))
send_reply(response)
except Exception as e:
logging.warning(str(e))
Здесь CMD - словарь доступных команд, а send_reply - функция отправки ответа, которая на вход принимает уже сформированный объект Message .
Собственно, её код довольно прост:
Def send_reply(response): if "text" in response: api.post(URL + "sendMessage", data=response)
Теперь, когда вся логика бота описана можно начать придумывать ему команды.
3. Команды
Перво-наперво, необходимо соблюсти соглашение Telegram и научить бота двум командам: /start и /help:Def help_message(arguments, message): response = {"chat_id": message["chat"]["id"]} result = ["Hey, %s!" % message["from"].get("first_name"), "\rI can accept only these commands:"] for command in CMD: result.append(command) response["text"] = "\n\t".join(result) return response
Структура message["from"] - это объект типа User , она предоставляет боту информацию как id пользователя, так и его имя. Для ответов же полезнее использовать message["chat"]["id"] - в случае личного общения там будет User, а в случае чата - id чата. В противном случае можно получить ситуацию, когда пользователь пишет в чат, а бот отвечает в личку.
Команда /start без параметров предназначена для вывода информации о боте, а с параметрами - для идентификации. Полезно её использовать для действий, требующих авторизации.
После этого можно добавить какую-нибудь свою команду, например, /base64:
Def base64_decode(arguments, message): response = {"chat_id": message["chat"]["id"]} try: response["text"] = b64decode(" ".join(arguments).encode("utf8")) except: response["text"] = "Can"t decode it" finally: return response
Для пользователей мобильного Telegram, будет полезно сказать @BotFather, какие команды принимает наш бот:
I: /setcommands
BotFather: Choose a bot to change the list of commands.
I: @******_bot
BotFather: OK. Send me a list of commands for your bot. Please use this format:
Command1 - Description
command2 - Another description
I:
whoisyourdaddy - Information about author
base64 - Base64 decode
BotFather: Success! Command list updated. /help
C таким описанием, если пользователь наберет /, Telegram услужливо покажет список всех доступных команд.
4. Свобода
Как можно было заметить, Telegram присылает сообщение целиком, а не разбитое, и ограничение на то, что команды начинаются со слеша - только для удобства мобильных пользователей. Благодаря этому можно научить бота немного говорить по-человечески.UPD:
Как верно подсказали, такое пройдет только при личном общении. В чатах боту доставляются только сообщения, начинающиеся с команды (/
Чтобы бот получал все сообщения в группах пишем @BotFather команду /setprivacy и выключаем приватность.
Для начала в Handler добавляем обработчик:
If text == "/":
...
else:
response = CMD["
А потом в список команд добавляем псевдо-речь:
RESPONSES = {
"Hello": ["Hi there!", "Hi!", "Welcome!", "Hello, {name}!"],
"Hi there": ["Hello!", "Hello, {name}!", "Hi!", "Welcome!"],
"Hi!": ["Hi there!", "Hello, {name}!", "Welcome!", "Hello!"],
"Welcome": ["Hi there!", "Hi!", "Hello!", "Hello, {name}!",],
}
def human_response(message):
leven = fuzzywuzzy.process.extract(message.get("text", ""), RESPONSES.keys(), limit=1)
response = {"chat_id": message["chat"]["id"]}
if leven < 75:
response["text"] = "I can not understand you"
else:
response["text"] = random.choice(RESPONSES.get(leven)).format_map({"name": message["from"].get("first_name", "")})
return response
Здесь эмпирическая константа 75 относительно неплохо отражает вероятность того, что пользователь всё-таки хотел сказать. А format_map - удобна для одинакового описания строк как требующих подстановки, так и без нее. Теперь бот будет отвечать на приветствия и иногда даже обращаться по имени.
5. Не текст.
Боты, как и любой нормальный пользователь Telegram, могут не только писать сообщения, но и делиться картинками, музыкой, стикерами.Для примера расширим словарь RESPONSES:
RESPONSES["What time is it?"] = ["
И будем отлавливать текст
If response["text"] == "
Видно, что теперь структура Message уже не содержит текст, поэтому необходимо модифицировать send_reply:
Def send_reply(response):
if "sticker" in response:
api.post(URL + "sendSticker", data=response)
elif "text" in response:
api.post(URL + "sendMessage", data=response)
И все, теперь бот будет время от времени присылать стикер вместо времени:
6. Возможности
Благодаря удобству API и быстрому старту боты Telegram могут стать хорошей платформой для автоматизации своих действий, настройки уведомлений, создания викторин и task-based соревнований (CTF, DozoR и прочие).Вспоминая , могу сказать, что теперь извращений меньше, а работа прозрачнее.
7. Ограничения
К сожалению, на данный момент существует ограничение на использование webHook - он работает только по https и только с валидным сертификатом, что, например для меня пока критично за счет отсутствия поддержки сертифицирующими центрами динамических днс.К счастью, Telegram также умеет работать и по ручному обновлению, поэтому не меняя кода можно создать еще одну службу Puller, которая будет выкачивать их и слать на локальный адрес:
While True: r = requests.get(URL + "?offset=%s" % (last + 1)) if r.status_code == 200: for message in r.json()["result"]: last = int(message["update_id"]) requests.post("http://localhost:8888/", data=json.dumps(message), headers={"Content-type": "application/json", "Accept": "text/plain"}) else: logging.warning("FAIL " + r.text) time.sleep(3)
P.S. По пункту 7 нашел удобное решение - размещение бота не у себя, а на heroku, благо все имена вида *.herokuapp.com защищены их собственным сертификатом.
UPD: Telegram улучшили Бот Апи, из-за чего, теперь не обязательно иметь отдельную функцию для отправки сообщений при установленном вебхуке, а в ответ на POST запрос можно отвечать тем же сформированным JSON с ответным сообщением, где одно из полей устанавливается как ч "method": "sendMessage" (или любой другой метод, используемый ботом).
Теги:
- telegram
- введение
- python3
Всем доброго дня. На связи снова Василий Блинов. Сегодня вы узнаете, как создать бота в Телеграмм. Я много писал про их полезные функции, теперь настал момент обзавестись собственным помощником.
Сейчас Телеграм очень востребован и его популярность растёт день ото дня. Не оставим мы без внимания и ботов для него.
Чем полезны?
Как раз боты и стали одним из главных трендов Телеграма. Напомню, что они представляют из себя роботизированные диалоги внутри мессенджера, способные быстро решать множество задач:
- показывать новости по заданной теме,
- находить и скачивать любую информацию,
- отвечать на часто задаваемые вопросы,
- присылать обновления с сайта,
- заменять или дополнять email-рассылку,
- могут проводить опросы,
- играть с посетителями и др.
Тем самым пользователь подписывается на актуальные для него темы и быстро находит нужную ему информацию, получая от бота ответ на интересующий вопрос.
Моя позволит познакомиться с ними поближе.
Способы создания
Написать код ручками
Для этого нужно знать языки программирования (Python, PHP или Java), а также есть ещё масса нюансов типа регистрации хостинга и прочего. Это может стать огромной проблемой для некоторых.
К счастью, есть простой путь сделать бота для обычных юзеров, не владеющих навыками программирования.
Воспользоваться специальным сервисом
Наш спаситель — Manybot.io.
Именно на нём я нашёл русский интерфейс, понятную инструкцию и нужный на первых этапах функционал. Роботы на этой платформе умеют:
- отправлять сообщения подписчикам,
- делать красивые меню,
- проводить автопостинг из RSS ваших ресурсов.
Регистрация
Первым делом откроем @Manybot в мессенджере. Нажмём кнопку «Начать».
Выберем русский язык из предложенного списка.
Кликаем «Добавить нового бота».
Следуем дальнейшим инструкциям. Нам нужно зарегистрироваться у @BotFather .
Введём команду /newbot.
Придумываем обычное и техническое имя с хвостиком bot . Самое важное — не забываем скопировать полученный ключ-токен.
Вернёмся к Manybot, покажем ему этот код, нажав «Я скопировал токен».
Придумаем описание.
Принимайте поздравления, регистрация завершена. Теперь вы полноправный владелец собственного робота Телеграм.
Настройка
Займёмся созданием меню и первых команд. Для этого нужно найти своего робота, для этого в поисковую строку вводим его имя. У меня это @iklife_bot.
Создаём простейшую команду
Весь принцип bota — это ответы на вопросы человека, поэтому нужно прописать команды и ответы на них.
Для этого вызовем меню настройки — /commands.
Вводим имя команды и текст, который она будет выдавать в ответ на клик по ней.
Дожидаемся сообщения об успешном создании команды.
Делаем меню
Гораздо удобнее, когда посетители могут быстро выбрать все команды прямо из меню. Для его создания опять вернёмся к /commands и далее «Настроить гл. меню».
Потом «Добавить пункт меню». Называем его, выбираем ранее созданную команду.
Пункт меню готов!
Проверяем, посмотрите, что получилось. Всё работает. Аналогично создаются и другие команды с пунктами меню.
Автопостинг
Главным достоинством @Manybot является мгновенная настройка автопостинга записей с сайта с RSS-лентой или из соц. сетей, или Ютуба прямо в чат. Таким образом, читатели всегда будут в курсе обновлений, не выходя из Telegram.
Давайте его запустим!
Вводим /autoposting.
Дожидаемся проверки и сообщения об успешном завершении.
Теперь вы увидите мои статьи прямо внутри @iklife_bot.
Заключение
На этом всё, надеюсь, что эта статья поможет вам создать своего первого бота. Если вы ещё знаете простые способы их создания, поделитесь, пожалуйста, в комментариях.
Спасибо за внимание!
А если вы не подписались на бота от сайт, то пришла пора сделать это! @iPhonesRu_Bot
Сейчас очень модно заводить Telegram-боты. У каждого крупного интернет-ресурса или крупной компании есть свой бот, в которых клиенты получают ответы на вопросы или читают новости. Если у вас есть свой сайт, группа в соцсети или просто интересная идея бота, то эта инструкция поможет вам с минимальным усилиями внести свой вклад в волшебный мир Telegram.
Есть два пути создания ботов. Первый - написать приложение с помощью Telegram API, а второй - воспользоваться сервисом для создания ботов. Один из таких, manybot.io , мы будем использовать в статье.
Устанавливаем Telegram
Инструкцию из статьи можно выполнить в версии Telegram для любой платформы:
- Windows/Linux/OS X (по ссылке откроется версия для операционной системы с которой сидите)
Сама я буду использовать версию для OS X, так как без полноценной клавиатуры создавать бота не совсем удобно.
Создаем бота
1. Набираем в поиске Manybot, кликаем на значок бота и нажимаем на кнопку Start :
2. Нажимаем на кнопку Добавить нового бота
:
4. Переходим в @BotFather
, нажимаем кнопку Start
и вводим команду /newbot
:
6. Вводим имя бота, которое будет отображаться при поиске и техническое имя бота, копируем полученный API-токен:
7. Возвращаемся в @Manybot и вставляем в него API-токен из буфера обмена:
8. Указываем описание бота:
9. Бот готов:
10. Находим свой бот через поиск и начинаем пользоваться:
Создаем свою команду
В хорошем боте должны быть команды. Чтобы пользователь вводил запрос, а в ответ ему приходило что-то интересное/полезное. Вот инструкция, как создать простейшую команду:
1. Набираем /commands
:
2. Набираем имя новой команды и текст, который она будет выдавать в ответ (при желании к тексту можно прикрепить файлы):
3. Нажимаем кнопку Сохранить
и дожидаемся завершения создания команды:
Для того, чтобы отредактировать команду /hello
надо набрать /commands
, /hello
:
Чтобы увидеть ответ команды, надо нажать кнопку Показать команду
. К сожалению, я не нашла способа проверить как будет выглядеть бот в приложении у подписчиков, кроме как попросить кого-нибудь зайти со своего аккаунта и посмотреть:
Добавляем пункт в меню
При желании, для команды можно сделать кнопку в меню, которая будет ее запускать.
1. Набираем /commands
:
2. Нажимаем на кнопку Настроить главное меню
, а затем на кнопку Добавить пункт меню
:
3. Выбираем из списка команду, которую хотим добавить в меню и указываем название для кнопки:
Включаем автопостинг из соцсетей
В ботах можно настроить трансляцию новостей из Twitter, Youtube, VK или RSS.
1. Набираем команду /autoposting
:
2. Нажимаем кнопку с нужной соцсетью и указываем ссылку на страницу:
Создаем отложенный пост
В ботах Telegram можно отправлять сообщения, которые будут приходить всем его подписчикам. Вот инструкция, как создать такое сообщение и запланировать его отправку на определенное время:
1. Набираем команду /newpost
:
2. Вводим текст поста и нажимаем на кнопку Отложить пост
, указываем текущее время:
3. Указываем время поста и сохраняем пост:
Собираем данные
Еще с помощью ботов можно проводить опросы среди подписчиков:
1. Набираем /commands
, выбираем пункт меню Создать команду
и вводим имя для новой команды:
2. Нажимаем на кнопку Добавить вопрос
, выбираем тип ответа и вводим текст вопроса:
Предыстория создания:
Так как увлекаюсь игрой в Pokémon GO выбор тематики не составил труда, дальше осталось лишь выбрать как именно его буду создавать. Поворошив интернет и осознавая, что я не имею никаких знаний программирования пришел к выводу, что воспользуюсь полностью бесплатным ботом -
Чтобы не терзать вас в неведении о моих успехах за 3 месяца работы, вот:
Создание бота:
Для начало обязательно должен предупредить об ограниченном функционале бота, которого вам должно хватить, но возможно дальнейшее расширение посредством программирования, к которому я не прибегнул.
Процесс создания бота занимает не более одной минуты.
Этапы:
Бот создан, но его необходимо оформить и настроить.
Оформление :
Тут тоже все просто. Для этого необходимо 4 команды:
- /setuserpic - чтобы изменить аватарку бота;
- /setdescription - чтобы изменить текст, который пользователи видят перед тем как нажать на Start;
- /setabouttext - чтобы изменить текст внутри профиля бота;
- /setname - чтобы изменить имя бота;
Все команды отправляем
Если все же возникли трудности то вотвидеоурок
Настройка :
Этот раздел мог быть в разы больше, но я ограничусь основами, таких как создание команд, автопостинг и формы.
Сначала распишу зачем нужны команды. Они являются основой всех ботов. Вот так они будут выглядит:
Еще их можно вызвать через “слэш”.
Приступим:
- Нажимаем в меню вашего бота на команду “Пользовательские команды ”
- Выбираем раздел “Создать команду ”
- Отправляем название команды, например “/photo ” или “/sites ”
- Отправляем текст или/и фотографию (команду всегда можно изменить и удалить) и нажимаем сохранить. Или выбираем один из пунктов:
"Добавить вопрос” - иначе говоря форма. Форма - это команда, внутри которой есть вопросы.
Когда пользователь вызывает такую команду, то ему задаются вопросы по порядку, а ответы отправляются обратно администраторам.
Зачем нужны формы?
Роботы в Телеграм – это программы, автоматически выполняющие некоторые действия и реагирующие на команды пользователя. Разработчики мессенджера поощряют их создание, поэтому он является лидером по числу роботов. Как создать бота в Телеграмм для своего бизнеса или для обычного использования? Рассмотрим возможности и технологии.
Существующие варианты
Всего доступно три способа создания бота в Телеграмм:
- Создать в конструкторе. Это может быть другой сервис мессенджера, например, @manybot. Или онлайн оболочка, такая как Chatfuel.
- Самостоятельная разработка. Для этого необходимо иметь навыки программирования и разворачивания серверных приложений, начиная с установки программного обеспечения.
- Покупка. Сейчас появилось множество компаний и частных разработчиков, предлагающих индивидуально под заказ. Цены начинаются от 500 рублей, но в среднем составляют 10-15 тысяч.
Если у вас есть время и некоторые навыки работы с программным обеспечением, рекомендуем попробовать создать в конструкторе. Это поможет разобраться в схеме функционирования программ, что пригодится при заказе, если вы на него решитесь.
Процесс программирования
Многие сервисы предназначены для упрощения процесса покупок в сети. В разработке используются методы Payment API, которые позволяют привязать системы оплаты к программе. Осуществляется процесс по алгоритму:
- Разработчик внедряет ключи и выбирает подключенного к системе провайдера для выполнения транзакций.
- В боте появляется кнопка «Pay».
- Пользователь робота может совершать платежи, указывая свои данные. Они привязываются к его аккаунту. Доступны стали и мобильные платежи.
- Финансовые транзакции проводятся напрямую между клиентом и платежной системой. Телеграмм в этом процессе не участвует. Его задача – предоставить платформу для реализации функций. За счет этого данные о платежах не доступны третьим лицам.
- Клиент получает отчет о транзакции, в который включены все данные о покупке.
При этом разработчики мессенджера не принимают никаких претензий, перекладывая всю ответственность на платёжную систему и самого пользователя.
Но обещают по отзывам блокировать ненадежных провайдеров. На сегодняшний день можно создать бота в Телеграмме для продажи за Киви и Яндекс.Деньги.
Создать бота самому своими руками
Симулятор собеседника Telegram - это программа, которая запускается и работает на вашей стороне. Она посылает запросы к АПИ Telegram Bot, который является достаточно простым:
- Программа обращается к установленным параметрам по ссылке;
- Телеграмм отвечает JSON массивом.
В Telegram есть возможность вместо выгрузки сообщений вручную установить вебхук, чтобы они присылали каждое письмо сами. Для создания Telegram бота на Python лучше воспользоваться каким-нибудь реактором, например, tornado.web.
Перед тем как создать бота телеграмм и запустить его, нужно на нужный адрес и отловить выходной сигнал. Это делается для того, чтобы возвратить поведение с выгрузкой событий вручную.
Логика будет находиться в классе tornado.web.RequestHandler, который реактор принимает для обработки запросов.
CMD обозначает словарь всех доступных команд. Send_reply – это функция отправления ответа. Она принимает готовый массив Message.
Команды
Сначала следует научить программу бота в Telegram константам /start и /help:
Объект message[‘from’] является массивом типа User. От него бот получает данные пользователя, его ID и имя. Будет лучше, если функция ответов будет принадлежать message[‘chat’][‘id’]. Так при общении там будет User, а в случае чата – id последнего.
Установке /start отводится сразу две функции:
Команда без параметров нужна для вывода данных о боте;
с параметрами – для идентификации.
Теперь вы можете создать любое собственное задание. К примеру, /base64.
Для тех, кто пользуется мобильным Telegram, будет полезно дать @BotFather перечень команд, которые должен принимать новый виртуальный собеседник:
Если пользователь Телеграмм захочет увидеть перечень доступных заданий (например, чтобы узнать, как убить программу после выполнения задачи), ему нужно будет написать «/».
Как научить бота говорить
Телеграмм присылает полностью все сообщение. Ограничение на необходимость ставить перед командами слеш создано только для удобства пользователей. Это позволяет научить программу отвечать по-человечески. Для того чтобы дать ей возможность получать в группах все сообщения, нужно написать /setprivacy помощнику @BotFather, отключая, таким образом, приватность.
В Handler следует добавить обработчик:
В список команд нужно включить речь:
Значение 75 здесь отображает вероятность того, что хочет сказать пользователь. Константа format_map удобна для описания требующих подстановки строк.
Так бот сможет отвечать на приветствия и обращаться к собеседнику по имени.
Отсылаемые сообщения могут быть не только текстовыми
Теперь, когда вы знаете, как создать бота телеграмм, можно сделать возможность не только писать фразы, но и делиться изображениями, аудиофайлами.
Например, можно расширить словарь RESPONSES так.