Skip to content

分配客服会话

最后更新:2023/11/30

概述

从微信用户发起咨询到会话结束,该次会话可能会经过以下几个状态流转。**企业或第三方可使用API获取和变更会话状态,以实现对会话的分配管理。**变更会话状态时,只能从当前状态,变更成另一些特定的状态,具体如下:

ID状态说明
0未处理新会话接入(客户发消息咨询)。可选择:1.直接用API自动回复消息。2.放进待接入池等待接待人员接待。3.指定接待人员(接待人员须处于“正在接待”中,下同)进行接待
1由智能助手接待可使用API回复消息。可选择转入待接入池或者指定接待人员处理。
2待接入池排队中在待接入池中排队等待接待人员接入。可选择转为指定人员接待
3由人工接待人工接待中。可选择转接给其他接待人员处理或者结束会话。
4已结束/未开始会话已经结束或未开始(客户进入会话,还没上行消息)。不允许通过API变更会话状态,客户发消息咨询后会话状态变为“未处理”。接待人员通过客户端在已结束会话中成功发送消息后,会话状态变为“由人工接待”,此时会产生会话状态变更回调事件(4-重新接入已结束/已转接会话)

**注:**一个微信用户向一个客服账号发起咨询后,在48h内,或主动结束会话前(包括接待人员手动结束,或企业通过API结束会话),都算是一次会话。

获取会话状态

请求方式: POST(HTTPS)

请求地址: https://qyapi.weixin.qq.com/cgi-bin/kf/service_state/get?access_token=ACCESS_TOKEN

请求实例:

{ "open_kfid": "wkxxxxxxxxxxxxxxxxxx", "external_userid": "wmxxxxxxxxxxxxxxxxxx"}

参数说明:

参数是否必须说明
access_token调用接口凭证
open_kfid客服账号ID
external_userid微信客户的external_userid

权限说明:

调用的应用需要满足如下的权限

应用类型权限要求
自建应用配置到「 微信客服- 可调用接口的应用」中
第三方应用具有“微信客服->管理账号、分配会话和收发消息”权限
代开发自建应用具有“微信客服->管理账号、分配会话和收发消息”权限

注: 从2023年12月1日0点起,不再支持通过系统应用secret调用接口,存量企业暂不受影响 查看详情

  • 只能通过API管理企业指定的客服账号。企业可在管理后台“微信客服-通过API管理微信客服账号”处设置对应的客服账号通过API来管理。
  • 操作的客服账号对应的接待人员应在应用的可见范围内

返回结果:

{ "errcode": 0, "errmsg": "ok", "service_state": 3, "servicer_userid": "zhangsan"}

参数说明:

参数类型说明
errcodeint返回码
errmsgstring错误码描述
service_stateint当前的会话状态,状态定义参考概述中的表格
servicer_useridstring接待人员的userid。第三方应用为密文userid,即open_userid。仅当state=3时有效

变更会话状态

请求方式: POST(HTTPS)

请求地址: https://qyapi.weixin.qq.com/cgi-bin/kf/service_state/trans?access_token=ACCESS_TOKEN

请求实例:

{ "open_kfid": "wkxxxxxxxxxxxxxxxxxx", "external_userid": "wmxxxxxxxxxxxxxxxxxx", "service_state": 3, "servicer_userid": "zhangsan"}

参数说明:

参数是否必须说明
access_token调用接口凭证
open_kfid客服账号ID
external_userid微信客户的external_userid
service_state变更的目标状态,状态定义和所允许的变更可参考概述中的流程图和表格
servicer_userid接待人员的userid。第三方应用填密文userid,即open_userid。当state=3时要求必填,接待人员须处于“正在接待”中。注意:要求接待人员必须在企业微信激活使用,否则会返回95014错误。

权限说明:

调用的应用需要满足如下的权限

应用类型权限要求
自建应用配置到「 微信客服- 可调用接口的应用」中
第三方应用具有“微信客服->管理账号、分配会话和收发消息”权限
代开发自建应用具有“微信客服->管理账号、分配会话和收发消息”权限

注: 从2023年12月1日0点起,不再支持通过系统应用secret调用接口,存量企业暂不受影响 查看详情

  • 只能通过API管理企业指定的客服账号。企业可在管理后台“微信客服-通过API管理微信客服账号”处设置对应的客服账号通过API来管理。
  • 操作的客服账号对应的接待人员应在应用的可见范围内

返回结果:

{ "errcode": 0, "errmsg": "ok", "msg_code": "MSG_CODE"}

参数说明:

参数类型说明
errcodeint返回码
errmsgstring错误码描述
msg_codestring用于发送响应事件消息的code,将会话初次变更为service_state为2和3时,返回回复语code,service_state为4时,返回结束语code。可用该code调用发送事件响应消息接口给客户发送事件响应消息

接收消息和事件

最后更新:2024/12/23

概述

当微信客户、接待人员发消息或有行为动作时,企业微信后台会将事件的回调数据包发送到企业指定URL;企业收到请求后,再通过读取消息接口主动读取具体的消息内容。

回调事件

接收并解析事件的方法见:接收事件

示例

<xml> <ToUserName><![CDATA[ww12345678910]]></ToUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[kf_msg_or_event]]></Event> <Token><![CDATA[ENCApHxnGDNAVNY4AaSJKj4Tb5mwsEMzxhFmHVGcra996NR]]></Token> <OpenKfId><![CDATA[wkxxxxxxx]]></OpenKfId></xml>

说明

参数说明
ToUserName企业微信CorpID
CreateTime消息创建时间,unix时间戳
MsgType消息的类型,此时固定为:event
Event事件的类型,此时固定为:kf_msg_or_event
Token调用拉取消息接口时,需要传此token,用于校验请求的合法性
OpenKfId有新消息的客服账号。可通过sync_msg接口指定open_kfid获取此客服账号的消息

读取消息

微信客户发送的消息、接待人员在企业微信回复的消息、发送消息接口发送失败事件(如被用户拒收)、客户点击菜单消息的回复消息,可以通过该接口获取最近3天内具体的消息内容和事件。不支持读取通过发送消息接口发送的消息

支持的消息类型:文本、图片、语音、视频、文件、位置、链接、名片、小程序、菜单、事件。

图片、语音、视频、文件消息的媒体文件有如下大小限制,超出会获取到文本提示消息:

  • 图片:2MB
  • 语音:2MB
  • 视频:10MB
  • 文件:20MB

接口定义

请求方式: POST(HTTPS)

请求地址: https://qyapi.weixin.qq.com/cgi-bin/kf/sync_msg?access_token=ACCESS_TOKEN

请求示例

{ "cursor": "4gw7MepFLfgF2VC5npN", "token": "ENCApHxnGDNAVNY4AaSJKj4Tb5mwsEMzxhFmHVGcra996NR", "limit": 1000, "voice_format": 0, "open_kfid": "wkxxxxxx"}

参数说明:

参数必须类型说明
access_tokenstring调用接口凭证
cursorstring上一次调用时返回的next_cursor,第一次拉取可以不填。若不填,从3天内最早的消息开始返回。不多于64字节
tokenstring回调事件返回的token字段,10分钟内有效;可不填,如果不填接口有严格的频率限制。不多于128字节
limituint32期望请求的数据量,默认值和最大值都为1000。注意:可能会出现返回条数少于limit的情况,需结合返回的has_more字段判断是否继续请求。
voice_formatuint32语音消息类型,0-Amr 1-Silk,默认0。可通过该参数控制返回的语音格式,开发者可按需选择自己程序支持的一种格式
open_kfidstring指定拉取某个客服账号的消息

权限说明:

调用的应用需要满足如下的权限

应用类型权限要求
自建应用配置到「 微信客服- 可调用接口的应用」中
第三方应用具有“微信客服->管理账号、分配会话和收发消息”权限
代开发自建应用具有“微信客服->管理账号、分配会话和收发消息”权限

注: 从2023年12月1日0点起,不再支持通过系统应用secret调用接口,存量企业暂不受影响 查看详情

  • 只能通过API管理企业指定的客服账号。企业可在管理后台“微信客服-通过API管理微信客服账号”处设置对应的客服账号通过API来管理。
  • 操作的客服账号对应的接待人员应在应用的可见范围内

返回结果:

{ "errcode": 0, "errmsg": "ok", "next_cursor": "4gw7MepFLfgF2VC5npN", "has_more": 1, "msg_list": [ { "msgid": "from_msgid_4622416642169452483", "open_kfid": "wkAJ2GCAAASSm4_FhToWMFea0xAFfd3Q", "external_userid": "wmAJ2GCAAAme1XQRC-NI-q0_ZM9ukoAw", "send_time": 1615478585, "origin": 3, "servicer_userid": "Zhangsan", "msgtype": "MSG_TYPE" } ]}

参数说明:

参数类型说明
errcodeint32返回码
errmsgstring错误码描述
next_cursorstring下次调用带上该值,则从当前的位置继续往后拉,以实现增量拉取。强烈建议对该字段入库保存,每次请求读取带上,请求结束后更新。避免因意外丢,导致必须从头开始拉取,引起消息延迟。
has_moreuint32是否还有更多数据。0-否;1-是。不能通过判断msg_list是否空来停止拉取,可能会出现has_more为1,而msg_list为空的情况
msg_listobj[]消息列表
msg_list.msgidstring消息ID
msg_list.open_kfidstring客服账号ID(msgtype为event,该字段不返回)
msg_list.external_useridstring客户UserID(msgtype为event,该字段不返回)
msg_list.send_timeuint64消息发送时间
msg_list.originuint32消息来源。3-微信客户发送的消息 4-系统推送的事件消息 5-接待人员在企业微信客户端发送的消息
msg_list.servicer_useridstring从企业微信给客户发消息的接待人员userid(即仅origin为5才返回;msgtype为event,该字段不返回)
msg_list.msgtypestring对不同的msgtype,有相应的结构描述,下面进一步说明

消息类型

文本消息

返回示例:

{ "msgtype" : "text", "text" : { "content" : "hello world", "menu_id" : "101" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:text
textobj文本消息
text.contentstring文本内容
text.menu_idstring客户点击菜单消息,触发的回复消息中附带的菜单ID

图片消息

返回示例:

{ "msgtype" : "image", "image" : { "media_id" : "2iSLeVyqzk4eX0IB5kTi9Ljfa2rt9dwfq5WKRQ4Nvvgw" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:image
imageobj图片消息
image.media_idstring图片文件id

语音消息

返回示例:

{ "msgtype" : "voice", "voice" : { "media_id" : "2iSLeVyqzk4eX0IB5kTi9Ljfa2rt9dwfq5WKRQ4Nvvgw" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:voice
voiceobj语音消息
voice.media_idstring语音文件ID

视频消息

返回示例:

{ "msgtype" : "video", "video" : { "media_id" : "2iSLeVyqzk4eX0IB5kTi9Ljfa2rt9dwfq5WKRQ4Nvvgw" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:video
videoobj视频消息
video.media_idstring文件id

文件消息

返回示例:

{ "msgtype" : "file", "file" : { "media_id" : "2iSLeVyqzk4eX0IB5kTi9Ljfa2rt9dwfq5WKRQ4Nvvgw" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:file
fileobj文件消息
file.media_idstring文件id

位置消息

返回示例:

{ "msgtype" : "location", "location" : { "latitude": 23.106021881103501, "longitude": 113.320503234863, "name": "广州国际媒体港(广州市海珠区)", "address": "广东省广州市海珠区滨江东路" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:location
locationobj地理位置消息
location.latitudefloat纬度
location.longitudefloat经度
location.namestring位置名
location.addressstring地址详情说明

链接消息

返回示例:

{ "msgtype" : "link", "link" : { "title": "TITLE", "desc": "DESC", "url": "URL", "pic_url": "PIC_URL" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:link
linkobj链接消息
link.titlestring标题
link.descstring描述
link.urlstring点击后跳转的链接
link.pic_urlstring缩略图链接

名片消息

返回示例:

{ "msgtype" : "business_card", "business_card" : { "userid": "USERID" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:business_card
business_cardobj名片消息
business_card.useridstring名片userid

小程序消息

返回示例:

{ "msgtype" : "miniprogram", "miniprogram" : { "title": "TITLE", "appid": "APPID", "pagepath": "PAGE_PATH", "thumb_media_id": "THUMB_MEDIA_ID" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:miniprogram
miniprogramobj小程序消息
miniprogram.titlestring标题
miniprogram.appidstring小程序appid
miniprogram.pagepathstring点击消息卡片后进入的小程序页面路径
miniprogram.thumb_media_idstring小程序消息封面的mediaid

菜单消息

返回示例:

{ "msgtype" : "msgmenu", "msgmenu": { "head_content": "您对本次服务是否满意呢? ", "list": [ { "type": "click", "click": { "id": "101", "content": "满意" } }, { "type": "click", "click": { "id": "102", "content": "不满意" } }, { "type": "view", "view": { "url": "https://work.weixin.qq.com", "content": "点击跳转到自助查询页面" } }, { "type": "miniprogram", "miniprogram": { "appid": "wx123123123123123", "pagepath": "pages/index?userid=zhangsan&orderid=123123123", "content": "点击打开小程序查询更多" } } ], "tail_content": "欢迎再次光临" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:msgmenu
msgmenuobj菜单消息
msgmenu.head_contentstring起始文本
msgmenu.listobj[]菜单项配置
msgmenu.list.typestring菜单类型。click-回复菜单 view-超链接菜单 miniprogram-小程序菜单
msgmenu.list.clickobjtype为click的菜单项
msgmenu.list.click.idstring菜单ID
msgmenu.list.click.contentstring菜单显示内容
msgmenu.list.viewobjtype为view的菜单项
msgmenu.list.view.urlstring点击后跳转的链接
msgmenu.list.view.contentstring菜单显示内容
msgmenu.list.miniprogramobjtype为miniprogram的菜单项
msgmenu.list.miniprogram.appidstring小程序appid
msgmenu.list.miniprogram.pagepathstring点击后进入的小程序页面
msgmenu.list.miniprogram.contentstring菜单显示内容
msgmenu.tail_contentstring结束文本

视频号商品消息

返回示例:

{ "msgtype" : "channels_shop_product", "channels_shop_product" : { "product_id": "PRODUCT_ID", "head_image": "PRODUCT_IMAGE_URL", "title": "TITLE", "sales_price": "SALES_PRICE", "shop_nickname": "SHOP_NICKNAME", "shop_head_image": "SHOP_HEAD_IMAGE" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:channels_shop_product
channels_shop_productobj视频号商品消息
channels_shop_product.product_idstring商品ID
channels_shop_product.head_imagestring商品图片
channels_shop_product.titlestring商品标题
channels_shop_product.sales_pricestring商品价格,以分为单位
channels_shop_product.shop_nicknamestring店铺名称
channels_shop_product.shop_head_imagestring店铺头像

视频号订单消息

返回示例:

{ "msgtype" : "channels_shop_order", "channels_shop_order" : { "order_id": "ORDER_ID", "product_titles":"PRODUCT_TITLES", "price_wording":"PRICE_WORDING", "state":"STATE", "image_url":"IMAGE_URL", "shop_nickname":"SHOP_NICKNAME" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:channels_shop_order
channels_shop_orderobj视频号订单消息
channels_shop_order.order_idstring订单号
channels_shop_order.product_titlesstring商品标题
channels_shop_order.price_wordingstring订单价格描述
channels_shop_order.statestring订单状态
channels_shop_order.image_urlstring订单缩略图
channels_shop_order.shop_nicknamestring店铺名称

聊天记录消息

返回示例:

{ "msgtype" : "merged_msg", "merged_msg": { "title": "群聊的聊天记录", "item": [ { "send_time": 1665649618, "msgtype": "text", "sender_name": "发送者", "msg_content": "{\"msgtype\":\"text\",\"text\":{\"content\":\"消息内容\"}}" } ] }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:merged_msg
merged_msgobj聊天记录消息
merged_msg.titlestring聊天记录标题
merged_msg.itemobj[]消息记录内的消息内容
merged_msg.item.send_timeuint32发送时间
merged_msg.item.msgtypeuint32消息类型
merged_msg.item.sender_nameuint32发送者名称
merged_msg.item.msg_contentstring消息内容,Json字符串,结构可参考本文档消息类型说明

视频号消息

返回示例:

{ "msgtype" : "channels", "channels" : { "sub_type": 1, "nickname": "视频号名称", "title": "动态标题" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:channels目前仅部分返回详细消息内容。
channelsobj视频号消息
channels. sub_typeuint32视频号消息类型,1视频号动态、2视频号直播、3视频号名片
channels. nicknamestring视频号名称
channels. titlestring视频号动态标题,视频号消息类型为“1视频号动态”时,返回动态标题

会议消息

返回示例:

{ "msgtype" : "meeting"}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:meeting目前暂不返回详细消息内容。

日程消息

返回示例:

{ "msgtype" : "calendar"}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:calendar目前暂不返回详细消息内容。

笔记消息

返回示例:

{ "msgtype" : "note"}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:note目前暂不返回详细消息内容。

事件消息

用户进入会话事件

通过客服链接进入会话,才会触发该事件。需要注意的是,从客服会话列表的已有会话点击进入,不会触发。

返回示例:

{ "msgtype" : "event", "event" : { "event_type": "enter_session", "open_kfid": "wkAJ2GCAAASSm4_FhToWMFea0xAFfd3Q", "external_userid": "wmAJ2GCAAAme1XQRC-NI-q0_ZM9ukoAw", "scene": "123", "scene_param": "abc", "welcome_code": "aaaaaa", "wechat_channels": { "nickname": "进入会话的视频号名称", "scene":1 } }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:event
eventobj事件消息
event.event_typestring事件类型。此处固定为:enter_session
event.open_kfidstring客服账号ID
event.external_useridstring客户UserID
event.scenestring进入会话的场景值,获取客服账号链接开发者自定义的场景值
event.scene_paramstring进入会话的自定义参数,获取客服账号链接返回的url,开发者按规范拼接的scene_param参数
event.welcome_codestring如果满足发送欢迎语条件(条件为:用户在过去48小时里未收过欢迎语,且未向客服发过消息),会返回该字段。可用该welcome_code调用发送事件响应消息接口给客户发送欢迎语。
event.wechat_channelsobj进入会话的视频号信息,从视频号进入会话才有值
event.wechat_channels.nicknamestring视频号名称,视频号场景值为1、2、3时返回此项
event.wechat_channels.shop_nicknamestring视频号小店名称,视频号场景值为4、5时返回此项
event.wechat_channels.sceneuint32视频号场景值。1:视频号主页,2:视频号直播间商品列表页,3:视频号商品橱窗页,4:视频号小店商品详情页,5:视频号小店订单页

消息发送失败事件

返回示例:

{ "msgtype": "event", "event": { "event_type": "msg_send_fail", "open_kfid": "wkAJ2GCAAASSm4_FhToWMFea0xAFfd3Q", "external_userid": "wmAJ2GCAAAme1XQRC-NI-q0_ZM9ukoAw", "fail_msgid": "FAIL_MSGID", "fail_type": 4 }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:event
eventobj事件消息
event.event_typestring事件类型。此处固定为:msg_send_fail
event.open_kfidstring客服账号ID
event.external_useridstring客户UserID
event.fail_msgidstring发送失败的消息msgid
event.fail_typeuint32失败类型。0-未知原因 1-客服账号已删除 2-应用已关闭 4-会话已过期,超过48小时 5-会话已关闭 6-超过5条限制 8-主体未验证 10-用户拒收 11-企业未有成员登录企业微信App(排查方法:企业至少一个成员通过手机号验证/微信授权登录企业微信App即可)12-发送的消息为客服组件禁发的消息类型 13-安全限制

接待人员接待状态变更事件

返回示例:

{ "msgtype": "event", "event": { "event_type": "servicer_status_change", "servicer_userid": "SERVICER_USERID", "status": 2, "stop_type": 0, "open_kfid": "OPEN_KFID" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:event
eventobj事件消息
event.event_typestring事件类型。此处固定为:servicer_status_change
event.servicer_useridstring接待人员userid
event.statusuint32状态类型。1-接待中 2-停止接待
event.stop_typeuint32接待人员的状态为「停止接待」的子类型。0:停止接待,1:暂时挂起
event.open_kfidstring客服账号ID

会话状态变更事件

返回示例:

{ "msgtype" : "event", "event" : { "event_type": "session_status_change", "open_kfid": "wkAJ2GCAAASSm4_FhToWMFea0xAFfd3Q", "external_userid": "wmAJ2GCAAAme1XQRC-NI-q0_ZM9ukoAw", "change_type": 1, "old_servicer_userid": "OLD_SERVICER_USERID", "new_servicer_userid": "NEW_SERVICER_USERID", "msg_code": "MSG_CODE" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:event
eventobj事件消息
event.event_typestring事件类型。此处固定为:session_status_change
event.open_kfidstring客服账号ID
event.external_useridstring客户UserID
event.change_typeuint32变更类型,均为接待人员在企业微信客户端操作触发。1-从接待池接入会话 2-转接会话 3-结束会话 4-重新接入已结束/已转接会话
event.old_servicer_useridstring老的接待人员userid。仅change_type为2、3和4有值
event.new_servicer_useridstring新的接待人员userid。仅change_type为1、2和4有值
event.msg_codestring用于发送事件响应消息的code,仅change_type为1和3时,会返回该字段。可用该msg_code调用发送事件响应消息接口给客户发送回复语或结束语。

用户撤回消息事件

返回示例:

{ "msgtype" : "event", "event" : { "event_type": "user_recall_msg", "open_kfid": "wkAJ2GCAAASSm4_FhToWMFea0xAFfd3Q", "external_userid": "wmAJ2GCAAAme1XQRC-NI-q0_ZM9ukoAw", "recall_msgid": "RECALL_MSGID" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:event
eventobj事件消息
event.event_typestring事件类型。此处固定为:user_recall_msg
event.open_kfidstring客服账号ID
event.external_useridstring客户UserID
event.recall_msgidstring撤回的消息msgid

接待人员撤回消息事件

返回示例:

{ "msgtype" : "event", "event" : { "event_type": "servicer_recall_msg", "open_kfid": "wkAJ2GCAAASSm4_FhToWMFea0xAFfd3Q", "external_userid": "wmAJ2GCAAAme1XQRC-NI-q0_ZM9ukoAw", "recall_msgid": "RECALL_MSGID", "servicer_userid": "SERVICER_USERID" }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:event
eventobj事件消息
event.event_typestring事件类型。此处固定为:servicer_recall_msg
event.open_kfidstring客服账号ID
event.external_useridstring客户UserID
event.recall_msgidstring撤回的消息msgid
event.servicer_useridstring接待人员userid

拒收客户消息变更事件

返回示例:

{ "msgtype" : "event", "event" : { "event_type": "reject_customer_msg_switch_change", "servicer_userid": "Zhangsan", "open_kfid": "wkAJ2GCAAASSm4_FhToWMFea0xAFfd3Q", "external_userid": "wmAJ2GCAAAme1XQRC-NI-q0_ZM9ukoAw", "reject_switch": 1 }}

参数说明:

参数类型说明
msgtypestring消息类型,此时固定为:event
eventobj事件消息
event.event_typestring事件类型。此处固定为:reject_customer_msg_switch_change
event.servicer_useridstring操作的接待人员userid
event.open_kfidstring客服账号ID
event.external_useridstring客户UserID
event.reject_switchuint32拒收客户消息,1表示接待人员拒收了客户消息,0表示接待人员取消拒收客户消息

发送消息

最后更新:2023/12/19

概述

当微信客户处于“新接入待处理”或“由智能助手接待”状态下,可调用该接口给用户发送消息。

注意仅当微信客户在主动发送消息给客服后的48小时内,企业可发送消息给客户,最多可发送5条消息;若用户继续发送消息,企业可再次下发消息。

支持发送消息类型:文本、图片、语音、视频、文件、图文、小程序、菜单消息、地理位置、获客链接。

目前该接口允许下发消息条数和下发时限如下:

用户动作允许下发条数限制下发时限
用户发送消息5条48 小时

接口定义

请求方式: POST(HTTPS)

请求地址: https://qyapi.weixin.qq.com/cgi-bin/kf/send_msg?access_token=ACCESS_TOKEN

参数说明:

参数是否必须说明
access_token调用接口凭证

权限说明:

调用的应用需要满足如下的权限

应用类型权限要求
自建应用配置到「 微信客服- 可调用接口的应用」中
第三方应用具有“微信客服->管理账号、分配会话和收发消息”权限
代开发自建应用具有“微信客服->管理账号、分配会话和收发消息”权限

注: 从2023年12月1日0点起,不再支持通过系统应用secret调用接口,存量企业暂不受影响 查看详情

  • 只能通过API管理企业指定的客服账号。企业可在管理后台“微信客服-通过API管理微信客服账号”处设置对应的客服账号通过API来管理。
  • 操作的客服账号对应的接待人员应在应用的可见范围内

返回结果:

{ "errcode": 0, "errmsg": "ok", "msgid": "MSG_ID"}

注意:接口返回成功,不代表消息最终发送成功,还需要关注

消息发送失败事件

参数说明:

参数类型说明
errcodeint32返回码
errmsgstring错误码描述
msgidstring消息ID。如果请求参数指定了msgid,则原样返回,否则系统自动生成并返回。若指定msgid,开发者需确保客服账号内唯一,否则接口返回错误。不多于32字节字符串取值范围(正则表达式):[0-9a-zA-Z_-]*

消息类型

文本消息

请求示例:

{ "touser" : "EXTERNAL_USERID", "open_kfid": "OPEN_KFID", "msgid": "MSGID", "msgtype" : "text", "text" : { "content" : "你购买的物品已发货,可点击链接查看物流状态http://work.weixin.qq.com/xxxxxx" }}

参数说明:

参数是否必须类型说明
touserstring指定接收消息的客户UserID
open_kfidstring指定发送消息的客服账号ID
msgidstring指定消息ID
msgtypestring消息类型,此时固定为:text
textobj文本消息
text.contentstring消息内容,最长不超过2048个字节

图片消息

请求示例:

{ "touser" : "EXTERNAL_USERID", "open_kfid": "OPEN_KFID", "msgid": "MSGID", "msgtype" : "image", "image" : { "media_id" : "MEDIA_ID" }}

请求参数:

参数是否必须类型说明
touserstring指定接收消息的客户UserID
open_kfidstring指定发送消息的客服账号ID
msgidstring指定消息ID
msgtypestring消息类型,此时固定为:image
imageobj图片消息
image.media_idstring图片文件id,可以调用上传临时素材接口获取

语音消息

请求示例:

{ "touser" : "EXTERNAL_USERID", "open_kfid": "OPEN_KFID", "msgtype" : "voice", "voice" : { "media_id" : "MEDIA_ID" }}

参数说明:

参数是否必须类型说明
touserstring指定接收消息的客户UserID
open_kfidstring指定发送消息的客服账号ID
msgidstring指定消息ID
msgtypestring消息类型,此时固定为:voice
voiceobj语音消息
voice.media_idstring语音文件id,可以调用上传临时素材接口获取

视频消息

请求示例:

{ "touser" : "EXTERNAL_USERID", "open_kfid": "OPEN_KFID", "msgid": "MSGID", "msgtype" : "video", "video" : { "media_id" : "MEDIA_ID" }}

参数说明:

参数是否必须类型说明
touserstring指定接收消息的客户UserID
open_kfidstring指定发送消息的客服账号ID
msgidstring指定消息ID
msgtypestring消息类型,此时固定为:video
videoobj视频消息
video.media_idstring视频媒体文件id,可以调用上传临时素材接口获取

视频消息展现:

文件消息

请求示例:

{ "touser" : "EXTERNAL_USERID", "open_kfid": "OPEN_KFID", "msgid": "MSGID", "msgtype" : "file", "file" : { "media_id" : "1Yv-zXfHjSjU-7LH-GwtYqDGS-zz6w22KmWAT5COgP7o" }}

参数说明:

参数是否必须类型说明
touserstring指定接收消息的客户UserID
open_kfidstring指定发送消息的客服账号ID
msgidstring指定消息ID
msgtypestring消息类型,此时固定为:file
fileobj文件消息
file.media_idstring文件id,可以调用上传临时素材接口获取

文件消息展现:

图文链接消息

请求示例:

{ "touser" : "EXTERNAL_USERID", "open_kfid": "OPEN_KFID", "msgid": "MSGID", "msgtype" : "link", "link" : { "title" : "企业如何增长?企业微信给出3个答案", "desc" : "今年中秋节公司有豪礼相送", "url" : "URL", "thumb_media_id": "MEDIA_ID" }}

参数说明:

参数是否必须类型说明
touserstring指定接收消息的客户UserID
open_kfidstring指定发送消息的客服账号ID
msgidstring指定消息ID
msgtypestring消息类型,此时固定为:link
linkobj链接消息
link.titlestring标题,不超过128个字节,超过会自动截断
link.descstring描述,不超过512个字节,超过会自动截断
link.urlstring点击后跳转的链接。 最长2048字节,请确保包含了协议头(http/https)
link.thumb_media_idstring缩略图的media_id, 可以通过素材管理接口获得。此处thumb_media_id即上传接口返回的media_id

图文链接消息展现:

小程序消息

请求示例:

{ "touser" : "EXTERNAL_USERID", "open_kfid": "OPEN_KFID", "msgid": "MSGID", "msgtype" : "miniprogram" "miniprogram" : { "appid": "APPID", "title": "欢迎报名夏令营", "thumb_media_id": "MEDIA_ID", "pagepath": "PAGE_PATH" }}

参数说明:

参数是否必须类型说明
touserstring指定接收消息的客户UserID
open_kfidstring指定发送消息的客服账号ID
msgidstring指定消息ID
msgtypestring消息类型,此时固定为:miniprogram
miniprogramobj小程序消息
miniprogram.appidstring小程序appid
miniprogram.titlestring小程序消息标题,最多64个字节,超过会自动截断
miniprogram.thumb_media_idstring小程序消息封面的mediaid,封面图建议尺寸为520*416
miniprogram.pagepathstring点击消息卡片后进入的小程序页面路径。注意路径要以.html为后缀,否则在微信中打开会提示找不到页面

菜单消息

请求示例:

{ "touser": "EXTERNAL_USERID", "open_kfid": "OPEN_KFID", "msgid": "MSGID", "msgtype": "msgmenu", "msgmenu": { "head_content": "您对本次服务是否满意呢? ", "list": [ { "type": "click", "click": { "id": "101", "content": "满意" } }, { "type": "click", "click": { "id": "102", "content": "不满意" } }, { "type": "view", "view": { "url": "https://work.weixin.qq.com", "content": "点击跳转到自助查询页面" } }, { "type": "miniprogram", "miniprogram": { "appid": "wx123123123123123", "pagepath": "pages/index.html?userid=zhangsan&amp;orderid=123123123", "content": "点击打开小程序查询更多" } }, { "type": "text", "text": { "content": "纯文本,支持\n换行", "no_newline": 0 } } ], "tail_content": "欢迎再次光临" }}

参数说明:

参数必须类型说明
touserstring指定接收消息的客户UserID
open_kfidstring指定发送消息的客服账号ID
msgidstring指定消息ID
msgtypestring消息类型,此时固定为:msgmenu
msgmenuobj菜单消息
msgmenu.head_contentstring起始文本不多于1024字节
msgmenu.listobj[]菜单项配置,不超过50个,其中click/view/miniprogram的菜单类型加起来不超过10个
msgmenu.list.typestring菜单类型。click-回复菜单 view-超链接菜单 miniprogram-小程序菜单 text-文本
msgmenu.list.clickobjtype为click的菜单项
msgmenu.list.click.idstring菜单ID。建议只使用以下字符集a-z、A-Z、0-9、_,不建议用#,否则可能会出现截断。不少于1字节不多于128字节
msgmenu.list.click.contentstring菜单显示内容不少于1字节不多于128字节
msgmenu.list.viewobjtype为view的菜单项
msgmenu.list.view.urlstring点击后跳转的链接。不少于1字节不多于2048字节
msgmenu.list.view.contentstring菜单显示内容。不少于1字节不多于1024字节
msgmenu.list.miniprogramobjtype为miniprogram的菜单项
msgmenu.list.miniprogram.appidstring小程序appid。不少于1字节不多于32字节
msgmenu.list.miniprogram.pagepathstring点击后进入的小程序页面。不少于1字节不多于1024字节
msgmenu.list.miniprogram.contentstring菜单显示内容。不多于1024字节
msgmenu.list.textobjtype为text的菜单项
msgmenu.list.text.contentstring文本内容,支持\n(\和n两个字符)换行。不少于1字节不多于256字节
msgmenu.list.text.no_newlinebool内容后面是否不换行,0-换行 1-不换行,默认为0。可用于普通文本和其他菜单类型混排,消息内容更丰富
msgmenu.tail_contentstring结束文本不多于1024字节

其中,“满意”和“不满意”两个菜单当用户点击后,用户会自动回复一条文本消息,同时附带对应的菜单ID。

菜单消息展现:

地理位置消息

请求示例:

{ "touser" : "EXTERNAL_USERID", "open_kfid": "OPEN_KFID", "msgid": "MSGID", "msgtype" : "location", "location": { "name": "测试小区", "address": "实例小区,不真实存在,经纬度无意义", "latitude": 0, "longitude": 0 }}

参数说明:

参数是否必须类型说明
touserstring指定接收消息的客户UserID
open_kfidstring指定发送消息的客服账号ID
msgidstring指定消息ID
msgtypestring消息类型,此时固定为:location
locationobj地理位置消息
location.namestring位置名
location.addressstring地址详情说明
location.latitudefloat纬度,浮点数,范围为90 ~ -90
location.longitudefloat经度,浮点数,范围为180 ~ -180

获客链接消息

将获客链接转成名片消息下发给微信客户。

微信客户通过这种方式打开名片,在获客助手的数据统计上,暂不会计算到打开链接的客户数中,其他添加等数据不影响。

请求示例:

{ "touser" : "EXTERNAL_USERID", "open_kfid": "OPEN_KFID", "msgid": "MSGID", "msgtype" : "ca_link", "ca_link": { "link_url": "https://work.weixin.qq.com/ca/xxxxxx" }}

参数说明:

参数是否必须类型说明
touserstring指定接收消息的客户UserID
open_kfidstring指定发送消息的客服账号ID
msgidstring指定消息ID
msgtypestring消息类型,此时固定为:ca_link
ca_linkobj获客链接消息
ca_link.link_urlstring通过获客助手创建的获客链接

发送欢迎语等事件响应消息

最后更新:2023/11/30

概述

当特定的事件回调消息包含code字段,或通过接口变更到特定的会话状态,会返回code字段。

开发者可以此code为凭证,调用该接口给用户发送相应事件场景下的消息如客服欢迎语、客服提示语和会话结束语等。

除"用户进入会话事件"以外,响应消息仅支持会话处于获取该code的会话状态时发送,如将会话转入待接入池时获得的code仅能在会话状态为”待接入池排队中“时发送。

目前支持的事件场景和相关约束如下:

事件场景允许下发条数code有效期支持的消息类型获取code途径
用户进入会话,用于发送客服欢迎语1条20秒文本、菜单事件回调
进入接待池,用于发送排队提示语等1条48小时文本转接会话接口
从接待池接入会话,用于发送非工作时间的提示语或超时未回复的提示语等1条48小时文本事件回调、转接会话接口
结束会话,用于发送结束会话提示语或满意度评价等1条20秒文本、菜单事件回调、转接会话接口

接口定义

请求方式POST(HTTPS)

请求地址: https://qyapi.weixin.qq.com/cgi-bin/kf/send_msg_on_event?access_token=ACCESS_TOKEN

请求示例

{ "code": "CODE", "msgid": "MSG_ID", "msgtype": "MSG_TYPE"}

参数说明:

参数是否必须类型说明
access_tokenstring调用接口凭证
codestring事件响应消息对应的code。通过事件回调下发,仅可使用一次。
msgidstring消息ID。如果请求参数指定了msgid,则原样返回,否则系统自动生成并返回。不多于32字节字符串取值范围(正则表达式):[0-9a-zA-Z_-]*
msgtypestring消息类型。对不同的msgtype,有相应的结构描述,详见消息类型

「进入会话事件」响应消息:

用户在过去48小时里未收过欢迎语,且未向客服发过消息

用户进入会话事件

welcome_code
code

权限说明:

调用的应用需要满足如下的权限

应用类型权限要求
自建应用配置到「 微信客服- 可调用接口的应用」中
第三方应用具有“微信客服->管理账号、分配会话和收发消息”权限
代开发自建应用具有“微信客服->管理账号、分配会话和收发消息”权限

注: 从2023年12月1日0点起,不再支持通过系统应用secret调用接口,存量企业暂不受影响 查看详情

  • 只能通过API管理企业指定的客服账号。企业可在管理后台“微信客服-通过API管理微信客服账号”处设置对应的客服账号通过API来管理。
  • 操作的客服账号对应的接待人员应在应用的可见范围内

返回结果:

{ "errcode": 0, "errmsg": "ok", "msgid": "MSG_ID"}

参数说明:

参数类型说明
errcodeint32返回码
errmsgstring错误码描述
msgidstring消息ID

消息类型

文本消息

请求示例:

{ "code": "CODE", "msgid": "MSG_ID", "msgtype" : "text", "text" : { "content" : "欢迎咨询" }}

参数说明:

参数是否必须类型说明
msgtypestring消息类型,此时固定为:text
textobj文本消息
text.contentstring消息内容,最长不超过2048个字节

菜单消息

请求示例:

{ "code": "CODE" "msgid": "MSGID", "msgtype": "msgmenu", "msgmenu": { "head_content": "您对本次服务是否满意呢? ", "list": [ { "type": "click", "click": { "id": "101", "content": "满意" } }, { "type": "click", "click": { "id": "102", "content": "不满意" } }, { "type": "view", "view": { "url": "https://work.weixin.qq.com", "content": "点击跳转到自助查询页面" } }, { "type": "miniprogram", "miniprogram": { "appid": "wx123123123123123", "pagepath": "pages/index?userid=zhangsan&amp;orderid=123123123", "content": "点击打开小程序查询更多" } }, { "type": "text", "text": { "content": "纯文本,支持\n换行", "no_newline": 0 } } ], "tail_content": "欢迎再次光临" }}

参数说明:

参数必须类型说明
msgtypestring消息类型,此时固定为:msgmenu
msgmenuobj菜单消息
msgmenu.head_contentstring起始文本不多于1024字节
msgmenu.listobj[]菜单项配置,不超过10个
msgmenu.list.typestring菜单类型。click-回复菜单 view-超链接菜单 miniprogram-小程序菜单 text-文本
msgmenu.list.clickobjtype为click的菜单项
msgmenu.list.click.idstring菜单ID。不少于1字节不多于128字节
msgmenu.list.click.contentstring菜单显示内容不少于1字节不多于128字节
msgmenu.list.viewobjtype为view的菜单项
msgmenu.list.view.urlstring点击后跳转的链接。不少于1字节不多于2048字节
msgmenu.list.view.contentstring菜单显示内容。不少于1字节不多于1024字节
msgmenu.list.miniprogramobjtype为miniprogram的菜单项
msgmenu.list.miniprogram.appidstring小程序appid。不少于1字节不多于32字节
msgmenu.list.miniprogram.pagepathstring点击后进入的小程序页面。不少于1字节不多于1024字节
msgmenu.list.miniprogram.contentstring菜单显示内容。不多于1024字节
msgmenu.list.textobjtype为text的菜单项
msgmenu.list.text.contentstring文本内容,支持\n(\和n两个字符)换行。不少于1字节不多于256字节
msgmenu.list.text.no_newlinebool内容后面是否不换行,0-换行 1-不换行,默认为0
msgmenu.tail_contentstring结束文本不多于1024字节

Apache-2.0 Licensed