From f077b71fb273c185f170b01a6bfdc20e25425a6d Mon Sep 17 00:00:00 2001 From: Patrick Peng Sun Date: Thu, 13 Jul 2017 18:42:32 +1000 Subject: [PATCH] =?UTF-8?q?=E5=9C=A8=E4=B8=80=E4=B8=AAProc=20=E4=B8=AD?= =?UTF-8?q?=EF=BC=8C=E5=A6=82=E6=9E=9C=E7=A8=8B=E5=BA=8F=E4=B8=8D=E5=81=9A?= =?UTF-8?q?=E5=A4=84=E7=90=86=EF=BC=8C=E5=88=99=E8=AE=A4=E4=B8=BA=E7=8A=B6?= =?UTF-8?q?=E6=80=81=E7=BB=93=E6=9D=9F=E3=80=82=E8=87=AA=E5=8A=A8=E5=A4=84?= =?UTF-8?q?=E7=90=86=E4=B8=8B=E4=B8=80=E4=B8=AA=E7=8A=B6=E6=80=81=E3=80=82?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- chatSession.go | 16 +++++++++++++--- procDummy.go | 8 ++++---- procEcho.go | 13 +++++++------ procGetBasicUserInfo.go | 4 ++-- procSearchMember.go | 9 +++++++-- procedure.go | 8 ++++---- 6 files changed, 37 insertions(+), 21 deletions(-) diff --git a/chatSession.go b/chatSession.go index a08f734..ddc2f17 100644 --- a/chatSession.go +++ b/chatSession.go @@ -157,10 +157,20 @@ func (ss *openIDSessionData) incomingMsg(v *InWechatMsg) { //are we in an existing procedure log.Printf("current procedure = %s", ss.Procedure) proc, found := AllProc[ss.Procedure] + processed := false if found { - proc.serve(ss, v) //transit to new state - } else { - processed := ss.serveCommand(v) //menu or txt command e.g. search + processed = proc.serve(ss, v) //transit to new state + if processed { + return + } + // + log.Printf("Auto Switch to next State [%s] ending", ss.Procedure) + proc.summary(ss) + proc.clean(ss) + } + + if !processed { + processed = ss.serveCommand(v) //menu or txt command e.g. search log.Printf("current procedure after command = %s", ss.Procedure) if !processed { // transfer to Customer Service (kf) //start transfer diff --git a/procDummy.go b/procDummy.go index 6305663..5563772 100644 --- a/procDummy.go +++ b/procDummy.go @@ -15,17 +15,17 @@ func (m *procDummyDef) clean(ss *openIDSessionData) { ss.Procedure = "" } -func (m *procDummyDef) start(ss *openIDSessionData, in* InWechatMsg) { +func (m *procDummyDef) start(ss *openIDSessionData, in *InWechatMsg) { } -func (m *procDummyDef) serve(ss *openIDSessionData, in* InWechatMsg) { - +func (m *procDummyDef) serve(ss *openIDSessionData, in *InWechatMsg) (processed bool) { + return } func (m *procDummyDef) summary(ss *openIDSessionData) { } -func (m *procDummyDef) intro(ss *openIDSessionData, in* InWechatMsg) { +func (m *procDummyDef) intro(ss *openIDSessionData, in *InWechatMsg) { } diff --git a/procEcho.go b/procEcho.go index 719989f..eb9c7db 100644 --- a/procEcho.go +++ b/procEcho.go @@ -23,11 +23,11 @@ func (m *procEchoDef) clean(ss *openIDSessionData) { //log.Println(*ss) } -func (m *procEchoDef) start(ss *openIDSessionData, in* InWechatMsg) { +func (m *procEchoDef) start(ss *openIDSessionData, in *InWechatMsg) { ss.setKvPair("started at", time.Now().Format("2006/03:04:05")) } -func (m *procEchoDef) serve(ss *openIDSessionData, in* InWechatMsg) { +func (m *procEchoDef) serve(ss *openIDSessionData, in *InWechatMsg) (processed bool) { stopEcho := false if in.header.MsgType == "text" { if in.body.(TextMsg).Content == "结束Echo" || in.body.(TextMsg).Content == "结束echo" { @@ -48,7 +48,8 @@ func (m *procEchoDef) serve(ss *openIDSessionData, in* InWechatMsg) { ss.refreshExpire(600) procEcho.doCommand(ss, in) } - + processed = true + return } func (m *procEchoDef) summary(ss *openIDSessionData) { @@ -62,12 +63,12 @@ func (m *procEchoDef) summary(ss *openIDSessionData) { kfSendTxt(ss.OpenID, msg) } -func (m *procEchoDef) intro(ss *openIDSessionData, in* InWechatMsg) { +func (m *procEchoDef) intro(ss *openIDSessionData, in *InWechatMsg) { in.replyText("请输入不同类型的微信信息,比如文字,图片,视频,地址,链接,我们将原样回应您") kfSendTxt(ss.OpenID, "10分钟静默之后 Echo将自动结束,\n输入 [结束Echo],或者语音 ‘退出退出', 清除Echo模式") } -func (m *procEchoDef) doCommand(ss *openIDSessionData, in* InWechatMsg) { +func (m *procEchoDef) doCommand(ss *openIDSessionData, in *InWechatMsg) { openID := in.header.FromUserName str, err := BuildTextMsg(openID, "default") log.Println("echoCommand :" + in.header.MsgType) @@ -124,7 +125,7 @@ func (m *procEchoDef) doCommand(ss *openIDSessionData, in* InWechatMsg) { return } -func (m *procEchoDef) doEvents(ss *openIDSessionData, in* InWechatMsg) { +func (m *procEchoDef) doEvents(ss *openIDSessionData, in *InWechatMsg) { openID := in.header.FromUserName str := "" e := in.body.(EventMsg) diff --git a/procGetBasicUserInfo.go b/procGetBasicUserInfo.go index 5313dc4..c74915a 100644 --- a/procGetBasicUserInfo.go +++ b/procGetBasicUserInfo.go @@ -21,8 +21,8 @@ func (m *getBasicUserInfoDef) start(ss *openIDSessionData, in *InWechatMsg) { procGetBasicUserInfo.clean(ss) } -func (m *getBasicUserInfoDef) serve(ss *openIDSessionData, in *InWechatMsg) { - +func (m *getBasicUserInfoDef) serve(ss *openIDSessionData, in *InWechatMsg) (processed bool) { + return false } func (m *getBasicUserInfoDef) summary(ss *openIDSessionData) { //build article message with user's picture and email,phone diff --git a/procSearchMember.go b/procSearchMember.go index 6229d6b..8fb06df 100644 --- a/procSearchMember.go +++ b/procSearchMember.go @@ -25,7 +25,7 @@ func (m *procSearchMemberDef) start(ss *openIDSessionData, in *InWechatMsg) { } -func (m *procSearchMemberDef) serve(ss *openIDSessionData, in *InWechatMsg) { +func (m *procSearchMemberDef) serve(ss *openIDSessionData, in *InWechatMsg) (processed bool) { switch msg := in.body.(type) { case TextMsg: if m.endingCommand(ss, msg.Content) { @@ -34,26 +34,31 @@ func (m *procSearchMemberDef) serve(ss *openIDSessionData, in *InWechatMsg) { str, _ := BuildTextMsg(ss.OpenID, "搜索 "+msg.Content+"... ...") in.replyXML(str) m.displayUserInfo(ss, msg.Content) + processed = true case PicMsg: //str := buildPicMsg(ss.OpenID, msg.MediaId) xml, _ := BuildKFTransferAnyOneMsg(ss.OpenID) in.replyXML(xml) kfSendPicByMediaID(ss.OpenID, msg.MediaId) kfSendTxt(ss.OpenID, "已转接校友会理事会,稍后答复您") + processed = true case VoiceMsg: name := strings.TrimSuffix(msg.Recognition, "。") str, _ := BuildTextMsg(ss.OpenID, "搜索 "+name+"... ...") in.replyXML(str) m.displayUserInfo(ss, name) + processed = true case EventMsg: if msg.Event == "LOCATION" { onLocation(in) + processed = true } default: str := fmt.Sprintf("搜索功能结束") kfSendTxtAs(ss.OpenID, str, "孙鹏") - m.clean(ss) + processed = false } + return } func (m *procSearchMemberDef) summary(ss *openIDSessionData) { diff --git a/procedure.go b/procedure.go index d4e55d0..99c0f81 100644 --- a/procedure.go +++ b/procedure.go @@ -24,10 +24,10 @@ type chatProcedure interface { init(*openIDSessionData) //house keeping clean(*openIDSessionData) //house keeping - start(*openIDSessionData, *InWechatMsg) //for first message - serve(*openIDSessionData, *InWechatMsg) //for all subsequent message - summary(*openIDSessionData) //after all message has been done - intro(*openIDSessionData, *InWechatMsg) //initial text/video/voice introduction + start(*openIDSessionData, *InWechatMsg) //for first message + serve(*openIDSessionData, *InWechatMsg) bool //for all subsequent message + summary(*openIDSessionData) //after all message has been done + intro(*openIDSessionData, *InWechatMsg) //initial text/video/voice introduction } //AllProc all procedure that we implemented