http接口非restful调用接口
//ts格式 time.Now().Format("20060102150405") //username为用户名 //password不在实际通信中传输,而是经过和时间一起做了md5后打进sign中传输 func Check_sign(sign, ts, username, password string) bool { //所有的通过http接口调用都需要这样认证,不论次数,不论哪个接口 //需要password,ts,username nway_ori_str := "password=" + password + "&ts=" + ts + "username=" + username h := md5.New() h.Write([]byte(nway_ori_str)) tmp_sign := hex.EncodeToString(h.Sum(nil)) if sign == tmp_sign { return true } return false } //签权规则 func Nway_comm_chk_sign(P *ParseRequest) (bool, string) { sign := P.String("sign", "") ts := P.String("ts", "") username := P.String("username", "") //以上三样是由请求方发过来的 if *username != nway_global.Http_service_username { logger.Error(*username + " not a valid username") return false, "not a valid username" } //时间必须是当时上海时间五分钟内 if Check_time(*ts) == false { //时间不在五分钟内 logger.Error(*username + "time more than 5 minutes") return false, "time more than 5 minutes" } //按ts,username等,进行生成sign if Check_sign(*sign, *ts, *username, nway_global.Http_service_password) == false { logger.Error(*username + "sign not a valid sign") return false, "sign not a valid sign" } return true, "" } // func StartHttpService(ipport string) { /* 调用返回结果,肯定都会返回的有以下: "info" :用于返回一些信息 "code" :用于返回调用结果,有以下一些码:"200ok":成功,"404":找不到资源,"500":服务器错误,"401":认证没通过,"403":sign部分认证不通过 "execute_result" :用于返回执行结果 同时会在接口中返回各自的一些必要参数 */ ///agent /* 说明:上线 输入: extension 分机 group 组 返回: extension 分机 group 组 */ http.HandleFunc("/agent_up", Http_Agent_up) /* 说明:下线 输入: extension 分机 返回: extension 分机 */ http.HandleFunc("/agent_down", Http_Agent_down) /* 说明:置闲 输入: extension 分机 返回: extension 分机 */ http.HandleFunc("/agent_ready", Http_Agent_ready) /* 说明:置忙 输入: extension 分机 返回: extension 分机 */ http.HandleFunc("/agent_busy", Http_Agent_busy) ///vip /* 说明:添加一个vip 输入: group 组 phone 电话号码 返回: group 组 phone 电话号码 */ http.HandleFunc("/vip_queue_add", Http_Vip_queue_add) /* 说明:删除一个vip 输入: group 组 phone 电话号码 返回: group 组 phone 电话号码 */ http.HandleFunc("/vip_queue_remove", Http_Vip_queue_remove) //系统信息获取 /* 说明:获取一个uuid 输入: 返回: uuid */ http.HandleFunc("/get_uuid", Http_Get_uuid) /* 说明:心跳检测 输入: 返回: uuid */ http.HandleFunc("/heartbeat", Http_HeartBeat) //获取某个通话中电话的uuid /* 说明:获取通话中的电话的uuid 输入: phone 电话号码 返回: uuid */ http.HandleFunc("/get_phone_uuid", Http_get_phone_uuid) //挂断 /* 说明:挂断某个号码的通话 输入: phone 电话号码 返回: */ http.HandleFunc("/hangup", Http_hangup) //hold和park,park后需要转到其它电话中去 /* 说明:hold某个号码正在通话的通道 输入: phone 电话号码 返回: */ http.HandleFunc("/hold", Http_hold) /* 说明:unhold某个号码正在通话的通道 输入: phone 电话号码 返回: */ http.HandleFunc("/unhold", Http_unhold) /* 说明:park某个号码正在通话的通道 输入: phone 电话号码 返回: */ http.HandleFunc("/park", Http_park) /* 说明:应答某个号码正在通话的通道 输入: phone 电话号码 返回: */ http.HandleFunc("/phone_answer", Http_phone_answer) //黑名单 /* 说明:对某个组添加黑名单 输入: Call_number 电话号码 Group_number 组名 返回: */ http.HandleFunc("/add_black_list", Http_add_black_list) /* 说明:移除某个组里的某个黑名单 输入: Call_number 电话号码 Group_number 组名 返回: */ http.HandleFunc("/delete_black_list", Http_delete_black_list) //呼叫 /* 说明:由平台发起呼叫 输入: Job_uuid 指定的uuid Callername 主叫名称 Callernum 主叫号码 Calleenum 被叫号三 A_gatewayname 如果主叫是外线,则需要指定网关名 B_gatewayname 如果被叫是外线,则需要指定网关名 A_effective_caller_id_num 在主叫处显示的号码 B_effective_caller_id_num 在被叫处显示的号码 A_external 主叫是外线 B_external 被叫是外线 返回: */ http.HandleFunc("/originate", Http_originate) //更多originate需要通过restful接口调用 //代接 /* 说明:由平台发起代接 输入: phone 用于代接最后来电的号码,如办公室最后只有一个人了,这个人调用这个接口,就会呼到这个号码用于和主叫来通话 返回: */ http.HandleFunc("/intercept", Http_intercept) //监听 /* 说明:由平台发起代接 输入: EvdedPhone 被监听的号码 EvdPhone 要呼出的号码,即班组长分机 EvdGateway 如果监听者电话是外线,需要指定网关,比如老板在外边,让班组长指定监听某个客服的讲话 返回: */ http.HandleFunc("/eavesdrop", Http_eavesdrop) //三方通话 /* 说明:三方通话 输入: EvdedPhone 被监听的号码 EvdPhone 要呼出的号码,即班组长分机 EvdGateway 如果监听者电话是外线,需要指定网关,比如老板在外边,让班组长指定监听某个客服的讲话 DisplayNumber 监听者显示的号码,一般用于内线 返回: */ http.HandleFunc("/threeway", Http_threeway) /* 说明:耳语 输入: EvdedPhone 被监听的号码 EvdPhone 要呼出的号码,即班组长分机 EvdGateway 如果监听者电话是外线,需要指定网关,比如老板在外边,让班组长指定和某个客服的讲话,并不被客户听到 返回: */ http.HandleFunc("/whisper", Http_whisper) /* 说明:转接 输入: EvdedPhone 要转出的号码 EvdPhone 要被转的号码 EvdGateway 如果被转的是外线,需要指定网关 返回: */ http.HandleFunc("/transfer", Http_transfer) /* 说明:放音 输入: PhoneNumber 号码 FilePath 路径 Loopplay 是否循环播放 Channel 两个通道是对哪个通道放音:both,都放;caller,主叫放音; callee,被叫放音 返回: */ http.HandleFunc("/playback", Http_playback) /* 说明:查询分机信息 输入: phone 号码 返回: code 200OK, 同时由 ext_info 返回用户信息 */ http.HandleFunc("/extension_info", Http_extension_info) /* 说明:让ip话机接听 输入: uuid 这一通电话的uuid通道 返回: */ http.HandleFunc("/uuid_phone_answer", Http_uuid_phone_answer) logger.Error(http.ListenAndServe(ipport, nil)) }