来自 Google 的对话流(早先称为API.ai)是开发多个平台聊天机器人的绝佳平台。早些时候,当Dialogflow被称为API.ai时,他们有一个Android和iOS客户端库,用于将聊天机器人集成到移动应用程序中。但在合并到谷歌之后,现有的图书馆没有得到更新;相反,我们看到Dialogflow被添加到谷歌的云平台,一个新的基于Java的客户端API正在开发中。

Dialogflow

在本文中,我将向您展示如何使用新的 Java 客户端 API 集成在 Dialogflow 中开发的聊天机器人。

1. 首先,我们将创建一个对话流代理,我们将命名 FirstActionApp。

请点击此链接

FirstActionApp

第一行动应用程序

注意:对话流 V1 API 将于 2020 年 3 月 31 日关闭。

因此,我们正在创建一个具有 V2 API 版本的对话框流应用。此映像中的服务帐户用于为 Java 客户端 API 创建凭据。

V2 API

V2 API

对于使用 V1 API 创建聊天机器人,我们使用用于集成 Android 客户端库的客户端访问令牌。要使用 V2 API 创建聊天机器人,我们必须使用服务帐户

Select application

选择应用程序
  • 使用对话流集成创建新密钥并下载创建的 JSON 文件。

2. 现在,我们将创建意图和实体来培训代理。

Intents

意图

Tracks

轨道

  • 添加同义词以捕获轨道值。

Adding tracks

添加轨道

Create parameter to fetch track

创建要提取轨道的参数

  • 创建要提取轨道的参数。

Create responses

创建响应

Add responses

添加响应

  • 启用 Webhook 调用通过 Web 服务部署代码,以向用户提供数据。

Add webhooks

添加网络钩子

默认情况下,代理使用静态响应响应匹配的意图。如果您使用的是集成选项之一,则可以使用履行提供更动态的响应。当您为意图启用履行时,Dialogflow 会通过调用您定义的服务来响应该意图。例如,如果最终用户希望安排在周五理发,您的服务可以检查您的数据库,并响应最终用户周五的可用性信息。

  1. 最终用户类型或说表达式。

  2. 对话框流将最终用户表达式与意图匹配并提取参数。

  3. 对话框流向 Webhook 服务发送 Webhook 请求消息。此消息包含有关匹配意图、操作、参数和为意图定义的响应的信息

  • 您的服务向对话框流发送 Webhook 响应消息。此消息包含应发送给最终用户的响应。

  • 对话框流向最终用户发送响应。

  • 最终用户看到或听到响应。

  • 3. 创建云函数履行以处理 Webhook 请求。根据检测到的跟踪编号,将向用户发送适当的响应。

    Cloud function fulfillment

    云功能实现

    Dialogflow 控制台具有一个内置的代码编辑器,称为内联编辑器,可用于创建履行代码并将代码部署到 Firebase 的克鲁特函数。内联编辑器用于简单的履行测试和原型设计。准备好构建生产应用程序后,应创建 Webhook 服务。

    4. 现在我们的代理已经准备好了,我们现在将集成到Android应用程序。在 build.gradle(应用)中,我们将添加 Android 客户端库和 Java 客户端 API 的依赖项,因为我们将为这两者开发。

    Java

     

    xxxxxxx
    1
     
    1
    实现"com.google.云:google-云-对话流:0.67.0-阿尔法"

    5. 聊天机器人将在 Android 活动的 onCreate 方法中启动。我们将首先使用客户端访问令牌或使用 JSON 密钥配置对话流代理。然后使用唯一 ID 创建新会话,然后使自动程序准备好与用户通信。

    • 无法使用客户端访问令牌,因为 V1 API 已使用该令牌。

    • 我们使用的是 V2,因此,我们将使用 JSON 密钥。

    Java

     

    27

    1
    私人空隙initV2聊天机器人() |
    2
    尝试|
    3
    输入流流=获取资源()。打开原始资源(R.原始test_agent_credentials);
    4
    谷歌凭据credentials+谷歌凭据从流);
    5
    字符串项目 Id= ((服务帐户凭据凭据获取项目 Id();
    6
    生成器设置生成器 = 会话设置新建筑商();

    7
    会话设置会话设置=设置生成器设置凭据提供程序固定凭据提供程序.创建凭据) )。生成();
    8
    会话客户端=会话客户端创建会话设置);
    9
    会话=会话名称项目Uuid);
    10
    捕获例外e) |
    11
    e. .打印堆栈跟踪();
    12
    }

    • test_agent_credentials 是我们从服务帐户下载的第一步中的 JSON 文件。

    • 我们有复制和粘贴该文件在目录应用程序 -> res -> 原始(新目录) 和粘贴。

    6. 我们将以异步方式处理与聊天机器人的通信。我们将在将 AsyncTask 用户的请求查询作为请求发送到聊天机器人并捕获响应的地方执行此操作。

    Java

     

    1
    公共请求JavaV2Task扩展了异步任务<虚空Void检测意图响应>
    2
    活动活动;
    3
    私有会话名称会话;
    4
    私人会话客户端会话客户端 ;
    5
    专用查询输入查询输入;
    6
    请求JavaV2任务Activity活动会话名称session会话客户端会话客户端查询输入查询输入) [
    7
    活动 = 活动;

    8
    这个会话=会话;
    9
    这个会话客户端=会话客户端;
    10
    这个查询输入=查询输入;
    11
    }
    12
    @Override
    13
    受保护的检测意图响应在背景中空隙voids) |
    14
    检测意向请求检测意向请求 |

    16
    检测意向请求新建筑商()
    17
    .设置会话会话)。到字符串())
    18
    .设置查询输入查询输入
    19
    .生成();
    20
    返回会话客户端检测意图检测意图请求);
    21
    e.打印堆栈跟踪();

    23
    }
    24
    返回null;
    25
    }
    26
    
    
    27
    @Override
    28
    保护的无效在邮政执行检测意向响应response) |
    29
    主要活动)。回调V2(响应);
    30
    }

    7. 用户可以使用 EditText 从 Android 应用发送查询,响应将显示在 TextView 中。

    Java

     

    xxxxxxx
    1
    27
    私人空消息sendMessage视图view) |

    2
    字符串msg=查询编辑文本获取文本()。到弦();
    3
    如果(msg.修剪()。为空()) |
    4
    吐司放大缩小字体功能放大缩小字体功能这个"请输入您的查询!吐司LENGTH_LONG)。显示();
    5
    否则[
    6
    显示文本视图(msgUSER);
    7
    设置文本("");

    8
           
    9
    // Java V2
    10
    查询输入查询输入=查询输入新建筑商()。设置文本文本输入新建筑商()。设置文本msg)。设置语言代码"en-US") )。生成();
    11
    新的请求JavaV2任务主活动会话会话客户端查询输入执行();
    12
    }
    13
    
       }
    [ ' 数据朗 = "文本/X-java" |

    xxxxxxx
    1
    17
    9
     
    1
    公共空回拨V2检测意图响应response响应) |
    2
    如果响应! =) |
    3
    字符串自动回复 = 响应获取查询结果()。获取完成文本();

    5
    显示文本视图机器人回复BOT);
    6
    否则[
    7
    显示TextView("有一些沟通问题。请重试!机器人;
    8
    }
    9
    }

    Comments are closed.