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