| } else { | } else { | ||||
| log.Println("write session to " + path) | log.Println("write session to " + path) | ||||
| //save state | //save state | ||||
| err = ss.state.Save(openID, ss.Procedure) | |||||
| err = ss.state.Save() | |||||
| if err != nil { | if err != nil { | ||||
| log.Printf("Error: cannot write session data %s", openID) | log.Printf("Error: cannot write session data %s", openID) | ||||
| log.Println(err) | log.Println(err) | ||||
| openID := v.header.FromUserName | openID := v.header.FromUserName | ||||
| //kfSendTxtAs(openID, "信息收到"+v.header.MsgType, "孙鹏") | //kfSendTxtAs(openID, "信息收到"+v.header.MsgType, "孙鹏") | ||||
| //are we in an existing procedure | //are we in an existing procedure | ||||
| inProc, state := isInProc(openID) //if inside a procedure, resume last saved state | |||||
| if inProc { | |||||
| ss.state = serveProc(state, v) //transit to new state | |||||
| proc, found := AllProc[ss.Procedure] | |||||
| if found { | |||||
| proc.serve(ss, v) //transit to new state | |||||
| } else { | } else { | ||||
| state, processed := serveCommand(openID, v) //menu or txt command e.g. search | |||||
| if !processed { // transfer to Customer Service (kf) | |||||
| ss.state.response, _ = BuildTextMsg(openID, "已转接校友会理事会,稍后答复您") | |||||
| } else { | |||||
| ss.state = state | |||||
| } | |||||
| } | |||||
| if ss.state.response != "" { | |||||
| v.instantResponse <- ss.state.response | |||||
| } | |||||
| if !isEndingState(state) { | |||||
| err := saveChatState(openID, state.Procedure, state) | |||||
| if err != nil { | |||||
| log.Println("Error Cannot Save chat sate") | |||||
| log.Println(err) | |||||
| log.Println(state) | |||||
| processed := ss.serveCommand(v) //menu or txt command e.g. search | |||||
| if !processed { // transfer to Customer Service (kf) | |||||
| //start transfer | |||||
| ss.state.response, _ = BuildKFTransferAnyOneMsg(openID) | |||||
| v.immediateResponse(ss.state.response) | |||||
| kfSendTxt(openID, "已转接校友会理事会,稍后答复您") | |||||
| } | } | ||||
| } else { //state ending | |||||
| cleanProcedure(openID, state.Procedure) | |||||
| } | } | ||||
| return | return | ||||
| } | } |