为 Dialogflow 应用构建前端 Django 客户端

1. 准备工作

在此 Codelab 中,您将学习如何构建前端 Django 客户端,以便为 Dialogflow 应用打造对话体验。具体来说,您将执行以下操作:

  • 下载、设置和运行 Django 前端客户端。
  • 设置要从 Django 前端客户端调用的 DialogflowdetectIntent 端点。
  • 将应用部署到 App Engine 上的 Google Cloud。
  • 测试是否按照用户请求设置日历邀请。

前提条件

在继续操作之前,您需要完成以下 Codelab:

  1. 使用 Dialogflow 构建预约安排程序
  2. 了解 Dialogflow 中的实体
  3. 通过将 Dialogflow 与日历集成来了解 fulfillment

学习内容

  • 如何为 Dialogflow 设置和运行 Django 前端客户端
  • 如何将 Django 前端客户端部署到 App Engine 上的 Google Cloud
  • 如何从自定义前端测试 Dialogflow 应用

构建内容

  • 您将为 Dialogflow 设置和运行 Django 前端客户端。
  • 您需要将 Django 前端客户端部署到 App Engine 上的 Google Cloud。
  • 您将通过该自定义前端测试 Dialogflow 应用。

所需条件

  • 对 Python 有基本的了解
  • 对 Dialogflow 有基本的了解

2. 架构概览

您将使用之前构建的预约安排程序对话体验,并为应用创建自定义前端。您将使用 Django 构建前端,在本地运行和测试该前端,并将其部署到 App Engine。

用户将通过前端发送预约请求,该前端将调用 DialogflowdetectIntent API 为请求的日期和时间设置预约。然后,Dialogflow fulfillment 会向日历发送请求以设置相应预约,并通过 Dialogflow 向用户返回确认消息。

84515171be610d4

最终结果将如下所示:

7146cd729c50f7c1

3. 下载并运行前端应用

  1. 在计算机的本地终端中输入以下命令,以将代码库克隆到本地机器:
git clone https://github.com/priyankavergadia/Django-Dialogflow-Appointment-Scheduler.git
  1. 切换到包含代码的目录。或者,您也可以下载该示例的 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 代理

下载并安装 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 实例

  1. 创建一个 Cloud SQL for MySQL 第二代实例。将实例命名为“polls-instance”或类似名称。该实例可能需要几分钟才能准备就绪。完成后,它应该会显示在实例列表中。
  2. 使用 gcloud 工具运行以下命令,其中 [YOUR_INSTANCE_NAME] 表示实例的名称。记下下一步中显示的实例连接名称值,此值以 [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]. 格式显示
gcloud sql instances describe [YOUR_INSTANCE_NAME]

或者,您可以点击实例查看实例连接名称

c11e94464bf4fcf8.png

初始化您的 Cloud SQL 实例

使用上一步中的实例连接名称启动 Cloud SQL 代理。将 [YOUR_INSTANCE_CONNECTION_NAME] 替换为您在上一步中记录的值。这将建立从本地计算机到您的实例的连接,以进行本地测试。在本地测试应用时,请让 Cloud SQL 代理保持运行。

./cloud_sql_proxy -instances="[YOUR_INSTANCE_CONNECTION_NAME]"=tcp:3306

接下来,创建一个新的 Cloud SQL 用户和数据库。

  1. 使用 Google Cloud 控制台为 Cloud SQL 实例创建一个名为 polls-instance 的新数据库。例如,您可以输入“polls”作为名称。a3707ec9bc38d412.png
  2. 使用 Cloud 控制台为 Cloud SQL 实例创建一个名为 polls-instance 的新用户账号。f4d098fca49cccff.png

配置数据库设置

  1. 打开 mysite/settings.py 进行修改。
  2. 将两处的 [YOUR-USERNAME][YOUR-PASSWORD] 替换为您在上一部分中创建的数据库用户名和密码。这有助于设置与数据库的连接,以进行 App Engine 部署和本地测试。
  3. 在显示 ‘HOST': ‘cloudsql/ [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME]' 的行中,将 [PROJECT_NAME]:[REGION_NAME]:[INSTANCE_NAME] 替换为您在上一部分中记录的值。
  4. 运行以下命令并复制输出的实例连接名称值以供下一步使用。
gcloud sql instances describe [YOUR_INSTANCE_NAME]
  1. [YOUR-CONNECTION-NAME] 替换为您在上一部分中记录的值。
  2. [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]
  1. 关闭并保存 settings.py

5. 服务账号设置

  1. 在 Dialogflow 的控制台中,点击 e8a0a7d752849e01.png。在项目 ID 旁边的常规标签页中,点击 Google Cloud 图标 a9c6ff6374afe489.png
  2. 点击导航菜单 ☰ >API 和服务 >凭据
  3. 点击创建凭据 >服务账号86f51af0e7886fdd.png
  4. 服务账号详情中,输入“appointment-scheduler”作为服务账号名称,然后点击创建

845d25f3e07ff770

  1. 在显示向此服务账号授予对项目的访问权限的位置,点击继续以跳过它。
  2. 在显示向用户授予访问此服务账号的权限(可选)的位置,点击创建密钥 >JSON >创建

系统会将 JSON 文件下载到您的计算机上,您在后续设置部分需要用到此文件。

a424cec60144d707.png

6. 设置要从应用中调用的 DialogflowdetectIntent 端点

  1. 在聊天文件夹中,将 AppointmentScheduler.json 替换为您的凭据 JSON 文件。
  2. 在聊天文件夹的 views.py 中,将 GOOGLE_PROJECT_ID = "<YOUR_PROJECT_ID>" 更改为您的项目 ID。

7. 在本地构建并运行应用

要在本地计算机上运行 Django 应用程序,您需要设置 Python 开发环境,包括 Python、pip 和 virtualenv。如需了解相关说明,请参阅设置 Python 开发环境

  1. 创建一个独立的 Python 环境,并安装依赖项:
virtualenv env
source env/bin/activate
pip install -r requirements.txt
  1. 运行 Django 迁移以设置您的模型。
python3 manage.py makemigrations
python3 manage.py makemigrations polls
python3 manage.py migrate
  1. 启动本地网络服务器。
python3 manage.py runserver
  1. 在网络浏览器中,输入 http://localhost:8000/。您应该会看到一个简单的网页,如以下屏幕截图所示:

d40910969aa71020.png

示例应用页面由您的计算机上运行的 Django Web 服务器提供。准备好继续操作后,请按 Control+S(Macintosh 上的 Command+S)停止本地网络服务器。

8. 将应用部署到 App Engine 标准环境

运行以下命令,将应用的所有静态文件移至 settings.py 中的 STATIC_ROOT 指定的文件夹中:

python3 manage.py collectstatic

app.yaml 文件所在的应用目录中运行以下命令,以上传应用:

gcloud app deploy

等待更新已完成的消息。

9. 测试前端客户端

在网络浏览器中,输入 https://<your_project_id>.appspot.com。

这次,您的请求由在 App Engine 标准环境中运行的网络服务器处理。

app deploy 命令按照 app.yaml 中的说明部署应用,并将新部署的版本设置为默认版本,使其能够处理所有新流量。

10. 正式版

11. 当您准备好在生产环境中提供内容时,请在 mysite/settings.py 中将 DEBUG 变量更改为 False。

12. 测试聊天机器人

导航到 https://<your_project_id>.appspot.com 并输入以下内容:

  1. 用户:“Set an appointment for vehicle registration at 3 PM tomorrow.”
  2. 聊天机器人的响应如下:

3b0abfec8f4ba279

  1. 日历会预订回复。

eb49089765b84fc6.png

13. 清理

如果您计划完成其他 Dialogflow Codelab,请暂时跳过此部分,稍后再回来查看。

删除 Dialogflow 代理

  1. 点击现有代理旁边的 e8a0a7d752849e01.png
  2. 520c1c6bb9f46ea6
  3. 常规标签页中,滚动到底部,然后点击删除此代理
  4. 在出现的窗口中输入 Delete,然后点击删除

14. 恭喜

您在 Dialogflow 中创建了一个聊天机器人,并将其与日历集成。您现在已经是聊天机器人开发者了!

了解详情

请查看以下资源以了解详情: