SAP ChatBot助手-简单库存查询

“ 2019,就用这个简单的例子,希望新的一年能保持学习,并把所学应用起来。”

记得瓦尼塔在会上滔滔不绝的在说他的设想,未来只要对电脑说说话,订单就创建好了,就和供应商下订单了,就能看报表了。

虽然大家听着都觉得这个是笑话。但是我当真了。


01 — 故事

人物:A是大型机械设备维修工程师时间:凌晨3点钟,地点:码头大型起重设备旁情景:由于事发突然,工程师手头并没有配件,总公司订单中心人员的电话又打不通。情况:无数的集装箱等着装车,船老大等着开船,争取能赶上船期。

一个字:急。货物的滞留,不光会产生直接的滞纳金,无法按期交货。间接损失也很大。

那怎么办?工程师A一个个电话打,把能打的电话都打一遍。最好下一个电话,配件就能有着落。马上上路,送过来。

现在我们分析下,如果电话打通了,找到了对的人。应该如何处理。

  1. 先检查下离码头最近的仓库是哪一个?
  2. 这个仓库里有没有配件(或替代件)。有万事大吉,实在不行自己开车连夜送过去。
  3. 如果没有就要去上一级仓库调货。这样就要联系总仓的相关人员检查库存,安排出货。

大晚上要找齐所有相关的人员,订单中心,仓库,物流。

如果这个时候,工程师的手机,有这样一个工作助手。能够帮忙检查库存,并通知司机立马取货送货。

万分火急之时,工程师能自信的说,市里有库存,司机已经在来的路上了。


02 — 如何实现

工程师手机里的工作助手。

工作助手在手机里。- 工作用的微信。

工作助手能无时无刻提供服务。 - 那必须是ChatBot

提供工作内容方面的支持。 - 检查SAP数据

为了能够相应工程师晚上发的微信信息。这里我们就需要使用到一个open source的python库wxpy。在服务端实时监控并响应突如其来的工程师的信息。

wxpy https://github.com/youfou/wxpy

这里我们知道通过wxpy这个组件,我们可以实时监控工程师的信息,但是我们如何让冷冰冰的电脑明白工程师说的是啥?只要正确的明白工程师说的东西,才能真正帮到工程师。这里我们使用到的是open source.

ChatterBot https://github.com/gunthercox/ChatterBot

我们可以通过最机器人进行训练学习,让机器人明白工程师说的内容。并扮演好相关工作人员处理相关事务

检查SAP数据。比如查库存。只要通过OData就能实现。

我们通过对三个工具(wxpy, chatterbot, odata)的整合,就能实现这样的应用。

03 — 实现过程

根据01讲的故事,我们已经知道了工作需求。通过02我们已经知道,我们需要那些技术去帮助实现这个需求。

接下来我们要讲讲如何实现这个方案。

下面我会讲下如何安装包,如何通过使用wxpy,如何训练使用chatterbot.最后将他们粗糙的整合起来。

首先我们需要通过Anaconda安装所需要的包。

  1. 创建新的安装环境。
SAP ChatBot助手-简单库存查询

b. 打开终端。

SAP ChatBot助手-简单库存查询


c. 安装wxpy和chatterbot

SAP ChatBot助手-简单库存查询


SAP ChatBot助手-简单库存查询


就如此简单的几句话,地基就打好了。想不到吧,万事开头难。真正做了才发现其实挺简单的。

如何使用wxpy给文件传输助手发一条信息

SAP ChatBot助手-简单库存查询

运行程序,登录微信后,就会自动发送一条信息Hello from wxpy给文件助手

SAP ChatBot助手-简单库存查询

训练chatterbot,让chatbot看的懂那些话是让他查库存。

  • 首先我需要叫机器人打招呼。
  • 当我们Hi或者Morning的时候,他就会告诉我们他是一个subsidiary system assistant.
  • 通过如下代码会训练机器人,训练后简单的问答Hi,就会回复 -- 看上去像hard code.
SAP ChatBot助手-简单库存查询

  • 接下来我们需要训练他,material number xxxxx stock的时候就要去call SAP API.
  • 针对问库存的问答,我们需要写如下的问答训练集。
  • 由于现场工程师问助手的方式会是前期八怪的,所以这里我们会训练各种各样的回答训练集
SAP ChatBot助手-简单库存查询


然后我们问机器人另一个物料的库存情况,和训练集不通的物料,不通的问法(有额外的字符串)

<material number 860123211 stock (Text)>

SAP ChatBot助手-简单库存查询

Odata Call SAP. 这里推荐使用POSTMAN. 简单的从mard里抓取数据

SAP ChatBot助手-简单库存查询

最后我们要做的就是把这些准备好的碎片功能整合起来。 :)


SAP ChatBot助手-简单库存查询


代码如下
#!/usr/bin/env python3.5
from wxpy import *
from chatterbot import ChatBot
from chatterbot.trainers import ChatterBotCorpusTrainer
import requests
import json
import re
chatbot = ChatBot("deepThought")# 用于回复消息的机器人
chatbot.set_trainer(ChatterBotCorpusTrainer)
chatbot.train("chatterbot.corpus.chinese")# 使用该库的中文语料库
chatbot.read_only = True
bot = Bot(cache_path=True)# 用于接入微信的机器人
my_friend = bot.friends().search(u'小悠悠')[0]
my_friend.send('Hi man, ')
@bot.register(my_friend)
def reply_my_friend(msg):
 print(msg)
 res = ''
 chatres = chatbot.get_response(msg.text).text
 print(chatres)
 if chatres == '123 PC in 0740.':
 input_item = msg.text
 input_item = re.findall(r"\d+\.?\d*", input_item)
 # 829221375
 print(input_item)
 url = "xxxxxxxx(Werks='0001',Lgort='0002',Matnr='" + \
 input_item[0] + "')"
 print(url)
 querystring = {"$format": "json"}
 payload = ""
 headers = {
 'Authorization': "Basic Q04xMTAwMDoyMzQ1NmFBIQ==",
 'cache-control': "no-cache",
 'Postman-Token': "73405266-b9a2-4c49-8495-80c8dbce599f"
 }
 response = requests.request("GET", url, data=payload, headers=headers, params=querystring)
 json_data = json.loads(response.text)
 resp = json_data.get('d').get('Matnr') + ' ' + json_data.get('d').get('Maktx') + ' Stock ' + json_data.get(
 'd').get('Labst')
 print(resp)
 res = resp
 else:
 res = chatbot.get_response(msg.text).text
 return res # 使用机器人进行自动回复
# 堵塞线程,并进入 Python 命令行
embed()
 

实现效果

SAP ChatBot助手-简单库存查询

总结:

德国哥们说:"如果只是测试,这是一个很好的技术,很有趣。真正要应用化还有很多的路要走,安全,权限这些重中之重的问题。机器人职责的安排。“

但是,何尝不是么。世界是发展的,这些问题不是难不可破的。

瓦尼塔看着像笑话的演说,然而我当真了。


分享到:


相關文章: