Реализация чат-ботов поддержки клиентов с использованием сервиса Dialogflow на Google Cloud Platform.
У большинства компаний, которые взаимодействуют с людьми (покупатели, пользователи и пр.), есть служба поддержки. Сотрудникам службы поддержки приходится постоянно отвечать на однотипные вопросы пользователей. Это отнимает время, которое можно потратить на решение сложных и нетривиальных проблем.
Данную проблему можно решить с помощью бота-помощника. Он будет закрывать все типичные вопросы, а вот что-то посложнее – перенаправлять на операторов. По предварительной оценке, это на 70% сократит время ожидания ответа и на 90% повысит довольство жизнью сотрудников службы поддержки.
Специфика в том, что все люди разные и никогда не знаешь, как им придёт в голову сформулировать вопрос, предсказать варианты заранее невозможно. Поэтому бот будет подключен к сервису Dialogflow.
Dialogflow — это сервис, позволяющий создавать чат-ботов для разных платформ и языков на разных устройствах. Принимая запрос в виде текста на естественном языке или некого события, Dialogflow согласовывает запрос с наиболее подходящим шаблоном. При этом он основывается на информации, содержащейся в шаблоне (примеры, сущности, контекст, параметры) и машинном обучении. Dialogflow формирует ответный запрос и возвращает данные в виде объекта ответа JSON.
"Агент" — это что-то вроде "бота" в Telegram, только в DialogFlow.
Для начала нужно создать аккаунт в Google Cloud Platform: https://console.cloud.google.com/.
После создания аккаунта в Google Cloud Platform создаем проект:

После создания проекта в создаем проект в сервисе DialogFlow: https://cloud.google.com/dialogflow/docs/quick/setup.
Далее нужно создать агента через консоль DialogFlow: https://cloud.google.com/dialogflow/docs/quick/build-agent. При создании агента выбираем язык, на котором будем общаться с пользователями. Так же при создании агента понадобится идентификатор проекта Google Cloud Platform.
Для обучения бота создайте новый Intent и добавьте несколько тренировочных фраз в секции Training phrases. Чтобы бот что-то ответил, ему нужно добавить текст ответа в секции Response. Затем можно попробовать пообщаться с ботом в меню слева-сверху (см. скриншот).
Чтобы бот хорошо натренировался, фразы должны быть разными. Добавьте 5-6 вариантов приветствия разными словами.
Так же можно "обучить" бота с помощью скрипта create_dialogflow_intent.py. Для этого нужно указать путь до файла с тренировочными фразами и ответами. Пример запуска:
$ python create_dialogflow_intent.py intents/questions.json Файл должен быть следующего содержания:
{
"Удаление аккаунта": {
"questions": [
"Хочу удалить аккаунт",
"Удалить аккаунт",
"Как удалить аккаунт",
"Как удалить данные обо мне",
"Удалить мои статьи",
"Как снести свой аккаунт"
],
"answer": "Если вы хотите удалить аккаунт, это можно сделать в вашем профиле в разделе «Настройки». Пролистайте этот раздел до зоны, выделенной красным."
},
"Название": {
"questions": [
"Фраза",
"Ещё одна фраза",
"Какая-то фраза",
"...",
],
"answer": "Текст ответа."
},
...
...
}
Пример файла с тренировочными фразами и ответами можно найти в каталоге intents этого репозитория: intents/questions.json.
Для размещения бота можно использовать платформу Heroku. Бесплатный вариант включает 550 бесплатных часов в месяц.
Регистрируем учетную запись и создаем приложение(app) на платформе Heroku:
Получится страница, как на скриншоте ниже:

Далее нужно разместить репозиторий с кодом бота на своём аккаунте GitHub. Репозиторий должен содержать файл requirements.txt в котором прописаны зависимости. Файл .env публиковать нельзя.
Затем нужно привязать свой аккаунт GitHub к аккаунту Heroku. Это можно сделать на вкладке Deploy в разделе панели инструментов платформы Heroku. В разделе Deployment method выберите GitHub, потом найдите свой репозиторий с помощью поиска и подключите его к Heroku.
В панели инструментов платформы Heroku переходим на вкладку Settings и в разделе Config Vars добавляем переменные окружения которые использует бот.
При использовании библиотеки Dialogflow потребуется установить переменную окружения GOOGLE_APPLICATION_CREDENTIALS. В переменной окружения GOOGLE_APPLICATION_CREDENTIALS указывается путь к файлу JSON, который содержит ключ вашего сервисного аккаунта в Google Cloud. Для создания файла JSON с ключами воспользуйтесь следующей инструкцией https://cloud.google.com/docs/authentication/getting-started#creating_a_service_account.
Объявите переменные среды из панели инструментов Heroku следующим образом: в значение переменной GOOGLE_CREDENTIALS вставляем содержимое файла JSON c ключами сервисного аккаунта в Google Cloud. Для переменной среды GOOGLE_APPLICATION_CREDENTIALS указываем имя файла google-credentials.json.
Когда переменные объявлены, добавьте buildpack через панель инструменов Heroku в разделе Settings:

или из командной строки (нужен предустановленный клиент Heroku CLI):
$ heroku buildpacks:add https://github.com/gerywahyunugraha/heroku-google-application-credentials-buildpackДанный buildpack автоматически сгенерирует файлgoogle-credentials.json и заполнит его содержимым содержимого учетных данных Google.
Buildpacks - это скрипты, которые запускаются при развертывании вашего приложения. Они используются для установки зависимостей для вашего приложения и настройки среды.
Добавте остальные переменные окружения. Список всех переменных окружения которые нужны для работы приложения.
TELEGRAM_API_TOKEN- токет чат-бота в Telegram;DIALOGFLOW_PROJECT_ID- идентификатор проекта в Dialogflow;VK_TOKEN- токен группы ВКонтакте;LOGGER_TOKEN- токен бота Telegram для мониторинга работы чат-ботов которому отправляются логи;LOGGER_CHAT_ID- ID чата в который отправляются логи приложений;GOOGLE_APPLICATION_CREDENTIALS- указывается путь к файлу JSON, который содержит ключ вашего сервисного аккаунта в Google Cloud;GOOGLE_CREDENTIALS- содержимое файла JSON c ключами сервисного аккаунта в Google Cloud.
Репозиторий с кодом должен содержать файл Procfile со следующим содержимым:
vk-bot: python3 vk_chatbot.py
tg-bot: python3 tg_chatbot.py
На вкладке Resources панели инструментов платформы Heroku переключаем "тумблер" в положение "ON" как показано на скриншоте:

Далее переходим на вкладку Deploy и в разделе Manual deploy нажимаем кнопку Deploy Branch, если всё прошло нормально то загорятся зелёные галочки справа, как на скриншоте.:

Обычно, если код не работает, ошибка выводится в консоль. Но код запускал Heroku, и он просто так её не покажет. Вывод программы можно посмотреть через специальное приложение Heroku CLI, которое придётся поставить на свой компьютер. Посмотреть логи можно командой:
$ heroku logs --tail --app your_app_nameЕсли вы не можете сразу увидеть источник ошибки, попробуйте перезапустить приложение из другого окна терминала.
$ heroku restartКод написан в образовательных целях.






