持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第24天,点击查看活动详情
当我们测试使用机器人对话时,总有些各种各样的问题,其中比较常见的问题:
一句话怎么有时候有多个录音文件
因为用户说话停顿时间超过 min_pause_ms ,就提交ASR识别(如果配置了保存录音会生成一个录音文件),识别结果通过 asrprogress_notify 通知业务程序。
停顿时间超过 max_pause_ms 认为说完一整句话,就发送asrmessage_notify通知给业务程序。
如果说一句话的过程,用户多次停顿,并且时间在 min_pause_ms和max_pause_ms之间,就会产生多个录音文件。
对接暂时界面上,好比我们微信聊天,对方说2句你回复1句是完全正常的情况,网页上展示2个或者多个录音文件就可以。
如果你想尽量的不要出现多次asrprogress_notify,可以把 min_pause_ms 设置大些,比如 min_pause_ms和max_pause_ms都设置800。这时候用户停顿800,才提交ASR,ASR识别的时候如果用户不说话,识别完成马上就发送asrmessage_notify通知,如果识别过程,用户又说话了,还是需要等新的ASR识别结果返回后,在发送asrmessage_notify,就出现多个asrprogress_notif了
怎么获取录音文件名
- asrprogress_notify 通知的 recordfile 字段就是本次识别的录音文件。
- asrmessage_notify 通知的 message 格式是 录音序号.识别结果; 其实通过这个录音序号就知道录音文件名的。因为录音文件名规范是 recordpath/callerid_callid_recordindex.wav 这样固定的格式的。 你可以把被叫号码,callid,录音序号组合一下就知道这个识别结果关联的文件名了
那如果机器人刚放音,用户也开始说话,或者用户刚开始说话机器人也开始放音,要怎么解决。
asrprogress_notify和asrmessage_notify 新加了一个参数 playms,playms意思是用户开始说话时机器人放音时间(如果大于0就是放音时间),0就是机器人没在放音。
asrmessage_notify 的参数 playstate 表示用户说话结束的时候(发送asrmessage的时候)机器人是否在放音。
由此可以推断出 asrmessage_notify 的时候 如果 playms>0并且<2000(自己定义一个合适的),说明机器人刚开始放音用户就开始说话了。
如果 playms等于0,playstate等于true,说明用户刚开始说话,机器人也开始放音了。