1
0
mirror of https://github.com/silenceper/wechat.git synced 2026-02-08 06:32:27 +08:00
This commit is contained in:
houseme
2024-07-19 12:04:04 +08:00
parent ba0a1477eb
commit d8fde54f2d
118 changed files with 974 additions and 867 deletions

View File

@@ -1,3 +1,3 @@
### 微信客服SDK
### 微信客服 SDK
相关文档正在梳理中...

View File

@@ -22,14 +22,14 @@ const (
// AccountAddOptions 添加客服账号请求参数
type AccountAddOptions struct {
Name string `json:"name"` // 客服帐号名称, 不多于16个字符
MediaID string `json:"media_id"` // 客服头像临时素材。可以调用上传临时素材接口获取, 不多于128个字节
Name string `json:"name"` // 客服帐号名称不多于 16 个字符
MediaID string `json:"media_id"` // 客服头像临时素材。可以调用上传临时素材接口获取不多于 128 个字节
}
// AccountAddSchema 添加客服账号响应内容
type AccountAddSchema struct {
util.CommonError
OpenKFID string `json:"open_kfid"` // 新创建的客服张号ID
OpenKFID string `json:"open_kfid"` // 新创建的客服张号 ID
}
// AccountAdd 添加客服账号
@@ -55,7 +55,7 @@ func (r *Client) AccountAdd(options AccountAddOptions) (info AccountAddSchema, e
// AccountDelOptions 删除客服账号请求参数
type AccountDelOptions struct {
OpenKFID string `json:"open_kfid"` // 客服帐号ID, 不多于64字节
OpenKFID string `json:"open_kfid"` // 客服帐号 ID, 不多于 64 字节
}
// AccountDel 删除客服账号
@@ -81,9 +81,9 @@ func (r *Client) AccountDel(options AccountDelOptions) (info util.CommonError, e
// AccountUpdateOptions 修改客服账号请求参数
type AccountUpdateOptions struct {
OpenKFID string `json:"open_kfid"` // 客服帐号ID, 不多于64字节
Name string `json:"name"` // 客服帐号名称, 不多于16个字符
MediaID string `json:"media_id"` // 客服头像临时素材。可以调用上传临时素材接口获取, 不多于128个字节
OpenKFID string `json:"open_kfid"` // 客服帐号 ID, 不多于 64 字节
Name string `json:"name"` // 客服帐号名称不多于 16 个字符
MediaID string `json:"media_id"` // 客服头像临时素材。可以调用上传临时素材接口获取不多于 128 个字节
}
// AccountUpdate 修复客服账号
@@ -109,9 +109,9 @@ func (r *Client) AccountUpdate(options AccountUpdateOptions) (info util.CommonEr
// AccountInfoSchema 客服详情
type AccountInfoSchema struct {
OpenKFID string `json:"open_kfid"` // 客服帐号ID
OpenKFID string `json:"open_kfid"` // 客服帐号 ID
Name string `json:"name"` // 客服帐号名称
Avatar string `json:"avatar"` // 客服头像URL
Avatar string `json:"avatar"` // 客服头像 URL
}
// AccountListSchema 获取客服账号列表响应内容
@@ -142,19 +142,19 @@ func (r *Client) AccountList() (info AccountListSchema, err error) {
}
// AddContactWayOptions 获取客服账号链接
// 1.若scene非空返回的客服链接开发者可拼接scene_param=SCENE_PARAM参数使用用户进入会话事件会将SCENE_PARAM原样返回。其中SCENE_PARAM需要urlencode且长度不能超过128字节。
// 1.若 scene 非空,返回的客服链接开发者可拼接 scene_param=SCENE_PARAM 参数使用,用户进入会话事件会将 SCENE_PARAM 原样返回。其中 SCENE_PARAM 需要 urlencode且长度不能超过 128 字节。
// 如 https://work.weixin.qq.com/kf/kfcbf8f8d07ac7215f?enc_scene=ENCGFSDF567DF&scene_param=a%3D1%26b%3D2
// 2.历史调用接口返回的客服链接包含encScene=XXX参数不支持scene_param参数。
// 2.历史调用接口返回的客服链接(包含 encScene=XXX 参数),不支持 scene_param 参数。
// 3.返回的客服链接,不能修改或复制参数到其他链接使用。否则进入会话事件参数校验不通过,导致无法回调。
type AddContactWayOptions struct {
OpenKFID string `json:"open_kfid"` // 客服帐号ID, 不多于64字节
Scene string `json:"scene"` // 场景值,字符串类型,由开发者自定义, 不多于32字节, 字符串取值范围(正则表达式)[0-9a-zA-Z_-]*
OpenKFID string `json:"open_kfid"` // 客服帐号 ID, 不多于 64 字节
Scene string `json:"scene"` // 场景值,字符串类型,由开发者自定义不多于 32 字节字符串取值范围 (正则表达式)[0-9a-zA-Z_-]*
}
// AddContactWaySchema 获取客服账号链接响应内容
type AddContactWaySchema struct {
util.CommonError
URL string `json:"url"` // 客服链接开发者可将该链接嵌入到H5页面中用户点击链接即可向对应的微信客服帐号发起咨询。开发者也可根据该url自行生成需要的二维码图片
URL string `json:"url"` // 客服链接,开发者可将该链接嵌入到 H5 页面中,用户点击链接即可向对应的微信客服帐号发起咨询。开发者也可根据该 url 自行生成需要的二维码图片
}
// AddContactWay 获取客服账号链接

View File

@@ -16,14 +16,14 @@ type SignatureOptions struct {
// VerifyURL 验证请求参数是否合法并返回解密后的消息内容
//
// //Gin框架的使用示例
// //Gin 框架的使用示例
// r.GET("/v1/event/callback", func(c *gin.Context) {
// options := kf.SignatureOptions{}
// //获取回调的的校验参数
// if = c.ShouldBindQuery(&options); err != nil {
// c.String(http.StatusUnauthorized, "参数解析失败")
// }
// // 调用VerifyURL方法校验当前请求如果合法则把解密后的内容作为响应返回给微信服务器
// // 调用 VerifyURL 方法校验当前请求,如果合法则把解密后的内容作为响应返回给微信服务器
// echo, err := kfClient.VerifyURL(options)
// if err == nil {
// c.String(http.StatusOK, echo)
@@ -45,24 +45,24 @@ func (r *Client) VerifyURL(options SignatureOptions) (string, error) {
// 原始回调消息内容
type callbackOriginMessage struct {
ToUserName string // 企业微信的CorpID当为第三方套件回调事件时CorpID的内容为suiteid
AgentID string // 接收的应用id可在应用的设置页面获取
ToUserName string // 企业微信的 CorpID当为第三方套件回调事件时CorpID 的内容为 suiteid
AgentID string // 接收的应用 id可在应用的设置页面获取
Encrypt string // 消息结构体加密后的字符串
}
// CallbackMessage 微信客服回调消息
type CallbackMessage struct {
ToUserName string `json:"to_user_name" xml:"ToUserName"` // 微信客服组件ID
CreateTime int64 `json:"create_time" xml:"CreateTime"` // 消息创建时间unix时间戳
ToUserName string `json:"to_user_name" xml:"ToUserName"` // 微信客服组件 ID
CreateTime int64 `json:"create_time" xml:"CreateTime"` // 消息创建时间unix 时间戳
MsgType string `json:"msgtype" xml:"MsgType"` // 消息的类型,此时固定为 event
Event string `json:"event" xml:"Event"` // 事件的类型,此时固定为 kf_msg_or_event
Token string `json:"token" xml:"Token"` // 调用拉取消息接口时需要传此token用于校验请求的合法性
OpenKfID string `json:"open_kfid" xml:"OpenKfId"` // 有新消息的客服帐号。可通过sync_msg接口指定open_kfid获取此客服帐号的消息
Token string `json:"token" xml:"Token"` // 调用拉取消息接口时,需要传此 token用于校验请求的合法性
OpenKfID string `json:"open_kfid" xml:"OpenKfId"` // 有新消息的客服帐号。可通过 sync_msg 接口指定 open_kfid 获取此客服帐号的消息
}
// GetCallbackMessage 获取回调事件中的消息内容
//
// //Gin框架的使用示例
// //Gin 框架的使用示例
// r.POST("/v1/event/callback", func(c *gin.Context) {
// var (
// message kf.CallbackMessage

View File

@@ -9,10 +9,10 @@ import (
// Client 微信客服实例
type Client struct {
corpID string // 企业ID企业开通的每个微信客服都对应唯一的企业ID企业可在微信客服管理后台的企业信息处查看
secret string // Secret是微信客服用于校验开发者身份的访问密钥企业成功注册微信客服后可在「微信客服管理后台-开发配置」处获取
corpID string // 企业 ID企业开通的每个微信客服都对应唯一的企业 ID企业可在微信客服管理后台的企业信息处查看
secret string // Secret 是微信客服用于校验开发者身份的访问密钥,企业成功注册微信客服后,可在「微信客服管理后台 - 开发配置」处获取
token string // 用于生成签名校验回调请求的合法性
encodingAESKey string // 回调消息加解密参数是AES密钥的Base64编码用于解密回调消息内容对应的密文
encodingAESKey string // 回调消息加解密参数是 AES 密钥的 Base64 编码,用于解密回调消息内容对应的密文
cache cache.Cache
ctx *context.Context
}

View File

@@ -13,23 +13,23 @@ const (
// CustomerBatchGetOptions 客户基本信息获取请求参数
type CustomerBatchGetOptions struct {
ExternalUserIDList []string `json:"external_userid_list"` // external_userid列表
ExternalUserIDList []string `json:"external_userid_list"` // external_userid 列表
}
// CustomerSchema 微信客户基本资料
type CustomerSchema struct {
ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
ExternalUserID string `json:"external_userid"` // 微信客户的 external_userid
NickName string `json:"nickname"` // 微信昵称
Avatar string `json:"avatar"` // 微信头像。第三方不可获取
Gender int `json:"gender"` // 性别
UnionID string `json:"unionid"` // unionid需要绑定微信开发者帐号才能获取到查看绑定方法: https://open.work.weixin.qq.com/kf/doc/92512/93143/94769#%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E5%BE%AE%E4%BF%A1%E5%AE%A2%E6%88%B7%E7%9A%84unionid
UnionID string `json:"unionid"` // unionid需要绑定微信开发者帐号才能获取到查看绑定方法https://open.work.weixin.qq.com/kf/doc/92512/93143/94769#%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96%E5%BE%AE%E4%BF%A1%E5%AE%A2%E6%88%B7%E7%9A%84unionid
}
// CustomerBatchGetSchema 获取客户基本信息响应内容
type CustomerBatchGetSchema struct {
util.CommonError
CustomerList []CustomerSchema `json:"customer_list"` // 微信客户信息列表
InvalidExternalUserID []string `json:"invalid_external_userid"` // 无效的微信客户ID
InvalidExternalUserID []string `json:"invalid_external_userid"` // 无效的微信客户 ID
}
// CustomerBatchGet 客户基本信息获取

View File

@@ -10,13 +10,13 @@ type Error string
const (
// SDKInitFailed 错误码50001
SDKInitFailed Error = "SDK初始化失败"
SDKInitFailed Error = "SDK 初始化失败"
// SDKCacheUnavailable 错误码50002
SDKCacheUnavailable Error = "缓存无效"
// SDKUnknownError 错误码50003
SDKUnknownError Error = "未知错误"
// SDKInvalidCredential 错误码40001
SDKInvalidCredential Error = "不合法的secret参数"
SDKInvalidCredential Error = "不合法的 secret 参数"
// SDKInvalidImageSize 错误码40009
SDKInvalidImageSize Error = "无效的图片大小"
// SDKInvalidCorpID 错误码40013
@@ -28,11 +28,11 @@ const (
// SDKDecryptMSGFailed 错误码40016
SDKDecryptMSGFailed Error = "消息解密失败"
// SDKMediaIDExceedMinLength 错误码40058
SDKMediaIDExceedMinLength Error = "不合法的参数, 请参照具体 API 接口说明进行传参"
SDKMediaIDExceedMinLength Error = "不合法的参数请参照具体 API 接口说明进行传参"
// SDKContentContainsSensitiveInformation 错误码40201
SDKContentContainsSensitiveInformation Error = "当前客服账号由于涉及敏感信息,已被封禁,请联系企业微信客服处理"
// SDKAccessTokenMissing 错误码41001
SDKAccessTokenMissing Error = "缺少AccessToken参数"
SDKAccessTokenMissing Error = "缺少 AccessToken 参数"
// SDKAccessTokenExpired 错误码42001
SDKAccessTokenExpired Error = "AccessToken 已过期"
// SDKApiFreqOutOfLimit 错误码45009
@@ -79,7 +79,7 @@ var codeDic = map[int64]error{
95017: SDKApiNotOpen,
}
// NewSDKErr 初始化SDK实例错误信息
// NewSDKErr 初始化 SDK 实例错误信息
func NewSDKErr(code int64, msgList ...string) error {
if err := codeDic[code]; err != nil {
return err

View File

@@ -15,14 +15,14 @@ const (
// CorpQualificationSchema 获取视频号绑定状态响应内容
type CorpQualificationSchema struct {
util.CommonError
WechatChannelsBinding bool `json:"wechat_channels_binding"` // 当企业具有绑定成功的视频号时返回true否则返回false。 1. 企业申请绑定视频号且由视频号管理员确认后,才为绑定成功状态 2. 至少有一个绑定成功的视频号就会返回true
WechatChannelsBinding bool `json:"wechat_channels_binding"` // 当企业具有绑定成功的视频号时,返回 true否则返回 false。1. 企业申请绑定视频号且由视频号管理员确认后,才为绑定成功状态 2. 至少有一个绑定成功的视频号就会返回 true
}
// GetCorpQualification 获取视频号绑定状态
// 微信客服可接待的客户数,和企业是否已完成主体验证、是否绑定视频号相关。
//
// 企业未完成主体验证时微信客服仅可累计接待100位客户
// 企业已验证但未绑定视频号时微信客服仅可累计接待10000位客户
// 企业未完成主体验证时,微信客服仅可累计接待 100 位客户
// 企业已验证但未绑定视频号时,微信客服仅可累计接待 10000 位客户
// 企业已验证且已绑定视频号时,微信客服可接待的客户数不受限制
//
// 开发者可获取状态后,在应用等地方提示企业去完成主体验证或绑定视频号。

View File

@@ -15,17 +15,17 @@ const (
// SendMsgSchema 发送消息响应内容
type SendMsgSchema struct {
util.CommonError
MsgID string `json:"msgid"` // 消息ID。如果请求参数指定了msgid则原样返回否则系统自动生成并返回。不多于32字节, 字符串取值范围(正则表达式)[0-9a-zA-Z_-]*
MsgID string `json:"msgid"` // 消息 ID。如果请求参数指定了 msgid则原样返回否则系统自动生成并返回。不多于 32 字节字符串取值范围 (正则表达式)[0-9a-zA-Z_-]*
}
// SendMsg 发送消息
// 当微信客户处于“新接入待处理”或“由智能助手接待”状态下,可调用该接口给用户发送消息。
// 注意仅当微信客户在主动发送消息给客服后的48小时内企业可发送消息给客户最多可发送5条消息;若用户继续发送消息,企业可再次下发消息。
// 注意仅当微信客户在主动发送消息给客服后的 48 小时内,企业可发送消息给客户,最多可发送 5 条消息;若用户继续发送消息,企业可再次下发消息。
// 支持发送消息类型:文本、图片、语音、视频、文件、图文、小程序、菜单消息、地理位置。
// 目前该接口允许下发消息条数和下发时限如下:
//
// 用户动作 允许下发条数限制 下发时限
// 用户发送消息 5条 48 小时
// 用户发送消息 5 条 48 小时
func (r *Client) SendMsg(options interface{}) (info SendMsgSchema, err error) {
var (
accessToken string

View File

@@ -2,9 +2,9 @@ package sendmsg
// Message 发送消息
type Message struct {
ToUser string `json:"touser"` // 指定接收消息的客户UserID
OpenKFID string `json:"open_kfid"` // 指定发送消息的客服帐号ID
MsgID string `json:"msgid,omitempty"` // 指定消息ID
ToUser string `json:"touser"` // 指定接收消息的客户 UserID
OpenKFID string `json:"open_kfid"` // 指定发送消息的客服帐号 ID
MsgID string `json:"msgid,omitempty"` // 指定消息 ID
}
// Text 发送文本消息
@@ -12,7 +12,7 @@ type Text struct {
Message
MsgType string `json:"msgtype"` // 消息类型此时固定为text
Text struct {
Content string `json:"content"` // 消息内容最长不超过2048个字节
Content string `json:"content"` // 消息内容,最长不超过 2048 个字节
} `json:"text"` // 文本消息
}
@@ -21,7 +21,7 @@ type Image struct {
Message
MsgType string `json:"msgtype"` // 消息类型此时固定为image
Image struct {
MediaID string `json:"media_id"` // 图片文件id可以调用上传临时素材接口获取
MediaID string `json:"media_id"` // 图片文件 id可以调用上传临时素材接口获取
} `json:"image"` // 图片消息
}
@@ -30,7 +30,7 @@ type Voice struct {
Message
MsgType string `json:"msgtype"` // 消息类型此时固定为voice
Voice struct {
MediaID string `json:"media_id"` // 语音文件id可以调用上传临时素材接口获取
MediaID string `json:"media_id"` // 语音文件 id可以调用上传临时素材接口获取
} `json:"voice"` // 语音消息
}
@@ -39,7 +39,7 @@ type Video struct {
Message
MsgType string `json:"msgtype"` // 消息类型此时固定为video
Video struct {
MediaID string `json:"media_id"` // 视频文件id可以调用上传临时素材接口获取
MediaID string `json:"media_id"` // 视频文件 id可以调用上传临时素材接口获取
} `json:"video"` // 视频消息
}
@@ -48,7 +48,7 @@ type File struct {
Message
MsgType string `json:"msgtype"` // 消息类型此时固定为file
File struct {
MediaID string `json:"media_id"` // 文件id可以调用上传临时素材接口获取
MediaID string `json:"media_id"` // 文件 id可以调用上传临时素材接口获取
} `json:"file"` // 文件消息
}
@@ -57,10 +57,10 @@ type Link struct {
Message
MsgType string `json:"msgtype"` // 消息类型此时固定为link
Link struct {
Title string `json:"title"` // 标题不超过128个字节超过会自动截断
Desc string `json:"desc"` // 描述不超过512个字节超过会自动截断
URL string `json:"url"` // 点击后跳转的链接。 最长2048字节请确保包含了协议头(http/https)
ThumbMediaID string `json:"thumb_media_id"` // 缩略图的media_id, 可以通过素材管理接口获得。此处thumb_media_id即上传接口返回的media_id
Title string `json:"title"` // 标题,不超过 128 个字节,超过会自动截断
Desc string `json:"desc"` // 描述,不超过 512 个字节,超过会自动截断
URL string `json:"url"` // 点击后跳转的链接。最长 2048 字节,请确保包含了协议头 (http/https)
ThumbMediaID string `json:"thumb_media_id"` // 缩略图的 media_id, 可以通过素材管理接口获得。此处 thumb_media_id 即上传接口返回的 media_id
} `json:"link"` // 链接消息
}
@@ -69,9 +69,9 @@ type MiniProgram struct {
Message
MsgType string `json:"msgtype"` // 消息类型此时固定为miniprogram
MiniProgram struct {
AppID string `json:"appid"` // 小程序appid必须是关联到企业的小程序应用
Title string `json:"title"` // 小程序消息标题最多64个字节超过会自动截断
ThumbMediaID string `json:"thumb_media_id"` // 小程序消息封面的mediaid封面图建议尺寸为520*416
AppID string `json:"appid"` // 小程序 appid必须是关联到企业的小程序应用
Title string `json:"title"` // 小程序消息标题,最多 64 个字节,超过会自动截断
ThumbMediaID string `json:"thumb_media_id"` // 小程序消息封面的 mediaid封面图建议尺寸为 520*416
PagePath string `json:"pagepath"` // 点击消息卡片后进入的小程序页面路径
} `json:"miniprogram"` // 小程序消息
}
@@ -81,37 +81,37 @@ type Menu struct {
Message
MsgType string `json:"msgtype"` // 消息类型此时固定为msgmenu
MsgMenu struct {
HeadContent string `json:"head_content"` // 消息内容不多于1024字节
List []interface{} `json:"list"` // 菜单项配置不能多余10个
TailContent string `json:"tail_content"` // 结束文本, 不多于1024字
HeadContent string `json:"head_content"` // 消息内容,不多于 1024 字节
List []interface{} `json:"list"` // 菜单项配置,不能多余 10
TailContent string `json:"tail_content"` // 结束文本不多于 1024
} `json:"msgmenu"`
}
// MenuClick 回复菜单
type MenuClick struct {
Type string `json:"type"` // 菜单类型: click 回复菜单
Type string `json:"type"` // 菜单类型click 回复菜单
Click struct {
ID string `json:"id"` // 菜单ID, 不少于1字节, 不多于64字节
Content string `json:"content"` // 菜单显示内容, 不少于1字节, 不多于128字节
ID string `json:"id"` // 菜单 ID, 不少于 1 字节,不多于 64 字节
Content string `json:"content"` // 菜单显示内容不少于 1 字节,不多于 128 字节
} `json:"click"`
}
// MenuView 超链接菜单
type MenuView struct {
Type string `json:"type"` // 菜单类型: view 超链接菜单
Type string `json:"type"` // 菜单类型view 超链接菜单
View struct {
URL string `json:"url"` // 点击后跳转的链接, 不少于1字节, 不多于2048字节
Content string `json:"content"` // 菜单显示内容, 不少于1字节, 不多于1024字节
URL string `json:"url"` // 点击后跳转的链接不少于 1 字节,不多于 2048 字节
Content string `json:"content"` // 菜单显示内容不少于 1 字节,不多于 1024 字节
} `json:"view"`
}
// MenuMiniProgram 小程序菜单
type MenuMiniProgram struct {
Type string `json:"type"` // 菜单类型: miniprogram 小程序菜单
Type string `json:"type"` // 菜单类型miniprogram 小程序菜单
MiniProgram struct {
AppID string `json:"appid"` // 小程序appid, 不少于1字节, 不多于32字节
PagePath string `json:"pagepath"` // 点击后进入的小程序页面, 不少于1字节, 不多于1024字节
Content string `json:"content"` // 菜单显示内容, 不少于1字节, 不多于1024字节
AppID string `json:"appid"` // 小程序 appid, 不少于 1 字节,不多于 32 字节
PagePath string `json:"pagepath"` // 点击后进入的小程序页面不少于 1 字节,不多于 1024 字节
Content string `json:"content"` // 菜单显示内容不少于 1 字节,不多于 1024 字节
} `json:"miniprogram"`
}
@@ -120,8 +120,8 @@ type Location struct {
Message
MsgType string `json:"msgtype"` // 消息类型此时固定为location
Location struct {
Latitude float32 `json:"latitude"` // 纬度, 浮点数范围为90 ~ -90
Longitude float32 `json:"longitude"` // 经度, 浮点数范围为180 ~ -180
Latitude float32 `json:"latitude"` // 纬度浮点数,范围为 90 ~ -90
Longitude float32 `json:"longitude"` // 经度浮点数,范围为 180 ~ -180
Name string `json:"name"` // 位置名
Address string `json:"address"` // 地址详情说明
} `json:"location"`

View File

@@ -15,24 +15,24 @@ const (
// SendMsgOnEventSchema 发送事件响应消息
type SendMsgOnEventSchema struct {
util.CommonError
MsgID string `json:"msgid"` // 消息ID。如果请求参数指定了msgid则原样返回否则系统自动生成并返回。不多于32字节, 字符串取值范围(正则表达式)[0-9a-zA-Z_-]*
MsgID string `json:"msgid"` // 消息 ID。如果请求参数指定了 msgid则原样返回否则系统自动生成并返回。不多于 32 字节字符串取值范围 (正则表达式)[0-9a-zA-Z_-]*
}
// SendMsgOnEvent 发送事件响应消息
// 当特定的事件回调消息包含code字段或通过接口变更到特定的会话状态会返回code字段。
// 开发者可以此code为凭证调用该接口给用户发送相应事件场景下的消息如客服欢迎语、客服提示语和会话结束语等。
// 除”用户进入会话事件”以外响应消息仅支持会话处于获取该code的会话状态时发送如将会话转入待接入池时获得的code仅能在会话状态为”待接入池排队中“时发送。
// 当特定的事件回调消息包含 code 字段,或通过接口变更到特定的会话状态,会返回 code 字段。
// 开发者可以此 code 为凭证,调用该接口给用户发送相应事件场景下的消息,如客服欢迎语、客服提示语和会话结束语等。
// 除”用户进入会话事件”以外,响应消息仅支持会话处于获取该 code 的会话状态时发送,如将会话转入待接入池时获得的 code 仅能在会话状态为”待接入池排队中“时发送。
//
// 目前支持的事件场景和相关约束如下:
//
// 事件场景 允许下发条数 code有效期 支持的消息类型 获取code途径
// 用户进入会话,用于发送客服欢迎语 1条 20秒 文本、菜单 事件回调
// 进入接待池,用于发送排队提示语等 1条 48小时 文本 转接会话接口
// 从接待池接入会话,用于发送非工作时间的提示语或超时未回复的提示语等 1条 48小时 文本 事件回调、转接会话接口
// 结束会话,用于发送结束会话提示语或满意度评价等 1条 20秒 文本、菜单 事件回调、转接会话接口
// 事件场景 允许下发条数 code 有效期 支持的消息类型 获取 code 途径
// 用户进入会话,用于发送客服欢迎语 1 条 20 秒 文本、菜单 事件回调
// 进入接待池,用于发送排队提示语等 1 条 48 小时 文本 转接会话接口
// 从接待池接入会话,用于发送非工作时间的提示语或超时未回复的提示语等 1 条 48 小时 文本 事件回调、转接会话接口
// 结束会话,用于发送结束会话提示语或满意度评价等 1 条 20 秒 文本、菜单 事件回调、转接会话接口
//
// 「进入会话事件」响应消息:
// 如果满足通过API下发欢迎语条件条件为1. 企业没有在管理端配置了原生欢迎语2. 用户在过去48小时里未收过欢迎语且未向该用户发过消息则用户进入会话事件会额外返回一个welcome_code开发者以此为凭据调用接口填到该接口code参数即可向客户发送客服欢迎语。
// 如果满足通过 API 下发欢迎语条件条件为1. 企业没有在管理端配置了原生欢迎语2. 用户在过去 48 小时里未收过欢迎语,且未向该用户发过消息),则用户进入会话事件会额外返回一个 welcome_code开发者以此为凭据调用接口填到该接口 code 参数),即可向客户发送客服欢迎语。
func (r *Client) SendMsgOnEvent(options interface{}) (info SendMsgOnEventSchema, err error) {
var (
accessToken string

View File

@@ -2,8 +2,8 @@ package sendmsgonevent
// Message 发送事件响应消息
type Message struct {
Code string `json:"code"` // 事件响应消息对应的code。通过事件回调下发仅可使用一次。
MsgID string `json:"msgid"` // 消息ID。如果请求参数指定了msgid则原样返回否则系统自动生成并返回。不多于32字节不多于32字节
Code string `json:"code"` // 事件响应消息对应的 code。通过事件回调下发仅可使用一次。
MsgID string `json:"msgid"` // 消息 ID。如果请求参数指定了 msgid则原样返回否则系统自动生成并返回。不多于 32 字节,不多于 32 字节
}
// Text 文本消息
@@ -11,7 +11,7 @@ type Text struct {
Message
MsgType string `json:"msgtype"` // 消息类型此时固定为text
Text struct {
Content string `json:"content"` // 消息内容最长不超过2048个字节
Content string `json:"content"` // 消息内容,最长不超过 2048 个字节
} `json:"text"` // 文本消息
}
@@ -20,36 +20,36 @@ type Menu struct {
Message
MsgType string `json:"msgtype"` // 消息类型此时固定为msgmenu
MsgMenu struct {
HeadContent string `json:"head_content"` // 消息内容不多于1024字节
List []interface{} `json:"list"` // 菜单项配置不能多余10个
TailContent string `json:"tail_content"` // 结束文本, 不多于1024字
HeadContent string `json:"head_content"` // 消息内容,不多于 1024 字节
List []interface{} `json:"list"` // 菜单项配置,不能多余 10
TailContent string `json:"tail_content"` // 结束文本不多于 1024
} `json:"msgmenu"`
}
// MenuClick 回复菜单
type MenuClick struct {
Type string `json:"type"` // 菜单类型: click 回复菜单
Type string `json:"type"` // 菜单类型click 回复菜单
Click struct {
ID string `json:"id"` // 菜单ID, 不少于1字节, 不多于64字节
Content string `json:"content"` // 菜单显示内容, 不少于1字节, 不多于128字节
ID string `json:"id"` // 菜单 ID, 不少于 1 字节,不多于 64 字节
Content string `json:"content"` // 菜单显示内容不少于 1 字节,不多于 128 字节
} `json:"click"`
}
// MenuView 超链接菜单
type MenuView struct {
Type string `json:"type"` // 菜单类型: view 超链接菜单
Type string `json:"type"` // 菜单类型view 超链接菜单
View struct {
URL string `json:"url"` // 点击后跳转的链接, 不少于1字节, 不多于2048字节
Content string `json:"content"` // 菜单显示内容, 不少于1字节, 不多于1024字节
URL string `json:"url"` // 点击后跳转的链接不少于 1 字节,不多于 2048 字节
Content string `json:"content"` // 菜单显示内容不少于 1 字节,不多于 1024 字节
} `json:"view"`
}
// MenuMiniProgram 小程序菜单
type MenuMiniProgram struct {
Type string `json:"type"` // 菜单类型: miniprogram 小程序菜单
Type string `json:"type"` // 菜单类型miniprogram 小程序菜单
MiniProgram struct {
AppID string `json:"appid"` // 小程序appid, 不少于1字节, 不多于32字节
PagePath string `json:"pagepath"` // 点击后进入的小程序页面, 不少于1字节, 不多于1024字节
Content string `json:"content"` // 菜单显示内容, 不少于1字节, 不多于1024字节
AppID string `json:"appid"` // 小程序 appid, 不少于 1 字节,不多于 32 字节
PagePath string `json:"pagepath"` // 点击后进入的小程序页面不少于 1 字节,不多于 1024 字节
Content string `json:"content"` // 菜单显示内容不少于 1 字节,不多于 1024 字节
} `json:"miniprogram"`
}

View File

@@ -18,8 +18,8 @@ const (
// ReceptionistOptions 添加接待人员请求参数
type ReceptionistOptions struct {
OpenKFID string `json:"open_kfid"` // 客服帐号ID
UserIDList []string `json:"userid_list"` // 接待人员userid列表。第三方应用填密文userid即open_userid 可填充个数1 ~ 100。超过100个需分批调用。
OpenKFID string `json:"open_kfid"` // 客服帐号 ID
UserIDList []string `json:"userid_list"` // 接待人员 userid 列表。第三方应用填密文 userid open_userid 可填充个数1 ~ 100。超过 100 个需分批调用。
}
// ReceptionistSchema 添加接待人员响应内容
@@ -79,8 +79,8 @@ func (r *Client) ReceptionistDel(options ReceptionistOptions) (info Receptionist
type ReceptionistListSchema struct {
util.CommonError
ReceptionistList []struct {
UserID string `json:"userid"` // 接待人员的userid。第三方应用获取到的为密文userid即open_userid
Status int `json:"status"` // 接待人员的接待状态。0:接待中,1:停止接待。第三方应用需具有“管理帐号、分配会话和收发消息”权限才可获取
UserID string `json:"userid"` // 接待人员的 userid。第三方应用获取到的为密文 userid open_userid
Status int `json:"status"` // 接待人员的接待状态。0:接待中1:停止接待。第三方应用需具有“管理帐号、分配会话和收发消息”权限才可获取
} `json:"servicer_list"`
}

View File

@@ -16,24 +16,24 @@ const (
// ServiceStateGetOptions 获取会话状态请求参数
type ServiceStateGetOptions struct {
OpenKFID string `json:"open_kfid"` // 客服帐号ID
ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
OpenKFID string `json:"open_kfid"` // 客服帐号 ID
ExternalUserID string `json:"external_userid"` // 微信客户的 external_userid
}
// ServiceStateGetSchema 获取会话状态响应内容
type ServiceStateGetSchema struct {
util.CommonError
ServiceState int `json:"service_state"` // 当前的会话状态,状态定义参考概述中的表格
ServiceUserID string `json:"service_userid"` // 接待人员的userid仅当state=3时有效
ServiceUserID string `json:"service_userid"` // 接待人员的 userid仅当 state=3 时有效
}
// ServiceStateGet 获取会话状态
// 0 未处理 新会话接入客户发信咨询。可选择1.直接用API自动回复消息。2.放进待接入池等待接待人员接待。3.指定接待人员(接待人员须处于“正在接待”中,下同)进行接待
// 1 由智能助手接待 可使用API回复消息。可选择转入待接入池或者指定接待人员处理
// 0 未处理 新会话接入客户发信咨询。可选择1.直接用 API 自动回复消息。2.放进待接入池等待接待人员接待。3.指定接待人员(接待人员须处于“正在接待”中,下同)进行接待
// 1 由智能助手接待 可使用 API 回复消息。可选择转入待接入池或者指定接待人员处理
// 2 待接入池排队中 在待接入池中排队等待接待人员接入。可选择转为指定人员接待
// 3 由人工接待 人工接待中。可选择转接给其他接待人员处理或者结束会话
// 4 已结束 会话已经结束或未开始。不允许变更会话状态,客户重新发信咨询后会话状态变为“未处理”
// 注一个微信用户向一个客服帐号发起咨询后在48h内或主动结束会话前包括接待人员手动结束或企业通过API结束会话都算是一次会话
// 注:一个微信用户向一个客服帐号发起咨询后,在 48h 内,或主动结束会话前(包括接待人员手动结束,或企业通过 API 结束会话),都算是一次会话
func (r *Client) ServiceStateGet(options ServiceStateGetOptions) (info ServiceStateGetSchema, err error) {
var (
accessToken string
@@ -56,16 +56,16 @@ func (r *Client) ServiceStateGet(options ServiceStateGetOptions) (info ServiceSt
// ServiceStateTransOptions 变更会话状态请求参数
type ServiceStateTransOptions struct {
OpenKFID string `json:"open_kfid"` // 客服帐号ID
ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
OpenKFID string `json:"open_kfid"` // 客服帐号 ID
ExternalUserID string `json:"external_userid"` // 微信客户的 external_userid
ServiceState int `json:"service_state"` // 变更的目标状态,状态定义和所允许的变更可参考概述中的流程图和表格
ServicerUserID string `json:"servicer_userid"` // 接待人员的userid当state=3时要求必填接待人员须处于“正在接待”中
ServicerUserID string `json:"servicer_userid"` // 接待人员的 userid state=3 时要求必填,接待人员须处于“正在接待”中
}
// ServiceStateTransSchema 变更会话状态响应内容
type ServiceStateTransSchema struct {
util.CommonError
MsgCode string `json:"msg_code"` // 用于发送响应事件消息的code将会话初次变更为service_state为2和3返回回复语codeservice_state为4返回结束语code。可用该code调用发送事件响应消息接口给客户发送事件响应消息
MsgCode string `json:"msg_code"` // 用于发送响应事件消息的 code将会话初次变更为 service_state 为 2 和 3 时,返回回复语 codeservice_state 为 4 时,返回结束语 code。可用该 code 调用发送事件响应消息接口给客户发送事件响应消息
}
// ServiceStateTrans 变更会话状态

View File

@@ -16,11 +16,11 @@ const (
// SyncMsgOptions 获取消息查询参数
type SyncMsgOptions struct {
Cursor string `json:"cursor"` // 上一次调用时返回的next_cursor第一次拉取可以不填, 不多于64字节
Token string `json:"token"` // 回调事件返回的token字段10分钟内有效可不填如果不填接口有严格的频率限制, 不多于128字节
Limit uint `json:"limit"` // 期望请求的数据量默认值和最大值都为1000, 注意可能会出现返回条数少于limit的情况需结合返回的has_more字段判断是否继续请求。
VoiceFormat uint `json:"voice_format,omitempty"` // 语音消息类型0-Amr 1-Silk默认0。可通过该参数控制返回的语音格式开发者可按需选择自己程序支持的一种格式
OpenKfID string `json:"open_kfid,omitempty"` // 指定拉取某个客服帐号的消息否则默认返回有权限的客服帐号的消息。当客服帐号较多建议按open_kfid来拉取以获取更好的性能。
Cursor string `json:"cursor"` // 上一次调用时返回的 next_cursor第一次拉取可以不填不多于 64 字节
Token string `json:"token"` // 回调事件返回的 token 字段10 分钟内有效;可不填,如果不填接口有严格的频率限制不多于 128 字节
Limit uint `json:"limit"` // 期望请求的数据量,默认值和最大值都为 1000, 注意:可能会出现返回条数少于 limit 的情况,需结合返回的 has_more 字段判断是否继续请求。
VoiceFormat uint `json:"voice_format,omitempty"` // 语音消息类型0-Amr 1-Silk默认 0。可通过该参数控制返回的语音格式开发者可按需选择自己程序支持的一种格式
OpenKfID string `json:"open_kfid,omitempty"` // 指定拉取某个客服帐号的消息,否则默认返回有权限的客服帐号的消息。当客服帐号较多,建议按 open_kfid 来拉取以获取更好的性能。
}
// SyncMsgSchema 获取消息查询响应内容
@@ -28,7 +28,7 @@ type syncMsgSchema struct {
ErrCode int32 `json:"errcode"` // 返回码
ErrMsg string `json:"errmsg"` // 错误码描述
NextCursor string `json:"next_cursor"` // 下次调用带上该值,则从当前的位置继续往后拉,以实现增量拉取。强烈建议对改该字段入库保存,每次请求读取带上,请求结束后更新。避免因意外丢,导致必须从头开始拉取,引起消息延迟。
HasMore uint32 `json:"has_more"` // 是否还有更多数据。0-否1-是。不能通过判断msg_list是否空来停止拉取可能会出现has_more1而msg_list为空的情况
HasMore uint32 `json:"has_more"` // 是否还有更多数据。0-否1-是。不能通过判断 msg_list 是否空来停止拉取,可能会出现 has_more1 msg_list 为空的情况
MsgList []map[string]interface{} `json:"msg_list"` // 消息列表
}
@@ -36,8 +36,8 @@ type syncMsgSchema struct {
type SyncMsgSchema struct {
ErrCode int32 `json:"errcode"` // 返回码
ErrMsg string `json:"errmsg"` // 错误码描述
NextCursor string `json:"next_cursor"` // 下次调用带上该值则从该key值往后拉用于增量拉取
HasMore uint32 `json:"has_more"` // 是否还有更多数据。0-否1-是。不能通过判断msg_list是否空来停止拉取可能会出现has_more1而msg_list为空的情况
NextCursor string `json:"next_cursor"` // 下次调用带上该值则从该 key 值往后拉,用于增量拉取
HasMore uint32 `json:"has_more"` // 是否还有更多数据。0-否1-是。不能通过判断 msg_list 是否空来停止拉取,可能会出现 has_more1 msg_list 为空的情况
MsgList []syncmsg.Message `json:"msg_list"` // 消息列表
}

View File

@@ -2,10 +2,10 @@ package syncmsg
// BaseMessage 接收消息
type BaseMessage struct {
MsgID string `json:"msgid"` // 消息ID
OpenKFID string `json:"open_kfid"` // 客服帐号IDmsgtypeevent该字段不返回
ExternalUserID string `json:"external_userid"` // 客户UserIDmsgtypeevent该字段不返回
ReceptionistUserID string `json:"servicer_userid"` // 接待客服userID
MsgID string `json:"msgid"` // 消息 ID
OpenKFID string `json:"open_kfid"` // 客服帐号 IDmsgtypeevent该字段不返回
ExternalUserID string `json:"external_userid"` // 客户 UserIDmsgtypeevent该字段不返回
ReceptionistUserID string `json:"servicer_userid"` // 接待客服 userID
SendTime uint64 `json:"send_time"` // 消息发送时间
Origin uint32 `json:"origin"` // 消息来源。3-微信客户发送的消息 4-系统推送的事件消息 5-接待人员在企业微信客户端发送的消息
}
@@ -16,7 +16,7 @@ type Text struct {
MsgType string `json:"msgtype"` // 消息类型此时固定为text
Text struct {
Content string `json:"content"` // 文本内容
MenuID string `json:"menu_id"` // 客户点击菜单消息触发的回复消息中附带的菜单ID
MenuID string `json:"menu_id"` // 客户点击菜单消息,触发的回复消息中附带的菜单 ID
} `json:"text"` // 文本消息
}
@@ -25,7 +25,7 @@ type Image struct {
BaseMessage
MsgType string `json:"msgtype"` // 消息类型此时固定为image
Image struct {
MediaID string `json:"media_id"` // 图片文件ID
MediaID string `json:"media_id"` // 图片文件 ID
} `json:"image"` // 图片消息
}
@@ -34,7 +34,7 @@ type Voice struct {
BaseMessage
MsgType string `json:"msgtype"` // 消息类型此时固定为voice
Voice struct {
MediaID string `json:"media_id"` // 语音文件ID
MediaID string `json:"media_id"` // 语音文件 ID
} `json:"voice"` // 语音消息
}
@@ -43,7 +43,7 @@ type Video struct {
BaseMessage
MsgType string `json:"msgtype"` // 消息类型此时固定为video
Video struct {
MediaID string `json:"media_id"` // 文件ID
MediaID string `json:"media_id"` // 文件 ID
} `json:"video"` // 视频消息
}
@@ -52,7 +52,7 @@ type File struct {
BaseMessage
MsgType string `json:"msgtype"` // 消息类型此时固定为file
File struct {
MediaID string `json:"media_id"` // 文件ID
MediaID string `json:"media_id"` // 文件 ID
} `json:"file"` // 文件消息
}
@@ -94,9 +94,9 @@ type MiniProgram struct {
BaseMessage
MsgType string `json:"msgtype"` // 消息类型此时固定为miniprogram
MiniProgram struct {
AppID string `json:"appid"` // 小程序appid必须是关联到企业的小程序应用
Title string `json:"title"` // 小程序消息标题最多64个字节超过会自动截断
ThumbMediaID string `json:"thumb_media_id"` // 小程序消息封面的mediaid封面图建议尺寸为520*416
AppID string `json:"appid"` // 小程序 appid必须是关联到企业的小程序应用
Title string `json:"title"` // 小程序消息标题,最多 64 个字节,超过会自动截断
ThumbMediaID string `json:"thumb_media_id"` // 小程序消息封面的 mediaid封面图建议尺寸为 520*416
PagePath string `json:"pagepath"` // 点击消息卡片后进入的小程序页面路径
} `json:"miniprogram"` // 小程序消息
}
@@ -116,11 +116,11 @@ type EnterSessionEvent struct {
MsgType string `json:"msgtype"` // 消息类型此时固定为event
Event struct {
EventType string `json:"event_type"` // 事件类型。此处固定为enter_session
OpenKFID string `json:"open_kfid"` // 客服账号ID
ExternalUserID string `json:"external_userid"` // 客户UserID
OpenKFID string `json:"open_kfid"` // 客服账号 ID
ExternalUserID string `json:"external_userid"` // 客户 UserID
Scene string `json:"scene"` // 进入会话的场景值,获取客服帐号链接开发者自定义的场景值
SceneParam string `json:"scene_param"` // 进入会话的自定义参数获取客服帐号链接返回的url开发者按规范拼接的scene_param参数
WelcomeCode string `json:"welcome_code"` // 如果满足发送欢迎语条件条件为1. 企业没有在管理端配置了原生欢迎语2. 用户在过去48小时里未收过欢迎语且未向该用户发过消息会返回该字段。可用该welcome_code调用发送事件响应消息接口给客户发送欢迎语。
SceneParam string `json:"scene_param"` // 进入会话的自定义参数,获取客服帐号链接返回的 url开发者按规范拼接的 scene_param 参数
WelcomeCode string `json:"welcome_code"` // 如果满足发送欢迎语条件条件为1. 企业没有在管理端配置了原生欢迎语2. 用户在过去 48 小时里未收过欢迎语,且未向该用户发过消息),会返回该字段。可用该 welcome_code 调用发送事件响应消息接口给客户发送欢迎语。
} `json:"event"` // 事件消息
}
@@ -130,10 +130,10 @@ type MsgSendFailEvent struct {
MsgType string `json:"msgtype"` // 消息类型此时固定为event
Event struct {
EventType string `json:"event_type"` // 事件类型。此处固定为msg_send_fail
OpenKFID string `json:"open_kfid"` // 客服账号ID
ExternalUserID string `json:"external_userid"` // 客户UserID
FailMsgID string `json:"fail_msgid"` // 发送失败的消息msgid
FailType uint32 `json:"fail_type"` // 失败类型。0-未知原因 1-客服账号已删除 2-应用已关闭 4-会话已过期超过48小时 5-会话已关闭 6-超过5条限制 7-未绑定视频号 8-主体未验证 9-未绑定视频号且主体未验证 10-用户拒收
OpenKFID string `json:"open_kfid"` // 客服账号 ID
ExternalUserID string `json:"external_userid"` // 客户 UserID
FailMsgID string `json:"fail_msgid"` // 发送失败的消息 msgid
FailType uint32 `json:"fail_type"` // 失败类型。0-未知原因 1-客服账号已删除 2-应用已关闭 4-会话已过期,超过 48 小时 5-会话已关闭 6-超过 5 条限制 7-未绑定视频号 8-主体未验证 9-未绑定视频号且主体未验证 10-用户拒收
} `json:"event"` // 事件消息
}
@@ -143,8 +143,8 @@ type ReceptionistStatusChangeEvent struct {
MsgType string `json:"msgtype"` // 消息类型此时固定为event
Event struct {
EventType string `json:"event_type"` // 事件类型。此处固定为servicer_status_change
ReceptionistUserID string `json:"servicer_userid"` // 客服人员userid
OpenKFID string `json:"open_kfid"` // 客服帐号ID
ReceptionistUserID string `json:"servicer_userid"` // 客服人员 userid
OpenKFID string `json:"open_kfid"` // 客服帐号 ID
Status uint32 `json:"status"` // 状态类型。1-接待中 2-停止接待
} `json:"event"`
}
@@ -155,11 +155,11 @@ type SessionStatusChangeEvent struct {
MsgType string `json:"msgtype"` // 消息类型此时固定为event
Event struct {
EventType string `json:"event_type"` // 事件类型。此处固定为session_status_change
OpenKFID string `json:"open_kfid"` // 客服账号ID
ExternalUserID string `json:"external_userid"` // 客户UserID
OpenKFID string `json:"open_kfid"` // 客服账号 ID
ExternalUserID string `json:"external_userid"` // 客户 UserID
ChangeType uint32 `json:"change_type"` // 变更类型。1-从接待池接入会话 2-转接会话 3-结束会话
OldReceptionistUserID string `json:"old_servicer_userid"` // 老的客服人员userid。仅change_type为2和3有值
NewReceptionistUserID string `json:"new_servicer_userid"` // 新的客服人员userid。仅change_type为1和2有值
MsgCode string `json:"msg_code"` // 用于发送事件响应消息的code仅change_type为1和3会返回该字段。可用该msg_code调用发送事件响应消息接口给客户发送回复语或结束语。
OldReceptionistUserID string `json:"old_servicer_userid"` // 老的客服人员 userid。仅 change_type 为 2 和 3 有值
NewReceptionistUserID string `json:"new_servicer_userid"` // 新的客服人员 userid。仅 change_type 为 1 和 2 有值
MsgCode string `json:"msg_code"` // 用于发送事件响应消息的 code change_type 为 1 和 3 时,会返回该字段。可用该 msg_code 调用发送事件响应消息接口给客户发送回复语或结束语。
} `json:"event"` // 事件消息
}

View File

@@ -4,10 +4,10 @@ import "encoding/json"
// Message 同步的消息内容
type Message struct {
MsgID string `json:"msgid"` // 消息ID
OpenKFID string `json:"open_kfid"` // 客服帐号ID
ExternalUserID string `json:"external_userid"` // 客户UserID
ReceptionistUserID string `json:"servicer_userid"` // 接待客服userID
MsgID string `json:"msgid"` // 消息 ID
OpenKFID string `json:"open_kfid"` // 客服帐号 ID
ExternalUserID string `json:"external_userid"` // 客户 UserID
ReceptionistUserID string `json:"servicer_userid"` // 接待客服 userID
SendTime uint64 `json:"send_time"` // 消息发送时间
Origin uint32 `json:"origin"` // 消息来源。3-客户回复的消息 4-系统推送的消 息
MsgType string `json:"msgtype"` // 消息类型

View File

@@ -20,7 +20,7 @@ const (
type UpgradeServiceConfigSchema struct {
util.CommonError
MemberRange struct {
UserIDList []string `json:"userid_list"` // 专员userid列表
UserIDList []string `json:"userid_list"` // 专员 userid 列表
DepartmentIDList []string `json:"department_id_list"` // 专员部门列表
} `json:"member_range"` // 专员服务配置范围
GroupChatRange struct {
@@ -51,17 +51,17 @@ func (r *Client) UpgradeServiceConfig() (info UpgradeServiceConfigSchema, err er
// UpgradeServiceOptions 为客户升级为专员或客户群服务请求参数
type UpgradeServiceOptions struct {
OpenKFID string `json:"open_kfid"` // 客服帐号ID
ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
OpenKFID string `json:"open_kfid"` // 客服帐号 ID
ExternalUserID string `json:"external_userid"` // 微信客户的 external_userid
Type int `json:"type"` // 表示是升级到专员服务还是客户群服务。1:专员服务。2:客户群服务
Member struct {
UserID string `json:"userid"` // 服务专员的userid
UserID string `json:"userid"` // 服务专员的 userid
Wording string `json:"wording"` // 推荐语
} `json:"member"` // 推荐的服务专员type等于1时有效
} `json:"member"` // 推荐的服务专员type 等于 1 时有效
GroupChat struct {
ChatID string `json:"chat_id"` // 客户群id
ChatID string `json:"chat_id"` // 客户群 id
Wording string `json:"wording"` // 推荐语
} `json:"groupchat"` // 推荐的客户群type等于2时有效
} `json:"groupchat"` // 推荐的客户群type 等于 2 时有效
}
// UpgradeService 为客户升级为专员或客户群服务
@@ -87,13 +87,13 @@ func (r *Client) UpgradeService(options UpgradeServiceOptions) (info util.Common
// UpgradeMemberServiceOptions 为客户升级为专员服务请求参数
type UpgradeMemberServiceOptions struct {
OpenKFID string `json:"open_kfid"` // 客服帐号ID
ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
OpenKFID string `json:"open_kfid"` // 客服帐号 ID
ExternalUserID string `json:"external_userid"` // 微信客户的 external_userid
Type int `json:"type"` // 表示是升级到专员服务还是客户群服务。1:专员服务
Member struct {
UserID string `json:"userid"` // 服务专员的userid
UserID string `json:"userid"` // 服务专员的 userid
Wording string `json:"wording"` // 推荐语
} `json:"member"` // 推荐的服务专员type等于1时有效
} `json:"member"` // 推荐的服务专员type 等于 1 时有效
}
// UpgradeMemberService 为客户升级为专员服务
@@ -119,13 +119,13 @@ func (r *Client) UpgradeMemberService(options UpgradeMemberServiceOptions) (info
// UpgradeServiceGroupChatOptions 为客户升级为客户群服务请求参数
type UpgradeServiceGroupChatOptions struct {
OpenKFID string `json:"open_kfid"` // 客服帐号ID
ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
OpenKFID string `json:"open_kfid"` // 客服帐号 ID
ExternalUserID string `json:"external_userid"` // 微信客户的 external_userid
Type int `json:"type"` // 表示是升级到专员服务还是客户群服务。2:客户群服务
GroupChat struct {
ChatID string `json:"chat_id"` // 客户群id
ChatID string `json:"chat_id"` // 客户群 id
Wording string `json:"wording"` // 推荐语
} `json:"groupchat"` // 推荐的客户群type等于2时有效
} `json:"groupchat"` // 推荐的客户群type 等于 2 时有效
}
// UpgradeGroupChatService 为客户升级为客户群服务
@@ -153,8 +153,8 @@ func (r *Client) UpgradeGroupChatService(options UpgradeServiceGroupChatOptions)
// UpgradeServiceCancelOptions 为客户取消推荐
type UpgradeServiceCancelOptions struct {
OpenKFID string `json:"open_kfid"` // 客服帐号ID
ExternalUserID string `json:"external_userid"` // 微信客户的external_userid
OpenKFID string `json:"open_kfid"` // 客服帐号 ID
ExternalUserID string `json:"external_userid"` // 微信客户的 external_userid
}
// UpgradeServiceCancel 为客户取消推荐