diff --git a/menuClick.go b/menuClick.go index 3ee5af6..b0bc9cb 100644 --- a/menuClick.go +++ b/menuClick.go @@ -12,7 +12,7 @@ func onClick(ss *openIDSessionData, in *InWechatMsg) { case "MEMBER_CREDITS": onMembeCredits(ss, in) case "MEMBER_SEARCH": - kfSendTxtAs(openid, "搜索", "孙鹏") + startProc(AllProc["搜索校友"], ss, in) case "MEMBER_FEEDBACK": kfSendTxtAs(openid, "匿名投诉", "孙鹏") case "EVENT_STARTONE": diff --git a/procSearchMember.go b/procSearchMember.go new file mode 100644 index 0000000..c96db88 --- /dev/null +++ b/procSearchMember.go @@ -0,0 +1,113 @@ +package main + +import ( + "fmt" + "log" + "strings" +) + +type procSearchMemberDef struct { + chatProcedureID +} + +var procSearchMember = procSearchMemberDef{} + +func (m *procSearchMemberDef) init(ss *openIDSessionData) { + ss.Procedure = m.getID() + ss.refreshExpire(600) +} + +func (m *procSearchMemberDef) clean(ss *openIDSessionData) { + ss.Procedure = "" +} + +func (m *procSearchMemberDef) start(ss *openIDSessionData, in *InWechatMsg) { + +} + +func (m *procSearchMemberDef) serve(ss *openIDSessionData, in *InWechatMsg) { + switch msg := in.body.(type) { + case TextMsg: + if m.endingCommand(ss, msg.Content) { + return + } + str, _ := BuildTextMsg(ss.OpenID, "搜索 "+msg.Content+"... ...") + in.replyXML(str) + m.displayUserInfo(ss, msg.Content) + case PicMsg: + //str := buildPicMsg(ss.OpenID, msg.MediaId) + xml, _ := BuildKFTransferAnyOneMsg(ss.OpenID) + in.replyXML(xml) + kfSendPicByMediaID(ss.OpenID, msg.MediaId) + kfSendTxt(ss.OpenID, "已转接校友会理事会,稍后答复您") + case VoiceMsg: + name := strings.TrimSuffix(msg.Recognition, "。") + str, _ := BuildTextMsg(ss.OpenID, "搜索 "+name+"... ...") + in.replyXML(str) + m.displayUserInfo(ss, name) + case EventMsg: + if msg.Event == "LOCATION" { + onLocation(in) + } + default: + str := fmt.Sprintf("搜索功能结束") + kfSendTxtAs(ss.OpenID, str, "孙鹏") + m.clean(ss) + } +} +func (m *procSearchMemberDef) summary(ss *openIDSessionData) { + +} + +func (m *procSearchMemberDef) intro(ss *openIDSessionData, in *InWechatMsg) { + msg := "请输入(读出)他/她的姓名或者照片" + in.replyText("") + kfSendTxtAs(ss.OpenID, msg, "孙鹏") +} + +func (m *procSearchMemberDef) displayUserInfo(ss *openIDSessionData, name string) { + total, list, err := crmFindEntityByAttr("Lead", "lastName", name) + if total <= 0 || err != nil { + kfSendTxtAs(ss.OpenID, "很抱歉,没有找到相关信息", "孙鹏") + return + } + + search, ok := list.([]crmdLead) + if !ok { + log.Printf("ERROR: 搜索 %s 结果异常, total=%d, ", name, total) + kfSendTxt(ss.OpenID, "很抱歉,没有找到相关信息") + return + } + for _, v := range search { + email := "无" + if v.EmailAddress != "" { + email = v.EmailAddress + } + + phone := "无" + if v.PhoneNumber != "" { + email = v.PhoneNumber + } + + description := "无" + if v.Description != "" { + description = v.Description + } + msg := fmt.Sprintf("%s\n电邮:%s\n电话:%s\n介绍:%s\n", name, email, phone, description) + kfSendTxtAs(ss.OpenID, msg, "孙鹏") + } + ss.refreshExpire(600) +} + +func (m *procSearchMemberDef) endingCommand(ss *openIDSessionData, cmd string) (stop bool) { + stop = false + + if cmd == "结束" || cmd == "." || cmd == "。" { + stop = true + m.clean(ss) + str := fmt.Sprintf("搜索功能结束") + kfSendTxtAs(ss.OpenID, str, "孙鹏") + } + + return +} diff --git a/procedure.go b/procedure.go index 41edcfc..d4e55d0 100644 --- a/procedure.go +++ b/procedure.go @@ -37,6 +37,7 @@ func initAllProc() { //registerProc("Dummy", &procDummy) registerProc("Echo", &procEcho) registerProc("用户信息", &procGetBasicUserInfo) + registerProc("搜索校友", &procSearchMember) } func registerProc(id string, proc chatProcedure) {