获取会话内容

[TOC]

整体流程

业务方通过企业微信提供的sdk,可以进行会话记录数据的获取、媒体数据的获取。

linux环境 SDK:
下载 SDK v1.2 [更新时间:2020-11-16 更新特性:更新sdk示例项目]
下载 SDK v1.1 [更新时间:2020-04-01 更新特性:支持并发调用]
下载 SDK v1.0
windows环境 SDK:
下载 SDK v1.1[更新时间:2020-12-23 更新特性:支持并发调用、更新sdk示例项目]
下载 SDK v1.0

以下是交互时序图,本文重点介绍sdk的内容。sdk包括如下接口:

  1. 初始化接口;
  2. 提供分页批量拉取会话记录接口的sdk接口;
  3. 对会话数据进行解密接口;
  4. 对图片、文件等媒体数据,拉取媒体数据内容的sdk接口;
  5. 工具函数,进行数据的析构等处理.

初始化接口

第一步:

/*获取sdk对象,首次使用初始化*/
WeWorkFinanceSdk_t* NewSdk();

第二步:

/*
     * 初始化函数
     * Return值=0表示该API调用成功
     * 
     *
     * @param [in]  sdk            NewSdk返回的sdk指针
     * @param [in]  corpid         调用企业的企业id,例如:wwd08c8exxxx5ab44d,可以在企业微信管理端--我的企业--企业信息查看
     * @param [in]  secret         聊天内容存档的Secret,可以在企业微信管理端--管理工具--聊天内容存档查看
     *                        
     *
     * @return 返回是否初始化成功
     *      0   - 成功
     *      !=0 - 失败
*/
int Init(WeWorkFinanceSdk_t* sdk, const char* corpid, const char* secret);

获取会话记录数据

通过本sdk接口来获取公司一段时间内的会话记录。一次拉取调用上限1000条会话记录,可以通过分页拉取的方式来依次拉取。调用频率不可超过600次/分钟。

 /**
     * 拉取聊天记录函数
     * Return值=0表示该API调用成功
     * 
     *
     * @param [in]  sdk                NewSdk返回的sdk指针
     * @param [in]  seq                从指定的seq开始拉取消息,注意的是返回的消息从seq+1开始返回,seq为之前接口返回的最大seq值。首次使用请使用seq:0
     * @param [in]  limit            一次拉取的消息条数,最大值1000条,超过1000条会返回错误
     * @param [in]  proxy            使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081
     * @param [in]  passwd            代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
     * @param [in]  timeout            超时时间,单位秒
     * @param [out] chatDatas        返回本次拉取消息的数据,slice结构体.内容包括errcode/errmsg,以及每条消息内容。示例如下:

     {"errcode":0,"errmsg":"ok","chatdata":[{"seq":196,"msgid":"CAQQ2fbb4QUY0On2rYSAgAMgip/yzgs=","publickey_ver":3,"encrypt_random_key":"ftJ+uz3n/z1DsxlkwxNgE+mL38H42/KCvN8T60gbbtPD+Rta1hKTuQPzUzO6Hzne97MgKs7FfdDxDck/v8cDT6gUVjA2tZ/M7euSD0L66opJ/IUeBtpAtvgVSD5qhlaQjvfKJc/zPMGNK2xCLFYqwmQBZXbNT7uA69Fflm512nZKW/piK2RKdYJhRyvQnA1ISxK097sp9WlEgDg250fM5tgwMjujdzr7ehK6gtVBUFldNSJS7ndtIf6aSBfaLktZgwHZ57ONewWq8GJe7WwQf1hwcDbCh7YMG8nsweEwhDfUz+u8rz9an+0lgrYMZFRHnmzjgmLwrR7B/32Qxqd79A==","encrypt_chat_msg":"898WSfGMnIeytTsea7Rc0WsOocs0bIAerF6de0v2cFwqo9uOxrW9wYe5rCjCHHH5bDrNvLxBE/xOoFfcwOTYX0HQxTJaH0ES9OHDZ61p8gcbfGdJKnq2UU4tAEgGb8H+Q9n8syRXIjaI3KuVCqGIi4QGHFmxWenPFfjF/vRuPd0EpzUNwmqfUxLBWLpGhv+dLnqiEOBW41Zdc0OO0St6E+JeIeHlRZAR+E13Isv9eS09xNbF0qQXWIyNUi+ucLr5VuZnPGXBrSfvwX8f0QebTwpy1tT2zvQiMM2MBugKH6NuMzzuvEsXeD+6+3VRqL"}]}

     *
     * @return 返回是否调用成功
     *      0   - 成功
     *      !=0 - 失败    
     */        
    int GetChatData(WeWorkFinanceSdk_t* sdk, unsigned long long seq, unsigned int limit, const char *proxy,const char* passwd,int timeout,Slice_t* chatDatas);

请求参数说明:

参数 是否必须 说明
sdk 初始化的sdk对象
seq 本次请求获取消息记录开始的seq值。首次访问填写0,非首次使用上次企业微信返回的最大seq。允许从任意seq重入拉取。Uint64类型,范围0-pow(2,64)-1
limit 一次调用限制的limit值,不能超过1000.uint32类型
proxy 使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081.如不使用代理可以设置为空. 支持sock5跟http代理
paswd 代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
timeout 超时时长,单位 秒
chatDatas 返回本次拉取消息的数据.密文消息

注:获取会话记录内容不能超过3天,如果企业需要全量数据,则企业需要定期拉取聊天消息。返回的ChatDatas内容为json格式。

ChatDatas详解:

{"errcode":0,"errmsg":"ok","chatdata":[{"seq":196,"msgid":"CAQQ2fbb4QUY0On2rYSAgAMgip/yzgs=","publickey_ver":3,"encrypt_random_key":"ftJ+uz3n/z1DsxlkwxNgE+mL38H42/KCvN8T60gbbtPD+Rta1hKTuQPzUzO6Hzne97MgKs7FfdDxDck/v8cDT6gUVjA2tZ/M7euSD0L66opJ/IUeBtpAtvgVSD5qhlaQjvfKJc/zPMGNK2xCLFYqwmQBZXbNT7uA69Fflm512nZKW/piK2RKdYJhRyvQnA1ISxK097sp9WlEgDg250fM5tgwMjujdzr7ehK6gtVBUFldNSJS7ndtIf6aSBfaLktZgwHZ57ONewWq8GJe7WwQf1hwcDbCh7YMG8nsweEwhDfUz+u8rz9an+0lgrYMZFRHnmzjgmLwrR7B/32Qxqd79A==","encrypt_chat_msg":"898WSfGMnIeytTsea7Rc0WsOocs0bIAerF6de0v2cFwqo9uOxrW9wYe5rCjCHHH5bDrNvLxBE/xOoFfcwOTYX0HQxTJaH0ES9OHDZ61p8gcbfGdJKnq2UU4tAEgGb8H+Q9n8syRXIjaI3KuVCqGIi4QGHFmxWenPFfjF/vRuPd0EpzUNwmqfUxLBWLpGhv+dLnqiEOBW41Zdc0OO0St6E+JeIeHlRZAR+E13Isv9eS09xNbF0qQXWIyNUi+ucLr5VuZnPGXBrSfvwX8f0QebTwpy1tT2zvQiMM2MBugKH6NuMzzuvEsXeD+6+3VRqL"}]}

返回参数说明:

参数 说明
errcode 0表示成功,错误返回非0错误码,需要参看errmsg。Uint32类型
errmsg 返回信息,如非空为错误原因。String类型
chatdata 聊天记录数据内容。数组类型。包括seq、msgid等内容
seq 消息的seq值,标识消息的序号。再次拉取需要带上上次回包中最大的seq。Uint64类型,范围0-pow(2,64)-1
msgid 消息id,消息的唯一标识,企业可以使用此字段进行消息去重。String类型。msgid以_external结尾的消息,表明该消息是一条外部消息。
publickey_ver 加密此条消息使用的公钥版本号。Uint32类型
encrypt_random_key 使用publickey_ver指定版本的公钥进行非对称加密后base64加密的内容,需要业务方先base64 decode处理后,再使用指定版本的私钥进行解密,得出内容。String类型
encrypt_chat_msg 消息密文。需要业务方使用将encrypt_random_key解密得到的内容,与encrypt_chat_msg,传入sdk接口DecryptData,得到消息明文。String类型

encrypt_random_key内容解密说明:
encrypt_random_key是使用企业在管理端填写的公钥(使用模值为2048bit的秘钥),采用RSA加密算法进行加密处理后base64 encode的内容,加密内容为企业微信产生。RSA使用PKCS1。
企业通过GetChatData获取到会话数据后:
a) 需首先对每条消息的encrypt_random_key内容进行base64 decode,得到字符串str1.
b) 使用publickey_ver指定版本的私钥,使用RSA PKCS1算法对str1进行解密,得到解密内容str2.
c) 得到str2与对应消息的encrypt_chat_msg,调用下方描述的DecryptData接口,即可获得消息明文。

SDK解密接口

/**
     * @brief 解析密文.企业微信自有解密内容
     * @param [in]  encrypt_key, getchatdata返回的encrypt_random_key,使用企业自持对应版本秘钥RSA解密后的内容
     * @param [in]  encrypt_msg, getchatdata返回的encrypt_chat_msg
     * @param [out] msg, 解密的消息明文
     * @return 返回是否调用成功
     *      0   - 成功
     *      !=0 - 失败
     */
int DecryptData(const char* encrypt_key, const char* encrypt_msg, Slice_t* msg);

请求参数说明:

参数 是否必须 说明
encrypt_key 企业私钥解密encrypt_random_key后的内容
encrypt_msg GetChatdata接口返回的加密消息encrypt_chat_msg
msg 消息明文,json格式

消息格式

本小节对content对应的消息格式进行说明。消息类型支持:文本、图片、语音、视频、位置等多种消息类型。

文本

{"msgid":"CAQQluDa4QUY0On2rYSAgAMgzPrShAE=","action":"send","from":"XuJinSheng","tolist":["icefog"],"roomid":"","msgtime":1547087894783,"msgtype":"text","text":{"content":"test"}}

参数说明:

参数 说明
msgid 消息id,消息的唯一标识,企业可以使用此字段进行消息去重。String类型
action 消息动作,目前有send(发送消息)/recall(撤回消息)/switch(切换企业日志)三种类型。String类型
from 消息发送方id。同一企业内容为userid,非相同企业为external_userid。消息如果是机器人发出,也为external_userid。String类型
tolist 消息接收方列表,可能是多个,同一个企业内容为userid,非相同企业为external_userid。数组,内容为string类型
roomid 群聊消息的群id。如果是单聊则为空。String类型
msgtime 消息发送时间戳,utc时间,ms单位。
msgtype 文本消息为:text。String类型
content 消息内容。String类型

注:
机器人与外部联系人的账号都是external_userid,其中机器人的external_userid是以”wb”开头,例如:”wbjc7bDwAAJVylUKpSA3Z5U11tDO4AAA”,外部联系人的external_userid以”wo”或”wm”开头。
如果是机器人发出的消息,可以通过openapi拉取机器人详情:如何获取机器人详情?
如果是外部联系人发出的消息,可以通过openapi拉取外部联系人详情:如何获取外部联系人详情?
如果是引用/回复消息,发消息的用户的语言设置是中文,消息内容前面会加上“这是一条引用/回复消息:”,如果发消息的用户的语言设置是英文,消息内容的前面会加上“This is a quote/reply:”。
如:

{"msgid":"CAQQluDa4QUY0On2rYSAgAMgzPrShAE=","action":"send","from":"XuJinSheng","tolist":["icefog"],"roomid":"","msgtime":1547087894783,"msgtype":"text","text":{"content":"这是一条引用/回复消息:\n"nick\n666"\n------\n@nick777"}}

图片

{"msgid":"CAQQvPnc4QUY0On2rYSAgAMgooLa0Q8=","action":"send","from":"XuJinSheng","tolist":["icefog"],"roomid":"","msgtime":0,"msgtype":"image","image":{"md5sum":"50de8e5ae8ffe4f1df7a93841f71993a","filesize":70961,"sdkfileid":"CtYBMzA2OTAyMDEwMjA0NjIzMDYwMDIwMTAwMDIwNGI3ZmU0MDZlMDIwMzBmNTliMTAyMDQ1YzliNTQ3NzAyMDQ1YzM3M2NiYzA0MjQ2NjM0MzgzNTM0NjEzNTY1MmQzNDYxMzQzODJkMzQzMTYxNjEyZDM5NjEzOTM2MmQ2MTM2NjQ2NDY0NjUzMDY2NjE2NjM1MzcwMjAxMDAwMjAzMDExNTQwMDQxMDUwZGU4ZTVhZThmZmU0ZjFkZjdhOTM4NDFmNzE5OTNhMDIwMTAyMDIwMTAwMDQwMBI4TkRkZk1UWTRPRGcxTVRBek1ETXlORFF6TWw4eE9UUTVOamN6TkRZMlh6RTFORGN4TWpNNU1ERT0aIGEwNGQwYWUyM2JlYzQ3NzQ5MjZhNWZjMjk0ZTEyNTkz"}}

参数说明:

参数 说明
msgtype 图片消息为:image。String类型
sdkfileid 媒体资源的id信息。String类型
md5sum 图片资源的md5值,供进行校验。String类型
filesize 图片资源的文件大小。Uint32类型

注:以下消息类型不再描述msgid、action、from、tolist、roomid、msgtime等通用字段,着重描述msgtype以及不同消息类型对应的json格式的消息内容。

撤回消息

{"msgid":"15775510700152506326_1603875615","action":"recall","from":"kenshin","tolist":["wmUu0zBgAALV7ZymkcMyxvbTe8YdWxxA"],"roomid":"","msgtime":1603875615723,"msgtype":"revoke","revoke":{"pre_msgid":"14822339130656386894_1603875600"}}
参数 说明
msgtype 撤回消息为:revoke。String类型
pre_msgid 标识撤回的原消息的msgid。String类型

示例图:

同意会话聊天内容

{"msgid":"17972321270926900092_1603875944","action":"send","from":"wmErxtDgAA9AW32YyyuYRimKr7D1KWlw","tolist":["kenshin"],"roomid":"","msgtime":1603875944122,"msgtype":"disagree","disagree":{"userid":"wmErxtDgAA9AW32YyyuYRimKr7D1KWlw","disagree_time":1603875944122}}
{"msgid":"8891446340739254950_1603875826","action":"send","from":"wmGAgeDQAAvQeaTqWwkMTxGMkvI7OOuQ","tolist":["kenshin"],"roomid":"","msgtime":1603875826656,"msgtype":"agree","agree":{"userid":"wmGAgeDQAAvQeaTqWwkMTxGMkvI7OOuQ","agree_time":1603875826656}}
参数 说明
msgtype 同意消息为:agree,不同意消息为:disagree。String类型
userid 同意/不同意协议者的userid,外部企业默认为external_userid。String类型
agree_time 同意/不同意协议的时间,utc时间,ms单位。

示例图:

语音

{"msgid":"10958372969718811103_1603875609","action":"send","from":"wmGAgeDQAAdBjb8CK4ieMPRm7Cqm-9VA","tolist":["kenshin"],"roomid":"","msgtime":1603875609704,"msgtype":"voice","voice":{"md5sum":"9db09c7fa627c9e53f17736c786a74d5","voice_size":6810,"play_length":10,"sdkfileid":"kcyZjZqOXhETGYxajB2Zkp5Rk8zYzh4RVF3ZzZGdXlXNWRjMUoxVGZxbzFTTDJnQ2YxL0NraVcxUUJNK3VUamhEVGxtNklCbjZmMEEwSGRwN0h2cU1GQTU1MDRSMWdTSmN3b25ZMkFOeG5hMS90Y3hTQ0VXRlVxYkR0Ymt5c3JmV2VVcGt6UlNXR1ZuTFRWVGtudXVldDRjQ3hscDBrMmNhMFFXVnAwT3Y5NGVqVGpOcWNQV2wrbUJwV01TRm9xWmNDRVVrcFY5Nk9OUS9GbXIvSmZvOVVZZjYxUXBkWnMvUENkVFQxTHc2N0drb2pJT0FLZnhVekRKZ1FSNDU3ZnZtdmYvTzZDOG9DRXl2SUNIOHc9PRI0TkRkZk56ZzRNVE13TVRjMk5qQTRNak0yTmw4ek5qRTVOalExTjE4eE5qQXpPRGMxTmpBNRogNzM3MDY2NmM2YTc5Njg3NDdhNzU3NDY0NzY3NTY4NjY="}}
参数 说明
msgtype 语音消息为:voice。String类型
voice_size 语音消息大小。Uint32类型
play_length 播放长度。Uint32类型
sdkfileid 媒体资源的id信息。String类型
md5sum 资源的md5值,供进行校验。String类型

视频

{"msgid":"17955920891003447432_1603875627","action":"send","from":"kenshin","tolist":["wmGAgeDQAAHuRJbt4ZQI_1cqoQcf41WQ"],"roomid":"","msgtime":1603875626823,"msgtype":"video","video":{"md5sum":"d06fc80c01d6fbffcca3b229ba41eac6","filesize":15169724,"play_length":108,"sdkfileid":"MzAzMjYxMzAzNTYzMzgzMjMyMzQwMjAxMDAwMjA0MDBlNzc4YzAwNDEwZDA2ZmM4MGMwMWQ2ZmJmZmNjYTNiMjI5YmE0MWVhYzYwMjAxMDQwMjAxMDAwNDAwEjhORGRmTVRZNE9EZzFNREEyTlRjM056QXpORjgxTWpZeE9USTBOek5mTVRZd016ZzNOVFl5Tnc9PRogNTIzNGQ1NTQ5N2RhNDM1ZDhlZTU5ODk4NDQ4NzRhNDk="}}
参数 说明
msgtype 视频消息为:video。String类型
sdkfileid 媒体资源的id信息。String类型
md5sum 资源的md5值,供进行校验。String类型
filesize 资源的文件大小。Uint32类型
play_length 视频播放长度。Uint32类型

名片

{"msgid":"13714216591700685558_1603875680","action":"send","from":"kenshin","tolist":["wmGAgeDQAAy2Dtr0F8aK4dTuatfm-5Rg"],"roomid":"","msgtime":1603875680377,"msgtype":"card","card":{"corpname":"微信联系人","userid":"wmGAgeDQAAGjFmfnP7A3j2JxQDdLNhSw"}}
参数 说明
msgtype 名片消息为:card。String类型
corpname 名片所有者所在的公司名称。String类型
userid 名片所有者的id,同一公司是userid,不同公司是external_userid。String类型

示例图:

位置

{"msgid":"2641513858500683770_1603876152","action":"send","from":"icefog","tolist":["wmN6etBgAA0sbJ3invMvRxPQDFoq9uWA"],"roomid":"","msgtime":1603876152141,"msgtype":"location","location":{"longitude":116.586285899,"latitude":39.911125799,"address":"北京市xxx区xxx路xxx大厦x座","title":"xxx管理中心","zoom":15}}
参数 说明
msgtype 位置消息为:location。String类型
longitude 经度,单位double
latitude 纬度,单位double
address 地址信息。String类型
title 位置信息的title。String类型
zoom 缩放比例。Uint32类型

示例图:

表情

{"msgid":"6623217619416669654_1603875612","action":"send","from":"icef","tolist":["wmErxtDgAAhteCglUZH2kUt3rq431qmg"],"roomid":"","msgtime":1603875611148,"msgtype":"emotion","emotion":{"type":1,"width":290,"height":290,"imagesize":962604,"md5sum":"94c2b0bba52cc456cb8221b248096612","sdkfileid":"4eE1ESTVNalE1TnprMFh6RTJNRE00TnpVMk1UST0aIDc0NzI2NjY1NzE3NTc0Nzg2ZDZlNzg2YTY5NjY2MTYx"}}
参数 说明
msgtype 表情消息为:emotion。String类型
type 表情类型,png或者gif.1表示gif 2表示png。Uint32类型
width 表情图片宽度。Uint32类型
height 表情图片高度。Uint32类型
sdkfileid 媒体资源的id信息。String类型
md5sum 资源的md5值,供进行校验。String类型
imagesize 资源的文件大小。Uint32类型

示例图:

文件

{"msgid":"18039699423706571225_1603875608","action":"send","from":"kens","tolist":["wmErxtDgAArDlFIhf76O6w4GxU81al8w"],"roomid":"","msgtime":1603875608214,"msgtype":"file","file":{"md5sum":"18e93fc2ea884df23b3d2d3b8667b9f0","filename":"资料.docx","fileext":"docx","filesize":18181,"sdkfileid":"E4ODRkZjIzYjNkMmQzYjg2NjdiOWYwMDIwMTA1MDIwMTAwMDQwMBI4TkRkZk1UWTRPRGcxTURrek9UZzBPVEF6TTE4eE1EUXpOVGcxTlRVNVh6RTJNRE00TnpVMk1EZz0aIDMwMzkzMzY0NjEzNjM3NjY2NDY1NjMzNjYxMzIzNzYx"}}
参数 说明
msgtype 文件消息为:file。String类型
sdkfileid 媒体资源的id信息。String类型
md5sum 资源的md5值,供进行校验。String类型
filename 文件名称。String类型
fileext 文件类型后缀。String类型
filesize 文件大小。Uint32类型

链接

{"msgid":"11788441727514772650_1603875624","action":"send","from":"kenshin","tolist":["0000726"],"roomid":"","msgtime":1603875624476,"msgtype":"link","link":{"title":"邀请你加入群聊","description":"技术支持群,进入可查看详情","link_url":"https://work.weixin.qq.com/wework_admin/external_room/join/exceed?vcode=xxx","image_url":"https://wework.qpic.cn/wwpic/xxx/0"}}
参数 说明
msgtype 链接消息为:link。String类型
title 消息标题。String类型
description 消息描述。String类型
link_url 链接url地址。String类型
image_url 链接图片url。String类型

小程序消息

{"msgid":"11930598857592605935_1603875608","action":"send","from":"kens","tolist":["wmGAgeDQAAsgQetTQGqRbMxrkodpM3fA"],"roomid":"","msgtime":1603875608691,"msgtype":"weapp","weapp":{"title":"开始聊天前请仔细阅读服务须知事项","description":"客户需同意存档聊天记录","username":"xxx@app","displayname":"服务须知"}}
参数 说明
msgtype 消息为:weapp。String类型
title 消息标题。String类型
description 消息描述。String类型
username 用户名称。String类型
displayname 小程序名称。String类型

示例图:

会话记录消息

{"msgid":"11354299838102555191_1603875658","action":"send","from":"ken","tolist":["icef"],"roomid":"","msgtime":1603875657905,"msgtype":"chatrecord","chatrecord":{"title":"群聊","item":[{"type":"ChatRecordText","msgtime":1603875610,"content":"{\"content\":\"test\"}","from_chatroom":false},{"type":"ChatRecordText","msgtime":1603875620,"content":"{\"content\":\"test2\"}","from_chatroom":false}]}}
参数 说明
msgtype 消息为:chatrecord。String类型
title 聊天记录标题。String类型
item 消息记录内的消息内容,批量数据

示例图:

会话记录消息item

"item":[{"type":"ChatRecordText","msgtime":1603875610,"content":"{\"content\":\"test\"}","from_chatroom":false},{"type":"ChatRecordText","msgtime":1603875620,"content":"{\"content\":\"test2\"}","from_chatroom":false}]
参数 说明
type 每条聊天记录的具体消息类型:ChatRecordText/ ChatRecordFile/ ChatRecordImage/ ChatRecordVideo/ ChatRecordLink/ ChatRecordLocation/ ChatRecordMixed ….
msgtime 消息时间,utc时间,单位秒。
content 消息内容。Json串,内容为对应类型的json。String类型
from_chatroom 是否来自群会话。Bool类型

待办消息

参数 说明
msgtype todo。String类型
title 待办的来源文本。String类型
content 待办的具体内容。String类型

投票消息

参数 说明
msgtype vote。String类型
votetitle 投票主题。String类型
voteitem 投票选项,可能多个内容。String数组
votetype 投票类型.101发起投票、102参与投票。Uint32类型
voteid 投票id,方便将参与投票消息与发起投票消息进行前后对照。String类型

填表消息

{"msgid":"2500536226619379797_1576034482","action":"send","from":"nick","tolist":["XuJinSheng","15108264797"],"roomid":"wrjc7bDwYAOAhf9quEwRRxyyoMm0QAAA","msgtime":1576034482344,"msgtype":"collect","collect":{"room_name":"这是一个群","creator":"nick","create_time":"2019-12-11 11:21:22","title":"这是填表title","details":[{"id":1,"ques":"表项1,文本","type":"Text"},{"id":2,"ques":"表项2,数字","type":"Number"},{"id":3,"ques":"表项3,日期","type":"Date"},{"id":4,"ques":"表项4,时间","type":"Time"}]}}
参数 说明
msgtype collect。String类型
room_name 填表消息所在的群名称。String类型
creator 创建者在群中的名字。String类型
create_time 创建的时间。String类型
title 表名。String类型
details 表内容。json数组类型
id 表项id。Uint64类型
ques 表项名称。String类型
type 表项类型,有Text(文本),Number(数字),Date(日期),Time(时间)。String类型

红包消息

{"msgid":"333590477316965370_1603877439","action":"send","from":"kens","tolist":["1000000444696"],"roomid":"","msgtime":1603877439038,"msgtype":"redpacket","redpacket":{"type":1,"wish":"恭喜发财,大吉大利","totalcnt":1,"totalamount":3000}}
参数 说明
msgtype redpacket。String类型
type 红包消息类型。1 普通红包、2 拼手气群红包、3 激励群红包。Uint32类型
wish 红包祝福语。String类型
totalcnt 红包总个数。Uint32类型
totalamount 红包总金额。Uint32类型,单位为分。

会议邀请消息

{"msgid":"5935786683775673543_1603877328","action":"send","from":"ken","tolist":["icef","test"],"roomid":"wr2vOpDgAAN4zVWKbS","msgtime":1603877328914,"msgtype":"meeting","meeting":{"topic":"夕会","starttime":1603877400,"endtime":1603881000,"address":"","remarks":"","meetingtype":102,"meetingid":1210342560,"status":1}}
参数 说明
msgtype meeting。String类型
topic 会议主题。String类型
starttime 会议开始时间。Utc时间
endtime 会议结束时间。Utc时间
address 会议地址。String类型
remarks 会议备注。String类型
meetingtype 会议消息类型。101发起会议邀请消息、102处理会议邀请消息。Uint32类型
meetingid 会议id。方便将发起、处理消息进行对照。uint64类型
status 会议邀请处理状态。1 参加会议、2 拒绝会议、3 待定、4 未被邀请、5 会议已取消、6 会议已过期、7 不在房间内。Uint32类型。只有meetingtype为102的时候此字段才有内容。

切换企业日志

{"msgid":"125289002219525886280","action":"switch","time":1554119421840,"user":"XuJinSheng"}

参数说明:

参数 说明
msgid 消息id,消息的唯一标识,企业可以使用此字段进行消息去重。String类型
action 消息动作,切换企业为switch。String类型
time 消息发送时间戳,utc时间,ms单位。
user 具体为切换企业的成员的userid。String类型

注:切换企业日志不是真正的消息,与上述消息结构不完全相同。

在线文档消息

{"msgid":"9732089160923053207_1603877765","action":"send","from":"ken","tolist":["icef","test"],"roomid":"wrJawBCQAAStr3jxVxEH","msgtime":1603877765291,"msgtype":"docmsg","doc":{"title":"测试&演示客户","doc_creator":"test","link_url":"https://doc.weixin.qq.com/txdoc/excel?docid=xxx"}}
参数 说明
msgtype docmsg。String类型, 标识在线文档消息类型
title 在线文档名称
link_url 在线文档链接
doc_creator 在线文档创建者。本企业成员创建为userid;外部企业成员创建为external_userid

示例图:

MarkDown格式消息

{"msgid":"7546287934688259248_1603875715","action":"send","from":"ken","tolist":["icef","test"],"roomid":"wr0SfLCgAAgCaCPeM33UNe","msgtime":1603875715782,"msgtype":"markdown","info":{"content":"请前往系统查看,谢谢。"}}
参数 说明
msgtype markdown。String类型, 标识MarkDown消息类型
info markdown消息内容,目前为机器人发出的消息

图文消息

{"msgid":"118732825779547782215","action":"send","from":"kens","tolist":["icef","test"],"roomid":"wrErxtDgAA0jgXE5","msgtime":1603876045165,"msgtype":"news","info":{"item":[{"title":"service ","description":"test","url":"http://xxx","picurl":"https://www.qq.com/xxx.jpg"}]}}
参数 说明
msgtype news。String类型, 标识图文消息类型
info 图文消息的内容
item 图文消息数组,每个item结构包含title、description、url、picurl等结构
title 图文消息标题。String类型
description 图文消息描述。String类型
url 图文消息点击跳转地址。String类型
picurl 图文消息配图的url。String类型

日程消息

{"msgid":"2345881211604379705_1603877680","action":"send","from":"ken","tolist":["icef","test"],"roomid":"wr2LO0CAAAFrTZCGWWAxBA","msgtime":1603877680795,"msgtype":"calendar","calendar":{"title":"xxx业绩复盘会","creatorname":"test","attendeename":["aaa","bbb"],"starttime":1603882800,"endtime":1603886400,"place":"","remarks":""}}
参数 说明
msgtype calendar。String类型, 标识日程消息类型
title 日程主题。String类型
creatorname 日程组织者。String类型
attendeename 日程参与人。数组,内容为String类型
starttime 日程开始时间。Utc时间,单位秒
endtime 日程结束时间。Utc时间,单位秒
place 日程地点。String类型
remarks 日程备注。String类型

示例图:

混合消息

{"msgid":"DAQQluDa4QUY0On4kYSABAMgzPrShAE=","action":"send","from":"HeMiao","tolist":["HeChangTian","LiuZeYu"],"roomid":"wr_tZ2BwAAUwHpYMwy9cIWqnlU3Hzqfg","msgtime":1577414359072,"msgtype":"mixed","mixed":{"item":[{"type":"text","content":"{\"content\":\"你好[微笑]\\n\"}"},{"type":"image","content":"{\"md5sum\":\"368b6c18c82e6441bfd89b343e9d2429\",\"filesize\":13177,\"sdkfileid\":\"CtYBMzA2OTAyMDEwMjA0NjIzMDYwMDIwMTAwMDWwNDVmYWY4Y2Q3MDIwMzBmNTliMTAyMDQwYzljNTQ3NzAyMDQ1ZTA1NmFlMjA0MjQ2NjM0NjIzNjY2MzYzNTMyMmQzNzYxMzQ2NDJkMzQ2MjYxNjQyZDM4MzMzMzM4MmQ3MTYyMzczMTM4NjM2NDYxMzczMjY2MzkwMjAxMDAwMjAzMDIwMDEwMDQxMDM2OGI2YzE4YzgyZTY0NDFiZmQ4OWIyNDNlOWQyNDI4MDIwMTAyMDIwMTAwMDQwMBI4TkRkZk2UWTRPRGcxTVRneE5URTFNRGc1TVY4eE1UTTFOak0yTURVeFh6RTFOemMwTVRNek5EYz0aIDQzMTY5NDFlM2MxZDRmZjhhMjEwY2M0NDQzZGUXOTEy\"}"}]}}
参数 说明
msgid 消息id,消息的唯一标识,企业可以使用此字段进行消息去重。String类型
action 消息动作,目前有send(发送消息)/recall(撤回消息)/switch(切换企业日志)三种类型。String类型
from 消息发送方id。同一企业内容为userid,非相同企业为external_userid。消息如果是机器人发出,也为external_userid。String类型
tolist 消息接收方列表,可能是多个,同一个企业内容为userid,非相同企业为external_userid。数组,内容为string类型
roomid 群聊消息的群id。如果是单聊则为空。String类型
msgtime 消息发送时间戳,utc时间,ms单位。
msgtype mixed。String类型, 标识混合消息类型
mixed 消息内容。可包含图片、文字、表情等多种消息。Object类型

注:mixed内包含一个item数组,其中每个元素由type与content组成,type和content均为String类型。JSON解析content后即可获取对应type类型的消息内容。
示例图:
混合消息示例图

音频存档消息

{"msgid":"17952229780246929345_1594197637","action":"send","from":"wo137MCgAAYW6pIiKKrDe5SlzEhSgwbA","tolist":["wo137MCgAAYW6pIiKKrDe5SlzEhSgwbA"],"msgtime":1594197581203,"msgtype":"meeting_voice_call","voiceid":"grb8a4c48a3c094a70982c518d55e40557","meeting_voice_call":{"endtime":1594197635,"sdkfileid":"CpsBKjAqd0xhb2JWRUJldGtwcE5DVTB6UjRUalN6c09vTjVyRnF4YVJ5M24rZC9YcHF3cHRPVzRwUUlaMy9iTytFcnc0SlBkZDU1YjRNb0MzbTZtRnViOXV5WjUwZUIwKzhjbU9uRUlxZ3pyK2VXSVhUWVN2ejAyWFJaTldGSkRJVFl0aUhkcVdjbDJ1L2RPbjJsRlBOamJaVDNnPT0SOE5EZGZNVFk0T0RnMU16YzVNVGt5T1RJMk9GOHhNalk0TXpBeE9EZzJYekUxT1RReE9UYzJNemM9GiA3YTYyNzA3NTY4Nzc2MTY3NzQ2MTY0NzA2ZTc4NjQ2OQ==","demofiledata":[{"filename":"65eb1cdd3e7a3c1740ecd74220b6c627.docx","demooperator":"wo137MCgAAYW6pIiKKrDe5SlzEhSgwbA","starttime":1594197599,"endtime":1594197609}],"sharescreendata":[{"share":"wo137MCgAAYW6pIiKKrDe5SlzEhSgwbA","starttime":1594197624,"endtime":1594197624}]}}
参数 说明
msgid 消息id,消息的唯一标识,企业可以使用此字段进行消息去重。String类型
action 消息动作,目前有send(发送消息)/recall(撤回消息)/switch(切换企业日志)三种类型。String类型
from 消息发送方id。同一企业内容为userid,非相同企业为external_userid。消息如果是机器人发出,也为external_userid。String类型
tolist 消息接收方列表,可能是多个,同一个企业内容为userid,非相同企业为external_userid。数组,内容为string类型
msgtime 消息发送时间戳,utc时间,单位毫秒。
msgtype meeting_voice_call。String类型, 标识音频存档消息类型
voiceid String类型, 音频id
meeting_voice_call 音频消息内容。包括结束时间、fileid,可能包括多个demofiledata、sharescreendata消息,demofiledata表示文档共享信息,sharescreendata表示屏幕共享信息。Object类型
endtime 音频结束时间。uint32类型
sdkfileid sdkfileid。音频媒体下载的id。String类型
demofiledata 文档分享对象,Object类型
filename 文档共享名称。String类型
demooperator 文档共享操作用户的id。String类型
starttime 文档共享开始时间。Uint32类型
endtime 文档共享结束时间。Uint32类型
sharescreendata 屏幕共享对象,Object类型
share 屏幕共享用户的id。String类型
starttime 屏幕共享开始时间。Uint32类型
endtime 屏幕共享结束时间。Uint32类型

注:如果音频过程中包括文档演示或屏幕共享,meeting_voice_call内会包含demofiledata数组跟sharescreendata数组,对应音频过程中的多次文档演示跟屏幕共享。

音频共享文档消息

{"msgid":"16527954622422422847_1594199256","action":"send","from":"18002520162","tolist":["wo137MCgAAYW6pIiKKrDe5SlzEhSgwbA"],"msgtime":1594199235014,"msgtype":"voip_doc_share","voipid":"gr2751c98b19300571f8afb3b74514bd32","voip_doc_share":{"filename":"欢迎使用微盘.pdf.pdf","md5sum":"ff893900f24e55e216e617a40e5c4648","filesize":4400654,"sdkfileid":"CpsBKjAqZUlLdWJMd2gvQ1JxMzd0ZjlpdW5mZzJOOE9JZm5kbndvRmRqdnBETjY0QlcvdGtHSFFTYm95dHM2VlllQXhkUUN5KzRmSy9KT3pudnA2aHhYZFlPemc2aVZ6YktzaVh3YkFPZHlqNnl2L2MvcGlqcVRjRTlhZEZsOGlGdHJpQ2RWSVNVUngrVFpuUmo3TGlPQ1BJemlRPT0SOE5EZGZNVFk0T0RnMU16YzVNVGt5T1RJMk9GODFNelUyTlRBd01qQmZNVFU1TkRFNU9USTFOZz09GiA3YTcwNmQ2Zjc5NjY3MDZjNjY2Zjc4NzI3NTZmN2E2YQ=="}}
参数 说明
msgid 消息id,消息的唯一标识,企业可以使用此字段进行消息去重。String类型
action 消息动作,目前有send(发送消息)/recall(撤回消息)/switch(切换企业日志)三种类型。String类型
from 消息发送方id。同一企业内容为userid,非相同企业为external_userid。消息如果是机器人发出,也为external_userid。String类型
tolist 消息接收方列表,可能是多个,同一个企业内容为userid,非相同企业为external_userid。数组,内容为string类型
msgtime 消息发送时间戳,utc时间,单位毫秒。
msgtype voip_doc_share。String类型, 标识音频共享文档类型
voipid String类型, 音频id
voip_doc_share 共享文档消息内容。包括filename、md5sum、filesize、sdkfileid字段。Object类型
filename 文档共享文件名称。String类型
md5sum 共享文件的md5值。String类型
filesize 共享文件的大小。Uint64类型
sdkfileid 共享文件的sdkfile,通过此字段进行媒体数据下载。String类型

互通红包消息

{"msgid":"8632214264349267353_1603786184","action":"send","from":"woJ7ijBwAAmqwojT8r_DaNMbr_NAvaag","tolist":["woJ7ijBwAA6SjS_sIyPLZtyEPJlT7Cfw","tiny-six768"],"roomid":"wrJ7ijBwAAG1vly_DzVI72Ghc-PtA5Dw","msgtime":1603786183955,"msgtype":"external_redpacket","redpacket":{"type":1,"wish":"恭喜发财,大吉大利","totalcnt":2,"totalamount":20}}
参数 说明
msgtype external_redpacket。String类型。出现在本企业与外部企业群聊发送的红包、或者本企业与微信单聊、群聊发送的红包消息场景下。
type 红包消息类型。1 普通红包、2 拼手气群红包。Uint32类型
wish 红包祝福语。String类型
totalcnt 红包总个数。Uint32类型
totalamount 红包总金额。Uint32类型,单位为分。

视频号消息

{"msgid":"5702551662099334532_1619511584_external","action":"send","from":"yangzhu1","tolist":["wmJSb5CgAA4aWXWndJspQGpJMDbsMwMA"],"roomid":"","msgtime":1619511584444,"msgtype":"sphfeed","sphfeed":{"feed_type":4,"sph_name":"云游天地旅行家","feed_desc":"瑞士丨盖尔默缆车,名副其实的过山车~\n\n#旅行#风景#热门"}}
参数 说明
msgtype sphfeed。String类型, 标识视频号消息类型。
feed_type 视频号消息类型。2 图片、4 视频、9 直播。Uint32类型
sph_name 视频号账号名称。String类型
feed_desc 视频号消息描述。String类型

消息容量评估:以平均群大小评估,每条消息平均大小约1k;最大群消息评估,每条消息约50k

获取媒体文件

针对图片、文件等媒体数据,提供sdk接口拉取数据内容。

请求参数说明:

参数 是否必须 说明
sdk 初始化的sdk对象
indexbuf 媒体消息分片拉取,需要填入每次拉取的索引信息。首次不需要填写,后续每次调用只需要将上次调用返回的outindexbuf填入即可。
sdkfileid 消息体内容中的sdkfileid信息。
proxy 使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081
passwd 代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
timeout 超时时间,单位秒

返回参数说明:

参数 是否必须 说明
media_data 返回本次拉取的媒体数据.MediaData结构体.内容包括data(数据内容)/outindexbuf(下次索引)/is_finish(拉取完成标记)
/**
     * 拉取媒体消息函数
     * Return值=0表示该API调用成功
     * 
     *
     * @param [in]  sdk                NewSdk返回的sdk指针
     * @param [in]  sdkFileid        从GetChatData返回的聊天消息中,媒体消息包括的sdkfileid
     * @param [in]  indexbuf        媒体消息分片拉取,需要填入每次拉取的索引信息。首次不需要填写,后续每次调用只需要将上次调用返回的outindexbuf填入即可。
      * @param [in]  proxy            使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081
     * @param [in]  passwd            代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
     * @param [in]  timeout            超时时间,单位秒
     * @param [out] media_data        返回本次拉取的媒体数据.MediaData结构体.内容包括data(数据内容)/outindexbuf(下次索引)/is_finish(拉取完成标记)

     * @param [out] outindexbuf        返回下次访问需要的索引信息
     * @param [out] data            返回本次访问返回的媒体数据内容,解密后内容,如分片数据需累加到文件存储.单次最大返回512K字节
     * @param [out] is_finish        标识是否全部拉取完成,1完成、0未完成


     *
     * @return 返回是否调用成功
     *      0   - 成功
     *      !=0 - 失败
     */
    int GetMediaData(WeWorkFinanceSdk_t* sdk, const char* indexbuf,
                     const char* sdkFileid,const char *proxy,const char* passwd, int timeout, MediaData_t* media_data);

获取机器人信息

通过robot_id获取机器人的名称和创建者

请求方式:GET(HTTPS

请求地址:https://qyapi.weixin.qq.com/cgi-bin/msgaudit/get_robot_info?access_token=ACCESS_TOKEN&robot_id=ROBOT_ID

参数说明:

参数 必须 说明
access_token 调用接口凭证
robot_id 机器人ID。

权限说明:

只能通过会话存档的access_token获取。

返回结果:

{
    "errcode": 0,
    "errmsg": "ok",
    "data": {
        "robot_id": "wbxxxxxxxxxxxxxxxxxxxxxxxx",
        "name": "机器人A",
        "creator_userid": "zhangsan"
    }

参数说明:

参数 说明
errcode 返回码
errmsg 对返回码的文本描述内容
robot_id 机器人ID
name 机器人名称
creator_userid 机器人创建者的UserID

工具接口

    /*
     * @brief 释放sdk,和NewSdk成对使用
     * @return 
    */
    void DestroySdk(WeWorkFinanceSdk_t* sdk);


    Slice_t* NewSlice();

    /*
     * @brief 释放slice,和NewSlice成对使用
     * @return 
     */
    void FreeSlice(Slice_t* slice);

    /*
     * @brief 为其他语言提供读取接口
     * @return 返回buf指针
     *     !=NULL - 成功
     *     NULL   - 失败
     */
    char* GetContentFromSlice(Slice_t* slice);

    // 媒体记录相关工具

    MediaData_t*  NewMediaData();
    void FreeMediaData(MediaData_t* media_data);

    char* GetOutIndexBuf(MediaData_t* media_data);

    char* GetData(MediaData_t* media_data);

    int IsMediaDataFinish(MediaData_t* media_data);
© 1998 - 2021 Tencent Inc. All Rights Reserved