You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
278 lines
7.0 KiB
Go
278 lines
7.0 KiB
Go
3 years ago
|
package icshttpclient
|
||
|
|
||
|
import (
|
||
|
"bytes"
|
||
|
"encoding/json"
|
||
|
"fmt"
|
||
|
"io"
|
||
|
"io/ioutil"
|
||
|
"net/http"
|
||
|
"time"
|
||
|
|
||
|
"gitlab.com/cinnamon/voiceagent/icserror"
|
||
|
"gitlab.com/cinnamon/voiceagent/icslog"
|
||
|
)
|
||
|
|
||
|
type IcsHttpClient struct {
|
||
|
Method string
|
||
|
URL string
|
||
|
Request *http.Request
|
||
|
http.Client
|
||
|
}
|
||
|
|
||
|
type ServiceInfoBody struct {
|
||
|
CustTel string `json:"custTel"`
|
||
|
}
|
||
|
|
||
|
type ServiceInfoResp struct {
|
||
|
ServiceInfoMent string `json:"serviceInfoMent"`
|
||
|
ServiceInfo []ServiceInfoJSON `json:"serviceInfo"`
|
||
|
}
|
||
|
|
||
|
type ServiceInfoJSON struct {
|
||
|
OprMngCode string `json:"oprMngCode"`
|
||
|
Dtmf int `json:"dtmf"`
|
||
|
}
|
||
|
|
||
|
type ProcessBody struct {
|
||
|
Token string `json:"token"`
|
||
|
OprMngCode string `json:"oprMngCode"`
|
||
|
Method string `json:"method"`
|
||
|
TalkText string `json:"talkText"`
|
||
|
CallID string `json:"callId"`
|
||
|
DNIS string `json:"dnis"`
|
||
|
TelNO string `json:"telNo"`
|
||
|
MentType string `json:"mentType"`
|
||
|
RecordFilePath string `json:"recordFilePath"`
|
||
|
}
|
||
|
|
||
|
type ProcessResp struct {
|
||
|
ResultCode int `json:"resultCode"`
|
||
|
Token string `json:"token"`
|
||
|
Action string `json:"action"`
|
||
|
AnnounceMents string `json:"announceMents"`
|
||
|
Data DataJSON `json:"data"`
|
||
|
}
|
||
|
|
||
|
type DataJSON struct {
|
||
|
BargeIn string `json:"bargeIn"`
|
||
|
RecodingFile string `json:"recodingFile"`
|
||
|
STTMaxTime int `json:"sttMaxTime"`
|
||
|
MaxDigit int `json:"maxDigit"`
|
||
|
MinDigit int `json:"minDigit"`
|
||
|
DigitTerm int `json:"digitTerm"`
|
||
|
TelNo string `json:"telNo"`
|
||
|
}
|
||
|
|
||
|
func NewIcsHttpClient(method, url string, body io.Reader) *IcsHttpClient {
|
||
|
c := &IcsHttpClient{Method: method, URL: url}
|
||
|
r, err := http.NewRequest(method, url, body)
|
||
|
if err != nil {
|
||
|
fmt.Println("NewHttpClient", err)
|
||
|
return nil
|
||
|
}
|
||
|
c.Request = r
|
||
|
c.SetTimeout(time.Millisecond * 1000 * 5)
|
||
|
|
||
|
return c
|
||
|
}
|
||
|
|
||
|
func (c *IcsHttpClient) SetTimeout(timeout time.Duration) {
|
||
|
c.Timeout = timeout
|
||
|
}
|
||
|
|
||
|
///platform/api/call/serviceInfo
|
||
|
func PostServiceInfo(url string, custTel string) (svcInfo *ServiceInfoResp) {
|
||
|
svcInfoBody := ServiceInfoBody{CustTel: custTel}
|
||
|
b, err := json.Marshal(svcInfoBody)
|
||
|
if err != nil {
|
||
|
//fmt.Println(">>> json marshal error", err)
|
||
|
return nil
|
||
|
}
|
||
|
body := bytes.NewBuffer(b)
|
||
|
|
||
|
/*
|
||
|
fmt.Println("url", url)
|
||
|
fmt.Println("body", body)
|
||
|
*/
|
||
|
client := NewIcsHttpClient("POST", url, body)
|
||
|
if client == nil {
|
||
|
fmt.Println("http client error")
|
||
|
return nil
|
||
|
}
|
||
|
client.Request.Header.Add("Content-Type", "application/json;charset=UTF-8")
|
||
|
resp, err := client.Do(client.Request)
|
||
|
if err != nil {
|
||
|
fmt.Println("http request error", err)
|
||
|
return nil
|
||
|
}
|
||
|
//resBody := make([]byte, resp.ContentLength)
|
||
|
//resp.Body.Read(resBody)
|
||
|
resBody, err := ioutil.ReadAll(resp.Body)
|
||
|
if err != nil {
|
||
|
fmt.Println(err)
|
||
|
return nil
|
||
|
}
|
||
|
defer resp.Body.Close()
|
||
|
/*
|
||
|
fmt.Println("Response>")
|
||
|
fmt.Println(string(resBody))
|
||
|
fmt.Println("====================")
|
||
|
|
||
|
fmt.Printf("%+v\n", resp)
|
||
|
*/
|
||
|
|
||
|
err = json.Unmarshal(resBody, &svcInfo)
|
||
|
if err != nil {
|
||
|
fmt.Printf("%s - %+v\n", err, resBody)
|
||
|
return nil
|
||
|
}
|
||
|
//ment = svcInfo.ServiceInfoMent
|
||
|
//fmt.Println("svc ment", svcInfo.ServiceInfoMent)
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
///platform/api/call/process
|
||
|
func PostProcess(url, method string, sttResult, custTel, oprMngCode, callID string, dnis string, token string, sttFilePath string) (processResp *ProcessResp) {
|
||
|
l := icslog.GetIcsLog()
|
||
|
/*
|
||
|
type ProcessBody struct {
|
||
|
Token string `json:"token"`
|
||
|
OprMngCode string `json:"oprMngCode"`
|
||
|
Method string `json:"method"`
|
||
|
TalkText string `json:"talkText"`
|
||
|
CallID string `json:"callID"`
|
||
|
TelNO string `json:"telNo"`
|
||
|
MentType string `json:"mentType"`
|
||
|
RecordFilePath string `json:"recordFilePath"`
|
||
|
}
|
||
|
*/
|
||
|
processBody := ProcessBody{
|
||
|
Token: token,
|
||
|
OprMngCode: oprMngCode,
|
||
|
Method: method,
|
||
|
TalkText: sttResult,
|
||
|
CallID: callID,
|
||
|
DNIS: dnis,
|
||
|
TelNO: custTel,
|
||
|
MentType: "VOICE",
|
||
|
RecordFilePath: sttFilePath,
|
||
|
}
|
||
|
b, err := json.Marshal(processBody)
|
||
|
if err != nil {
|
||
|
//fmt.Println(">>> json marshal error", err)
|
||
|
return nil
|
||
|
}
|
||
|
body := bytes.NewBuffer(b)
|
||
|
|
||
|
/*
|
||
|
fmt.Println("url", url)
|
||
|
fmt.Println("body", body)
|
||
|
*/
|
||
|
client := NewIcsHttpClient("POST", url, body)
|
||
|
if client == nil {
|
||
|
//fmt.Println("http client error")
|
||
|
return nil
|
||
|
}
|
||
|
client.Request.Header.Add("Content-Type", "application/json;charset=UTF-8")
|
||
|
l.Printf(icslog.LOG_LEVEL_DEBUG2, -1, "Post Request: %+v", client.Request)
|
||
|
|
||
|
////////////////////////////////////////////
|
||
|
resp, err := client.Do(client.Request)
|
||
|
if err != nil {
|
||
|
//fmt.Println("http request error", err)
|
||
|
return nil
|
||
|
}
|
||
|
//fmt.Printf("client request : %+v\n%+v\n", client.Request, string(b))
|
||
|
//resBody := make([]byte, resp.ContentLength)
|
||
|
//resp.Body.Read(resBody)
|
||
|
resBody, err := ioutil.ReadAll(resp.Body)
|
||
|
if err != nil {
|
||
|
//fmt.Println(err)
|
||
|
return nil
|
||
|
}
|
||
|
/*
|
||
|
fmt.Println("\nResponse>")
|
||
|
fmt.Println(string(resBody))
|
||
|
fmt.Println("====================")
|
||
|
|
||
|
fmt.Printf("%+v\n", resp)
|
||
|
*/
|
||
|
|
||
|
resp.Body.Close()
|
||
|
////////////////////////////////////////////
|
||
|
|
||
|
//var svcInfo ServiceInfoResp
|
||
|
json.Unmarshal(resBody, &processResp)
|
||
|
//fmt.Printf("process resp: %+v\n", processResp)
|
||
|
|
||
|
return
|
||
|
}
|
||
|
|
||
|
// add client info
|
||
|
func NewPostProcess(url, method string, sttResult, custTel, oprMngCode, callID string, dnis string, token string, sttFilePath string) (cleint *IcsHttpClient) {
|
||
|
l := icslog.GetIcsLog()
|
||
|
/*
|
||
|
type ProcessBody struct {
|
||
|
Token string `json:"token"`
|
||
|
OprMngCode string `json:"oprMngCode"`
|
||
|
Method string `json:"method"`
|
||
|
TalkText string `json:"talkText"`
|
||
|
CallID string `json:"callID"`
|
||
|
TelNO string `json:"telNo"`
|
||
|
MentType string `json:"mentType"`
|
||
|
RecordFilePath string `json:"recordFilePath"`
|
||
|
}
|
||
|
*/
|
||
|
processBody := ProcessBody{
|
||
|
Token: token,
|
||
|
OprMngCode: oprMngCode,
|
||
|
Method: method,
|
||
|
TalkText: sttResult,
|
||
|
CallID: callID,
|
||
|
DNIS: dnis,
|
||
|
TelNO: custTel,
|
||
|
MentType: "VOICE",
|
||
|
RecordFilePath: sttFilePath,
|
||
|
}
|
||
|
b, err := json.Marshal(processBody)
|
||
|
if err != nil {
|
||
|
//fmt.Println(">>> json marshal error", err)
|
||
|
return nil
|
||
|
}
|
||
|
body := bytes.NewBuffer(b)
|
||
|
|
||
|
/*
|
||
|
fmt.Println("url", url)
|
||
|
fmt.Println("body", body)
|
||
|
*/
|
||
|
client := NewIcsHttpClient("POST", url, body)
|
||
|
if client == nil {
|
||
|
//fmt.Println("http client error")
|
||
|
return nil
|
||
|
}
|
||
|
client.Request.Header.Add("Content-Type", "application/json;charset=UTF-8")
|
||
|
l.Printf(icslog.LOG_LEVEL_DEBUG2, -1, "Post Request: %+v", client.Request)
|
||
|
|
||
|
return client
|
||
|
}
|
||
|
|
||
|
// resp body
|
||
|
func ClientDo(request *IcsHttpClient) (resBody []byte, cerr *icserror.IcsError) {
|
||
|
resp, err := request.Do(request.Request)
|
||
|
if err != nil {
|
||
|
//fmt.Println("http request error", err)
|
||
|
icserror.ICSERRHTTPClientResponse.SetError(err)
|
||
|
return nil, icserror.ICSERRHTTPClientResponse
|
||
|
}
|
||
|
resBody, err = ioutil.ReadAll(resp.Body)
|
||
|
defer resp.Body.Close()
|
||
|
if err != nil {
|
||
|
icserror.ICSERRHTTPClientResponse.SetError(err)
|
||
|
return nil, icserror.ICSERRHTTPClientResponse
|
||
|
}
|
||
|
|
||
|
return resBody, nil
|
||
|
}
|