前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >个人微信机器人API的Golang源码用于对接ChatGPT-唯一客服系统文档中心

个人微信机器人API的Golang源码用于对接ChatGPT-唯一客服系统文档中心

作者头像
唯一Chat
发布2023-05-21 09:18:13
7060
发布2023-05-21 09:18:13
举报
文章被收录于专栏:陶士涵的菜地陶士涵的菜地

前面我们写的是对接企业微信客服、微信公众号、微信小程序 现在来对接一下个人微信机器人 效果如图:

基于唯一客服的机器人接口实现的 .env文件的配置就是机器人接口

代码语言:javascript
复制
API_BASE=https://{部署域名}/2/robotMessage
API_ENT_ID={商户ID}
REPLY_TYPE=GROUP

下面是微信个人机器人对接的Golang实现源码

代码语言:javascript
复制
package main

import (
   "fmt"
   "github.com/eatmoreapple/openwechat"
   "github.com/joho/godotenv"
   "github.com/tidwall/gjson"
   "io/ioutil"
   "log"
   "net/http"
   "net/url"
   "os"
   "regexp"
   "strings"
)

func main() {
   err := godotenv.Load(".env")
   myUID := ""
   myNicname := ""

   // 读取环境变量
   api := os.Getenv("API_BASE")
   entId := os.Getenv("API_ENT_ID")
   replyType := os.Getenv("REPLY_TYPE")
   bot := openwechat.DefaultBot(openwechat.Desktop) // 桌面模式

   // 注册消息处理函数
   bot.MessageHandler = func(msg *openwechat.Message) {

      if msg.IsText() {

         log.Printf("收到消息:%s\n", msg.Content)

         isSend := false
         //群聊
         if msg.IsSendByGroup() {
            sender, err := msg.SenderInGroup()
            if err == nil {
               log.Println("消息发送者:" + sender.NickName)
            }
            if strings.Contains(msg.Content, "@"+myNicname) {
               msg.Content = strings.TrimSpace(strings.ReplaceAll(msg.Content, "@"+myNicname, ""))
               isSend = true
            } else {
               isSend = false
            }
         } else {
            //单聊
            sender, err := msg.Sender()
            if err == nil {
               log.Println("消息发送者:" + sender.NickName)
            }
            if replyType != "GROUP" {
               isSend = true
            }
         }
         if isSend {
            data := url.Values{}
            data.Set("ent_id", entId)
            data.Set("visitor_id", msg.MsgId)
            data.Set("content", msg.Content)
            res, err := PostForm(api, data)
            if err == nil {
               r := gjson.Get(res, "result.content").String()
               r = TrimHtml(r)
               msg.ReplyText(r)
            }
         }

      }
   }
   // 注册登陆二维码回调
   bot.UUIDCallback = openwechat.PrintlnQrcodeUrl

   // 登陆
   if err := bot.Login(); err != nil {
      fmt.Println(err)
      return
   }

   // 获取登陆的用户
   self, err := bot.GetCurrentUser()
   if err != nil {
      fmt.Println(err)
      return
   }
   myUID = self.ID()
   myNicname = self.NickName
   log.Printf("当前登录用户:%s,uid:%s \n", myNicname, myUID)
   // 获取所有的好友
   //friends, err := self.Friends()
   //fmt.Println(friends, err)

   // 获取所有的群组
   //groups, err := self.Groups()
   //fmt.Println(groups, err)

   // 阻塞主goroutine, 直到发生异常或者用户主动退出
   bot.Block()
}

//发送http post请求数据为form
func PostForm(url string, data url.Values) (string, error) {
   resp, err := http.PostForm(url, data)
   if err != nil {
      return "", err
   }
   defer resp.Body.Close()
   content, err := ioutil.ReadAll(resp.Body)
   if err != nil {
      return "", err
   }
   return string(content), nil
}

/**
去除html标签,过滤html标签
*/
func TrimHtml(src string) string {
   //将HTML标签全转换成小写
   re, _ := regexp.Compile("\\<[\\S\\s]+?\\>")
   src = re.ReplaceAllStringFunc(src, strings.ToLower)
   //去除STYLE
   re, _ = regexp.Compile("\\<style[\\S\\s]+?\\</style\\>")
   src = re.ReplaceAllString(src, "")
   //去除SCRIPT
   re, _ = regexp.Compile("\\<script[\\S\\s]+?\\</script\\>")
   src = re.ReplaceAllString(src, "")
   //去除所有尖括号内的HTML代码,并换成换行符
   re, _ = regexp.Compile("\\<[\\S\\s]+?\\>")
   src = re.ReplaceAllString(src, "\n")
   //去除连续的换行符
   re, _ = regexp.Compile("\\s{2,}")
   src = re.ReplaceAllString(src, "\n")
   return strings.TrimSpace(src)
}
本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2023-05-20 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
云开发 CloudBase
云开发(Tencent CloudBase,TCB)是腾讯云提供的云原生一体化开发环境和工具平台,为200万+企业和开发者提供高可用、自动弹性扩缩的后端云服务,可用于云端一体化开发多种端应用(小程序、公众号、Web 应用等),避免了应用开发过程中繁琐的服务器搭建及运维,开发者可以专注于业务逻辑的实现,开发门槛更低,效率更高。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档