sendmsgonevent.go 2.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  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. // 当特定的事件回调消息包含 code 字段,或通过接口变更到特定的会话状态,会返回 code 字段。
  18. // 开发者可以此 code 为凭证,调用该接口给用户发送相应事件场景下的消息,如客服欢迎语、客服提示语和会话结束语等。
  19. // 除”用户进入会话事件”以外,响应消息仅支持会话处于获取该 code 的会话状态时发送,如将会话转入待接入池时获得的 code 仅能在会话状态为”待接入池排队中“时发送。
  20. //
  21. // 目前支持的事件场景和相关约束如下:
  22. //
  23. // 事件场景 允许下发条数 code 有效期 支持的消息类型 获取 code 途径
  24. // 用户进入会话,用于发送客服欢迎语 1 条 20 秒 文本、菜单 事件回调
  25. // 进入接待池,用于发送排队提示语等 1 条 48 小时 文本 转接会话接口
  26. // 从接待池接入会话,用于发送非工作时间的提示语或超时未回复的提示语等 1 条 48 小时 文本 事件回调、转接会话接口
  27. // 结束会话,用于发送结束会话提示语或满意度评价等 1 条 20 秒 文本、菜单 事件回调、转接会话接口
  28. //
  29. // 「进入会话事件」响应消息:
  30. // 如果满足通过 API 下发欢迎语条件(条件为:1. 企业没有在管理端配置了原生欢迎语;2. 用户在过去 48 小时里未收过欢迎语,且未向该用户发过消息),则用户进入会话事件会额外返回一个 welcome_code,开发者以此为凭据调用接口(填到该接口 code 参数),即可向客户发送客服欢迎语。
  31. func (r *Client) SendMsgOnEvent(options interface{}) (info SendMsgOnEventSchema, err error) {
  32. var (
  33. accessToken string
  34. data []byte
  35. )
  36. if accessToken, err = r.ctx.GetAccessToken(); err != nil {
  37. return
  38. }
  39. if data, err = util.PostJSON(fmt.Sprintf(sendMsgOnEventAddr, accessToken), options); err != nil {
  40. return
  41. }
  42. if err = json.Unmarshal(data, &info); err != nil {
  43. return
  44. }
  45. if info.ErrCode != 0 {
  46. return info, NewSDKErr(info.ErrCode, info.ErrMsg)
  47. }
  48. return info, nil
  49. }