Przeglądaj źródła

新增微信客服欢迎语功能

dxc 1 rok temu
rodzic
commit
9828159278

+ 1 - 0
etc/callback.live.yaml

@@ -27,3 +27,4 @@ Wxwork:
   Token: "hQ4UXgO8L96SjusIYYoCcOr"
   ReceiverId: "ww69e19c33f28499c4"
   EncodingAeskey: "utPh11IkuG2Jfne4E1DkCDbCKoQf0GporL7MlpdKnKr"
+  WelcomeMsg: "亲,如果有什么疑问请填下提供以下信息这边帮您核查看看呢\n账号:\n游戏:\n区服:\n角色名称:\n角色id:\n发生时间:\n问题描述:"

+ 2 - 0
etc/callback.yaml.bak

@@ -32,3 +32,5 @@ Wxwork:
   ReceiverId: "wwa0779f3625818a4e"
 #  aes密钥
   EncodingAeskey: "dkobxiOsG6UMg9SXby1LPc2L9sKoDF9mcq2QK78YwWV"
+# 欢迎语
+  WelcomeMsg: "亲,如果有什么疑问请填下提供以下信息这边帮您核查看看呢\n账号:\n游戏:\n区服:\n角色名称:\n角色id:\n发生时间:\n问题描述:"

+ 1 - 0
internal/config/config.go

@@ -21,5 +21,6 @@ type Config struct {
 		Token          string
 		ReceiverId     string
 		EncodingAeskey string
+		WelcomeMsg     string
 	}
 }

+ 8 - 0
internal/logic/callback/callbackmsglogic.go

@@ -324,6 +324,14 @@ func msgTypeEventHandle(svcCtx *svc.ServiceContext, msg *model.CbMsg) {
 		}
 		_ = svcCtx.Redis.Set(key, fmt.Sprintf("%v", sessionState.ServiceState))
 	case types.EventTypeEnterSession:
+		//发送欢迎语
+		welcomeCode := content.GetStringBytes("welcome_code")
+		err, d := svcCtx.WxApi.SendMsgOnEvent(string(welcomeCode), svcCtx.Config.Wxwork.WelcomeMsg)
+		if err != nil {
+			logx.Error("SendMsgOnEvent fail ", err)
+		} else {
+			logx.Info("SendMsgOnEvent success ", d)
+		}
 	}
 }
 

+ 15 - 0
pkg/wxwork/wxapi/bean.go

@@ -115,3 +115,18 @@ type GetSessionStateResp struct {
 	ServiceState   int    `json:"service_state"`
 	ServicerUserid string `json:"servicer_userid"`
 }
+
+type SendMsgOnEventParam struct {
+	Code string `json:"code"`
+	//Msgid   string `json:"msgid"`
+	Msgtype string `json:"msgtype"`
+	Text    struct {
+		Content string `json:"content"`
+	} `json:"text"`
+}
+
+type SendMsgOnEventResp struct {
+	Errcode int    `json:"errcode"`
+	Errmsg  string `json:"errmsg"`
+	Msgid   string `json:"msgid"`
+}

+ 37 - 0
pkg/wxwork/wxapi/wxapi.go

@@ -21,6 +21,7 @@ const (
 	GetMsgUrl             = "https://qyapi.weixin.qq.com/cgi-bin/kf/sync_msg?access_token=ACCESS_TOKEN"
 	GetSessionStateUrl    = "https://qyapi.weixin.qq.com/cgi-bin/kf/service_state/get?access_token=ACCESS_TOKEN"
 	UpdateSessionStateUrl = "https://qyapi.weixin.qq.com/cgi-bin/kf/service_state/trans?access_token=ACCESS_TOKEN"
+	SendMsgOnEventUrl     = "https://qyapi.weixin.qq.com/cgi-bin/kf/send_msg_on_event?access_token=ACCESS_TOKEN"
 )
 
 // 自定义封装企业微信的API接口
@@ -327,3 +328,39 @@ func (a *WxApi) GetSessionState(openKfid, externalUserid string) (err error, d G
 	d = data
 	return
 }
+
+// 发送文字欢迎语
+func (a *WxApi) SendMsgOnEvent(code string, msg string) (err error, d SendMsgOnEventResp) {
+	err = a.refreshAccessToken()
+	if err != nil {
+		return
+	}
+	url := SendMsgOnEventUrl
+	url = strings.ReplaceAll(url, "ACCESS_TOKEN", a.accessToken)
+	body := SendMsgOnEventParam{
+		Code:    code,
+		Msgtype: "text",
+	}
+	body.Text.Content = msg
+	bts, _ := json.Marshal(body)
+	res, err := http.Post(url, "application/json", bytes.NewReader(bts))
+	if err != nil {
+		return
+	}
+	defer res.Body.Close()
+	bodyBts, err := ioutil.ReadAll(res.Body)
+	if err != nil {
+		return
+	}
+	var data SendMsgOnEventResp
+	err = json.Unmarshal(bodyBts, &data)
+	if err != nil {
+		return
+	}
+	if data.Errcode != 0 {
+		err = errors.New(fmt.Sprintf("errcode: %v,errmsg: %v", data.Errcode, data.Errmsg))
+		return
+	}
+	d = data
+	return
+}

+ 7 - 1
pkg/wxwork/wxapi/wxapi_test.go

@@ -9,7 +9,7 @@ import (
 var wxApi *WxApi
 
 func init() {
-	wxApi = NewWxApi("wwa0779f3625818a4e", "bDdsGUmT3TbEAaUtPzEB4Fd2kiCIqX8bFcZ4Oy3F3jM")
+	wxApi = NewWxApi("ww69e19c33f28499c4", "KxK4D2M3I00bkm7mpBjbm428TlN27_H_gb5zJY44Qiw")
 }
 
 func Test_GetServiceList(t *testing.T) {
@@ -51,3 +51,9 @@ func Test_GetSessionState(t *testing.T) {
 	marshal, _ := json.Marshal(list)
 	fmt.Println(err, string(marshal))
 }
+
+func Test_SendMsgOnEvent(t *testing.T) {
+	err, list := wxApi.SendMsgOnEvent("83nECegc820EoeH16PD0P2cTJW9dJDulOOINVFsqXM0", "亲,如果有什么疑问请填下提供以下信息这边帮您核查看看呢\n账号:\n游戏:\n区服:\n角色名称:\n角色id:\n发生时间:\n问题描述:")
+	marshal, _ := json.Marshal(list)
+	fmt.Println(err, string(marshal))
+}