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

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

FSGUI-V2.5.0.1发布以及外呼机器人相关接口


tags:外呼机器人 FreeSwitch FSGUI 机器人接口 创建时间:2018-01-26 10:08:28

在语音机器人推出的这段时间内,大量的各行业客户均从询到用,感谢各位的支持!针对客户的需求,我们也在不断地提升我们的功能和性能,提升我们的价值。

与此同时,我们的FSGUI也升级到了 V2.5.0.1,水到渠成嘛!

体验版可以在以下位置下载: https://pan.baidu.com/s/1bpSEcmr

有关外呼机器人的接口如下:

1 注册获取token接口login

    curl -d '{"username": "admin", "password": "admin"}' -H "Content-Type:application/json" http://192.168.0.200:8085/api/login

2 发起呼叫的接口

    curl -H "Content-Type: application/json" -d '{"Job_uuid":"feew32223dd3e32re32e32","Callernum":"18621575908",  "Calleenum":"999888","A_gatewayname":"nway1","A_effective_caller_id_num":"057168686868", "A_external":"true","Cdr_url":"http://127.0.0.1:8085/fs/cdr","Event_url":"http://127.0.0.1:8085/fs/callstate","Record_file":"mytest.wav"}'  -H "Authorization:Nway TOKEN" http://127.0.0.1:8085/api/originate_i

3 需要实现的三个接口,cdr接口,event接口,人机处理接口 人机处理接口是仿催收

3.1 notify定义

  enter : 表明有电话刚进入,则我们需要进行开场白了,呼入的为:您好,有什么能帮您?    呼出的为:您好,我是xx公司,做xx的!

  asr_result:是由nway_power通过采集数据后送给识别引擎后识别结果送过来了

  vad_short_sentence_file:在mode为2时,进行放音时采集,用于更精准的打断功能

3.2 action定义

  asr:用于播放tts合成语音或放a.wav等预录制的语音

  hangup:用于放音后挂机

  bridge:转到某个座席,可为内线也可为外线

  stop_asr:用于在播放一个长语音时,由于识别引擎识别到人工部分说语音而中止当前的流程

3.3 params定义

  prompt:用于将交互时的要合成的tts或预录的语音文件传给系统

  cause:用于标明挂机原因

  usermsg:用户定义参数

  number:用于标明要呼转的号码

  callerid:用于标明呼出的号码,即外显号码

   gateway:用于标明是通过哪个网关呼出,如果为空,则是呼转给内线号码

   max_waiting_ms:最长等待时长

   retry:尝试次数

   mode:0为只要有响动就打断,1为不打断一直到放音结束,2为做实时采集用户人工语音,并识别后送给业务层处理,按用户命令来走一下步

3.4 golang业务处理示例

    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":7000,"retry":0,"mode":1}}`
                //w.WriteHeader()
                w.Write([]byte(jsonStr))
            } else if notify == "asr_result" {

                if errorcode == 0 {

                    if strings.Contains(message, "不是") || strings.Contains(message, "打错") {
                        prompt = "不好意思,打扰您了!"

                        jsonStr := `{"action":"hangup","flowdata":"","params":{"prompt":"` + prompt + `","cause":0,"usermsg":"caller request"}}`

                        w.Write([]byte(jsonStr))

                    } else if strings.Contains(message, "忙") || strings.Contains(message, "上班") || strings.Contains(message, "不方便") {
                        prompt = "那我下次再找您!"

                        jsonStr := `{"action":"hangup","flowdata":"","params":{"prompt":"` + prompt + `","cause":0,"usermsg":"caller request"}}`

                        w.Write([]byte(jsonStr))
                    } else if strings.Contains(message, "是") || strings.Contains(message, "没错") {
                        prompt = "张先生,您好,建设银行信用卡中心,来电提醒您信用卡(尾号为9527)已经逾期,本期全额1000元,最低还款额800元,请您尽快处理。"

                    } else if strings.Contains(message, "处理") {
                        prompt = "谢谢您!再见。"

                    } else if strings.Contains(message, "怎么了") || strings.Contains(message, "什么事") || strings.Contains(message, "哪里") || strings.Contains(message, "啥事") {
                        prompt = "您好,我们是建设银行信用卡中心的,您是张先生吗?"

                    } else if strings.Contains(message, "过期") || strings.Contains(message, "没收到") || strings.Contains(message, "账单") {
                        prompt = "张先生,是这样的我们每个月在账单日之后都会给您寄对账单。我先跟您核对一下您登记的通信地址。您地址是:深圳市南山区科发路6666号11栋801,您看看对不对?"

                    } else if strings.Contains(message, "不对") || strings.Contains(message, "错的") {
                        prompt = "张先生,系统登记的地址与您刚提供的地址不符。我建议您尽快联系95533客服热线更改地址或要求客服重新补寄对账单给您。但目前账户已经逾期,希望您尽快处理,以免影响您的信用记录。 您本期账单总额1000元,最低还款额800元,请您尽快处理。"

                    } else if strings.Contains(message, "对的") || strings.Contains(message, "是的") || strings.Contains(message, "没问题") {
                        prompt = "张先生,核对地址无误。我们是根据您登记的地址统一寄发对账单,也许是因为邮递的误差导致您还没有收到,如需重新邮寄账单请您联系我行95533客服热线咨询。但目前账户已经逾期,您本期账单总额1000元,最低还款额800元,为免影响您的信用记录,请您尽快处理。谢谢您!再见。"

                    } else if strings.Contains(message, "热线") {
                        prompt = "95533"

                    } else if strings.Contains(message, "还款") || strings.Contains(message, "办理") {
                        prompt = "好的,张先生,再次提醒您,您的信用卡本期账单金额是1000元,最低还款额是800元。请您尽快还款。谢谢您!再见。"

                    } else if strings.Contains(message, "再见") || strings.Contains(message, "好的") {

                        prompt = "好的,再见!"

                        jsonStr := `{"action":"hangup","flowdata":"","params":{"prompt":"` + prompt + `","cause":0,"usermsg":"caller request"}}`

                        w.Write([]byte(jsonStr))
                    } else if strings.Contains(message, "转人工")   {
                        jsonStr := `{"action":"bridge","flowdata":"","params":{"number":"18621575908","callerid":"02112345678","gateway":"nway1","prompt":"","background":""}}`
                        fmt.Println(jsonStr)
                        w.Write([]byte(jsonStr))

                    } else  {
                        fmt.Println(message)
                    }
                } else if errorcode == -1 {
                    //prompt = "您在吗?"
                } else if errorcode == -2 {
                    prompt = ""
                }

                if prompt != "" {
                    jsonStr := `{"action":"asr","params":{"prompt":"` + prompt + `","max_waiting_ms":10000,"retry":0,"mode":1}}`
                    fmt.Println(jsonStr)
                    w.Write([]byte(jsonStr))
                }
            }
        }

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

    }
}

4 当发起呼叫时需要指定cdr 和event接口的url

Nway_power系列: PPT和简介:http://www.6fok.com/topics/105

下载地址:

V2.4.0.1 ISO: https://pan.baidu.com/s/1jI5ryzc

产品部分链接:

SIP录音系统正式上线V1.0: http://mp.weixin.qq.com/s/-OfSZGpPnhwv-AdTHTJarQ

模拟一个简单的智能客服系统:http://mp.weixin.qq.com/s/bpvApLKQEpg9w36-WhPatQ

使用FSGUI进行快速话务呼叫和处理:http://mp.weixin.qq.com/s/strqQoHJ2mOOErl_AyGvyw

呼叫中心开发培训及服务链接:

FreeSwitch企业培训PPT:https://mp.weixin.qq.com/s/7Qa1voUhS2Rn5PHJ5J6RNw

FreeSwitch简要使用教程:http://mp.weixin.qq.com/s/PnWb9RAC4eVjiKUuexLfIg

VoIP负载均衡方案:http://mp.weixin.qq.com/s/LtMJyG3GQUTVsDSroAuPsw



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