打通微信和釘釘服務是一種怎樣的體驗?

Ceelog發表於2020-08-31

微信 和 釘釘,分屬於 騰訊 和 阿里巴巴 兩大陣營,當他們之間可以互聯互通,會是一種怎樣神奇的場景?

今天,我們就通過 fastwego/offiaccountfastwego/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/offiaccountfastwego/dingding 這兩個開源 Golang SDK 的輔助下,我們快速實現了微信 和 釘釘 服務打通的效果。

完整演示程式碼:github.com/fastwego/offiaccount-de...

你也試一試吧~

本作品採用《CC 協議》,轉載必須註明作者和本文連結

相關文章