【相關(guān)學(xué)習(xí)推薦:微信公眾號(hào)開(kāi)發(fā)教程】
微信 和 釘釘,分屬于 騰訊 和 阿里巴巴 兩大陣營(yíng),當(dāng)他們之間可以互聯(lián)互通,會(huì)是一種怎樣神奇的場(chǎng)景?
今天,我們就通過(guò) fastwego/offiaccount
和 fastwego/dingding
這兩個(gè)開(kāi)源 Golang SDK 試一試:
實(shí)現(xiàn)一個(gè)微信公眾號(hào)秒變翻譯機(jī)的服務(wù):將用戶發(fā)送過(guò)來(lái)的中文文本,翻譯成法語(yǔ)。
微信開(kāi)放平臺(tái) & 釘釘開(kāi)放平臺(tái)
微信公眾號(hào)
開(kāi)啟開(kāi)發(fā)模式,接管用戶發(fā)送的消息:
同時(shí),還將獲取到微信公眾號(hào)的 appid/secret/token 配置信息
釘釘開(kāi)放平臺(tái)
開(kāi)通企業(yè)內(nèi)部 H5 微應(yīng)用并完成 AI 接口授權(quán):
同時(shí)還將獲取的釘釘 AppKey/AppSecret 的配置信息
翻譯服務(wù)開(kāi)發(fā)
翻譯服務(wù)非常簡(jiǎn)單:
- 獲取微信公眾號(hào)用戶發(fā)送的文本
- 調(diào)用釘釘 AI 翻譯接口,轉(zhuǎn)換為目標(biāo)語(yǔ)言
- 響應(yīng)微信公眾號(hào),將翻譯結(jié)果發(fā)送給用戶
主要代碼:
// 微信公眾賬號(hào)var OffiAccount *offiaccount.OffiAccount// 釘釘 App 實(shí)例var DingApp *dingding.Appfunc init() { // 加載配置文件 viper.SetConfigFile(".env") _ = viper.ReadInConfig() // 創(chuàng)建公眾號(hào)實(shí)例 OffiAccount = offiaccount.New(offiaccount.Config{ Appid: viper.GetString("APPID"), Secret: viper.GetString("SECRET"), }) // 創(chuàng)建釘釘應(yīng)用實(shí)例 DingApp = dingding.NewApp(dingding.AppConfig{ AppKey: viper.GetString("AppKey"), AppSecret: viper.GetString("AppSecret"), })}func HandleMessage(c *gin.Context) { // 獲取公眾號(hào)消息 body, _ := ioutil.ReadAll(c.Request.Body) log.Println(string(body)) message, err := OffiAccount.Server.ParseXML(body) if err != nil { log.Println(err) } var output interface{} switch message.(type) { case type_message.MessageText: // 文本 消息 msg := message.(type_message.MessageText) // 調(diào)用 釘釘 翻譯服務(wù) params := struct { Query string `json:"query"` TargetLanguage string `json:"target_language"` SourceLanguage string `json:"source_language"` }{} params.Query = msg.Content params.SourceLanguage = "zh" params.TargetLanguage = "fr" data, err := json.Marshal(params) if err != nil { fmt.Println(string(data), err) return } // 翻譯接口 resp, err := ai.Translate(DingApp, data) fmt.Println(string(resp), err) if err != nil { return } // 翻譯結(jié)果 result := struct { Errcode int64 `json:"errcode"` Errmsg string `json:"errmsg"` Result string `json:"result"` }{} err = json.Unmarshal(resp, &result) fmt.Println(result, err) if err != nil { return } // 回復(fù)公眾號(hào) 翻譯結(jié)果文本消息 output = type_message.ReplyMessageText{ ReplyMessage: type_message.ReplyMessage{ ToUserName: type_message.CDATA(msg.FromUserName), FromUserName: type_message.CDATA(msg.ToUserName), CreateTime: strconv.FormatInt(time.Now().Unix(), 10), MsgType: type_message.ReplyMsgTypeText, }, Content: type_message.CDATA(result.Result), } } OffiAccount.Server.Response(c.Writer, c.Request, output)}
運(yùn)行效果
結(jié)語(yǔ)
至此,在fastwego/offiaccount
和 fastwego/dingding
這兩個(gè)開(kāi)源 Golang SDK 的輔助下,我們快速實(shí)現(xiàn)了微信 和 釘釘 服務(wù)打通的效果。