現(xiàn)在人工智能很流行,特別是應(yīng)用于電話營銷的電話機(jī)器人。好了廢話少說直接上源碼: 隨著人工智能的普及,AI已經(jīng)滲透到各行各業(yè),本文就為大家介紹了利用最前沿的AI技術(shù)實(shí)現(xiàn)電話機(jī)器人的原理。智能電話機(jī)器人就是充分的利用了人工智能語音識(shí)別技術(shù)和大數(shù)據(jù)的精準(zhǔn)分析定位,完全是對傳統(tǒng)模式是一次顛覆性的變化,是智能化的人海戰(zhàn)術(shù)還是時(shí)代化的“人工+智能語音”的一種方式,智能電話機(jī)器人是企業(yè)的福音!幫企業(yè)降低成本,提高工作效率,提升公司業(yè)績!
電話機(jī)器人比人工坐席厲害的是,電話號(hào)碼直接在后臺(tái)一鍵導(dǎo)入,省時(shí)又省力,自動(dòng)撥打。智能輪流對話,根據(jù)系統(tǒng)設(shè)定可以對客戶進(jìn)行篩選統(tǒng)計(jì),依據(jù)客戶的回答智能分類意向程度,把意向最高的甲類客戶交給人工進(jìn)行著重跟進(jìn),這樣就能使整個(gè)電銷過程的工作效率大大提高。
作為“人工智能”的產(chǎn)物,正在逐漸的給電銷行業(yè)帶來大改變大革命,把繁瑣、枯燥、耗時(shí)的工作交給智能電話機(jī)器人完成,后臺(tái)分類管理,加以精英銷售跟進(jìn),不僅大大提高工作效率,而且能更好的把人力資源進(jìn)行再分配再分組,減少企業(yè)運(yùn)營成本!應(yīng)該是每位老板都在想的問題。
對于電銷公司來講如何精準(zhǔn)地識(shí)別真實(shí)客戶一直是很難攻克的難點(diǎn)所在。對于智能電話機(jī)器人來說,可以通過真人語音式專家級(jí)的溝通,模擬電銷人員和客戶進(jìn)行多輪互動(dòng)的有效溝通,通過用戶畫像和大數(shù)據(jù)模型精準(zhǔn)找到用戶,實(shí)現(xiàn)精準(zhǔn)營銷,并快速完成ABCD類意向客戶的篩選和分類。
智能電話機(jī)器人是將網(wǎng)絡(luò)電話、語音知識(shí)、自然語音理解、多輪對話、知識(shí)圖譜等多個(gè)門類的前沿技術(shù)集成在一個(gè)智能產(chǎn)品中,已經(jīng)成為行業(yè)的領(lǐng)頭羊,為外呼行業(yè)帶來了可喜的變化,短短幾個(gè)月被很多企業(yè)證明,這是真正實(shí)現(xiàn)開源節(jié)流的AI好項(xiàng)目了。
智能電話機(jī)器人作為當(dāng)今的一款智能化產(chǎn)品,在實(shí)際應(yīng)用中能準(zhǔn)確的以人類的聲音、思維和語氣智能應(yīng)對客戶提出的各種問題。同時(shí),它的篩選能力也極強(qiáng),可以把應(yīng)答用戶按意向程度自動(dòng)分類,幫助人工坐席快速剝離意向客戶。
員工坐席每天撥打200個(gè)-300個(gè)電話已經(jīng)算是極限了,但是智能電話機(jī)器人每天可以撥打800-1200通有效電話,讓效率提高幾倍,提高效率就意味著業(yè)績的提高。
什么是電話機(jī)器人
通過ASR(語音識(shí)別)和TTS(文本轉(zhuǎn)語音)模擬真人和用戶的通話,可用于企業(yè)總機(jī),自動(dòng)催繳,外呼營銷,問卷調(diào)查等業(yè)務(wù),同時(shí)支持 百度,科大,阿里云等ASR系統(tǒng),可以真人預(yù)先錄音,用戶是完全察覺不到是機(jī)器人。
AI智能電話機(jī)器人源碼搭建揭秘!
如何開發(fā)一個(gè)電話機(jī)器人
FreeSWITCH/Asterisk是一個(gè)軟交換系統(tǒng),可以利用開源的軟交換系統(tǒng),開發(fā)一個(gè)VAD錄音模塊,用戶說話后開始錄音,停止說話后,把錄音提交到語音識(shí)別接口轉(zhuǎn)換成文本,利用語義解析接口(NPL)或者簡單的關(guān)鍵字匹配,返回系統(tǒng)預(yù)先設(shè)計(jì)的話術(shù),通過TTS轉(zhuǎn)換成聲音(也可以真人預(yù)先錄音)播放給用戶聽。實(shí)現(xiàn)人機(jī)語音對話。
技術(shù)難點(diǎn)
·機(jī)器人說話時(shí),用戶開始說話,機(jī)器人要及時(shí)處理,就是所謂的打斷,這個(gè)通過VAD算法和關(guān)鍵詞打斷可以解決。
·機(jī)器人怎么理解用戶說話含義,這個(gè)是目前難點(diǎn),目前主要的做法,還是通過關(guān)鍵詞匹配來設(shè)計(jì)話術(shù)。
支持那些ASR接口
可以支持科大訊飛,百度語音識(shí)別,阿里云語音識(shí)別,騰訊語音識(shí)別,捷通華聲靈云等SDK/API/MRCP接口。
怎么使用
可以和現(xiàn)有的呼叫中心,IPPBX,F(xiàn)reeSWITCH,Asterisk 等系統(tǒng)通過SIP分機(jī)和SIP中繼方式對接。
smart ivr 接口說明
smartivr 是一個(gè)基于Freeswitch的電話機(jī)器人二次開發(fā)接口(restful),支持和Asterisk對接
使用指南
用戶自己實(shí)現(xiàn) httpAPI,機(jī)器人程序去調(diào)用這個(gè)接口,不是 機(jī)器人提供httpapi給用戶調(diào)用。
1.
外呼程序呼叫電話接通后,或者客戶主動(dòng)呼入接通后 機(jī)器人程序 向 webserver post 發(fā)送
2.
smartivr –> web
3.
‘calleeid’: ‘8888abc’, //被叫號(hào)碼
‘callerid’: ‘abc’, //主叫號(hào)碼
‘callid’: ‘1fe74812-e376-4319-b335-3de1b494325c’, //每個(gè)通話的唯一ID
‘errorcode’: 0, //錯(cuò)誤代碼
‘flowdata’: null, //流程數(shù)據(jù)
‘flowid’: ‘abc’, //流程ID
‘notify’: ‘enter’ //通知類型
4.
webserver根據(jù)業(yè)務(wù)邏輯 返回 json數(shù)據(jù) 比如 下面的命令就是 啟動(dòng)后臺(tái)ASR,并且播放一個(gè)聲音
5.
smartivr <– web
6.
‘action’: ‘start_asr’, //第一個(gè)動(dòng)作 start_asr是一個(gè)異步函數(shù),只需要執(zhí)行一次,啟動(dòng)后會(huì)一直進(jìn)行VAD和ASR,直到調(diào)用sotp_asr
‘flowdata’: ‘流程選擇’, //流程數(shù)據(jù),類似瀏覽器的Cookie,機(jī)器人后續(xù)httpapi請求會(huì)把這個(gè)數(shù)據(jù)發(fā)送回來。
‘params’: {
‘min_speak_ms’: 100, //最小說話時(shí)間,默認(rèn)值100,單位毫秒,說話時(shí)間小于這個(gè)值,會(huì)被認(rèn)為是無效聲音。
‘max_speak_ms’: 10000, //最大說話時(shí)間,默認(rèn)值10000,單位毫秒,說話時(shí)間超過這個(gè)值,就停止錄音,直接提交ASR服務(wù)器識(shí)別。
‘min_pause_ms’: 300, //最小停頓時(shí)間,默認(rèn)值300,單位毫秒,默認(rèn)值用戶停頓時(shí)間超過這個(gè)值,會(huì)提交到ASR識(shí)別。識(shí)別完成后發(fā)送asrprogress事件。 完成后的意思是 ASR服務(wù)器可能 300-800ms才返回識(shí)別接口。
‘max_pause_ms’: 600, //最大停頓時(shí)間,默認(rèn)值600,單位毫秒,用戶停頓時(shí)間超過這個(gè)值,認(rèn)為一句話說完,所有識(shí)別完成后發(fā)送asrmessage事件。所有識(shí)別完成后的意思是,所有提交到asr服務(wù)器的識(shí)別結(jié)果都返回了。 注意 min_pause_ms 必須大于min_pause_ms。
‘pause_play_ms’: 200, //觸發(fā)暫停放音時(shí)間,默認(rèn)值0:就是禁用自動(dòng)暫停,單位毫秒,建議設(shè)置200-1000,用戶說話時(shí)間超過這個(gè)值,就暫停放音。 有時(shí)候用戶一直持續(xù)說話,中間沒停頓,所以還沒提交到ASR服務(wù)器識(shí)別,不能使用關(guān)鍵詞打斷,可以先暫停放音。
‘threshold’: 0, //VAD閾值,默認(rèn)0,建議不要設(shè)置,如果一定要設(shè)置,建議 2000以下的值。
‘recordpath’: ‘’, //錄音文件路徑,如果不設(shè)置:就會(huì)使用配置文件中的路徑,每天生成一個(gè)文件夾,如果設(shè)置了,就會(huì)使用這個(gè)參數(shù)中的目錄,文件格式是 recordpath/被叫號(hào)碼_Unique-ID_序號(hào).wav
‘volume’: 50 //音量標(biāo)準(zhǔn)化的值。0-100,0不使用音量標(biāo)準(zhǔn)化,其他值 音量把錄音音量調(diào)整到這個(gè)值后,再提交ASR識(shí)別。
},
‘after_action’: ‘playback’,
‘after_ignore_error’: false, //如果action動(dòng)作(start_asr)執(zhí)行失敗是否繼續(xù)執(zhí)行after_action(playback)。
‘after_params’: {
‘prompt’: ‘您好,歡迎致***,這里是電話機(jī)器人演示系統(tǒng),請說要進(jìn)入的測試流程,比如,房產(chǎn)!’, //可以直接播放聲音文件。規(guī)則就是如果最后4個(gè)字是.wav,就直接播放wav文件。
‘wait’: 5000, //單位毫秒,放音結(jié)束后等待時(shí)間。用于等待用戶說話。
‘retry’: 0 //重播次數(shù)。就是wait時(shí)間內(nèi)用戶不說話,就重新播放聲音。
機(jī)器人程序執(zhí)行 “action”:”start_asr” 開始后臺(tái)ASR識(shí)別,然后執(zhí)行”after_action”: “playback”開始播放聲音文件。
7.
·當(dāng)用戶說話后,機(jī)器人發(fā)送 識(shí)別進(jìn)度,也就是用戶暫停說話時(shí)間超過 min_pause_ms
smartivr –> web
‘asrelapse’: 391, //asr識(shí)別服務(wù)器消耗的時(shí)間,單位毫秒。
‘asrtextall’: ‘1.識(shí)別結(jié)果;’, //包含之前停頓的識(shí)別結(jié)果的組合。 格式是 錄音序號(hào).識(shí)別結(jié)果;這樣組合多個(gè)識(shí)別結(jié)果。
‘asrtype’: ‘aiui’, //本次使用那個(gè)asr識(shí)別
‘calleeid’: ‘8888abc’,
‘callerid’: ‘abc’,
‘callid’: ‘1aec14af-d6a8-49e4-96fc-fb5f7cfdb893’,
‘errorcode’: 0, //asr返回錯(cuò)誤,0無錯(cuò)誤。
‘flowdata’: ‘流程選擇’,
‘flowid’: ‘abc’,
‘message’: ‘識(shí)別結(jié)果’,
‘notify’: ‘asrprogress_notify’,
‘recordindex’: ‘1’, //錄音序號(hào)
‘recordfile’: ‘’, //錄音文件
‘recordms’: 931, //錄音時(shí)間,單位毫秒。
‘volumegain’: 5.95330699999 //音量標(biāo)準(zhǔn)化放大或者縮小的倍數(shù)。
webserver根據(jù)業(yè)務(wù)邏輯返回是否需要暫停放音
smartivr <– web
‘action’: ‘console_playback’,
‘flowdata’: ‘流程選擇’,
‘params’: {
‘command’: ‘pause’
當(dāng)用戶說完一整句話,機(jī)器人發(fā)送 完整的識(shí)別結(jié)果,也就是用戶暫停說話時(shí)間超過 max_pause_ms
smartivr –> web
‘calleeid’: ‘8888abc’,
‘callerid’: ‘abc’,
‘callid’: ‘ea6d1235-aaab-4251-b03b-3b53ca32e00d’,
‘errorcode’: 0,
‘flowdata’: ‘流程選擇’,
‘flowid’: ‘abc’,
‘message’: ‘1.你好;2.什么事;’,
‘notify’: ‘asrmessage_notify’,
‘speakms’: ‘1162’ //整句話的說話時(shí)間,包含暫停時(shí)間
webserver根據(jù)業(yè)務(wù)流程,執(zhí)行話說邏輯,播放聲音。
smartivr <– web
‘action’: ‘playback’,r> ‘flowdata’: ‘回答’,
‘params’: {
‘prompt’: ‘先生你好,請問你最近需要買房嗎’,
‘wait’: 3000,
‘retry’: 2
·當(dāng)用戶一直不說話,聲音播放完成并且等待時(shí)間超過,機(jī)器人發(fā)送 playback_result
smartivr –> web
‘calleeid’: ‘8888abc’,
‘callerid’: ‘abc’,
‘callid’: ‘35bca774-5b3e-4129-a5e7-1c3c86605071’,
‘errorcode’: 0,
‘flowdata’: ‘’,
‘flowid’: ‘abc’,
‘message’: ‘FILE PLAYED’,
‘notify’: ‘playback_result’
webserver根據(jù)業(yè)務(wù)流程發(fā)送 繼續(xù)放音,提示用戶回答問題。
smartivr <– web
‘action’: ‘playback’,
‘flowdata’: ‘提示選擇流程’,
‘params’: {
‘prompt’: ‘請問你要進(jìn)入哪個(gè)測試流程,比如,房產(chǎn)’,
‘wait’: 3000,
‘retry’: 2
playback_result 什么時(shí)候有這個(gè)通知
執(zhí)行 playback后,播放完成并且等待超時(shí),就會(huì)發(fā)送playback_result 通知。
·如果識(shí)別到用戶說話,在 asrmessage_notify 事件中返回命令playback,播放了一個(gè)新的聲音,那么上個(gè)playback會(huì)給強(qiáng)制終止(上次的playback_result就不會(huì)發(fā)送了。),新的播放完成時(shí),才會(huì)發(fā)送playback_result。
·如果識(shí)別到用戶說話,在 asrmessage_notify 事件中返回命令noop,或者console_playback(resume),沒去播放新的聲音,那么還會(huì)發(fā)送playback_result 通知的。
·。
接口說明
注意:請求和返回都采用JSON格式,編碼為utf8,所有參數(shù)區(qū)分大小寫,數(shù)字和字符串類型注意區(qū)分,參數(shù)未說明數(shù)字類型就是字符串類型。
自動(dòng)放音暫停(打斷)
start_asr 有一個(gè)參數(shù) pause_play_ms,demo是200, 就是檢測到聲音持續(xù)時(shí)間時(shí)間超過pause_play_ms,就自動(dòng)暫停放音。如果你不需要這個(gè)功能設(shè)置為0, 如果你啟用了這個(gè)功能,asrmessage_notify通知你沒播放一個(gè)新的聲音就必須要恢復(fù)放音console_playback(resume)。否則會(huì)一直暫停。
怎么實(shí)現(xiàn)關(guān)鍵詞打斷
·asrprogress_notify 的識(shí)別結(jié)果如果是關(guān)鍵詞 返回 console_playback(pause),如果不是關(guān)鍵詞 返回 console_playback(resume)
·asrmessage_notify 的整句話識(shí)別結(jié)果如果匹配,直接播放新的聲音文件,執(zhí)行新的業(yè)務(wù)流程,如果不匹配,返回console_playback(resume)。
playback_result 收到這個(gè)通知,說明聲音播放完成,等待用戶說話超時(shí),必須播放一個(gè)聲音,提示用戶說話
action 描述
start_asr
start_asr 是一個(gè)異步函數(shù),只需要執(zhí)行一次,啟動(dòng)后會(huì)一直進(jìn)行VAD和ASR,直到調(diào)用sotp_asr
·min_speak_ms 最小說話時(shí)間,默認(rèn)值100,單位毫秒,說話時(shí)間小于這個(gè)值,會(huì)被認(rèn)為是無效聲音。
·max_speak_ms 最大說話時(shí)間,默認(rèn)值10000,單位毫秒,說話時(shí)間超過這個(gè)值,就停止錄音,直接提交ASR服務(wù)器識(shí)別。
·min_pause_ms 最小停頓時(shí)間,默認(rèn)值300,單位毫秒,默認(rèn)值用戶停頓時(shí)間超過這個(gè)值,會(huì)提交到ASR識(shí)別。識(shí)別完成后發(fā)送asrprogress事件。 完成后的意思是 ASR服務(wù)器可能 300-800ms才返回識(shí)別接口。
·max_pause_ms 最大停頓時(shí)間,默認(rèn)值600,單位毫秒,用戶停頓時(shí)間超過這個(gè)值,認(rèn)為一句話說完,所有識(shí)別完成后發(fā)送asrmessage事件。所有識(shí)別完成后的意思是,所有提交到asr服務(wù)器的識(shí)別結(jié)果都返回了。 注意 min_pause_ms 必須大于min_pause_ms。
·pause_play_ms 觸發(fā)暫停放音時(shí)間,默認(rèn)值0,就是禁用自動(dòng)暫停,單位毫秒,建議設(shè)置200-1000,用戶說話時(shí)間超過這個(gè)值,就暫停放音。 有時(shí)候用戶一直持續(xù)說話,中間沒停頓,所以還沒提交到ASR服務(wù)器識(shí)別,不能使用關(guān)鍵詞打斷,可以先暫停放音。
·threshold VAD閾值,默認(rèn)0,建議不要設(shè)置,如果一定要設(shè)置,建議 2000以下的值。
·recordpath 錄音文件路徑,如果不設(shè)置(使用配置文件設(shè)置錄音目錄(smartivr.json),),如果設(shè)置了會(huì)保存錄音文件到這個(gè)目錄,文件格式是 recordpath/被叫號(hào)碼Unique-ID序號(hào).wav
·volume 音量標(biāo)準(zhǔn)化的值。0-100,0不使用音量標(biāo)準(zhǔn)化,其他值 音量把錄音音量調(diào)整到這個(gè)值后,再提交ASR識(shí)別。
start_asr使用的配置文件
linux /etc/smartivr.json,windows freeswitchconsole.exe同一個(gè)目錄
‘asr’: {
‘aiui’: {
‘key1’: {
‘appid’: ‘5a519267’,
‘appkey’: ‘e212fc8e4c9747a39fa1c56940e705be’
},
‘key2’: {
‘appid’: ‘5a519267’,
‘appkey’: ‘e212fc8e4c9747a39fa1c56940e705be’
·}
aiui 是科大訊飛webapi接口的KEY,可以配置多個(gè)。
record.path 是錄音路徑。
playback
播放一個(gè)聲音文件
·prompt 聲音內(nèi)容wav文件(只支持8000hz,16位,單聲道)或者文本。prompt 提示文本(如果最后4個(gè)字是.wav,就是錄音文件放音,否則會(huì)調(diào)用TTS生成聲音文件)。同樣的文字TTS只轉(zhuǎn)換一次,后續(xù)會(huì)使用緩存的文件
·wait 單位毫秒,放音結(jié)束后等待時(shí)間。用于等待用戶說話。
·retry 重播次數(shù)。就是wait時(shí)間內(nèi)用戶不說話,就重新播放聲音。
多文件或者TTS和錄音文件混合放音
prompt 使用數(shù)值方式就可以,比如
‘/var/wav/1.wav’,
‘tts文字轉(zhuǎn)聲音’,
‘/var/var/2.wav’
sotp_asr
停止后臺(tái)ASR。
console_playback
用于播放控制,用戶說話開始,先暫停播放,如果說的是無效聲音,可以恢復(fù)播放。
·command
·pause 暫停播放
·resume 恢復(fù)播放
·stop 停止播放
bridge 轉(zhuǎn)接電話
{‘action’:‘bridge’,‘flowdata’:’’,‘params’:{‘number’:‘sofia/external/a8008@sip.ddrj.com:16080’,‘callerid’:’’,‘gateway’:’’,‘prompt’:’\u6b63\u5728\u8f6c\u63a5\u4e2d\uff0c\u8bf7\u7b49\u5f85’,‘background’:‘wating.wav’}}
number 被叫號(hào)碼,如果gateway沒設(shè)置,必須是完整呼叫串類似:sofia/external/電話號(hào)碼@網(wǎng)關(guān)Ip
callerid 可選參數(shù) 主叫號(hào)碼(對方看到的來電顯示)
gateway 可選參數(shù) 網(wǎng)關(guān)名字
background 可選參數(shù) 背景音樂
prompt 可選參數(shù) 提示文本prompt 提示文本(如果最后4個(gè)字是.wav,就是錄音文件放音,否則會(huì)調(diào)用TTS生成聲音文件)。
hangup 掛機(jī)
{‘action’:‘hangup’,‘params’:{‘usermsg’:‘not found notify’}}
cause [數(shù)字] 可選參數(shù) 掛斷原因根據(jù)sip信令設(shè)置 詳細(xì)看https://freeswitch.org/confluence/display/FREESWITCH/Hangup+Cause+Code+Table
usermsg 可選參數(shù) 里面可以放置調(diào)試信息,smartivr會(huì)打印到日志文件。
noop 不需要執(zhí)行任何動(dòng)作時(shí)可以返回這個(gè),比如(leave,asr_progress 通知可以返回noop)
{‘action’:‘noop’,‘params’:{‘usermsg’:’’}}
*usermsg 可選參數(shù) 里面可以放置調(diào)試信息,smartivr會(huì)打印到日志文件。
deflect 執(zhí)行后會(huì)直接離開流程,收到 leave 通知
{‘action’:‘deflect’,‘flowdata’:’’,‘params’:{‘number’:‘1001’}}
number 要轉(zhuǎn)移的目的地(由呼叫方處理) 即: SIP REFER 的 URI。
getdtmf 接收用戶按鍵
{‘action’:‘getdtmf’,‘flowdata’:’’,‘params’:{‘prompt’:’’,‘invalid_prompt’:’’,‘min’:0,‘max’:128,‘tries’:1,‘timeout’:5000,‘digit_timeout’:3000,‘terminators’:’#’}}
min [數(shù)字] 最少按鍵個(gè)數(shù)(minimum value of 0)
max [數(shù)字] 最多按鍵個(gè)數(shù)(maximum value of 128)
tries [數(shù)字] 提示音播放次數(shù)
timeout [數(shù)字] 等待按鍵最大時(shí)間,聲音播放結(jié)束開始算起。
terminators 結(jié)束輸入按鍵,默認(rèn)是#。
prompt 提示音
invalid_prompt 輸入錯(cuò)誤提示音
regexp 輸入按鍵規(guī)則(正則表達(dá)式)
digit_timeout [數(shù)字] 按鍵超時(shí)時(shí)間,如果超時(shí)沒有新按鍵,就認(rèn)為輸入完成
歡迎各類朋友一起探討交流,如需成熟源碼二次開發(fā)也可聯(lián)系。