sendmsg.go 1.6 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647
  1. package kf
  2. import (
  3. "encoding/json"
  4. "fmt"
  5. "github.com/silenceper/wechat/v2/util"
  6. )
  7. const (
  8. // 发送消息
  9. sendMsgAddr = "https://qyapi.weixin.qq.com/cgi-bin/kf/send_msg?access_token=%s"
  10. )
  11. // SendMsgSchema 发送消息响应内容
  12. type SendMsgSchema struct {
  13. util.CommonError
  14. MsgID string `json:"msgid"` // 消息ID。如果请求参数指定了msgid,则原样返回,否则系统自动生成并返回。不多于32字节, 字符串取值范围(正则表达式):[0-9a-zA-Z_-]*
  15. }
  16. // SendMsg 发送消息
  17. // 当微信客户处于“新接入待处理”或“由智能助手接待”状态下,可调用该接口给用户发送消息。
  18. // 注意仅当微信客户在主动发送消息给客服后的48小时内,企业可发送消息给客户,最多可发送5条消息;若用户继续发送消息,企业可再次下发消息。
  19. // 支持发送消息类型:文本、图片、语音、视频、文件、图文、小程序、菜单消息、地理位置。
  20. // 目前该接口允许下发消息条数和下发时限如下:
  21. //
  22. // 用户动作 允许下发条数限制 下发时限
  23. // 用户发送消息 5条 48 小时
  24. func (r *Client) SendMsg(options interface{}) (info SendMsgSchema, err error) {
  25. var (
  26. accessToken string
  27. data []byte
  28. )
  29. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  30. return
  31. }
  32. if data, err = util.PostJSON(fmt.Sprintf(sendMsgAddr, accessToken), options); err != nil {
  33. return
  34. }
  35. if err = json.Unmarshal(data, &info); err != nil {
  36. return
  37. }
  38. if info.ErrCode != 0 {
  39. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  40. }
  41. return info, nil
  42. }