💎一站式轻松地调用各大LLM模型接口,支持GPT4、智谱、星火、月之暗面及文生图 广告
# 接收消息和事件 [TOC] ## 概述 微信客服服务器会将事件的回调数据包发送到企业指定URL;企业收到请求后,再通过获取消息接口主动获取具体的消息内容。 整体交互示意图如下图所示。 ![](https://wework.qpic.cn/wwpic/638423_eiQfriAYRAyYzRY_1625631158/0) ## 回调事件 接收并解析事件的方法见:[回调配置](https://www.kancloud.cn/dabashan/qiwei/2376066#_55)。 **示例** ~~~ <xml> <ToUserName><![CDATA[ww12345678910]]></ToUserName> <CreateTime>1348831860</CreateTime> <MsgType><![CDATA[event]]></MsgType> <Event><![CDATA[kf_msg_or_event]]></Event> <Token><![CDATA[ENCApHxnGDNAVNY4AaSJKj4Tb5mwsEMzxhFmHVGcra996NR]]></Token></xml> ~~~ **说明** | 参数 | 说明 | | --- | --- | | ToUserName | 微信客服组件ID | | CreateTime | 消息创建时间,unix时间戳 | | MsgType | 消息的类型,此时固定为 event | | Event | 事件的类型,此时固定为 kf\_msg\_or\_event | | Token | 调用拉取消息接口时,需要传此token,用于校验请求的合法性 | ## 获取消息 客户主动发给微信客服的消息、[发送消息](https://www.kancloud.cn/dabashan/qiwei/2376075)接口发送失败事件(如被用户拒收)、客户点击菜单消息的回复消息,可以通过该接口获取具体的消息内容和事件。**不支持获取通过接口发送的消息**。 **支持的消息类型:**文本、图片、语音、视频、文件、位置、事件。 ### 接口定义 **请求方式**: POST(**HTTPS**) **请求地址:**https://qyapi.weixin.qq.com/cgi-bin/kf/sync\_msg?access\_token=ACCESS\_TOKEN **请求示例** ~~~ { "cursor": "4gw7MepFLfgF2VC5npN", "token": "ENCApHxnGDNAVNY4AaSJKj4Tb5mwsEMzxhFmHVGcra996NR", "limit": 1000} ~~~ **参数说明**: | 参数 | 必须 | 类型 | 说明 | | --- | --- | --- | --- | | access\_token | 是 | string | 调用接口凭证 | | cursor | 否 | string | 上一次调用时返回的next\_cursor,第一次拉取可以不填。 不多于64字节 | | token | 否 | string | 回调事件返回的`token`字段,10分钟内有效;可不填,如果不填接口有严格的频率限制。 不多于128字节 | | limit | 否 | uint32 | 期望请求的数据量,默认值和最大值都为1000。 **注意:可能会出现返回条数少于limit的情况,需结合返回的`has_more`字段判断是否继续请求。** | **权限说明**: 仅允许微信客服组件的Secret所获取的access\_token调用。 **返回结果**: ~~~ { "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, "msgtype": "MSG_TYPE" } ]} ~~~ **参数说明**: | 参数 | 类型 | 说明 | | --- | --- | --- | | errcode | int32 | 返回码 | | errmsg | string | 错误码描述 | | next\_cursor | string | 下次调用带上该值则从该key值往后拉,用于增量拉取 | | has\_more | uint32 | 是否还有更多数据。0-否;1-是。 **不能通过判断msg\_list是否空来停止拉取**,可能会出现has\_more为1,而msg\_list为空的情况 | | msg\_list | obj\[\] | 消息列表 | | msg\_list.msgid | string | 消息ID | | msg\_list.open\_kfid | string | 客服帐号ID | | msg\_list.external\_userid | string | 客户UserID | | msg\_list.send\_time | uint64 | 消息发送时间 | | msg\_list.origin | uint32 | 消息来源。3-客户回复的消息 4-系统推送的消息 | | msg\_list.msgtype | string | 对不同的msgtype,有相应的结构描述,下面进一步说明 | ### 消息类型 #### 文本消息 **返回示例:** ~~~ { "msgtype" : "text", "text" : { "content" : "hello world", "menu_id" : "MENU_ID" }} ~~~ **参数说明:** | 参数 | 类型 | 说明 | | --- | --- | --- | | msgtype | string | 消息类型,此时固定为:text | | text | obj | 文本消息 | | text.content | string | 文本内容 | | text.menu\_id | string | 客户点击[菜单消息](https://www.kancloud.cn/dabashan/qiwei/2376075#_193),触发的回复消息中附带的菜单ID | #### 图片消息 **返回示例:** ~~~ { "msgtype" : "image", "image" : { "media_id" : "2iSLeVyqzk4eX0IB5kTi9Ljfa2rt9dwfq5WKRQ4Nvvgw" }} ~~~ **参数说明:** | 参数 | 类型 | 说明 | | --- | --- | --- | | msgtype | string | 消息类型,此时固定为:image | | image | obj | 图片消息 | | image.media\_id | string | 图片文件id | #### 语音消息 **返回示例:** ~~~ { "msgtype" : "voice", "voice" : { "media_id" : "2iSLeVyqzk4eX0IB5kTi9Ljfa2rt9dwfq5WKRQ4Nvvgw" }} ~~~ **参数说明:** | 参数 | 类型 | 说明 | | --- | --- | --- | | msgtype | string | 消息类型,此时固定为:voice | | voice | obj | 语音消息 | | voice.media\_id | string | 语音文件ID | #### 视频消息 **返回示例:** ~~~ { "msgtype" : "video", "video" : { "media_id" : "2iSLeVyqzk4eX0IB5kTi9Ljfa2rt9dwfq5WKRQ4Nvvgw" }} ~~~ **参数说明:** | 参数 | 类型 | 说明 | | --- | --- | --- | | msgtype | string | 消息类型,此时固定为:video | | video | obj | 视频消息 | | video.media\_id | string | 文件id | #### 文件消息 **返回示例:** ~~~ { "msgtype" : "file", "file" : { "media_id" : "2iSLeVyqzk4eX0IB5kTi9Ljfa2rt9dwfq5WKRQ4Nvvgw" }} ~~~ **参数说明:** | 参数 | 类型 | 说明 | | --- | --- | --- | | msgtype | string | 消息类型,此时固定为:file | | file | obj | 文件消息 | | file.media\_id | string | 文件id | #### 位置消息 **返回示例:** ~~~ { "msgtype" : "location", "location" : { "latitude": 23.106021881103501, "longitude": 113.320503234863, "name": "广州国际媒体港(广州市海珠区)", "address": "广东省广州市海珠区滨江东路" }} ~~~ **参数说明:** | 参数 | 类型 | 说明 | | --- | --- | --- | | msgtype | string | 消息类型,此时固定为:location | | location | obj | 地理位置消息 | | location.latitude | float | 纬度 | | location.longitude | float | 经度 | | location.name | string | 位置名 | | location.address | string | 地址详情说明 | #### 事件消息 ##### 用户进入会话事件 **返回示例:** ~~~ { "msgtype" : "event", "event" : { "event_type": "enter_session", "open_kfid": "wkAJ2GCAAASSm4_FhToWMFea0xAFfd3Q", "external_userid": "wmAJ2GCAAAme1XQRC-NI-q0_ZM9ukoAw", "scene": "123" }} ~~~ **参数说明:** | 参数 | 类型 | 说明 | | --- | --- | --- | | msgtype | string | 消息类型,此时固定为:event | | event | obj | 事件消息 | | event.event\_type | string | 事件类型。此处固定为:enter\_session | | event.open\_kfid | string | 客服账号ID | | event.external\_userid | string | 客户UserID | | event.scene | string | 进入会话的场景值,[获取客服帐号链接](https://www.kancloud.cn/dabashan/qiwei/2376072)开发者自定义的场景值 | ##### 消息发送失败事件 **返回示例:** ~~~ { "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 }} ~~~ **参数说明:** | 参数 | 类型 | 说明 | | --- | --- | --- | | msgtype | string | 消息类型,此时固定为:event | | event | obj | 事件消息 | | event.event\_type | string | 事件类型。此处固定为:msg\_send\_fail | | event.open\_kfid | string | 客服帐号ID | | event.external\_userid | string | 客户UserID | | event.fail\_msgid | string | 发送失败的消息msgid | | event.fail\_type | uint32 | 失败类型。0-未知原因 10-用户拒收 |