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))
}