全部产品
云市场

创建规则

更新时间:2019-08-26 17:45:59

接口描述

创建规则接口,一般用于客户需要自己提供规则编辑界面的场景。相关文档:规则配置

入参UploadRuleRequest描述

属性 值类型 是否必选 描述
jsonStr String 完整Json字符串信息,具体内容参见下方详细信息

请求参数Json字符串信息

属性 值类型 是否必选 描述
appKey String 业务方或者业务场景的标记
conditions List< ConditionBasicInfo> 所有条件的详细配置信息,具体内容参见下方的 <条件的详细配置信息字段ConditionBasicInfo描述>
rules List< RuleInfo> 规则的配置信息,具体内容参见下方的 <规则的配置信息字段RuleInfo描述>

一、条件的详细配置信息字段ConditionBasicInfo描述:

属性 值类型 是否必选 示例值 描述
cid String “1” 条件的ID,必须数字字符(建议从1开始以正整数向上累加),此数字在规则上传后会被修改为系统自生成Id
check_range CheckRange 具体内容参见下方的 <条件检查范围CheckRange描述> 条件的检查范围
operators List< OperatorBasicInfo> 具体内容参见下方的 <条件所包含算子OperatorBasicInfo描述> 条件包含的算子
lambda String 一个算子:”1”, 多个算子:”1&&2&&3” 条件中算子的逻辑关系,由算子id(oid)与逻辑运算符(与、或、非)组成的表达式,示例值中的1、2、3均代表算子id(oid),oid在 <条件所包含算子OperatorBasicInfo描述> 中有详细说明

条件检查范围CheckRange描述:

属性 值类型 是否必选 示例值 描述
role String 客服 适用角色,条件的作用角色范围,取值:“客服”,“客户”;不传表示所有角色
anchor Anchor 具体内容参见下方的 <前置条件Anchor描述> 前置条件详细信息
range String {“from”: 1, “to”: 3} 检测范围,具体使用说明请查看本文档特殊说明中的 <检测范围range使用说明>

前置条件Anchor描述:

属性 值类型 是否必选 示例值 描述
location String AROUND 用来指定前置条件命中时,当前条件检测前置条件命中句子的之前XX句、之后XX句、当前句,取值:AROUND(推荐使用)、BEFORE(前置条件命中句子之前)、AFTER(前置条件命中句子之后)、CURRENT(前置条件命中的当前句),强烈建议这里值固定使用AROUND,通过range中的from、to来区分之前、之后还是当前句,BEFORE、AFTER和CURRENT不推荐使用。
cid String “3” 前置条件的条件id(cid),用于确定anchor的条件
hit_time Integer 3 前置条件的命中次数,有以下三种情况:1. 正整数1~N代表前置条件第一(N)次命中; 2. 0代表前置条件每次命中; 3. -1代表前置条件任意一次命中

条件所包含算子OperatorBasicInfo描述:

属性 值类型 是否必选 示例值 描述
oid String “1” 算子的ID,必须数字字符(建议从1开始以正整数向上累加),此数字在规则上传后会被修改为系统自生成Id
name String 我是算子名称 算子名称、描述
type String INCLUDE_KEYWORDS 算子类型,具体内容参见下方的 <算子类型以及以及算子具体内容Param描述>
param Param 具体内容参见下方的 <算子类型以及以及算子具体内容Param描述> 算子表达式具体内容

算子类型以及以及算子具体内容Param描述:

param中的属性较多,有一些是公用属性,有一些是特定算子类型专用的,所以我们按照算子类型维度,来逐一说明每个算子类型都可以使用哪些属性,并且提供配置示例供您参考,以下标题为 算子名称(name)、算子类型(type),内容为该算子可用参数列表,以及使用示例:

1. 包含任意一个关键词(HIT_ANY_KEYWORDS) / 包含全部关键词(INCLUDE_KEYWORDS)

属性 值类型 是否必选 示例值 描述
keywords List< String> [“你好”,”您好”,”上午好”] 关键词列表
in_sentence Boolean true 匹配时是否限制在单句话中(单句话是指中间没有逗号、句号等,以逗号、句号等标号分开的算不同句子);true: 限定在一个句子中,false: 不限定,默认: false
keywordExtension Integer 0 是否开启同义词扩展,1: 开启,0:关闭 默认:0
  1. {
  2. "keywords":[
  3. "您好",
  4. "你好",
  5. "上午好"
  6. ],
  7. "keywordExtension":1,
  8. "in_sentence":true
  9. }

2. 符合某个特定话术(正则表达式匹配)(REGULAR_EXPRESSION)

属性 值类型 是否必选 示例值 描述
regex String 请看下方代码示例 正则表达式
in_sentence Boolean true 默认为false,匹配时是否限制在单句话中(单句话是指中间没有逗号、句号等,以逗号、句号等标号分开的算不同句子);true:限定在一个句子中,false:不限定,默认:false
  1. {
  2. "regex":"请问.*(车牌号|发动机号|驾驶证号码)",
  3. "in_sentence":true
  4. }

3. 通话中出现静音(INTERVAL_GREATER)

属性 值类型 是否必选 示例值 描述
interval Integer 5000 静音时长(毫秒)
different_role Boolean false 是否区分角色,true: 区分角色, false: 不区分角色;为true则目标句子如果与本句是同一个角色说的话就不参与计算
target Integer 1 目标句子是当前句子的前多少句,为0时间隔等于本句的结束时间-本句的开始时间
from_end Boolean false 指定时间间隔的计算方式是否用本句的结束时间减目标句子的结束时间
  1. {
  2. "interval":5000,
  3. "different_role":false,
  4. "target":1,
  5. "from_end":false
  6. }

4. 语速过快(SPEECH_SPEED_CHECK)

属性 值类型 是否必选 示例值 描述
velocityInMint Integer 370 每分钟的语速值(字数),用以判断本句的语速是否超过指定值
minWordSize Integer 4 表示当一句话少于多少字时不检测
average Boolean false true: 检测整个对话的平均语速;false: 检测单句话的语速
  1. {
  2. "velocityInMint":370,
  3. "average":false,
  4. "minWordSize":4
  5. }

5. 出现情绪异常(EMOTION_ENERGY)

由系统自动判断,无需设置param

6. 出现抢话现象(GRAB_WORDS)

属性 值类型 是否必选 示例值 描述
interval Integer 5000 交叉时间,也就是抢话中客户说话的结束时间减去客服说话的开始时间(毫秒)
threshold Integer 4 表示当抢话句子的字数大于多少个字时才进行检测
  1. {
  2. "interval":3000,
  3. "threshold":4
  4. }

7. 出现特定语义的话(PARAPHRASE)

属性 值类型 是否必选 示例值 描述
references List< String> [“优惠力度特别大”,”特别的优惠”,”力度最大最优惠”] 相似语句列表
threshold Float 0.7 语义相似度,分数在0-1之间,分数越高,相似度越高
  1. {
  2. "threshold":"0.7",
  3. "references":[
  4. "优惠力度特别大",
  5. "特别的优惠",
  6. "力度最大最优惠"
  7. ]
  8. }

8. 判断某句话为某个角色(ROLE_CHECK)该算子较为特殊,需要涉及到check_range的改动,详见完整的条件配置示例:

属性 值类型 是否必选 示例值 描述
target_role String 客户 指定目标句子的角色,可选值为:客服、客户
  1. {
  2. "cid":"1",
  3. "lambda":"1",
  4. "check_range":{
  5. "absolute":true, // 固定值
  6. "alSentencesSatisfy":true, // 固定值
  7. "range":{ // 指定要检测的句子位置,from与to的值需要一致
  8. "from":2,
  9. "to":2
  10. }
  11. },
  12. "operators":[
  13. {
  14. "oid":1,
  15. "type":"ROLE_CHECK",
  16. "param":{
  17. "target_role":"客服"
  18. }
  19. }
  20. ]
  21. }

9. 非正常挂机(DURATION)根据最后一句话的角色,以及最后一句话的结束时间到挂机的时间间隔来判断是否为非正常挂机,此时check_range.range中的from和to都需要指定为-1,来表示检测最后一句话,详见完整的条件配置示例:

属性 值类型 是否必选 示例值 描述
interval Integer 5000 表示最后一句话结束时间到挂机时间 的时长(毫秒)
compareOperator String gt 指定interval比较方式,gt:大于,lt:小于,默认为gt
beginType String DIALOGUE 固定传 DIALOGUE
target_role String 客户 指定最后一句话的角色,如果为空则代表任意角色
  1. {
  2. "cid":"1",
  3. "lambda":"1",
  4. "check_range":{
  5. "range":{
  6. "from":-1, // 固定为-1,表示检测最后一句话
  7. "to":-1 // 固定为-1,表示检测最后一句话
  8. }
  9. },
  10. "operators":[
  11. {
  12. "oid":1,
  13. "type":"DURATION",
  14. "param":{
  15. "interval":3000,
  16. "beginType":"DIALOGUE",
  17. "target_role":"客户"
  18. }
  19. }
  20. ]
  21. }

10. 录音时长检测(DURATION)

属性 值类型 是否必选 示例值 描述
interval Integer 5000 指定录音时长(毫秒)
compareOperator String gt 指定interval比较方式,gt:大于,lt:小于,默认为gt
  1. {
  2. "interval":60000,
  3. "compareOperator":"lt"
  4. }

11. 上下文重复(ADVANCED_REPEAT_DETECT)

属性 值类型 是否必选 示例值 描述
from Integer 3 表示重复的两句话间隔在几句以内时才算违规,默认:2,即从当前局往前数2句(包含)之内重复算违规
hit_time Integer 2 表示第几次重复出现时才算违规,默认:1
threshold Integer 5 最小字数,小于此值的句子不检查,默认: 4
excludes List< String> [“好的好的我知道了”,”好的我知道了”] 表示例外句子,即例外句子重复出现时不算违规,默认:空
  1. {
  2. "from":3,
  3. "hit_time":2,
  4. "threshold":5,
  5. "excludes":[
  6. "好的好的我知道了",
  7. "好的我知道了"
  8. ]
  9. }

二、规则的配置信息字段RuleInfo描述:

属性 值类型 是否必选 示例值 描述
rid String 1 规则的ID,必须数字字符,此数字在规则上传后会被修改为系统自生成Id
lambda String 一个条件:”1”, 多个条件:”1&&2&&3” 规则中条件的逻辑关系,由条件id(cid)与逻辑运算符(与、或、非)组成的表达式,示例值中的1、2、3均代表算条件id(cid)
business List< BusinessCategoryBasicInfo> 具体内容参见下方的 <规则所属业务字段BusinessCategoryBasicInfo描述> 规则的适用业务,可在新建规则页面获取,详见下图。若该属性为空,则设置为默认的“所有业务”
type Integer 1 规则的类型,可在新建规则页面获取,详见下图
triggers List< String> [“1”,”2”,”3”] 规则中需要返回内容的条件ID(cid)。设置规则ID的话,命中结果后将会返回规则所命中的具体内容
Name String “用户可能要投诉” 规则名称
scoreSubId Integer 3678 规则绑定的评分项子项的id
ruleScoreType Integer 3 该规则所绑定的评分项是否进行计分(1:不计分 3:计分)
status Integer 1 设置规则的生效状态,0/1/2:待生效/生效中/已失效
startTime Date 2018-08-08 08:00:00 规则的生效时间
endTime Date 2018-09-08 21:00:00 规则的失效时间

规则所属业务字段BusinessCategoryBasicInfo描述:

属性 值类型 是否必选 示例值 描述
bid Integer 267202890 规则所属业务BID,必须数字字符
name String 规则所属业务名称,必须数字字符

特殊说明

检测范围range使用说明

采用区间形式,来表示当前条件检测对话中的哪些句子,通常这个区间,是被适用角色(role)和前置条件(anchor)共同限定的一个范围内的区间,例如“在前置条件命中之后客服所说的1到3句”,这里的区间首先被前置条件限定为前置条件附近的对话,然后被适用角色和检测范围限定为前置条件命中之后客服所讲的话的第1句到第3句;

使用示例如下:一、如没有设置前置条件,检测范围的意义是:

  1. {“from”: 1, “to”: 3},代表所检测角色所说的第1句到第3句(全文范围内的前三句);
  2. {“from”: -1, “to”: -3},代表所检测角色所说的倒数第1句到倒数第3句(全文范围的最后三句);
  3. 如没有设置前置条件,只能输入正数区间或者负数区间,禁止输入负数到正数区间,如{“from”: -3, “to”: 3}

二、如设置了前置条件,检测范围的意义是:

  1. {“from”: 0, “to”: 0},仅代表前置条件命中的当前句,请勿在其他情况下使用第0句;
  2. {“from”: 1, “to”: 3},代表当前置条件命中时,在前置条件命中句子“之后”的所检测角色所说的第1句到第3句;
  3. {“from”: -2, “to”: -4},代表当前置条件命中时,在前置条件命中句子“之前”的所检测角色所说的第2句到第4句;
  4. {“from”: -3, “to”: 3},代表当前置条件命中时,在前置条件命中句子“之前”的所检测角色所说的第3句到“之后”的第3句;

调用示例

  1. UploadRuleRequest uploadRuleRequest = new UploadRuleRequest();
  2. uploadRuleRequest.setAcceptFormat(FormatType.JSON);
  3. String ruleJsonStr = "{\n" +
  4. " \"appKey\": \"********\",\n" +
  5. " \"uploadType\": 0,\n" +
  6. " \"conditions\": [\n" +
  7. " {\n" +
  8. " \"cid\": \"1\",\n" +
  9. " \"check_range\": {\n" +
  10. " \"role\": \"客服\",\n" +
  11. " \"range\": {\n" +
  12. " \"from\": 1,\n" +
  13. " \"to\": 3\n" +
  14. " }\n" +
  15. " },\n" +
  16. " \"operators\": [\n" +
  17. " {\n" +
  18. " \"oid\": \"1\",\n" +
  19. " \"type\": \"REGULAR_EXPRESSION\",\n" +
  20. " \"param\": {\n" +
  21. " \"regex\": \"告诉.*密码\"\n" +
  22. " },\n" +
  23. " \"name\": \"ApiCreateRuleDemo\"\n" +
  24. " }\n" +
  25. " ],\n" +
  26. " \"lambda\": \"1\"\n" +
  27. " },\n" +
  28. " {\n" +
  29. " \"cid\": \"2\",\n" +
  30. " \"check_range\": {\n" +
  31. " \"role\": \"客户\",\n" +
  32. " \"range\": {\n" +
  33. " \"from\": 1,\n" +
  34. " \"to\": -1\n" +
  35. " }\n" +
  36. " },\n" +
  37. " \"operators\": [\n" +
  38. " {\n" +
  39. " \"oid\": \"2\",\n" +
  40. " \"type\": \"REGULAR_EXPRESSION\",\n" +
  41. " \"param\": {\n" +
  42. " \"regex\": \"修改密码\"\n" +
  43. " },\n" +
  44. " \"name\": \"ApiCreateRuleDemo\"\n" +
  45. " }\n" +
  46. " ],\n" +
  47. " \"lambda\": \"2\"\n" +
  48. " }\n" +
  49. " ],\n" +
  50. " \"rules\": [\n" +
  51. " {\n" +
  52. " \"rid\": \"1\",\n" +
  53. " \"lambda\": \"1&&2\",\n" +
  54. " \"triggers\": [\n" +
  55. " \"1\",\n" +
  56. " \"2\"\n" +
  57. " ],\n" +
  58. " \"name\": \"testbyapi\",\n" +
  59. " \"type\": 1,\n" +
  60. " \"comments\": \"comments\",\n" +
  61. " \"scoreSubId\": 277,\n" +
  62. " \"ruleScoreType\": 1,\n" +
  63. " \"business\": [\n" +
  64. " {\n" +
  65. " \"bid\": 264971810,\n" +
  66. " \"name\": \"业务A\"\n" +
  67. " },\n" +
  68. " {\n" +
  69. " \"bid\": 386664996,\n" +
  70. " \"name\": \"业务B\"\n" +
  71. " }\n" +
  72. " ]\n" +
  73. " }\n" +
  74. " ]\n" +
  75. "}";
  76. uploadRuleRequest.setJsonStr(ruleJsonStr);
  77. UploadRuleResponse response = client.getAcsResponse(uploadRuleRequest);

返回示例

  1. {
  2. "code":"200",
  3. "data":[
  4. "318" //规则id
  5. ],
  6. "message":"successful",
  7. "requestId":"*****",
  8. "success":true
  9. }