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

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

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

前提条件

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

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

学习内容

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

构建内容

  • 您需要为 Dialogflow 设置并运行 Django 前端客户端。
  • 您将在 App Engine 上将 Django 前端客户端部署到 Google Cloud。
  • 您将从该自定义前端测试一个 Dialogflow 应用。

您需要满足的条件

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

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

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

最终结果将如下所示:

  1. 在计算机的本地终端中输入以下命令,将代码库克隆到本地计算机:
git clone https://github.com/priyankavergadia/Django-Dialogflow-Appointment-Scheduler.git
  1. 切换到包含代码的目录。或者,您也可以下载 zip 文件形式的示例并将其解压缩。
cd Django-Dialogflow-Appointment-Scheduler

部署后,您的应用会使用 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 第二代实例。将该实例命名为“qulls-instance”或类似名称。该实例可能需要几分钟才能准备就绪。准备就绪后,它应该会显示在实例列表中。
  2. 使用 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 用户和数据库。

  1. 使用 Google Cloud Console 为您的 Cloud SQL 实例创建一个名为 polls-instance 的新数据库。例如,您可以输入“意见调查”作为名称。
  2. 使用 Cloud Console 为您的 Cloud SQL 实例创建一个名为 polls-instance 的新用户帐号。

配置数据库设置

  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
  1. 在 Dialogflow 的控制台中,点击 。在常规标签页中的项目 ID 旁边,点击 Google Cloud
  2. 依次点击导航菜单 ☰ &gt;API 和 Service > 凭据
  3. 点击创建凭据 > 服务帐号
  4. 服务帐号详情中,输入“appointment-scheduler”作为服务帐号名称,然后点击创建

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

系统会将 JSON 文件下载到您的计算机,您在后续设置过程中需要使用此文件。

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

要在本地计算机上运行 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. 启动本地 Web 服务器。
python3 manage.py runserver
  1. 在网络浏览器中,输入 http://localhost:8000/。您应该会看到一个如以下屏幕截图所示的简单网页:

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

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

python3 manage.py collectstatic

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

gcloud app deploy

等待消息通知您更新已完成。

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

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

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

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

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

  1. 日历会预订回复。

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

删除 Dialogflow 代理

  1. 点击现有代理旁边的
  1. 常规 (General) 标签页中,滚动到底部,然后点击删除此代理 (Delete this Agent)。
  2. 在出现的窗口中输入 Delete,然后点击删除 (Delete)。

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

了解详情

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