sendmsgonevent.go 1.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445
  1. package kf
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. const (
  8. // 发送事件响应消息
  9. sendMsgOnEventAddr = "https://qyapi.weixin.qq.com/cgi-bin/kf/send_msg_on_event?access_token=%s"
  10. )
  11. // SendMsgOnEventSchema 发送事件响应消息
  12. type SendMsgOnEventSchema struct {
  13. util.CommonError
  14. MsgID string `json:"msgid"` // 消息ID。如果请求参数指定了msgid,则原样返回,否则系统自动生成并返回。不多于32字节, 字符串取值范围(正则表达式):[0-9a-zA-Z_-]*
  15. }
  16. // SendMsgOnEvent 发送事件响应消息
  17. //「进入会话事件」响应消息:
  18. // 如果满足通过API下发欢迎语条件(条件为:1. 企业没有在管理端配置了原生欢迎语;2. 用户在过去48小时里未收过欢迎语,且未向该用户发过消息),则用户进入会话事件会额外返回一个welcome_code,开发者以此为凭据调用接口(填到该接口code参数),即可向客户发送客服欢迎语。
  19. // 为了保证用户体验以及避免滥用,开发者仅可在收到相关事件后20秒内调用,且只可调用一次。
  20. func (r *Client) SendMsgOnEvent(options interface{}) (info SendMsgOnEventSchema, err error) {
  21. var (
  22. accessToken string
  23. data []byte
  24. )
  25. accessToken, err = r.ctx.GetAccessToken()
  26. if err != nil {
  27. return
  28. }
  29. data, err = util.PostJSON(fmt.Sprintf(sendMsgOnEventAddr, accessToken), options)
  30. if err != nil {
  31. return
  32. }
  33. if err = json.Unmarshal(data, &info); err != nil {
  34. return
  35. }
  36. if info.ErrCode != 0 {
  37. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  38. }
  39. return info, nil
  40. }