Создать своего бота – Как создать своего бота без навыков программирования и подключить его к Яндекс.Алисе

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

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

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

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

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


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

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

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

Не забудьте проверить полученный токен с помощью ссылки api.telegram.org/bot<TOKEN>/getMe, говорят, не всегда работает с первого раза.

2. Программирование


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

Telegram позволяет не делать выгрузку сообщений вручную, а поставить webHook, и тогда они сами будут присылать каждое сообщение. Для Python, чтобы не заморачиваться с cgi и потоками, удобно использовать какой-нибудь реактор, поэтому я для реализации выбрал tornado.web. (для GAE удобно использовать связку Python2+Flask)

Каркас бота:

URL = "https://api.telegram.org/bot%s/" % BOT_TOKEN
MyURL = "https://example.com/hook"

api = requests.Session()
application = tornado.web.Application([
    (r"/", Handler),
])

if __name__ == '__main__':
    signal.signal(signal.SIGTERM, signal_term_handler)
    try:
        set_hook = api.get(URL + "setWebhook?url=%s" % MyURL)
        if set_hook.status_code != 200:
            logging.error("Can't set hook: %s. Quit." % set_hook.text)
            exit(1)
        application.listen(8888)
        tornado.ioloop.IOLoop.current().start()
    except KeyboardInterrupt:
        signal_term_handler(signal.SIGTERM, None)

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

Приложение торнадо для обработки запросов принимает класс tornado.web.RequestHandler, в котором и будет логика бота.

class Handler(tornado.web.RequestHandler):
        def post(self):
            try:
                logging.debug("Got request: %s" % self.request.body)
                update = tornado.escape.json_decode(self.request.body)
                message = update['message']
                text = message.get('text')
                if text:
                    logging.info("MESSAGE\t%s\t%s" % (message['chat']['id'], text))

                    if text[0] == '/':
                        command, *arguments = text.split(" ", 1)
                        response = CMD.get(command, not_found)(arguments, message)
                        logging.info("REPLY\t%s\t%s" % (message['chat']['id'], response))
                        send_reply(response)
            except Exception as e:
                logging.warning(str(e))

Здесь CMD — словарь доступных команд, а send_reply — функция отправки ответа, которая на вход принимает уже сформированный объект Message.

Собственно, её код довольно прост:

def send_reply(response):
    if 'text' in response:
        api.post(URL + "sendMessage", data=response)

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

3. Команды


Перво-наперво, необходимо соблюсти соглашение Telegram и научить бота двум командам: /start и /help:
def help_message(arguments, message):
    response = {'chat_id': message['chat']['id']}
    result = ["Hey, %s!" % message["from"].get("first_name"),
              "\rI can accept only these commands:"]
    for command in CMD:
        result.append(command)
    response['text'] = "\n\t".join(result)
    return response

Структура message['from'] — это объект типа User, она предоставляет боту информацию как id пользователя, так и его имя. Для ответов же полезнее использовать message['chat']['id'] — в случае личного общения там будет User, а в случае чата — id чата. В противном случае можно получить ситуацию, когда пользователь пишет в чат, а бот отвечает в личку.

Команда /start без параметров предназначена для вывода информации о боте, а с параметрами — для идентификации. Полезно её использовать для действий, требующих авторизации.

После этого можно добавить какую-нибудь свою команду, например, /base64:

def base64_decode(arguments, message):
    response = {'chat_id': message['chat']['id']}
    try:
        response['text'] = b64decode(" ".join(arguments).encode("utf8"))
    except:
        response['text'] = "Can't decode it"
    finally:
        return response

Для пользователей мобильного Telegram, будет полезно сказать @BotFather, какие команды принимает наш бот:
I: /setcommands
BotFather : Choose a bot to change the list of commands.
I: @******_bot
BotFather: OK. Send me a list of commands for your bot. Please use this format:

command1 - Description
command2 - Another description
I:
whoisyourdaddy - Information about author
base64 - Base64 decode
BotFather: Success! Command list updated. /help

C таким описанием, если пользователь наберет /, Telegram услужливо покажет список всех доступных команд.

4. Свобода


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

UPD: Как верно подсказали, такое пройдет только при личном общении. В чатах боту доставляются только сообщения, начинающиеся с команды (/<command>) (https://core.telegram.org/bots#privacy-mode)

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

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

Для начала в Handler добавляем обработчик:

if text[0] == '/':
    ...
else:
    response = CMD["<speech>"](message)
    logging.info("REPLY\t%s\t%s" % (message['chat']['id'], response))
    send_reply(response)

А потом в список команд добавляем псевдо-речь:
RESPONSES = {
    "Hello": ["Hi there!", "Hi!", "Welcome!", "Hello, {name}!"],
    "Hi there": ["Hello!", "Hello, {name}!", "Hi!", "Welcome!"],
    "Hi!": ["Hi there!", "Hello, {name}!", "Welcome!", "Hello!"],
    "Welcome": ["Hi there!", "Hi!", "Hello!", "Hello, {name}!",],
}
def human_response(message):
    leven = fuzzywuzzy.process.extract(message.get("text", ""), RESPONSES.keys(), limit=1)[0]
    response = {'chat_id': message['chat']['id']}
    if leven[1] < 75:
        response['text'] = "I can not understand you"
    else:
        response['text'] = random.choice(RESPONSES.get(leven[0])).format_map(
            {'name': message["from"].get("first_name", "")}
        )
    return response

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

5. Не текст.


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

Для примера расширим словарь RESPONSES:

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

И будем отлавливать текст :
if response['text'] == "<at_sticker>":
        response['sticker'] = "BQADAgADeAcAAlOx9wOjY2jpAAHq9DUC"
        del response['text']

Видно, что теперь структура Message уже не содержит текст, поэтому необходимо модифицировать send_reply:
def send_reply(response):
    if 'sticker' in response:
        api.post(URL + "sendSticker", data=response)
    elif 'text' in response:
        api.post(URL + "sendMessage", data=response)

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

6. Возможности


Благодаря удобству API и быстрому старту боты Telegram могут стать хорошей платформой для автоматизации своих действий, настройки уведомлений, создания викторин и task-based соревнований (CTF, DozoR и прочие).

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

7. Ограничения


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

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

while True:
            r = requests.get(URL + "?offset=%s" % (last + 1))
            if r.status_code == 200:
                for message in r.json()["result"]:
                    last = int(message["update_id"])
                    requests.post("http://localhost:8888/",
                                  data=json.dumps(message),
                                  headers={'Content-type': 'application/json',
                                           'Accept': 'text/plain'}
                     )
            else:
                logging.warning("FAIL " + r.text)
            time.sleep(3)

P.S. По пункту 7 нашел удобное решение — размещение бота не у себя, а на heroku, благо все имена вида *.herokuapp.com защищены их собственным сертификатом.

UPD: Telegram улучшили Бот Апи, из-за чего, теперь не обязательно иметь отдельную функцию для отправки сообщений при установленном вебхуке, а в ответ на POST запрос можно отвечать тем же сформированным JSON с ответным сообщением, где одно из полей устанавливается как ч 'method': 'sendMessage' (или любой другой метод, используемый ботом).

habr.com

Конструктор чат-ботов Chatforma

ЧТО МОЖНО СДЕЛАТЬ У НАС?

Бот может писать Вашим клиентам заранее подготовленные сообщения

Научите Ваших ботов понимать язык, на котором говорят Ваши клиенты

Предоставьте клиентам простую навигацию в виде кнопок внутри чата

Текстовые сообщения

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

В конструкторе есть всё, что нужно для внедрения чат-бота в процессы современного бизнеса:

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

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

Напоминайте клиентам о себе и достигайте их внимания в любимых мессенджерах с гигантской открываемостью

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

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

Списки пользователей

Хотите подробнее узнать, как наша платформа может быть полезна бизнесу? Посмотрите тур по нашему продукту

Наши чат-боты связывают мессенджеры с 1300+ сервисами. CRM системы, Календари, системы бронирований и многое другое.

Прямые интеграции

www.chatforma.com

Как пишут ботов для игр (или для программ с интерфейсом)? — Хабр Q&A

Инфы море на одном только хабре habrahabr.ru/search/?q=%5B%D0%B1%D0%BE%D1%82%5D&ta...

от себя добавлю что основные методы это
1) простейший понятный способ - поиск нужного элемента на экране и кликание по экрану, или клик по указанным координатам. я в основном использую этот способ, так как вмешательство в игру минимальное - ее не надо ломать, для онлайн игр - меньше шансов получить бан. Подходит для простых игр, в основном те что 2D пошаговые.
Гуглить отправку событий мыши и клавиатуры на выбранном вами ЯП (java robots например).
Минусы - игра должна быть постоянно открыта на экране и иметь фокус (можно решить - запустив игру с ботом в виртуалке).

2) для онлайн игр - изучение протокола обмена данными с сервером. нужно изучать куда отправляются/откуда получаются данные и в каком формате. пишем программу которая эмулирует клиент игры. очень хороший способ - для очень интерактивных игр - максимальная скорость. Способ довольно сложный надо реверсить протокол (гуглить wireshark) и возможно само приложение (гуглить дизассемблирование / декомпиляция). Если игра браузерная - то все может быть проще - запросы и ответы можно смотреть в консоли браузера. Очень перспективный способ - визуальный клиент не обязателен - можно делать армию ботов и размещать на серверах - скорее всего они будут потреблять немного памяти и процессора и возможности впечатляющие.

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

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

qna.habr.com

Как создать бота в Телеграмм

Всем доброго дня. На связи снова Василий Блинов. Сегодня вы узнаете, как создать бота в Телеграмм. Я много писал про их полезные функции, теперь настал момент обзавестись собственным помощником.

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

Полное руководство по Telegram

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

Чем полезны?

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

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

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

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

Способы создания

Написать код ручками

Для этого нужно знать языки программирования (Python, PHP или Java), а также есть ещё масса нюансов типа регистрации хостинга и прочего. Это может стать огромной проблемой для некоторых.

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

Воспользоваться специальным сервисом

Наш спаситель — Manybot.io.

Именно на нём я нашёл русский интерфейс, понятную инструкцию и нужный на первых этапах функционал. Роботы на этой платформе умеют:

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

Первым делом откроем @Manybot в мессенджере. Нажмём кнопку «Начать».

Запускаем робота manybot

Запускаем робота manybot

Выберем русский язык из предложенного списка.

Выбираем русский manybot

Выбираем русский manybot

Кликаем «Добавить нового бота».

Как создать нового бота в Телеграм

Как создать нового бота в Телеграм

Следуем дальнейшим инструкциям. Нам нужно зарегистрироваться у @BotFather.

Запускаем botfather

Запускаем botfather

Перейдём по ссылке и запустим его.

Регистрируем бота в botfather

Регистрируем бота в botfather

Введём команду /newbot.

Добавляем нового бота в Телеграм

Добавляем нового бота в Телеграм

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

Придумываем название боту

Придумываем название боту

Вернёмся к Manybot, покажем ему этот код, нажав «Я скопировал токен».

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

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

Придумаем описание.

Новый бот в телеграме создан

Новый бот в телеграме создан

Принимайте поздравления, регистрация завершена. Теперь вы полноправный владелец собственного робота Телеграм.

Настройка

Займёмся созданием меню и первых команд. Для этого нужно найти своего робота, для этого в поисковую строку вводим его имя. У меня это @iklife_bot.

Настройка бота в Телеграм

Настройка бота в Телеграм
Создаём простейшую команду

Весь принцип bota — это ответы на вопросы человека, поэтому нужно прописать команды и ответы на них.

Для этого вызовем меню настройки — /commands.

Вызываем меню

Вызываем меню

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

Вводим команды

Вводим команды

Дожидаемся сообщения об успешном создании команды.

Ожидаем ответа на команды

Ожидаем ответа на команды
Делаем меню

Гораздо удобнее, когда посетители могут быстро выбрать все команды прямо из меню. Для его создания опять вернёмся к /commands и далее «Настроить гл. меню».

Настройка главного меню

Настройка главного меню

Потом «Добавить пункт меню». Называем его, выбираем ранее созданную команду.

Добавляем боту новый пункт в меню

Добавляем боту новый пункт в меню

Пункт меню готов!

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

Как создать бота в Телеграм

Как создать бота в Телеграм
Автопостинг

Главным достоинством @Manybot является мгновенная настройка автопостинга записей с сайта с RSS-лентой или из соц. сетей, или Ютуба прямо в чат. Таким образом, читатели всегда будут в курсе обновлений, не выходя из Telegram.

Давайте его запустим!

Вводим /autoposting.

RSS бот

RSS бот

Я укажу RSS-поток своего блога — iklife.ru/feed. Дожидаемся проверки и сообщения об успешном завершении.

Подключаем RSS ленту

Подключаем RSS ленту

Теперь вы увидите мои статьи прямо внутри @iklife_bot.

Заключение

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

Спасибо за внимание!

подпишись и начни получать лучшие статьи первым

Подписаться

Подписалось уже 6999 человек

iklife.ru

Пошаговая инструкция создания чат-бота

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

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

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

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

Первый шаг: регистрация и «вербовка» агента

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

На главной странице сервиса нужно нажать кнопку SIGN UP FOR FREE и пройти регистрацию.

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

Недолго думая, жмем на Create Agent. Агент — это наша «рабочая лошадка», которую мы будем обучать общению с людьми.

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

На экране редактирования агента откроются настройки и дополнительные панели.

В правой части экрана можно протестировать своего чат-бота: пообщаться и посмотреть, как он работает. Попробуйте написать «Привет!» или «Здравствуй» и увидите, что бот уже знает, как обрабатывать подобные сообщения.

Здесь важно знать, что USER SAYS — это то, что написали вы, а DEFAULT RESPONSE — то, что ответил чат-бот. Остальные пункты станут понятны после дальнейшего изучения DialogFlow.

По центру основного экрана есть список из двух пунктов: Default Fallback Intent и Default Welcome Intent. Intent — это короткие сценарии общения по типу «Сообщение от человека — ответ бота». Здесь можно установить дополнительные настройки: контекст, события, параметры и пр.

Немного о каждой из них.

Default Fallback Intent нужен для случаев, когда ни один другой Intent (короткий сценарий) не подошел под запрос человека. Например, клиент написал в чат «абракадабру» или что-то совсем не запланированное. Реакцию бота на этот случай можно настроить в разделе Responses.

Default Welcome Intent — это сценарий открытия диалога с ботом. Данный Intent стартует ровно в тот момент, когда человек впервые запускает бота (в Telegram — командой /start) или в очередной раз приветствует его («Привет» или «Здравствуй»). Кстати, по умолчанию агент не знает приветствий «Добрый день/утро/вечер». Рекомендуем добавить их в разделе Training phrases.

Любой ответ в разделе Responses можно отредактировать. Последний пункт, Enter a text response variant, предлагает ввести свой вариант ответа. Нажмите на этот текст, чтобы появился курсор ввода, и наберите фразу. Добавьте 2-3 новых варианта, чтобы разнообразить фразовый запас агента.

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

Здесь открывается таблица из всевозможных платформ, для которых можно написать своего бота. Допустим, в случае с Василием и цветочной лавкой — это Telegram. Чтобы в самом мессенджере появился наш бот, нужно создать его «Telegram-оболочку». Для этих целей используем канал @BotFather, который поможет создать бота пошагово. В конце создания мы получаем token, который нужен здесь:

Запускаем кнопкой START и закрываем это окно, нажав на CLOSE x. Это важно: все другие варианты выхода из этого окна отменят интеграцию.

Второй шаг: сценарий общения

Как может выглядеть диалог человека с ботом? В данном случае предполагаем, что у потенциального покупателя есть намерение купить цветы. Если это не так, то лучше, если человек узнает сразу, что бот не умеет ничего другого. Добавим в Default Welcome Intent второй ответ с фразой: «Я чат-бот цветочной лавки Василек. С моей помощью вы можете заказать цветы с доставкой по адресу. Как к вам обращаться?». Вопрос в текст добавлен не просто так, об этом чуть позже.

Заходим в Default Welcome Intent и ниже в разделе Responses («Ответы») нажимаем на кнопку ADD RESPONSES, выбираем в выпавшем меню Text Response.

В новой панели Responses добавляем текст. В результате должно получиться, как на скриншоте ниже:

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

Создадим новый Intent, который будет связан с Default Welcome Intent. Для этого нужно навести курсор мыши на пункт Default Welcome Intent на экране со списком Intents и нажать на Add follow-up intent. В появившемся списке выбрать первый пункт, Custom (с остальными можно поиграться позже).

Появится новый Intent. На экране это выглядит так:

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

Переходим к тренировке агента возможным вариантам ответа. Жмем на ADD TRAINING PHRASES в разделе Training phrases.

Я не буду составлять сотню вариантов ввода для этого примера. В реальной жизни рекомендую устроить мозговой штурм с коллегами и придумать минимум 15 способов представиться. После наполнения вариантами ответа экран с тренировочными фразами у меня выглядит так:

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

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

Теперь, если клиент написал похожий на этот шаблон текст, чат-бот распознает имя и сохранит его в переменной given-name. Неплохо для начала. Дальше интереснее!

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

Переходим к разделу Responses и жмем на ADD RESPONSE.

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

Многие современные мессенджеры, такие как Facebook Messenger или Telegram, позволяют ботам добавлять к своим сообщениям кнопки или меню. В каждом мессенджере это делается по-своему, поэтому DialogFlow подсказывает, какие типы ответов могут быть созданы в зависимости от того, какая платформа выбрана.

Выбираем закладку Telegram и жмем ADD RESPONSES. В появившемся меню выбираем Quick Replies. Появится маленькая панель с двумя полями ввода. В верхнем поле вводим текст «$given-name, какой букет хотите приобрести?» Это сообщение появится вместе с кнопками выбора варианта ответа. Параметр $given-name автоматически заменится на имя покупателя, в чем вы убедитесь позже при тестировании.

Далее введем в каждой строке варианты ответов пользователя. В нашем случае это будут фразы «Букет 3 розы» и «Букет 5 роз». Чтобы появилась новая строка для следующего варианта, нажмите на клавишу Enter. Получается такая картина:

Нажмите синюю кнопку SAVE вверху экрана, чтобы сохранить настройки.

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

Чтобы чат-бот уточнил адрес доставки, создадим новый Intent, продолжающий наш вопрос по букетам. Для этого раскрываем список Default Welcome Intent и жмем на Add follow-up intent напротив Default Welcome Intent - custom. В результате экран Intents выглядит так:

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

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

Заходим в новый Intent — Tovar. Для начала разберемся с разделом Context. Там находится автоматически созданный контекст DefaultWelcomeIntent-custom-followup — название формируется из названия шага и суффикса -followup.

В процессе разговора данный контекст придет из предыдущего шага, где пользователь написал свое имя. В этом контексте хранится переменная $given-name, которая может пригодиться нам на каждом следующем шаге — чтобы обратиться по имени и задать вопрос или для окончательного формирования заказа и отправки сообщения с полной информацией о нем. Поэтому мы должны убедиться, что данный контекст не исчезнет, а будет передан дальше по всем шагам, вплоть до последнего. В текстовом поле, где написано Add output context, введите DefaultWelcomeIntent-custom-followup.

Переходим к тренировочным фразам. Так как на предыдущем шаге пользователь мог ввести «Букет из 3 роз» и «Букет из 5 роз», то эти фразы мы добавляем в первую очередь. Есть вероятность, что покупатель захочет «151 фиалку». Этот случай рассмотрим чуть позже.

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

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

Чтобы научить агента такому нехитрому делу, существуют Entities в левом меню. Перейдем туда и создадим новый Entity.

Назовем его bouquet (по-русски нельзя, потому что название будет использоваться в качестве переменной в дальнейшем). Ниже введем сначала оригинальное название букета — «Букет из 5 роз», а справа введем все возможные синонимы. То же самое проделаем для «Букет из 3 роз». У меня получилось так:

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

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

Ниже в разделе Action and parameters предлагаю поставить галочку напротив новой переменной в столбце REQUIRED. Это означает, что, пока в переменную не попадут необходимые данные, пользователь не перейдет к следующему шагу. В этой же строке в столбце PROMPTS есть опция для уточняющих фраз, на случай если с первого раза добиться желаемого ответа не получилось.

Информация о выбранном букете принята, теперь можно ответить заказчику. В разделе Responses создадим шаблон ответа с информацией о том, что данные получены, и следующим сообщением зададим вопрос «Куда доставить?». Запрограммируем несколько вариантов. Например, вот так:

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

На последнем шаге отобразим текст сообщения с деталями заказа. Для этого в разделе Action and parameters необходимо описать переменные из присланных контекстов.

Вручную вписываем given-name в столбце PARAMETER NAME, далее вписываем @sys.given-name в столбце ENTITY. В столбце VALUE нужно указать значение переменной given-name из контекста DefaultWelcomIntent-followup. Ввести нужно такую строчку: #DefaultWelcomIntent-followup.given-name.

То же самое необходимо проделать для переменной bouquet (см. результат на скриншоте выше). Также не забудьте на всякий случай указать PROMPTS.

В разделе Responses мы, наконец, отправим пользователю финальное сообщение и завершим диалог.

Включите опцию Set this intent as end of conversation — именно она даст чат-боту знать, что диалог с пользователем завершился. Сохраняем последний Intent и проверяем работу чат-бота.

Вот такой диалог с ботом получился у меня:

Вы тоже можете протестировать получившегося бота в Telegram — @VaselekLavka_bot.

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

Какие есть возможности для развития чат-бота? Практически безграничные. Вы можете соединить бота с базой данных интернет-магазина. Он тогда сможет, например, в реальном времени за доли секунды узнать, есть ли товар в наличии, сколько, какого цвета и есть ли акции со специальными ценами. Бот также может принять данные от покупателя; «вспомнить», что он покупал раньше, распознав его по имени или номеру заказа; внести всю информацию в базу данных интернет-магазина или CRM-систему. И все это — 24 часа в сутки без выходных.

dx.media

Robochat.io — создайте бота для ВКонтакте бесплатно

Собираем базу подписчиков

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

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

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

Работа со списками рассылки

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

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


Представим, что мы хотим устроить таргетинговую рассылку, которую получат, например, только жители Санкт-Петербурга старше 18 лет, а также девушки из Москвы с днем рождения 1-10 июля.

Для этого соберём списки с соответствующими фильтрами. Перейдите к созданию списка, нажав на зеленую кнопку "Создать список" во вкладке "Списки".


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

  • Установите параметры фильтра — к выбору большое количество опций и настроек.

  • Добавьте новые условия.

  • Впишите название списка.

  • Нажмите кнопку "Собрать список".

Начнется сбор списка, занимающий некоторое время.


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

Учитывайте, что некоторые фильтры (возраст, семейное положение и т.д.) исключают аудиторию, не указавшую соответствующую информацию.

Например, возраст во ВКонтакте скрывают до 40% пользователей, а 9 из 10 человек не указывают свои политические предпочтения — все они будут исключены из списка.

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

Создание рассылки

Вернемся на страницу рассылки.

Нажмите кнопку "Создать рассылку", чтобы перейти к её созданию.


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

Обратите внимание: в рассылка работает только переменная {name}

Составление рассылки

Грамотно составленный текст рассылки с подобранными под целевую аудиторию фильтрами — залог успешной рекламной кампании.

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

Отправка сообщений с любой рекламой запрещена пунктом 5.13.4 правил ВКонтакте.

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

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

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

Чтобы один раз составить цепочку сообщений, а затем быстро её использовать сохраните черновик рассылки нажав кнопку "Сохранить шаблон" в левой колонке.

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

robochat.io

Отправить ответ

avatar
  Подписаться  
Уведомление о