如何写一个SAP的聊天机器人,科学怪人风格

主页 » SAP文库 » Cloud

作者 Trond Stroemme 2017-10-05    839

 

  Chatbots是热门话题之一 - 每个人似乎都想要一个,或者一个人工作,或者希望他们有一个。在这篇博客中,我将展示如何创建一个简单的聊天机器人与SAP Netweaver Gateway OData服务进行交互。我会提到几个聊天机器人平台,并用其中的一个创建示例,但这不是对特定工具或平台的批准或推荐而损害他人。我的目标是展示SAP的OData服务的技术协调(实际上,我们将触及SAP-CP上的XSJS服务和经典的ABAP驱动的OData),并指出一些可能会绊倒的"陷阱"一路走来。  

 

  先决条件:关于聊天机器人,Javascript和XSJS的基本知识,关于http请求的一些知识,ABAP网关服务,OData和......嘿,让我们开始吧?我会尽力解释一些东西。如果我不这样做,或者只是以一种不完全的方式来做,请随时提问!  

 

  放弃  

 

  这不是一个完整的,完全工作的,超适应的超酷聊天机器人,能够回答你可能想要抛出的任何问题 - 但更多的是如何将一些聊天机器人构件缝合在一起的例子。希望你能够有足够的经验去做类似的事情。  

 

  对。让我们开始吧。  

 

  场景:您在早上走进办公室,启动电脑,开始检查您的采购订单。在询问了第五杯咖啡和第二杯咖啡的一半之后,你停下来一会儿。一个想法打击了你的咖啡因疯狂的大脑。 "哼。如果我可以问一个人,而不是自己做这个乏味的任务,这不是很好吗?"  

 

  有人 - 或者其他东西。这是一个会话应用程序的典型场景 - 聊天机器人。  

 

  我们将创建一个可以检索有关采购订单信息的聊天机器人。我们会询问chatbot问题,例如"我目前的采购订单是什么"或"采购订单编号X的预计交货日期是什么"。 (实际上,为了简单起见,我们现在要坚持第一个问题;我有一种明确的感觉,这个博客将会很长 - 尽管如此,但我会为第二个问题提供一些线索,作为好)。  

 

  以下是我们需要的组件:  

 

   OData服务   

   chatbot框架   

   SAP云平台   

   一些不错的开发者工具 - 比如谷歌邮差   

  步骤1:创建一个OData服务  

  我们将开始为采购订单创建OData服务。当然,我们可以为我们想要的任何东西创建服务 - 如果您的用例不同,那就好!另外,如果你已经拥有一项服务,那就好了。用它!  

  ABAP OData服务是使用网关服务构建器创建的,事务SEGW(或"Segway",正如我亲切地称之的)创建的。描述如何做到这一点有点超出了本博客的范围,所以我只会轻描淡写地谈论它。在我们的例子中,我们首先看看业务对象库或事务BAPI。在这里,我们可以搜索系统中的任何业务对象,并检查现有的信息检索方法。  

    

  我们找到了我们想要的对象 -  PurchaseOrder  - 并选择了合适的方法。  

  (在这一点上,如果你是一个真正的挑剔者,你会注意到GetDetail的方法GetDetail1取代了NW 7.02,与我们的用例无关,但清楚地表明对细节缺乏关注代表作者......)  

  无论如何,测试我们的功能显示了一些结果(我已经使用了一个现有的采购订单编号,我可以方便地从表EKKO中检索作为输入参数)。  

    

  现在,我们所要做的就是启动Segway,uhm,SEGW,并根据相关功能模块BAPI_PO_GETDETAIL生成一项新服务。  

    

  我们使用SEGW向导从功能模块创建必需的实体类型:  

    

  然后,我们选择我们的服务中需要哪些函数返回参数:  

    

  顺便说一句,这显然是过分的 - 但是,嘿,我试图创建一个非常通用的PO服务,它将能够检索,一切。  

  我将跳过实体集创建过程的其余部分;可以说您需要记住为此结构中的所有"节点"设置关键属性,并且确保将相关字段定义为"可空"并且可以搜索/排序。第一件事情特别重要,因为如果在调用服务时某些字段返回空白,您将以其他方式结束错误消息。  

  但作为一名经验丰富的Gateway开发人员,您可能已经知道了,对吧?  

  最后,我们有我们的模型和数据提供者类:  

    

  剩下的工作是重新定义数据提供者类的GET_ENTITYSET(和GET_ENTITY)方法 - 同样,Gateway服务开发人员应该知道这一点。老实说,你没有来这里,你来这里是为了聊天魔法!  

  最后,我们在网关盒子上注册新的服务 - 这可能是一个单独的系统。  

  我将仅显示最终的网关截图 - 使用网关客户端测试我们的新服务:  

    

 

  更多细节:  

    

  太棒了 - 我们的服务已经启动并正在运行。现在,谈谈有趣的东西 - 聊天机器人。  

 

  第2步:创建聊天机器人  

  在这个例子中,我们将使用一个比较流行的chatbot框架:API.ai.这个chatbot框架有其优点和缺点,就像其中大部分一样 - 我们稍后会遇到一个小问题。现在,我们来关注构建chatbot。  

  API.ai正在我们的浏览器中运行 - 无需在本地安装任何东西。只需去API.ai,看看chatbot编辑器的美丽:  

    

  如果您是聊天机器人的新手,这可能会对您有所帮助。让我们停下来,深吸一口气,并解释。  

  聊天机器人通常使用"意图"和"实体"。意图是我们用户想要做的事情,比如"订购机票"或"找到最近的餐馆"。这些实体就像这些意图的参数或属性。 "订购机票"的实体可能是"日期"或"目的地"。通常情况下,chatbot会在提交动作之前尝试检索与某个意图相关的所有实体,例如为您订购机票。如果构建得当,它会提出问题,直到它获得所需的所有信息 - 或者如果它不能理解用户,就会一路卡住。  

  对于我们的chatbot,我们定义了两个意图:GET_PO_INFO和GET_PO_LIST。 (另外,正如你所看到的,我们在API.ai库中增加了一些标准意图 - 这些都是小写的,这使得我们的聊天机器人可以覆盖主题,比如人们开始讨论其他主题时比如"你真的很有趣",或者"你一定是最无聊的聊天机器人"。  

  在API.ai中,意图看起来像这样:  

    

  在这里,我已经输入了用户可以表达他/她希望获得购买订单列表的方式的一些变化。为了这个例子,我限制了自己的几个发言 - 通常,你会发现你的用户在尝试表达意图时非常有创意......  

  再往下看,我们可以看到这个意图的其他属性:  

    

  这里没有太多,真的。如前所述,API.ai为您提供了将实体添加到您的意图的选项。例如,如果这是FIND_ME_A_RESTAURANT意图,我们可以添加实体"MEAL_TYPE"和"LOCATION",并将它们设置为上面的"必需"。这会迫使聊天机器人问你"你想要什么类型的食物"以及"你喜欢什么位置"。你可以使你的谈话尽可能复杂 - 但为了我们的目的,我们不需要任何实体。我们只想获得一些采购订单!  

  (注意:API.ai作为一个框架,正如我已经说过的那样,非常容易学习,请原谅我在这里不提供API.ai 101课程 - 您应该能够轻松掌握基础知识)。  

  我们想要关注的是上图中的蓝色复选框:表示"使用webhook"的复选框。  

  这是它变得酷的地方!  

  现在,我们必须找到一种方法让chatbot向SAP网关发出请求。  

  这是在API.ai中使用webhook完成的。一个webhook基本上是一个web服务 - 你用一些参数调用它,然后得到回复。我们的网关服务将作为我们的webhook。我们将使用特定的用户标识调用它,并获取采购订单清单。什么可能会出错?  

  首先要做的事情。注意蓝色复选框上方的"完成"一词? API.ai的术语"或多或少地反映为webhook的回应"。我们的chatbot编辑器中的Fulfillment选项卡是我们定义实际Web服务调用并处理结果的地方。我们点击左侧菜单栏上的"完成":  

    

  这将我们带到履约屏幕(足够逻辑地):  

    

  在这里,我们只需要插入我们的网关服务的URL!  

 

  第3步:我们卡住的地方  

  哈!你真的说"只需要..."?  

  再想一想。  

  我谈到了利弊,对吧?这个聊天机器人建立器是一个用来设置聊天机器人对话的魅力,但是当涉及到使用网络服务......好吧,让我们说,这有点"挑剔"。  

  API.ai网络调用必须遵守非常严格的规则。从文档:  

    

  对。就格式而言,这不完全是我们的采购订单服务返回的结果。  

  更糟糕的是,要让我们的服务能够返回任何远程遵守这种格式的东西,可能不会很容易。  

  这也不是真的,真的。你希望你的OData服务按照协议本身提供的标准格式返回数据,而不是将其调整为适合一个聊天机器人框架的适合chatbot的本地格式。  

  反思时间。  

  在这里,像Kore.ai这样的其他框架可以灵活地执行服务调用,然后以任何您想要的方式处理响应,例如,以编程方式处理。  

 

  第四步:我们在哪里认真思考  

  那么,我们来了一个公平的方式。我们不能放弃,不是吗?再来一杯咖啡,再深吸一口气,想一想。  

  我们不能在API.ai内部格式化响应,我们也不能(在网关方面)轻松地做到这一点(如前所述,我们不应该,真的,因为这意味着为聊天机器人创建一组单独的服务除了用于例如UI5的经常消费的服务之外)。  

  但是,我们可以做的是在其他地方重新格式化服务回复。  

  我们所要做的就是将SAP云平台融入其中,并为我们做好工作。  

  在SAP-CP上构建XSJS服务允许我们从SAP-CP执行到Gateway的服务调用,然后从API.ai调用XSJS服务。 XSJS服务将采取来自Gateway的"标准"OData响应,并将其重新格式化以供API.ai使用。  

  多么辉煌,有点复杂的想法。  

  同样,如前所述,其他一些聊天机器人框架可以让我们在内部完成这项工作。但API.ai易于使用,易于部署,并且是其中的一个"大",所以让我们暂时坚持下去。  

 

  第5步:我们试着让自己稍微陷入困境  

  让我们快速在SAP-CP中创建一个中间人。各种谈判代表。翻译员。一个很好的逻辑接收来自chatbot的调用,将它们传递给Gateway,接收答复,并重新格式化以将其传递回API.ai.  

  我们需要以下成分:  

   描述我们的网关URL的xshttpdest文件   

   带有一些Javascript逻辑的XSJS服务执行"协商"部分   

   XS服务需要普通的.xsaccess和.xsapp文件   

   有些人在XS Admin客户端中工作,以设置验证参数   

  我们首先在SAP_CP的适当包中建立名为GetPOList.xsjs和gateway.xshttpdest文件的服务:  

    

  xshttpdest文件的内容基本反映了我们网关系统中SAP-CP的"目标"配置中已经存在的连接参数:  

    

  我们需要创建此文件的原因是因为XSJS服务无法与在SAP-CP上定义的现有目标一起使用。我们需要在每个XSJS项目中手动重新定义目的地 - 与我们的服务文件位于同一个文件夹内。如上所示。然后,我们在创建连接时参考我们的XSJS代码中的xshttpdest文件。  

  关于我们的XSJS服务。这里是代码(我稍微改变了连接参数):  

本文原始地址:http://51itbooks.com/sap/theme/1030.html

转载请注明出处来自 IT文库

上一篇

AA固定资产|概述

下一篇

使用SAP智能业务服务进行预测分析