diff --git a/echoServer.go b/echoServer.go deleted file mode 100644 index 411342b..0000000 --- a/echoServer.go +++ /dev/null @@ -1,121 +0,0 @@ -package main - -import ( - "fmt" - "log" - "os" -) - -func echoCommand(openID string, in InWechatMsg) (state chatState, processed bool) { - processed = true - str, err := BuildTextMsg(openID, "default") - log.Println("echoCommand :" + in.header.MsgType) - switch in.body.(type) { - case TextMsg: - m := in.body.(TextMsg) - str, err = BuildTextMsg(openID, m.Content+"\n\n关键词 [转接] 将后续信息都转接到 客服 测试版") - if m.Content == "转接" { - processed = false - } - case PicMsg: - m := in.body.(PicMsg) - str = buildPicMsg(openID, m.MediaId) - - case VoiceMsg: - m := in.body.(VoiceMsg) - str = buildVoiceMsg(openID, m.MediaId) - kfSendTxt(openID, "翻译结果:"+m.Recognition) - case VideoMsg: - m := in.body.(VideoMsg) - str = buildVideoMsg(openID, "e2iNEiSxCX5TV1WbFd0TQMn5lilY3bylh1--lDBwi7I", "航拍春日哈工大", m.MediaId) - case ShortVideoMsg: - m := in.body.(ShortVideoMsg) - str = buildVideoMsg(openID, "e2iNEiSxCX5TV1WbFd0TQMn5lilY3bylh1--lDBwi7I", "航拍春日哈工大", m.MediaId) - case LocationMsg: - m := in.body.(LocationMsg) - mid := location2MediaID(m.Location_X, m.Location_Y) - //str, _ = BuildTextMsg(openID, fmt.Sprintf("long=%f, lat=%f, scale=%d", m.Location_X, m.Location_Y, m.Scale)) - str = buildPicMsg(openID, mid) - url := location2URL(m.Location_X, m.Location_Y) - kfSendTxt(openID, url) - - case LinkMsg: - m := in.body.(LinkMsg) - kfSendTxt(openID, m.Title+m.Description) - str, _ = BuildTextMsg(openID, m.Url) - case EventMsg: - return echoEvents(openID, in) - default: - str, err = BuildTextMsg(openID, "text message") - } - - state.OpenID = openID - state.Procedure = "" - state.response = str - //log.Println(str) - if err != nil { - log.Println("build response failed") - processed = false - } - //state is any state that - return -} - -func echoEvents(openID string, in InWechatMsg) (state chatState, processed bool) { - processed = true - str := "" - m := in.body.(EventMsg) - log.Println("Event = " + m.Event) - switch m.Event { - case "LOCATION": - mid := location2MediaID(m.Latitude, m.Longitude) - str = buildPicMsg(openID, mid) - case "CLICK": - str, _ = BuildTextMsg(openID, m.EventKey) - case "subscribe": - str, _ = BuildTextMsg(openID, m.EventKey) - case "unsubscribe": - str, _ = BuildTextMsg(openID, m.EventKey) - case "SCAN": - str, _ = BuildTextMsg(openID, m.EventKey) - case "VIEW": - str, _ = BuildTextMsg(openID, m.EventKey) - case "kf_create_session": - kfSendTxt(openID, m.KfAccount) - //str, _ = BuildTextMsg(openID, m.KfAccount) // response msg is ignored by wechat - case "kf_close_session": - kfSendTxt(openID, m.KfAccount+"\n close type ="+m.CloseType) - //str, _ = BuildTextMsg(openID, m.KfAccount+"\n close type ="+m.CloseType) //response msg is ignored by wechat - case "scancode_waitmsg": - log.Println(m.ScanCodeInfo.ScanResult) - log.Println(m.ScanCodeInfo.ScanType) - msg := fmt.Sprintf("ScanResult =%s, ScanType=%s", m.ScanCodeInfo.ScanResult, m.ScanCodeInfo.ScanType) - kfSendTxt(openID, msg) - case "pic_photo_or_album": - msg := fmt.Sprintf("Count = %d ", m.SendPicsInfo.Count) - log.Println(m.SendPicsInfo.Count) - for _, v := range m.SendPicsInfo.PicList.Item { - log.Println(v.PicMd5Sum) - kfSendTxt(openID, v.PicMd5Sum) - } - kfSendTxt(openID, msg) - default: - str, _ = BuildTextMsg(openID, " unknown event:"+m.Event) - } - state.response = str - return -} - -func location2MediaID(lat, long float64) (mediaID string) { - url := fmt.Sprintf("https://maps.googleapis.com/maps/api/staticmap?center=%f,%f&markers=color:red|label:S|%f,%f&zoom=17&size=1280x2014", lat, long, lat, long) - file, _, _ := saveURL(url) - mediaID = uploadImage(file) - os.Remove(file) - return -} - -func location2URL(lat, long float64) (url string) { - url = fmt.Sprintf("http://maps.google.com/maps?z=12&t=m&q=loc:%f+%f", lat, long) - log.Println(url) - return -} diff --git a/procEcho.go b/procEcho.go index c76e0d3..2c48f5d 100644 --- a/procEcho.go +++ b/procEcho.go @@ -1,5 +1,11 @@ package main +import ( + "fmt" + "log" + "os" +) + const idProcEcho = "Echo" var procEcho = chatProcedure{ @@ -16,10 +22,11 @@ func echoInit(ss *openIDSessionData) { } func echoClean(ss *openIDSessionData) { - + ss.Procedure = "" } -func echoStart(ss *openIDSessionData, in InWechatMsg) { +func echoStart(ss *openIDSessionData, in InWechatMsg) { + echoCommand(ss, in) } func echoServe(ss *openIDSessionData, in InWechatMsg) { @@ -32,3 +39,114 @@ func echoSummary(ss *openIDSessionData) { func echoInto(ss *openIDSessionData) { } + +func echoCommand(ss *openIDSessionData, in InWechatMsg) { + openID := in.header.FromUserName + processed = true + str, err := BuildTextMsg(openID, "default") + log.Println("echoCommand :" + in.header.MsgType) + switch in.body.(type) { + case TextMsg: + m := in.body.(TextMsg) + str, err = BuildTextMsg(openID, m.Content+"\n\n关键词 [转接] 将后续信息都转接到 客服 测试版") + if m.Content == "转接" { + processed = false + } + case PicMsg: + m := in.body.(PicMsg) + str = buildPicMsg(openID, m.MediaId) + + case VoiceMsg: + m := in.body.(VoiceMsg) + str = buildVoiceMsg(openID, m.MediaId) + kfSendTxt(openID, "翻译结果:"+m.Recognition) + case VideoMsg: + m := in.body.(VideoMsg) + str = buildVideoMsg(openID, "e2iNEiSxCX5TV1WbFd0TQMn5lilY3bylh1--lDBwi7I", "航拍春日哈工大", m.MediaId) + case ShortVideoMsg: + m := in.body.(ShortVideoMsg) + str = buildVideoMsg(openID, "e2iNEiSxCX5TV1WbFd0TQMn5lilY3bylh1--lDBwi7I", "航拍春日哈工大", m.MediaId) + case LocationMsg: + m := in.body.(LocationMsg) + mid := location2MediaID(m.Location_X, m.Location_Y) + //str, _ = BuildTextMsg(openID, fmt.Sprintf("long=%f, lat=%f, scale=%d", m.Location_X, m.Location_Y, m.Scale)) + str = buildPicMsg(openID, mid) + url := location2URL(m.Location_X, m.Location_Y) + kfSendTxt(openID, url) + + case LinkMsg: + m := in.body.(LinkMsg) + kfSendTxt(openID, m.Title+m.Description) + str, _ = BuildTextMsg(openID, m.Url) + case EventMsg: + return echoEvents(openID, in) + default: + str, err = BuildTextMsg(openID, "text message") + } + + if err != nil { + log.Println("build response failed") + processed = false + } + //state is any state that + return +} + +func echoEvents(openID string, in InWechatMsg) (state chatState, processed bool) { + processed = true + str := "" + m := in.body.(EventMsg) + log.Println("Event = " + m.Event) + switch m.Event { + case "LOCATION": + mid := location2MediaID(m.Latitude, m.Longitude) + str = buildPicMsg(openID, mid) + case "CLICK": + str, _ = BuildTextMsg(openID, m.EventKey) + case "subscribe": + str, _ = BuildTextMsg(openID, m.EventKey) + case "unsubscribe": + str, _ = BuildTextMsg(openID, m.EventKey) + case "SCAN": + str, _ = BuildTextMsg(openID, m.EventKey) + case "VIEW": + str, _ = BuildTextMsg(openID, m.EventKey) + case "kf_create_session": + kfSendTxt(openID, m.KfAccount) + //str, _ = BuildTextMsg(openID, m.KfAccount) // response msg is ignored by wechat + case "kf_close_session": + kfSendTxt(openID, m.KfAccount+"\n close type ="+m.CloseType) + //str, _ = BuildTextMsg(openID, m.KfAccount+"\n close type ="+m.CloseType) //response msg is ignored by wechat + case "scancode_waitmsg": + log.Println(m.ScanCodeInfo.ScanResult) + log.Println(m.ScanCodeInfo.ScanType) + msg := fmt.Sprintf("ScanResult =%s, ScanType=%s", m.ScanCodeInfo.ScanResult, m.ScanCodeInfo.ScanType) + kfSendTxt(openID, msg) + case "pic_photo_or_album": + msg := fmt.Sprintf("Count = %d ", m.SendPicsInfo.Count) + log.Println(m.SendPicsInfo.Count) + for _, v := range m.SendPicsInfo.PicList.Item { + log.Println(v.PicMd5Sum) + kfSendTxt(openID, v.PicMd5Sum) + } + kfSendTxt(openID, msg) + default: + str, _ = BuildTextMsg(openID, " unknown event:"+m.Event) + } + state.response = str + return +} + +func location2MediaID(lat, long float64) (mediaID string) { + url := fmt.Sprintf("https://maps.googleapis.com/maps/api/staticmap?center=%f,%f&markers=color:red|label:S|%f,%f&zoom=17&size=1280x2014", lat, long, lat, long) + file, _, _ := saveURL(url) + mediaID = uploadImage(file) + os.Remove(file) + return +} + +func location2URL(lat, long float64) (url string) { + url = fmt.Sprintf("http://maps.google.com/maps?z=12&t=m&q=loc:%f+%f", lat, long) + log.Println(url) + return +}