1. Прежде чем начать
В этом практическом занятии вы научитесь создавать фронтенд-клиент Django для реализации диалогового взаимодействия в приложении Dialogflow. В частности, вы выполните следующие действия:
- Скачайте, установите и запустите клиентскую часть Django.
- Настройте конечную точку Dialogflow detectIntent для вызова из клиентского интерфейса Django.
- Разверните приложение в Google Cloud с помощью App Engine.
- Проверьте, создаются ли приглашения в календарь по запросу пользователя.
Предварительные требования
Прежде чем продолжить, вам необходимо выполнить следующие практические задания:
- Создайте планировщик встреч с помощью Dialogflow.
- Понимание сущностей в Dialogflow
- Понимание процесса выполнения заказов достигается за счет интеграции Dialogflow с Calendar.
Что вы узнаете
- Как настроить и запустить клиентский интерфейс Django для Dialogflow
- Как развернуть клиентскую часть Django в Google Cloud на App Engine
- Как протестировать приложение Dialogflow с помощью собственного интерфейса
Что вы построите
- Вам предстоит настроить и запустить клиентский интерфейс Django для Dialogflow.
- Вы развернете клиентскую часть Django в Google Cloud на App Engine.
- Вы будете тестировать приложение Dialogflow, используя этот пользовательский интерфейс.
Что вам понадобится
- Базовое понимание Python
- Базовое понимание Dialogflow
2. Архитектурный обзор
Вы будете использовать разработанный вами ранее интерфейс диалога «Планировщик встреч» и создадите собственный интерфейс для приложения. Вы разработаете интерфейс с помощью Django, запустите и протестируете его локально, а затем развернете в App Engine.
Пользователь отправляет запрос на запись через интерфейс пользователя, который вызывает API Dialogflow detectIntent для назначения встречи на запрошенную дату и время. Затем Dialogflow fulfillment отправляет запрос в Calendar для установки соответствующей встречи и возвращает подтверждение пользователю через Dialogflow.

В итоге получится вот так:

3. Скачайте и запустите фронтенд-приложение.
- Клонируйте репозиторий на свой локальный компьютер, введя следующую команду в локальном терминале:
git clone https://github.com/priyankavergadia/Django-Dialogflow-Appointment-Scheduler.git
- Перейдите в директорию, содержащую код. В качестве альтернативы вы можете скачать пример в виде ZIP-архива и распаковать его.
cd Django-Dialogflow-Appointment-Scheduler
4. Настройте локальную среду.
При развертывании ваше приложение использует встроенный в стандартную среду App Engine прокси-сервер Cloud SQL для связи с вашим экземпляром Cloud SQL. Однако для локального тестирования приложения необходимо установить и использовать локальную копию прокси-сервера Cloud SQL в вашей среде разработки. Дополнительную информацию см. в разделе «О прокси-сервере Cloud SQL» .
Для выполнения основных административных задач в вашем экземпляре Cloud SQL вы можете использовать клиент Cloud SQL for MySQL.
Установите Cloud SQL Proxy.
Загрузите и установите Cloud SQL Proxy. Cloud SQL Proxy используется для подключения к вашему экземпляру Cloud SQL при локальной работе.
Скачайте прокси.
curl -o cloud_sql_proxy https://dl.google.com/cloudsql/cloud_sql_proxy.darwin.amd64
Сделайте прокси-сервер исполняемым.
chmod +x cloud_sql_proxy
Создайте экземпляр Cloud SQL.
- Создайте экземпляр Cloud SQL for MySQL второго поколения. Назовите экземпляр "polls-instance" или как-нибудь похоже. Подготовка экземпляра может занять несколько минут. После подготовки он должен отобразиться в списке экземпляров.
- Используйте инструмент gcloud для выполнения следующей команды, где
[YOUR_INSTANCE_NAME]обозначает имя вашего экземпляра. Запишите значение, отображаемое для имени подключения к экземпляру, для следующего шага, которое отображается в формате[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME].
gcloud sql instances describe [YOUR_INSTANCE_NAME]
В качестве альтернативы вы можете щелкнуть по экземпляру, чтобы увидеть имя подключения к экземпляру .

Инициализируйте свой экземпляр Cloud SQL.
Запустите Cloud SQL Proxy, используя имя подключения к экземпляру, указанное на предыдущем шаге. Замените [YOUR_INSTANCE_CONNECTION_NAME] значением, которое вы записали на предыдущем шаге. Это установит соединение с вашего локального компьютера с вашим экземпляром для целей локального тестирования. Оставьте Cloud SQL Proxy запущенным, пока вы тестируете приложение локально.
./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306
Далее создайте нового пользователя Cloud SQL и базу данных.
- Создайте новую базу данных с помощью консоли Google Cloud для вашего экземпляра Cloud SQL, назвав её polls-instance . Например, вы можете ввести в качестве имени "polls".

- Создайте новую учетную запись пользователя с помощью Cloud Console для вашего экземпляра Cloud SQL с именем polls-instance .

Настройте параметры базы данных.
- Откройте
mysite/settings.pyдля редактирования. - В двух местах замените
[YOUR-USERNAME]и[YOUR-PASSWORD]на имя пользователя и пароль базы данных, которые вы создали в предыдущем разделе. Это поможет настроить подключение к базе данных для развертывания в App Engine и локального тестирования. - В строке, содержащей
'HOST': 'cloudsql/ [PROJECT_NAME]:[REGION_NAME]:[INSTAN],'замените[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]значением, которое вы записали в предыдущем разделе. - Выполните следующую команду и скопируйте полученное значение имени подключения к экземпляру для следующего шага.
gcloud sql instances describe [YOUR_INSTANCE_NAME]
- Замените
[YOUR-CONNECTION-NAME]значением, которое вы записали в предыдущем разделе. - Замените
[YOUR-DATABASE]на имя, которое вы выбрали в предыдущем разделе.
# [START db_setup]
if os.getenv('GAE_APPLICATION', None):
# Running on production App Engine, so connect to Google Cloud SQL using
# the unix socket at /cloudsql/<your-cloudsql-connection string>
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '/cloudsql/[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]',
'USER': '[YOUR-USERNAME]',
'PASSWORD': '[YOUR-PASSWORD]',
'NAME': '[YOUR-DATABASE]',
}
}
else:
# Running locally so connect to either a local MySQL instance or connect to
# Cloud SQL via the proxy. To start the proxy via command line:
# $ cloud_sql_proxy -instances=[INSTANCE_CONNECTION_NAME]=tcp:3306
# See https://cloud.google.com/sql/docs/mysql-connect-proxy
DATABASES = {
'default': {
'ENGINE': 'django.db.backends.mysql',
'HOST': '127.0.0.1',
'PORT': '3306',
'NAME': '[YOUR-DATABASE]',
'USER': '[YOUR-USERNAME]',
'PASSWORD': '[YOUR-PASSWORD]'
}
}
# [END db_setup]
- Закройте и сохраните
settings.py.
5. Настройка учетной записи службы
- В консоли Dialogflow нажмите
На вкладке «Общие» рядом с идентификатором проекта нажмите «Google Cloud» .
. - Нажмите меню навигации ☰ > API и сервисы > Учетные данные .
- Нажмите «Создать учетные данные» > «Учетная запись службы» .

- В сведениях об учетной записи службы введите «appointment-scheduler» в качестве имени учетной записи службы , затем нажмите «Создать» .

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

6. Настройте конечную точку Dialogflow detectIntent для вызова из приложения.
- В папке чата замените файл
AppointmentScheduler.jsonна JSON-файл с вашими учетными данными. - В файле
views.pyв папке chat измените значениеGOOGLE_PROJECT_ID = "<YOUR_PROJECT_ID>"на идентификатор вашего проекта.
7. Соберите и запустите приложение локально.
Для запуска приложения Django на локальном компьютере вам потребуется настроить среду разработки Python, включая Python, pip и virtualenv. Инструкции см. в разделе «Настройка среды разработки Python» .
- Создайте изолированную среду Python и установите зависимости:
virtualenv env source env/bin/activate pip install -r requirements.txt
- Запустите миграции Django, чтобы настроить ваши модели.
python3 manage.py makemigrations python3 manage.py makemigrations polls python3 manage.py migrate
- Запустите локальный веб-сервер.
python3 manage.py runserver
- В веб-браузере введите http://localhost:8000/ . Вы должны увидеть простую веб-страницу, как показано на следующем скриншоте:

Примеры страниц приложения предоставляются веб-сервером Django, работающим на вашем компьютере. Когда вы будете готовы продолжить, нажмите Control+S ( Command+S на Mac), чтобы остановить локальный веб-сервер.
8. Разверните приложение в стандартной среде App Engine.
Выполните следующую команду, чтобы переместить все статические файлы приложения в папку, указанную параметром STATIC_ROOT в settings.py :
python3 manage.py collectstatic
Загрузите приложение, выполнив следующую команду в каталоге приложения, где находится файл app.yaml :
gcloud app deploy
Дождитесь сообщения, уведомляющего о завершении обновления.
9. Протестируйте клиентскую часть интерфейса.
В веб-браузере введите https://<your_project_id>.appspot.com.
В этот раз ваш запрос будет обработан веб-сервером, работающим в стандартной среде App Engine.
Команда app deploy развертывает приложение в соответствии с описанием в app.yaml и устанавливает вновь развернутую версию в качестве версии по умолчанию, в результате чего приложение будет обрабатывать весь новый трафик.
10. Производство
11. Когда вы будете готовы запустить контент в рабочей среде, измените значение переменной DEBUG на False в файле mysite/settings.py.
12. Протестируйте своего чат-бота.
Перейдите по адресу https://<your_project_id>.appspot.com и введите следующее:
- Пользователь: «Записалась на регистрацию транспортного средства на завтра в 15:00».
- Чат-бот отвечает следующим образом:

- Календарь фиксирует ответ.

13. Уборка
Если вы планируете пройти другие практические занятия по Dialogflow, то пропустите этот раздел и вернитесь к нему позже.
Удалите агент Dialogflow.
- Нажмите
рядом с вашим текущим агентом. 
- На вкладке «Общие» прокрутите вниз и нажмите «Удалить этого агента» .
- В появившемся окне введите «Удалить» и нажмите «Удалить» .
14. Поздравляем!
Вы создали чат-бота в Dialogflow и интегрировали его с Calendar. Теперь вы разработчик чат-ботов!
Узнать больше
Для получения более подробной информации ознакомьтесь со следующими ресурсами:
- Интегрируйте API Vision с Dialogflow.
- Примеры кода можно найти на странице Dialogflow в GitHub.