企业内部开发 服务端API 会话内容存档 获取会话内容
获取会话内容
最后更新:2023/11/29
可联系渠道经理采购或代理智慧硬件接口已支持设备 联系渠道经理
获取会话内容
最后更新:2023/11/29

目录

  • 整体流程
  • 初始化接口
  • 获取会话记录数据
  • SDK解密接口
  • 消息格式
  •             文本
  •             图片
  •             撤回消息
  •             同意会话聊天内容
  •             语音
  •             视频
  •             名片
  •             位置
  •             表情
  •             文件
  •             链接
  •             小程序消息
  •             会话记录消息
  •             会话记录消息item
  •             待办消息
  •             投票消息
  •             填表消息
  •             红包消息
  •             会议邀请消息
  •             会议控制消息
  •             切换企业日志
  •             在线文档消息
  •             MarkDown格式消息
  •             图文消息
  •             日程消息
  •             混合消息
  •             音频存档消息
  •             音频共享文档消息
  •             互通红包消息
  •             视频号消息
  •             音视频通话
  •             微盘文件
  • 获取媒体文件
  • 获取机器人信息
  • 工具接口
  • 整体流程

    业务方通过企业微信提供的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返回本次拉取消息的数据.密文消息

    注:获取会话记录内容不能超过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"}]}
    

    返回参数说明:

    参数说明
    errcode0表示成功,错误返回非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接口,即可获得消息明文。

     

    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_msgGetChatdata接口返回的加密消息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类型

     

    待办消息

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

     

    投票消息

    参数说明
    msgtypevote。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"}]}} 
    参数说明
    msgtypecollect。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}}
    参数说明
    msgtyperedpacket。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}}
    参数说明
    msgtypemeeting。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"}
    参数说明
    msgtypemeeting_notification。String类型
    meetingid会议id。Uint64类型
    notification_type1表示有人加入了会议,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"}}
    参数说明
    msgtypedocmsg。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":"请前往系统查看,谢谢。"}}
    参数说明
    msgtypemarkdown。String类型, 标识MarkDown消息类型
    infomarkdown消息内容,目前为机器人发出的消息

     

    图文消息

    {"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"}]}}
    参数说明
    msgtypenews。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":""}}
    参数说明
    msgtypecalendar。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单位。
    msgtypemixed。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时间,单位毫秒。
    msgtypemeeting_voice_call。String类型, 标识音频存档消息类型
    voiceidString类型, 音频id
    meeting_voice_call音频消息内容。包括结束时间、fileid,可能包括多个demofiledata、sharescreendata消息,demofiledata表示文档共享信息,sharescreendata表示屏幕共享信息。Object类型
    endtime音频结束时间。uint32类型
    sdkfileidsdkfileid。音频媒体下载的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时间,单位毫秒。
    msgtypevoip_doc_share。String类型, 标识音频共享文档类型
    voipidString类型, 音频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}}
    参数说明
    msgtypeexternal_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#旅行#风景#热门"}}
    参数说明
    msgtypesphfeed。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}}`
     
    参数说明
    msgtypevoiptext, String类型
    callduration通话时长,单位秒,uint32类型
    invitetype通话类型,uint32类型
    1; //单人视频通话
    2; //单人语音通话
    3; //多人视频通话
    4; //多人语音通话

    提示
    音视频通话分为微信互通通话和普通通话两种类型。
    微信互通:1次音视频通话只会产生1条记录。
    普通通话:1次音视频通话会产生多条记录,由参与人数决定。

    微盘文件

    `{"msgid":"904076622482680588_1666602581569_external","action":"send","from":"WoBeiQi...","tolist":["wmYKhyDwAAxda9Vrt7e6h0CgRhRVlGdQ"],"roomid":"","msgtime":1666602577356,"msgtype":"qydiskfile","info":{"filename":".sys.log"}}`
     
    参数说明
    msgtypeqydiskfile, 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);
    上一篇
    使用前帮助
    下一篇
    开发案例演示