第3章 多轮对话搭建提要
任务对话前情提要
在搭建任务对话之前很重要的就是确认这个对话在什么场景下发生,要完成的任务是什么,需要哪些步骤,最后就是应该怎么样利用现有的工具来完成这一件事。
3.1词槽和实体
3.1.1词槽和实体的概念
具体来说任务对话的工作方式是:收集信息并根据收集到的信息做出相应操作。为了让任务对话能够在某个场景下工作,首先要梳理清楚业务流程,确定要收集的信息,以及收集到信息后要做什么。
在这里我们也发现,我们是需要存储这用户说过来的有效信息的,在平台中,存储用户话语中有效信息的结构我们称作词槽。大家可以简单把词槽当做是一个可以填充东西的篮子即可。
当然,我们怎么识别用户是不是说了我们需要的信息呢?我们会用实体这个结构来判断用户的信息是否符合需求。其原理简单来说就像用的可以填充的积木,只有符合特定的形态,才能通过实体的判断。
简单理解一下,实体值是意图流程中需要收集的关键信息,实体是筛选用户所说的问题里是否包含实体值的筛选器,词槽是意图流程中存放关键信息的变量。
在报名活动流程中,需要机器人收集的关键信息有:用户姓名、用户所在城市。
当用户回答了自己的姓名时,比如“张三”,机器人就可以将这个信息抽取出来,存入“用户姓名”这个词槽中,此时词槽“用户姓名”的值就等于“张三”;当用户回答了所在城市时,比如北京,就可以将这个信息抽取出来,存入“用户所在城市”这个词槽中,此时词槽“用户所在城市”的值就等于“北京”。
那很多人问为什么要有词槽和实体的概念,尤其是词槽,有了词槽之后,我们能更加灵活的对实体值进行处理,包括清空词槽让其可以被再次填充,词槽有一个功能是跳转后清空词槽。那在向客户确认的场景时,如果可能遇到多次确认,这个就是要记录后立即清空的,因为用户每次确认的内容很可能是不一致的,用户的一个确认也不能乱用。
实体的意义在于反复利用和辨别,例如:“水果”实体的实体值可设置为“苹果”、“香蕉”、“桃子”等。如果没有实体,只有同义词,那机器人可能不能完全认识到苹果和香蕉是两个不同的水果。
系统中预置了一些基础的实体,我们可以灵活使用,如果不能满足我们的需求,我们也可以增加一些自己使用的实体。
常用的实体分为预设实体、枚举实体和正则表达式实体,设置操作在词库的实体管理里,如下所示:
预设实体:运营常用实体信息集,如数字,姓名,手机,身份证,城市,日期等,已经被预置在系统中,可以根据实体详情页的说明使用实体;
枚举实体:可以创建包含多个实体值的实体,每个实体值相当于实体的一个选项;每个实体值可以有多种说法,系统会认为多种说法中每一项都是同样含义的,用户消息中包含任意一个都可以精确识别出来。例如可以将蔬菜类型命名为实体名,洋葱和土豆分别作为不同的实体值,对类似土豆这种实体值,我们有马铃薯,土豆、洋芋等不同的称呼可以放在实体的多种说法中,系统会认为多种说法中每一项都是同样含义的,用户消息中包含任意一个都可以识别出来。
正则表达式实体:可以通过自定义正则表达式,从而匹配出任务中的实体,常见的有匹配特定的订单,商品号码,会员号码等这样有一定规则的消息片段,如果不清楚的话,可以咨询公司内部的IT工程师。
正则的其他作用还有很多,比如识别到了指定消息进行组织和替换,这一块大家有需要可以再了解。
意图实体:意图实体可以识别用户的整条消息,并通过相似问题比较识别出实体值,整体运作过程和知识点的识别类似。枚举实体是精确的对应包含才能识别,意图实体比较接近自然语言的说法。
3.1.2词槽使用及注意事项
进入词槽管理页面后,点击“新建词槽”,可以添加新的词槽。新建词槽时,需要填写:
词槽名称:
可以通俗易懂的根据所需要用户填写或确认的信息命名。
引用实体:词槽中只能存引用的实体。可以配置最多50个实体 。
整句填槽:是说未识别到引用实体时,将用户的整句话填充到词槽。
那上面这个解释还有这么几层意思,如果有引用的实体,并且能被识别,那么填槽的是实体。如果没有引用的实体,那么用户的整句话都放到词槽里。
通常我们会在开放式填槽询问,比如询问用户的建议,收集用户的地址等情况下使用整句填槽。
注意如果配置了多个实体,当这些实体同时被识别时,只有配置时排在前面的会被保留。
词槽的生命周期分为词槽值在整轮对话中被记忆(全程整轮对话生效)和词槽值在单元跳转后被清(单轮对话生效)。
单元跳转后清空词槽指当前单元的跳转关系使用保存下来的实体值进行跳转之后,立即清空里面的内容。下次用到这个词槽时,它又会空空如也,以崭新的面貌迎接提问。
常见于确认某件事情,从其他意图跳转回来时需要重新确认,因此不需要保留当次的确认信息。如,确认用户信息是否填写正确,每次是需要用户重新确认的。
或者不需要保存用户选项的选择题时,我们选择词槽值在单元跳转后被清空。有了这个选项之后,即使是100个题目,我们都可以只用这一个词槽。如果需要保留相应信息或在后面使用相应信息,那就不能选这个选项了。
词槽值在整轮对话中被记忆指的是,这个词槽的保留时长内不清除词槽内获取的信息直到任务结束,这个信息收集跳转后可以拿出来继续使用。
这种用法常见于一些用户信息的收集,默认单个用户的这些信息在整个生命周期内如无其他配置,全程保留,例如用户的姓名,手机号等。
词槽可以在一个场景下的不同意图同时使用,因此:
同样意义的词槽不用创建多个。比如,在一个“订票机器人”下,即便有订火车票、订机票、订车票等多个意图,由于它们共享“出发地”、“到达地”词槽。可以在配置这几个意图的时候直接调取。
在共享词槽的情况下,在用户触发机器人下的意图时,如果要在这几个意图中切换,已经获取到的词槽信息不会再次询问。比如订火车票时,用户发现没票,想要换作飞机票,这时他可以说“换成机票”,触发“订机票”意图。之前订火车票时提供的“出发地”、“到达地”就可以直接被机器人使用,机器人不重新发问。
不同场景下的词槽,即便名称相同,也不能共享。
在对话流程中,词槽会保存获取到的信息,但词槽并不能从用户消息中筛选出特定的信息。比如,用户发来消息“我的手机号是13812345678”,机器人需要先识别出这串数字是手机号,再把手机号保存到词槽。为了能够从用户的一句话中识别出特定内容,需要让词槽去引用实体。平台会自动识别用户每条消息当中的实体,用户的枚举实体会展示在调试机器人,但只有词槽引用了的实体才会被保存到词槽。
在对话任务中,词槽用来存储数据。比如:“姓名”这个实体被用来存储“张三”、“李四”等一系列在对话之中获取到的名字。这些具体的名字叫做实体的值。对于一个用户,实体只保存一个值,再次获取会被刷新。例如调用“询问姓名”获取到两次用户的姓名,则系统中保存后一次获取到的值(如果想避免这种情况可以开启“仅询问单元填槽”)。
在词槽的操作,点击“编辑”,可以修改词槽的配置,包括词槽名和引用实体;点击“删除”,可以删除这个词槽。
由于删除词槽会影响使用了词槽的意图执行,如果词槽在意图中被使用,就不能被删除;如果出现上述情况,可以点击“被使用次数”列中的数字,查看词槽被哪些单元使用,再到对应的单元解除对这个词槽的关联,就可以删除了。
3.1.3实体的操作和注意事项
实体可以在对话搭建-词库-实体下找到,
点击实体类型右边的加号,可以添加一个新的此类实体。像展开分类一样展开实体类型后,可以看到添加的实体名,也可以在上方搜索框搜索,移到对应实体上时,出现删除按钮可以删除实体(删除时请确认该实体未在任务中被使用)。枚举实体的实体值以及多种说法可以批量导入,同一个实体值能被多个词槽使用。
需要注意的是,实体只担任了识别实体值的作用,如果需要保留实体值,需要正确的使用任务单元和词槽来执行。
那么如何确认我们使用的实体类型呢?
根据我们所需回答的开放程度及其他信息,我们可以做出以下判断:
开放程度 | 其他特征 | 填槽类型确认 |
---|---|---|
在有限可枚举空间内做出提取 | 精确匹配,包含就触发 | 枚举实体填槽如男,女 |
在有限可枚举空间内做出提取 | 根据意图模糊匹配 | 意图(实体)填槽如吃了,吃过了或没吃 |
允许任意值通过判断 | 全文本,富文本保存 | 整句填槽建议类,自由答案 |
允许符合特定形式的值被提取到 | 系统已预置,可以直接使用满足需求 | 预设实体手机,身份证等 |
允许符合特定形式的值被提取到 | 文本或数组规则的值可以通过正则表达式定义 | 正则表达式实体如订单号,会员号等 |
允许符合特定形式的值被提取到 | 需要编写函数或接入其他系统判断 | 通过webhook填槽如会员身份判别等 |
3.2意图触发——怎么进入一个任务
首先我们需要确认在什么场景下来开始一个任务,比如在银行柜员办卡时我们会说“办张银行卡”,在为手机充值费用时,我们会说“充话费”。在这个时候“办张银行卡”就触发了银行柜员的特定办事任务流程,会按照一系列的要求来让我们提供一些信息。像这样的我们在搭建机器人时来让他们识别不同意图的过程就是意图区分和触发。
触发结构 | 触发方法 | 工作原理 |
---|---|---|
关键词 | 完全匹配 | 当用户消息与触发器中的任意一个完全一致时,这个意图就被触发。 |
关键词 | 模糊匹配 | 当用户消息中包含触发器中的任意一个关键词时,这个意图就被触发。 |
相似问题 | 相似问题置信度达到阈值 | 当用户消息和触发器中任何一个相似问题类似时,这个意图就被触发。 |
句式模板 | 一定模式的句子或短语 | 当用户说的话符合某个提炼归纳后的特定模式。 |
事件 | 如开启会话、关闭会话、发送地址、发送图片、到达指定时间等等 | 当检测到这些事件发生,执行一个或一系列动作。 |
句式用于可被提取任务信息且符合一定模式的句子,在触发的同时抽取实体进行填槽,通常因为可以提供更精准的信息优先级高于触发器。
在意图触发器的句式模块里我们能新建句式来触发相应意图,以下的句式可以完成用户说:“帮我充30M流量”,“帮我充1G流量”这样的话术触发对应的充值意图以及填充充值流量数量类型的词槽。(注意使用@符号调起相应引用功能)
3.3任务的流转与执行
3.3.1任务流转简述
任务对话的过程,在定义好需要完成的任务之后,就能知道需要哪些信息了,在这里其实就体现了和问答式对话不一样但又统一的地方,即在任务对话过程中,是期待用户提供一些信息的,这些信息往往是有范围的,这个范围根据用户的意图结合业务需求设计。任务对话的过程总体上就是不断获取这些信息,从而达成使用者的目的。
这些信息的获取方式多种多样,最常见的就是直接向用户进行提问,除此之外,也可以通过CRM等其他信息管理系统获取,甚至可以通过图片,音频这样的多模态信息进行处理后获得。
总体来说,任务对话的流转都需要这样一些能力,比如提问、收集信息,发送消息,对信息做处理,流向不同的分支,从内外部系统获取信息等,这些信息在对话过程中可以被机器人记住并利用。
流程式的视图在描述这些状态时更加容易理解,所以我们主要以流程式的可拖拽画布这种形式进行学习。某种意义上讲,这样的机器人运作起来之后就是活得业务流程。
3.3.2任务单元类型
为了实现任务的对话,在流程图上往往是由各种各样的由不同功能组成的组件来进行具体的配置和执行的,在平台上,这些组件大多叫单元。不同产品也会根据自己的理念对这些组件进行不同的包装(封装),大家根据业务流程按需使用即可。
简单的任务可能仅需要少量必要单元就能搭建成功,但是涉及复杂的任务时,提前梳理好任务的流程图无疑会帮助我们更好更快的搭建出来一个任务,需要注意的是,梳理任务流程的时候一定要实际业务人员的参与,在设定好流程后实际业务人员需要根据历史的数据,或者自己的经验考虑到大多数情况下的状态以及在一些典型案例中是否都能适配。
当然如果想要充分利用现有的任务单元和流程逻辑,我们需要先知道现有的任务单元都有哪些。
目前任务单元的类型分为询问填槽单元,消息发送单元,单槽接口单元,多槽接口单元,静默填槽单元,词槽运算单元,词槽记录单元,表格读取单元,属性读取单元,属性写入单元和意图终点单元。
3.3.3询问填槽单元
询问单元的样式是比较齐全的,我们主要以询问单元来看一下任务对话可以实现的功能。
询问信息单元是流程的重要构成部分,所有需要用户发消息给机器人才能收集到的信息,都要用到这个单元。比如询问用户姓名、手机号等。机器人也可以根据询问到的信息判断接下来要跳转的单元,比如机器人可以以对话的形式让用户做问卷,根据用户选择的选项不同,机器人接下来的问题也可以不同。
询问单元主要由四个模块构成,点开向右的小三角可以展开更多:
平台这样的单元设计主要是以填槽驱动来规划的产品设计,这强调了填写词槽的重要性。其次,突出了主要功能,减少了其他设置对于搭建的影响。
基础配置模块有单元名称和关联词槽。
询问填槽分为询问语句和对话策略,以及预置回复配置。
询问单元的依次回复一条功能可以达到逐步澄清的作用,可以实现指定第一步问“手机号是什么”,第二步问,“你再确认一下,是不是输入的位数少了,目前只支持11位数字组成的手机号码”。
相应地,勾选了仅发送一次,那下次经过这个单元时,已经发送过的对应消息就不会再次回复。
预置回复,则类似于问答的输入提醒和推荐问题,帮助用户用点击代替填写,提高用户回答效率。
对话策略配置有以下几点说明:
尝试询问次数:如未得到可以填槽的回答,一共可以询问多少次,再次经过当前单元重置;
尝试询问次数功能是说,问多少次仍然没获得可以填槽的实体值后不再继续提问。通常在这个信息不是特别需要的时候,我们可以将这个次数调整到一次,问不到就算了。
仅在当前单元询问时填槽 :一般设置打开,关闭时词槽内容可能根据用户前期,或后面用户对话而改变当前词槽中的内容,这样的填槽在任务进行过程中往往不容易发现,比较难排查;通常我们允许在意图中任意地方填槽的时候,代表这个信息填槽要求非常严格,比如说手机,邮箱,身份证号,订单号等,又或者相应信息并不影响最后决策仅做收集使用。
平台任务可以说某种意义上是为填槽服务的,所以尽可能地,我们都会将可以被填充的词槽填充,这样的好处是,如果我们同时要提问用户的手机号和邮箱,那么用户说了手机号和邮箱后我们可以不用过多配置,就能填充两个词槽,即放置手机号和邮箱的词槽。被填充的词槽不会询问,会直接按照配置的跳转关系向后进行。
那在某些情况下一味地填槽会让我们不能凸显我们的提问,比如在确认用户是否要签署某项协议时,这个时候,如果用户在之前对话中的语句符合确认这个确认词槽的实体规则(是,没有等),那么这个词槽会被提前填上“确认”或“取消”。这轮就不再执行确认了。
所以,“仅在当前单元询问时填槽”可以确保用户看到了我们想让用户提问的内容,让用户真的了解到我们想让他确认的是什么,而不是忽略用户的选择。
用户不说话时追问:那如果提问之后用户没有说话,在指定时间后再向用户提问一次。
这是用来激活用户的一个动作,让机器人能够引导用户完成这个机器人,类似于客服的,在用户一段时间未回复时,向客户发问“请问您还在吗?”、“您还有其他问题吗”。
机器人得到多个值时,向用户澄清:
开启时,如果机器人根据用户语句,得到了多个可以填槽的值。机器人会向用户做一轮澄清,让用户选择一个值最终填入词槽。
关闭时,机器人得到的多个值会拼接成字符串,整体填入关联词槽。
比如:开启澄清时,在下图所示的场景中,根据用户预定会议室的语句,机器人查询到了多个会议室,则机器人会以快捷回复的方式列出会议室,供用户选择
询问次数用尽时,使用以下值填槽并作为跳转依据:这个功能可以在用户对当前轮次没有给出理想回答时越过此轮继续任务,一可以安排用户走默认路线,二也可以在任务进行结束时做回顾和盘点,继续补充相应信息。
询问单元的跳转关系是基于词槽中的实体值才能生效的,有时候我们提问了,在询问次数用尽之后不管用户说什么都希望能向下走时,我们就需要使用指定值作为跳转依据了。这样用户就能继续向下完成流程了。
跳转关系可以设置跳转的方式方法,其原则就是满足什么条件然后去做什么。条件优先级是设置的排在前面的优先走,排在后面的稍后走,其他最后走。
跳转方式我们需要注意的是我们可以设置成是否大于、等于、小于等模式引用词槽,某一具体值,是否包含,符合正则,属于特定实体等多种模式。
我们来看一下询问手机号单元的配置。
其中,对话策略如下:
因为平台没有限制只能向后连线,所以流程中或意图中可能会出现循环或多次使用某段流程这样的情况。那在这些情况下,如果某些消息或询问消息不想让其再次出现在用户的对话中。可以选择只执行一次,这样跳转回这个流程时,就不会再执行这个单元了。
数据源URL这个功能是说,我们可以通过接口来发送提问的话术,图片,链接或者卡片等形式的消息。
如果我们注意观察就会发现,消息发送单元和静默填槽单元都是询问单元的简化版。
3.3.4消息发送单元
发消息单元只是单纯地发送消息给用户,不需要用户回复,可以发一条多条消息。
所以消息单元主要包含三个模块:设置单元,bot回复,以及跳转关系。
跳转关系这里仅允许向固定方向的一个单元跳转,其他设置与询问单元类似。
主要会被使用在一个意图的开始和结束。可以放置一个发消息单元,向用户发送开始时的欢迎语、结束时的告别语等。如果消息类型属于欢迎语或者其他不需要再次发送的情况,仅在刚进入意图发送,那么可以勾选仅发送一次。
发消息单元允许发送延迟消息。
如果后面不接入任务单元,则任务实际上在意图层面已经结束,但是在执行层面尚未结束,结束任务需要配置意图终点单元。
3.3.5静默填槽单元-根据非必要信息跳转
绑定一个词槽,如果用户提到了词槽需要的信息就收集,不提的话不会问。静默填槽单元绑定词槽后,会在进入这个意图之后就监控用户说的每句话,只要能填槽,静默填槽单元就将里面的实体值抽取出来放入槽中。一旦收集到信息,就视为单元被触发,接下来流程就会按这个单元配置的跳转条件去跳转。
这种单元的用途也很广泛,通常用于虽然不主动询问,但是机器人拿到之后收集更好,甚至会以此来决定跳转的后续流程时是非常有用的。比如:
侦探游戏中我们需要收集用户提供的特定信息(比如触发了某个关键词),如果收集到了,还要根据这个关键词去触发对应的故事(也就是触发特定单元);
比如活动报名,我们必须要的信息是用户的邮箱和手机号,如果能收集到城市可以提供更加精准的服务,这个流程就可以这样设置。
假设说我们做了一个热水器的流程,正常情况下会逐步引导用户说出想要的种类,使用人数等信息,但是,如果用户直接说了某一个具体的产品,我们就可以跳过这些前置的条件了。
买机票时,一般的流程是机器人询问出发地、目的地、时间,然后查找有哪些可以买的车票。但是用户也可以直接提供航班号,提供航班号的情况下就不用再问出发地、目的地了。相当于收集到一个非必要的信息后,根据这个信息影响了任务的跳转。也可以支持用户随时的灵活提问。
一般来说,这个单元会被放置在任务的前部,注意需要配置未收集到单元必须词槽时的跳转逻辑。
在充话费的场景下,我们也是允许用户充值流量的,当获取到一些意图表明用户实际是需要充流量,我们就可以让用户充流量。具体设置,可以参考下图:
如果希望用户完成任务之后可以通过能被收集的实体值继续这个任务,可以在任务流程前部使用静默填槽单元来解决。
3.3.6词槽运算单元-对词槽进行修改和计算
运算单元感觉上虽然是计算,但本质上是对词槽内容的修改和计算。主要有三种模式:重置,赋值和计算。
我们首先来看重置模式,在实际的业务流程中,很多时候还需要向客户确认是否填写正确,如果不正确怎么修改的情况,这时我们就需要更正词槽的内容,可以使用的是重置模式。
重置单元的工作原理是选定一个词槽后,可以给它指定一个值,或者清空里面已经获取到的值,当词槽被清空时,由于缺少对应完成的词槽需要再次回到对应单元完成填槽动作。
使用方式:非必填或者填入文字或数字,如果留空,就意味着这个单元会清空所选词槽中的值(也会清空空格)。
赋值模式是指要赋给对应词槽什么值,这个值可以是数字、文字、甚至引用一个或多个词槽进行组合。
使用方式:文字、词槽中的值(无值会填入空格)、{词槽}+文字。
相当于重置的填入一个值「AABB」到词槽中
填写「AABB」「词槽AABB的值」「CCDD」到对应词槽中
填写词槽AABB的值,到对应词槽中
计算模式是指四则运算,常用的使用方法是让这个词槽自增1,在计数场景下非常常见。当然我们也能将两个词槽进行运算。
使用方式:加、减、乘、除某个词槽或具体数值。
3.3.7词槽记录单元
词槽记录单元很容易理解,是指是否要留存下用户的选择信息或者填写内容,词槽记录单元主要的配置就是需要收集信息的词槽。在充值意图里,我们需要收集用户的充值数量,电话号码等信息。
词槽记录单元可以收集所在链路之前获取且尚未清除的信息。收集到的信息展示在任务对话信息收集板块并且可以根据需要导出。
注意:调试机器人处收集的信息不能被记录和导出,如有需要可以在体验版网页进行测试,这里的用户可以在消息记录中看到;
3.3.8意图终点单元
意图终点单元主要有三个功能,结束,跳转和保留词槽。
第一种用法结束是指后续没有需要执行的单元或执行的意图是表示任务进行到此停止,操作是跳转到指定意图为空。
第二种用法,从当前的意图跳转到另一个意图,常用场景有需要其他任务配合时,需要最终可以跳转回来,或者完成一个意图之后希望用户完成另一个任务。
又比如,用户买完机票,不等用户自己去触发,就自动跳转到“订接送机”的意图,给用户推销一条龙服务。
在当前单元保留词槽:
是:保留这个意图,在这个意图的闲置等待市场内,这个意图再被触发、再进入,机器人会读取之前的进度,已经获取到的信息都还在,此外,如果原意图中有可以被其他意图单元使用的词槽将会按要求是否填充,简单来说就是手机这类信息不用用户重复填充。
否:当前意图立即结束,已经获取到的词槽值全部清除,这意味着如果用户再触发这个意图,就要从头开始,其他意图也不能继承原有的词槽内容(前提是词槽没有在其他意图中使用,如果跳转的下一个任务又被询问填槽单元,静默填槽单元使用了这些词槽,那为了体验我们是保留对应的这几个词槽的。)。
简单理解一下,保留不保留词槽可以理解成是不是要立即忘掉刚才对话里的关键信息。
另外,每一个未连接的跳转关系分支,最后系统发布时都自动配了一个看不见的“默认结束单元”,保留词槽的选项跟随画布右上角“高级选项”里对应的配置。
3.3.9表格读取单元
表格读取单元,顾名思义,是说从一张表中获取数据,因为我们知道为了方便管理,很多业务性的数据在实际生产中都是按照表格或是数据库的形式存储的,考虑到类似这样的问题很多,我们可以设计表格读取单元来使用这些表格,将销售情况,商品规划表,保险费率表,人员表等各种单据进行读取和有机结合。
我们下面模拟一个实际使用场景,酒店咨询来讲解表格读取单元:
酒店名称 | 押金退还方式 | 押金多少 | 接受的银行卡 | 押金返还 | 婴儿床 | 房费 |
---|---|---|---|---|---|---|
卡利马酒店 | 现金押金是退房时立刻会返还的 | 不同房型押金也不同,一般1000铢/房/晚 | 只有万事达(Master),威士(VISA),运通(AMEX),JCB | 现金押金退房时直接退还的,预授权的押金在退房后3-4周内会解除。 | 1-2岁的小孩可以睡哦 | 400 |
魅力度假酒店 | 现金押金是退房时立刻会返还的,预授权的押金在一个月左右会解除。 | 不同房型押金也不同,一般1000铢/房/晚 | 只有万事达(Master),威士(VISA),运通(AMEX) | 现金押金是退房时立刻会返还的 | 1-2岁的小孩可以睡哦 | 500 |
自然酒店 | 现金押金退房时直接退还的,预授权的押金在退房后3-4周内会解除。 | 不同房型押金也不同,一般1000铢/房/晚 | 只有万事达(Master),威士(VISA),运通(AMEX),JCB | 现金押金是退房时立刻会返还的,预授权的押金在一个月左右会解除。 | 1-2岁的小孩可以睡哦 | 300 |
希尔顿酒店 | 现金押金是退房时立刻会返还的 | 押金一个房间4500铢 | 只有银联卡(退房时结算使用),Visa或万事达(押金) | 现金押金退房时直接退还的,预授权的押金在退房后3-4周内会解除。 | 一般6岁左右的小孩都可以睡 | 455 |
悦榕庄酒店 | 现金押金是退房时立刻会返还的,预授权的押金在一个月左右会解除。 | 不同房型押金也不同,一般1000铢/房/晚 | 有万事达(Master),威士(VISA),运通(AMEX),国内发行银联卡 | 现金押金是退房时立刻会返还的 | 1-2岁的小孩可以睡哦 | 300 |
悦椿酒店 | 现金押金是退房时立刻会返还的,预授权的押金在一个月左右会解除。 | 不同房型押金也不同,一般1000铢/房/晚 | 有万事达(Master),威士(VISA),运通(AMEX),国内发行银联卡,微信支付,支付宝支付 | 现金押金是退房时立刻会返还的,预授权的押金在一个月左右会解除。 | 1-2岁的小孩可以睡哦 | 600 |
我们来看一下这张表,最上面一行是表头,最左边一列我们叫主体(S),其他列为属性(P),表格中的其他部分我们称之为对象(O),这个地方使用了知识图谱的术语。因为可能在部分场景下和产品中可能使用了这些术语,这里给大家做个简单介绍和展示。
表格读取单元最主要的思路就是要查哪一行(列),对应想要返回什么。如果要返回具体数值,那么对应的定位条件也就越多。如果想要返回更多数据,那么对应的限制也就更宽泛。
在定位列的限制条件留空时,我们能定位到全部值。
我们来看一下这个表格读取单元使用示例,其体现了我们想要通过这个表格读取单元实现查找“酒店名称”列,返回酒店属性列的对应值存在{酒店属性查询结果}这个词槽中,至于返回的是什么,则是根据{酒店名称}词槽中的值来进行判断的。
上图就是典型的知道SP,查询O的情况,这种形式的问题我们简写为“S+P—→ O”。
“S--→ P+O”只有S查PO,比如我想知道卡利马酒店的全部情况那么可以这么设计。
需要注意的是,发送的消息是我们设计出来的,类似这样:
{slot=酒店名称}
押金:{slot=押金多少}
返还方式:{slot=押金返还方式}
接受的银行卡:{slot=银行卡}
平台表格的应用还有一些功能,如:将各个酒店的押金按格式展示出来,取此词槽某个值的数量,最大值,最小值,平均值等等。详见技巧二:函数的应用。
3.3.10表格写入单元
表格写入单元,有两个主要使用方向,修改表格中的对应值和新增行。
首先来看新增行。在某学员场景下,如果来了一个新学员,那么我们需要在《学员信息》表中增加这个学生的学号和姓名,那么什么是这张表的唯一标示呢?是学号,那么学号就是我们的主体,写入词槽来自于“学号”词槽,另外我们还可以记录“姓名”;如下所示:
写入实体值是来自于“学号”,在姓名列写入“姓名”即可。
那么当学员学习了新课程,那么课程进度也要随之更新,我们使用更新属性值,这个时候,定位列就是主体列“学号”,写入列是课程最大进度,那么当前进度来自于刚刚确定要更新的“课程进度”,这样就可以了。
总体上来说表格写入单元是表格读取单元的逆向行为,但是需要着重注意的是,表格写入单元允许写入空值,所以在写入前,请大家一定做好校验工作。
3.3.11属性读取单元
属性读取功能,是说从用户的身上获取相应属性的属性值并且保存在一个词槽中。我们经常利用这个功能联合其他功能帮忙处理一些需要从用户CRM获取标签按进行处理的情况,比如,有些套餐是针对男性用户的,而另一些体检套餐是适用儿童的。
属性读取功能分为读取预设属性和读取自定义属性。这个属性对接可以参考开放平台,属性设置则在平台对话搭建的个性化体验菜单下,用户属性模块。预设属性是我们根据各个项目总结出来的,部分渠道只要接入,不需要自行创建就能获取到的用户属性,如用户的IP,关注时间等等。自定义属性就是说我们自己定义的属性,例如,是否是会员等等。
当然这些属性标签的获取首先是来自于创建用户的时候需要带上相应的属性标签,也可以通过下面的单元在任务流转过程中给用户打上相应的属性标签。
注意:调试机器人处并不能给用户身份写入属性,相应的,也不能读取出属性。
3.3.12属性写入单元
属性写入单元是说给用户打上相应的属性标签,正好和属性读取单元的作用和操作顺序都反过来。
注意:属性写入和读取功能对调试机器人处的用户不会生效,因为此处用户都是假用户,并没有相应属性,消息记录也不能看到。
3.3.13单槽接口单元
接口单元简单来说是通过链接的方式让机器人获取一些信息或给用户一个指定回复,这个回复可能受用户身份,属性等情况条件不同而不同,当然这个接口后也可以接一段自动执行的程序再回复。具体接口的使用和对接我们可以参看平台产品手册:
上图是天气机器人接口的一个应用,注意这里的引用已有词槽不能以“{slot=city}”这种模式应用。
当然,在接口没有开发完成的时候我们想要流畅的测试机器人的功能怎么办呢?
使用模拟填槽功能能快读的达到你想要的效果。
开启时,模拟值会被填入接收词槽,用于模拟之后的跳转。接口URL将不被调用。上图的意思就是将「成功」填入对应词槽。
关闭时,调用接口URL,并将返回的数据填入接收词槽。
*该功能用于在接口未准备好时调试流程。项目正式上线前请关闭。
*接口单元内引用词槽需要注意不加“slot=”。
3.3.14多槽接口单元
多槽接口单元是说通过请求获取多个返回的回复并分别存储到不同词槽中。其基本操作与单槽接口单元一致。
多槽接口单元的模拟填槽功能使用如下图所示(注意上线前换用正式接口测试):
上图的意思是将「0」填入“没有第一个问题”词槽,将「1」填入“员工工资表”词槽,将「1」填入“纳税人性质”词槽。
单槽接口单元和多槽接口单元之间的区别不是说能通过机器人向外传输多少个词槽带有的信息而是通过接口填写了一个还是多个词槽。
3.4意图规划说明和注意事项提示
在搭建任务对话的时候,最好能有一个考虑的比较全面的流程图能提供任务的逻辑、每一轮机器人的反应,这样的话整体的搭建速度会比较快,任务后期所需要的改动也会比较小。
在搭建任务的初级阶段都不需要配置预处理任务,关于这部分内容,我们可能遇到了特别复杂或个性化时的方案才需要,无意图在搭建初期也很少直接使用。
在任务相对复杂或者对原有的复杂任务进行重构时,我们推荐让一系列的意图相互配合共同完成一个比较复杂的意图。虽然目前实际应用中我们已经搭建出单个意图超过100个单元的意图,但是当任务单元比较多时,100个单元之间排布和逻辑连接不可避免的变得极为复杂。将任务单元的复杂度控制在10-20个单元内我们觉得一般来说是在后期比较好维护的。
举个例子,在外呼场景下,一般来说,一个意图环节我们会独立成一个意图,通常来说固定的命名会像“开场白”、“产品介绍”、“试缔结”、“加微信”等;在留资场景。如果比较复杂,我们会拆开成“询问学校”,“专业”,“手机号”,“姓名”,“微信号”等等。
当然,往往在缺乏经验的时候我们不知道全面的任务流程图需要哪些信息,这个时候我们有以下小技巧。
任务对话搭建原则
最长线条,优先建造。跑通流程,再来修正。
每次修改完之后最好能有固定的测试集验证会不会引入新的问题。正面的例子和负面的例子都可以当做测试集。
预处理意图:
预处理指的是触发了一个意图之后就会优先经过预处理意图,完成预处理意图后,如果预处理里未指定跳转的意图,则会跳转至原触发意图,如果有指定跳转的意图,指定跳转的意图优先,(注意:预处理的优先并不是全局的优先,而是触发了任务之后优先进行)
3.5意图和画布设置
3.5.1场景设置
创建场景时,下方会有智能填槽选项,智能填槽可以将一部分用户说的错别字忽略,让任务按照正常的填槽逻辑往下走,如果我们对用户说的语句需要更加精确准识别,可以调高智能填槽阈值到0.85甚至1。
其次,自动添加预置回复,预置回复会显示在下方的输入框上部,如下图所示:
那我们要判断以下几种情况在产品中是否适合添加预置回复。
- 依据当前用户的历史回复,在非测试时,推荐用户曾经选过的选项时比较合适的。
- 依据所有用户的高频回复,在一些非私密的信息上是合适的,但是用户姓名,手机号这种是不合适的。
- 依据词槽引用的实体值进行推荐,要判断自己添加的实体是否适合直接被展示出来。
在意图设置菜单,我们可以对机器人全局做一些基本的操作和定义。
闲置等待时长(分钟):用户无回复时,意图保留的时长,在此期间用户可以继续任务流程。
触发知识点:当用户在任务对话流程中时,如果发送的消息不能填充词槽,可以触发问答对话。
注意:在勾选了未识别可以整句填充时,因为一定会填充词槽,所以不会触发问答对话。
保留词槽:单元跳转到“空”后,意图是保留,保留会记住词槽中的值,所以会让用户在生命周期内直接进入的时候还是继续上次的流程,而不保留实际上是直接结束当前意图(所有词槽清空),用户再次进入之后会重新开始。注意整个意图的意图保留是优先级低于跳转单元的意图保留设定的。
3.5.2意图发布、草稿、还原和生效
在对任务对话意图进行修改之后,我们一定要记得重新发布任务对话。
意图需要保证其处于生效或者调试状态,否则,不能测试到相应的功能改动。
在线编辑意图时,我们可以发现我们的编辑过程是实时保存草稿的,发布之后,会将草稿升级为正式状态。还原可以将更改的机器人还原至上一次发布的状态。所以,如果未发布就进行了还原,实际上相当于清空画布上自上一次发布至今的所有操作。
在意图管理页面可以生效机器人,可以将编辑好的机器人流程生效到线上,只有生效的机器人才能成功体验。
所有的单元前部都需要有任务连接线,否则不能发布成功。
任务发布生效测试前,我们需要检查这样几件事,任务是否配置触发器,任务的跳转和连接是否完整,回复内容和发送顺序是否正确配置等等。在改动任务过后,建议大家及时测试,了解任务机器人的情况,后面几项是常见的会遗忘的配置。
3.6任务对话搭建调试常见问题自查
任务触发常见问题
有时候我们会发现任务没有按照设计的流程运行,那往往是在任务触发时出了问题: 1.任务没发布,没发布的任务就只是草稿状态,并未在线上运行; 2.任务没生效,用户消息不能触发意图并进入意图对应的流程; 3.任务没有触发词或者缺少跳转过来的设计; 4.错误的开启了“无意图”,若是相应对话触发“无意图”,那任务对话不会做回复; 5.错误的开启了“预处理意图”并且指向或结束于错误的分支。
那大家在触发任务的时候就可以按照这样几个步骤快速检查一下; 1.任务是否已发布; 2.任务是否已生效; 3.任务是否有对应的触发词或者相应的跳转逻辑; 4.是否可能触发了无意图; 5.是否可能开启了并错误的使用了预处理;
任务运行常见问题
如果遇到机器人运行过程中不符合预期,那我们可以查看调试信息或打开任务的调试模式看一下。
调试模式有两种开启方式,一个是在意图的配置选,另一个是在对应渠道输入“black sheep wall”(调试机器人,体验版机器人网页或其他正式渠道皆可,只要没被客服系统屏蔽都可以)。
也许有些人发现过自己的机器人在运行时会出现一些莫名其妙的文字,类似这张图的最后两段,这个大部分是由于开启了任务的调试中状态或者预处理,不想出现可以手动关闭。
如果发现任务机器人在调试过程中出现问题,往往可以从以下几个角度排查问题:
观察调试中词槽的填槽状态: 可以说我们的任务对话搭建逻辑是依照填槽逻辑展开了,在未按照指定逻辑经过的时候,往往我们需要看看目前的填槽状态和值。
- 检查是否已有值:在词槽中有值的时候,询问填槽不会主动询问;
- 在抽取实体动作之后是不是有重置、清空或赋值:
- 是否词槽在填槽之后被清空,尤其注意填槽之后接运算单元的,需要观察运算单元配置是否正确;
- 观察词槽是否引用错误,在对引用了的词槽名称进行修改之后,需要观察引用处词槽名称是否与已更改的一致;
- 填槽结果和预期不一致,可能是由于开启了整句填槽,或者配置了询问次数用尽后有填槽值;
- 填槽次数、实体值、实体范围和刚刚设置的不一样,需要检查任务是否关联了正确的实体,是否实体能够成功被抽取出来,如已发布成功,如果检查了发布和生效可以稍等一会再来测试,词槽的生效时间在10分钟内;
检查接口单元配置:在调试状态下如果发现走到接口单元失败往往有这么几个原因:
- 接口单元返回格式不正确,返回超时;
- 接口单元引用词槽时需要直接引用,不需要加“slot=”;
- 接口单元在使用时,需要注意里面的变量是固定的默认值还是变量,要适时根据情况调整,更换接口链接时,也应注意;
- 接口单元后面接的服务是否已经停用,比如服务器没开,依赖的服务到期欠费等等;
- 接口单元对测试环境和正式环境的地址是或否有差异;
任务出现循环,其表现是反复出现同样的回复或流经重复的流程。
尽量在规划及搭建过程中,除用户的成功用例、失败用例,还要多考虑其他情况的分支,尤其是在将平台作为语音场景对话管理平台时尤其要注意静默、重听、挂机、侮辱性话语、在忙等处理逻辑。在使用读写表单元、属性读写单元、接口单元时多注意失败(异常)分支的跳转关系配置。
任务意图的调试中状态方便我们观察是在哪一步的运行导致执行出现问题,通常在任务正式上线前有用;任务上线启用时,一般就不开这个选项了。
那么任务上线了之后,想要查问题时,在正式渠道更多的会使用触发任务后输入“black sheep wall”后再复现这种方法。
3.7树状任务梳理与搭建
业务咨询过程中,常常会碰到树状结构展开的咨询路径,如下图:
由于对话树是一个完整的流程,因此我们需要在创建机器人前,先梳理流程,确定话术:
- 这个流程可以拆分成几个询问节点
- 每个节点可以通过什么意图触发
- 触发这个节点之后,机器人要用什么话术去推进或回复
我们可以用上文中的对话文本作为一个示例,进一步的在表格中梳理一个对话树结构如下:
可以看到这种结构易于使用和理解,维护逻辑清晰,使用表格都能完成整体的梳理和更新。
下面是私有部署版本展示的搭建的两种样式的结果:
可以看到整体非常直观易于理解,结构类似思维导图,其操作也很简单,只需要配置并拖动相应节点即可。
单元配置这里因为结构简单,可以不使用词槽实体进行跳转,最简单的可以直接写分支条件,如果需要识别更多样的说法和情况,也可以配置实体进行泛化,如下所示:
在这个产品的实现中,意图识别结果也可以直接用作条件,后续执行相应结果。
3.8任务对话的应用实战
3.8.1案例一 充话费机器人
第一阶段:沿主线搭建
充话费的案例一般是什么样子呢?我们来看以下的对话,也请按照相应的讲授顺序参考讲解独立完成搭建。
客 户:充话费
服务人员:好的,您要充值的手机号码是什么呢
客 户:18312341234
服务人员:好的您要充多少呢
客 户:100块
服务人员:您看为18312341234充值100块对吗?
客 户:对
服务人员:好的,给我100块(拿到100元并执行充值操作),等下就到账了
那么这时触发任务的词语就是“充话费”,第一轮会话要问用户的是用户的手机号码,第二轮是向用户询问充值金额,第三轮是让用户确认已经提供的信息,最后用户确认后收到钱就给用户充值。
上图是依据对话流程搭建出来的的机器人流程,可以看出我们对几个单元做出了一些改动。
询问充值金额时,我们新增了几个跳转条件,背后代表着在服务人员的操作界面上其实被限制只能充值10、20、50、100这几个选项,如果不满足,会再次向用户提问,与其等用户发现充5块钱是不行的,不如提前告知用户可行的选项。当然我们也能配置在不满足条件时,再向客户说明目前仅允许按指定金额充值。
询问手机号时,我们的词槽配置和跳转选项如下:
在询问手机号的时候,使用了系统预置的手机号实体,那在什么情况下能说用户提供的信息满足我们需要的条件呢?
之前学习过实体是用来识别用户说的内容是否满足条件,并提取出来有效信息的,也即在用户按照规范说了手机号后能被提取出来,这个数据可以知道是一个实体值。那么选择的跳转条件应该是如果手机号被填写了,可以进入下一步,但是明显不可能列举每一个手机号实体值,在这种时候,可以借用一些逻辑概念。一个命题的逆否命题一定为真,所以我们可以说词槽最终没有填写手机号时,就不能进入下一单元,所以在此时如果词槽里的值不是未填写手机号,我们就进入下一单元。
这个时候我们定义词槽的默认值是“未填写手机号”,直到用户提供了合适的手机号来被识别后替换掉这个词槽中的值。
若用户没有能够提供一个有效手机号信息,此时词槽是“未填写手机号”,不满足分支跳转条件后无跳转单元,也即在不满足分支跳转条件的设计为进入“空”单元,在此时,如果没有收集到手机号,机器人会再次询问,直到重复次数用尽。
询问充值金额单元是一个典型的分支跳转逻辑,因为在服务员的操作界面仅允许选择10,20,50,100进行充值,对应的我们也仅允许用户输入10,20,50,100这些数值,在这里我们输入对应数字希望他们按照相应分值去执行,配置选项如下图。这也是框图或者最基本的流程图的样式。
在这里我们需要注意的是在这个单元的默认跳转这里我们将词槽不满足上面的条件时执行的动作应该是进入单元“空”,即后面不进行链接。在此时,当词槽没有拿到合适的值的时候我们将会重复询问3次(默认设置)后退出整个任务流程。
确认充值信息的句子里是这样配置的:
请确认信息是否正确。
为{slot=询问手机号}充值{slot=询问充值话费金额}元对吗?
在这里我们使用了一个高级技巧,在会话中引用用户对话中已经填槽的部分,下面我们来介绍一下这个功能。
技巧指的是系统的一些逻辑和规则,我们可以有效利用来灵活的完成多样的对话结构。
技巧1 引用已经填充的词槽内容
在设置对话单元回复时,可以引用这个意图下的词槽,引用时,点击“{}”按钮选择词槽,或直接在文本框输入“{}”,并在大括号内部输入词槽名称,形式格式如下:
{slot=对应词槽名称}
例子:在服务用户时,希望在某个对话单元回复时提到他的姓名,该姓名保存在词槽“姓名”中。如果我们还没有获取到张三的姓名,就用“尊敬的用户”指代用户。我们可以在回复中输入
尊敬的用户{slot=姓名},晚上好!
如果这个对话单元被用户“张三”触发,并且我们已经获取到他的姓名,那么显示效果为:
尊敬的用户张三,晚上好!
如果触发这个对话单元的用户姓名尚未获得,显示效果为:
尊敬的用户,晚上好!
值得注意的是,在这里我们替换对应大括号中的内容是此时放在词槽中的内容,这里会出现以下几种情况:
1.词槽默认值:在词槽有默认值并且在之前的对话单元词槽没有被改变时,词槽会引用默认值;
2.未识别词槽时的整句填充:在勾选允许填充词槽时,用户所说的话会被全部记录;
3.识别后的实体值:因为实体有各自不同的规则和定义,在经过实体筛选后,用户对应的语句将只剩下满足的实体值;
在向用户确认之后,我们就需要完成充话费任务对话了,这个时候可能需要机器人将已经得到确认的充值信息发送到其他系统完成此步动作,这一步在此略去,如有能力可以参看开放平台对应的接口说明。
我们还可以在所有前序单元完成之后添加一个词槽记录单元来展示我们能获取到的信息,新建一个词槽记录单元选择需要收集信息的词槽为:询问手机号,询问充值话费金额,确认充值信息。
注意:词槽记录单元仅在正式渠道生效,在调试机器人处不生效。
在用一个消息单元向用户说明充值成功后我们就完成了搭建,在搭建的是机器人的情况下,我们需要适当将口语化的语言转换成比较亲切的书面语言,并且在部分话术上可以给与用户一定提示,比如提前可以声明我们仅能按照10,20,50,100进行充值。
练习:请在充话费意图对应的机器人内,新建一个充流量机器人,允许充流量的值为100M(10元)、300M(20元)、2G(50元)、5G(100元),注意此机器人在第二阶段讲解中会用到。
如果有必要我们也能引用系统词槽,作为引用或赋值的依据,参看技巧三:系统词槽。
第二阶段:允许从意图中跳转完成任务
来想一下,人们在说充值的时候,人们是指的充话费还是充流量呢?
此时可以新建一个意图,名称为充值,有两个分支,充话费或者充流量。这里能不能尽量利用已有的意图完成搭建,那该如何做呢?
这时需要用到意图终点单元,在获取到对应的充值意图后,进行跳转。
第三阶段:调试与优化
调试机器人对于任务的调试尤其有用,我们可以看到充话费这句话,可以抽取实体;展示了触发的意图;可以看到因为充话费符合了我们设定的句式规则所以触发了这个意图。
有了调试机器人功能之后,我们能更加方便的针对任务流转的每一个步骤进行检查,知道任务的流转情况,知道当前运行的单元和实时的实体值填槽情况。当然一个好的命名单元习惯会让机器人调试工作更加快捷方便,像上图中的“运算单元7”在调试时就不容易看出这个单元的作用是什么。
3.8.2案例二 酒店预定表格任务示例
之前我们介绍了酒店的基本读取(参看表格读取单元说明),但是复杂场景可能光靠读表单元是不能很好的完成的。我们来看一下如何拿到所有酒店的押金。要返回所有酒店的值,我们可以定位列写“酒店名称”,用于定位的列留空(留空代表定位全部,定位列的两个参数都能留空)。
填槽之后,我们发现这些词槽中是包含多个值的,多个值不加整理,很可能变成酒店名称的堆叠。类似于“卡利马酒店 魅力度假酒店 自然酒店……”,那我们如何让这些数据的展示符合我们的需求呢?这个时候我们需要用到[[JOIN:{slot=酒店名称}:{slot=押金多少}\n]]函数。“{slot=酒店名称}:{slot=押金多少}\n”是里面的内容,意思是展示“酒店名称:押金多少(换行符)”,展示效果如下图:
另外,高维的、复杂的表格我们也可以先通过澄清来逐步将表格降成二维的多张表进行读取和调用。
技巧2:操作符
我们刚才说了一个新概念——操作符;目前平台提供的操作符有以下7个,大家可以在搭建任务对话的时候灵活使用,具体使用情况可以参看产品手册。
函数 | 作用 | 完整用法 | 参考常见用法 |
---|---|---|---|
JOIN | 格式化展示词槽中的值 | [[JOIN:content,begin=\d+,len=\d+,split=.+]] | [[JOIN:{slot=姓名},split=、]][[JOIN:{slot=姓名},begin=1,len=2,split=、]][[JOIN:{slot=酒店名称}:{slot=押金多少}\n]] |
MAX | 取词槽实体值中的最大值 | [[MAX:{slot=xx词槽}]] | [[MAX:{slot=年化收益}]] |
MIN | 取词槽实体值中的最小值 | [[MIN:{slot=xx词槽}]] | |
COUNT | 取词槽实体值的数量 | [[COUNT:{slot=xx词槽}]] | [[COUNT:{slot=员工姓名}]] |
AVG | 取词槽实体值的平均值 | [[AVG:{slot=xx词槽}]] | [[AVG:{slot=年龄}]] |
RAND | 产⽣生随机数 | [[RAND:begin,end]] | [[RAND:1,100]] |
DISTINCT | 对词槽中的实体值去重 | [[DISTINCT:{slot=target}]] | [[DISTINCT:{slot=部门}]] |
技巧3:系统词槽
平台也为大家提供了系统词槽可以直接调用,以实现一些高级的用法,比如获取用户最后一个query的内容并存储,获取当天的日期,时间等等。使用方法类似正常词槽,在消息里引用是“{slot=sys_day}”,在接口里替换是“{sys_day}”。
系统词槽 | 返回值 | 返回格式 |
---|---|---|
sys_hour | 当前小时(收到用户最近一条query的小时) | 格式为HH |
sys_min | 当前分钟(收到用户最近一条query的分钟) | 格式为MM |
sys_sec | 当前秒数(收到用户最近一条query的秒数) | 格式为SS |
sys_sec_ts | 当前时间秒级时间戳(收到用户最近一条query的小时)是一个整数,含义为1970年1月1日0时0分0秒到当前时间经过了多少秒 | 整数 |
sys_weekday | 当前星期几(对应收到用户最近一条query的时间),格式为0~6的数字,周日至周六 | 一位数字 |
sys_day | 当前日期(收到用户最近一条query的日) | 格式为DD |
sys_month | 当前月份(收到用户最近一条query的月) | 格式为MM |
sys_year | 当前年份(收到用户最近一条query的年) | 格式为YYYY |
sys_msgid | 平台的msgid,为18位编码 | 18位编码 |
sys_query | 获取时最近一条用户query,文本 | 文本 |
sys_uid | 用户在平台平台的id | 8位数编码 |
sys_username | 平台上的用户名,对于web、小程序SDK,是自动创建的 | 用户名 |
sys_nickname | 平台上的用户昵称,例,对于企业微信渠道是员工姓名 | 文本 |
sys_channelid | 渠道ID |
技巧4:一些特殊作用的操作符
任务中强制重置“ /restart ”
在发送“/restart”给机器人可以重置当前任务状态。
PS:对下面这个“*”优先触发不生效。
任务触发器关键词等于“ *”—— 未触发其他意图时一次性优先触发
PS:任务周期内只能触发一次(中控控制,/restart无用);
有其他意图时,其他意图允许优先触发;
“black sheep wall” 在任务中开启展示调试信息
技巧5:妙用复制单元和导出意图
在搭建任务对话的过程中,如果大量的配置是一致的只需要稍作修改就可以复用上一个单元时,我们可以使用单元的复制功能,这个能帮我们省去很多配置的时间,提高搭建效率。
相应的,如果有这样的意图,我们也能通过导出和导入意图进行快速的配置。