1. 模拟一个简单的智能客服系统:
  2. 宁卫通信
  3. 新闻动态
  4. 宁卫新闻
  5. 模拟一个简单的智能客服系统

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

   现在我们通过我们的VAD模块来实现一个简单的自动智能客服系统,

假设我们预计可能存在以下若干关键词:

查房
退房
清洁
续住
预订
订房
叫餐
退押金
不能上网
人工服务
    我们采用的引擎是科大讯飞的引擎,用于通过FreeSwitch把语音流和科大讯飞的云开放
平台对接起来后,进行TTS、ASR处理后,再进一步由我们来进行更多的处理,但由于是
演示,所以基本是产生一个文本通过

我们的业务处理代码:

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

*/package main

import (    

"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()

}