2016 年 11 月

第 31 卷,第 11 期

此文章由机器翻译。

Bot Framework - 通过 Microsoft Bot Framework 解决业务问题

通过 Srikantan Sankaran

人今天全力在线方式或在手机上 — 购买、 销售、 银行、 研究 — 并保持竞争力,企业经常需要改进其应用程序以向客户使用其服务的用户提供最佳体验。这涉及到各种自助服务功能,任何时候提供的便利,随处访问其数据,通常从社交通道,使用语音和消息传送。这是一项挑战,由于各种的应用程序需要考虑在中,而且因为大多数这些应用程序永远不会被设计为处理当今面临的方案。努力弥补这些需要可能都要求涉及相当多的资源的多个并行开发项目。Microsoft Bot 框架,但是,可以轻松地烦恼。

Microsoft Bot 框架提供了一个平台,用于组织可以构建应用程序 — bot —,使用者可以与交互,轻松、 conversationally,通过语音或文本,只要方便。而无需任何额外的开发工作,这些 bot 可以无缝地访问来自多个社交渠道,例如 Skype、 Slack、 Facebook Messenger 等。它们可以使用户能够访问其所有数据从不同的业务线 (LOB) 应用程序,使用 Azure 逻辑应用程序或 Microsoft 流之类的技术合并。现在,这些技术提供使用连接线市场中的所有关键业务应用程序。Azure 搜索服务提供了一个功能强大的 Lucene 引擎,它可用于搜索的数据结构化和非结构化,以灵活的方式。客户可以与自然语言对话时,通过机器人和交互 Azure 语言理解智能服务 (LUIS) 都可以解释下游应用程序以响应这些会话。

在这篇文章和下一步中,我将讨论的方案,说明了今天,组织面临的挑战,并通过利用 Microsoft Bot 框架,它们就可以创建一个解决方案。实现在此方案中涉及的解决方案时,将发现以下参考资料非常有用︰

创建解决方案

窗体背景的这篇文章的业务方案涉及一个提供不同类型的保险政策涵盖车辆、 主页、 旅行和运行状况到使用者的保险机构。使用者可以自行注册 Web 应用程序中使用其 Microsoft 凭据,并提交其请求一个保险策略。在 Dynamics CRM Online,其中配置文件信息被捕获,,然后将保险策略应用程序存储在 Office 365 SharePoint 中注册用户将负责业务流程工作流。组织内的内部工作流过程段时间后,最后导致批准并生成在 Office 365 中存储的策略文档更改的策略请求状态。这些步骤是本文中,而是重点介绍介入时在系统中,捕获的信息的下游集成方案,而与使用者共享的后续更新和状态的范围之外。图 1 描绘了这种情况下该解决方案的体系结构。

解决方案体系结构
图 1 的解决方案体系结构

正在为 Dynamics CRM Online,创建或更新 Office 365 中的策略请求或者正在上载使用 Microsoft 流实现的业务流程中的 Office 365 触发器事件的策略文档中的使用者创建联系人档案文件。通过这些过程中,结构化的数据同步到 Azure SQL 数据库表和非结构化的数据,如策略文档复制到 Azure Blob 存储。Azure 搜索对数据进行爬网按固定间隔,并将其保留为当前用于查询。机器人应用程序部署为 Azure Web 应用程序,通过 Microsoft Bot 框架连接器服务发布。通过连接器服务机器人应用程序连接到 Skype 通道,来检索请求的状态及其保险单,哪些使用者访问下载颁发的策略文档、 计划站点检查访问,依此类推。使用者在保险策略将应用注册使用的 Microsoft 帐户登录。他们可以使用消息 Skype 客户端或语音命令与 bot 进行交互。机器人应用程序可与 LUIS 服务、 一种 Microsoft 认知服务,以解释从使用者进行的对话,并在 Azure Search 上执行查询中可用的多个服务集成。

此上下文中,下面是需要这样做创建解决方案的有︰

  1. 作者业务流程使用 Microsoft 流同步并合并来自不同的 LOB 应用程序的数据。
  2. 配置 Azure 搜索以使其能够从 bot 查询索引合并的数据。
  3. 配置 LUIS 服务和创建并定型模型用于解释 bot 从用户会话。
  4. 构建机器人应用程序使用 Microsoft Bot 框架并使用来自 Skype。

我将介绍这篇文章中的前两个步骤,其余两个下一次。

保险策略请求同步流程

在此示例中,策略请求存储在 Office 365 中的自定义列表。策略请求被插入或更新在批准过程中,调用 Azure SQL Database 中的存储的过程时,将触发绑定到此列表 Microsoft 流进程。独立的 Microsoft 数据流过程都是用于插入和更新方案编写的。

图 2 演示 Microsoft 流设计器如何允许您选择创建或更新的项目或文件时的 Office 365 中的 SharePoint 列表上的触发器事件。

Microsoft 流触发器事件
图 2 Microsoft 流触发器事件

图 3 显示策略请求插入到此列表中时触发的流。Microsoft 流设计器中读取存储过程的元数据,并自动显示窗体根据其输入参数。将光标放在窗体输入字段将启动在右侧所示的卡 图 3, ,显示可以选择从映射到存储过程前面的活动中的属性输入参数。

保险策略请求同步流程
图 3 保险策略请求同步流程

我将创建用于同步更新,以确保策略批准申请的状态会定期从 Office 365 更新到目标 Azure SQL 数据库的其他流。

请注意,在此方案中使用的连接器的每个要求的连接,必须先配置,并具有足够的权限来从 Office 365 SharePoint 站点中的自定义列表中读取数据的用户帐户。同样,Azure SQL Database 连接器要求对数据库进行身份验证的用户凭据。

我可以测试我编写了通过自定义列表中插入一条记录的流。应将数据复制到 Azure SQL Database。

策略文档同步流程

保险策略请求经过审批后 (在上的后台进程,则超出了本文的范畴完成),生成并上载到的文档库中 Office 365 SharePoint 策略文档。Microsoft 流然后将策略文档复制到 Azure Blob 存储中。要在 Azure 存储中插入一个新文档并替换原始文档,如果将 Office 365 中更新,都被编写单独的 Microsoft 流进程。该文档包含某些键词,如正在投保,例如的汽车注册数。更高版本在文章中,我将使用 Azure Search 执行基于特定关键字的文档中的全文搜索。图 4 显示 Microsoft 流实现,以便同步 Office 365 中第一次上载的文档。

策略文档同步流程
图 4 策略文档同步流程

我可以通过将任何文档上载到 SharePoint 文档库来测试流。这些文档应复制到流中配置的 Azure 存储容器。

客户配置文件数据同步

当客户首先注册与保险商时,Dynamics CRM Online 中创建联系人。Microsoft 流然后将触发的 Dynamics CRM Online 连接器用于提取该联系人并将其插入到 Azure SQL Database。图 5 显示可以如何实现这一过程。

联系人的数据流
图 5 联系人数据流

请注意,您必须使用有权连接到组织和一个安全角色,允许对数据的访问的用户凭据首先,配置到 Dynamics CRM Online 的连接。此外,您应启用更改跟踪,Dynamics CRM Online"插入事件"的位置被捕获,即,在这种情况下,联系人表中的表。

 Microsoft 流,您可以查看进程执行,提供有关请求和响应与在其中的每个活动相关信息的结果。

图 6 显示联系人数据同步过程的结果。选择左侧的活动将一张卡打开输入和输出负载的详细信息,如右侧所示。

流的执行
图 6 数据流执行

若要测试此流程,我可以从 CRM Online 门户创建一个联系人。应获取联系人数据复制到 Azure SQL Database。

更高版本,我将使用联系人数据以确定用户登录到 Skype bot 并检索用户的保险策略应用程序请求的批准状态。我将使用联系人的信息来计划从 bot 亲临现场检查。

准备搜索数据源

我已经实现合并从所有不同 LOB 应用程序,数据的过程但是我需要完成某些步骤,然后我使用 Azure Search 中的数据。

启用更改跟踪在 Azure SQL Database 中︰ Azure Search 使用 Azure SQL Database 的内置索引器以爬网数据并生成索引。更改跟踪需要启用的数据库以及所有表,以便 Azure 搜索不会执行一个重新开始的索引,在其上生成每次︰

ALTER DATABASE PolicyInfoDB SET CHANGE_TRACKING = ON
(CHANGE_RETENTION = 2 DAYS, AUTO_CLEANUP = ON);
ALTER TABLE CrmCustomerData ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = OFF);
ALTER TABLE PolicyRequests ENABLE CHANGE_TRACKING
WITH (TRACK_COLUMNS_UPDATED = OFF);

您还可以跟踪在索引过程中,通过配置中删除数据库表中的记录和 Azure 存储空间中的文档。

配置 Azure 搜索索引 PolicyRequests 和 CrmCustomerData 表︰ 使用 Azure 门户为您的搜索,创建一个实体,然后选择从 Azure SQL Database 选项导入数据。向导将指导您完成的过程连接到数据库,创建数据源进行搜索,采样来读取元数据的数据,以及选择必需的属性,若要使用,并具有索引结束刷新计划。为每个表配置单独的索引。图 7 显示数据库的搜索索引配置页。

配置 Azure 搜索索引数据库表
图 7 配置 Azure 搜索索引数据库表

Azure Search 配置页检测要编制索引的数据库表上启用更改跟踪。我已将索引的频率设置为每小时;其他选项一次,包括每日和自定义。

索引配置后,Azure 搜索会立即触发对数据源的索引操作。您可以检查以查看已填充到索引中的记录数的每个索引的状态。

Azure Search 设置边栏选项卡提供了搜索资源管理器,使您可以轻松设置搜索参数、 查看结果和验证配置。

配置 Azure Search 索引的策略文档︰ 配置 Azure 搜索将搜索和索引 Azure 存储 blob 是非常类似于上面描述的数据库配置,不过我必须说明这一次此功能是在仍处于预览中。

更高版本在本文中我将使用 Azure Search 的基于策略文档生成日期和车辆注册号码之类的关键字的文档来查询,其存储在文档中。Azure 搜索支持 Apache Lucene 查询语言的说明进行操作,它提供高级查询功能。

请注意,blob 存储的属性,metadata_storage_last_modified,即日期-时间字段。对应的索引器匹配到,Azure 搜索中的数据类型是 Edm.DateTimeOffset、 这并不搜索。由于我希望能够检索基于颁发的年度策略文档,这必须是一个可查询的字段。

若要解决此问题,我可以更改索引中的数据类型为 Edm.String,这是可搜索。但是,由于索引器使用此字段作为一个标志,以确定文件是否已更改自最后一次索引操作以及是否它应当索引再次,我将风险更改的数据类型而中断该功能。

相反,我可以将补充字段添加到要存储使用 Edm.String 数据类型的相同值的索引。但是,这意味着我无法使用 Azure 门户用户体验来配置该索引,因为它不允许自定义将从 Azure 存储空间的字段映射到索引的逻辑。

为避免这一问题,我将使用 Postman 客户端 (getpostman.com/apps),作为免费可下载工具,以调用 Azure 搜索服务 REST Api,并完成以下任务︰

  • 创建数据源︰ 这可以完成从 Azure 门户或使用 REST API 从 Postman 客户端。
  • 配置索引︰ 由于我要手动在索引中定义字段,我可以提供比默认搜索配置的用户更友好的名称。"Filepath"字段将设置为在索引中的键字段。请注意为上次修改日期,一个基于 Edm.DateTimeOffset 和 Edm.String 上另有两个占位符字段︰
{
  "name" : "policydocuments-index",
    "fields": [
      { "name": "filepath", "type": "Edm.String", "key": true,
        "searchable": true },
      { "name": "content", "type": "Edm.String", "searchable": true },
      { "name": "filesize", "type": "Edm.String", "searchable": true },
      { "name": "author", "type": "Edm.String", "searchable": true },
      { "name": "filename", "type": "Edm.String", "searchable": true },
      { "name": "lastmoddate", "type": "Edm.String", "searchable": true },
      { "name": "contenttype", "type": "Edm.String", "searchable": true },
      { "name": "modifieddate", "type": "Edm.DateTimeOffset",
        "searchable": false }
      ]
}
  • 创建索引器,并将字段映射︰  此步骤中创建索引器、 定义索引计划和 Azure 存储空间中的字段映射与上一步中定义的索引︰
{
  "name" : "policydocuments-indexer",
  "dataSourceName" : "policiesrepodatasource",
  "targetIndexName" : "policydocuments-index",
  "schedule" : { "interval" : "PT2H" },
    "fieldMappings" : [
           { "sourceFieldName" : "metadata_storage_name",
             "targetFieldName" : "filename" },
     { "sourceFieldName" : "metadata_storage_size",
       "targetFieldName" : "filesize" },
     { "sourceFieldName" : "metadata_author", "targetFieldName" : "author" },
     { "sourceFieldNambe" : "metadata_storage_last_modified",
       "targetFieldName" :
       "modifieddate" },
     { "sourceFieldName" : "metadata_storage_last_modified",
       "targetFieldName" :
       "lastmoddate" },
     { "sourceFieldName" : "metadata_content_type",
       "targetFieldName" : "contenttype" },
     { "sourceFieldName" : "metadata_storage_path",
       "targetFieldName" : "filepath" }
  ],
  "parameters" : { "base64EncodeKeys": true }
}

现在我可以使用在门户中的 Azure Search 资源管理器以验证确实已建立索引的文档,并按预期方式映射的属性值。

实现此方案的软件先决条件

除了具有所需的 Azure 订阅来实现所述的方案在这里,您还需要以下开发工具和其他软件︰

  • SQL Management Studio for SQL Server 2014 或更高版本来创建和连接到 Azure SQL Database。
  • Dynamics CRM Online 订阅,可以连接到组织联系人中,将创建,必须要读取联系人表的所需的安全角色的用户帐户。应在此表,以便它对函数的"在创建"触发器上启用更改跟踪。
  • 对 Office 365 SharePoint 站点和用户帐户的到该站点的参与讨论权限的访问。
  • 工作帐户登录和创作用于数据同步使用 Microsoft 流的业务流程。要开始使用它在 flow.microsoft.com
  • 若要使用 LUIS 服务时,注册与你的工作帐户 (或 Microsoft 帐户) 在 luis.ai。在这篇文章的第二部分,我将使用此服务进行建模这篇文章中提到的对话。

注意: Microsoft 流处于在撰写本文时,预览并不能在此时处理的异常、 实现重试逻辑或操作背后的处理流程的代码。使用 Azure 逻辑应用程序,以及它除了提供 Microsoft 流的所有功能支持附加功能,例如异常处理,并使用代码编辑器中处理的流和详细信息,可创作显示在此方案中的所有进程。

执行该方案

运行端到端这种情况下需要允许客户使用其 Microsoft 凭据注册和提交保单申请的 Web 应用程序。此应用程序然后会创建一个联系人在 Dynamics CRM Online 中生成一个联系人 ID 和使用 Office 365 中的列表中创建此保险策略请求中的值。但是,因为这样的应用程序的值超出本文的讨论范围,您必须手动和单独执行这些步骤。

登录到 Dynamics CRM Online 门户并创建一个联系人。确保对于客户,捕获详细信息,如移动电话号码和 Microsoft 帐户如这些更高版本时需要使用 bot。Microsoft 流绑定到 Contacts 表会触发,调用 Azure SQL Database 中的存储的过程,然后 CrmCustomerdata 表中插入客户记录。记下的下一步的表中存储的客户 ID 值。

在 Office 365 的 SharePoint 自定义列表中手动创建的保险策略请求。确保的客户在请求中捕获的客户在 Dynamics CRM Online 中生成的 ID。图 8 何处捕获请求的 SharePoint 中显示的列表。当保存该记录,或更新批准过程中更高版本时,将会触发 Microsoft 流进程绑定到此列表。确保策略请求被复制到 Azure SQL 数据库 PolicyRequests 表。

Office 365 列表中的保险策略请求
Office 365 列表中的图 8 保险策略请求

接下来,创建 PDF 文档示例,并确保它们包含车辆标识或注册编号,以在文档搜索期间使用。将这些文档上载到绑定 Microsoft 流程文档同步到 SharePoint 库。验证这些文档都复制到流中配置的 Azure 存储帐户。

手动运行索引器以确保在前面的步骤中同步的数据进行索引并且可用于进行搜索。启动 Azure 搜索资源管理器和查询中的每个表和策略文档上载并确保它们在搜索结果中返回的记录。

机器人应用程序中的自然语言语句

用户在 Skype 或其他渠道 bot 可以键入在自然语言样式,然后解释 bot,应在其请求中标识用户的意图和实体,并查询 Azure Search,并提取结果。当前应用场景,bot 应该以涵盖所有可能的方法及其用户无法与之进行交互和会带来问题的状态及其保险策略请求,或从先前的年份下载其已批准的策略文档或查询的策略文档。下面是一些示例 bot 应该能够解释的语句︰

  • 我的保单申请的状态是什么?
  • 我的策略请求 # VehPol0101 获得批准
  • 是否有我保险策略请求 # VehPol0101 的更新?
  • 向我显示我的策略文档。
  • 让我打开策略文档。
  • 让我打开为车辆上一年的策略文档 # KA 02A 8534。
  • 向我显示工具的策略文档 # KA 02A 8534 颁发在 2014 年。
  • 可以安排星期二亲临现场检查车辆的下周 # KA 02A 8534?

在下一篇文章中,我将构建 bot 自然语言支持应用程序。若要这样做,我将创建一种 LUIS 模型,将注册这些自然语言语句,训练它来标识用户意图,并确定支持的参数或用来查询 Azure 搜索服务的实体。

可供下载的项目

用来实现这种情况下的以下项目是可从处的 GitHub 存储库下载 bit.ly/2cOfANh:

  • Azure SQL 数据库表创建脚本 CrmCustomer 和 PolicyRequests 表。
  • 在前面的数据库表中使用的存储的过程。
  • 存储策略请求,Office 365 列表的架构,其中上载的策略文档的文档库的屏幕快照。

我将上载到同一位置的下一篇文章与相关的其他项目。

总结

组织如今处理各种需要一起工作来解决其业务问题的应用程序。这通常是一项挑战,因为整个企业,因此很难合并,并将完全使用者进入分发信息。Microsoft 流有助于合并跨整个企业中的信息,Azure 搜索提供了一个灵活和丰富的查询引擎用于访问数据。没有只是一个服务接口,以集成在一起使用可呈现的所有信息,从而减少构建和部署客户端应用程序的时间。 

在本系列文章的第 2 部分中,我将使用从面向消费者的应用程序,如 Skype bot 公开 Azure Search 的信息。若要这样做,我将创建一个 LUIS 模型来解释来自 bot 用户消息和 Azure Search 将它们转换为结构化请求。


Srikantan Sankaran 是从在印度,定居于 Bangaluru DX 团队的技术推广人员。 他在印度的大量 Isv 的合作并帮助他们构建和部署 Microsoft Azure 上他们的解决方案。与他联系。 sansri@microsoft.com

衷心感谢以下 Microsoft 技术专家对本文的审阅: Sandeep Alur 和 Paul Bouwer
Sandeep Alur 是 DX 印度导致推广人员,定居于班加罗尔。

Paul Bouwer 是从技术推广和开发团队的高级 SDE,定居于布里斯班。