1. Прежде чем начать
В этой лабораторной работе вы научитесь создавать внешний клиент Django для создания диалогового интерфейса для приложения Dialogflow. В частности, вы сделаете следующее:
- Загрузите, настройте и запустите внешний клиент Django.
- Настройте конечную точку DialogflowDetectIntent для вызова из внешнего клиента Django.
- Разверните приложение в Google Cloud на App Engine.
- Проверьте, настраиваются ли приглашения Календаря по запросу пользователя.
Предварительные условия
Прежде чем продолжить, вам необходимо выполнить следующие лабораторные работы:
- Создайте планировщик встреч с помощью Dialogflow
- Понимание сущностей в Dialogflow
- Понимайте выполнение заказов, интегрируя Dialogflow с Календарем.
Что вы узнаете
- Как настроить и запустить внешний клиент Django для Dialogflow
- Как развернуть внешний клиент Django в Google Cloud на App Engine
- Как протестировать приложение Dialogflow из пользовательского интерфейса
Что ты построишь
- Вы настроите и запустите внешний клиент Django для Dialogflow.
- Вы развернете внешний клиент Django в Google Cloud на App Engine.
- Вы протестируете приложение Dialogflow из этого пользовательского интерфейса.
Что вам понадобится
- Базовое понимание Python
- Базовое понимание Dialogflow
2. Архитектурный обзор
Вы воспользуетесь ранее созданным интерфейсом беседы в Планировщике встреч и создадите собственный интерфейс для приложения. Вы создадите интерфейс с помощью Django, запустите и протестируете его локально, а затем развернете в App Engine.
Пользователь отправит запрос на встречу через интерфейс, который вызовет API DialogflowDetectIntent, чтобы назначить встречу на запрошенную дату и время. Затем выполнение Dialogflow отправит запрос в Календарь, чтобы назначить соответствующую встречу, и вернет подтверждение пользователю через Dialogflow.
Конечный результат будет выглядеть так:
3. Загрузите и запустите интерфейсное приложение.
- Клонируйте репозиторий на свой локальный компьютер, введя эту команду в локальном терминале вашего компьютера:
git clone https://github.com/priyankavergadia/Django-Dialogflow-Appointment-Scheduler.git
- Перейдите в каталог, содержащий код. Кроме того, вы можете загрузить образец в виде zip-архива и распаковать его.
cd Django-Dialogflow-Appointment-Scheduler
4. Настройте локальную среду
При развертывании ваше приложение использует прокси-сервер Cloud SQL, встроенный в стандартную среду App Engine, для связи с вашим экземпляром Cloud SQL. Однако для локального тестирования приложения необходимо установить и использовать локальную копию Cloud SQL Proxy в своей среде разработки. Дополнительную информацию см. в разделе О прокси-сервере Cloud SQL .
Для выполнения основных задач администрирования на вашем экземпляре Cloud SQL вы можете использовать клиент Cloud SQL для MySQL.
Установите прокси-сервер Cloud SQL.
Загрузите и установите прокси-сервер Cloud SQL. Прокси-сервер Cloud SQL используется для подключения к вашему экземпляру 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 для MySQL второго поколения. Назовите экземпляр «polls-instance» или что-то подобное. Подготовка экземпляра может занять несколько минут. После того, как он будет готов, он должен появиться в списке экземпляров.
- Используйте инструмент gcloud для запуска следующей команды, где
[YOUR_INSTANCE_NAME]
представляет имя вашего экземпляра. Запишите значение, указанное в качестве имени соединения экземпляра, для следующего шага, которое отображается в формате[PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME].
gcloud sql instances describe [YOUR_INSTANCE_NAME]
Альтернативно вы можете нажать на экземпляр, чтобы увидеть имя подключения к экземпляру .
Инициализируйте экземпляр Cloud SQL
Запустите прокси-сервер Cloud SQL, используя имя подключения экземпляра из предыдущего шага. Замените [YOUR_INSTANCE_CONNECTION_NAME]
значением, которое вы записали на предыдущем шаге. При этом будет установлено соединение вашего локального компьютера с вашим экземпляром для целей локального тестирования. Не отключайте прокси-сервер Cloud SQL во время локального тестирования приложения.
./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306
Затем создайте нового пользователя и базу данных Cloud SQL.
- Создайте новую базу данных с помощью Google Cloud Console для своего экземпляра Cloud SQL с именем polls-instance . Например, вы можете ввести в качестве имени «опросы».
- Создайте новую учетную запись пользователя с помощью Cloud Console для своего экземпляра Cloud SQL с именем polls-instance .
Настройте параметры базы данных
- Откройте
mysite/settings.py
для редактирования. - В двух местах замените
[YOUR-USERNAME]
и[YOUR-PASSWORD]
именем пользователя и паролем базы данных, которые вы создали в предыдущем разделе. Это помогает настроить подключение к базе данных для развертывания App Engine и локального тестирования. - В строке
'HOST': 'cloudsql/ [PROJECT_NAME]:[REGION_NAME]:[INSTAN
CE_NAME]'
замените[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. Настройте конечную точку DialogflowDetectIntent для вызова из приложения.
- В папке чата замените
AppointmentScheduler.json
файлом JSON ваших учетных данных. - В
views.py
в папке чата измените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
на Macintosh), чтобы остановить локальный веб-сервер.
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 и интегрировали его с Календарем. Теперь вы разработчик чат-бота!
Узнать больше
Чтобы узнать больше, посетите следующие ресурсы:
- Интегрируйте Vision API с Dialogflow
- Примеры кода на странице Dialogflow Github