微信 和 釘釘,分屬於 騰訊 和 阿里巴巴 兩大陣營,當他們之間可以互聯互通,會是一種怎樣神奇的場景?
今天,我們就通過 fastwego/offiaccount
和 fastwego/dingding
這兩個開源 Golang SDK 試一試:
實現一個微信公眾號秒變翻譯機的服務:將使用者傳送過來的中文文字,翻譯成法語。
微信開放平臺 & 釘釘開放平臺
微信公眾號
開啟開發模式,接管使用者傳送的訊息:
同時,還將獲取到微信公眾號的 appid/secret/token 配置資訊
釘釘開放平臺
開通企業內部 H5 微應用並完成 AI 介面授權:
同時還將獲取的釘釘 AppKey/AppSecret 的配置資訊
翻譯服務開發
翻譯服務非常簡單:
- 獲取微信公眾號使用者傳送的文字
- 呼叫釘釘 AI 翻譯介面,轉換為目標語言
- 響應微信公眾號,將翻譯結果傳送給使用者
主要程式碼:
// 微信公眾賬號
var OffiAccount *offiaccount.OffiAccount
// 釘釘 App 例項
var DingApp *dingding.App
func init() {
// 載入配置檔案
viper.SetConfigFile(".env")
_ = viper.ReadInConfig()
// 建立公眾號例項
OffiAccount = offiaccount.New(offiaccount.Config{
Appid: viper.GetString("APPID"),
Secret: viper.GetString("SECRET"),
})
// 建立釘釘應用例項
DingApp = dingding.NewApp(dingding.AppConfig{
AppKey: viper.GetString("AppKey"),
AppSecret: viper.GetString("AppSecret"),
})
}
func HandleMessage(c *gin.Context) {
// 獲取公眾號訊息
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)
// 呼叫 釘釘 翻譯服務
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
}
// 翻譯結果
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
}
// 回覆公眾號 翻譯結果文字訊息
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)
}
執行效果
結語
至此,在fastwego/offiaccount
和 fastwego/dingding
這兩個開源 Golang SDK 的輔助下,我們快速實現了微信 和 釘釘 服務打通的效果。
完整演示程式碼:github.com/fastwego/offiaccount-de...
你也試一試吧~
本作品採用《CC 協議》,轉載必須註明作者和本文連結