Как написать программу бота

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

Сразу предупредим. Обзор инструментов мы построили от простого к сложному — вряд ли разработчиков, продвинутых в области разговорных интерфейсов, ждут откровения в главе про конструкторы ботов (зато будет полезно почитать про фреймворки). В материале собраны способы для всех: новичков в разговорном ИИ, предпринимателей и хобби-девелоперов, инди-разработчиков и тех, кто решает серьезные девелоперские задачи для бизнеса. Вот краткое описание каждого способа: 

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

  2. Конструкторы ботов. Легкий способ создать бота в визуальном интерфейсе по собственному сценарию и адаптировать его под требования проекта. Все это — без знаний кода. Подходит для предпринимателей, малого и среднего бизнеса. 

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

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

Оглавление

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

  1. Готовые боты

    • Что это такое 

    • В чем преимущества

    • Какие недостатки у готовых ботов

    • Solution Store от Just AI

  2. Конструкторы

    • Что это такое 

    • Чем отличаются от готовых ботов

    • Что можно создать в конструкторе

    • Какие общие преимущества у конструкторов

    • На что обращать внимание при выборе

    • Aimylogic от Just AI

  3. Диалоговые платформы

    • Чем отличаются от конструкторов

    • Что можно создать в платформах

    • В чем отличия и на что обращать внимание при выборе

    • JAICP от Just AI 

  4. Фреймворки

    • Что это такое

    • Чем отличаются от платформ

    • Что можно создать с использованием фреймворков

    • Кому интересны фреймворки

    • Какие преимущества перед платформами

    • На что обращать внимание при выборе фреймворка

    • JAICF от Just AI 

  5. Подводим итоги

Готовые боты

Что это такое 

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

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

В чем преимущества

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

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

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

В чем минусы

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

Простые боты. Не во всех случаях хватает функциональности кнопочного бота без ИИ. 

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

Готовые решения в Solution Store

Just AI создали маркетплейс готовых решений, где можно найти бота для узких задач и сфер: ЖКХ и ритейла, e-commerce, финтеха и других. Сейчас в маркетплейсе 20 решений от Just AI и сторонних разработчиков, их список постоянно пополняется. Плюсы солюшенов в том, что для каждого такого решения готовы словари синонимов, основные интенты, логика сценария, интеграции с технологиями, отчетами аналитики и каналами. Остается только адаптировать содержание веток сценария, развернуть, интегрировать и запустить решение.

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

Конструкторы ботов

Что это такое 

Это наборы готовых инструментов «из коробки», которые позволяют создавать и настраивать ботов без технических навыков и разработчиков — любой пользователь может прийти в конструктор и разработать в нем виртуального помощника своими руками. Конструкторы бывают low-code и no-code. 

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

Чем отличаются от готовых ботов

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

Что можно создать в конструкторе

  • Различных чат-ботов: от FAQ-бота до бота для лидогенерации  

  • Несложных ботов для обзвонов и IVR (входящей телефонии) 

  • Навыки для голосовых ассистентов, например, Алисы от Яндекса или Маруси от VK

Какие общие преимущества у конструкторов

Конструкторы хороши тем, что это решение «из коробки» — не нужно самостоятельно прописывать интеграции и думать о хостинге (все хранится в окружениях поставщика решения), реализации логики. Об этом уже позаботились разработчики сервисов. И важно, что сценарий продумывается и прописывается самостоятельно: можно учесть все необходимые моменты для проведения успешных диалогов с пользователями. 

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

На что обращать внимание при выборе

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

No-code/low-code. Настраивается ли все через визуальные блоки или есть возможность прокачивать бота с помощью кода: добавления условий и переменных, обращения к внешним серверам, прописыванием стейтов. 

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

Наличие NLU-сервиса. Что можно создать в конструкторе — только кнопочного бота или умного помощника, понимающего живую речь собеседника. 

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

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

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

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

Aimylogic от Just AI 

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

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

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

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

Искусственный интеллект. В конструктор встроен NLU, который позволяет обучать бота новым смыслам и фразам и разгрузить операторов: в 80% случаев виртуальный помощник сможет самостоятельно решить вопросы пользователей. 

Не требует знаний кода. В Aimylogic приходят много пользователей, которые никогда не сталкивались с разработкой. Это low-code продукт: если хочется сделать бота мощнее, возможность разобраться в коде есть даже у новичка. Сама работа в визуальном интерфейсе интуитивно понятна. 

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

Статистика и аналитика. Конструктор позволяет оценить, сколько пользователей бросили диалог с ботом и сколько конверсий они совершили, какие фразы не смог распознать бот и как часто он привлекал оператора для решения вопросов. Это очень ценные данные: они помогают понять, где нужно доработать решение и как сделать бота полезнее. Результаты доступны в статистике и отчетах. А чтобы оценивать метрики детальнее, можно подключить Google Analytics или CRM-систему. 

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

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

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

Диалоговые платформы

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

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

Чем отличаются от конструкторов

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

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

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

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

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

Модульность также позволяет подключать любые собственные сервисы по API: собственную телефонию, собственный ASR и TTS, любую CRM-систему, любые текстовые каналы и собственную BI-систему.

Что можно создать в платформах

В платформе можно разработать бота почти любого уровня сложности. 3 самых распространенных решения: 

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

  • Голосовые ассистенты и навыки для них с разветвленной логикой и чит-чатом.

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

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

В чем отличия и на что обращать внимание при выборе

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

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

Языки программирования. Язык программирования, применяемый в платформе, также является важным критерием выбора. Так, в зависимости от вендора, сценарии можно разрабатывать на одном или нескольких общих языках программирования (Java, Javascript, Python, Kotlin) или только с помощью DSL. Вне зависимости от доступного языка очень ценно, когда внутри есть хорошие SDK и грамотные абстракции. 

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

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

JAICP от Just AI

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

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

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

Все для создания и развертывания сложного сценария. Логика сценария описывается с помощью JAICP DSL и вставок JavaScript, с которыми бот может обращаться к внешним системам, обрабатывать и синхронизировать данные, проводить вычисления и оставаться в контексте диалога.

Инструменты JAICP позволяют проводить расширенные автотесты, контролировать все изменения в коде и управлять ими с помощью Git, работать над решением большой командой одновременно. Если нужно больше возможностей — например, подключать произвольные библиотеки на Java, писать код на Kotlin с автодополнением в IDEA, — можно объединить инфраструктуру JAICP с бесплатным фреймворком JAICF. 

Фичи и инструменты для телефонии. В JAICP уже реализована полезная функциональность для создания продвинутых виртуальных телефонных операторов: 

  • настраиваемая логика совершения вызова: по расписанию и API-триггеру;

  • готовая логика перезвона: если пользователь просит перезвонить, бот самостоятельно перезвонит, когда абоненту будет удобно;

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

  • программируемая логика реакции на перебивания и активное слушание: бот замолчит и выслушает или продолжить произносить фразу;

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

  • аналитика эффективности телефонных кампаний и A/B-эксперименты. 

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

Готовые интеграции. Для публикации бота уже подключены 30 каналов: от мессенджеров и соцсетей до CRM-систем. Это удобно: не нужно настраивать интеграции с нуля. Но если нужно, подключаться к внешним сервисам можно по API.

Производительная инфраструктура в JAICP или в контуре. Несколько конфигураций оборудования для соответствия схеме нагрузки. Адаптивность к высоким нагрузкам ~400 rps и 10M MAU. Горизонтальное масштабирование и балансировка нагрузки и 152-ФЗ.

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

Фреймворки

Что это такое 

Фреймворки — самый популярный способ создания виртуальных ассистентов среди разработчиков. Это набор инструментов с открытым исходным кодом и высокой степенью контроля над разработкой, который интегрируется с NLU для создания сложного сценария в рамках собственного разговорного решения и решения разных NLP-задач. Conversational AI фреймворки доступны для разных языков программирования. Так, например, Deep Pavlov — это фреймворк для Python, JAICF — для Kotlin, а Jovo — для TypeScript.

Чем отличаются от платформ

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

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

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

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

Что можно создать с помощью фреймворка

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

Кому интересно решение

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

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

Какие общие преимущества у фреймворков

  1. Базовые конструкции бота уже описаны вендором — модель диалога, правила перехода между стейтами, интеграции с NLU и т.д. Разработчику остается только описать логику самого бота.

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

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

На что обращать внимание при выборе фреймворка

При выборе фреймворка важны все детали: какие компоненты нужно подключить и какие требования предъявляются к производительности готового проекта. Убедитесь, что вы выбрали фреймворк от компании, которая имеет собственное ядро NLU, потому что это самый сложный и важный компонент во фреймворках для разговорного AI. 

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

Перед началом работы определите, какая команда будет работать над проектом. Например, если в штате разработчики на Python или JavaScript, то целесообразно искать удобное для них решение. 

Rasa Open Source

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

На базе Rasa можно создавать контекстных ассистентов для Facebook Messenger, Slack, Google Hangouts, Webex Teams, Microsoft Bot Framework, Rocket.Chat, Mattermost, Telegram, Twilio, а также собственные разговорные каналы и голосовые навыки для  Алисы, Alexa и Google Assistant. 

Deep Pavlov 

Фреймворк с открытым исходным кодом, построенный на Python. На его базе можно создавать навыки чат-ботов с NLU, поддержкой множественных состояний диалога и контекста. Deep Pavlov имеет отличный набор готовых deep learning NLU-моделей для русского языка. На данный момент платформа не имеет поддержки каналов, но может использоваться  для создания практически любых разговорных решений и чат-ботов, хотя и требует большой настройки и дополнительной работы.

Jovo

Фреймворк Jovo построен на TypeScript. Он позволяет создавать голосовые навыки, которые работают на разных устройствах и платформах, включая Alexa от Amazon, Google Ассистента, мобильные телефоны, Raspberry Pi и др.

BotPress

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

JAICF от Just AI

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

Фреймворк JAICF в отличие от конструкторов дает возможность разрабатывать сложные контекстно-зависимые диалоги и сценарии для голосовых интерфейсов. Он предоставляет свободный доступ ко всем профессиональным инструментам, необходимым для разработки полноценной разговорной среды — готовой диалоговой машине, библиотекам, NLU-движкам (встроенному NLU-сервису CAILA и внешним движкам вроде Dialogflow или Rasa), системам аналитики и хранения данных, готовым интеграциям с мессенджерами и экосистемами голосовых ассистентов Алиса, Alexa, Google Assistant, Facebook Messenger, Slack, Telegram и не только. 

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

Кроссплатформенность в JAICF позволяет любому разработчику на Kotlin создавать и запускать кроссплатформенные агенты корпоративного уровня, а это означает, что один сценарий JAICF может работать одновременно в нескольких каналам, например, в Amazon Alexa, Google Actions, Facebook Messenger и других.

Модульное тестирование позволяет минимизировать количество ошибок с помощью автоматизированного тестирования сценариев диалога. JAICF использует фреймворки привычного unit-тестирования и возможности Kotlin для удобного и лаконичного DSL.

Подводим итоги

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

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

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

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

Уровень: начинающий

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

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

Иногда такое общение выглядит как общение с человеком. Может даже показаться, что там работает искусственный интеллект — и иногда так действительно бывает. Но часто всё проще: это алгоритм, который умеет распознавать некоторые ваши слова и давать ответы по заранее заготовленным шаблонам. Чем алгоритм более разветвлённый, тем естественнее и полезнее бот.

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

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

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

Чтобы сделать что-то на JavaScript, нужно открыть консоль. Почти во всех современных браузерах это делается сочетанием клавиш Shift + Ctrl + J или Cmd + Alt + J. Справа или снизу появится дополнительное окно, в котором уже будет что-то происходить:

Чат-бот будет создан через консоль

Если у вас не открылась консоль, зайдите в верхнее меню и поищите слово «Консоль». Обычно этот пункт прячется в разделе «Инструменты разработчика».

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

Первая строка

В консоли можно не только писать код, но и выводить туда результаты. Давайте для начала сделаем самую простую программу, которая отобразит в консоли слово «Привет!». Для этого используем команду console.log('Привет!');

Вставим её в консоль и нажмём Enter:

Чат-бот: пишем первую строку кода

Поздравляем, вы только что написали свою первую программу для компьютера! Она очень простая: компьютер всего лишь говорит «Привет!». Но оцените момент: это вы его научили так говорить. Попробуйте научить его и другим словам.

Если написать несколько команд, получим сообщение из нескольких строк:

console.log('Привет!');
console.log('Я — ваш компьютер.');

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

Переменные

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

Чтобы дать понять компьютеру, что у нас сейчас будет переменная, нужно сказать ему слово var, после которого вписать название переменной — так нам проще к ней обращаться. Например, следующая строка создаст переменную name и положит в неё слово «Код»:

var name = 'Код';

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

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

console.log(name);

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

console.log(Date());

Но это мы всё смотрим во внутренности компьютера. А нам нужно спросить что-то у пользователя. Чтобы мы могли ввести новые данные в нашу программу, используем команду prompt()

var name = prompt('Как вас зовут?');

Вставьте в консоль команду var name = prompt('Как вас зовут?'); и посмотрите, что произойдёт. Компьютер выведет окно и будет ждать, пока вы внесёте туда своё имя. Интерфейс выглядит красиво: давайте в диалоге общаться с компьютером не через консоль, а через такие появляющиеся окошки. Для этого напишем новые команды:

alert('Привет! Я — ваш компьютер.');
var name = prompt('Как вас зовут?');

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

alert('Привет, ' + name + ', приятно познакомиться!');

Чтобы вывести осмысленную фразу, мы взяли начало ‘Привет, ‘, затем с помощью плюсика соединили со значением переменной name, которая хранит наше имя, а потом ещё одним плюсиком добавили к фразе концовку. Чтобы компьютер знал, что мы хотим вывести на экран текст, а не числа, используются кавычки. Компьютер воспринимает как текст то, что внутри кавычек. И выводит точно в том виде, в котором написано.

Расчёт дня рождения

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

alert('Привет! Я — ваш компьютер.');
var name = prompt('Как вас зовут?');
alert('Отлично, ' + name + ', приятно познакомиться!');
var hobby = prompt('Скажите, ' + name + ', а какое у вас хобби?');
alert('Действительно, ' + hobby + ' — интересное занятие! А я больше всего люблю вычисления и алгоритмы.');
var d = prompt(name + ', у меня для вас сюрприз! Напишите свой день рождения в формате месяц-день (например, 05-23)');
//Началась магия, где мы берём текущую дату и сравниваем с тем, что вы ввели.
//Кстати, это — комментарий, он не влияет на ход программы. 🙂
var current_date = new Date();
var my_date = new Date((d + '-' + (current_date.getFullYear() + 1)));
var dayZ = Math.abs(((Date.parse(my_date) - Date.parse(current_date)) / (1000 * 3600 * 24)) % 365);
var result = dayZ.toFixed(0);
//Магия закончилась, в переменной result у нас теперь хранится количество дней.
alert('Знаете, сколько дней осталось до вашего дня рождения? ' + result + '!');
alert('Спасибо за общение, ' + name + ', ещё увидимся!');

Обратите внимание: у нас появился новый вопрос и новая переменная hobby, в которой хранится информация об увлечении. А ещё — комментарии, которых можно добавлять сколько угодно. JavaScript не обращает внимания на то, что написано после двух косых черт:

//это комментарий

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

Что ещё посмотреть

Вот кое-что, что может вам пригодиться при создании первого чат-бота.

performance.now() — эта команда возвращает время в миллисекундах с момента открытия текущей страницы. Можно поделить на 1 000, и вы узнаете, сколько секунд вы сидите на какой-то странице. Если поделить на 60 000 — сколько минут.

setTimeout() — позволяет выполнить любой код через определённое время. Например, вы можете задать вопрос и предоставить ровно минуту на размышление, после чего появится окно для ответа.

setInterval() —  то же самое, что и предыдущее, но выполнение кода повторяется с равномерным интервалом, например раз в 5 минут. Если вы хотите научить чат-бота, чтобы он раз в час напоминал попить воды, эта команда — то, что нужно.

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

#Руководства

  • 14 сен 2022

  • 0

Разбираемся, как написать чат-бота с помощью библиотеки aiogram. Весь код — внутри статьи.

Иллюстрация: Polina Vari для Skillbox Media

Антон Яценко

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

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

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

Для создания Telegram-ботов на Python существует несколько десятков библиотек. Они различаются популярностью, размером комьюнити и функциональностью. Рассмотрим самые популярные.

aiogram

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

python-telegram-bot

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

TeleBot

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

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

Для этого нам необходимо:

  • установить Python и настроить виртуальное окружение;
  • зарегистрировать бота в специальном Telegram-канале @BotFather;
  • установить библиотеку aiogram;
  • написать код эхо-бота, связав его по API с Telegram.

На macOS или Linux. Python установлен в эти операционные системы изначально. Чтобы проверить его наличие, откройте терминал и введите команду:

python --version

Если Python установлен, то терминал покажет его версию:

Скриншот: aiogram / Skillbox Media

На Windows требуется установка Python. Сделать это проще всего по нашей инструкции.

После установки и проверки Python требуется установить виртуальное окружение с помощью virtualenv. Это специальный инструмент, который позволяет изолировать друг от друга проекты в разработке, независимо устанавливая для них библиотеки и пакеты. Удобно, когда вы работаете над разными приложениями одновременно.

virtualenv устанавливается через терминал:

sudo pip3 install virtualenv

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

mkdir telegram_bot
cd telegram_bot

Команда mkdir создаст папку telegram_bot, а команда cd переведёт нас в неё. Теперь в этой директории будут храниться файлы проекта, связанные с нашим ботом.

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

virtualenv venv -p python3

Теперь его активируем. Если этого не сделать, то оно не будет работать.

source venv/bin/activate

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


Для создания бота необходимо воспользоваться Telegram и ботом @BotFather. Откройте мессенджер и введите название бота в поисковой строке:

Скриншот: aiogram / Skillbox Media

Открываем его, жмём кнопку «Запустить» и вводим команду /newbot:

Скриншот: aiogram / Skillbox Media

Теперь напишем название и юзернейм для нашего бота. Назовём его echo_skillbox_bot (теперь это имя занято, так что вам надо будет придумать своё). В ответ придёт наш токен, который мы будем использовать для подключения к API Telegram.

Скриншот: aiogram / Skillbox Media

Этот токен мы сохраняем — он потребуется нам в будущем.


Для установки aiogram воспользуемся менеджером пакетов pip. Вводим в терминал:

pip install aiogram

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


Писать код на Python лучше всего в IDE, а не в окне терминала. В проекте ниже мы будем использовать бесплатный редактор Visual Studio Code, но вы можете воспользоваться любым удобным для вас инструментом.

Откроем IDE и создадим файл main.py. Для этого проекта нам потребуется только он. Импортируем из aiogram нужные классы и модуль:

from aiogram import Bot, Dispatcher, executor, types

Разберёмся, что каждый из них делает. Начнём с классов:

  • Bot определяет, на какие команды от пользователя и каким способом отвечать;
  • Dispatcher позволяет отслеживать обновления;
  • Executor запускает бота и выполняет функции, которые следует выполнить.

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

Импортируем наш токен, который поможет коммуницировать с API Telegram:

API_TOKEN = '5602787567:AAGYv7NrSjwyW7qPs_yvu70C060zrcfZDbQ' #В одинарных кавычках размещаем токен, полученный от @BotFather.

Теперь необходимо инициализировать объекты bot и Dispatcher, передав первому наш токен. Если их не инициализировать, то код не будет работать.

bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)

Настроим приветственное окно для нового пользователя, которое будет появляться при нажатии команды /start. Для этого создаём message_handler и прописываем функцию ответа:

@dp.message_handler(commands=['start']) #Явно указываем в декораторе, на какую команду реагируем. 
async def send_welcome(message: types.Message):
   await message.reply("Привет!nЯ Эхо-бот от Skillbox!nОтправь мне любое сообщение, а я тебе обязательно отвечу.") #Так как код работает асинхронно, то обязательно пишем await.

Теперь при нажатии на кнопку Начать или при вводе команды /start пользователь будет получать от бота приветственное сообщение.

Разберёмся в коде:

  • message_handler — это декоратор, который реагирует на входящие сообщения и содержит в себе функцию ответа. Декоратор — это «обёртка» вокруг функций, позволяющая влиять на их работу без изменения кода самих функций. В нашем случае мы управляем функцией, считая команды пользователя;
  • commands=[‘start’] — это команда, которая связана с декоратором и запускает вложенную в него функцию;
  • async def send_welcome — создаёт асинхронную функцию, которая принимает в себя сообщение пользователя message, определяемое через тип Message. Саму функцию можно назвать любым образом. Мы выбрали send_welcome, чтобы название было понятным и осмысленным;
  • await message.reply — определяет ответ пользователя, используя await из-за асинхронности работы библиотеки.

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

@dp.message_handler() #Создаём новое событие, которое запускается в ответ на любой текст, введённый пользователем.
async def echo(message: types.Message): #Создаём функцию с простой задачей — отправить обратно тот же текст, что ввёл пользователь.
   await message.answer(message.text)

Так как бот должен реагировать на любое текстовое сообщение от пользователя, то скобки в @dp.message_handler мы оставляем пустыми. Параметр message не отличается от использованного в предыдущих шагах.

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

Остаётся последний этап — настроить получение сообщений от сервера в Telegram. Если этого не сделать, то мы не получим ответы бота. Реализовать получение новых сообщений можно с помощью поллинга. Он работает очень просто — метод start_polling опрашивает сервер, проверяя на нём обновления. Если они есть, то они приходят в Telegram. Для включения поллинга необходимо добавить две строчки:

if __name__ == '__main__':
   executor.start_polling(dp, skip_updates=True)

Всё, теперь код нашего бота полностью готов:

from aiogram import Bot, Dispatcher, executor, types
 
API_TOKEN = '5602787567:AAGYv7NrSjwyW7qPs_yvu70C060zrcfZDbQ'
 
bot = Bot(token=API_TOKEN)
dp = Dispatcher(bot)
 
@dp.message_handler(commands=['start'])
async def send_welcome(message: types.Message):
   await message.reply("Привет!nЯ Эхо-бот от Skillbox!nОтправь мне любое сообщение, а я тебе обязательно отвечу.")
 
@dp.message_handler()
async def echo(message: types.Message):
   await message.answer(message.text)
 
if __name__ == '__main__':
   executor.start_polling(dp, skip_updates=True)

Сохраняем его в нашей папке telegram_bot под именем main.py.


Для запуска бота нам необходим терминал. Открываем его и переходим в нашу папку telegram_bot. После этого вводим команду:

python3 main.py

В ответ терминал пришлёт сообщение, что обновления успешно пропущены:

Скриншот: aiogram / Skillbox Media

Находим нашего бота в Telegram по имени @echo_skillbox_bot и запускаем его, нажав на кнопку Начать. В ответ на это или на команду /start нам придёт приветственное сообщение:

Скриншот: aiogram / Skillbox Media

Попробуем написать что-то:

Скриншот: aiogram / Skillbox Media

Как мы видим — всё работает. Бот возвращает нам наши сообщения.

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

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

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

Участвовать

Научитесь: Профессия Python-разработчик
Узнать больше

Вы можете самостоятельно создать бота в Telegram без программирования. Повторите действия по инструкции и бесплатно запустите своего первого чат-бота уже через 15 минут.

Создадим бота, который будет приветствовать, задавать вопрос с вариантами ответов и реагировать на нажатие на кнопок.

Шаг 1. Создайте аккаунт разработчика

1. Зарегистрируйтесь на botmother.com с помощью электронной почты (на нее придет письмо с подтверждением) или войдите через Google.

2. Нажмите кнопку «Создать нового бота» (справа внизу).

3. Выберите «Пустой бот».

Перед вами откроется конструктор— это место, где можно разрабатывать бота и добавлять функции.

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

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

На каждый экран можно добавлять компоненты— это функции и действия бота (например, отправление текста, картинок, кнопок и т.д.).

Все компоненты расположены на вкладке справа.

Шаг 2. Создайте приветствие

1. На вкладке «Компоненты» нажмите на компонент «Сообщение» и перетяните его на экран.

2. Напишите любой текст. Например, «Привет! Это мой первый бот».

3. Нажмите зеленую кнопку «Сохранить» (справа внизу).

Шаг 3. Подключите бота к мессенджеру

В Telegram чат-боты создаются с помощью специального бота @BotFather. Через него можно управлять данными бота, добавить описание, аватар и т.д.

Создадим бота и придумаем ему название:

2. Напишите ему /newbot.

3. Придумайте и напишите название бота. Оно будет отображаться в контактах и чатах. Например, «Hello, bot».

4. Придумайте и напишите юзернейм. Он используется для упоминания бота и в ссылках. Юзернейм должен быть на латинице и обязательно заканчиваться на «bot». Например, «botmother_hello_bot».

Теперь нужно подключить бота в Telegram к вашему аккаунту разработчика:

2. Скопируйте токен бота.

3. Вернитесь в конструктор, найдите и откройте в меню слева раздел «Настройки».

4. Переключателем включите платформу Telegram.

5. Нажмите кнопку «Изменить».

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

7. Сохраните изменения.

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

1. Найдите в поиске Telegram своего бота по юзернейму.

2. Нажмите «Начать» (или «Start»). Бот должен отправить приветственное сообщение.

Отлично! Ваш бот умеет отправлять сообщение.

Шаг 4. Добавьте дополнительные функции

Усложним бота. Пусть он задает вопрос с вариантами ответов и присылает разные сообщения в зависимости от выбора пользователя.

Например:

Текст: Как дела?

Первая кнопка: Хорошо

Вторая кнопка: Плохо

Для этого добавим еще два экрана, кнопки и изображение:

1. Откройте конструктор.

2. Добавьте два новых экрана. Для этого нажмите кнопку «Добавить экран» дважды.

3. Сохраните изменения.

Можно изменить названия добавленных экранов двойным кликом:

1. Два раза кликните на названия экранов.

2. Отредактируй тексты. Например, «Экран Хорошо» и «Экран Плохо».

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

1. Переместите компонент «Кнопки» на «Стартовый экран».

2. Напишите текст. Например, «Как дела?».

3. Добавьте две кнопки.

4. Напишите тексты на кнопках. Например, «Экран Хорошо» и «Экран Плохо».

Каждая кнопка должна вести на определенный экран, который указывается в настройках кнопки:

1. Нажмите на первую кнопку.

2. В поле «Переход на экран» выберите экран «Экран Хорошо».

3. Нажмите на вторую кнопку.

4. Выберите другой экран — «Экран Плохо».

5. Сохраните изменения.

Итак, на «Стартовом экране» пользователь нажимает на кнопки и попадает на разные экраны. Нужно заполнить их контентом:

1. Переместите компонент «Изображение» на экран «Экран Хорошо».

2. Загрузите любую картинку или вставьте ссылку на изображение.

3. Сохраните изменения.

Теперь заполним следующий экран:

1. Переместите компонент «Сообщение» на экран «Экран Плохо».

2. Напишите текст. Например, «Не унывай, все будет хорошо!». Можно добавить эмодзи.

3. Сохраните изменения.

Все готово!

Шаг 5. Протестируйте бота

У нас получился такой сценарий: бот приветствует пользователя и задает вопрос с вариантами ответов; пользователь нажимает кнопку, и бот присылает определенное сообщение. Давайте протестируем!

1. Откройте своего бота.

2. Напишите команду /start.

3. Понажимайте на кнопки.

Поздравляем!

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

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

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

В данной статье будет рассказано о том, как написать простой бот на Python. А еще – рассмотрены особенности соответствующего ЯП, преимущества и недостатки упомянутого «виджета». Примеры будут приведены на основе Telegram. Здесь bot – это весьма распространенное явление.

Бот – это…

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

Переписка с таким ПО осуществляется непосредственно через чат. Клиент дает боту команды, которые он обрабатывает и выполняет в режиме 24/7. Ключевая задача “робота» – дать ответ на вопрос клиента, опираясь на заданную программу. С помощью оных удается экономить не только время, но и остальные ресурсы.

Умения

Бот Телеграмм умеет многое. Сегодня к спектру его навыков относят следующие моменты:

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

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

Преимущества и недостатки

Как и любое другое ПО, bot – это «виджет», который имеет ряд сильный и слабых сторон. Их предстоит учитывать каждому, кто хочет подключить соответствующего «помощника» в своем чате/диалоге.

Сильные стороны

К преимуществам ботов Телеграм относят:

  • круглосуточную помощь – функционирование bots прекратят только в случае аварий на серверах, которые случаются крайне редко;
  • удобство и простоту использования – для большинства команд достаточно выбрать из предложенного списка подходящую операцию;
  • мгновенное получение ответа;
  • отсутствие требований к мощности задействованного устройства – это связано с тем, что для работы ботов используются возможности сторонних серверов;
  • высокий уровень безопасности;
  • отсутствие необходимости инициализации дополнительного ПО для запуска рассматриваемого вида «помощника».

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

Слабые стороны

Минусы у такого ПО тоже есть, но они не слишком весомые:

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

Бот должен быть полезным, отвечать потребностям ЦА, а также целям владельца чата. Составить его удастся «с нуля» за 15-30 минут. Особенно если придерживаться определенного алгоритма действий.

Почему Питон

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

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

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

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

Составление софта

Bot – это просто и удобно. Телеграм позволяет внедрять и искать такие «виджеты» без особого труда. Хорошего бота удастся составить менее чем за час. Главное – придерживаться определенного алгоритма действий.

Принцип

Перед непосредственной разработкой необходимо разобраться в том, как все будет работать. Bot для «Телеги» функционирует по определенным принципам. Пример будет рассмотрен на компьютере и Telegram-клиенте.

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

  1. На компьютере есть интерпретатор Python. Также на устройство необходимо поставить сервер Телеграмма и клиент.
  2. Внутри интерпретатора будет функционировать программа-бот. Она будет отвечать за весь софт: в оной прописана логика и шаблоны, а также возможные операции.
  3. Внутри приложения, написанного через Питон, имеется библиотека, отвечающая за связь с сервером Telegram. В нее нужно вшить секретный ключ. Это поможет указать серверу клиента, что программа связана с конкретным ботом.
  4. Когда клиент с «Телегой» осуществляет запрос гороскопа, bot осуществляет выгрузку на сервер, а сервер – выводит результат на компьютер.
  5. Запрос будет проходить обработку через утилиту на Python, дает ответ на сервер Телеграмма.
  6. Сервер передает необходимый результат непосредственному пользователю.

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

Краткий план – пошагово

Чтобы bot Телеграм работал, можно представить процедуру его подключения так:

  1. Провести регистрацию нового бота в мессенджере.
  2. Установить Питон-библиотеку для работы с Telegram.
  3. Добавить библиотеку в программу с гороскопом.
  4. Научить bot реагировать на сообщения в пределах чата.
  5. Прописать там же кодификацию, которая отвечает за кнопки выбора знака зодиака.
  6. Сделать так, чтобы при клике по кнопке отображался гороскоп выбранного варианта.

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

Регистрация

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

  1. Открыть соответствующий мессенджер.
  2. При помощи командной строки найти @BotFather. Он несет ответ за регистрацию нового bot.
  3. Кликнуть по надписи Start, а также указать команду / newbot.
  4. Система задаст поочередно вопросы о названии бота и его ника. Имя должно быть уникальным. С первого раза установить его не всегда получается.

На этом первый этап подготовки завершен. Можно двигаться дальше.

Библиотека и ее инициализация

Следующий этап – это установка подходящей библиотеки Python. Работать с «Телегой» можно через telebot. Второй вариант – это инициализация Webhook. Первый вариант проще, поэтому заострим внимание на нем:

  1. Запустить командную строку от имени администратора на устройстве.
  2. Набрать команду pip install pytelegrambotapi.
  3. Подтвердить обработку операции.
  4. Чтобы приложение понимало бота, в самое начало кода требуется добавить: import telebot;
  5. Bot = telebot.TeleBot(«токен»);.
  6. Вместо слова «токен» вставить настоящий токен, выданный @BotFather.
  7. Открыть программу гороскопа и добавить ее.

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

Гороскоп программа

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

Сразу после формирования ПО можно приступить к следующему этапу настройки.

Реакции

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

@bot.message_handler(content_types=['text'])
def get_text_messages(message):
  if message.text == "Привет":
      bot.send_message(message.from_user.id, "Привет, сейчас я расскажу тебе гороскоп на сегодня.")
  elif message.text == "/help":
      bot.send_message(message.from_user.id, "Напиши Привет")
  else:
      bot.send_message(message.from_user.id, "Я тебя не понимаю. Напиши /help.")

Теперь нужно:

  • Добавить после метода строку типа: bot.polling(none_stop=True, interval=0).
  • После ее добавления у бота будет постоянно проверяться наличие новых сообщений.
  • Прописать код, который предполагает работу с кнопками. Сначала осуществляется вывод всех знаков зодиака. При клике по конкретной – отображается гороскоп оного.

  • Добавить обработчик кнопок. Он будет реагировать на слово zodiac. При написании оного в программе отобразится случайный текст:
# Обработчик нажатий на кнопки
@bot.callback_query_handler(func=lambda call: True)
def callback_worker(call):
# Если нажали на одну из 12 кнопок — выводим гороскоп
if call.data == "zodiac": 
# Формируем гороскоп
msg = random.choice(first) + ' ' + random.choice(second) + ' ' + random.choice(second_add) + ' ' + random.choice(third)
# Отправляем текст в Телеграм
bot.send_message(call.message.chat.id, msg)
  • Можно убрать кодификацию, которая ранее отвечала за вывод знаков зодиака в консоли. После очистки получится приложение:


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

Команды управления

«Помощник» имеет разные функции и команды. Они пишутся через знак «слеш» («/») прямо в сообщении чата. Вот основные операции:

  • /start – начать работу помощника;
  • /help – вывод помощи на экран;
  • /settings – открыть настройки.

Некоторые подобные «дополнения» способны понимать команды на русском языке. Пример – запрос у робота Антона, который «подрабатывает» в Гидрометцентре. Если при общении с ним прописать «Погода Калининград», будет выведен соответствующий результат.

Почему «молчит»

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

  1. Проблемы и неполадки на сервере. Пример – сбой или полный отказ оного от функционирования.
  2. Ошибки при написании кодификации. Распространенное явление среди новичков.
  3. Ввод команды, которую Телеграм бот на Python не понимает. В этом случае можно воспользоваться Google для поиска подходящих операций и их форматов.

Иногда помогает полное отключение и перезапуск «помощника».

Как быстро освоить Python

Питон и его возможности можно выучить в ВУЗе, техникуме или самостоятельно поисках материалы в Сети. Вот видео по боту в «Телеге». Самообразование – один из лучших, но долгих методов обучения.

А чтобы надписи типа examples, def get, main() и другие не доставляли хлопот, стоит пройти дистанционные курсы. Их преимущества:

  1. Доступность. Обучение можно проводить в любом месте и в любое время, имя под рукой интернет.
  2. Разнообразие направлений. Есть предложения для новичков и опытных программеров.
  3. Срок обучения – до 12 месяцев. За это время пользователь сможет освоить даже несколько направлений.
  4. Хорошо продуманная программа, подпитанная практикой и кураторством опытных разработчиков.

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

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

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

  1. Настройка
  2. Hello, bot!
  3. Docker
  4. Деплой на AWS
  5. Заключение

Настройка

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

  • свой токен;
  • адрес Telegram API (https://api.telegram.org/bot);
  • ссылку на документацию.

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

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

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

Установка Python

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

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

Установка pip

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

$ sudo apt-get install python-pip

Установка aiogram

Установить данный фреймворк для Telegram Bot API с помощью pip:

pip install aiogram

Hello, bot!

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

from aiogram import Bot, types
from aiogram.dispatcher import Dispatcher
from aiogram.utils import executor
TOKEN = "ваш токен от бота здесь"
bot = Bot(token=TOKEN)
dp = Dispatcher(bot)

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

@dp.message_handler(commands=['start', 'help'])
async def send_welcome(msg: types.Message):
    await msg.reply_to_message(f‘Я бот. Приятно познакомиться,
                               {msg.from_user.first_name}’)

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

@dp.message_handler(content_types=['text'])
async def get_text_messages(msg: types.Message):
   if msg.text.lower() == 'привет':
       await msg.answer('Привет!')
   else:
       await msg.answer('Не понимаю, что это значит.')

Запускаем Telegram бота, написанного на Python, следующим образом:

if __name__ == '__main__':
   executor.start_polling(dp)

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

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

Docker

Сейчас мало кто не слышал про Docker, но если вдруг не слышали — вот хорошая статья. Для нашего проекта потребуется самый простой Dockerfile:

FROM python:3.8
# set work directory
WORKDIR /usr/src/app/
# copy project
COPY . /usr/src/app/
# install dependencies
RUN pip install --user aiogram
# run app
CMD ["python", "bot.py"]

Каталог проекта должны при этом содержать следующие файлы:

  • bot.py;
  • Dockerfile.

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

docker build -t my_app
docker run -d my_app

my_app — это просто название нашего контейнера, вместо которого можно использовать другое имя.

-d — специальный флаг, который запускает контейнер в фоне и позволяет дальше работать в терминале. Это называется detached mode.

Деплой на AWS

Прежде всего нам понадобится аккаунт на Docker Hub. Это аналог GitHub, только не с исходниками кода, а с уже созданными контейнерами. Работа с Docker Hub выглядит достаточно просто:

  1. Локально или с помощью пайплайнов собрали контейнер.
  2. Загрузили его на докер хаб.
  3. В любом удобном месте скачали его. Это может быть локальная машина, VPS сервер или облачный провайдер по типу AWS.
  4. Запустили.

Пройдёмся по этим шагам. Везде, где указано <docker_hub_username>, надо вставлять свой юзернейм, использованный при регистрации на докерхабе. Если это ваша первая публикация на докерхаб, для начала потребуется залогиниться с помощью docker login.

Билдим контейнер:

docker build -t <docker_hub_username>/my_app

Загружаем его на докерхаб:

docker push <docker_hub_username>/my_app

Для проверки успешности загрузки можете запустить контейнер из Docker Hub с помощью команды:

docker run -d <docker_hub_username>/my_app

Далее загрузим наш контейнер в AWS Elastic Beanstalk. Для этого потребуется аккаунт на AWS. Если его нет, необходимо зарегистрироваться. Вас попросят ввести данные карты для верификации, но переживать не стоит, ведь мы воспользуемся бесплатным годовым триалом. Чтобы поиграться, этого более чем достаточно, а вот если вы захотите вывести проект в продакшен, следует перейти на VPS — это даст больше контроля и гибкости.

  • Переходим в Elastic Beanstalk, на вкладку Applications, и создаём новое приложение:

Elastic Beanstalk вкладка Applications

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

Называем приложение в Elastic Beanstalk

  • Создаём для приложения environment:

environment для будущего Telegram-бота

  • Выбираем Worker environment:

Worker environment для будущего Telegram-бота

  • В качестве платформы выбираем Docker:

Docker для Telegram-бота на Python

  • В пункте Application code нужно загрузить JSON-файл с конфигурацией Docker-образа. Сам файл:
Dockerrun.aws.json
{
 "AWSEBDockerrunVersion": "1",
 "Image": {
   "Name": "<docker_hub_username>/my_app",
   "Update": "true"
 },
"Ports": [
 {
   "ContainerPort": 5000,
   "HostPort": 8000
 }
]
}

Application code

  • Создаём окружение:

Создаём окружение

  • AWS начинает создавать окружение, просто ждём завершения процесса:

AWS начинает создавать окружение

  • Если всё прошло успешно, вы увидите индикатор успешного запуска приложения:

Docker для Телеграм бота

Проверяем работу нашего Telegram bot:

Проверка Телеграм бота

Успех!

Заключение

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

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

Кстати, в телеграмме есть аж целых два типа клавиатур:

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

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

В «настоящих проектах» не обойтись без базы данных. Тут на помощь приходит docker-compose, который позволяет объединить несколько контейнеров в один сервис. Таким образом, например, можно создать приложение и положить его в контейнер, а базу данных, как отдельный сервис, поместить в другой контейнер, и с помощью docker-compose наладить между ними связь.

Также для более серьёзной разработки лучше использовать выделенный виртуальный сервер (VPS): он даёт гораздо больше гибкости и свободы, чем тот же AWS. А самое главное, он более приближён к «боевой» разработке. Схема работы тут будет даже проще, чем с AWS: вам просто нужно установить Docker, спуллить образ с Docker Hub и запустить его.

Понравилась статья? Поделить с друзьями:
  • Как написать программу антивирус
  • Как написать программу jar
  • Как написать программу hello world на python
  • Как написать программу 1000 7 на питоне
  • Как написать программу 1000 7 на паскале