diff --git a/icshttp/handler.go b/icshttp/handler.go index aa92c4e..75f50e1 100644 --- a/icshttp/handler.go +++ b/icshttp/handler.go @@ -190,436 +190,385 @@ func (s *ScenarioSession) BOTPFunc(w http.ResponseWriter, r *http.Request) { } 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() + 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 == "" { + l.Printf(icslog.LOG_LEVEL_INFO, -1, "여기는 INIT 아닐 때") + // if request.TalkText == "" { + // request.TalkText = "잘못된 값 입력 " + // } + + // 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 dnis == "07012345678" || dnis == "07077442711" { + // dnis = "sim3" + // } + + if dnis == "9012" { + l.Printf(icslog.LOG_LEVEL_INFO, -1, "9012..s.session[request.Token].Count: %d", s.session[request.Token].Count) + 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} + l.Printf(icslog.LOG_LEVEL_INFO, -1, "response.scnarioConf[dnis][s.session[request.Token].Count+1].AnounceMents: %s", scnarioConf[dnis][s.session[request.Token].Count+1].AnounceMents) + l.Printf(icslog.LOG_LEVEL_INFO, -1, "response.AnounceMents: %s", response.AnounceMents) + + } 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} + } + } 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" + // } - //////////////////////////////////// - ///////////// 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" { + // if dnis == "9013" { + // dnis = "9014" + // } + + // fmt.Println(scnarioConf[dnis]) + switch request.Method { + case "INIT": + l.Printf(icslog.LOG_LEVEL_INFO, -1, "INIT..s.session[request.Token].Count: %d", s.session[request.Token].Count) + 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": + // l.Printf(icslog.LOG_LEVEL_INFO, -1, "여기는 언제 타는거지지") + // 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.AnounceMents = "서비스에 문제가 발생하여 매장으로 연결해드릴게요." // response.Action = "TRANSFER" + // response.AnounceMents = "네. 매장으로 연결해드릴게요." // response.Data.BargeIn = "" // response.Data.RecodingFile = "" - // response.Data.SttMaxTime = 10 - // } else if request.Method == "REFER" { + // 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.AnounceMents = "서비스에 문제가 발생하여 매장으로 연결해드릴게요." // response.Action = "TRANSFER" + // response.AnounceMents = "네. 매장으로 연결해드릴게요." // response.Data.BargeIn = "" // response.Data.RecodingFile = "" - // response.Data.SttMaxTime = 10 - // } else if request.Method != "INIT" && request.TalkText == "" { + // 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 - // 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.Action = "TRANSFER2" + // response.AnounceMents = "네. 매장으로 연결해드릴게요." // 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 == "" { - l.Printf(icslog.LOG_LEVEL_INFO, -1, "여기는 INIT 아닐 때") - if request.TalkText == "" { - request.TalkText = "잘못된 값 입력 " - } + // response.Data.SttMaxTime = 0 + // response.Data.TelNo = request.TelNo - fmt.Println(dnis) - if dnis == "AISB" || dnis == "07075999956" || dnis == "821462" || dnis == "1462" { - dnis = "9013" - } - fmt.Println(dnis) - if dnis != "07012345678" && dnis != "07077442711" { - dnis = "sim" - } + // // 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() - 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 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} - } - } 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": - l.Printf(icslog.LOG_LEVEL_INFO, -1, "여기는 언제 타는거지지") - 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 - } + // response.Token = request.Token + // response.Action = "END" + // response.AnounceMents = "접수가 완료되었습니다." + // response.Data.BargeIn = "N" + // response.Data.RecodingFile = "Y" + // response.Data.SttMaxTime = 0 + // } - } } response.Data.UUI = json.RawMessage{}