Производим различные действия с ботами: простые ответы на популярные вопросы

24 июня разработчики Telegram открыли платформу для создания ботов. Новость кого-то обошла стороной Хабр, однако многие уже начали разрабатывать викторины. При этом мало где указаны хоть какие-то примеры работающих ботов. Прежде всего, бот для Telegram — это по-прежнему приложение, запущенное на вашей стороне и осуществляющее запросы к Telegram Bot API. Причем API довольное простое — бот обращается на определенный URL с параметрами, а Telegram отвечает JSON объектом. Рассмотрим API на примере создания тривиального бота:

1. Регистрация

Прежде чем начинать разработку, бота необходимо зарегистрировать и получить его уникальный id, являющийся одновременно и токеном. Для этого в Telegram существует специальный бот — @BotFather. Пишем ему /start и получаем список всех его команд. Первая и главная — /newbot — отправляем ему и бот просит придумать имя нашему новому боту. Единственное ограничение на имя — оно должно оканчиваться на «bot». В случае успеха BotFather возвращает токен бота и ссылку для быстрого добавления бота в контакты, иначе придется поломать голову над именем. Для начала работы этого уже достаточно. Особо педантичные могут уже здесь присвоить боту аватар, описание и приветственное сообщение. Не забудьте проверить полученный токен с помощью ссылки /getMe”>api.telegram.org/bot/getMe, говорят, не всегда работает с первого раза.

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("MESSAGEt%st%s" % (message['chat']['id'], text))                      if text[0] == '/':                         command, *arguments = text.split(" ", 1)                         response = CMD.get(command, not_found)(arguments, message)                         logging.info("REPLYt%st%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'] = "nt".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: Как верно подсказали, такое пройдет только при личном общении. В чатах боту доставляются только сообщения, начинающиеся с команды (/<commans:>

  • All messages that start with a slash ‘/’ (see Commands above)
  • Messages that the bot by username
  • Replies to the bot’s own messages
  • Service messages (people added or removed from the group, etc.)

Чтобы бот получал все сообщения в группах пишем @BotFather команду /setprivacy и выключаем приватность. Для начала в Handler добавляем обработчик:

if text[0] == '/':     ... else:     response = CMD["<speech>"](messalogging.info("REPLYt%st%s" % (message['chat']['id'], response))     send_reply(response) </speech>

А потом в список команд добавляем псевдо-речь:

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)[0]     response = {'chat_id': message['chat']['id']}     if leven[1] < 75:         response['text'] = "I can not understand you"     else:         response['text'] = random.choice(RESPONSES.get(leven[0])).format_map(             {'name': message["from"].get("first_name", "")}         )     return response 

Здесь эмпирическая константа 75 относительно неплохо отражает вероятность того, что пользователь всё-таки хотел сказать. А format_map — удобна для одинакового описания строк как требующих подстановки, так и без нее. Теперь бот будет отвечать на приветствия и иногда даже обращаться по имени.

5. Не текст.

Боты, как и любой нормальный пользователь Telegram, могут не только писать сообщения, но и делиться картинками, музыкой, стикерами. Для примера расширим словарь RESPONSES:

RESPONSES["What time is it?"] = ["<at>", "{date} UTC"] </at>

И будем отлавливать текст <at>:

if respo'text'] == "<at>":         response[cker'] = "BQADAgADeAcAAlOx9wOjY2jpAAHq9DUC"         del response['text'] </at>

Видно, что теперь структура 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) 

И все, теперь бот будет время от времени присылать стикер вместо времени:5656ebbfc8cd4e97b7c0fe2495fae6b3.png

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’ (или любой другой метод, используемый ботом).</at></commans:>

Telegram_logo-300x300.png

В последнее время 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 = '' 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 каждый раз при поступлении команд боту от пользователей. Об этом мы поговорим в следующей заметке.

? Присоединяйтесь к рассылке

Понравился контент? Пожалуйста, подпишись на рассылку.

Home » Телеграмм » Производим различные действия с ботами: простые ответы на популярные вопросы

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

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

Наиболее частые операции при работе с ботами

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

Написать и добавить в контакты (подписаться)

Для того чтобы это сделать, необходимо знать адрес. Он начинается со знака «@», что актуально для внутренних ссылок, или, https://t.me/, вариант для внешних ссылок. После идёт имя бота, выглядит это следующим образом: @BotBoobot или https://t.me/BotBoobot. Нужно обратить внимание на важную деталь – адрес бота всегда имеет окончание «bot». Адрес можно узнать в информационном окне бота (рис. 3).

  • Адрес нужно вставить в поисковую строку мессенджера и выбрать из предложенных вариантов верный.
  • Откроется окно диалога. Теперь необходимо нажать кнопку «старт», «начать» или другие варианты (зависит от типа устройства). Бот отправит приветственное сообщение, после чего с ним можно начать диалог.

Рисунок 1. Поиск и начало диалога с ботом.

Отписаться от бота

Это не сложно, достаточно продолжительного нажатия (смартфон) или клика правой кнопкой мыши (компьютер) на имя бота в списке контактов. В меню выбрать команду «delete conversation», или «удалить и остановить».

Рисунок 2. Как отписаться на смартфоне и ПК.

Сделать ссылку на бота

Как было сказано, все адреса в мессенджере начинаются на «@» или https://t.me/. Чтобы сделать ссылку внутри Telegram достаточно написать @BotFather, для внешней ссылки нужно указывать полный адрес – https://t.me/BotFather

Рисунок 3. Адреса бота, которые являются ссылками на него.

Работа с BotFather, создателем и редактором ботов

Этот конструктор играет важную роль в жизни всех ботов Telegram. Он имеет все основные функции, среди которых:

  • Создание;
  • Редактирование;
  • Настройки.

Редактирование

Под редактированием подразумевается изменение информации. За эти операции отвечает раздел «Edit Bots». Например, чтобы изменить имя бота нужно ввести команду /setname. Далее выбрать нужного бота из предложенного списка и ввести новое имя.

Рисунок 4. Как переименовать бота.

Что можно делать с ботами в Телеграм. Если вы знаете команды Edit bots, то вы сможете производить с ботами Telegram любые действия. Менять им имя и описание.

При помощи команд раздела Edit Bots можно отредактировать:

  • Имя;
  • Описание;
  • Информацию о боте;
  • Фотографию профиля;
  • Изменить список команд;
  • Удалить бота.

Настройки ботов Телеграм, используем редактор

Редактор ботов позволяет корректировать настройки помощника при помощи команд раздела Bot Settings. Telegram использует протоколы для социальных сетей, поэтому уникальный id необходим каждому пользователю, боту, чату или каналу для его корректной идентификации. Id, он же токен, генерируется одновременно с созданием бота.

Рисунок 5. Как узнать токен бота.

Что входит в раздел Bot Settings:

  • Генерирование токена авторизации;
  • Аннулирование токена для доступа к боту;
  • Переключение встроенного режима;
  • Переключение запроса встроенного местоположения;
  • Редактирование встроенной обратной связи;
  • Разрешение на присоединение к группам.

Боты для автопостинга

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

Бесплатные боты для автопостинга, как запланированных постов, так и репостов записей из соцсетей:

  • @ControllerBot
  • @Manybot
  • @pstrbot
  • @re_postBot

Рисунок 6. @ControllerBot, помогает создавать отложенные посты.

Боты для оплаты услуг, продавцы

При помощи нажатия на несколько кнопок, в Telegram можно оплатить услуги такси, заказать пиццу или купить пару туфель. Боты могут принимать платежи от пользователей мессенджера по всему миру.

Как заплатить

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

Рисунок 7. Покупка машины времени через @ShopBot.

Как проверить оплату

В мессенджере нет такой функции, так как после нажатия на кнопку «заплатить» пользователь переходит на сайт выбранной платёжной системы. Сам мессенджер платежи не принимает, он является посредником между двумя сторонами и не взимает комиссию за осуществление API платежей.

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

Возможные проблемы

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

Наиболее частыми проблемами являются:

  • Бот автопостинга не работает. Если ранее у него были права администратора канала, то нужно убедиться, что ничего не изменилось, так же необходимо проверить настройки бота, возможно, они были изменены. Убедившись, что с настройками и правами всё в порядке, можно обратиться к создателю бота или в чат поддержки.
  • Бот не отвечает. Бывает, что найдя интересный ресурс в каталоге, хочется начать им пользоваться, но, после нажатия на кнопку «старт», бот не реагирует. Скорее всего, его работа прекращена, или создатель загрузил нового бота, информацию об этом можно узнать в информационном окне.
  • По запросу, с именем бота, открывается группа или канал. Авторы контента часто создают не только ботов, но и каналы или чаты, где публикуют актуальную информацию и общаются с пользователями. Как правило, все источники, связанные с продуктом, имеют одно название, поэтому в адресе ботов всегда присутствует окончание – bot.
  • Кнопка «заплатить» не работает. Иногда администраторы ботов-продавцов отключают возможность оплаты через конкретные платёжные системы. В информационном окне бота всегда есть адрес для обратной связи.
  • Желание «скопировать» чужого бота. Получить копию чужого продукта вряд ли возможно, но, обратившись к его владельцу, можно узнать контакты разработчика. Бот – это не просто оболочка, созданная при помощи @BotFather, а программа, которая пишется человеком.

Вывод

Боты стали незаменимыми помощниками для пользователей мессенджера. Они выполняют множество разных функций, например: являются полноценными онлайн-магазинами, сообщают о курсе валют, заменяют администраторов в канале или чате. Работа ботов ограничена определёнными операциями, которые выполняются круглосуточно, не выходя за рамки полномочий.

Оцените текст:[Всего: 4   Средний:  5/5]

Напишем простой диалоговый Telegram-бот на Python и запустим его на сервере Heroku.

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

Откройте Telegram, найдите @BotFather и начните беседу. Отправьте команду /newbot и следуйте инструкциям. Вы получите:

  • свой токен;
  • адрес Telegram API;
  • ссылку на документацию.

Обязательно сохраните токен, так как это ключ для взаимодействия с ботом.

Примечание Хранение токена должно быть локальным: ни в коем случае не выгружайте его в общий доступ.

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

Установка Python

Для написания Telegram-бота на Python, нужно установить сам язык. Если вы пользуетесь Windows, скачать Python можно с официального сайта. Версия не важна, но в этой статье будет использоваться Python 3.x. Если же у вас Linux или macOS, то обе версии уже установлены.

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

Установка pip

Это менеджер пакетов. В версиях выше Python 2.7.9 и Python 3.4, а также на macOS/Linux он уже есть. Проверить это можно командой pip --version в терминале. Если же по каким-то причинам он отсутствует, установить его можно при помощи команды:

$ sudo apt-get install python-pip

Установка pyTelegramBotAPI

Есть два способа установить эту библиотеку:

  1. С помощью pip:
    pip install pytelegrambotapi
  2. Из исходников (требуется git):
    $ git clone https://github.com/eternnoir/pyTelegramBotAPI.git  $ cd pyTelegramBotAPI  $ python setup.py install

Давайте напишем простенькую программу приветствия. Для начала следует импортировать библиотеку и подключить токен Telegram-бота на Python:

import telebot  bot = telebot.TeleBot('TOKEN')  

Теперь напишем обработчик текстовых сообщений, который будет обрабатывать входящие команды /start и /help:

@bot.message_handler(commands=['start', 'help'])  def send_welcome(message):      bot.reply_to(message, f'Я бот. Приятно познакомиться, {message.from_user.first_name}')

Добавим ещё один обработчик для получения текстовых сообщений. Если бот получит «Привет», он также поздоровается. Все остальные сообщения будут определены, как нераспознанные:

@bot.message_handler(content_types=['text'])  def get_text_messages(message):      if message.text.lower() == 'привет':          bot.send_message(message.from_user.id, 'Привет!')      else:          bot.send_message(message.from_user.id, 'Не понимаю, что это значит.')

Запускаем бота следующей строкой:

bot.polling(none_stop=True)

Примечание Так мы задаём боту непрерывное отслеживание новых сообщений. Если бот упадёт, а сообщения продолжат поступать, они будут накапливаться в течение 24 часов на серверах Telegram, и в случае восстановления бота прилетят ему все сразу.

Juniors Online Conference

27 марта в 12:00, Онлайн, Беcплатно

tproger.ruСобытия и курсы на tproger.ru

Ну вот и всё, простенький бот в Телеграмме готов.

Последним шагом будет развёртывание бота на сервере. Зарегистрируйтесь на GitHub, если у вас ещё нет там аккаунта, и установите Git. Для этого на Linux выполните следующую команду:

$ sudo apt-get install git-all

На macOS и Windows его нужно скачать и установить вручную. И не забудьте зарегистрироваться на Heroku. Установите virtualenv:

$ pip install virtualenv

Создайте новую папку и перейдите в неё в терминале или командной строке. Инициализируйте в ней virtualenv:

$ virtualenv my_env

Имя не имеет значения, но лучше сделать его интуитивно понятным. Перейдите в папку my_env. Теперь нужно склонировать git-репозиторий. Введите команду:

$ git clone https://github.com/имя_вашего_профиля/имя_вашего_репозитория

Поместите скрипт в папку, полученную в результате выполнения команды git clone. Вернитесь в папку my_env и запустите virtualenv:

  • На Windows:
    $ scriptsactivate.bat
  • На Linux/macOS:
    $ source bin/activate

Если вы успешно запустили virtualenv, приглашение командной строки должно начинаться с (my_env). Перейдите в папку репозитория и ещё раз установите модуль requests:

$ pip install requests

Теперь нужно создать список зависимостей Heroku. Это несложно. Введите:

$ pip freeze > requirements.txt

Создайте Procfile. В этом файле следует разместить инструкции по работе со скриптом. Имя файла обязательно должно быть Procfile (Procfile.windows в случае с Windows). У него не должно быть других расширений. Содержимое файла должно быть таким (замените my_bot на имя вашего скрипта):

web: python my_bot.py

Добавьте файл __init__.py в вашу папку. Он может быть пустым, но должен там быть. Отправьте коммит с изменениями в репозиторий:

$ git init  $ git add .  $ git commit -m 'короткое сообщение, описывающее изменения в коммите'  $ git push -u https://github.com/имя_вашего_профиля/имя_вашего_репозитория

Теперь развернём Telegram-бота на Heroku. Можно использовать и панель управления на сайте, но мы потренируемся делать всё через консоль.

Если вы пользуетесь macOS или Windows, установите интерфейс командной строки, следуя гайду. Если у вас Ubuntu, используйте следующие команды:

$ sudo add-apt-repository "deb https://cliassets.heroku.com/branches/stable/apt ./"  $ curl -L https://cli-assets.heroku.com/apt/release.key |  $ sudo apt-key add -  $ sudo apt-get update  $ sudo apt-get install heroku

Теперь выполните следующие команды:

$ heroku login  $ heroku create  $ git push heroku master  $ heroku ps:scale web=1  $ heroku open

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

$ heroku logs --tail

Поздравляем! Теперь вы знаете, как создать бота в Телеграм.

Кроме того, Telegram bot на Python можно дополнять другими функциями, например, добавить отправку файлов, опрос или клавиатуру.

Кстати, в этом мессенджере есть два типа клавиатур:

  1. Классическая RelpyKeyboardMarkup, у которой кнопки располагаются под полем ввода сообщения:
  2. Более современная InlineKeyboardMarkup, которая привязывается к конкретному сообщению:

Но и это полностью рабочий Телеграм-бот на Python: дополните словарём и получите полноценную беседу. Также можете опробовать функциональность нашего Telegram-бота.

Адаптированный перевод «How to Create and Deploy a Telegram Bot?»

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

Что такое Telegram-бот?

Бот, или по-другому чат-бот, является специальным алгоритмом, системой определенных компьютерных действий, которые формируют автоматическую переписку с настоящим собеседником. Работа осуществляется не при помощи искусственного интеллекта, а благодаря анализу поступившего сообщения и генерированию подходящего ответа из готовой базы.

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

Функции и возможности ботов Телеграм

Прежде чем мы попробуем рассказать, как сделать бота в Телеграме, давайте выясним, для чего он вообще может понадобиться и какую помощь можно получить от телеграм-робота?

Основные причины создания бота:

  • работа в одно время сразу со многими клиентами;
  • проведение консультации по основным вопросам для потенциального клиента;
  • сокращение загруженности консультантов горячей линии;
  • сокращение затрат на дополнительных консультантов;
  • отбор и направление клиентов со сложными вопросами напрямую операторам и консультантам.

35ec42c663ec5b5f8488752c6fb56d7a.jpg

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

Есть многочисленные сервисы для создания ботов, платные и бесплатные, встроенные в сам Телеграм и сторонние. Базовый способ разработки через Телеграм мы рассмотрим в этой статье, а если вам хочется большего – используйте Manychat. Это сторонний сервис, который упрощает процесс создания, предлагает готовые наработки и дополненный функционал.

Удобнее делать чат-бот на компьютере, потому что придется воспользоваться многочисленными дополнительными файлами. Но если сильно захотеть и хорошо постараться, можно сделать это и с телефона. Итак, техникой запаслись, теперь приступаем к операции под названием «Как создать бота в Telegram».

  1. Для начала необходимо загрузить и установить сам Телеграм на компьютер или телефон.
  2. Как только мессенджер установлен, заходим в приложение и вводим слово «Manybot» в поисковой строке (как всегда, оно обозначена картинкой лупы).
  3. Когда увидите результаты поиска, кликните на кнопку «Start» снизу в правом углу.
  4. Далее нажимаем на «Добавить нового бота».
  5. В ответ на эти действия всплывет окошко с сообщением от службы Телеграмм, в котором они подробно объяснят, как добавить бота в канал Telegram. Далее действуем по предложенной инструкции.
  6. По условиям мессенджера, затем нужно перейти в профиль BotFather. Если что, в инструкции есть ссылка, выделенная синим цветом.
  7. Теперь кликаем на «Send Message», чтобы перейти к диалогу с этим «собеседником».
  8. Вводим команду «start», чтобы увидеть перечень команд, которые будут доступны при добавлении бота.
  9. Выбираем команду «newbot» и ждет ответного сообщения.
  10. Теперь самое время придумать уникальное название для своего бота (имейте в виду, что оно должно быть на английском языке и с окончанием «bot»). Введите и отправьте его, когда придет ответ. Обязательно сохраните API-токен, который будет ключом для доступа к вашему боту.
  11. Опять переходим к Manybot. Сюда вставляем сохраненный API-токен и ждем ответной реакции.
  12. Затем нужно отослать цели создания бота (для чего он понадобился и как будет функционировать). Если не хотите морочить с этим голову, пропустите этот шаг с помощью кнопки «Skip». В ответ вы должны получить отчет о завершении создания бота.
  13. Как только уведомление пришло, нашу операцию «Как добавить бота в Telegram» можно считать завершенной. Последнее сообщение должно включать ссылку, по которой вы сможете пригласить людей из своих контактов. Там же можно найти перечень универсальных команд для постинга в соц. сетях.

Как проверить функциональность бота?

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

44e3d86c686bbdb75ea216afe4008c68.png

Если на этапе программирования и создания все было сделано верно, то ваш бот отобразится в строке поиска и отреагирует на сообщение.

Как самому сделать бота в Телеграме: добавляем команды

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

  1. Введите слово «Commands» и далее название самой команды.
  2. Теперь наберите ответную реакцию бота на эту команду. Она может включать одно или несколько сообщений с картинками видео- и аудиоматериалами. Сохраняем и ждем отчета о создании команды.

Таким же образом можно добавлять множество других команд. Их количество в мессенджере неограниченно.

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

  1. Печатаем «Commands» и название самой команды.
  2. Кликаем на «Показать команду», после чего ждем ответ от Телеграм.
  3. В ответе высветится кнопка, которая предложит скорректировать ответ бота. К чему мы и приступаем.

Бот и автоматический постинг

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

  1. Вводим в боте «Autoposting».
  2. Внизу должны появиться кнопки с социальными сетями. Нужно выбрать ту, записи которой мы хотим «копировать» и в чат-бот.
  3. Теперь необходимо ввести ссылку на вашу страницу, откуда боту нужно будет транслировать публикации. Совсем необязательно проходить авторизацию, можно даже оставить ссылку на чужую страницу.

Как запланировать пост в чат-боте?

Не секрет, что охват аудитории находится в прямой зависимости от времени публикации. Чаще всего опытный человек, который занимается контентом и его планированием, умеет определить оптимальный момент для постинга. Это время, когда запись увидит максимум подписчиков и потенциальных клиентов.

Но бывают ситуации, когда нет возможности подготовить и опубликовать пост. Тогда можно сделать это заранее. Для этого и существует отложенный постинг. Суть его заключается в следующем: создать публикацию можно, когда угодно, а отправить – когда необходимо. Здесь вы неограниченны. Можно поставить на постинг через 10 минут, а можно и через несколько дней.

Чтобы подготовить отложенную запись, нужно сделать следующее:

  1. В своем боте и введите «Newpost».
  2. Теперь пишем сам пост со всеми необходимыми вложениями.
  3. В нижней части экрана будут 4 кнопки. Предпоследней вы найдете как раз ту, что отвечает за отложенную публикацию. Кликайте на нее.
  4. Далее необходимо указать время, соответствующее вашему часовому поясу на данный момент.
  5. Затем вводим то время, когда нам нужно, чтобы в боте появилась подготовленная запись.
  6. Сохраняем пост.

Кстати, выполнять эти действия по «настройке» часов с вашим поясом нужно лишь единожды, во время первого планирования записи. Дальше это будет автоматически, бот запомнит ваше время. Нужно будет вводить только время для публикации.

cd83fa7943edaff2e400b5d835205ea0.jpg

Бот-телеграм: инструкция по созданию дополнительных кнопок

Чтобы свести свои действия к минимуму, можно создать особые кнопки команд. В результате, чтобы не набирать вручную каждое задание, можно просто выбрать в меню ту кнопку, которая отвечает за нужное нам «задание». Команда автоматически отправится. Итак, что же нужно сделать для этого:

  1. Вводим уже знакомое нам слово «Commands».
  2. В нижней части должна высветиться кнопка для настройки главного меню (обычно первый ряд с правой стороны). Кликайте!
  3. Нужно кликнуть на «Добавить пункт в меню».
  4. Из перечня выбираем нужную команду.
  5. Придумайте и напечатайте «имя» для созданной кнопки.

Все, теперь вам не нужно будет вводить полностью название команды. Достаточно просто кликнуть на кнопку.

Полезные примеры Телеграм-ботов

Делимся с вами списком чат-ботов в Телеграмме, которые будут вас вдохновлять на создание собственного и приносить пользу в повседневной жизни.

  1. @music – для истинных ценителей классической музыки: можно послушать и скачать любимые композиции прямо в Телеграмме.
  2. @misis_sch_bot – вот так удобно в форме чат-бота выполнено расписание МИСиС.
  3. @FastAid_bot – ну и для тех, кто внезапно оказался в экстремальной ситуации и не хочет гуглить, есть бот по оказанию первой помощи.
  4. @EcoideaBot – поможет вам правильно сортировать мусор.

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

Используемые источники:

  • https://habr.com/ru/post/262247/
  • https://khashtamov.com/ru/create-telegram-bot-in-python/
  • https://softolet.ru/telegramm/proizvodim-razlichnye-dejstviya-s-botami-prostye-otvety-na-populyarnye-voprosy.html
  • https://tproger.ru/translations/telegram-bot-create-and-deploy/
  • https://waytostart.ru/blog/telegram-bot

Оцените статью
Рейтинг автора
5
Материал подготовил
Илья Коршунов
Наш эксперт
Написано статей
134
Добавить комментарий