目录
业务方通过企业微信提供的sdk,可以进行会话记录数据的获取、媒体数据的获取。
linux环境 SDK:
下载 SDK v2.0 [更新时间:2024-6-6 更新特性:修复一些已知问题]
windows环境 SDK:
下载 SDK v2.0[更新时间:2024-6-6 更新特性:修复一些已知问题]
以下是交互时序图,本文重点介绍sdk的内容。sdk包括如下接口:
第一步:
/*获取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 | 是 | 返回本次拉取消息的数据.密文消息 |
注:获取会话记录内容不能超过5天,如果企业需要全量数据,则企业需要定期拉取聊天消息。返回的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结尾的消息,表明该消息是一条外部消息。msgid以_updown_stream结尾的消息,表明该消息是一条上下游消息。 |
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接口,即可获得消息明文。
/**
* @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":"这是一条引用/回复消息:\nnick\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":[{"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":"","meetingid":1210342560}}
参数 | 说明 |
---|---|
msgtype | meeting。String类型 |
topic | 会议主题。String类型 |
starttime | 会议开始时间。Utc时间 |
endtime | 会议结束时间。Utc时间。如为快速会议则该字段为空 |
address | 会议地址。String类型。如为快速会议则该字段为空 |
remarks | 会议备注。String类型。如为快速会议则该字段为空 |
meetingid | 会议id。方便将发起、处理消息进行对照。uint64类型 |
{"action": "send","from": "18510382533","info": {"content": "yinhuiyou的快速会议 已结束","meeting_id": 6072773153468854000,"notification_type": 2},"msgid": "14158408185591086566_1700815962253","msgtime": 1700815958880,"msgtype": "meeting_notification","roomid": "","tolist": ["DuDuDu"],"time": "2023-11-24 16:52:38:880"}
参数 | 说明 |
---|---|
msgtype | meeting_notification。String类型 |
meetingid | 会议id。Uint64类型 |
notification_type | 1表示有人加入了会议,2表示会议已经结束。Uint32类型 |
content | 会议系统消息内容。String类型 |
{"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 |
示例图:
{"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":"https://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
{"msgid":"10950316726562067988_1666601563058","action":"send","from":"icef","tolist":["WoBeiQi..."],"roomid":"","msgtime":1666601558876,"msgtype":"voiptext","info":{"callduration":9,"invitetype":2}}
参数 | 说明 |
msgtype | voiptext, String类型 |
callduration | 通话时长,单位秒,uint32类型 |
invitetype | 通话类型,uint32类型 1; //单人视频通话 2; //单人语音通话 3; //多人视频通话 4; //多人语音通话 |
{"msgid":"904076622482680588_1666602581569_external","action":"send","from":"WoBeiQi...","tolist":["wmYKhyDwAAxda9Vrt7e6h0CgRhRVlGdQ"],"roomid":"","msgtime":1666602577356,"msgtype":"qydiskfile","info":{"filename":".sys.log"}}
参数 | 说明 |
msgtype | qydiskfile, String类型 |
filename | 文件名称,String类型 |
针对图片、文件等媒体数据,提供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);