diff --git a/app_send.sh b/app_send.sh index 69bbd18..cb99718 100644 --- a/app_send.sh +++ b/app_send.sh @@ -1 +1 @@ -scp -v -i /home/ljhwan206/etc/key.pem voicegateway ec2-user@15.165.95.232:/home/ec2-user/vgw/svc/icsbot/bin/ +scp -v -i /home/ljhwan206/etc/key.pem voicebot ec2-user@15.165.95.232:/home/ec2-user/vgw/svc/icsbot/bin/ diff --git a/icsapp/execsvc.go b/icsapp/execsvc.go index 2aba191..7a99472 100644 --- a/icsapp/execsvc.go +++ b/icsapp/execsvc.go @@ -62,104 +62,6 @@ func (exe IcsExec) Execute() *icserror.IcsError { sm := icssessionmanager.NewSessionManager() sm.Load() - ///////////////////////////////////////////////////////////////////// - //start Heart beat TCP server - // hbDone := make(chan *icserror.IcsError) - // if exe.config.HeartBeat.Value { - // go func() { - // saddr := fmt.Sprintf(":%d", exe.config.HeartBeat.Port) - // hbladdr := icsnet.NewNetAddrWithIPAddr(saddr) - // var hbErr *icserror.IcsError - // //set handler - // exe.hbNet, hbErr = icsnet.ListenAndServeTCP(&hbladdr, nil, LINEEND1, TCPConnHandlerHeartBeat) - // if hbErr != nil { - // l.Printf(icslog.LOG_LEVEL_ERROR, -1, "Heart beat Listen - %s", hbErr.GetError()) - // hbDone <- hbErr - // } else { - // l.Printf(icslog.LOG_LEVEL_INFO, -1, "Liesting Heart beat - %s", saddr) - // } - // }() - // } - - // ///////////////////////////////////////////////////////////////////// - // //start Call signal TCP server - // csDone := make(chan *icserror.IcsError) - // p1 := &exe.config.ServerConfig.CSConfig.Port - // go func() { - // //saddr := fmt.Sprintf("%s:%d", exe.config.STTConfig.SrcIP, exe.config.STTConfig.Port) - // cslAddr := icsnet.NewNetAddrWithIPPort("0.0.0.0", *p1) - // //cslAddr := icsnet.NewNetAddrWithIPPort("0.0.0.0", exe.config.AgentConfig[idx].CSConfig.Port) - // //cslAddr := icsnet.NewNetAddrWithIPPort("0.0.0.0", exe.config.AgentConfig[iter].CSConfig.Port) - // var csErr *icserror.IcsError - // //set handler - // exe.csNet, csErr = icsnet.ListenAndServeTCP(&cslAddr, nil, LINEEND2, TCPConnHandlerCS) - // if csErr != nil { - // l.Printf(icslog.LOG_LEVEL_ERROR, -1, "Call Signal Listen failure - %s", csErr.GetMessage()) - // csDone <- csErr - // } else { - // l.Printf(icslog.LOG_LEVEL_INFO, -1, "Listening Call Signal - %s", cslAddr) - // } - // }() - // ///////////////////////////////////////////////////////////////////// - // //start STT TCP server - // sttDone := make(chan *icserror.IcsError) - // if exe.config.STTConfig.Value { - // go func() { - // saddr := fmt.Sprintf("%s:%d", exe.config.STTConfig.SrcIP, exe.config.STTConfig.Port) - // STTladdr := icsnet.NewNetAddrWithIPAddr(saddr) - // var sttErr *icserror.IcsError - // //set handler - // exe.sttNet, sttErr = icsnet.ListenAndServeTCP(&STTladdr, nil, LINEEND1, TCPConnHandlerSTT) - // if sttErr != nil { - // l.Printf(icslog.LOG_LEVEL_ERROR, -1, "STT Listen failure - %s", sttErr.GetMessage()) - // sttDone <- sttErr - // } else { - // l.Printf(icslog.LOG_LEVEL_INFO, -1, "Listening STT - %s", saddr) - // } - // //sttDone <- nil - // }() - // } - - // ///////////////////////////////////////////////////////////////////// - // //start TTS TCP server - // ttsDone := make(chan *icserror.IcsError) - // if exe.config.TTSConfig.Value { - // go func() { - // saddr := fmt.Sprintf("%s:%d", exe.config.TTSConfig.SrcIP, exe.config.TTSConfig.Port) - // TTSladdr := icsnet.NewNetAddrWithIPAddr(saddr) - // var ttsErr *icserror.IcsError - // //set handler - // exe.ttsNet, ttsErr = icsnet.ListenAndServeTCP(&TTSladdr, nil, LINEEND2, TCPConnHandlerTTS) - // if ttsErr != nil { - // l.Printf(icslog.LOG_LEVEL_ERROR, -1, "TTS Listen - %s", ttsErr.GetMessage()) - // ttsDone <- ttsErr - // } else { - // l.Printf(icslog.LOG_LEVEL_INFO, -1, "Listening TTS - %s", saddr) - // } - // //ttsDone <- nil - // }() - // } - - // ///////////////////////////////////////////////////////////////////// - // //start command TCP server - // cmdDone := make(chan *icserror.IcsError) - // if exe.config.CommandConfig.Value { - // go func() { - // saddr := fmt.Sprintf("%s:%d", exe.config.CommandConfig.SrcIP, exe.config.CommandConfig.Port) - // CMDladdr := icsnet.NewNetAddrWithIPAddr(saddr) - // var cmdErr *icserror.IcsError - // //set handler - // exe.cmdNet, cmdErr = icsnet.ListenAndServeTCP(&CMDladdr, nil, LINEEND2, TCPConnHandlerCommand) - // if cmdErr != nil { - // l.Printf(icslog.LOG_LEVEL_ERROR, -1, "Bot Command Listen - %s", cmdErr.GetMessage()) - // cmdDone <- cmdErr - // } else { - // l.Printf(icslog.LOG_LEVEL_INFO, -1, "Listeing Bot Command Listen - %s", saddr) - // } - // //ttsDone <- nil - // }() - // } - ///////////////////////////////////////////////////////////////////// //make http handler httpDone := make(chan error) diff --git a/icshttp/handler.go b/icshttp/handler.go index 31c9a66..d897324 100644 --- a/icshttp/handler.go +++ b/icshttp/handler.go @@ -7,7 +7,6 @@ import ( "io/ioutil" "math/big" "net/http" - "strconv" "strings" "sync" "time" @@ -55,8 +54,11 @@ type Request struct { Data json.RawMessage `json:"data"` } -type Transrate struct { - TargetDnis string `json:"target_dnis"` +type TransLateInfo struct { + Use bool `json:"use"` + Token string `json:"token"` + Text string `json:"text"` + Lang string `json:"lang"` } type Response struct { @@ -76,10 +78,10 @@ type ResData struct { MinDigit int `json:"minDigit"` DigitTerm int `json:"digitTerm"` TelNo string `json:"telNo"` - VoiceName int `json:"voiceName"` - Speed int `json:"speed"` - Volume int `json:"volume"` - Pitch int `json:"pitch"` + VoiceName string `json:"voiceName"` + Speed string `json:"speed"` + Volume string `json:"volume"` + Pitch string `json:"pitch"` EndCharacter []string `json:"endCharacter"` MaxWaitTime int `json:"maxNoInputTime"` UUI json.RawMessage `json:"uui"` @@ -92,6 +94,7 @@ type ResStatus struct { PreEventNum int PreEventNum2 int LoopCount int + TransLateText string } type ScenarioSession struct { @@ -103,6 +106,7 @@ type ScenarioSession struct { var handles []*handleInfo var session []*ScenarioSession +var tokenMap map[string]string func init() { handles = make([]*handleInfo, HANDLE_NUM) @@ -168,6 +172,30 @@ func TTSFunc4(w http.ResponseWriter, r *http.Request) { fmt.Fprintln(w, "TTS func 4", r) } +func (s *ScenarioSession) GetSession(token string) ResStatus { + s.m.Lock() + defer s.m.Unlock() + resStatus := s.session[token] + + return resStatus +} + +func (s *ScenarioSession) UpdateSession(token string, data ResStatus) { + s.m.Lock() + defer s.m.Unlock() + s.session[token] = data +} + +func (s *ScenarioSession) GetScnario(dnis string, count int) icsconf.ScenarioConfig { + s.m.Lock() + defer s.m.Unlock() + + conf := icsconf.GetIcsConfig() + resultConfig := conf.ScenarioConfig[dnis][count] + + return resultConfig +} + ///////////////////////////////////////////// //BOT func (s *ScenarioSession) BOTPFunc(w http.ResponseWriter, r *http.Request) { @@ -184,439 +212,96 @@ func (s *ScenarioSession) BOTPFunc(w http.ResponseWriter, r *http.Request) { defer r.Body.Close() err = json.Unmarshal(resBody, &request) - fmt.Printf("%+v\n", request) if err != nil { l.Printf(icslog.LOG_LEVEL_INFO, -1, "response unmarshal error!!!!! ") } agent := strings.SplitN(request.CallId, "@", 2) - fmt.Printf(">>>>>> DATA INFO - method [%s], agent [%s], token [%s]\n", request.Method, agent, request.Token) l.Printf(icslog.LOG_LEVEL_INFO, -1, ">>>>>> DATA INFO - method [%s], agent [%s], token [%s] talk[%s]", request.Method, agent, request.Token, request.TalkText) response := new(Response) dnis := request.Dnis - s.m.Lock() - - //////////////////////////////////// - ///////////// EXCEPT /////////////// - //////////////////////////////////// - if conf.ExceptTest.TestInfo.Value { - // eType := conf.ExceptTest.TestInfo.Type - // if request.Method == "INIT" { - // response.ResultCode = conf.ExceptTest.TestInfo.ResultCode - // response.Token = conf.ExceptTest.TestInfo.Token - // response.Action = conf.ExceptTest.TestInfo.Action - // response.AnounceMents = conf.ExceptTest.TestInfo.Announcement - // response.Data.BargeIn = conf.ExceptTest.TestInfo.Bargein - // response.Data.RecodingFile = conf.ExceptTest.TestInfo.Recodingfile - // response.Data.SttMaxTime = conf.ExceptTest.TestInfo.Sttmaxtime - - // s.session[conf.ExceptTest.TestInfo.Token] = ResStatus{Count: 1, Status: scnarioConf[dnis].Action[0], NotUnderstand: 0} - // } else if request.TalkText == "ERROR_TTS" || request.TalkText == "ERROR_STT" { - // response.ResultCode = 200 - // response.Token = request.Token - // response.AnounceMents = "서비스에 문제가 발생하여 매장으로 연결해드릴게요." - // response.Action = "TRANSFER" - // response.Data.BargeIn = "" - // response.Data.RecodingFile = "" - // response.Data.SttMaxTime = 10 - // } else if request.Method == "REFER" { - // response.ResultCode = 200 - // response.Token = request.Token - // response.AnounceMents = "서비스에 문제가 발생하여 매장으로 연결해드릴게요." - // response.Action = "TRANSFER" - // response.Data.BargeIn = "" - // response.Data.RecodingFile = "" - // response.Data.SttMaxTime = 10 - // } else if request.Method != "INIT" && request.TalkText == "" { - // response.ResultCode = 200 - // response.Token = request.Token - // if s.session[request.Token].NotUnderstand == 3 { - // response.AnounceMents = "잘 이해하지 못했습니다. 정확한 상담을 위해 매장으로 연결해드릴게요." - // response.Action = "END" - // } else { - // response.AnounceMents = "잘 이해하지 못했습니다. 다시 말씀해주세요." - // response.Action = "STT" - // s.session[request.Token] = ResStatus{Count: 1, Status: scnarioConf[dnis].Action[0], NotUnderstand: s.session[request.Token].NotUnderstand + 1} - // } - // response.Data.BargeIn = "" - // response.Data.RecodingFile = "" - // response.Data.SttMaxTime = 10 - // } - } else { - //////////////////////////////////// - //////// SCENARIO MAPPING/////////// - //////////////////////////////////// - fmt.Println(request.Method) - if request.Method == "HANGUP" { - response.ResultCode = 200 - response.Token = request.Token - response.Action = "" - response.AnounceMents = "" - response.Data.BargeIn = "" - response.Data.RecodingFile = "" - response.Data.SttMaxTime = 10 - } else if request.Method != "INIT" && request.TalkText == "" { - if request.TalkText == "" { - request.TalkText = "잘못된 값 입력 " - } + var translateinfo TransLateInfo + err = json.Unmarshal([]byte(request.Data), &translateinfo) + if err != nil { + return + } - fmt.Println(dnis) - if dnis == "AISB" || dnis == "07075999956" || dnis == "821462" || dnis == "1462" { - dnis = "9013" - } - fmt.Println(dnis) - if dnis != "07012345678" && dnis != "07077442711" { - dnis = "sim" + if request.Method == "HANGUP" { + response.ResultCode = 200 + response.Token = request.Token + response.Action = "" + response.AnounceMents = "" + response.Data.BargeIn = "" + response.Data.RecodingFile = "" + response.Data.SttMaxTime = 10 + } else if (request.Method != "INIT" && request.TalkText == "") || (request.Method != "INIT" && translateinfo.Use) { + response.ResultCode = 200 + response.Token = request.Token + + scenario := s.GetScnario(dnis, 2) + + response.Action = scenario.Action + response.AnounceMents = scenario.AnounceMents + response.AnnounceFilePath = scenario.AudioFilePath + response.Data.Speed = fmt.Sprintf("%d", scenario.Speed) + // response.Data.VoiceName = scenario.VoiceName + response.Data.VoiceName = fmt.Sprintf("%d", scenario.VoiceName) + response.Data.Volume = fmt.Sprintf("%d", scenario.Volume) + response.Data.Pitch = fmt.Sprintf("%d", scenario.Pitch) + response.Data.MaxWaitTime = scenario.MaxWaitTime + response.Data.BargeIn = scenario.BargeIn + response.Data.SttMaxTime = scenario.SttMaxTime + response.Data.MaxDigit = scenario.MaxDigit + response.Data.RecodingFile = "Y" + + // fmt.Println("-------------------------") + // fmt.Printf("lv 0 => %#v\n", translateinfo) + // fmt.Printf("lv 1 =>%#v\n", request) + // fmt.Printf("lv 2 =>%#v\n", response) + // fmt.Println("-------------------------") + + if translateinfo.Use { + srcSession := s.GetSession(request.Token) + dstSession := s.GetSession(translateinfo.Token) + if request.TalkText != "" { + dstRlt := ResStatus{Count: dstSession.Count + 1, TransLateText: request.TalkText} + s.UpdateSession(translateinfo.Token, dstRlt) } - if dnis == "07012345678" || dnis == "07077442711" { - dnis = "sim3" + if srcSession.TransLateText != "" { + response.AnounceMents = srcSession.TransLateText + srcRlt := ResStatus{Count: srcSession.Count + 1, Status: scenario.Action, TransLateText: scenario.AnounceMents} + s.UpdateSession(request.Token, srcRlt) } - if dnis == "9012" { - response.ResultCode = 200 - response.Token = request.Token - response.Action = scnarioConf[dnis][s.session[request.Token].Count+1].Action - response.AnounceMents = scnarioConf[dnis][s.session[request.Token].Count+1].AnounceMents - if s.session[request.Token].Count != 0 && dnis == "9012" { - response.AnounceMents = strings.ReplaceAll(response.AnounceMents, "$", request.TalkText) - } - response.Data.Speed = scnarioConf[dnis][s.session[request.Token].Count+1].Speed - response.Data.VoiceName = scnarioConf[dnis][s.session[request.Token].Count+1].VoiceName - response.Data.Volume = scnarioConf[dnis][s.session[request.Token].Count+1].Volume - response.Data.Pitch = scnarioConf[dnis][s.session[request.Token].Count+1].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][s.session[request.Token].Count+1].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][s.session[request.Token].Count+1].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][s.session[request.Token].Count+1].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][s.session[request.Token].Count+1].MaxDigit - response.Data.EndCharacter = []string{scnarioConf[dnis][s.session[request.Token].Count+1].EndCharacter} - response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].Count+1].DigitTerm - response.Data.RecodingFile = "Y" - - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].Count+1].Action} - - } else if dnis == "sim3" { - //시뮬레이터 - response.ResultCode = 200 - response.Action = scnarioConf[dnis][s.session[request.Token].Count].Action - response.AnounceMents = scnarioConf[dnis][s.session[request.Token].Count].AnounceMents - response.Data.Speed = scnarioConf[dnis][s.session[request.Token].Count].Speed - response.Data.VoiceName = scnarioConf[dnis][s.session[request.Token].Count].VoiceName - response.Data.Volume = scnarioConf[dnis][s.session[request.Token].Count].Volume - response.Data.Pitch = scnarioConf[dnis][s.session[request.Token].Count].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][s.session[request.Token].Count].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][s.session[request.Token].Count].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][s.session[request.Token].Count].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][s.session[request.Token].Count].MaxDigit - response.Data.EndCharacter = []string{scnarioConf[dnis][s.session[request.Token].Count+1].EndCharacter} - response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].Count].DigitTerm - response.Data.RecodingFile = "Y" - - if s.session[request.Token].LoopCount > 100 { - s.session[request.Token] = ResStatus{LoopCount: s.session[request.Token].LoopCount, Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].Count+1].Action} - } else { - s.session[request.Token] = ResStatus{LoopCount: s.session[request.Token].LoopCount + 1, Count: 1, Status: scnarioConf[dnis][s.session[request.Token].Count].Action} - } + l.Printf(icslog.LOG_LEVEL_INFO, -1, "STT %s | TTS %s", request.TalkText, response.AnounceMents) + } + } else { + switch request.Method { + case "INIT": + scenario := s.GetScnario(dnis, 1) + token := createToken(request.CallId) + response.ResultCode = 200 + response.Token = token + response.Action = scenario.Action + response.AnounceMents = scenario.AnounceMents + response.Data.Speed = fmt.Sprintf("%d", scenario.Speed) + response.Data.VoiceName = fmt.Sprintf("%d", scenario.VoiceName) + response.Data.Volume = fmt.Sprintf("%d", scenario.Volume) + response.Data.Pitch = fmt.Sprintf("%d", scenario.Pitch) + response.Data.MaxWaitTime = scenario.MaxWaitTime + response.Data.BargeIn = scenario.BargeIn + response.Data.SttMaxTime = scenario.SttMaxTime + response.Data.MaxDigit = scenario.MaxDigit + response.Data.RecodingFile = "Y" + + if translateinfo.Token != "" { + response.AnounceMents = "고객 연결 성공" } else { - response.ResultCode = 200 - response.Token = request.Token - response.Action = scnarioConf[dnis][1].Action - response.AnounceMents = scnarioConf[dnis][1].AnounceMents - response.AnnounceFilePath = scnarioConf[dnis][1].AudioFilePath - response.Data.Speed = scnarioConf[dnis][1].Speed - response.Data.VoiceName = scnarioConf[dnis][1].VoiceName - response.Data.Volume = scnarioConf[dnis][1].Volume - response.Data.Pitch = scnarioConf[dnis][1].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][1].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][1].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][1].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][1].MaxDigit - response.Data.EndCharacter = []string{scnarioConf[dnis][1].EndCharacter} - response.Data.DigitTerm = scnarioConf[dnis][1].DigitTerm - response.Data.RecodingFile = "Y" - - // s.m.Lock() - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][1].Action} - //s.m.Unlock() - } - } else { - fmt.Println("RECV METHOD") - fmt.Println(dnis) - // if dnis != "9012" && dnis != "9013" && dnis != "9014" { - // dnis = "sim" - // } else - if dnis == "AISB" || dnis == "07075999956" || dnis == "821462" || dnis == "1462" { - dnis = "9013" - } - fmt.Println(dnis) - if dnis == "9012" || dnis == "07012345678" || dnis == "07077442711" { - dnis = "sim3" - } - - if dnis == "9013" { - dnis = "9014" - } - - fmt.Println(scnarioConf[dnis]) - switch request.Method { - case "INIT": - token := createToken(request.CallId) - response.ResultCode = 200 - response.Token = token - response.Action = scnarioConf[dnis][s.session[request.Token].Count+1].Action - response.AnounceMents = scnarioConf[dnis][s.session[request.Token].Count+1].AnounceMents - response.Data.Speed = scnarioConf[dnis][s.session[request.Token].Count+1].Speed - response.Data.VoiceName = scnarioConf[dnis][s.session[request.Token].Count+1].VoiceName - response.Data.Volume = scnarioConf[dnis][s.session[request.Token].Count+1].Volume - response.Data.Pitch = scnarioConf[dnis][s.session[request.Token].Count+1].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][s.session[request.Token].Count+1].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][s.session[request.Token].Count+1].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][s.session[request.Token].Count+1].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][s.session[request.Token].Count+1].MaxDigit - response.Data.EndCharacter = []string{scnarioConf[dnis][s.session[request.Token].Count+1].EndCharacter} - response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].Count+1].DigitTerm - response.AnnounceFilePath = scnarioConf[dnis][s.session[request.Token].Count+1].AudioFilePath - response.Data.RecodingFile = "Y" - //s.m.Lock() s.session[token] = ResStatus{Count: 1, Status: scnarioConf[dnis][0].Action, NotUnderstand: 0, PreEventNum: 1} - // s.m.Unlock() - case "STT", "DTMF", "BOTH", "MEMO", "NONE": - response.ResultCode = 200 - response.Token = request.Token - if dnis == "9013" || dnis == "9014" { - response.Action = scnarioConf[dnis][s.session[request.Token].Count+1].Action - response.AnounceMents = scnarioConf[dnis][s.session[request.Token].Count+1].AnounceMents - response.Data.Speed = scnarioConf[dnis][s.session[request.Token].Count+1].Speed - response.Data.VoiceName = scnarioConf[dnis][s.session[request.Token].Count+1].VoiceName - response.Data.Volume = scnarioConf[dnis][s.session[request.Token].Count+1].Volume - response.Data.Pitch = scnarioConf[dnis][s.session[request.Token].Count+1].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][s.session[request.Token].Count+1].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][s.session[request.Token].Count+1].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][s.session[request.Token].Count+1].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][s.session[request.Token].Count+1].MaxDigit - response.Data.EndCharacter = []string{scnarioConf[dnis][s.session[request.Token].Count+1].EndCharacter} - response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].Count+1].DigitTerm - response.AnnounceFilePath = scnarioConf[dnis][s.session[request.Token].Count+1].AudioFilePath - - response.Data.RecodingFile = "Y" - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].Count+1].Action} - // s.m.Unlock() - } else if dnis == "9012" { - response.Action = scnarioConf[dnis][1].Action - response.AnounceMents = scnarioConf[dnis][1].AnounceMents - response.Data.Speed = scnarioConf[dnis][1].Speed - response.Data.VoiceName = scnarioConf[dnis][1].VoiceName - response.Data.Volume = scnarioConf[dnis][1].Volume - response.Data.Pitch = scnarioConf[dnis][1].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][1].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][1].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][1].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][1].MaxDigit - // response.Data.EndCharacter = []string{scnarioConf[dnis][1].EndCharacter} - // response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].Count+1].DigitTerm - response.Data.RecodingFile = "Y" - - // s.m.Lock() - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][1].Action} - // s.m.Unlock() - } else if dnis == "1000" { - preEventNum := s.session[request.Token].PreEventNum - fmt.Printf("\n num %+v\n", preEventNum) - switch preEventNum { - case 1: - actionNum, err := strconv.Atoi(request.TalkText) - if err == nil { - response.Action = scnarioConf[dnis][actionNum+2].Action - response.AnounceMents = scnarioConf[dnis][actionNum+2].AnounceMents - response.Data.Speed = scnarioConf[dnis][actionNum+2].Speed - response.Data.VoiceName = scnarioConf[dnis][actionNum+2].VoiceName - response.Data.Volume = scnarioConf[dnis][actionNum+2].Volume - response.Data.Pitch = scnarioConf[dnis][actionNum+2].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][actionNum+2].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][actionNum+2].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][actionNum+2].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][actionNum+2].MaxDigit - response.Data.EndCharacter = []string{scnarioConf[dnis][actionNum+2].EndCharacter} - response.Data.DigitTerm = scnarioConf[dnis][actionNum+2].DigitTerm - response.Data.RecodingFile = "Y" - - // s.m.Lock() - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][actionNum+2].Action, PreEventNum: actionNum + 2} - // s.m.Unlock() - } else { - response.Action = scnarioConf[dnis][1].Action - response.AnounceMents = scnarioConf[dnis][1].AnounceMents - response.Data.Speed = scnarioConf[dnis][1].Speed - response.Data.VoiceName = scnarioConf[dnis][1].VoiceName - response.Data.Volume = scnarioConf[dnis][1].Volume - response.Data.Pitch = scnarioConf[dnis][1].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][1].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][1].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][1].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][1].MaxDigit - response.Data.EndCharacter = []string{scnarioConf[dnis][1].EndCharacter} - response.Data.DigitTerm = scnarioConf[dnis][1].DigitTerm - response.Data.RecodingFile = "Y" - - // s.m.Lock() - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][1].Action, PreEventNum: 1} - // s.m.Unlock() - } - case 2: - actionNum, err := strconv.Atoi(request.TalkText) - if err == nil { - if actionNum == 1 { - response.Action = scnarioConf[dnis][s.session[request.Token].PreEventNum2].Action - response.AnounceMents = scnarioConf[dnis][s.session[request.Token].PreEventNum2].AnounceMents - response.Data.Speed = scnarioConf[dnis][s.session[request.Token].PreEventNum2].Speed - response.Data.VoiceName = scnarioConf[dnis][s.session[request.Token].PreEventNum2].VoiceName - response.Data.Volume = scnarioConf[dnis][s.session[request.Token].PreEventNum2].Volume - response.Data.Pitch = scnarioConf[dnis][s.session[request.Token].PreEventNum2].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][s.session[request.Token].PreEventNum2].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][s.session[request.Token].PreEventNum2].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][s.session[request.Token].PreEventNum2].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][s.session[request.Token].PreEventNum2].MaxDigit - response.Data.EndCharacter = []string{scnarioConf[dnis][s.session[request.Token].PreEventNum2].EndCharacter} - response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].PreEventNum2].DigitTerm - response.Data.RecodingFile = "Y" - - // s.m.Lock() - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].PreEventNum2].Action, PreEventNum: s.session[request.Token].PreEventNum2} - // s.m.Unlock() - } else { - response.Action = scnarioConf[dnis][1].Action - response.AnounceMents = scnarioConf[dnis][1].AnounceMents - response.Data.Speed = scnarioConf[dnis][1].Speed - response.Data.VoiceName = scnarioConf[dnis][1].VoiceName - response.Data.Volume = scnarioConf[dnis][1].Volume - response.Data.Pitch = scnarioConf[dnis][1].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][1].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][1].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][1].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][1].MaxDigit - response.Data.EndCharacter = []string{scnarioConf[dnis][1].EndCharacter} - response.Data.DigitTerm = scnarioConf[dnis][1].DigitTerm - response.Data.RecodingFile = "Y" - - // s.m.Lock() - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][1].Action, PreEventNum: 1, PreEventNum2: 1} - // s.m.Unlock() - } - - } else { - response.Action = scnarioConf[dnis][1].Action - response.AnounceMents = scnarioConf[dnis][1].AnounceMents - response.Data.Speed = scnarioConf[dnis][1].Speed - response.Data.VoiceName = scnarioConf[dnis][1].VoiceName - response.Data.Volume = scnarioConf[dnis][1].Volume - response.Data.Pitch = scnarioConf[dnis][1].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][1].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][1].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][1].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][1].MaxDigit - response.Data.EndCharacter = []string{scnarioConf[dnis][1].EndCharacter} - response.Data.DigitTerm = scnarioConf[dnis][1].DigitTerm - response.Data.RecodingFile = "Y" - - // s.m.Lock() - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][1].Action, PreEventNum: 1} - // s.m.Unlock() - } - default: - - response.Action = scnarioConf[dnis][2].Action - response.AnounceMents = "결과 " + request.TalkText + " " + scnarioConf[dnis][2].AnounceMents - response.Data.Speed = scnarioConf[dnis][2].Speed - response.Data.VoiceName = scnarioConf[dnis][2].VoiceName - response.Data.Volume = scnarioConf[dnis][2].Volume - response.Data.Pitch = scnarioConf[dnis][2].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][2].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][2].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][2].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][2].MaxDigit - response.Data.EndCharacter = []string{scnarioConf[dnis][2].EndCharacter} - response.Data.DigitTerm = scnarioConf[dnis][2].DigitTerm - response.Data.RecodingFile = "Y" - - // s.m.Lock() - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][2].Action, PreEventNum: 2, PreEventNum2: s.session[request.Token].PreEventNum} - //s.m.Unlock() - } - } else { - //시뮬레이터 - response.Action = scnarioConf[dnis][s.session[request.Token].Count].Action - response.AnounceMents = scnarioConf[dnis][s.session[request.Token].Count].AnounceMents - response.Data.Speed = scnarioConf[dnis][s.session[request.Token].Count].Speed - response.Data.VoiceName = scnarioConf[dnis][s.session[request.Token].Count].VoiceName - response.Data.Volume = scnarioConf[dnis][s.session[request.Token].Count].Volume - response.Data.Pitch = scnarioConf[dnis][s.session[request.Token].Count].Pitch - response.Data.MaxWaitTime = scnarioConf[dnis][s.session[request.Token].Count].MaxWaitTime - response.Data.BargeIn = scnarioConf[dnis][s.session[request.Token].Count].BargeIn - response.Data.SttMaxTime = scnarioConf[dnis][s.session[request.Token].Count].SttMaxTime - response.Data.MaxDigit = scnarioConf[dnis][s.session[request.Token].Count].MaxDigit - response.Data.EndCharacter = []string{scnarioConf[dnis][s.session[request.Token].Count+1].EndCharacter} - response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].Count].DigitTerm - response.Data.RecodingFile = "Y" - - if s.session[request.Token].LoopCount > 100 { - s.session[request.Token] = ResStatus{LoopCount: s.session[request.Token].LoopCount, Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].Count].Action} - } else { - s.session[request.Token] = ResStatus{LoopCount: s.session[request.Token].LoopCount + 1, Count: s.session[request.Token].Count, Status: scnarioConf[dnis][s.session[request.Token].Count].Action} - } - // s.m.Lock() - // s.m.Unlock() - } - - case "REFER": - response.ResultCode = 200 - response.Token = request.Token - response.Action = "TRANSFER" - response.AnounceMents = "네. 매장으로 연결해드릴게요." - response.Data.BargeIn = "" - response.Data.RecodingFile = "" - response.Data.SttMaxTime = 0 - response.Data.TelNo = request.TelNo - - // s.m.Lock() - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].Count+1].Action} - case "TRANSFER": - response.ResultCode = 200 - response.Token = request.Token - response.Action = "TRANSFER" - response.AnounceMents = "네. 매장으로 연결해드릴게요." - response.Data.BargeIn = "" - response.Data.RecodingFile = "" - response.Data.SttMaxTime = 0 - response.Data.TelNo = request.TelNo - - // s.m.Lock() - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].Count+1].Action} - // s.m.Unlock() - - case "TRNASFER2": // 전화 종료 요청 - response.ResultCode = 200 - response.Token = request.Token - response.Action = "TRANSFER2" - response.AnounceMents = "네. 매장으로 연결해드릴게요." - response.Data.BargeIn = "" - response.Data.RecodingFile = "" - response.Data.SttMaxTime = 0 - response.Data.TelNo = request.TelNo - - // s.m.Lock() - s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].Count+1].Action} - // s.m.Unlock() - - response.Token = request.Token - response.Action = "END" - response.AnounceMents = "접수가 완료되었습니다." - response.Data.BargeIn = "N" - response.Data.RecodingFile = "Y" - response.Data.SttMaxTime = 0 } - } } @@ -637,28 +322,421 @@ func (s *ScenarioSession) BOTPFunc(w http.ResponseWriter, r *http.Request) { // 마샬링된 JSON을 json.RawMessage로 변환 response.Data.UUI = json.RawMessage(uuiJSON) response.Data.TelNo = request.TelNo - s.m.Unlock() - // response marshal + // s.m.Unlock() + // // response marshal resMarshal, jerr := json.Marshal(response) if jerr != nil { fmt.Println("Json Marshal error ", jerr) } - fmt.Printf("%+v", response) l.Printf(icslog.LOG_LEVEL_INFO, -1, "Send Message\n %s", string(resMarshal)) + l.Printf(icslog.LOG_LEVEL_INFO, -1, "Send From %s\n", request.TelNo) - // if s.session[request.Token].Count < len(scnarioConf[dnis]) && scnarioConf[dnis][s.session[request.Token].Count].TimeValue { - // l.Printf(icslog.LOG_LEVEL_INFO, -1, "Time Sleep %d \r\n", scnarioConf[dnis][s.session[request.Token].Count].TimeSleep) - // time.Sleep(time.Second * time.Duration(time.Duration(scnarioConf[dnis][s.session[request.Token].Count].TimeSleep))) - // } else { - - // } - time.Sleep(time.Second * 1) - // send response fmt.Fprintln(w, string(resMarshal)) } +// func (s *ScenarioSession) BOTPFunc(w http.ResponseWriter, r *http.Request) { +// // get scenario config +// l := icslog.GetIcsLog() +// conf := icsconf.GetIcsConfig() +// scnarioConf := conf.ScenarioConfig +// // Request json parsing +// request := Request{} +// resBody, err := ioutil.ReadAll(r.Body) +// if err != nil { +// fmt.Println(err) +// } +// defer r.Body.Close() + +// err = json.Unmarshal(resBody, &request) +// if err != nil { +// l.Printf(icslog.LOG_LEVEL_INFO, -1, "response unmarshal error!!!!! ") +// } + +// agent := strings.SplitN(request.CallId, "@", 2) +// fmt.Printf(">>>>>> DATA INFO - method [%s], agent [%s], token [%s]\n", request.Method, agent, request.Token) +// l.Printf(icslog.LOG_LEVEL_INFO, -1, ">>>>>> DATA INFO - method [%s], agent [%s], token [%s] talk[%s]", request.Method, agent, request.Token, request.TalkText) + +// response := new(Response) +// dnis := request.Dnis + +// s.m.Lock() + +// var translateinfo TransLateInfo +// err = json.Unmarshal([]byte(request.Data), &translateinfo) +// if err != nil { +// return +// } + +// if request.Method == "HANGUP" { +// response.ResultCode = 200 +// response.Token = request.Token +// response.Action = "" +// response.AnounceMents = "" +// response.Data.BargeIn = "" +// response.Data.RecodingFile = "" +// response.Data.SttMaxTime = 10 +// } else if (request.Method != "INIT" && request.TalkText == "") || (request.Method != "INIT" && translateinfo.Use) { +// if dnis == "AISB" || dnis == "07075999956" || dnis == "821462" || dnis == "1462" { +// dnis = "9013" +// } + +// // if dnis != "07012345678" && dnis != "07077442711" { +// // dnis = "sim" +// // } + +// if dnis == "07012345678" || dnis == "07077442711" { +// dnis = "sim3" +// } + +// if dnis == "9012" { +// response.ResultCode = 200 +// response.Token = request.Token +// response.Action = scnarioConf[dnis][s.session[request.Token].Count+1].Action +// response.AnounceMents = scnarioConf[dnis][s.session[request.Token].Count+1].AnounceMents +// if s.session[request.Token].Count != 0 && dnis == "9012" { +// response.AnounceMents = strings.ReplaceAll(response.AnounceMents, "$", request.TalkText) +// } +// response.Data.Speed = scnarioConf[dnis][s.session[request.Token].Count+1].Speed +// response.Data.VoiceName = scnarioConf[dnis][s.session[request.Token].Count+1].VoiceName +// response.Data.Volume = scnarioConf[dnis][s.session[request.Token].Count+1].Volume +// response.Data.Pitch = scnarioConf[dnis][s.session[request.Token].Count+1].Pitch +// response.Data.MaxWaitTime = scnarioConf[dnis][s.session[request.Token].Count+1].MaxWaitTime +// response.Data.BargeIn = scnarioConf[dnis][s.session[request.Token].Count+1].BargeIn +// response.Data.SttMaxTime = scnarioConf[dnis][s.session[request.Token].Count+1].SttMaxTime +// response.Data.MaxDigit = scnarioConf[dnis][s.session[request.Token].Count+1].MaxDigit +// response.Data.EndCharacter = []string{scnarioConf[dnis][s.session[request.Token].Count+1].EndCharacter} +// response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].Count+1].DigitTerm +// response.Data.RecodingFile = "Y" + +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].Count+1].Action} +// } else { +// response.ResultCode = 200 +// response.Token = request.Token +// response.Action = scnarioConf[dnis][2].Action +// response.AnounceMents = scnarioConf[dnis][2].AnounceMents +// response.AnnounceFilePath = scnarioConf[dnis][2].AudioFilePath +// response.Data.Speed = scnarioConf[dnis][2].Speed +// response.Data.VoiceName = scnarioConf[dnis][2].VoiceName +// response.Data.Volume = scnarioConf[dnis][2].Volume +// response.Data.Pitch = scnarioConf[dnis][2].Pitch +// response.Data.MaxWaitTime = scnarioConf[dnis][2].MaxWaitTime +// response.Data.BargeIn = scnarioConf[dnis][2].BargeIn +// response.Data.SttMaxTime = scnarioConf[dnis][2].SttMaxTime +// response.Data.MaxDigit = scnarioConf[dnis][2].MaxDigit +// response.Data.EndCharacter = []string{scnarioConf[dnis][2].EndCharacter} +// response.Data.DigitTerm = scnarioConf[dnis][2].DigitTerm +// response.Data.RecodingFile = "Y" + +// fmt.Println("-------------------------") +// fmt.Printf("lv 0 => %#v\n", translateinfo) +// fmt.Printf("lv 1 =>%#v\n", request) +// fmt.Printf("lv 2 =>%#v\n", response) +// fmt.Println("-------------------------") + +// if translateinfo.Use { +// if request.TalkText != "" { +// s.session[translateinfo.Token] = ResStatus{Count: s.session[translateinfo.Token].Count + 1, TransLateText: request.TalkText} +// } + +// if s.session[request.Token].TransLateText != "" { +// response.Action = "STT" +// response.AnounceMents = s.session[request.Token].TransLateText +// response.Data.SttMaxTime = 15 +// response.Data.MaxWaitTime = 30 +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][2].Action, TransLateText: scnarioConf[dnis][2].AnounceMents} +// } +// } else { +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][2].Action, TransLateText: scnarioConf[dnis][2].AnounceMents} +// } + +// } +// } else { +// fmt.Println("RECV METHOD") +// fmt.Println(dnis) + +// // if dnis == "AISB" || dnis == "07075999956" || dnis == "821462" || dnis == "1462" { +// // dnis = "9013" +// // } +// fmt.Println(dnis) +// // if dnis == "9012" || dnis == "07012345678" || dnis == "07077442711" { +// // dnis = "sim3" +// // } + +// // if dnis == "9013" { +// // dnis = "9014" +// // } + +// switch request.Method { +// case "INIT": +// token := createToken(request.CallId) +// response.ResultCode = 200 +// response.Token = token +// response.Action = scnarioConf[dnis][s.session[request.Token].Count+1].Action +// response.AnounceMents = scnarioConf[dnis][s.session[request.Token].Count+1].AnounceMents +// response.Data.Speed = scnarioConf[dnis][s.session[request.Token].Count+1].Speed +// response.Data.VoiceName = scnarioConf[dnis][s.session[request.Token].Count+1].VoiceName +// response.Data.Volume = scnarioConf[dnis][s.session[request.Token].Count+1].Volume +// response.Data.Pitch = scnarioConf[dnis][s.session[request.Token].Count+1].Pitch +// response.Data.MaxWaitTime = scnarioConf[dnis][s.session[request.Token].Count+1].MaxWaitTime +// response.Data.BargeIn = scnarioConf[dnis][s.session[request.Token].Count+1].BargeIn +// response.Data.SttMaxTime = scnarioConf[dnis][s.session[request.Token].Count+1].SttMaxTime +// response.Data.MaxDigit = scnarioConf[dnis][s.session[request.Token].Count+1].MaxDigit +// response.Data.EndCharacter = []string{scnarioConf[dnis][s.session[request.Token].Count+1].EndCharacter} +// response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].Count+1].DigitTerm +// response.AnnounceFilePath = scnarioConf[dnis][s.session[request.Token].Count+1].AudioFilePath +// response.Data.RecodingFile = "Y" +// if translateinfo.Token != "" { +// response.AnounceMents = "고객 연결 성공" +// } else { +// s.session[token] = ResStatus{Count: 1, Status: scnarioConf[dnis][0].Action, NotUnderstand: 0, PreEventNum: 1} +// } +// case "STT", "DTMF", "BOTH", "MEMO", "NONE": +// response.ResultCode = 200 +// response.Token = request.Token +// if dnis == "9013" || dnis == "9014" { +// response.Action = scnarioConf[dnis][s.session[request.Token].Count+1].Action +// response.AnounceMents = scnarioConf[dnis][s.session[request.Token].Count+1].AnounceMents +// response.Data.Speed = scnarioConf[dnis][s.session[request.Token].Count+1].Speed +// response.Data.VoiceName = scnarioConf[dnis][s.session[request.Token].Count+1].VoiceName +// response.Data.Volume = scnarioConf[dnis][s.session[request.Token].Count+1].Volume +// response.Data.Pitch = scnarioConf[dnis][s.session[request.Token].Count+1].Pitch +// response.Data.MaxWaitTime = scnarioConf[dnis][s.session[request.Token].Count+1].MaxWaitTime +// response.Data.BargeIn = scnarioConf[dnis][s.session[request.Token].Count+1].BargeIn +// response.Data.SttMaxTime = scnarioConf[dnis][s.session[request.Token].Count+1].SttMaxTime +// response.Data.MaxDigit = scnarioConf[dnis][s.session[request.Token].Count+1].MaxDigit +// response.Data.EndCharacter = []string{scnarioConf[dnis][s.session[request.Token].Count+1].EndCharacter} +// response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].Count+1].DigitTerm +// response.AnnounceFilePath = scnarioConf[dnis][s.session[request.Token].Count+1].AudioFilePath + +// response.Data.RecodingFile = "Y" +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].Count+1].Action} +// // s.m.Unlock() +// } else if dnis == "9012" { +// response.Action = scnarioConf[dnis][1].Action +// response.AnounceMents = scnarioConf[dnis][1].AnounceMents +// response.Data.Speed = scnarioConf[dnis][1].Speed +// response.Data.VoiceName = scnarioConf[dnis][1].VoiceName +// response.Data.Volume = scnarioConf[dnis][1].Volume +// response.Data.Pitch = scnarioConf[dnis][1].Pitch +// response.Data.MaxWaitTime = scnarioConf[dnis][1].MaxWaitTime +// response.Data.BargeIn = scnarioConf[dnis][1].BargeIn +// response.Data.SttMaxTime = scnarioConf[dnis][1].SttMaxTime +// response.Data.MaxDigit = scnarioConf[dnis][1].MaxDigit +// // response.Data.EndCharacter = []string{scnarioConf[dnis][1].EndCharacter} +// // response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].Count+1].DigitTerm +// response.Data.RecodingFile = "Y" + +// // s.m.Lock() +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][1].Action} +// // s.m.Unlock() +// } else if dnis == "1000" { +// preEventNum := s.session[request.Token].PreEventNum +// fmt.Printf("\n num %+v\n", preEventNum) +// switch preEventNum { +// case 1: +// actionNum, err := strconv.Atoi(request.TalkText) +// if err == nil { +// response.Action = scnarioConf[dnis][actionNum+2].Action +// response.AnounceMents = scnarioConf[dnis][actionNum+2].AnounceMents +// response.Data.Speed = scnarioConf[dnis][actionNum+2].Speed +// response.Data.VoiceName = scnarioConf[dnis][actionNum+2].VoiceName +// response.Data.Volume = scnarioConf[dnis][actionNum+2].Volume +// response.Data.Pitch = scnarioConf[dnis][actionNum+2].Pitch +// response.Data.MaxWaitTime = scnarioConf[dnis][actionNum+2].MaxWaitTime +// response.Data.BargeIn = scnarioConf[dnis][actionNum+2].BargeIn +// response.Data.SttMaxTime = scnarioConf[dnis][actionNum+2].SttMaxTime +// response.Data.MaxDigit = scnarioConf[dnis][actionNum+2].MaxDigit +// response.Data.EndCharacter = []string{scnarioConf[dnis][actionNum+2].EndCharacter} +// response.Data.DigitTerm = scnarioConf[dnis][actionNum+2].DigitTerm +// response.Data.RecodingFile = "Y" + +// // s.m.Lock() +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][actionNum+2].Action, PreEventNum: actionNum + 2} +// // s.m.Unlock() +// } else { +// response.Action = scnarioConf[dnis][1].Action +// response.AnounceMents = scnarioConf[dnis][1].AnounceMents +// response.Data.Speed = scnarioConf[dnis][1].Speed +// response.Data.VoiceName = scnarioConf[dnis][1].VoiceName +// response.Data.Volume = scnarioConf[dnis][1].Volume +// response.Data.Pitch = scnarioConf[dnis][1].Pitch +// response.Data.MaxWaitTime = scnarioConf[dnis][1].MaxWaitTime +// response.Data.BargeIn = scnarioConf[dnis][1].BargeIn +// response.Data.SttMaxTime = scnarioConf[dnis][1].SttMaxTime +// response.Data.MaxDigit = scnarioConf[dnis][1].MaxDigit +// response.Data.EndCharacter = []string{scnarioConf[dnis][1].EndCharacter} +// response.Data.DigitTerm = scnarioConf[dnis][1].DigitTerm +// response.Data.RecodingFile = "Y" + +// // s.m.Lock() +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][1].Action, PreEventNum: 1} +// // s.m.Unlock() +// } +// case 2: +// actionNum, err := strconv.Atoi(request.TalkText) +// if err == nil { +// if actionNum == 1 { +// response.Action = scnarioConf[dnis][s.session[request.Token].PreEventNum2].Action +// response.AnounceMents = scnarioConf[dnis][s.session[request.Token].PreEventNum2].AnounceMents +// response.Data.Speed = scnarioConf[dnis][s.session[request.Token].PreEventNum2].Speed +// response.Data.VoiceName = scnarioConf[dnis][s.session[request.Token].PreEventNum2].VoiceName +// response.Data.Volume = scnarioConf[dnis][s.session[request.Token].PreEventNum2].Volume +// response.Data.Pitch = scnarioConf[dnis][s.session[request.Token].PreEventNum2].Pitch +// response.Data.MaxWaitTime = scnarioConf[dnis][s.session[request.Token].PreEventNum2].MaxWaitTime +// response.Data.BargeIn = scnarioConf[dnis][s.session[request.Token].PreEventNum2].BargeIn +// response.Data.SttMaxTime = scnarioConf[dnis][s.session[request.Token].PreEventNum2].SttMaxTime +// response.Data.MaxDigit = scnarioConf[dnis][s.session[request.Token].PreEventNum2].MaxDigit +// response.Data.EndCharacter = []string{scnarioConf[dnis][s.session[request.Token].PreEventNum2].EndCharacter} +// response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].PreEventNum2].DigitTerm +// response.Data.RecodingFile = "Y" + +// // s.m.Lock() +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].PreEventNum2].Action, PreEventNum: s.session[request.Token].PreEventNum2} +// // s.m.Unlock() +// } else { +// response.Action = scnarioConf[dnis][1].Action +// response.AnounceMents = scnarioConf[dnis][1].AnounceMents +// response.Data.Speed = scnarioConf[dnis][1].Speed +// response.Data.VoiceName = scnarioConf[dnis][1].VoiceName +// response.Data.Volume = scnarioConf[dnis][1].Volume +// response.Data.Pitch = scnarioConf[dnis][1].Pitch +// response.Data.MaxWaitTime = scnarioConf[dnis][1].MaxWaitTime +// response.Data.BargeIn = scnarioConf[dnis][1].BargeIn +// response.Data.SttMaxTime = scnarioConf[dnis][1].SttMaxTime +// response.Data.MaxDigit = scnarioConf[dnis][1].MaxDigit +// response.Data.EndCharacter = []string{scnarioConf[dnis][1].EndCharacter} +// response.Data.DigitTerm = scnarioConf[dnis][1].DigitTerm +// response.Data.RecodingFile = "Y" + +// // s.m.Lock() +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][1].Action, PreEventNum: 1, PreEventNum2: 1} +// // s.m.Unlock() +// } + +// } else { +// response.Action = scnarioConf[dnis][1].Action +// response.AnounceMents = scnarioConf[dnis][1].AnounceMents +// response.Data.Speed = scnarioConf[dnis][1].Speed +// response.Data.VoiceName = scnarioConf[dnis][1].VoiceName +// response.Data.Volume = scnarioConf[dnis][1].Volume +// response.Data.Pitch = scnarioConf[dnis][1].Pitch +// response.Data.MaxWaitTime = scnarioConf[dnis][1].MaxWaitTime +// response.Data.BargeIn = scnarioConf[dnis][1].BargeIn +// response.Data.SttMaxTime = scnarioConf[dnis][1].SttMaxTime +// response.Data.MaxDigit = scnarioConf[dnis][1].MaxDigit +// response.Data.EndCharacter = []string{scnarioConf[dnis][1].EndCharacter} +// response.Data.DigitTerm = scnarioConf[dnis][1].DigitTerm +// response.Data.RecodingFile = "Y" + +// // s.m.Lock() +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][1].Action, PreEventNum: 1} +// // s.m.Unlock() +// } +// default: + +// response.Action = scnarioConf[dnis][2].Action +// response.AnounceMents = "결과 " + request.TalkText + " " + scnarioConf[dnis][2].AnounceMents +// response.Data.Speed = scnarioConf[dnis][2].Speed +// response.Data.VoiceName = scnarioConf[dnis][2].VoiceName +// response.Data.Volume = scnarioConf[dnis][2].Volume +// response.Data.Pitch = scnarioConf[dnis][2].Pitch +// response.Data.MaxWaitTime = scnarioConf[dnis][2].MaxWaitTime +// response.Data.BargeIn = scnarioConf[dnis][2].BargeIn +// response.Data.SttMaxTime = scnarioConf[dnis][2].SttMaxTime +// response.Data.MaxDigit = scnarioConf[dnis][2].MaxDigit +// response.Data.EndCharacter = []string{scnarioConf[dnis][2].EndCharacter} +// response.Data.DigitTerm = scnarioConf[dnis][2].DigitTerm +// response.Data.RecodingFile = "Y" + +// // s.m.Lock() +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][2].Action, PreEventNum: 2, PreEventNum2: s.session[request.Token].PreEventNum} +// //s.m.Unlock() +// } +// } else { +// //시뮬레이터 +// response.Action = scnarioConf[dnis][s.session[request.Token].Count].Action +// response.AnounceMents = scnarioConf[dnis][s.session[request.Token].Count].AnounceMents +// response.Data.Speed = scnarioConf[dnis][s.session[request.Token].Count].Speed +// response.Data.VoiceName = scnarioConf[dnis][s.session[request.Token].Count].VoiceName +// response.Data.Volume = scnarioConf[dnis][s.session[request.Token].Count].Volume +// response.Data.Pitch = scnarioConf[dnis][s.session[request.Token].Count].Pitch +// response.Data.MaxWaitTime = scnarioConf[dnis][s.session[request.Token].Count].MaxWaitTime +// response.Data.BargeIn = scnarioConf[dnis][s.session[request.Token].Count].BargeIn +// response.Data.SttMaxTime = scnarioConf[dnis][s.session[request.Token].Count].SttMaxTime +// response.Data.MaxDigit = scnarioConf[dnis][s.session[request.Token].Count].MaxDigit +// response.Data.EndCharacter = []string{scnarioConf[dnis][s.session[request.Token].Count+1].EndCharacter} +// response.Data.DigitTerm = scnarioConf[dnis][s.session[request.Token].Count].DigitTerm +// response.Data.RecodingFile = "Y" + +// if s.session[request.Token].LoopCount > 100 { +// s.session[request.Token] = ResStatus{LoopCount: s.session[request.Token].LoopCount, Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].Count].Action} +// } else { +// s.session[request.Token] = ResStatus{LoopCount: s.session[request.Token].LoopCount + 1, Count: s.session[request.Token].Count, Status: scnarioConf[dnis][s.session[request.Token].Count].Action} +// } +// // s.m.Lock() +// // s.m.Unlock() +// } +// case "REFER": +// response.ResultCode = 200 +// response.Token = request.Token +// response.Action = "TRANSFER" +// response.AnounceMents = "네. 매장으로 연결해드릴게요." +// response.Data.BargeIn = "" +// response.Data.RecodingFile = "" +// response.Data.SttMaxTime = 0 +// response.Data.TelNo = request.TelNo + +// // s.m.Lock() +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].Count+1].Action} +// case "TRANSFER": +// response.ResultCode = 200 +// response.Token = request.Token +// response.Action = "TRANSFER" +// response.AnounceMents = "네. 매장으로 연결해드릴게요." +// response.Data.BargeIn = "" +// response.Data.RecodingFile = "" +// response.Data.SttMaxTime = 0 +// response.Data.TelNo = request.TelNo +// s.session[request.Token] = ResStatus{Count: s.session[request.Token].Count + 1, Status: scnarioConf[dnis][s.session[request.Token].Count+1].Action} +// } + +// } + +// response.Data.UUI = json.RawMessage{} +// uuiMap := map[string]interface{}{ +// "test1": "testdata1231", +// "test2": 123, +// "test3": 0.1, +// } + +// // 맵을 JSON으로 마샬링 +// uuiJSON, err := json.Marshal(uuiMap) +// if err != nil { +// fmt.Println("Error marshaling UUI:", err) +// return +// } + +// // 마샬링된 JSON을 json.RawMessage로 변환 +// response.Data.UUI = json.RawMessage(uuiJSON) +// response.Data.TelNo = request.TelNo +// s.m.Unlock() +// // response marshal + +// resMarshal, jerr := json.Marshal(response) +// if jerr != nil { +// fmt.Println("Json Marshal error ", jerr) +// } +// fmt.Printf("%+v", response) +// l.Printf(icslog.LOG_LEVEL_INFO, -1, "Send Message\n %s", string(resMarshal)) + +// time.Sleep(time.Second * 1) +// // send response +// fmt.Fprintln(w, string(resMarshal)) + +// } + func createToken(callId string) string { token := "" times := fmt.Sprintf("%d", time.Now().UnixNano()/1000000) diff --git a/voicebot b/voicebot new file mode 100755 index 0000000..05e3e56 Binary files /dev/null and b/voicebot differ diff --git a/voicebot.go b/voicebot.go index 46019c2..ac310c8 100644 --- a/voicebot.go +++ b/voicebot.go @@ -62,8 +62,8 @@ func main() { } //configuration - configFile := fmt.Sprintf("/home/icsbot/config/icsbot.xml") - //configFile := fmt.Sprintf("%s/config/icsvc.xml", service.GetHomeDir()) + // configFile := fmt.Sprintf("/home/icsbot/config/icsbot.xml") + configFile := fmt.Sprintf("%s/config/icsbot.xml", homeDir) //fmt.Println("Config file:", configFile) conf, confErr := icsconf.OpenConfig(configFile, homeDir) if confErr != nil {