新一代FreeSWITCH智能客服接口

介绍

新一代FreeSWITCH智能客服接口,包含脚本解析引擎和话术编辑器2部分。

话术编辑器

话术编辑器是一个图形化的应用程序,通过图形化编辑话术流程,生成JSON文件。支持ASR流接口,支持多种打断方案,支持TTS,支持变量,支持真人录音,支持TTS和录音文件混合放音,支持正则表达式匹配,支持NLP接口,支持知识库,支持限制流程重复执行。

ASR支持

采用ASR流接口,可以实时得到识别结果进行匹配,可实现抢话,快速打断等高级功能。

TTS支持

支持变量,支持TTS和真人录音混合放音,支持TTS音量、语速、语调、发音人等参数设置,支持不同通话使用不同发音人等高级功能。

NLP支持

支持NLP接口,用户只需要专注于NLP接口实现,就可以实现高级的话术流程。

知识库支持

知识库和话术逻辑分离,让话术逻辑条理清晰,可以在话术节点触发知识库放音,知识库放音话可以返回节点播放一个返回音。知识库放音的时候同样可以进行ASR识别。

限制流程重复次数

可以防止机器人重复播放一个声音,或者流程进入死循环。

脚本解析引擎

脚本解析引擎是FreeSWTICH的内嵌模块,用来解析和执行话术编辑器生产的JSON文件。它非常高效和功能强大,没ESL接口或者RESTAPI接口的额外开销,不需要查询数据库。

标准化

JSON脚本,可以手动编辑,也可以第三方工具生成,使用标准格式,方便第三方编写话术编辑器。

高效

直接使用FreeSWITCH模块方式,没有协议对接开销,使用通道变量设置TTS变量,不需要查询数据库。

分布式

通过消息队列推送对话流程,方便大规模群集。

ASRPROXY

ASR和TTS接口程序程序实现阿里云和科大的ASR流接口对接。

测试

  • 下载flowedit话术编辑器
    下载地址:http://down.ddrj.com/robotflow.zip

  • 启动程序、

    双击robotflow.exe,abc.json,ad.jsion,dtmf.json3个测试脚本选择一个打开测试。

  • 手机呼入测试

    • addr输入 180.76.224.191:88
    • key 输入 abc
    • number输入你的手机号
    • 点击上传,然后手机呼叫059187599071,就可以进入测试流程
    • 流程修改后要重新上传才生效。

  • sip软件模拟测试

    下载一个SIP软件
    SIP服务器:180.76.224.191:35560
    账户:1000-1009(共9个账号)
    不用密码 或者随便输入

使用指南

全局配置

配置TTS,ASR和NLP

TTS配置

机器人引擎程序会根据配置生成 http://127.0.0.1:9989/tts?config=&voice=&volume=0&speechrate=0&pitchrate=0&engine=&text=%E4%BD%A0%E5%A5%BD%E8%BF%99%E9%87%8C%E6%98%AF%E9%A1%B6%E9%A1%B6%E9%80%9A%E8%BD%AF%E4%BB%B6 这样的路径去播放声音,voice和text使用utf8字符编码,然后进行url编码。用户可以直接实现TTS服务,也可以使用ASRPROXY提供的tts服务。

  • 发音人列表:可以配置多个发音人,每个电话循环使用发音人,避免每个电话都是同样的声音。
  • 默认发音人:如果配置了默认发音人,就不会使用循环使用发音人列表里面的发音人。
  • TTS接口:如果使用ASRPROXY,配置 http://127..0.0.1:0089/tts 这个地址
  • TTS配置:ASRPROXY可以配置多个不同的TTS服务和KEY,通过这个配置来控制使用具体的TTS服务。
  • 录音路径: 不是TTS文件的缓存录音路径,是真人录音文件的存放目录。

ASR配置

设置默认ASR参数,如果流程节点单独设置了ASR参数,就会覆盖全局设置。

  • 模式:【mode】0:不启动ASR识别 1:放音的同时开启ASR识别; 2:放音完成之后才开启ASR识别。
  • 打断:【interrupt】0:关键词打断; 1:检测到声音打断; 2:有识别结果打断; 3:识别到一句话打断。
  • 地址:【asrproxy_addr】asr代理地址。
  • 开始:【vad_min_active_time_ms】说话时间大于这个值才开始提交ASR。
  • 停止:【vad_max_end_silence_time_ms】静音时间大于这个值认为说话停止。
  • 等待:【wait_speech_timeout_ms】放音完成后等待用户说话的等待时间。
  • 最大:【max_speech_time_ms】最大说话时间,说话时间超过这个值就停止ASR。
  • 热词:【hot_word】ASR热词。
  • 参数:【asr_params】ASR参数。
  • 录音:【record_mode】录音方式。0:不录音,1:检测到声音开始录音,2:全部录音。
  • 路径:【record_template】录音路径模板。如果不是绝对路径,会把这个路径追加到FreeSWITCH的recordings后面。支持变量,比如日期 ${strftime(%Y-%m-%d)}。最后一个录音文件路径会保存到变量 ${cti_asr_last_record_filename}

NLP配置

配置NLP接口地址和同义词组。

  • 接口地址:NLP接口地址。
  • 同义词组:把相同一样的词可以放到一个组里,配置流程的时候,可以直接选择关键词组。

知识库

把常见问题的回复预先定义好,可以通过关键词或者NLP触发知识库放音

  • 分类:可以设置很多不同的分类方便和流程结点关联
  • 关键词:支持正则表达式,识别到关键词,就触发机器人放音
  • 放音:支持TTS和文件放音支持变量。
  • 重复:可以防止多次重复触发。
  • 意向:用于判断客户意向
  • 切换流程 可以通过知识库切换到子流程,子流程执行完成可以回到主流程就行执行。

流程编辑

通过拖拉方式配置话术流程。

节点属性

  • 意向: 意向分级,可以用0-9,或者A-Z表示。
  • NLPID:NLP ID,配置了这个值才会把输入事件提交给NLP接口处理
  • 放音:机器人播放的声音文件
  • 知识库:设置关联的知识库
  • 知识库返回音:播放完知识库回答后面播放的声音
  • 重复放音:重复进入(比如其他流程返回)机器人播放的声音文件,如果不设置,会使用“放音”设置的参数
  • 重复限制:动作最大重复执行次数,可防止流程进入死循环
  • 未匹配放音:未匹配到关键词播放的声音
  • 未匹配限制:未匹配关键词最大重复播放未匹配声音的次数,超过次数会走ANY流程。
  • dtmf: DTMF终止符,any:任意字符,none:无终止符,max=最大输入DTMF个数,比如max=16,只有设置了DTMF终止符,才会处理DTMF输入(DTMF就是电话按键的别称)
  • 文本滤:不接收哪些类型的识别结果【F,E,S(前缀F:识别完成,前缀E:ASR错误,前缀S:识别中)】,如果过滤条件第一个字母是’!’,就是只接收匹配的识别结果
  • 模式:【mode】0:不启动ASR识别 1:放音的同时开启ASR识别; 2:放音完成之后才开启ASR识别。
  • ASR参数可以覆盖全局配置的默认ASR设置

箭头属性

  • 优先级:匹配的顺序,从高到低匹配。
  • 文本: 说话会触发这个事件,[asr识别结果,支持正则表达书,ANY表示匹配任意文本,如果配置了未匹配放音,只有未匹配次数超过了限制,才执行ANY(前缀F:识别完成,前缀E:ASR错误,前缀S:识别中),可以通过配置文本滤,来关闭部分输入。比如需要一句话说完后,才匹配关键词,可以文本滤配置S,S识别中的结果,就不会触发文笔事件。
  • 完成:流程节点执行完成会触发这个事件,完成原因格式BREAK|DONE|TIMEOUT|ERROR,ANY匹配任意原因,如果配置了未匹配放音,只有未匹配次数超过了限制,才执行ANY,为了意外情况,建议每个节点,都添加一个any子节点。
    • TIMEOUT 放音完成后,等待【wait_speech_timeout_ms】事件内没有按键或者说话。
    • DONE 按键符合终止条件,或者说话停止了,但是 DTMF和文本都没匹配上子流程。
    • ERROR 动作执行遇到错误。
    • BREAK 动作给外部打断了。
  • 按键:必须配置了DTMF终止符,电话按键才会触发这个事件,输入格式[d|D]后跟DTMF字符,d:未匹配到终止符,D:已经匹配到终止符,[ANY表示匹配任意按键,如果配置了未匹配放音,只有未匹配次数超过了限制,才执行ANY]

faq

放音文件

  • 文件 后缀 .wav或者.mp3,或者前缀file://
  • 信号音 前缀tone_stream://
  • 静音 前缀silence_stream://,例如:silence_stream://1000 ,播放1000毫秒静音
  • 变量 ${变量名},可以导入号码的时候设置号码关联的变量,会把变量会调用TTS转换成声音文件,如果变量是声音文件名应该 file://${cti_asr_last_record_filename} 这样。
  • 文本 调用TTS转换成声音,因为大部分TTS有长度限制,比较长的句子,要分成多段。就是流程编辑器里面分成多行。
  • cti 模块有预先执行TTS的功能,为了不影响预先执行功能,变量要单独一行,比如不要 ${username}你好,应该在话术编辑器的输入框 ${username}放一行,你好放第二行。因为变量需要电话呼叫后,才有实际的值,变量会在电话接通后再执行TTS。非变量在流程加载的时候就可以预先执行TTS。

条件匹配顺序

用户说话,ASR返回识别结果 执行 文本 输入事件

  1. 文本 关键词匹配
    按照每个包含文本条件[箭头属性]的优先级匹配关键词、
  2. 知识库 关键词匹配
    匹配节点关联的知识库
  3. 文本 ANY
    优先级最低。
  4. 完成 关键词匹配
    如果未匹配到关键词说话停止,执行 完成 输入事件
  5. 未匹配
    如果完成输入未匹配到关键词,并且配置了未匹配放音,执行未匹配放音
  6. 完成 ANY
    未匹配超过最大次数,或者未设置未匹配放音,则执行ANY条件。 ANY条件优先级最低。

限制流程重复执行次数

知识库和流程节点,都可以配置重复执行次数,超过次数,则会跳过这个节点。
第二次进入节点,可以配置重放声音文件,就不会感觉机器人一样,重复播放一个文件了。
常用于挽回流程,举例 你需要吗 -> 不需要 -> 要不要在考虑一下 -> 好吧 ->这时候就跳转回“你需要吗这个节点”。 配置重复次数,可以防止一直循环,配置重放声音文件,第二次进入节点,可以播放一个不同的声音文件。