FreeSWITCH中文网,电话机器人开发网 ,微信订阅号:

FreeSWITCH及VOIP,Openser,电话机器人等产品中文技术资讯、交流、沟通、培训、咨询、服务一体化网络。QQ群:293697898

模拟一个简单的智能客服系统


tags:FreeSwitch ASR 智能客服 科大讯飞 百度 创建时间:2017-10-31 17:09:34

现在我们通过我们的VAD模块来实现一个简单的自动智能客服系统,假设我们预计可能存在以下若干关键词:

查房

退房

清洁

续住

预订

订房

叫餐

退押金

不能上网

人工服务

我们采用的引擎是科大讯飞的引擎,用于通过FreeSwitch把语音流和科大讯飞的云开放平台对接起来后,进行TTS、ASR处理后,再进一步由我们来进行更多的处理,但由于是演示,所以基本是产生一个文本通过TTS转给我们。
要测试的话,可以通过注册到我们的云服务器上,注册一个1000-1019共20个账号,密码均为1234,注册截图如下:

我们的业务处理代码:

/*
名称:智能语音自动处理和应答
开发者:李浩
引擎:科大讯飞
所有权:上海宁卫信息技术有限公司
时间:2017-10-21
*/

package mainimport (    "encoding/json"
    "fmt"
    "io/ioutil"
    "net/http"

    "strings")func AsrServer(w http.ResponseWriter, req *http.Request) {
    defer func() {        if err := recover(); err != nil {
            fmt.Println(err)            return
        }
    }()
    con, _ := ioutil.ReadAll(req.Body)    if req != nil {
        defer req.Body.Close()
    }    //fmt.Println(string(con))
    var dat map[string]interface{}
    fmt.Println("-------------------------------------------------------------------------------------------")
    fmt.Println(string(con))
    err := json.Unmarshal(con, &dat)    if err == nil {        if dat["notify"] != nil && dat["calleeid"] != nil && dat["callerid"] != nil && dat["callid"] != nil {
            notify := dat["notify"].(string)            //calleeid := dat["calleeid"].(string)
            //callerid := dat["callerid"].(string)
            //callid := dat["callid"].(string)
            errorcode := 0
            if dat["errorcode"] != nil {
                errorcode = int(dat["errorcode"].(float64))
            }
            message := ""
            if dat["message"] != nil {
                message = dat["message"].(string)
            }
            prompt := "您好,有什么能帮您的吗?!"
            if notify == "enter" {
                jsonStr := `{"action":"asr","flowdata":"","params":{"prompt":"欢迎致电上海宁卫,请说测试命令,比如查房,退房,清洁,续住,预订,叫餐,退押金,不能上网,人工服务!","max_waiting_ms":5000,"retry":0,"mode":0}}`                //w.WriteHeader()
                w.Write([]byte(jsonStr))
            } else if notify == "asr_result" {                
                if errorcode == 0 {                    
                    if message == "" {
                        prompt = "ASR未识别你说的话,请重新说命令!"
                    } else if strings.Contains(message, "查房") {
                        prompt = "你以为你是警察啊,说查房就查房,要查就从胡聪聪开始!"
                    } else if strings.Contains(message, "退房") {
                        prompt = "能不能不退房,我们可是霸王房!"
                    } else if strings.Contains(message, "清洁") {
                        prompt = "用不着清洁吧,我们的房间很干净,请您自己扫扫!"
                    } else if strings.Contains(message, "续住") {
                        prompt = "我们将免费为您续住365天!"

                    } else if strings.Contains(message, "预订") || strings.Contains(message, "订房") {
                        prompt = "请登录http://www.nway.com.cn进行预计!"
                    } else if strings.Contains(message, "叫餐") {
                        prompt = "您是喜欢吃川菜?鲁菜?淮扬菜?湘菜?粤菜?本帮菜?西餐?"
                    } else if strings.Contains(message, "退押金") {
                        prompt = "押金已退回到您手里,请抽空看看手!"
                    } else if strings.Contains(message, "不能上网") {
                        prompt = "不是有4G吗?上网很容易,流量不用愁!"
                    } else if strings.Contains(message, "人工服务") {
                        prompt = "您是找特殊的还是找酒店服务员?"
                    } else if strings.Contains(message, "挂断") || strings.Contains(message, "挂机") {                        //prompt = "亲爱的,bye!"
                        jsonStr := `{"action":"hangup","flowdata":"","params":{"cause":0,"usermsg":"caller request"}}`

                        w.Write([]byte(jsonStr))
                    }
                } else if errorcode == -1 {
                    prompt = "未检测到声音,请说命令!"
                } else if errorcode == -2 {
                    prompt = "创建文件失败请联系管理员!"
                }                if prompt != "" {
                    jsonStr := `{"action":"asr","params":{"prompt":"` + prompt + `","max_waiting_ms":5000,"retry":0,"mode":0}}`
                    fmt.Println(jsonStr)
                    w.Write([]byte(jsonStr))
                }
            }
        }

    } else {
        fmt.Println("unmarshal event message error:", err, "  &&&    message:", string(con))

    }
}
func Start() {
    http.HandleFunc("/asr", AsrServer)

    err := http.ListenAndServe(":10086", nil) // http.ListenAndServeTLS(ipport, nway_path.GetCurrentDirectory()+crtfile, nway_path.GetCurrentDirectory()+keyfile, nil)
    if err != nil {
        fmt.Println("ListenAndServe: ", err)
    }
}
func main() {    
   Start()
}


上海老李,QQ:1354608370,FreeSWITCH QQ群: