如果您未使用集成,则必须编写代码以实现与最终用户互动。对于每轮会话,您的代码会调用 Dialogflow API 查询您的代理。本指南介绍了如何通过在命令行上使用 REST API 和通过使用客户端库与代理进行互动。
准备工作
如果您不打算使用 API,则可以跳过此快速入门。
在阅读本指南之前,请先完成以下事项:
- 了解 Dialogflow 基础知识。
- 执行设置步骤。
- 执行构建代理快速入门指南中的步骤。以下步骤将继续处理您在该指南中启动的代理。
如果您不再拥有该代理,则可以下载
build-agent-quickstart.zip
并导入文件。
会话
会话表示 Dialogflow 代理与最终用户之间的对话。您可以在对话开始时创建会话,并在每轮对话中使用该会话。对话结束后,您将停止使用该会话。
在同一时间与不同最终用户进行对话时,不应使用同一个会话。Dialogflow 会为每个活跃会话维护当前活跃的上下文。会话数据将由 Dialogflow 存储 20 分钟。
每个会话均由系统生成的会话 ID 唯一确定。您可以在检测意图请求中提供新的会话 ID 来创建新会话。会话 ID 是一个字符串,最长 36 个字节。系统负责生成不重复的会话 ID。它们可以是随机数字、经过哈希处理的最终用户标识符或任何其他便于生成的值。
检测意图
使用 API 进行互动时,您的服务会直接与最终用户互动。对于每轮对话,您的服务均会调用 Sessions
类型的 detectIntent
或 streamingDetectIntent
方法将最终用户表述发送给 Dialogflow。Dialogflow 会使用与匹配意图、操作和参数相关的信息以及针对该意图定义的响应来做出响应。服务会根据需要执行操作(例如数据库查询或外部 API 调用),并向最终用户发送消息。此过程会一直持续到对话结束。
以下示例展示了如何检测意图。每个示例均接受以下输入内容的一部分:
- 项目 ID:使用您在设置步骤中创建的项目的 ID。
- 会话 ID:测试代理时,您可以使用任意会话 ID。例如,“123456789”是示例经常使用的一个 ID。
- 文本:这是指一种最终用户表述或多种最终用户表述。如果提供了多种表述,则示例代码会针对每种表述调用检测意图。尝试输入“I know french”。
- 语言代码:最终用户表述的语言代码。对于此示例代理,请使用“en-US”。
REST
如需检测 intent,请调用Sessions
资源的 detectIntent
方法。
在使用任何请求数据之前,请先进行以下替换:
- PROJECT_ID:您的 Google Cloud 项目 ID
- SESSION_ID:会话 ID。
HTTP 方法和网址:
POST https://dialogflow.googleapis.com/v2/projects/PROJECT_ID/agent/sessions/SESSION_ID:detectIntent
请求 JSON 正文:
{ "query_input": { "text": { "text": "I know french", "language_code": "en-US" } } }
如需发送您的请求,请展开以下选项之一:
您应该收到类似以下内容的 JSON 响应:
{ "responseId": "856510ca-f617-4e25-b0bb-a26c0a59e030-19db3199", "queryResult": { "queryText": "I know french", "parameters": { "language": "French", "language-programming": "" }, "allRequiredParamsPresent": true, "fulfillmentText": "Wow! I didn't know you knew French. How long have you known French?", "fulfillmentMessages": [ { "text": { "text": [ "Wow! I didn't know you knew French. How long have you known French?" ] } } ], "outputContexts": [ { "name": "projects/PROJECT_ID/agent/sessions/123456789/contexts/set-language-followup", "lifespanCount": 2, "parameters": { "language": "French", "language.original": "french", "language-programming": "", "language-programming.original": "" } } ], "intent": { "name": "projects/PROJECT_ID/agent/intents/fe45022f-e58a-484f-96e8-1cbd6628f648", "displayName": "set-language" }, "intentDetectionConfidence": 1, "languageCode": "en" } }
关于响应,请注意以下事项:
queryResult.intent
字段包含匹配的意图。queryResult.fulfillmentMessages
字段的值包含意图响应。这是您的系统应转发给最终用户的响应。queryResult.parameters
字段的值包含从最终用户表达式中提取的参数。queryResult.outputContext
字段包含有效的上下文。
Go
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Java
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Node.js
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
Python
如需向 Dialogflow 进行身份验证,请设置应用默认凭据。 如需了解详情,请参阅为本地开发环境设置身份验证。
其他语言
C#:请按照客户端库页面上的 C# 设置说明操作,然后访问 .NET 版 Dialogflow 参考文档。
PHP:请按照客户端库页面上的 PHP 设置说明操作,然后访问 PHP 版 Dialogflow 参考文档。
Ruby 版:请按照客户端库页面上的 Ruby 设置说明操作,然后访问 Ruby 版 Dialogflow 参考文档。
生产化
在生产环境中运行代理之前,请务必实施生产化最佳做法。