Как создать телеграмм бота: Как подключитьTelegram чат-бот | SendPulse

Как создать телеграмм бота: Как подключитьTelegram чат-бот | SendPulse

Содержание

Как подключитьTelegram чат-бот | SendPulse

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

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

Если у вас уже создан бот, пропустите первый пункт и переходите сразу ко второму.

Как создать нового бота в Telegram

Откройте мессенджер Telegram, войдите в вашу учетную запись или создайте новую.

Шаг 1. Введите в поле поиска @BotFather и выберите бота.

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

Шаг 2. Нажмите «Запустить» для активации бота BotFather.

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

Шаг 3. Выберите или напечатайте и отправьте команду /newbot.

Шаг 4. Дайте имя боту — клиенты увидят это имя при общении с ботом. И никнейм бота — по нему можно будет найти бота в Telegram. Никнейм должен быть уникальным, не повторять существующие в базе и заканчиваться на слово «bot».

После того как вы выберите подходящее имя бот будет создан. Вы получите сообщение со ссылкой на бота t.me/<никнейм_бота>, рекомендации по настройке аватарки, описание бота и список команд для настройки бота.

Для подключения бота в SendPulse вам понадобится токен. Скопируйте значение токена и перейдите к последнему пункту.

Где найти ключ для уже существующего бота

Шаг 1. Перейдите к боту @BotFather и введите команду /token.

Вы увидите кнопки с созданными ботами.

Шаг 2. Выберите бота, которого нужно подключить.

Скопируйте значение токена.

Как подключить бота в Sendpulse

Перейдите в раздел «Чат-боты» в вашем аккаунте SendPulse. Если ранее у вас не было подключенных каналов, нажмите на кнопку «Подключить каналы». Если же вы уже подключали ботов, перейдите в раздел «Управление ботами».

Затем выберите нужный канал и нажмите на кнопку «Подключить Telegram».

Введите ключ доступа — токен полученный в созданном боте. Нажмите «Подключить».

Нажмите на кнопку «Подписаться на бота». Таким образом вы сможете тестировать каждое сообщение и цепочку и отправлять их себе перед реализацией.

Вы будете перенаправлены в приложение «Telegram», нажмите на кнопку «Запустить» и вы подпишетесь на своего бота.

Чат-бот будет успешно добавлен.

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

Обратите внимание, что подписчики не импортируются автоматически. После подключения вы сможете собирать аудиторию с помощью виджета подписки или делясь ссылкой на бота t.me/<никнейм_бота> напрямую. Также вы можете вручную загрузить файл с ранее собранными подписчиками.

Подключить чат-бота Telegram

Обновлено: 29.03.2021

Как создать телеграм-бота | База знаний Selectel

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

Он идеален при резких колебаниях количества запросов и прекрасно выдерживает пиковые нагрузки.
Настроить Телеграм-бота на Облачных функциях, используя официальный API и заготовленный нами пример, можно в 3 этапа:

  1. Запрограммировать логику работы Телеграм-бота.
  2. Зарегистрировать нового бота в Telegram.
  3. Связать бота и его логику воедино.

Запрограммировать логику работы Телеграм-бота

Чтобы упростить задачу, мы написали пример такого бота. Его исходный код доступен по ссылке github.com/selectel/cloud-telegram-bot. Он понимает команды:

  • /start с приветственным сообщением;
  • /sticker с ответом в виде стикера;
  • /getwebhook чтобы вы могли получить информацию о настройках вашего бота;
  • /setwebhook для настройки вашего бота, но об этом позже.

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

  1. Скачайте исходный код как архив («Clone or download» → «Download ZIP») и распакуйте его.
  2. Внутри должно быть:
    • «setup.py» с минимальным кодом, чтобы Python-окружение приняло содержимое папки за модуль для установки;
    • «requirements.txt» с описанием зависимостей;
    • «bot» — папка с исходным кодом нашего бота.
  3. Выделите все эти файлы и папки, а затем создайте из них новый ZIP-архив, тогда исходный код внутри архива не будет иметь лишних папок (как в случае с архивом, скачанным с github).
  4. Перейдите в панели управления в раздел
    Облачная Платформа
    Функции и нажмите кнопку Создать функцию.
  5. Выберите среду выполнения и задайте имя, например Bot.
  6. В поле Загрузить выберите Архив.
  7. Загрузите ZIP-файл в качестве Кода функции.
  8. Укажите Путь к файлу как /bot/tele_bot.py.
  9. Укажите Вызываемую функцию как main.
  10. Получите токен по инструкции и в поле Переменные окружения добавьте его ключ и значение.
  11. Нажмите кнопку Сохранить и развернуть.
  12. Чтобы получить ссылку для вызова функции, перейдите на вкладку Триггеры и нажмите на тумблер HTTP-запрос.

Теперь у нас есть API, реализующее логику ответов бота. Следующим этапом мы зарегистрируем его в Telegram.

Зарегистрировать нового бота в Telegram

Чтобы Telegram знал о существовании нашего бота, его нужно зарегистрировать. Для этого существует только один способ:

  1. Найдите бота @BotFather в Телеграм. Это официальный бот, созданный специально для управления ботами.
  2. Отправьте ему команду:

    /newbot
  3. @BotFather спросит вас, как вы назовёте вашего бота. Следующим сообщением отправьте его название, заканчивающееся на «_bot».

  4. Запишите полученный токен от @BotFather — это ключ для работы с Telegram API.

Теперь у нас API, регистрация бота в Telegram и его токен. Осталось связать это вместе.

Как связать бота и его логику воедино?

На этом этапе надо сделать так, чтобы бот знал токен пользователя, а Telegram знал, где его API:

  1. Найдите переменную окружения «TOKEN» в настройках функции. Мы оставили её пустой на первом этапе.
  2. Укажите в этой переменной токен вашего бота, который получили от @BotFather.
  3. Нажмите Сохранить и развернуть.

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

Способ 1. Через бота @SelectelServerless_bot

  1. Найдите бота @SelectelServerless_bot в Телеграме.
  2. Введите команду:

    /setwebhook <Токен от вашего бота> <URL от облачной функции>
  3. Бот ответит тем, что получит из Telegram API. Если всё хорошо, это будет «true».

  4. Чтобы удостовериться в том, что всё корректно, отправьте команду:

    /getwebhook <Токен от вашего бота>
  5. В ответ должна прийти информация о webhook, в том числе указанный вами URL.

Способ 2. Из заготовленной формы

Откройте форму (или скопируйте её к себе в Облачное хранилище). Вставьте токен от вашего бота в первое поле, URL облачной функции во второе и нажмите на кнопку «Set Webhook». Произойдёт обращение к api.telegram.org, и вы увидите результат.

Примечание: может понадобиться наличие VPN.

Итог

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

Как создавать ботов в Telegram / Хабр

24 июня разработчики Telegram

открыли

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


Прежде всего, бот для Telegram — это по-прежнему приложение, запущенное на вашей стороне и осуществляющее запросы к

Telegram Bot API

. Причем API довольное простое — бот обращается на определенный URL с параметрами, а Telegram отвечает JSON объектом.

Рассмотрим API на примере создания тривиального бота:

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

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

@BotFather

.

Пишем ему /start и получаем список всех его команд.
Первая и главная — /newbot — отправляем ему и бот просит придумать имя нашему новому боту. Единственное ограничение на имя — оно должно оканчиваться на «bot». В случае успеха BotFather возвращает токен бота и ссылку для быстрого добавления бота в контакты, иначе придется поломать голову над именем.

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

Не забудьте проверить полученный токен с помощью ссылки api.telegram.org/bot<TOKEN>/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("MESSAGE\t%s\t%s" % (message['chat']['id'], text))

                    if text[0] == '/':
                        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: Как верно подсказали, такое пройдет только при личном общении. В чатах боту доставляются только сообщения, начинающиеся с команды (/<command>) (https://core.telegram.org/bots#privacy-mode)

  • All messages that start with a slash ‘/’ (see Commands above)
  • Messages that mention 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>"](message)
    logging.info("REPLY\t%s\t%s" % (message['chat']['id'], response))
    send_reply(response)

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

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_sticker>", "{date} UTC"]

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

if response['text'] == "<at_sticker>":
        response['sticker'] = "BQADAgADeAcAAlOx9wOjY2jpAAHq9DUC"
        del 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 | База знаний BotHelp

Открыть статью в новом окне ↗
Вы можете подключить Telegram бота к Bothelp. После подключения вы сможете отвечать на сообщения подписчиков боту, отправлять рассылки и создавать автоворонки. Подробнее о возможностях платформы, читайте в статье: Возможности Bothelp.

Шаг 1. Создать бота

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

Как создать бота?

1. Зайдите в свой аккаунт Телеграм. 

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

2. Найдите в поиске аккаунт @BotFather и начните с ним диалог.

3. Введите команду «/newbot».


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

Имя может быть любым. Оно будет отображаться в списке контактов и в диалоге.

Ник обязательно должен заканчиваться на bot. Например: mybot, newbot, qwertybot. Ник уникальный и некоторые ники уже заняты, так что подбирайте до тех пор пока не найдется свободное. Лучше всего использовать название компании или вашу фамилию.
Длинна ника 5 до 32 символов, можно использовать только латинские буквы, цифры и нижнее подчеркивание.

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

Позже вы сможете добавить аватар, описание и другую информацию о боте.


Шаг 2. Скопировать токен

После создания вы увидите следующую надпись:

Это токен (секретный ключ) бота, он используется для доступа к боту через API и подключения к платформе BotHelp. Кликните на токен и он будет скопирован в буфер обмена.
 

Шаг 3. Подключение к Bothelp

  • Нажмите на кнопку «Добавить новый канал» 

  • Выберите Telegram в списке доступных каналов 

  • Введите в поле токен вашего бота Telegram

  • Нажмите «Добавить канал»

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

Настройка бота

Если вы хотите изменить аватар или описание бота вернитесь назад в Телеграм в аккаунт Botfather.

  • Введите команду /mybots чтобы выбрать нужного бота.

  • Выберите Edit bot, чтобы перейти к его редактированию.

Настройки

  • Edit Botpic — позволит загрузить файл с аватаркой для бота

  • Edit Description — позволит добавить описание (до 512 символов). Описание будет отображаться когда пользователи зайдут в диалог с ботом в окне «Что может этот бот?»

  • Edit About — позволит отредактировать описание в профиле бота

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

Шаг 4. Тестирование

После подключения перейдите в диалог с ботом и напишите любое сообщение. Оно должно отобразится в диалогах внутри платформы BotHelp.

Протестировать бота с компьютера можно при помощи приложения .

Видеоинструкция:

_______

Если у вас остались вопросы, задайте их в чате техподдержки. Мы всегда готовы помочь 😃

Создание бота в телеграме, как создать

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

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

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

Бот Telegram можно использовать с Intercom API, чтобы предоставить агентам поддержки доступ к своим клиентам, которые используют Telegram. Он также может включать автоматизацию, которая объединяет полезные ресурсы с чатом в прямом эфире, например, в примере ниже из orat.io :

Telegram – отличный дом для ботов, ориентированных на клиентов, с более чем 200 000 000 активных пользователей в месяц и годовой прирост в 50% . Это платформа, которую может использовать ваша аудитория, что поможет вам избежать разногласий и будет способствовать взаимопониманию. Кроме того, создание ботов для Telegram – самый простой способ создания ботов.

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

Первый бот, который я сделал для Telegram, использовал RSS, чтобы найти материалы на канале Hacker News, которые соответствуют поисковому запросу:

Можете воспользоваться этим ботом – он здесь и он жив!

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

В этом руководстве вы узнаете:

  • Как написать код для бота с нуля
  • Как добавить новые команды в словарь бота
  • Основные команды терминала для создания файлов и навигации по папкам
  • Немного языка программирования Ruby
  • Как расширить Ruby с помощью Gems (пакет инструментов)
  • Как заставить ваш бот удалял случайные ответы из списка
  • Несколько простых команд git, которые помогут вам управлять и передавать ваши файлы
  • Как развернуть бота на сервере и запустить его 24/7

Перед запуском вам понадобятся:

  • Баш-терминал.   Поставляется в комплекте с такими операционными системами как macOS и Linux, но не Windows. Если вы следуете этому руководству на компьютере под управлением Windows, у которого нет обновления для Windows 10 , вы можете использовать .
  • Рубин. Обратитесь к официальной документации Ruby для руководств по конкретным ОС. Я лично использую Homebrew на macOS, но пользователи Windows могут установить его с помощью виртуального эмулятора, который вы можете выбрать здесь (https://www.slant.co/topics/1552/~best-terminal-emulators-for-windows) .
  • Bundler. Bundler помогает управлять пакетами инструментов (gems) для Ruby, которые добавляют дополнительные функции вашим приложениям. Для этого вам понадобится добавить интерфейс к API Telegram к вашему боту. Просто введите  gem install bundler в свой, чтобы установить его.
  • Текстовый редактор. Теоретически вы можете использовать Notepad или TextEdit, но большинство из них рекомендовало бы специально созданный редактор, такой как Atom , который выделяет синтаксис и помогает сделать ошибки кода более очевидными.

С этим все, давайте пойдем дальше.

Шаг 1. Загрузите приложение Telegram для рабочего стола

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

Как же получить этот ключ API?

Шаг 2. Чат с BotFather, чтобы получить ключ API

Создание ботов телеграмм – это новый процесс, потому что большая его часть сосредоточена вокруг ваших собственных взаимодействий с ботом Telegram. Этот бот – BotFather. В вашем рабочем столе Telegram вам нужно найти его и начать разговор с ним.

Отправьте команду запуска BotFather, набрав /start .

Вы увидите список команд, которые помогут вам создавать, редактировать и управлять ботами. Поскольку это ваш первый раз, вам нужно /newbot .

По сравнению с процессом создания бот-сервера Twitter, бота Mastodon или любого другого бота, с которым я экспериментировал, Telegram упрощает первоначальную настройку. Наверное, это доказывает, что Telegram ― это отличный инструмент для работы с ботом!

После предоставления команды /newbot вы можете выбрать имя и имя пользователя для своего бота. Название – это то, что ваши пользователи будут видеть бота, как в списке своих контактов, и имя пользователя, как они его найдут. Подумайте о имени пользователя, как и в Twitter; оно должно быть уникальным, и лучше всего, если оно короткий и легко запоминается.

После этого вам будет предоставлен ключ API вашего бота. Ключ API – это то, благодаря чему Telegram может распознать, что код, который вы пишете, связан с этим конкретным ботом. У каждого бота есть свой API-ключ, и вы не должны делиться им ни с кем, иначе люди могут захватить вашего бота и заставить его творить ужасные вещи.

На этом чат BotFather завершен, переходим к коду!

Шаг 3: Настройка GEMS и каталога бота

Откройте терминал и введите mkdir telegram-bot .  Это создаст новый каталог для файлов вашего бота. Лучше всего держать их в одной папке, чтобы можно было легко ей управлять. Перейдите в каталог cd telegram-bot и выполните следующие действия:

touch Gemfile
touch bot.rb
atom .

Это действие создаст два пустых файла, один для указания GEMS, которые вам понадобятся, и тот, где будет содержаться код бота. Последняя команда открывает оба этих файла в Atom.

Нажмите Gemfile на боковой панели Atom и вставьте следующее:

source ‘https://rubygems.org’ gem ‘telegram_bot’

source ‘https://rubygems.org’

gem ‘telegram_bot’

Это нужно Bundler, чтобы захватить интерфейс Ruby API Telegram от rubygems.org.

Чтобы завершить настройку gem, вернитесь к своему терминалу и введите bundle . Вот что вы должны увидеть:

Вот и все, что касается настройки gems, теперь мы наконец попадаем в код.

Кодирование вашего первого бота Telegram

Фактический код, который будет постоянно работать на сервере, находится внутри файла bot.rb. Сейчас он пуст, но здесь мы собираемся связать gems с Telegram, который мы только настроили и создадим бота.

Писать не так уж много. Когда вы закончите, вы получите следующее:

Так будет выглядеть в Telegram то, что делает код выше:

Давайте посмотрим, что делает каждая часть кода:

require ‘telegram_bot’ token = ‘TOKEN’ bot = TelegramBot.new(token: token)

require ‘telegram_bot’

token = ‘TOKEN’

bot = TelegramBot.new(token: token)

(Замените TOKEN маркером API, который вы скопировали из BotFather)

Ruby позволяет довольно легко угадать, какой код будет выполняться. Три приведенные выше строки добавляют функциональность ботов Telegram к вашему файлу, а затем создают новый бот-объект из класса TelegramBot, аутентифицированный вашим токеном (генератор одноразовых паролей в системах аутентификации), поэтому программа знает, куда отправлять данные.

Следующая часть – одна большая петля. Сначала это кажется сложным, сейчас я объясню вам все по порядку.

bot.get_updates(fail_silently: true) do |message| puts «@#{message.from.username}: #{message.text}» command = message.get_command_for(bot) message.reply do |reply| case command when /start/i reply.text = «All I can do is say hello. Try the /greet command.» when /greet/i reply.text = «Hello, #{message.from.first_name}. « else reply.text = «I have no idea what #{command.inspect} means.» end puts «sending #{reply.text.inspect} to @#{message.from.username}» reply.send_with(bot) end end

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

bot. get_updates(fail_silently: true) do |message|

  puts «@#{message.from.username}: #{message.text}»

  command = message.get_command_for(bot)

 

  message.reply do |reply|

    case command

    when /start/i

      reply.text = «All I can do is say hello. Try the /greet command.»

    when /greet/i

      reply.text = «Hello, #{message.from.first_name}. «

    else

      reply.text = «I have no idea what #{command.inspect} means.»

    end

    puts «sending #{reply.text.inspect} to @#{message.from.username}»

    reply.send_with(bot)

  end

end

 

Первая строка говорит боту продолжать слушать команды. И когда он получает команду передать его в переменную message . Строка puts записывает команду на ваш терминал, чтобы вы могли видеть, что происходит во время запуска бота.

Действия ответчика бота хранятся в case-заявлении. Ввод case case подается через переменную message после того, как он был очищен методом get_command_for .  Текст ответа бота устанавливается в зависимости от сохраненной команды и затем отправляется с send_with до перезапуска цикла.

С помощью этой настройки теперь вы можете найти своего бота на Telegram и отправить команды /start и /greet и посмотреть его в действии.

Для этого сохраните изменения в Atom и запустите ruby bot.rb в терминале. Пока этот терминал открыт и работает, ваш бот отправляет ответы!

Настройка нового блестящего бота

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

Части, на которые следует обратить внимание при настройке, это строки when /command/i и текст между кавычками в строках reply.txt . Это те сообщения, которые принимает ваш бот, и которые он отправляет обратно в качестве ответов.

Итак, если вы хотите сказать что-то другое как ответ на команду /greet , вы должны изменить значение reply.text под командной строкой приветствия ( when /greet/i ).  Вот вариант, который вы могли бы попробовать:

when /greet/i greetings = [‘bonjour’, ‘hola’, ‘hallo’, ‘sveiki’, ‘namaste’, ‘salaam’, ‘szia’, ‘halo’, ‘ciao’] reply.text = «#{greetings.sample.capitalize}, #{message.from.first_name}!»

when /greet/i

      greetings = [‘bonjour’, ‘hola’, ‘hallo’, ‘sveiki’, ‘namaste’, ‘salaam’, ‘szia’, ‘halo’, ‘ciao’]

      reply.text = «#{greetings.sample.capitalize}, #{message.from.first_name}!»

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

Превращение вашего бота в нечто удивительное

Вы можете добавить столько команд, ответов и функций своему боту, сколько захотите. Большинство из них – это задачка для вашего воображения. Если вы хотите узнать много других интресных вещей, которые применимы к вашему боту, начните с Learn Ruby the Hard Way, чтобы понять основные принципы языка кодирования. С небольшой практикой и надежной зависимостью от StackOverflow вы сможете:

  • Подключите другие API-интерфейсы, чтобы извлекать данные из таких источников, как Airtable , Slack , RSS или Twitter . Здесь наблюдается действительно захватывающая функциональность – вы можете создать бота, который действует как диалоговый интерфейс к набору данных или функций, например, боту, который возвращает результаты поиска из Twitter или сообщения в Slack.
  • Храните пользовательский ввод в базе данных. Вы можете создать бот Telegram, который предлагает автоматическую поддержку пользователям или отвечает на запросы, и сохраняет их адреса электронной почты в базе данных. Sequel gem позволяет легко создавать, писать, редактировать и читать базы данных.
  • Постройте свою текстовую игру. Colossal Cave Adventure – одна из первых игр с использованием бота , была перенесена на Telegram.  Проверьте здесь и посмотрите источник здесь .

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

Запуск бота 24/7

Прямо сейчас, ваш бот работает на вашем компьютере. Это нормально, пока вам не потребуется перезагрузить компьютер, ваш wi-fi или ваш компьютер перейдёт в спящий режим. Когда это произойдет, это завершит процесс работы бота, и пользователи не получат от него ответа.

Процесс перемещения вашего бота из среды разработки (ваш компьютер, на котором вы использовали Atom для записи бота) в производственную среду (сервер), называется развертыванием. Существует несколько вариантов развертывания вашего бота, но в обоих случаях мы начнем с загрузки файлов в Bitbucket . Bitbucket позволяет использовать git , систему управления версиями, которая поможет вам безопасно сделать и отслеживать изменения в коде вашего бота. Загружая файлы бота в Bitbucket, вы можете использовать Bitbucket как способ захватить файлы бота, когда вы вошли в систему.

Подпишитесь на Bitbucket и создайте свой сервер.

При открытии терминала и в том же каталоге, что и исходный код бота, введите следующее:

git init git add . git commit -m ‘initial commit’

git init

git add .

git commit -m ‘initial commit’

Теперь следуйте инструкциям Bitbucket. Вот как это сделал я:

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

Развертывание с помощью Raspberry Pi

Этот одноплатный компьютер Raspberry Pi на моем столе содержит кучу ботов

Raspberry Pi – отличная инвестиция, если вы планируете создавать и развертывать боты – вы можете получить ее всего за 7 долларов плюс стоимость SD-карты.  Он использует очень мало энергии , поэтому вы можете держать его на месте и не беспокоиться о стоимости. Возможно, возникнет соблазн купить пакет, который поставляется с клавиатурой, мышью и футляром, но вам нужно всего лишь зарядное устройство USB, SD-карту, кабель Ethernet и сам компьютер. Вероятно, у вас, наверное, больше всего этого в вашем офисе.

Развертывание с помощью облачного сервера

Вам не нужно владеть компьютером, на котором работает ваш бот, вы можете использовать память и мощность чужой машины для запуска бота удаленно. Популярные решения для развертывания в облаке включают Amazon Web Services (AWS), DigitalOcean и Heroku.

Самые подходящие для начального уровня – DigitalOcean и Heroku. Нажмите здесь, чтобы получить учетную запись DigitalOcean, которая поставляется с кредитом в размере 10 долларов – достаточно для запуска сервера в течение двух месяцев, пока вы его протестируете.

Когда вы подписываетесь на DigitalOcean , вы узнаете, как подключиться к серверу через SSH и запустить консоль.

Затем, вам нужно проделать определённые действия на вашем ПК, независимо от того, какой сервер вы используете. После того, как вы настроили серверь, давайте перейдем к фактическому развертыванию.

Процесс развертывания

На новом сервере – будь то Raspberry Pi или облачный сервер, например, Digital Ocean, вам нужно установить Ruby, Bundler и Git:

sudo apt-get update sudo apt-get upgrade curl -L https://get.rvm.io | bash -s stable —ruby sudo apt-get install bundler sudo apt-get install git

sudo apt-get update

sudo apt-get upgrade

curl -L https://get.rvm.io | bash -s stable —ruby

sudo apt-get install bundler

sudo apt-get install git

Затем создайте новый каталог для своего бота, перейдите туда и загрузите файлы из Bitbucket со следующими командами:

mkdir bots cd bots git clone https:// benjbrandall@bitbucket. org /benjbrandall/telegram-bot.git

mkdir bots

cd bots

git clone https:// [email protected] /benjbrandall/telegram-bot.git

Не забудьте заменить URL выше (https: // benjbran …) URL-адресом вашего сервера. Вы найдете всю команду clone через Bitbucket, так что вам не придется делать это вручную.

Затем введите bundle для установки зависимостей gem, а затем ruby bot.rb чтобы запустить бот, который теперь будет работать постоянно.

Примечание. Если вы получаете доступ к своему серверу через SSH, вам нужно запустить бот с nohup ruby bot.rb  и убедиться, что бот не перестает работать, когда сеанс SSH завершается. Теперь вы можете закрыть окно, зная, что ваш бот тихонько подает звуковой сигнал в фоновом режиме. Можно ли восстановить удаленные сообщения в ватсапе читайте в нашей статье.

Это всё, что нужно для создания вашего первого Бота в Telegram.  По пути вы узнали о Ruby, gems, Telegram API и о том, как развернуть бота на сервере. Любые вопросы или предложения? Дай мне знать в комментариях! Сканировать штрих код вы можете скачав приложение.

 


как он работает и как сделать без программиста / Skillbox Media

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

Самостоятельное создание чат-бота можно условно разделить на пять этапов.

Этап 1. Определите, где будет находиться чат-бот

Это мессенджер, диалоговое окно на сайте, отдельная страница. На российском рынке наиболее популярны мессенджер социальной сети «ВКонтакте» и WhatsApp — многие начинают внедрение чат-ботов именно с них.

Этап 2. Опишите цели чат-бота

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

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

Этап 3. Спроектируйте чат-бота

Нужно определить логику алгоритма и последовательность действий. Итоговую структуру можно описать в виде последовательной (блочной, или древовидной) схемы сообщений.

Простая схема чат-бота. Источник: SimpleTexting. Инфографика: Майя Мальгина / Skillbox Media

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

Этап 4. Выберите конструктор чат-бота

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

Приведём некоторые примеры:

У Facebook Messenger, Slack и Telegram есть собственные платформы для создания ботов. Они бесплатные, но несколько сложнее классических коммерческих конструкторов.

Для общения с пользователем чат-бот должен откуда-то брать данные: о заказах, товарах, статусе доставки и так далее. Для этого алгоритм интегрируют со сторонними сервисами, которые хранят такие данные. Это, например, «Мой склад», «Google Таблицы», «Google Календарь», Bitrix24 или даже Instagram. При выборе конструктора нужно учитывать, что он должен работать с сервисом, которым пользуетесь вы.

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

Ещё следует обратить внимание:

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

Этап 5. Откорректируйте бота после тестового периода

Когда бот проработает хотя бы месяц, попробуйте его улучшить. Для этого:

  1. Проанализируйте, как клиенты используют чат-бота. Что они ищут? Как вы можете адаптировать бота к их потребностям?
  2. Обратите внимание на слова и фразы, которые бот не распознал. Обычно алгоритмы сохраняют эти данные. Если какая-то фраза встречается много раз, её можно внести в диалог.
  3. Изучите, какие именно пользователи вступают в диалог с чат-ботом, как они с ним общаются. Возможно, чат-боту стоит сменить тон.

Как создать Telegram бота с помощью Python | by Evgeny Vladimirovich | NOP::Nuances of Programming

Photo by Florencia Potter on Unsplash

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

В этом уроке мы будем использовать Python 3, библиотеку python-telegram-bot и публичный API RandomDog.

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

Перед тем как писать программу, нам нужно сгенерировать токен для нашего бота. Токен понадобится для доступа к API Telegram’а, и установки необходимых зависимостей.

1. Создаём нового бота в BotFather

Если вы задумали создавать бота для Telegram, сначала его нужно зарегистрировать, перед тем как использовать. Когда вы регистрируете бота, вы получаете токен для доступа к API Telegram’а

Перейдите по ссылке BotFather (у вас должно быть установлено приложение Telegram) и создайте нового бота, отправив команду /newbot. Следуйте инструкциям, пока не получите имя пользователя и токен для вашего бота. Ссылка для доступа к боту выглядит так: https://telegram. me/YOUR_BOT_USERNAME , а токен вот так:

704418931:AAEtcZ*************

2. Устанавливаем библиотеку

Команда для установки библиотеки:

pip3 install python-telegram-bot

Если всё прошло гладко, то можно двигаться дальше.

Наш бот должен возвращать изображение с пёсиком, когда мы отправляем команду /bop. Генерировать случайные изображения, нам поможет публичным API от RandomDog.

Рабочий процесс нашего бота очень прост:

запрос к API -> получить URL изображение -> отправить изображение

1. Импорт библиотек

Для начала импортируем все нужные библиотеки.

from telegram.ext import Updater, CommandHandler
import requests
import re

2. Доступ к API и получение URL изображения

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

contents = requests.get('https://random.dog/woof.json').json()

Проверить json данные можно в браузере по ссылке https://random.dog/woof.json. Вы увидите что-то вроде этого:

{“url":"https://random.dog/*****.JPG"}

Получаем URL, чтобы иметь возможность отправить изображение:

image_url = contents['url']

Оформим этот код в виде функции get_url() .

def get_url():
contents = requests.get('https://random.dog/woof.json').json()
url = contents['url']
return url

3. Отправляем картинку

Чтобы отправить сообщение/изображение, нам понадобится два параметра: URL изображения и ID получателя — это может быть ID группы или ID пользователя.

Получить URL изображения можно вызвав функцию get_url() .

url = get_url()

Чтобы получить ID получателя, используйте этот код:

chat_id = update.message.chat_id

После того как мы получили URL изображения и ID получателя, пришло время отправить сообщение, т. е. изображение.

bot.send_photo(chat_id=chat_id, photo=url)

Оберните код в функцию bopи убедитесь, что код выглядит следующим образом:

def bop(bot, update):
url = get_url()
chat_id = update.message.chat_id
bot.send_photo(chat_id=chat_id, photo=url)

4. Основная программа

И наконец, создайте ещё одну функцию с именем main, чтобы запускать программу. Не забудьте заменить YOUR_TOKEN на токен, который вы сгенерировали ранее.

def main():
updater = Updater('YOUR_TOKEN')
dp = updater.dispatcher
dp.add_handler(CommandHandler('bop',bop))
updater.start_polling()
updater.idle()if name == '__main__':
main()

В итоге, ваш код должен выглядеть вот так:

from telegram.ext import Updater, InlineQueryHandler, CommandHandler
import requests
import redef get_url():
contents = requests.get('https://random.dog/woof.json').json()
url = contents['url']
return urldef bop(bot, update):
url = get_url()
chat_id = update. message.chat_id
bot.send_photo(chat_id=chat_id, photo=url)def main():
updater = Updater('YOUR_TOKEN')
dp = updater.dispatcher
dp.add_handler(CommandHandler('bop',bop))
updater.start_polling()
updater.idle()if __name__ == '__main__':
main()

5. Запуск программы

Отлично! Мы почти закончили. Давайте проверим работу программы. Сохраните файл и назовите его main.py . Теперь её можно запускать, командой:

python3 main.py

Запустите бота перейдя по ссылке https://telegram.me/YOUR_BOT_USERNAME. Отправьте команду /bop. Если всё работает как надо, вы увидите случайное изображение с пёсиком. Миленько.

Сгенерированная картинка

Отлично! Теперь у вас есть работающий бот.

Есть ещё кое-что. API RandomDog генерирует не только изображения, но ещё видео и гифки. Мы не сможем получить видео или GIF от API, потому что произойдёт ошибка.

Давайте это исправим, чтобы бот отправлял нам только изображения. .]*)$»,url).group(1).lower()
return urldef bop(bot, update):
url = get_image_url()
chat_id = update.message.chat_id
bot.send_photo(chat_id=chat_id, photo=url)def main():
updater = Updater(‘YOUR_TOKEN’)
dp = updater.dispatcher
dp.add_handler(CommandHandler(‘bop’,bop))
updater.start_polling()
updater.idle()if __name__ == ‘__main__’:
main()

Всё должно работать идеально. Этот код можно найти на моём GitHub.

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

Перевод статьи Dzaky Widya Putra: Learn to build your first bot in Telegram with Python

встроенных ботов

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


Чтобы включить эту опцию, отправьте команду / setinline в @BotFather и укажите текст-заполнитель, который пользователь увидит в поле ввода после ввода имени вашего бота.

См. Соответствующие методы и объекты в Руководстве по API для ботов.

Встроенные результаты

Встроенные боты поддерживают всех типов контента , доступных в Telegram (всего 20). Они могут отправлять стикеры, видео, музыку, локации, документы и многое другое.


Клиенты могут отображать результаты с вертикальной или горизонтальной прокруткой, в зависимости от типа контента:


Как только пользователь нажимает на элемент, он немедленно отправляется получателю, а поле ввода очищается.

Переключение режимов inline / PM

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


Вы можете отобразить специальную кнопку «Перейти в личку» над встроенными результатами (или вместо них). Эта кнопка откроет приватный чат с ботом и передаст параметр по вашему выбору, чтобы вы могли запрашивать у пользователя соответствующие действия по настройке. После этого вы можете использовать встроенную клавиатуру с кнопкой switch_inline_query , чтобы отправить пользователя обратно в исходный чат.

Примеры ботов
@youtube — показывает кнопку «Войти на YouTube», а затем предлагает персонализированные результаты.

Руководство: переход на PM

Результаты на основе местоположения

Встроенные боты могут запрашивать данные о местоположении у своих пользователей. Используйте команду / setinlinegeo с @BotFather, чтобы включить это. Ваш бот будет запрашивать у пользователя разрешение на доступ к их местоположению всякий раз, когда он отправляет встроенный запрос.

Пример бота
@foursquare — этот бот запросит разрешение на доступ к местоположению пользователя, а затем предоставит результаты с геотаргетингом.

Вирусное распространение

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

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

Сбор отзывов

Чтобы узнать, какие из предоставленных результатов ваши пользователи отправляют своим партнерам по чату, отправьте @Botfather команду / setinlinefeedback . Если этот параметр включен, вы будете получать обновления результатов, выбранных вашими пользователями.

Обратите внимание, что это может создать проблемы с загрузкой популярных ботов — вы можете получить больше результатов, чем фактические запросы из-за кеширования (см. Параметр cache_time в answerInlineQuery). В этих случаях мы рекомендуем отрегулировать настройку вероятности, чтобы получить 1/10, 1/100 или 1/1000 результатов.

Примеры встроенных ботов

Вот несколько примеров встроенных ботов, на случай, если вам интересно увидеть один в действии.Попробуйте любой из этих вариантов:
@gif — поиск GIF
@vid — поиск видео
@pic — поиск изображений в Яндексе
@bing — поиск изображений Bing
@wiki — поиск в Википедии
@imdb — поиск IMDB
@bold — выделите жирным, курсивный или фиксированный системный текст

НОВИНКА
@youtube — Подключите свою учетную запись для получения персонализированных результатов
@music — Поиск и отправка классической музыки
@foursquare — Находите и отправляйте адреса мест проведения
@sticker — Находите и отправляйте стикеры на основе эмодзи

Боты FAQ

Если вы новичок в ботах Telegram, мы рекомендуем сначала ознакомиться с нашим Знакомство с ботами .
Вам также может пригодиться Bot API Manual .


Общие вопросы
Как создать бота?

Создавать ботов Telegram очень просто, но вам потребуются хотя бы некоторые навыки компьютерного программирования. Чтобы бот работал, создайте учетную запись бота с помощью @BotFather, а затем подключите его к своему внутреннему серверу через наш API.

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

Я разработчик. Где найти примеры?

Вот два примера ботов, написанных на PHP:

  • Hello Bot демонстрирует основы API бота Telegram.
  • Бот
  • Simple Poll является более полным примером, он поддерживает как длинный опрос, так и Webhooks для получения обновлений.

Многие члены нашего сообщества создают ботов и публикуют исходники.
Собираем их на на этой странице »

Напишите нам на @BotSupport, если вы создали бота и хотели бы поделиться им с другими.

Будете ли вы добавлять X в Bot API?

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

Приглашаем всех разработчиков ботов делиться идеями для нашего Bot API в нашей учетной записи @BotSupport .

Какие сообщения будет получать мой бот?

1. Все боты , независимо от настроек, получат:

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

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

3. Боты с включенным режимом конфиденциальности получит:

  • Команды, явно предназначенные для них (например, / command @ this_bot).
  • Общие команды от пользователей (например, / start) если бот был последним ботом, отправившим сообщение группе.
  • Сообщения, отправленные через этого бота.
  • Отвечает на любые сообщения, явно или неявно предназначенные для этого бота.

Обратите внимание , что каждое конкретное сообщение может быть доступно только одному боту с включенной конфиденциальностью , т.е.е. ответ боту A, содержащий явную команду для бота B или отправленный через бота C, будет доступен только боту A. Ответы имеют наивысший приоритет.

Почему мой бот не видит сообщения от других ботов?

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

Получение обновлений
Как мне получать обновления?

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

Длинный опрос дает мне одни и те же обновления снова и снова!

Метод getUpdates возвращает 100 первых неподтвержденных обновлений. Чтобы подтвердить обновление, используйте параметр смещение при вызове getUpdates следующим образом:

  смещение = update_id последнего обработанного обновления + 1  

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

У меня проблемы с Webhooks.

Если вы успешно настроили веб-перехватчик, но не получаете никаких обновлений, запомните:

  • Для работы веб-перехватчиков необходим действующий сертификат SSL.
  • Чтобы использовать самозаверяющий сертификат, вам необходимо загрузить сертификат открытого ключа с помощью параметра certificate в setWebhook. Пожалуйста, загрузите как InputFile, отправка строки не будет работать.
  • Порты, поддерживаемые в настоящее время для Webhooks: 443 , 80 , 88 , 8443 .
  • Подстановочные сертификаты могут не поддерживаться.
  • Перенаправления не поддерживаются.
  • CN должен точно соответствовать вашему домену.

Пожалуйста, ознакомьтесь с этим новым WEBHOOK GUIDE , чтобы узнать все, что нужно знать о веб-перехватчиках!

У меня проблемы с самозаверяющим сертификатом!

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

Как я могу убедиться, что запросы Webhook поступают из Telegram?

Если вы хотите убедиться, что запрос Webhook исходит от Telegram, мы рекомендуем использовать секретный путь в URL-адресе, который вы нам даете, например www.example.com/your_token. Поскольку никто другой не знает токен вашего бота, можете быть уверены, что это мы.

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

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

Каждый раз, когда вы получаете обновление веб-перехватчика, у вас есть два варианта:

1. Отправьте сообщение POST на https://api.telegram.org/bot/method

2. Ответьте напрямую и укажите метод как полезную нагрузку JSON в ответе

Вы также можете взглянуть на наш пример HelloBot, он предлагает реализацию этого PHP.

Обращение со СМИ
Как мне скачивать файлы?

Используйте метод getFile.Обратите внимание, что это будет работать только с файлами размером до 20 МБ.

Как загрузить большой файл?

Боты в настоящее время могут отправлять файлы любого типа размером до 50 МБ, так что да, очень большие файлы пока работать не будут. Извините. Этот лимит может быть изменен в будущем.

Могу ли я рассчитывать на постоянство file_ids?

Да, file_ids можно рассматривать как постоянные.

Вещание пользователям
Мой бот достигает пределов, как мне этого избежать?

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

Если вы отправляете массовые уведомления нескольким пользователям, API не будет разрешать более 30 сообщений в секунду или около того. Для достижения наилучших результатов рассмотрите возможность рассылки уведомлений через большие интервалы в 8–12 часов.

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

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

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

Чтобы избежать выхода за наши пределы при рассылке массовых уведомлений, рассмотрите возможность их распространения на более длительные интервалы, например 8-12 часов. API не будет разрешать массовые уведомления более чем ~ 30 пользователям в секунду, если вы перейдете через это, вы начнете получать 429 ошибок.

См. Также: Как избежать превышения лимита?


Если у вас есть вопросы, на которые нет ответа на этой странице, напишите нам на @BotSupport в Telegram.
Мы приветствуем любые предложения по бот-платформе и API.

Как создать чат-бота Telegram

Чат-бот — это автоматизированный многофункциональный помощник, который может принимать отправленные и отправленные инициированные сообщения, а с помощью SendPulse ваш бот может сохранять информацию в виде переменных для дальнейшего использования.

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

Если у вас уже есть бот, пропустите первый абзац и посмотрите следующий раздел.

Как создать нового бота для Telegram

Откройте мессенджер Telegram, войдите в свою учетную запись или создайте новую.

Шаг 1. Введите @Botfather во вкладке поиска и выберите этого бота.

Обратите внимание, у официальных ботов Telegram рядом с их именем есть синяя галочка.

Нажмите «Пуск», чтобы активировать бота BotFather.

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

Шаг 2 . Выберите или введите команду / newbot и отправьте ее.

Шаг 3. Выберите имя для своего бота — ваши подписчики увидят его в разговоре. И выберите логин для своего бота — бота можно будет найти в поиске по логину. Имя пользователя должно быть уникальным и заканчиваться словом «бот».

После того, как вы выбрали подходящее имя для своего бота — бот создан. Вы получите сообщение со ссылкой на вашего бота t.me / , рекомендации по настройке изображения профиля, описания и списка команд для управления вашим новым ботом.

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

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

Шаг 1. Перейдите к боту @BotFather и отправьте команду / token .

Вы увидите кнопки со всеми созданными вами ботами.

Шаг 2. Выберите тот, для которого вам нужен токен, чтобы вы могли подключить его к Sendpulse.

Скопируйте значение токена.

Как подключить бота к SendPulse

Перейдите в раздел «Чат-боты» в своей учетной записи SendPulse. Если вы впервые посещаете эту страницу и не подключили чат-ботов, нажмите кнопку «Подключить каналы».Если вы уже подключали ботов раньше — перейдите на вкладку «Основные» и нажмите кнопку «Управление ботами».

Затем выберите Telegram и нажмите кнопку «Включить Telegram».

Введите свой токен от нужного бота и нажмите «Подключиться».

В следующем окне нажмите кнопку «Подписаться».

Вы будете перенаправлены в приложение Telegram, нажмите кнопку «Пуск», и вы будете подписаны на своего бота.

Поздравляем! Вы успешно добавили своего чат-бота в SendPulse.

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

Обратите внимание, существующие подписчики не импортируются в аудиторию вашего чат-бота SendPulse. После подключения бота вы можете собирать подписчиков с помощью виджета веб-сайта или напрямую делиться ссылкой на своего бота t.me/ .

Подключите своего бота Telegram

Последнее обновление: 27.11.2020

Как создать бота Telegram

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

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

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

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

Telegram — одна из наиболее популярных сегодня платформ обмена мгновенными сообщениями, поскольку она позволяет хранить сообщения в облаке, а не только на вашем устройстве, и может похвастаться хорошей многоплатформенной поддержкой, так как Telegram можно использовать на Android, iOS, Windows и просто о любой другой платформе, которая может поддерживать веб-версию.Создание чат-бота в Telegram довольно просто и требует нескольких шагов, на выполнение которых уходит очень мало времени. Чат-бот может быть интегрирован в группы и каналы Telegram, а также работает сам по себе.

В этом уроке мы создадим бота Telegram, который предоставит вам изображение аватара из Adorable Avatars. Наш пример будет включать создание бота с использованием Flask и его развертывание на бесплатном сервере Heroku.

Для выполнения этого руководства вам понадобится Python 3, установленный в вашей системе, а также навыки программирования на Python.Кроме того, хорошее понимание того, как работают приложения, было бы хорошим дополнением, но не обязательным, поскольку мы рассмотрим большую часть того, что мы представляем подробно. Вам также необходимо установить Git в вашей системе.

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

Оживление вашего Telegram-бота

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

Вам нужна команда / newbot , которая ведет к следующим шагам для создания вашего бота:

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

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

Код логики чат-бота

В этом руководстве мы будем использовать Ubuntu. Для пользователей Windows большинство команд здесь будут работать без каких-либо проблем, но если у вас возникнут какие-либо проблемы с настройкой виртуальной среды, обратитесь по этой ссылке. Что касается пользователей Mac, это руководство должно работать нормально.

Во-первых, давайте создадим виртуальную среду. Это помогает изолировать требования вашего проекта от глобальной среды Python.

  $ python -m venv botenv /
  

Теперь у нас будет каталог botenv / , который будет содержать все библиотеки Python, которые мы будем использовать.Идите вперед и активируйте virtualenv , используя следующую команду:

  $ источник botenv / bin / activate
  

Библиотеки, которые нам нужны для нашего бота:

Вы можете установить их в виртуальной среде с помощью следующей команды pip:

  (телебот) $ pip install flask
(Telebot) $ pip установить python-telegram-bot
(Telebot) запросы на установку $ pip
  

Теперь давайте просмотрим каталог нашего проекта.

 .
├── приложение.ру
├── телебот
│ ├── credentials.py
│ | .
│ | вы можете построить свой двигатель здесь
│ | .
│ └── __init__.py
└── ботенв
  

В файле credentials.py нам понадобятся три переменные:

  bot_token = "Вот ваш токен доступа от BotFather"
bot_user_name = "введенное вами имя пользователя"
URL = "ссылка на приложение heroku, которую мы создадим позже"
  

Теперь вернемся к нашему app.py и пошагово пройдемся по коду:

  # импортировать все
из фляги импорт фляги, запрос
импортная телеграмма
от телебота.импорт учетных данных bot_token, bot_user_name, URL
  
  глобальный бот
глобальный ТОКЕН
TOKEN = bot_token
bot = telegram.Bot (токен = ТОКЕН)
  

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

  # запустить приложение flask
app = Flask (__ имя__)
  

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

В нашем примере функция маршрута отвечает на URL-адрес, который в основном представляет собой / {token} , и это URL-адрес, который Telegram будет вызывать для получения ответов на сообщения, отправленные боту.

  @ app.route ('/ {}'. Формат (ТОКЕН), методы = ['POST'])
def response ():
   # получить сообщение в JSON и затем преобразовать его в объект Telegram
   update = telegram.Update.de_json (request.get_json (force = True), бот)

   chat_id = update.message.chat.id
   msg_id = update.message.message_id

   # Telegram понимает UTF-8, поэтому кодируйте текст для совместимости с Unicode
   текст = обновление.message.text.encode ('utf-8'). decode ()
   # только для отладки
   print ("получил текстовое сообщение:", текст)
   # при первом общении с ботом AKA приветственное сообщение
   если text == "/ start":
       # распечатать приветственное сообщение
       bot_welcome = "" "
       Добро пожаловать в бот coolAvatar, бот использует службу http://avatars.adorable.io/ для создания крутых аватаров на основе введенного вами имени, поэтому введите имя, и бот ответит аватаром на ваше имя.
       "" "
       # отправить приветственное сообщение
       бот.sendMessage (chat_id = chat_id, text = bot_welcome, reply_to_message_id = msg_id)


   еще:
       пытаться:
           # очистить полученное сообщение от всех не алфавитов
           text = re.sub (r "\ W", "_", текст)
           # создать ссылку api для аватара на основе http://avatars.adorable.io/
           url = "https://api.adorable.io/avatars/285/{}.png" .format (text.strip ())
           # ответьте фотографией на имя, отправленное пользователем,
           # обратите внимание, что вы можете отправлять фотографии по URL-адресу, и Telegram получит их за вас
           бот.sendPhoto (chat_id = chat_id, photo = url, reply_to_message_id = msg_id)
       кроме исключения:
           # если что-то пошло не так
           bot.sendMessage (chat_id = chat_id, text = "Возникла проблема с именем, которое вы использовали, введите другое имя", reply_to_message_id = msg_id)

   верни "ок"
  

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

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

Маршрут здесь может быть любым; это ты назовешь:

  @ app.route ('/ setwebhook', methods = ['GET', 'POST'])
def set_webhook ():
    # мы используем объект бота, чтобы связать бота с нашим приложением, которое
    # в ссылке, предоставленной URL
    s = бот.setWebhook ('{URL} {HOOK}'. format (URL = URL, HOOK = TOKEN))
    # кое-что, чтобы сообщить нам, что все работает
    если s:
        верните "webhook setup ok"
    еще:
        вернуть "сбой настройки веб-перехватчика"
  

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

  @ app.route ('/')
def index ():
    возвращение '.'
если __name__ == '__main__':
    # обратите внимание на резьбовой аргумент, который позволяет
    # ваше приложение должно иметь более одного потока
    app.run (поток = True)
  

Давайте посмотрим на полную версию приложения.py:

  импорт ре
из фляги импорт фляги, запрос
импортная телеграмма
from telebot.credentials import bot_token, bot_user_name, URL


глобальный бот
глобальный ТОКЕН
TOKEN = bot_token
bot = telegram.Bot (токен = ТОКЕН)

app = Flask (__ имя__)

@ app.route ('/ {}'. format (TOKEN), methods = ['POST'])
def response ():
   # получить сообщение в JSON и затем преобразовать его в объект Telegram
   update = telegram.Update.de_json (request.get_json (force = True), бот)

   chat_id = update.message.chat.id
   msg_id = обновить.message.message_id

   # Telegram понимает UTF-8, поэтому кодируйте текст для совместимости с Unicode
   текст = update.message.text.encode ('utf-8'). decode ()
   # только для отладки
   print ("получил текстовое сообщение:", текст)
   # при первом общении с ботом AKA приветственное сообщение
   если text == "/ start":
       # распечатать приветственное сообщение
       bot_welcome = "" "
       Добро пожаловать в бот coolAvatar, бот использует службу http://avatars.adorable.io/ для создания крутых аватаров на основе введенного вами имени, поэтому введите имя, и бот ответит аватаром на ваше имя."" "
       # отправить приветственное сообщение
       bot.sendMessage (chat_id = chat_id, text = bot_welcome, reply_to_message_id = msg_id)


   еще:
       пытаться:
           # очистить полученное сообщение от всех не алфавитов
           text = re.sub (r "\ W", "_", текст)
           # создать ссылку api для аватара на основе http://avatars.adorable.io/
           url = "https://api.adorable.io/avatars/285/{}.png" .format (text.strip ())
           # ответьте фотографией на имя, отправленное пользователем,
           # обратите внимание, что вы можете отправлять фотографии по URL-адресу, и Telegram получит их за вас
           бот.sendPhoto (chat_id = chat_id, photo = url, reply_to_message_id = msg_id)
       кроме исключения:
           # если что-то пошло не так
           bot.sendMessage (chat_id = chat_id, text = "Возникла проблема с именем, которое вы использовали, введите другое имя", reply_to_message_id = msg_id)

   верни "ок"

@ app.route ('/ set_webhook', methods = ['GET', 'POST'])
def set_webhook ():
   s = bot.setWebhook ('{URL} {HOOK}'. format (URL = URL, HOOK = TOKEN))
   если s:
       верните "webhook setup ok"
   еще:
       вернуть "сбой настройки веб-перехватчика"

@приложение.маршрут('/')
def index ():
   возвращение '.'


если __name__ == '__main__':
   app.run (поток = True)
  

Это последний фрагмент кода, который вы напишете в нашем руководстве. Теперь мы можем перейти к последнему шагу, запустив наше приложение на Heroku.

Запустите наше приложение на Heroku

Нам нужно кое-что, прежде чем мы создадим наше приложение.

Heroku не может знать, какие библиотеки использует ваш проект, поэтому мы должны сообщить ему об этом с помощью файла requirements.txt — распространенная проблема заключается в том, что вы неправильно пишете требования, поэтому будьте осторожны — чтобы сгенерировать файл требований с помощью pip:

  pip freeze> требования.текст
  

Теперь у вас есть готовый файл требований.

Теперь вам нужен Procfile , который сообщает Heroku, где запускается наше приложение, поэтому создайте файл Procfile и добавьте следующее:

  Интернет: Gunicorn app: app
  

Шаг возврата: вы можете добавить файл .gitignore в свой проект, чтобы неиспользуемые файлы не загружались в репозиторий.

На панели управления Heroku создайте новое приложение. Как только вы это сделаете, он направит вас на страницу Deploy .Затем откройте вкладку Settings в новом окне и скопируйте домен приложения, который будет примерно https://appname.herokuapp.com/ , и вставьте его в переменную URL внутри credentials.py .

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

Примечание. Пользователи Windows и macOS могут выполнить действия, описанные здесь.

Войти в Heroku:

  $ heroku логин
  

Обратите внимание, что этот метод иногда застревает в , ожидая входа в систему , если это произойдет с вами, попробуйте войти, используя:

  $ heroku логин -i
  

Инициализировать репозиторий Git в нашем каталоге:

  $ git init
$ heroku git: remote -a {имя-проекта-героя}
  

Развернуть приложение:

  $ git add.$ git commit -m "первая фиксация"
$ git push герой мастер
  

На этом этапе вы увидите прогресс строительства в вашем терминале. Если все прошло нормально, вы увидите что-то вроде этого:

  пульт: -----> Запуск ...
удаленный: выпущена v6
удаленный: https://project-name.herokuapp.com/ развернут на Heroku
удаленный:
удаленный: проверка развертывания ... выполнено.
  

Теперь перейдите на страницу приложения (ссылка на домен, который вы скопировали ранее) и добавьте в конец ссылки / setwebhook , чтобы адрес был что-то вроде https: // имя приложения.herokuapp.com/setwebhook . Если вы видите webhook setup ok , значит, вы готовы к работе!

Теперь поговорите со своим ботом

Живая версия бота

Последние штрихи, советы и хитрости

Теперь у вас есть бот Telegram, работающий круглосуточно и без выходных. Вы можете добавить к боту любую логику, которую хотите, так, например, вы можете сделать своего бота более реалистичным, добавив статус «печатает» и отправив статус фотографии следующим образом:

Следующий фрагмент кода из функции response () :

  если text == "/ start":
       # распечатать приветственное сообщение
       bot_welcome = "" "
       Добро пожаловать в бот coolAvatar, бот использует сервис из http: // avatars.adorable.io/, чтобы создавать крутые аватары на основе введенного вами имени, поэтому введите имя, и бот ответит аватаром для вашего имени.
       "" "
       # отправить приветственное сообщение
       bot.sendChatAction (chat_id = chat_id, action = "typing")
       сон (1.5)
       bot.sendMessage (chat_id = chat_id, text = bot_welcome, reply_to_message_id = msg_id)


   еще:
       пытаться:
           # очистить полученное сообщение от всех не алфавитов
           text = re.sub (r "\ W", "_", текст)
           # создать ссылку api для аватара на основе http: // avatars.adorable.io/
           url = "https://api.adorable.io/avatars/285/{}.png" .format (text.strip ())
           # ответьте фотографией на имя, отправленное пользователем,
           # обратите внимание, что вы можете отправлять фотографии по URL-адресу, и Telegram получит их за вас
           bot.sendChatAction (chat_id = chat_id, action = "upload_photo")
           сон (2)
           bot.sendPhoto (chat_id = chat_id, photo = url, reply_to_message_id = msg_id)
       кроме исключения:
           # если что-то пошло не так
           bot.sendMessage (chat_id = chat_id, text = "Возникла проблема с именем, которое вы использовали, введите другое имя", reply_to_message_id = msg_id)
  

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

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

Еще много простых примеров телеграмм-ботов можно найти на странице python-telegram-bot на GitHub.

Вы можете развить нашего бота и сделать его следующим супер-ИИ-ботом — все, что вам нужно сделать, это интегрировать свою логику в функцию response () . Например, ваша логика может быть в отдельном модуле и может вызываться внутри функции response () следующим образом:

 .├── app.py
├── телебот
│ ├── credentials.py
│ ├──ai.py
│ | .
│ | вы можете построить свой двигатель здесь
│ | .
│ └── __init__.py
└── ботенв
  

И внутри ai .py:

  def generate_smart_reply (текст):
    # здесь мы можем делать всю нашу работу
    верните "это умный ответ от ai!"
  

Импортируйте его сейчас в приложение .py:

  импорт ре
от времени импортный сон
из фляги импорт фляги, запрос
импортная телеграмма
С телебота.AI импорт generate_smart_reply
from telebot.credentials import bot_token, bot_user_name, URL
  

Затем просто вызовите его внутри кода response () .

  def response ():
   # получить сообщение в JSON и затем преобразовать его в объект Telegram
   update = telegram.Update.de_json (request.get_json (force = True), бот)

   chat_id = update.message.chat.id
   msg_id = update.message.message_id

   # Telegram понимает UTF-8, поэтому кодируйте текст для совместимости с Unicode
   текст = обновление.message.text.encode ('utf-8'). decode ()
   # только для отладки
   print ("получил текстовое сообщение:", текст)
   # здесь позвони своему умному ответному сообщению
   reply = generate_smart_reply (текст)
   bot.sendMessage (chat_id = chat_id, text = reply, reply_to_message_id = msg_id)
  

Теперь ваш бот может работать так, как вы хотите — вперед и создайте следующую большую вещь!

Надеюсь, вам понравилось создавать своего первого бота для Telegram.

Дополнительные ресурсы

Как шаг за шагом создать Telegram BOT, не вводя код | автор: Антонио Миньяно

Если вы еще этого не сделали, разархивируйте проект внутри папки, затем переименуйте .envExample от до .env (см. позже, если вы работаете в Windows) и отредактируйте следующую строку, вставив свой API-токен , выданный BotFather :

 TELEGRAM_TOKEN = ”

Если вы в Windows:
У вас могут возникнуть проблемы с переименованием файла, просто откройте меню «Пуск» и введите «cmd», затем откройте «Командную строку» и выполните следующие действия:

Теперь пришло время проявить творческий подход.
Откройте файл answers.json и давайте взглянем на него.

Здесь хранятся все ответы, легко увидеть структуру, конкатенацию этих «объектов», которые содержат триггеры, и ответы на каждый из этих триггеров.

Конечно, это всего лишь пример с 3 ответами, вы можете получить намного больше.

Давайте проанализируем, как он составлен:

  • триггеры : конкатенация строк, которые запускают тот ответ
  • ответов : конкатенация «дочерних объектов»

В каждом из ответов есть

  • ответ : это то, что должно быть отправлено как сообщение
  • тип : он определяет тип ответа, может быть « текст» , « аудио» или « image »

В зависимости от типа ответ должен иметь осмысленное значение: в случае, если тип равен audio или image , значение ответа должно быть допустимым путем к файл на вашем компьютере, даже если настоятельно рекомендуется поместить такие носители в папку «media» .

На данный момент протестированы расширения для носителей: «.jpg», «.gif» и «.mp3».

В командной строке введите следующую команду (внутри папки проекта), чтобы загрузить все зависимости, необходимые для бота:

 npm install 

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

 npm start 

И это результат

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

Бот может быть остановлен и повторно запущен без каких-либо проблем
Если вы хотите запустить его на машине без головы, такой как Raspberry, вы можете найти способ, чтобы он не мешал другим приложениям, прочтите мою другую статью о Экран Unix:

Как создать своего первого бота Telegram: Руководство для абсолютных новичков | Процессная улица

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

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

Ничего особенного. Я вряд ли мастер-программист, да и вам не обязательно. Имея базовые знания в области программирования и API, вы можете создавать действительно полезные программы для развлечения и получения прибыли.В этом руководстве мы рассмотрим создание бота Telegram с нуля.

Бот Telegram можно использовать с Intercom API, чтобы агенты службы поддержки могли связаться со своими клиентами, использующими Telegram. Он также может включать автоматизацию, которая объединяет полезные ресурсы с живым чатом, как в примере ниже от orat.io:

Telegram — отличный дом для ботов, ориентированных на клиентов, с более чем 200000000 активных пользователей в месяц и ежегодным темпом роста 50%. Это платформа, которую ваша аудитория уже может использовать, что снижает трение и способствует принятию.Кроме того, создавать ботов для Telegram очень просто — это самый простой способ создания ботов, который у меня когда-либо был.

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

Первый бот, который я сделал для Telegram, использовал RSS для поиска материалов Hacker News, соответствующих поисковому запросу:

Поиграйте с ботом — он здесь!

Используя знания из этого руководства и немного продолжая чтение, вы можете создать чат-бота поддержки для своей компании, программу чтения RSS-каналов, панель управления для вашего умного дома или бота, который будет отвечать, используя только цитаты Шекспира.Маленькие программные проекты, подобные этому, очень увлекательны и бесконечно расширяемы. Чем больше вы читаете и придумываете функции, тем дальше вы сможете продвинуть своего бота.

Из этого руководства вы узнаете:

  • Как с нуля написать Telegram-бота
  • Как добавлять новые команды в словарь бота
  • Основные команды терминала для создания файлов и навигации по папкам
  • Немного о языке программирования Ruby
  • Как расширить Ruby драгоценными камнями
  • Как заставить вашего бота возвращать случайные ответы из списка
  • Несколько простых команд git, которые помогут вам управлять файлами кода и передавать их
  • Как установить бота на сервер и запускать его круглосуточно

Перед запуском вам понадобится:

  • Терминал bash. Поставляется в комплекте с macOS и Linux, но не с большинством инсталляций Windows. Если вы следуете этому руководству на компьютере с Windows, на котором не установлено юбилейное обновление Windows 10, вы можете использовать эмулятор или эмулировать Linux на виртуальной машине.
  • Рубин. См. Официальную документацию Ruby для руководств по ОС. Я лично использую Homebrew на macOS, но пользователи Windows могут установить его с помощью этого инструмента.
  • Упаковщик. Bundler помогает управлять драгоценными камнями Ruby, которые добавляют дополнительные функции вашим приложениям.Он понадобится вам для добавления интерфейса к Telegram API для вашего бота. Просто запустите gem install bundler в своем терминале, чтобы установить его.
  • Текстовый редактор. Теоретически вы можете использовать Блокнот или TextEdit, но большинство из них порекомендовали бы специальный редактор, такой как Atom, который выделяет синтаксис и помогает сделать ошибки кода более очевидными.

Итак, приступим.

Шаг 1. Загрузите приложение Telegram для рабочего стола

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

Пора получить ключ API!

Шаг 2. Пообщайтесь с BotFather, чтобы получить ключ API

Создание бота Telegram — новый процесс, потому что большая часть его сосредоточена вокруг вашего собственного взаимодействия с ботом Telegram. Этот бот называется BotFather. В настольном приложении Telegram вам нужно найти его имя пользователя и начать с ним разговор.

Дайте команду запуска BotFather, набрав / start .

Вы увидите список команд, которые помогут вам создавать, редактировать и управлять ботами. Поскольку это ваш первый раз, вам понадобится / newbot .

По сравнению с процессом создания бота Twitter, бота Mastodon или любого другого бота, с которым я экспериментировал, Telegram упрощает первоначальную настройку super . Думаю, это доказывает, каким отличным инструментом могут быть боты Telegram!

После подачи команды / newbot вы можете выбрать имя и имя пользователя для своего бота.Имя — это то, что ваши пользователи будут видеть в списке контактов бота, а имя пользователя — это то, как они его найдут. Думайте об имени пользователя как о дескрипторе Twitter; он должен быть уникальным, и лучше всего, если он будет коротким и запоминающимся.

После этого вам будет предоставлен ключ API вашего бота. Ключ API — это то, как Telegram узнает, что код, который вы пишете, связан с этим конкретным ботом. У каждого бота есть собственный ключ API, и вы не должны делиться им с кем-либо, иначе они могут захватить вашего бота и заставить его совершить свои злые дела.

На этом мы завершаем наш чат с BotFather — по коду!

Шаг 3. Настройка драгоценных камней и каталога бота

Откройте терминал и выполните mkdir telegram-bot . Это создаст новый каталог для файлов вашего бота. Лучше всего хранить их в одной папке, чтобы ими было легко управлять. Перейдите в каталог с cd telegram-bot , а затем сделайте следующее:

touch Gemfile
touch bot.rb
atom.

Это создает два пустых файла: один для указания необходимых драгоценных камней, а второй — для размещения кода бота.Последняя команда открывает оба этих файла в Atom.

Щелкните Gemfile на боковой панели Atom и вставьте следующее:

 источник 'https://rubygems.org'
жемчужина 'telegram_bot' 

Это указывает Bundler захватить интерфейс Ruby к API Telegram с rubygems.org.

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

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

Кодирование вашего первого бота Telegram

Фактический код, который будет постоянно работать на сервере, находится внутри bot.rb. Сейчас он пуст, но здесь мы собираемся связать гем Telegram, который мы только что собрали, и создать бота.

Это не так уж и много кода. Когда вы закончите, у вас будет:

В Telegram это то, что делает код выше:

Давайте посмотрим, что делает каждая часть кода, и напишем это по ходу дела.

 требует 'telegram_bot'
token = 'ТОКЕН'
bot = TelegramBot.new (токен: токен) 

(замените TOKEN на токен API, который вы скопировали из BotFather)

Ruby позволяет легко угадать, что будет делать код. Три строки выше добавляют функциональность бота Telegram к вашему файлу, а затем создают новый объект бота из класса TelegramBot, аутентифицированный вашим токеном, чтобы программа знала, куда отправлять данные.

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

 bot.get_updates (fail_silently: true) do | message | сообщение |
  помещает "@ # {message.from.username}: # {message.text}"
  command = message.get_command_for (бот)

  сообщение.ответ сделать | ответить |
    case команда
    когда / start / i
      reply.text = "Все, что я могу сделать, это поздороваться. Попробуйте команду / greet."
    когда / приветствую / я
      reply.text = "Здравствуйте, # {message.from.first_name}. 🤖"
    еще
      reply.text = "Понятия не имею, что означает # {command.inspect}."
    конец
    ставит "отправка # {ответ.text.inspect} на @ # {message.from.username} "
    reply.send_with (бот)
  конец
конец 

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

Ответные действия бота хранятся в операторе case. Входные данные оператора case проходят через переменную message после того, как они были очищены методом gem’а get_command_for .Текст ответа бота устанавливается в зависимости от сохраненной команды, а затем, наконец, отправляется с send_with до перезапуска цикла.

Теперь вы можете найти своего бота в Telegram, отправить команды / start и / greet и посмотреть, как он работает.

Для этого сохраните изменения в Atom и запустите в терминале ruby ​​bot.rb . Пока этот терминал открыт и работает, ваш бот будет отправлять ответы!

Настройка вашего нового блестящего бота

Созданный вами бот хорош, но не очень интересен.Базовые биты есть, а это значит, что вы можете легко поменять их местами и расширить.

При настройке следует обратить внимание на строки when / command / i и текст между кавычками в строках reply.txt . Это входные данные, которые принимает ваш бот, и сообщения, которые он отправляет в качестве ответов.

Итак, если вы хотите сказать что-то другое в ответ на команду / greet , вы должны изменить значение reply.text под командной строкой greet ( при / greet / i ).Вот вариант, который вы можете попробовать:

 когда / greet / i
      greetings = ['bonjour', 'hola', 'hallo', 'sveiki', 'namaste', 'salaam', 'szia', 'halo', 'ciao']
      reply.text = "# {greetings.sample.capitalize}, # {message.from.first_name}!"
 

Здесь я создал массив с несколькими разными способами поздороваться, а затем произвольно добавил один к сообщению, используя метод sample.

Превратите своего бота в нечто классное

Вы можете добавить к своему боту столько команд, ответов и функций, сколько захотите.По большей части это воображение и поиск в Google по ходу дела. Если вы хотите научиться многому, что применимо к этому боту, начните с «Изучите Ruby на сложном пути», чтобы разобраться в основах языка. Немного попрактиковавшись и положившись на StackOverflow, вы сможете:

  • Подключите другие API-интерфейсы для извлечения данных из таких источников, как Airtable, Slack, RSS или Twitter. Вот где появляется действительно интересная функциональность — вы можете создать бота, который действует как диалоговый интерфейс для набора данных или функций, например, бота, который возвращает результаты поиска из Twitter или сообщения в Slack.
  • Сохраняет вводимые пользователем данные в базе данных. Вы можете создать бота Telegram, который предлагает автоматическую поддержку пользователям или отвечает на запросы и хранит их адреса электронной почты в базе данных. Гем Sequel упрощает создание, запись, редактирование и чтение баз данных.
  • Создайте текстовое приключение. Colossal Cave Adventure, одна из первых игр для терминалов, была перенесена в Telegram в качестве бота. Проверьте это здесь и посмотрите источник здесь.

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

Запуск вашего бота 24/7

Прямо сейчас ваш бот работает в вашем терминале на вашем компьютере. Это нормально, пока вам не понадобится перезагрузить компьютер, когда у вас не отключится Wi-Fi или компьютер не перейдет в спящий режим. Когда это происходит, он завершает работу бота, и пользователи не получают от него ответа.

Процесс перемещения вашего бота из среды разработки (ваш компьютер, на котором вы использовали Atom для написания бота) в производственную среду (сервер) называется развертыванием.Есть несколько вариантов развертывания бота, но в обоих случаях мы собираемся начать с загрузки файлов в Bitbucket. Bitbucket позволяет использовать git, систему контроля версий, которая помогает безопасно вносить и отслеживать изменения в коде вашего бота. Загрузив файлы своего бота в Bitbucket, вы можете использовать Bitbucket как способ получить файлы бота, когда вы вошли в систему.

Зарегистрируйтесь в Bitbucket и создайте новый репозиторий.

Открыв терминал и находясь в том же каталоге, что и исходный код вашего бота, введите следующее:

git init
git add.
git commit -m 'начальная фиксация'

Теперь следуйте инструкциям Bitbucket после создания нового репозитория. Мои:

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

Развертывание с Raspberry Pi

На этом маленьком компьютере Raspberry Pi на моем столе находится куча ботов

Raspberry Pi — отличное вложение, если вы планируете создавать и развертывать ботов — вы можете получить его всего за 7 долларов плюс стоимость SD-карты.Он потребляет очень мало энергии, поэтому вы можете держать его включенным все время и не беспокоиться о стоимости. Может возникнуть соблазн купить комплект с клавиатурой, мышью и чехлом, но все, что вам нужно, — это зарядное устройство USB, SD-карта, кабель Ethernet и сам компьютер. Вероятно, большинство из этих вещей уже есть в вашем офисе.

Развертывание с облачным сервером

Вам не обязательно владеть компьютером, на котором работает ваш бот, вы можете использовать память и мощность чужой машины для удаленного запуска бота.Популярные решения для развертывания в облаке включают Amazon Web Services (AWS), DigitalOcean и Heroku.

Из трех наиболее начальным уровнем являются DigitalOcean и Heroku. Щелкните здесь, чтобы получить учетную запись DigitalOcean с 10 долларами на счете — этого достаточно, чтобы запустить сервер в течение двух месяцев, пока вы его тестируете.

Когда вы зарегистрируетесь в DigitalOcean и создадите новую дроплет, вы узнаете, как подключиться к серверу через SSH и запустить консоль.

Отсюда это тот же процесс, что и на локальном компьютере, независимо от того, какой сервер вы используете.В конце концов, это просто терминал bash. Установив какой-то сервер, давайте перейдем к фактическому развертыванию.

Процесс развертывания

На новом сервере — будь то Raspberry Pi или облачный сервер, такой как Digital Ocean — вам нужно будет установить Ruby, Bundler и Git:

sudo apt-get update
sudo apt-get upgrade
curl -L https://get.rvm.io | bash -s stable --ruby
sudo apt-get install bundler
sudo apt-get install git

Затем создайте новый каталог для своего бота, перейдите в него и загрузите файлы из Bitbucket с помощью следующих команд:

mkdir-ботов
cd-ботов
git clone https: // [электронная почта защищена] / benjbrandall / telegram-bot.git

Не забудьте заменить приведенный выше URL (https: // benjbran…) на URL-адрес репозитория вашего бота на Bitbucket. Вы найдете всю команду клонирования через Bitbucket, поэтому вам не придется делать это вручную.

Затем введите bundle , чтобы установить зависимости гема, а затем ruby ​​bot.rb , чтобы запустить бота постоянно.

Примечание. Если вы подключаетесь к серверу через SSH, вам необходимо запустить бот с помощью робота nohup ruby.rb & , чтобы бот не прекращал работу после завершения сеанса SSH. Теперь вы можете закрыть окно терминала, зная, что ваш бот тихонько издает звуковой сигнал в фоновом режиме. 🤖

На этом ваш первый удар по боту Telegram завершен. Попутно вы узнали о терминале, Ruby, драгоценных камнях, API Telegram и о том, как развернуть бота на сервере. Есть вопросы или предложения? Вы можете написать мне в Twitter.

Создайте бота Telegram на Go за 9 минут | Франсуа Паупье | Стартап

1.Зарегистрируйте своего бота в Telegram

Сначала вам нужно сообщить Telegram, что вы хотите зарегистрировать бота. Для этого отправьте BotFather команду / newbot . Вы получаете обратно жетонов . Мы будем использовать его в нашем коде для аутентификации нашего приложения на серверах Telegram. Смотрите скриншот ниже. Храните свой токен в надежном месте — , т. Е. , не передавайте его в вашу систему контроля версий.

Когда вы создаете бота, BotFather генерирует и возвращает токен для доступа к HTTP Bot API.

Чтобы дважды проверить работу создания бота, вы можете запросить конечную точку / getMe API Telegram.

Если Telegram зарегистрировал вашего бота, вы получите краткую сводку его характеристик в формате JSON в ответ на ваш запрос / getMe.

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

2. Обработка запросов пользователей

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

Прежде чем сразу перейти к коду, давайте посмотрим, что происходит, когда пользователь взаимодействует с вашим ботом в Telegram.

Telegram — это облачная служба обмена сообщениями. Когда вы отправляете кому-то сообщение в Telegram, серверы Telegram получают ваше сообщение и отправляют его в соответствующий чат. См. Мой GIF ниже:

Упрощенное представление об облачной природе службы обмена сообщениями Telegram. Анимированная версия.

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

Статическая версия

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

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

Что происходит, когда вы отправляете сообщение боту Telegram (упрощенно), шаг за шагом. Взаимодействие с пользователем <—> ботом, статическая версия.

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

3. Реализуйте свой обработчик

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

Telegram Обновление может содержать различную информацию: текстовое сообщение, голосовое сообщение, видео или документ, и многие другие. В этой статье мы увидим, как обрабатывать текстовые сообщения. Не стесняйтесь исследовать другие варианты с помощью бота для аудио, видео или обработки документов!

Поскольку область действия обработчика в основном предназначена для обработки ответов и выполнения запросов API, язык программирования Go является идеальным инструментом.

Telegram Обновление может быть намекающим объектом со всеми его полями. К счастью, мы можем представить это с помощью более простой структуры в Go для решения нашего варианта использования:

Облегченная структура обновления Telegram на языке программирования Go.

Аналогичным образом мы определяем структуру сообщения:

Облегченная структура сообщения Telegram в Go.

И, наконец, структура чата:

Облегченная структура чата Telegram на Go.

С этими тремя структурами; Update , Message и Chat , мы готовы обрабатывать сообщения наших пользователей.

Вы заметили `json:" something "` справа от каждого поля структуры. Это указывает декодеру JSON, как анализировать входящий запрос Telegram в соответствующую структуру. Например, `json:" update_id "` в структуре Update указывает декодеру JSON искать ключ с именем update_id и устанавливать соответствующее значение для атрибута UpdateId нашей структуры Go Update.

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

Теперь, когда мы проанализировали запрос, мы можем получить доступ к Message.Text и сделать некоторую магию. Пришло ваше время здесь сиять; теперь вы можете разработать функции, которые делают вашего бота выдающимся.

Ниже приведен пример бота RapGeniusBot, который генерирует тексты рэп-музыки на основе Message.Text входящего обновления Update . Основная функция моего обработчика:

Для подробностей реализации каждой функции полный код RapGeniusBot доступен в моем репозитории.

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

Сосредоточьтесь на строках с 5 по 10. Здесь мы отправляем наше сообщение в чат, отправляя запрос POST на явную конечную точку / sendMessage для API Telegram. Для этого вам необходимо пройти аутентификацию с помощью токена бота , который BotFather предоставил вам во время создания бота.

Подведем итоги; Теперь у вас есть функция обработчика, которая выполняет всю обработку,

  1. Ваш обработчик декодирует входящие запросы Telegram,
  2. Ваш обработчик может получить доступ к полям Update , таким как Message.Text , для выполнения некоторого преобразования, например генерации тексты рэп-музыки на примере RapGeniusBot.
  3. Ваш обработчик в конечном итоге отправляет сообщение обратно в чат, который инициировал разговор.

Сейчас отличное время, чтобы добавить несколько тестов, чтобы убедиться, что ваш обработчик работает должным образом.Например, мы можем проверить, что наш обработчик правильно анализирует входящие запросы Telegram. Это довольно просто, используя пакет net / http / httpest в Go. Запишем наш тест в отдельный тестовый файл, например parse_update_test.go .

run go test в папке с тестовыми файлами для запуска теста

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

Отлично! Весь этот код прекрасно живет на нашей машине. Давайте развернем обработчик и сделаем вашего бота доступным в Telegram.
Не волнуйтесь; вы уже готовы на 95%. 😉

4. Разверните свой обработчик

Две возможности:

  1. У вас есть собственный сервер, и вы знаете, как настроить обработчик для прослушивания заданного порта. Вам также удобно настраивать сертификаты.
  2. Вы не особо разбираетесь в системном администраторе.

Если вы узнаете себя в 1., Telegram предлагает подробную документацию о том, как настроить веб-перехватчик.

Я сосредоточусь на варианте 2. Мы будем использовать облачного провайдера, чтобы развернуть наш обработчик как услугу, то есть вам выставят счет только тогда, когда ваш обработчик действительно использует ресурсы. Учитывая характер механизма push-уведомления о веб-перехватчике, с вас не взимается плата, если ваш бот не используется, что хорошо по сравнению с постоянно включенным сервером. Недостатком является потенциально более высокое время отклика. Когда обработчик вызывается впервые за некоторое время, холодный запуск может занять несколько секунд.

Все основные облачные провайдеры предоставляют услугу «функция как услуга»: облачная функция в Google Cloud, AWS Lambda и функция Azure в MS Azure.
Выберите оружие по своему усмотрению. Я продолжаю использовать облачную функцию Google.

В консоли Google Cloud сначала выберите проект (создайте его, если вы новичок в Google Cloud). Затем нажмите в верхнем левом меню гамбургера и найдите Cloud Function .

Найдите функцию Cloud в разделе вычислений.

Затем нажмите кнопку «Создать функцию».

Теперь давайте завершим некоторую информацию о конфигурации;

  • Имя - задает явное имя для вашей функции, например, телеграмма-бот-обработчик .
  • Память выделена - советую поэкспериментировать, начиная с наименьшего значения 128 MiB должно хватить. Go не требует памяти, особенно если вы делаете всего несколько запросов в обработчике или выполняете простую обработку строк. Кроме того, вполне вероятно, что ваш обработчик - всего лишь посредник, передающий запрос другому сервису.В примере RapGeniusBot мой обработчик вызывает другой API, чтобы получить тексты песен на основе текста сообщения для обработки.
  • Триггер - не забудьте выбрать HTTP .
  • Аутентификация - Установите флажок «Разрешить вызовы без аутентификации». Это позволит Telegram отправлять обновление вашему обработчику через веб-перехватчик.

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

  • Исходный код - Выберите «Встроенный редактор»
  • Время выполнения - Выберите среду выполнения, соответствующую вашему коду Go.
  • Function.go - Скопируйте весь свой код обработчика (не забудьте про импорт) и вставьте его в текстовое поле Function.go.
  • Функция для выполнения - Напишите функцию, которую серверы Google должны вызывать при вызове вашей облачной функции. Вот ваш обработчик, например, HandleTelegramWebHook .

Теперь щелкните «Переменные среды, сеть, таймауты и многое другое».

Появится набор параметров, настройте Регион и Тайм-аут в соответствии с любыми вашими требованиями.

  • Настройки Ingress - Убедитесь, что установлен флажок «Разрешить весь трафик», чтобы серверы Telegram могли получить доступ к вашему обработчику.

И последнее, но не менее важное: установите переменную среды, которая нужна вашему коду. Вам нужно, по крайней мере, установить TELEGRAM_BOT_TOKEN , которое BotFather дал вам в части 1.

Нажмите «создать». Ваша облачная функция будет готова через несколько секунд.

Теперь перейдите на вкладку «Триггер» вновь созданной облачной функции и скопируйте URL-адрес для вызова вашей функции.Мы скажем Telegram отправить Update на этот URL-адрес при определении веб-перехватчика на следующем шаге.

Вот и все; вы закончили со своим облачным провайдером! Осталось только настроить URL-адрес веб-перехватчика вашего бота Telegram.

5. Установите веб-перехватчик с помощью Telegram API

Последний шаг!

Теперь, когда мы создали нашу облачную функцию, нам нужно зарегистрировать ее URL-адрес в качестве URL-адреса веб-перехватчика Telegram. Таким образом, Telegram может отправить Update для нашего бота по URL-адресу, который прослушивает наш обработчик .

Это 3 строки в вашей оболочке.

В ответ от Telegram API вы получите красивый {«ok»: true, «result»: true, «description»: «Webhook was set»}.

6. Наслаждайтесь.

Поздравляем, ваш бот готов! 🔥👏

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

.

Об авторе

alexxlab administrator

Оставить ответ