1. 基于MRCP、WEBAPI、SDK等ASR引擎的對話接口統一:
  2. 寧衛通信
  3. 新聞動態
  4. 寧衛新聞
  5. 基于MRCP、WEBAPI、SDK等ASR引擎的對話接口統一

基于MRCP、WEBAPI、SDK等ASR引擎的對話接口統一

      在幾個月前,我們發布了《FSGUI"外呼機器人"相關接口-V3》,而現在則是需要把當前主要的ASR產品的對接方式,在FSGUI中統一一下了,否則每個MRCP的對接模式的都要按項目去做了。


       首先,和WEBAPI、SDK等需要Nway_Power的支持不一樣,MRCP的接口內嵌進了FSGUI中。其配置如下:

Nway.conf:

.

.

.

unimrcp-outbound=127.0.0.1:18083    #fsgui中的mrcp接口監聽地址和端口

apiurl=http://127.0.0.1:10089/asr   #fsgui在通過ASR引擎識別后獲得的文本信息需要送回的回調址

grammar=grammar/test                #我們在ASR引擎,采用mrcp方式時所要的grammar

sound_dir=/opt/fsgui/sounds/       #我們的預置錄音存放路徑


接下來,在FreeSwitch dialplan配置:


   

     

     

     

 


然后把我們以往跑的外呼機器人應用跑起來,那么只要配置的apiurl是正確的,那么就可以看到一條條的識別結果等送過來了



這樣,我們的預期的完全在內網中的智能客服系統就可以更方便的跑起來了,而不象以前不斷的以項目形式做這塊應用。


增強一下接口的代碼

需要實現的三個接口

1.1 cdr接口,event接口,人機處理接口


1.2 cdr接口用于接收通話清單

1.2.1 示例代碼

func cdr(w http.ResponseWriter, req *http.Request) {
     
    con, _ := ioutil.ReadAll(req.Body)
    if req != nil {
        defer req.Body.Close()
    }

     
    var dat map[string]interface{}
    err := json.Unmarshal(con, &dat)
    if err != nil {
         
        logs.Error(err)
        return
    }
    var dataCdr map[string]interface{}
    data, err := json.Marshal(dat["callerCdr"])
    if err != nil {
         
        logs.Error(err)
        return
    }
    json.Unmarshal(data, &dataCdr)
     

    var cdr = ai_db.DBCdr{}
    var cdrModel = ai_db.AiCdr{}
    var runTime = ai_db.DBRunTime{}
    var rtModel = ai_db.RunTimeModel{}
    rtModel, err = runTime.RunTimeListByCallId(dataCdr["sessionid"].(string))
     

    admin, err := cdr.QueryUserInfoByOwenr(rtModel.Tpl_id)

    cdrModel.Account_id = admin.Id                    //"用戶id"
    cdrModel.Callee = dataCdr["dst"].(string)         //主叫
    cdrModel.Caller = dataCdr["calleridnum"].(string) //被叫
    cdrModel.Start_time = dataCdr["calldate"].(string)
    cdrModel.End_time = dataCdr["endtime"].(string)
    cdrModel.Route_id = rtModel.Gateway_id //路由id
    cdrModel.Fee_rate = admin.Org_fee_rate //費率
    a, err := strconv.Atoi(dataCdr["billsec"].(string))
    cdrModel.Duration = a
    var duration = a / 60 //計算 計費金額
    if a%60 > 0 {
        duration += 1 //計費金額,如果不是整數 + 1
    }
    cdrModel.Bill_balance = cdrModel.Fee_rate * float32(duration)
    conf := goini.SetConfig("./config.ini")
    cdrModel.Record_base = conf.GetValue("path", "basePath") //基本路徑
    cdrModel.Record_path = dat["recordurl"].(string)
    cdrModel.Task_id = rtModel.Taskid
    cdrModel.Intention = rtModel.Intention
    cdrModel.Call_id = dataCdr["sessionid"].(string)

    err = cdr.InsertCdr(cdrModel)
    if err != nil {
        logs.Error(err)
        //return
    }

    fmt.Println(dataCdr["sessionid"].(string))
    err = runTime.DeleteRunTimeByCall(dataCdr["sessionid"].(string))
    if err != nil {
        logs.Error(err)
        return
    }

}


1.3 event接口用于推送通話過程中產生的各類事件

1.3.1 event處理示例

func event(w http.ResponseWriter, req *http.Request) {
    con, _ := ioutil.ReadAll(req.Body)
    if req != nil {
        defer req.Body.Close()
    }

     
    var data map[string]interface{}
     
    err := json.Unmarshal(con, &data)
    if err != nil {
        fmt.Println(err)
    }
    var runtime = ai_db.DBRunTime{}
    model, err := runtime.RunTimeListByCallId(data["sessionid"].(string))
     
    if err != nil {
        logs.Error(err)
        return
    }
    if data["status"] == "caller-start" {
        model.Call_state = 1
    } else if data["status"] == "caller-ringing" {
        model.Call_state = 1
    } else if data["status"] == "caller-answered" {
        model.Call_state = 2
    } else if data["status"] == "caller-hangup" {
        model.Call_state = 3
    }
    //根據 phone 找到對應的號碼組 ,根據任務id找到對應的號碼組, 根據對應的號碼組和phone互相匹配的進行修改
    //修改 Has_called 為已呼出狀態
    var dbnumber = ai_db.DBNumber{}
    err = dbnumber.UpdateNumberByGroupId(model.Call_state, model.Number_map_id)
    if err != nil {
        logs.Error(err)
        return
    }
     
    err = runtime.UpdateRunTimeByCall(model)
    if err != nil {
        logs.Error(err)
    }
     
}



1.4 人機處理接口用于進行ASRTTS、通信、放音等等


1.4.1.1 notify定義

      enter 表明有電話剛進入,則我們需要進行開場白了,呼入的為:您好,有什么能幫您?  
             呼出的為:您好,我是xx公司,做xx的!
 
      asr_result:是由nway_power通過采集數據后送給識別引擎后識別結果送過來了
 
      vad_short_sentence_file:在mode2時,進行放音時采集,
          用于更精準的打斷功能

1.4.2 action定義

      asr:用于播放tts合成語音或放a.wav等預錄制的語音
 
      hangup:用于放音后掛機
 
      bridge:轉到某個座席,可為內線也可為外線
 
      stop_asr:用于在播放一個長語音時,由于識別引擎識別到人工部分說語音而中止當前的流程

1.4.3 params定義

      prompt:用于將交互時的要合成的tts或預錄的語音文件傳給系統,
                  用.wav文件直接則播放和sounddir為主路徑下的該預錄制文件,
                  如果是不帶.wav則先tts合成再播放,如果是file_string:                   則順序播放以”,”分隔的多個.wav錄音文件
 
      cause:用于標明掛機原因
 
      usermsg:用戶定義參數
 
      number:用于標明要呼轉的號碼
 
      callerid:用于標明呼出的號碼,即外顯號碼
 
       gateway:用于標明是通過哪個網關呼出,如果為空,則是呼轉給內線號碼
 
       max_waiting_ms:最長等待時長
 
       retry:嘗試次數
 
       mode0為只要有響動就打斷,1為不打斷一直到放音結束,             2為做實時采集用戶人工語音,并識別后送給業務層處理,按用戶命令來走一下步

ag真人视讯腾讯微博 比特币暴涨利好长电科技 江苏11选5历史遗漏号码查询 湖北快3走势图遗漏图 篮彩让分胜负规律 吉林11选5走势图一t0p10遗漏 足球胜平负概率 宁夏11选5技巧 最佳期货分析师 捕鱼电玩城送金币 牛牛水果大餐 河南体育彩票网 香港特码资料彩图 牛湖北快三走势图 分分彩是不是有人控制 足球比分直播网 比特币平台倒闭