Как написать бота для компьютера

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

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

  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-разработчик
Узнать больше

               Итак в этой статье я продемонстрирую как создать простого бота основанного на визуальном поиске объектов на экране. Преимуществом данного метода является «незаметность» для различных систем защиты от ботов. Для написания бота мы естественно будем использовать специализированную среду для разработки ботов NOMAD BoT. Если боты создаются для того чтобы сэкономить ваше время на совершение однообразных рутинных действий, то NOMAD создан для того, чтобы сэкономить ваше время при написании бота.  В сравнении с написанием ботов на неспециализированных средах программирования или на не очень специализированных разработка на NOMAD может происходить в десятки, а то и в сотни раз быстрее. (т.к. для начала вам еще придется разработать инструменты обнаружения объектов, которые в NOMAD  уже встроены готовые). Скачать дистрибутив NOMAD с уже установленным ботом из этой статьи вы можете по этой ссылке (внимание! настройки программы в дистрибутиве рассчитаны на установку его в папку по умолчанию, если вы устанавливаете его в другое место, то измените пути к базе и конструктору с проигрывателем!)

Управлять многими — то же, что управлять немногими. Дело в организации.

Сунь Цзы

           Нашей задачей сейчас является демонстрация того, как делается бот программа, а потому для автоматизации мы выберем что-нибудь простое и в то же время всем доступное, например, Калькулятор. Конечно это не онлайн игра, но поверьте, создание бота для онлайн игры ничем не отличается. (внимание пример работает в Windows 8 и Windows 7, причем калькулятор должен выглядеть как на скриншоте, который есть ниже по тексту, т.е. например, в Windows XP калькулятор называется и выглядит иначе, и потому там бот работать не будет)

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

  1. Сформулировать для себя задачу. Каких целей должен достигать наш бот. 
  2. Какие действия он должен выполнять для этого?
  3. Исходя из задачи определить какие объекты он должен видеть,  и каким образом, и на какие события реагировать для достижения целей описанных в пункте 1.
  4. Создание алгоритма.
  5. Программирование.

         Задачей нашего бота будет бесконечно складывать  на калькуляторе 2 числа 59 и 3.

         Для достижения нашей цели нам необходимо, чтобы наша программа нажимала на кнопки 5 и 9 калькулятора, а в случае успеха на кнопку + и кнопку 3 и затем кнопку =

         Следовательно эти объекты мы и должны будем искать на изображении, а затем тыкать в них мышью. Также мы будем анализировать число 59 и число 0 в поле результата, а также кнопку CE, для того чтобы сбросить вычисления на 0 перед началом очередной итерации.

          Итак, наш алгоритм: В бесконечном цикле сначала ищем и жмем мышью на кнопку 5, и на кнопку 9. В случае успеха делаем паузу 3 секунды (чтобы успеть насладиться результатом). Затем проверяем есть ли у нас изображение числа 59, если есть то  находим и кликаем мышью на кнопки + и 3 калькулятора, если эти операции также выполнены успешно, то находим и кликаем по кнопке = калькулятора. После чего спим 5 секунд. Затем проверяем, если в поле результата нет картинки 0, значит необходимо нажать кнопку CE, чтобы сбросить результаты предыдущих вычислений.  После чего итерация повторяется. При нажатии кнопки Esc программа останавливается.

Продемонстрируем код программы которая у нас получилась:

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

Procedure StartOnClick();

begin

     while (getasynckeystate($1B) = 0) do //цикл продолжается пока не нажмут Esc++

     begin

          if five.MouseClick(‘l’) and nine.MouseClick(‘l’) then //если успешно нажали пять и 9 то

          begin

               sleep(3000); //спим 3 секунды

               if fiftynine.FindPicture then //если нашли 59, то прибавим к ним 3:

               begin

                 if plus.MouseClick(‘l’) and three.MouseClick(‘l’) then //если получилось нажать плюс 3, то жмем на равно

                    equal.MouseClick(‘l’);

               end;

          end;

          sleep(5000); //спим 5 секунд

          if not zero.FindPicture then //если на табло нет нуля

             CE.MouseClick(‘l’); //то жмем CE

          Application.ProcessMessages;//принудительно обрабатывает

             //сообщения пришедшие в окно за время работы, например

             //сообщение о нажатии клавиши Esc. Если не вызывать то

             //программа может «подвисать», плохо реагировать на нажатия Esc и т.п.

     end; //цикл продолжается пока не нажмут Esc —

     ShowMessage(‘Программа остановлена!’);

end;

            Тут мы забежали немного вперед, написав сразу код, т.к. в NOMAD сначала необходимо создать шаблоны изображений которые мы будем искать. Так если посмотреть в код, то можно увидеть следующие записи:  five,nine,fiftynine,plus,three,equal,zero,CE — что это? а это собственно и есть те шаблоны, в NOMAD с ними можно работать из кода как с объектами, т.е. пишем имя объекта в коде и вызываем его метод, например: FindPicture — найти изображение шаблона, MouseClick(‘l’) — найти изображение шаблона и кликнуть левой кнопкой мыши по нему. Для того чтобы подробно изучить возможности и функции NOMAD рекомендую обратиться к документации. А сейчас я в кратце опишу как нам создать недостающие шаблоны:

Во первых создадим базу данных, для этого в Launcher нажмем кнопку ADD, в открывшимся окне заполним в первом поле имя базы данных (например Калькулятор), и во втором поле укажем каталог где мы хотим хранить все что мы напрограммировали. Т.е. собственно исходник нашей программы, или иными словами базу данных. Далее жмем кнопку Save и в списке у нас должна появится запись. Выбираем ее и  жмем кнопку Constructor.

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

ObjectTree

На пункте выделенном на картинке голубым цветом жмем правой кнопкой мыши и выбираем пункт меню «добавить конвеер скриншотов». В появившемся окошке указываем его имя — «Calc». И нажимаем кнопку Input. После чего объект с таким именем должен появиться в дереве объектов в разделе ScreenShotPipe. Найдем его там и кликнем на нем левой кнопкой мыши. В левой части программы появится окошко следующего вида (свойства могут идти в другом порядке):

CalcIO

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

 В третьих запустим калькулятор и сделаем его снимок, для того чтобы сделать снимок необходимо нажать кнопку ScreenShot  в левом верхнем углу Конструктора. После этого у нас появится окно TV со снимком экрана. Теперь нам необходимо нажать кнопку Cut и выделить в окне TV  наш калькулятор, результатом этих действий должно быть окно TV с изображением калькулятора.

CalcTV

Нажимаем кнопку Borders (примечание. с момента написания этой статьи в программе появился режим FixBorders (кнопка черный мониторчик с луной), рекомендую использовать именно его. Используется он точно также как Borders, но работает на динамических изображениях гораздо стабильнее) и начинаем делать шаблоны. Объясню как это делается на примере шаблона для кнопки «+» — мы должны выбрать на изображении самый характерный его участок, который не повторяется в других местах. Собственно и выбираем сам символ +, нажимаем на кнопку Select, и выделяем этот знак в квадратик:

calcTempTV

Кликаем правой кнопкой мыши внутри пунктирного квадратика и у нас появляется окно:

insert

в поле имя которого мы пишем «plus» (так как этот объект у нас в коде был написан) и жмем Input. В разделе Templates дерева объектов у нас появился объект с таким именем. Нажмем на него и  слева появится уже знакомое нам окошко:

calcOITemp

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

OIFullTree

Очень важно, чтобы наименования в точности включая регистр ввода соответствовали тому, что вы видите на картинке. В примере шаблоны five и nine сделаны другим способом, в режиме ColMap, за подробностями того как это делается предлагаю обратиться к документации. На работу кода программы это не окажет особого влияния и вы можете сделать все шаблоны тем же образом как и шаблон кнопки +. А можете ничего не делать, и скачать готовый дистрибутив с примером :-)

Для того чтобы создать шаблоны fiftynine и zero необходимо делать шаблон участка калькулятора выделенного на картинке:

calcshot  

 По шаблонам все. 

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

 FormDesigner

Откроется окно с формой, на которой нужно дважды щелкнуть и из открывшегося окна добавить объект Button в обоих полях формы пишем Start. Жмем ОК и выходим из формы, а на главной форме у нас появилась кнопка Start,  нажимаем на нее и появляется опять меню свойств, жмем на закладку Events и видим следующее:

OIButton

В колонке Value на против события OnClick дважды щелкаем мышью, и в Value автоматически заполняется значение на картинке выше. А в центральном окне появляется текстовый редактор:

TextEditor

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

runtime

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

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

Другие примеры ботов можно поискать на форуме http://nomadbot.com/forum/index.php например, тут

Игры бывают разные. Но рано или поздно любой геймер задает себе вопрос: «Как сделать бота для игры?». Почему так происходит? Потому что во многих играх:

  • есть масса рутинных действий, которые нужно выполнять человеку;

  • «качаться» до желанного уровня или скилла очень долго и не хочется тратить личное время, поэтому нужно, чтобы кто-то играл вместо самого геймера;

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

  • хочется «качать» сразу несколько игр подряд, а возможность играть есть только в одну игру;

  • и др.

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

Как сделать бота для игры 

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

  • для браузерной;

  • для игры в соцсети;

  • для мобильной игры;

  • для устанавливаемой десктопной игры.

Уже от этого будет зависеть выбор необходимых инструментов. Плюс есть разные виды ботов для игр. Для чего они нужны:

  • есть боты, созданные разработчиками самих игр;

  • есть боты-кликеры, которые выполняют в игре самые простые действия;

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

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

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

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

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

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

  • Zennoposter. Не нужно знать программирование для этого сервиса. При создании бота используется технология «перетаскивания» компонентов. Способен создать ботов для браузерных игр и игр в соцсетях. При желании можно сделать ботов и для других целей. Минус этого сервиса — не бесплатен, но есть бесплатный период в 14 дней.

  • Zbot. Это уже более продвинутая программа, которая способна создать бота даже для Counter Strike.

  • Также можно посмотреть еще POD-bot, YaPb и др.

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

  • C#;

  • Python;

  • Ruby;

  • Java;

  • JavaScript или др.

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

Две популярные среды разработки для игровых ботов:

  1. SikuliX. Для разработки бота при помощи этой среды нужно подучить языки Python или Ruby, при установке нужно будет выбрать.

  2. Nomad Bot. С данной средой не возникнет вопроса: «Как сделать бота для игры?», потому что данная среда «заточена» именно под создание ботов для игр и нацелена на то, чтобы экономить ваше время для разработки.

Итог

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

Python

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

Skillfactory.ru

Skillfactory.ru

Подготовка к работе

1. Установите библиотеки

Мы будем использовать google-cloud-bigquery для получения данных из Google BigQuery. matplotlib, numpy и pandas помогут нам с визуализацией данных. python-telegram-bot будет отправлять изображения с визуализацией в чат Telegram.

pip3 install google-cloud-bigquery matplotlib numpy pandas python-telegram-bot

2. Включите Google BigQuery API

Для начала нужно включить API Google BigQuery.

Перейдите в Google Developers Console и создайте новый проект (или выберите существующий).

В панели управления проектом выберите “Обзор API”, нажмите “Включить API и сервисы” и найдите BigQuery API.

Нажмите “Включить”, чтобы включить данный API. 

3. Создайте ключ сервисного аккаунта

Если мы хотим использовать такие облачные сервисы Google, как Google BigQuery, нам нужен ключ сервисного аккаунта.

Перейдите в Google Developers Console, нажмите “Обзор API”, затем перейдите во вкладку “Учетные данные”, нажмите “Создать учетные данные” и “Ключ сервисного аккаунта”.

Skillfactory.ru

Во вкладке “Сервисный аккаунт” нажмите “Новый сервисный аккаунт” и введите имя в поле “Название сервисного аккаунта”.

Skillfactory.ru

Из выпадающего списка во вкладке “Роль” выберите вариант Проект-Владелец. Далее нажмите “Создать”.

На ваш компьютер будет автоматически загружен .json файл. Назовите его creds.json.

В терминале для GOOGLE_APPLICATION_CREDENTIALS пропишите путь к нашему creds.json файлу.

export GOOGLE_APPLICATION_CREDENTIALS='[PATH_TO_CREDS.JSON]'

Все готово, пора приступать к написанию нашего приложения.

Написание приложения

Мы собираемся написать приложение, которое будет запрашивать данные из BigQuery (в данном примере мы предполагаем, что данные хранятся там). Далее мы визуализируем данные и сохраним их в виде изображения. На последнем этапе изображение будет отправлено через чат в Telegram.

В этой статье мы воспользуемся данными из bigquery-public-data.stackoverflow и установим количество ежедневных публикаций для нашего отчета.

Последовательность действий нашей программы довольно проста:

Запрашиваем данные из таблицы-> Визуализируем данные-> Сохраняем визуализированные данные в виде изображения -> Отправляем изображение

1. Query к BigQuery

Сначала импортируем библиотеку.

from google.cloud import bigquery

Затем создадим функцию query_to_bigquery, которая будет использовать query в качестве параметра.

def query_to_bigquery(query):
client = bigquery.Client()
query_job = client.query(query)
result = query_job.result()
dataframe = result.to_dataframe()
return dataframe

Эта функция вернет данные в виде датафрейма.

2. Визуализируем данные

Мы будем использовать matplotlib для визуализации данных.

import matplotlib.pyplot as plt

Нам нужно пять параметров: x — данные по оси х, x_label— имя метки по оси x, y — данные по оси y, y_label — имя метки по оси y и title — заголовок визуализации. 

def visualize_bar_chart(x, x_label, y, y_label, title):
plt.title(title)
plt.xlabel(x_label)
plt.ylabel(y_label)
index = np.arange(len(x))
plt.xticks(index, x, fontsize=5, rotation=30)
plt.bar(index, y)
return plt

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

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

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

query = """ 
SELECT DATE(creation_date) date, COUNT(*) total_posts
FROM `bigquery-public-data.stackoverflow.post_history`
GROUP BY 1
HAVING date > DATE_SUB('2018-12-02', INTERVAL 14 DAY)
ORDER BY 1
"""

Обратите внимание, что в приведенном выше запросе HAVING date > DATE_SUB('2018-12-02', INTERVAL 14 DAY) означает, что мы хотим собрать данные за две недели, начиная со 2 декабря 2018 года.

Мы используем эту дату, потому что 2018-12-02 — это последние данные, записанные в bigquery-public-data.stackoverflow.post_history. В других случаях вы можете использовать CURRENT_DATE(), чтобы получить новейшие данные.

Вызовите функцию query_to_bigquery для получения данных.

dataframe = query_to_bigquery(query)

Возьмите столбец date в качестве данных по оси x, и столбец total_posts в качестве данных по оси y.

x = dataframe['date'].tolist()
y = dataframe['total_posts'].tolist()

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

plt = visualize_bar_chart(x=x, x_label='Date', y=y, y_label='Total Posts', title='Daily Posts')
plt.savefig('viz.png')

Оберните этот код в функцию get_and_save_image.

def get_and_save_image():
query = """
SELECT DATE(creation_date) date, COUNT(*) total_posts
FROM `bigquery-public-data.stackoverflow.post_history`
GROUP BY 1
HAVING date > DATE_SUB('2018-12-02', INTERVAL 14 DAY)
ORDER BY 1
"""
dataframe = query_to_bigquery(query)
x = dataframe['date'].tolist()
y = dataframe['total_posts'].tolist()
plt = visualize_bar_chart(x=x, x_label='Date', y=y, y_label='Total Posts', title='Daily Posts')
plt.savefig('viz.png')

4. Отправляем изображение

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

Найдите в Telegram бот userinfobot и нажмите “Start”. Бот пришлет информацию о пользователе, где номер в поле Id— это и есть chat_id

Создайте функцию send_image. Сначала данная функция вызовет функцию get_and_save_image, чтобы получить и сохранить визуализацию, а затем отправит ее человеку, чей chat_id объявлен в переменной chat_id.

def send_image(bot, update):
get_and_save_image()
chat_id = 'CHAT_ID_RECEIVER'
bot.send_photo(chat_id=chat_id, photo=open('viz.png','rb'))

5. Основное приложение

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

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

Например, мы установили время на 9:00 ежедневно.

def main():
    updater = Updater('YOUR_TOKEN')
    updater.job_queue.run_daily(send_image, time=datetime.datetime.strptime('9:00AM', '%I:%M%p').time(), days=(0,1,2,3,4,5,6))
    updater.start_polling()
    updater.idle()

 
if __name__ == '__main__':
    main() 

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

from google.cloud import bigquery
from telegram.ext import Updater

import matplotlib.pyplot as plt
import numpy as np
import datetime

def query_to_bigquery(query):
client = bigquery.Client()
query_job = client.query(query)
result = query_job.result()
dataframe = result.to_dataframe()
return dataframe

def visualize_bar_chart(x, x_label, y, y_label, title):
plt.title(title)
plt.xlabel(x_label)
plt.ylabel(y_label)
index = np.arange(len(x))
plt.xticks(index, x, fontsize=5, rotation=30)
plt.bar(index, y)
return plt

def get_and_save_image():
query = """
SELECT DATE(creation_date) date, COUNT(*) total_posts
FROM `bigquery-public-data.stackoverflow.post_history`
GROUP BY 1
HAVING date > DATE_SUB('2018-12-02', INTERVAL 14 DAY)
ORDER BY 1
"""
dataframe = query_to_bigquery(query)
x = dataframe['date'].tolist()
y = dataframe['total_posts'].tolist()
plt = visualize_bar_chart(x=x, x_label='Date', y=y, y_label='Total Posts', title='Daily Posts')
plt.savefig('viz.png')

def send_image(bot, update):
get_and_save_image()
chat_id = 'CHAT_ID_RECEIVER'
bot.send_photo(chat_id=chat_id, photo=open('viz.png', 'rb'))

def main():
updater = Updater('YOUR_TOKEN')
updater.job_queue.run_daily(send_image, time=datetime.datetime.strptime('9:00AM', '%I:%M%p').time(), days=(0,1,2,3,4,5,6))
updater.start_polling()
updater.idle()

if __name__ == '__main__':
main()

Сохраните файл и назовите его main.py.

Запустите приложение, введя в терминале команду:

python3 main.py

Замечательно! Теперь у вас есть бот, автоматически генерирующий отчеты, созданный с помощью 50 строчек кода. Довольно круто, не правда ли?

Зайдите сюда, чтобы проверить бот. Введите команду /send, чтобы увидеть пример визуализации изображения.

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

Вы можете посетить мой GitHub, чтобы получить готовый код.

Перевод статьи Dzaky Widya Putra: How to build a bot to automate your mindless tasks using Python and Google BigQuery

Понравилась статья? Поделить с друзьями:
  • Как написать бота для дискорда на python для музыки
  • Как написать бота для гта 5 рп
  • Как написать бота для вк на python для беседы
  • Как написать бота для вк на php
  • Как написать бота для ватсап