本系列产品大部份该文请出访:简述
简述
jxTMS所同时实现的QQ机器其组织工作的方法论生态圈是:
1、QQ机器向使用者表明工具栏
2、使用者输入工具栏快捷键
3、jxTMS提示重要信息使用者输入
4、使用者输入
5、大部份等候中的抒发式全数顺利完成输入后,jxTMS表明大部份的使用者输入【主要包括缺省】,并提示重要信息使用者证实
6、使用者证实后,将大部份使用者输入【主要包括缺省】分拆到该事件德圣茹的输入过程上将
7、jxTMS将该事件德圣茹资金投入运转
8、jxTMS将程序代码结论输入显示给使用者
9、向使用者表明工具栏,接着等候使用者输入工具栏快捷键
因此使用者输入时有两个状况:
工具栏优先选择状况抒发式输入状况jxTMS须要追踪并及早转换使用者的现阶段状况,以精确的从使用者输入过程上将分离出工具栏优先选择操作方式和抒发式值输入。其中,抒发式的输入是互动式的,即QQ机器先提示重要信息使用者现在须要输入甚么文本,接着等候使用者输入,使用者输入后再提示重要信息输入下一个抒发式,等大部份抒发式输入完,接着再向使用者表明其大部份的输入值【主要包括未输入抒发式的缺省】,接着等候使用者证实。
使用者须要在ui的鼓励下,充份认知销售业务办理手续的目地、明确要求其输入的是甚么、有甚么明确要求,精确抒发、精确操作方式。而互动式谈话的益处就是重要信息较为分散、精确,使用者的目光会较为分散,不太难被累赘的重要信息阻碍而认知严重错误,但须要在每一步都有足够多的表明与鼓励。
web介面由于重要信息多样所以是总体呈现出给使用者,因此其统计数据命令行前的提示重要信息词就不须要极短许多,这在web介面下是不能影响使用者对销售业务的认知。但抽取出用到QQ机器中表明给使用者看,就会因为重要统计数据量太少而让使用者疑惑,不知道要干甚么、该怎样做。
因此,jxTMS的QQ机器结构设计成了输入输入相分离,不能将从web介面的定义中抽取到的提示重要信息词用于交互输入。原因就在于web介面中对单个统计数据的提示重要信息词过于简短,用在互动式输入时会由于重要信息不足而影响使用者的认知。因此QQ机器专门结构设计了互动式谈话的定义语句,以提供足够多的表明重要信息来帮助使用者完整、精确的认知现阶段场景下输入的目的、意图与明确要求。
校验与缺省
输入须要校验。我们都知道销售业务管理系统有句名言:垃圾进、垃圾出。而校验就是用来检验输入的统计数据是否满足某种明确要求的、确保统计数据的源头质量,在jxTMS中叫做:统计数据约束。由于jxTMS已经具备了统计数据约束的能力,因此直接引用就好了。
缺省在web介面中用处不大,因为web介面有多样的命令行,可以帮助使用者快捷输入,使用缺省所提高的效率意义不大,反而须要通过让使用者自己优先选择来进一步明确其意图同时还可以避免使用者由于重要统计数据量过大,在还没完全认知的情况下就直接操作方式带来意外。即,web介面中由于重要信息多样、操作方式效率高,反而要限制缺省的使用,以避免使用者误操作方式【即实际意图未必是缺省所抒发的,但由于重要统计数据量太大,使用者分心了,没注意看也没仔细去认知】。
但在互动式输入中,缺省在效率提升方面就价值巨大了,同时由于是使用者一个字一个字输入的,其肯定是足够多冷静、足够多想明白到底要干甚么的了,因此在互动式谈话中,能用缺省就一定要用,除非缺省会导致重大的抒发严重错误。
互动式输入的定义
通过上面的讨论,我们已经知道了,互动式输入的一个输入单元,就是一个五元组:
抒发式名,可以让该事件响应代码用self.getInput函数读取到使用者的输入值提示重要信息表明,在使用者输入前推送给使用者,以帮助使用者认知要输入的重要信息是用来干甚么的、有甚么样的明确要求校验抒发式,在使用者输入后,用来验证使用者输入是否符合明确要求校验规则表明,校验失败后会向使用者推送的输入明确要求表明缺省,用多数人的同样输入来减少使用者输入、提高效率注:实际中还有一个区分是否须要base64编码的指示,因为如果须要输入的统计数据同时可以表明在QQ机器与web中,对于web介面中的某些取值是base64编码的统计数据命令行,如textarea、htmlContainer等,就也必须进行base64编码。因为这些命令行在web端时都可能输入特殊字符,不用base64编码就无法正确的传递
因此其定义就是用这五个元素对该事件德圣茹进行修饰就可以了:
PyObject wxPrompt(String bind,String prompt,Object defaultValue,StringverifyStr,String verifyRuleDescr,Boolean base64)各抒发式的意义非常直白,就不复赘述了。wxPrompt必须跟在wx修饰或其衍生出的wxOP、wxDisp、wxDataTable之后【python修饰符是最开始的修饰符最后使用】,示例如下:
@myModule.wxPrompt(var2,抒发式2.decode(utf-8),tv2,len>2 and len<5,长度应大于2且小于5.decode(utf-8),False) @myModule.wxPrompt(var1,抒发式1.decode(utf-8),tv1) @myModule.wx(tms,第一个测试.decode(utf-8),测试.decode(utf-8),None,False) @myModule.event(cmd, wxTest) def wxTest(self, db, ctx): ……上述示例给【测试->第一个测试】这个命令型QQ功能添加了两个互动式输入抒发式:var1和var2。其中var1由于不须要检验,因此采用了简写,var2则限制其长度只能是3或者4个字符。两变量都还提供了缺省。大家可以看一下这个定义的实际交互过程:
在父工具栏中输入3优先选择【第一个测试】执行时,由于两抒发式都提供了缺省,因此jxTMS直接表明使用者输入证实表,请使用者证实其输入。使用者此时对var1的值不同意,输入1想修改var1的值,这时jxTMS发送输入提示重要信息,使用者再次输入后,jxTMS再次表明使用者输入证实表。此时,如果使用者想修改var2的值,但输入不符合明确要求时:
如果最后使用者证实其输入,输入y即可。
注:目前尚不支持【取消大部份输入,终止执行】。这是由于QQ机器的工具栏优先选择和输入是混流的,须要依靠严密的状况追踪来确定使用者现阶段的输入是分流给工具栏优先选择还是抒发式输入,打断生态圈的【选中工具栏项->使用者输入->执行->输入结论->表明工具栏】处理方法论再行恢复出原本的流会导致处理方法论异常复杂,很可能导致状况恢复严重错误。而jxTMS对QQ机器的支持是全新的功能,整个组织工作方法论还未经大量应用考验,因此笔者权衡再三,暂时取消了该功能
使用者输入完,jxTMS会将使用者输入重定向到该事件德圣茹,用self.getInput函数即可读取到相应的使用者输入了。
临时性输入
在销售业务办理手续时,有时会出现突发性的输入请求。比如,在新成员注册时,有可能出现重名。jxTMS解决重名的办法是不直接使用名字,而是使用简称:如果没有重名就直接用名字做简称,如果有重名则须要起一个区别性的简称。那么在新成员注册时,简称就不是必须明确要求使用者输入的【所以不重名时,各人简称的缺省还不一样】,但当使用者提交注册时,发现有重名则须要提示重要信息使用者输入一个简称,而当输入的简称依然有重名时,还须要反复做出提示重要信息直到没有重名。
注:哈,笔者曾就职过的一家民营企业,三十多人有三个人重名,最后:大xx、小xx、女xx,还得写到通讯录中:) 这个印象深刻到在jxTMS中,一个组织有三个名字:给人用的简称、给人用的唯一性全名【一般是工商注册名】、给机器用的英文唯一名【统计数据库、消息接收都以此名为准】
针对这样的需求jxTMS增加了一个临时性输入的功能:
#设置临时性输入提示重要信息,须要临时增加几个就调用几次 setTmpExpect(String bind,Stringprompt,Object defaultValue,String verifyStr,StringverifyRuleDescr) #提交临时性输入提示重要信息 commitTmpExpect(IDBop db,context ctx) #结束临时性输入提示重要信息 clearTmpExpect()各函数以及参数的意义一目了然,我们举个例子就好:
@myModule.wx(tms,临时提示重要信息测试.decode(utf-8),测试.decode(utf-8),None,False) @myModule.event(cmd, wxTest2) def wxTest2(self, db, ctx): v2 = self.getInputString(v2) if v2 is None: #没有v2抒发式的输入值,临时设置一个v2抒发式的输入 self.setTmpExpect(v2,临时须要输入一个字符串.decode(utf-8),None,len>2,长度大于2.decode(utf-8)) self.commitTmpExpect(db,ctx) returnFalse jx.log(v2:{},v2) #由于设置了临时提示重要信息,必须加以清除,以避免对其后的临时性提示重要信息造成阻碍 self.clearTmpExpect() return False则【临时提示重要信息测试】在执行时,发现缺少v2抒发式,就临时为其创建一个临时性的输入提示重要信息,接着请求输入v2抒发式,在得到v2抒发式后,必须及时调用clearTmpExpect函数来取消临时性输入的状况。
附
jxTMS目前已打包为docker容器,可以下拉jxTMS的docker镜像并按jxTMS使用示例尝试使用。