mirror of
https://github.com/silenceper/wechat.git
synced 2026-02-06 13:42:26 +08:00
improve comment ,参考:https://github.com/huacnlee/autocorrect
This commit is contained in:
@@ -1,4 +1,4 @@
|
||||
企业微信会话存档SDK(基于企业微信C版官方SDK封装),暂时只支持在`linux`环境下使用当前SDK。
|
||||
企业微信会话存档 SDK(基于企业微信 C 版官方 SDK 封装),暂时只支持在`linux`环境下使用当前 SDK。
|
||||
|
||||
|
||||
### 官方文档地址
|
||||
@@ -12,8 +12,8 @@ https://open.work.weixin.qq.com/api/doc/90000/90135/91774
|
||||
2、从 `github.com/silenceper/wechat/v2/work/msgaudit/lib` 文件夹下复制 `libWeWorkFinanceSdk_C.so` 动态库文件到系统动态链接库默认文件夹下,或者复制到任意文件夹并在当前文件夹下执行 `export LD_LIBRARY_PATH=$(pwd)`命令设置动态链接库检索地址后即可正常使用
|
||||
|
||||
3、编译要求
|
||||
- 开启CGO: `CGO_ENABLED=1`
|
||||
- 增加tags参数`msgaudit`: `go build -tags msgaudit`或者`go run -tags msgaudit main.go`
|
||||
- 开启 CGO: `CGO_ENABLED=1`
|
||||
- 增加 tags 参数`msgaudit`: `go build -tags msgaudit`或者`go run -tags msgaudit main.go`
|
||||
|
||||
### Example
|
||||
|
||||
@@ -93,7 +93,7 @@ func main() {
|
||||
}
|
||||
}
|
||||
|
||||
//释放SDK实例
|
||||
//释放 SDK 实例
|
||||
client.Free()
|
||||
}
|
||||
|
||||
|
||||
@@ -15,19 +15,19 @@ func (c ChatDataResponse) IsError() bool {
|
||||
|
||||
// ChatData 会话存档原始数据
|
||||
type ChatData struct {
|
||||
Seq uint64 `json:"seq,omitempty"` // 消息的seq值,标识消息的序号。再次拉取需要带上上次回包中最大的seq。Uint64类型,范围0-pow(2,64)-1
|
||||
MsgID string `json:"msgid,omitempty"` // 消息id,消息的唯一标识,企业可以使用此字段进行消息去重。
|
||||
Seq uint64 `json:"seq,omitempty"` // 消息的 seq 值,标识消息的序号。再次拉取需要带上上次回包中最大的 seq。Uint64 类型,范围 0-pow(2,64)-1
|
||||
MsgID string `json:"msgid,omitempty"` // 消息 id,消息的唯一标识,企业可以使用此字段进行消息去重。
|
||||
PublickeyVer uint32 `json:"publickey_ver,omitempty"` // 加密此条消息使用的公钥版本号。
|
||||
EncryptRandomKey string `json:"encrypt_random_key,omitempty"` // 使用publickey_ver指定版本的公钥进行非对称加密后base64加密的内容,需要业务方先base64 decode处理后,再使用指定版本的私钥进行解密,得出内容。
|
||||
EncryptChatMsg string `json:"encrypt_chat_msg,omitempty"` // 消息密文。需要业务方使用将encrypt_random_key解密得到的内容,与encrypt_chat_msg,传入sdk接口DecryptData,得到消息明文。
|
||||
EncryptRandomKey string `json:"encrypt_random_key,omitempty"` // 使用 publickey_ver 指定版本的公钥进行非对称加密后 base64 加密的内容,需要业务方先 base64 decode 处理后,再使用指定版本的私钥进行解密,得出内容。
|
||||
EncryptChatMsg string `json:"encrypt_chat_msg,omitempty"` // 消息密文。需要业务方使用将 encrypt_random_key 解密得到的内容,与 encrypt_chat_msg,传入 sdk 接口 DecryptData,得到消息明文。
|
||||
}
|
||||
|
||||
// ChatMessage 会话存档消息
|
||||
type ChatMessage struct {
|
||||
ID string // 消息id,消息的唯一标识,企业可以使用此字段进行消息去重。
|
||||
From string // 消息发送方id。同一企业内容为userid,非相同企业为external_userid。消息如果是机器人发出,也为external_userid。
|
||||
ToList []string // 消息接收方列表,可能是多个,同一个企业内容为userid,非相同企业为external_userid。
|
||||
Action string // 消息动作,目前有send(发送消息)/recall(撤回消息)/switch(切换企业日志)三种类型。
|
||||
ID string // 消息 id,消息的唯一标识,企业可以使用此字段进行消息去重。
|
||||
From string // 消息发送方 id。同一企业内容为 userid,非相同企业为 external_userid。消息如果是机器人发出,也为 external_userid。
|
||||
ToList []string // 消息接收方列表,可能是多个,同一个企业内容为 userid,非相同企业为 external_userid。
|
||||
Action string // 消息动作,目前有 send(发送消息)/recall(撤回消息)/switch(切换企业日志) 三种类型。
|
||||
Type string // 消息类型
|
||||
originData []byte // 原始消息对象
|
||||
}
|
||||
@@ -152,7 +152,7 @@ func (c ChatMessage) GetDocMessage() (msg DocMessage, err error) {
|
||||
return msg, err
|
||||
}
|
||||
|
||||
// GetMarkdownMessage 获取MarkDown格式消息
|
||||
// GetMarkdownMessage 获取 MarkDown 格式消息
|
||||
func (c ChatMessage) GetMarkdownMessage() (msg MarkdownMessage, err error) {
|
||||
err = json.Unmarshal(c.originData, &msg)
|
||||
return msg, err
|
||||
|
||||
@@ -26,11 +26,11 @@ type Client struct {
|
||||
// NewClient 初始会话会话存档实例
|
||||
/**
|
||||
* 初始化函数
|
||||
* Return值=0表示该API调用成功
|
||||
* Return 值=0 表示该 API 调用成功
|
||||
*
|
||||
* @param [in] sdk NewSdk返回的sdk指针
|
||||
* @param [in] corpid 调用企业的企业id,例如:wwd08c8exxxx5ab44d,可以在企业微信管理端--我的企业--企业信息查看
|
||||
* @param [in] secret 聊天内容存档的Secret,可以在企业微信管理端--管理工具--聊天内容存档查看
|
||||
* @param [in] sdk NewSdk 返回的 sdk 指针
|
||||
* @param [in] corpid 调用企业的企业 id,例如:wwd08c8exxxx5ab44d,可以在企业微信管理端--我的企业--企业信息查看
|
||||
* @param [in] secret 聊天内容存档的 Secret,可以在企业微信管理端--管理工具--聊天内容存档查看
|
||||
* @param [in] privateKey 消息加密私钥,可以在企业微信管理端--管理工具--消息加密公钥查看对用公钥,私钥一般由自己保存
|
||||
*
|
||||
*
|
||||
@@ -57,7 +57,7 @@ func NewClient(cfg *config.Config) (*Client, error) {
|
||||
}, nil
|
||||
}
|
||||
|
||||
// Free 释放SDK实例是可调用该方法释放内存
|
||||
// Free 释放 SDK 实例是可调用该方法释放内存
|
||||
func (s *Client) Free() {
|
||||
if s.ptr == nil {
|
||||
return
|
||||
@@ -71,12 +71,12 @@ func (s *Client) Free() {
|
||||
* 拉取聊天记录函数
|
||||
*
|
||||
*
|
||||
* @param [in] seq 从指定的seq开始拉取消息,注意的是返回的消息从seq+1开始返回,seq为之前接口返回的最大seq值。首次使用请使用seq:0
|
||||
* @param [in] limit 一次拉取的消息条数,最大值1000条,超过1000条会返回错误
|
||||
* @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 超时时间,单位秒
|
||||
* @return chatDatas 返回本次拉取消息的数据,slice结构体.内容包括errcode/errmsg,以及每条消息内容。示例如下:
|
||||
* @return 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"}]}
|
||||
*/
|
||||
@@ -117,12 +117,12 @@ func (s *Client) GetChatData(seq uint64, limit uint64, proxy string, passwd stri
|
||||
* 拉取聊天记录函数
|
||||
*
|
||||
*
|
||||
* @param [in] seq 从指定的seq开始拉取消息,注意的是返回的消息从seq+1开始返回,seq为之前接口返回的最大seq值。首次使用请使用seq:0
|
||||
* @param [in] limit 一次拉取的消息条数,最大值1000条,超过1000条会返回错误
|
||||
* @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 超时时间,单位秒
|
||||
* @return chatDatas 返回本次拉取消息的数据,slice结构体.内容包括errcode/errmsg,以及每条消息内容。示例如下:
|
||||
* @return 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"}]}
|
||||
*/
|
||||
@@ -152,11 +152,11 @@ func (s *Client) GetRawChatData(seq uint64, limit uint64, proxy string, passwd s
|
||||
return data, err
|
||||
}
|
||||
|
||||
// DecryptData 解析密文.企业微信自有解密内容
|
||||
// DecryptData 解析密文。企业微信自有解密内容
|
||||
/**
|
||||
* @brief 解析密文.企业微信自有解密内容
|
||||
* @param [in] encrypt_key, getchatdata返回的encrypt_random_key,使用企业自持对应版本秘钥RSA解密后的内容
|
||||
* @param [in] encrypt_msg, getchatdata返回的encrypt_chat_msg
|
||||
* @brief 解析密文。企业微信自有解密内容
|
||||
* @param [in] encrypt_key, getchatdata 返回的 encrypt_random_key,使用企业自持对应版本秘钥 RSA 解密后的内容
|
||||
* @param [in] encrypt_msg, getchatdata 返回的 encrypt_chat_msg
|
||||
* @param [out] msg, 解密的消息明文
|
||||
* @return 返回是否调用成功
|
||||
* 0 - 成功
|
||||
@@ -210,16 +210,16 @@ func (s *Client) DecryptData(encryptRandomKey string, encryptMsg string) (msg Ch
|
||||
// GetMediaData 拉取媒体消息函数
|
||||
/**
|
||||
* 拉取媒体消息函数
|
||||
* Return值=0表示该API调用成功
|
||||
* Return 值=0 表示该 API 调用成功
|
||||
*
|
||||
*
|
||||
* @param [in] sdk NewSdk返回的sdk指针
|
||||
* @param [in] sdkFileid 从GetChatData返回的聊天消息中,媒体消息包括的sdkfileid
|
||||
* @param [in] sdk NewSdk 返回的 sdk 指针
|
||||
* @param [in] sdkFileid 从 GetChatData 返回的聊天消息中,媒体消息包括的 sdkfileid
|
||||
* @param [in] proxy 使用代理的请求,需要传入代理的链接。如:socks5://10.0.0.1:8081 或者 http://10.0.0.1:8081
|
||||
* @param [in] passwd 代理账号密码,需要传入代理的账号密码。如 user_name:passwd_123
|
||||
* @param [in] indexbuf 媒体消息分片拉取,需要填入每次拉取的索引信息。首次不需要填写,默认拉取512k,后续每次调用只需要将上次调用返回的outindexbuf填入即可。
|
||||
* @param [in] indexbuf 媒体消息分片拉取,需要填入每次拉取的索引信息。首次不需要填写,默认拉取 512k,后续每次调用只需要将上次调用返回的 outindexbuf 填入即可。
|
||||
* @param [in] timeout 超时时间,单位秒
|
||||
* @param [out] media_data 返回本次拉取的媒体数据.MediaData结构体.内容包括data(数据内容)/outindexbuf(下次索引)/is_finish(拉取完成标记)
|
||||
* @param [out] media_data 返回本次拉取的媒体数据.MediaData 结构体。内容包括 data(数据内容)/outindexbuf(下次索引)/is_finish(拉取完成标记)
|
||||
|
||||
*
|
||||
* @return 返回是否调用成功
|
||||
|
||||
@@ -2,7 +2,7 @@ package msgaudit
|
||||
|
||||
// Config 会话存档初始化参数
|
||||
type Config struct {
|
||||
CorpID string // 调用企业的企业id,例如:wwd08c8exxxx5ab44d,可以在企业微信管理端--我的企业--企业信息查看
|
||||
CorpSecret string // 聊天内容存档的Secret,可以在企业微信管理端--管理工具--聊天内容存档查看
|
||||
CorpID string // 调用企业的企业 id,例如:wwd08c8exxxx5ab44d,可以在企业微信管理端--我的企业--企业信息查看
|
||||
CorpSecret string // 聊天内容存档的 Secret,可以在企业微信管理端--管理工具--聊天内容存档查看
|
||||
RasPrivateKey string // 消息加密私钥,可以在企业微信管理端--管理工具--消息加密公钥查看对用公钥,私钥一般由自己保存
|
||||
}
|
||||
|
||||
@@ -10,11 +10,11 @@ import (
|
||||
// 10002 数据解析失败
|
||||
// 10003 系统失败
|
||||
// 10004 密钥错误导致加密失败
|
||||
// 10005 fileid错误
|
||||
// 10005 fileid 错误
|
||||
// 10006 解密失败
|
||||
// 10007 找不到消息加密版本的私钥,需要重新传入私钥对
|
||||
// 10008 解析encrypt_key出错
|
||||
// 10009 ip非法
|
||||
// 10008 解析 encrypt_key 出错
|
||||
// 10009 ip 非法
|
||||
// 10010 数据过期
|
||||
// 10011 证书错误
|
||||
const (
|
||||
@@ -24,11 +24,11 @@ const (
|
||||
SDKParseErrMsg = "数据解析失败"
|
||||
SDKSystemErrMsg = "系统失败"
|
||||
SDKSecretErrMsg = "密钥错误导致加密失败"
|
||||
SDKFileIDErrMsg = "fileid错误"
|
||||
SDKFileIDErrMsg = "fileid 错误"
|
||||
SDKDecryptErrMsg = "解密失败"
|
||||
SDKSecretMissErrMsg = "找不到消息加密版本的私钥,需要重新传入私钥对"
|
||||
SDKEncryptKeyErrMsg = "解析encrypt_key出错"
|
||||
SDKIPNotWhiteListErrMsg = "ip非法"
|
||||
SDKEncryptKeyErrMsg = "解析 encrypt_key 出错"
|
||||
SDKIPNotWhiteListErrMsg = "ip 非法"
|
||||
SDKDataExpiredErrMsg = "数据过期"
|
||||
SDKTokenExpiredErrMsg = "证书过期"
|
||||
)
|
||||
@@ -43,7 +43,7 @@ func (e Error) Error() string {
|
||||
return fmt.Sprintf("%d:%s", e.ErrCode, e.ErrMsg)
|
||||
}
|
||||
|
||||
// NewSDKErr 初始化新的SDK错误
|
||||
// NewSDKErr 初始化新的 SDK 错误
|
||||
func NewSDKErr(code int) Error {
|
||||
msg := ""
|
||||
switch code {
|
||||
|
||||
@@ -22,15 +22,15 @@ typedef void FreeMediaData_t(MediaData_t*);
|
||||
int main(int argc, char* argv[])
|
||||
{
|
||||
int ret = 0;
|
||||
//seq 表示该企业存档消息序号,该序号单调递增,拉取序号建议设置为上次拉取返回结果中最大序号。首次拉取时seq传0,sdk会返回有效期内最早的消息。
|
||||
//limit 表示本次拉取的最大消息条数,取值范围为1~1000
|
||||
//proxy与passwd为代理参数,如果运行sdk的环境不能直接访问外网,需要配置代理参数。sdk访问的域名是"https://qyapi.weixin.qq.com"。
|
||||
//建议先通过curl访问"https://qyapi.weixin.qq.com",验证代理配置正确后,再传入sdk。
|
||||
//timeout 为拉取会话存档的超时时间,单位为秒,建议超时时间设置为5s。
|
||||
//sdkfileid 媒体文件id,从解密后的会话存档中得到
|
||||
//seq 表示该企业存档消息序号,该序号单调递增,拉取序号建议设置为上次拉取返回结果中最大序号。首次拉取时 seq 传 0,sdk 会返回有效期内最早的消息。
|
||||
//limit 表示本次拉取的最大消息条数,取值范围为 1~1000
|
||||
//proxy 与 passwd 为代理参数,如果运行 sdk 的环境不能直接访问外网,需要配置代理参数。sdk 访问的域名是"https://qyapi.weixin.qq.com"。
|
||||
//建议先通过 curl 访问"https://qyapi.weixin.qq.com",验证代理配置正确后,再传入 sdk。
|
||||
//timeout 为拉取会话存档的超时时间,单位为秒,建议超时时间设置为 5s。
|
||||
//sdkfileid 媒体文件 id,从解密后的会话存档中得到
|
||||
//savefile 媒体文件保存路径
|
||||
//encrypt_key 拉取会话存档返回的encrypt_random_key,使用配置在企业微信管理台的rsa公钥对应的私钥解密后得到encrypt_key。
|
||||
//encrypt_chat_msg 拉取会话存档返回的encrypt_chat_msg
|
||||
//encrypt_key 拉取会话存档返回的 encrypt_random_key,使用配置在企业微信管理台的 rsa 公钥对应的私钥解密后得到 encrypt_key。
|
||||
//encrypt_chat_msg 拉取会话存档返回的 encrypt_chat_msg
|
||||
if (argc < 2) {
|
||||
printf("./sdktools 1(chatmsg) 2(mediadata) 3(decryptdata)\n");
|
||||
printf("./sdktools 1 seq limit proxy passwd timeout\n");
|
||||
@@ -47,14 +47,14 @@ int main(int argc, char* argv[])
|
||||
newsdk_t* newsdk_fn = (newsdk_t*)dlsym(so_handle, "NewSdk");
|
||||
WeWorkFinanceSdk_t* sdk = newsdk_fn();
|
||||
|
||||
//使用sdk前需要初始化,初始化成功后的sdk可以一直使用。
|
||||
//如需并发调用sdk,建议每个线程持有一个sdk实例。
|
||||
//初始化时请填入自己企业的corpid与secrectkey。
|
||||
//使用 sdk 前需要初始化,初始化成功后的 sdk 可以一直使用。
|
||||
//如需并发调用 sdk,建议每个线程持有一个 sdk 实例。
|
||||
//初始化时请填入自己企业的 corpid 与 secrectkey。
|
||||
Init_t* init_fn = (Init_t*)dlsym(so_handle, "Init");
|
||||
DestroySdk_t* destroysdk_fn = (DestroySdk_t*)dlsym(so_handle, "DestroySdk");
|
||||
ret = init_fn(sdk, "wwd08c8e7c775ab44d", "zJ6k0naVVQ--gt9PUSSEvs03zW_nlDVmjLCTOTAfrew");
|
||||
if (ret != 0) {
|
||||
//sdk需要主动释放
|
||||
//sdk 需要主动释放
|
||||
destroysdk_fn(sdk);
|
||||
printf("init sdk err ret:%d\n", ret);
|
||||
return -1;
|
||||
@@ -70,7 +70,7 @@ int main(int argc, char* argv[])
|
||||
NewSlice_t* newslice_fn = (NewSlice_t*)dlsym(so_handle, "NewSlice");
|
||||
FreeSlice_t* freeslice_fn = (FreeSlice_t*)dlsym(so_handle, "FreeSlice");
|
||||
|
||||
//每次使用GetChatData拉取存档前需要调用NewSlice获取一个chatDatas,在使用完chatDatas中数据后,还需要调用FreeSlice释放。
|
||||
//每次使用 GetChatData 拉取存档前需要调用 NewSlice 获取一个 chatDatas,在使用完 chatDatas 中数据后,还需要调用 FreeSlice 释放。
|
||||
Slice_t* chatDatas = newslice_fn();
|
||||
GetChatData_t* getchatdata_fn = (GetChatData_t*)dlsym(so_handle, "GetChatData");
|
||||
ret = getchatdata_fn(sdk, iSeq, iLimit, argv[4], argv[5], timeout, chatDatas);
|
||||
@@ -92,10 +92,10 @@ int main(int argc, char* argv[])
|
||||
NewMediaData_t* newmediadata_fn = (NewMediaData_t*)dlsym(so_handle, "NewMediaData");
|
||||
FreeMediaData_t* freemediadata_fn = (FreeMediaData_t*)dlsym(so_handle, "FreeMediaData");
|
||||
|
||||
//媒体文件每次拉取的最大size为512k,因此超过512k的文件需要分片拉取。若该文件未拉取完整,mediaData中的is_finish会返回0,同时mediaData中的outindexbuf会返回下次拉取需要传入GetMediaData的indexbuf。
|
||||
//indexbuf一般格式如右侧所示,”Range:bytes=524288-1048575“,表示这次拉取的是从524288到1048575的分片。单个文件首次拉取填写的indexbuf为空字符串,拉取后续分片时直接填入上次返回的indexbuf即可。
|
||||
//媒体文件每次拉取的最大 size 为 512k,因此超过 512k 的文件需要分片拉取。若该文件未拉取完整,mediaData 中的 is_finish 会返回 0,同时 mediaData 中的 outindexbuf 会返回下次拉取需要传入 GetMediaData 的 indexbuf。
|
||||
//indexbuf 一般格式如右侧所示,”Range:bytes=524288-1048575“,表示这次拉取的是从 524288 到 1048575 的分片。单个文件首次拉取填写的 indexbuf 为空字符串,拉取后续分片时直接填入上次返回的 indexbuf 即可。
|
||||
while (isfinish == 0) {
|
||||
//每次使用GetMediaData拉取存档前需要调用NewMediaData获取一个mediaData,在使用完mediaData中数据后,还需要调用FreeMediaData释放。
|
||||
//每次使用 GetMediaData 拉取存档前需要调用 NewMediaData 获取一个 mediaData,在使用完 mediaData 中数据后,还需要调用 FreeMediaData 释放。
|
||||
printf("index:%s\n", index.c_str());
|
||||
MediaData_t* mediaData = newmediadata_fn();
|
||||
ret = getmediadata_fn(sdk, index.c_str(), argv[2], argv[3], argv[4], timeout, mediaData);
|
||||
@@ -107,7 +107,7 @@ int main(int argc, char* argv[])
|
||||
}
|
||||
printf("content size:%d isfin:%d outindex:%s\n", mediaData->data_len, mediaData->is_finish, mediaData->outindexbuf);
|
||||
|
||||
//大于512k的文件会分片拉取,此处需要使用追加写,避免后面的分片覆盖之前的数据。
|
||||
//大于 512k 的文件会分片拉取,此处需要使用追加写,避免后面的分片覆盖之前的数据。
|
||||
char file[200];
|
||||
snprintf(file, sizeof(file), "%s", argv[6]);
|
||||
FILE* fp = fopen(file, "ab+");
|
||||
@@ -121,7 +121,7 @@ int main(int argc, char* argv[])
|
||||
fwrite(mediaData->data, mediaData->data_len, 1, fp);
|
||||
fclose(fp);
|
||||
|
||||
//获取下次拉取需要使用的indexbuf
|
||||
//获取下次拉取需要使用的 indexbuf
|
||||
index.assign(string(mediaData->outindexbuf));
|
||||
isfinish = mediaData->is_finish;
|
||||
freemediadata_fn(mediaData);
|
||||
@@ -129,9 +129,9 @@ int main(int argc, char* argv[])
|
||||
}
|
||||
else if (type == 3) {
|
||||
//解密会话存档内容
|
||||
//sdk不会要求用户传入rsa私钥,保证用户会话存档数据只有自己能够解密。
|
||||
//此处需要用户先用rsa私钥解密encrypt_random_key后,作为encrypt_key参数传入sdk来解密encrypt_chat_msg获取会话存档明文。
|
||||
//每次使用DecryptData解密会话存档前需要调用NewSlice获取一个Msgs,在使用完Msgs中数据后,还需要调用FreeSlice释放。
|
||||
//sdk 不会要求用户传入 rsa 私钥,保证用户会话存档数据只有自己能够解密。
|
||||
//此处需要用户先用 rsa 私钥解密 encrypt_random_key 后,作为 encrypt_key 参数传入 sdk 来解密 encrypt_chat_msg 获取会话存档明文。
|
||||
//每次使用 DecryptData 解密会话存档前需要调用 NewSlice 获取一个 Msgs,在使用完 Msgs 中数据后,还需要调用 FreeSlice 释放。
|
||||
NewSlice_t* newslice_fn = (NewSlice_t*)dlsym(so_handle, "NewSlice");
|
||||
FreeSlice_t* freeslice_fn = (FreeSlice_t*)dlsym(so_handle, "FreeSlice");
|
||||
|
||||
|
||||
@@ -2,12 +2,12 @@ package msgaudit
|
||||
|
||||
// BaseMessage 基础消息
|
||||
type BaseMessage struct {
|
||||
MsgID string `json:"msgid,omitempty"` // 消息id,消息的唯一标识,企业可以使用此字段进行消息去重。
|
||||
Action string `json:"action,omitempty"` // 消息动作,目前有send(发送消息)/recall(撤回消息)/switch(切换企业日志)三种类型。
|
||||
From string `json:"from,omitempty"` // 消息发送方id。同一企业内容为userid,非相同企业为external_userid。消息如果是机器人发出,也为external_userid。
|
||||
ToList []string `json:"tolist,omitempty"` // 消息接收方列表,可能是多个,同一个企业内容为userid,非相同企业为external_userid。
|
||||
RoomID string `json:"roomid,omitempty"` // 群聊消息的群id。如果是单聊则为空。
|
||||
MsgTime int64 `json:"msgtime,omitempty"` // 消息发送时间戳,utc时间,ms单位。
|
||||
MsgID string `json:"msgid,omitempty"` // 消息 id,消息的唯一标识,企业可以使用此字段进行消息去重。
|
||||
Action string `json:"action,omitempty"` // 消息动作,目前有 send(发送消息)/recall(撤回消息)/switch(切换企业日志) 三种类型。
|
||||
From string `json:"from,omitempty"` // 消息发送方 id。同一企业内容为 userid,非相同企业为 external_userid。消息如果是机器人发出,也为 external_userid。
|
||||
ToList []string `json:"tolist,omitempty"` // 消息接收方列表,可能是多个,同一个企业内容为 userid,非相同企业为 external_userid。
|
||||
RoomID string `json:"roomid,omitempty"` // 群聊消息的群 id。如果是单聊则为空。
|
||||
MsgTime int64 `json:"msgtime,omitempty"` // 消息发送时间戳,utc 时间,ms 单位。
|
||||
MsgType string `json:"msgtype,omitempty"` // 文本消息为:text。
|
||||
}
|
||||
|
||||
@@ -23,8 +23,8 @@ type TextMessage struct {
|
||||
type ImageMessage struct {
|
||||
BaseMessage
|
||||
Image struct {
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 媒体资源的id信息。
|
||||
Md5Sum string `json:"md5sum,omitempty"` // 图片资源的md5值,供进行校验。
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 媒体资源的 id 信息。
|
||||
Md5Sum string `json:"md5sum,omitempty"` // 图片资源的 md5 值,供进行校验。
|
||||
FileSize uint32 `json:"filesize,omitempty"` // 图片资源的文件大小。
|
||||
} `json:"image,omitempty"`
|
||||
}
|
||||
@@ -33,7 +33,7 @@ type ImageMessage struct {
|
||||
type RevokeMessage struct {
|
||||
BaseMessage
|
||||
Revoke struct {
|
||||
PreMsgID string `json:"pre_msgid,omitempty"` // 标识撤回的原消息的msgid
|
||||
PreMsgID string `json:"pre_msgid,omitempty"` // 标识撤回的原消息的 msgid
|
||||
} `json:"revoke,omitempty"`
|
||||
}
|
||||
|
||||
@@ -41,8 +41,8 @@ type RevokeMessage struct {
|
||||
type AgreeMessage struct {
|
||||
BaseMessage
|
||||
Agree struct {
|
||||
UserID string `json:"userid,omitempty"` // 同意/不同意协议者的userid,外部企业默认为external_userid。
|
||||
AgreeTime int64 `json:"agree_time,omitempty"` // 同意/不同意协议的时间,utc时间,ms单位。
|
||||
UserID string `json:"userid,omitempty"` // 同意/不同意协议者的 userid,外部企业默认为 external_userid。
|
||||
AgreeTime int64 `json:"agree_time,omitempty"` // 同意/不同意协议的时间,utc 时间,ms 单位。
|
||||
} `json:"agree,omitempty"`
|
||||
}
|
||||
|
||||
@@ -50,10 +50,10 @@ type AgreeMessage struct {
|
||||
type VoiceMessage struct {
|
||||
BaseMessage
|
||||
Voice struct {
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 媒体资源的id信息。
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 媒体资源的 id 信息。
|
||||
VoiceSize uint32 `json:"voice_size,omitempty"` // 语音消息大小。
|
||||
PlayLength uint32 `json:"play_length,omitempty"` // 播放长度。
|
||||
Md5Sum string `json:"md5sum,omitempty"` // 图片资源的md5值,供进行校验。
|
||||
Md5Sum string `json:"md5sum,omitempty"` // 图片资源的 md5 值,供进行校验。
|
||||
} `json:"voice,omitempty"`
|
||||
}
|
||||
|
||||
@@ -61,10 +61,10 @@ type VoiceMessage struct {
|
||||
type VideoMessage struct {
|
||||
BaseMessage
|
||||
Video struct {
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 媒体资源的id信息。
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 媒体资源的 id 信息。
|
||||
FileSize uint32 `json:"filesize,omitempty"` // 图片资源的文件大小。
|
||||
PlayLength uint32 `json:"play_length,omitempty"` // 播放长度。
|
||||
Md5Sum string `json:"md5sum,omitempty"` // 图片资源的md5值,供进行校验。
|
||||
Md5Sum string `json:"md5sum,omitempty"` // 图片资源的 md5 值,供进行校验。
|
||||
} `json:"video,omitempty"`
|
||||
}
|
||||
|
||||
@@ -73,7 +73,7 @@ type CardMessage struct {
|
||||
BaseMessage
|
||||
Card struct {
|
||||
CorpName string `json:"corpname,omitempty"` // 名片所有者所在的公司名称。
|
||||
UserID string `json:"userid,omitempty"` // 名片所有者的id,同一公司是userid,不同公司是external_userid
|
||||
UserID string `json:"userid,omitempty"` // 名片所有者的 id,同一公司是 userid,不同公司是 external_userid
|
||||
} `json:"card,omitempty"`
|
||||
}
|
||||
|
||||
@@ -81,10 +81,10 @@ type CardMessage struct {
|
||||
type LocationMessage struct {
|
||||
BaseMessage
|
||||
Location struct {
|
||||
Lng float64 `json:"longitude,omitempty"` // 经度,单位double
|
||||
Lat float64 `json:"latitude,omitempty"` // 纬度,单位double
|
||||
Lng float64 `json:"longitude,omitempty"` // 经度,单位 double
|
||||
Lat float64 `json:"latitude,omitempty"` // 纬度,单位 double
|
||||
Address string `json:"address,omitempty"` // 地址信息
|
||||
Title string `json:"title,omitempty"` // 位置信息的title。
|
||||
Title string `json:"title,omitempty"` // 位置信息的 title。
|
||||
Zoom uint32 `json:"zoom,omitempty"` // 缩放比例。
|
||||
} `json:"location,omitempty"`
|
||||
}
|
||||
@@ -93,12 +93,12 @@ type LocationMessage struct {
|
||||
type EmotionMessage struct {
|
||||
BaseMessage
|
||||
Emotion struct {
|
||||
Type uint32 `json:"type,omitempty"` // 表情类型,png或者gif.1表示gif 2表示png。
|
||||
Type uint32 `json:"type,omitempty"` // 表情类型,png 或者 gif.1 表示 gif 2 表示 png。
|
||||
Width uint32 `json:"width,omitempty"` // 表情图片宽度。
|
||||
Height uint32 `json:"height,omitempty"` // 表情图片高度。
|
||||
ImageSize uint32 `json:"imagesize,omitempty"` // 资源的文件大小。
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 媒体资源的id信息。
|
||||
Md5Sum string `json:"md5sum,omitempty"` // 图片资源的md5值,供进行校验。
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 媒体资源的 id 信息。
|
||||
Md5Sum string `json:"md5sum,omitempty"` // 图片资源的 md5 值,供进行校验。
|
||||
} `json:"emotion,omitempty"`
|
||||
}
|
||||
|
||||
@@ -108,9 +108,9 @@ type FileMessage struct {
|
||||
File struct {
|
||||
FileName string `json:"filename,omitempty"` // 文件名称。
|
||||
FileExt string `json:"fileext,omitempty"` // 文件类型后缀。
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 媒体资源的id信息。
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 媒体资源的 id 信息。
|
||||
FileSize uint32 `json:"filesize,omitempty"` // 文件大小。
|
||||
Md5Sum string `json:"md5sum,omitempty"` // 资源的md5值,供进行校验。
|
||||
Md5Sum string `json:"md5sum,omitempty"` // 资源的 md5 值,供进行校验。
|
||||
} `json:"file,omitempty"`
|
||||
}
|
||||
|
||||
@@ -120,8 +120,8 @@ type LinkMessage struct {
|
||||
Link struct {
|
||||
Title string `json:"title,omitempty"` // 消息标题。
|
||||
Desc string `json:"description,omitempty"` // 消息描述。
|
||||
LinkURL string `json:"link_url,omitempty"` // 链接url地址
|
||||
ImageURL string `json:"image_url,omitempty"` // 链接图片url。
|
||||
LinkURL string `json:"link_url,omitempty"` // 链接 url 地址
|
||||
ImageURL string `json:"image_url,omitempty"` // 链接图片 url。
|
||||
} `json:"link,omitempty"`
|
||||
}
|
||||
|
||||
@@ -159,8 +159,8 @@ type VoteMessage struct {
|
||||
BaseMessage
|
||||
VoteTitle string `json:"votetitle,omitempty"` // 投票主题。
|
||||
VoteItem []string `json:"voteitem,omitempty"` // 投票选项,可能多个内容。
|
||||
VoteType uint32 `json:"votetype,omitempty"` // 投票类型.101发起投票、102参与投票。
|
||||
VoteID string `json:"voteid,omitempty"` // 投票id,方便将参与投票消息与发起投票消息进行前后对照。
|
||||
VoteType uint32 `json:"votetype,omitempty"` // 投票类型.101 发起投票、102 参与投票。
|
||||
VoteID string `json:"voteid,omitempty"` // 投票 id,方便将参与投票消息与发起投票消息进行前后对照。
|
||||
}
|
||||
|
||||
// CollectMessage 填表消息
|
||||
@@ -190,12 +190,12 @@ type MeetingMessage struct {
|
||||
BaseMessage
|
||||
Meeting struct {
|
||||
Topic string `json:"topic,omitempty"` // 会议主题
|
||||
StartTime int64 `json:"starttime,omitempty"` // 会议开始时间。Utc时间
|
||||
EndTime int64 `json:"endtime,omitempty"` // 会议结束时间。Utc时间
|
||||
StartTime int64 `json:"starttime,omitempty"` // 会议开始时间。Utc 时间
|
||||
EndTime int64 `json:"endtime,omitempty"` // 会议结束时间。Utc 时间
|
||||
Address string `json:"address,omitempty"` // 会议地址
|
||||
Remarks string `json:"remarks,omitempty"` // 会议备注
|
||||
MeetingType uint32 `json:"meetingtype,omitempty"` // 会议消息类型。101发起会议邀请消息、102处理会议邀请消息
|
||||
MeetingID uint64 `json:"meetingid,omitempty"` // 会议id。方便将发起、处理消息进行对照
|
||||
MeetingType uint32 `json:"meetingtype,omitempty"` // 会议消息类型。101 发起会议邀请消息、102 处理会议邀请消息
|
||||
MeetingID uint64 `json:"meetingid,omitempty"` // 会议 id。方便将发起、处理消息进行对照
|
||||
Status uint32 `json:"status,omitempty"` // 会议邀请处理状态。1 参加会议、2 拒绝会议、3 待定、4 未被邀请、5 会议已取消、6 会议已过期、7 不在房间内。
|
||||
} `json:"meeting,omitempty"`
|
||||
}
|
||||
@@ -206,15 +206,15 @@ type DocMessage struct {
|
||||
Doc struct {
|
||||
Title string `json:"title,omitempty"` // 在线文档名称
|
||||
LinkURL string `json:"link_url,omitempty"` // 在线文档链接
|
||||
DocCreator string `json:"doc_creator,omitempty"` // 在线文档创建者。本企业成员创建为userid;外部企业成员创建为external_userid
|
||||
DocCreator string `json:"doc_creator,omitempty"` // 在线文档创建者。本企业成员创建为 userid;外部企业成员创建为 external_userid
|
||||
} `json:"doc,omitempty"`
|
||||
}
|
||||
|
||||
// MarkdownMessage MarkDown消息
|
||||
// MarkdownMessage MarkDown 消息
|
||||
type MarkdownMessage struct {
|
||||
BaseMessage
|
||||
Info struct {
|
||||
Content string `json:"content,omitempty"` // markdown消息内容,目前为机器人发出的消息
|
||||
Content string `json:"content,omitempty"` // markdown 消息内容,目前为机器人发出的消息
|
||||
} `json:"info,omitempty"`
|
||||
}
|
||||
|
||||
@@ -232,9 +232,9 @@ type CalendarMessage struct {
|
||||
Calendar struct {
|
||||
Title string `json:"title,omitempty"` // 日程主题
|
||||
CreatorName string `json:"creatorname,omitempty"` // 日程组织者
|
||||
AttendeeName []string `json:"attendeename,omitempty"` // 日程参与人。数组,内容为String类型
|
||||
StartTime int64 `json:"starttime,omitempty"` // 日程开始时间。Utc时间,单位秒
|
||||
EndTime int64 `json:"endtime,omitempty"` // 日程结束时间。Utc时间,单位秒
|
||||
AttendeeName []string `json:"attendeename,omitempty"` // 日程参与人。数组,内容为 String 类型
|
||||
StartTime int64 `json:"starttime,omitempty"` // 日程开始时间。Utc 时间,单位秒
|
||||
EndTime int64 `json:"endtime,omitempty"` // 日程结束时间。Utc 时间,单位秒
|
||||
Place string `json:"place,omitempty"` // 日程地点
|
||||
Remarks string `json:"remarks,omitempty"` // 日程备注
|
||||
} `json:"calendar,omitempty"`
|
||||
@@ -245,31 +245,31 @@ type MixedMessage struct {
|
||||
BaseMessage
|
||||
Mixed struct {
|
||||
Item []MixedMsg `json:"item,omitempty"`
|
||||
} `json:"mixed,omitempty"` // 消息内容。可包含图片、文字、表情等多种消息。Object类型
|
||||
} `json:"mixed,omitempty"` // 消息内容。可包含图片、文字、表情等多种消息。Object 类型
|
||||
}
|
||||
|
||||
// MeetingVoiceCallMessage 音频存档消息
|
||||
type MeetingVoiceCallMessage struct {
|
||||
BaseMessage
|
||||
VoiceID string `json:"voiceid,omitempty"` // 音频id
|
||||
MeetingVoiceCall *MeetingVoiceCall `json:"meeting_voice_call,omitempty"` // 音频消息内容。包括结束时间、fileid,可能包括多个demofiledata、sharescreendata消息,demofiledata表示文档共享信息,sharescreendata表示屏幕共享信息。Object类型
|
||||
VoiceID string `json:"voiceid,omitempty"` // 音频 id
|
||||
MeetingVoiceCall *MeetingVoiceCall `json:"meeting_voice_call,omitempty"` // 音频消息内容。包括结束时间、fileid,可能包括多个 demofiledata、sharescreendata 消息,demofiledata 表示文档共享信息,sharescreendata 表示屏幕共享信息。Object 类型
|
||||
}
|
||||
|
||||
// VoipDocShareMessage 音频共享消息
|
||||
type VoipDocShareMessage struct {
|
||||
BaseMessage
|
||||
VoipID string `json:"voipid,omitempty"` // 音频id
|
||||
VoipDocShare *VoipDocShare `json:"voip_doc_share,omitempty"` // 共享文档消息内容。包括filename、md5sum、filesize、sdkfileid字段。Object类型
|
||||
VoipID string `json:"voipid,omitempty"` // 音频 id
|
||||
VoipDocShare *VoipDocShare `json:"voip_doc_share,omitempty"` // 共享文档消息内容。包括 filename、md5sum、filesize、sdkfileid 字段。Object 类型
|
||||
}
|
||||
|
||||
// ExternalRedPacketMessage 互通小红包消息
|
||||
type ExternalRedPacketMessage struct {
|
||||
BaseMessage
|
||||
RedPacket struct {
|
||||
Type uint32 `json:"type,omitempty"` // 红包消息类型。1 普通红包、2 拼手气群红包。Uint32类型
|
||||
Wish string `json:"wish,omitempty"` // 红包祝福语。String类型
|
||||
TotalCnt uint32 `json:"totalcnt,omitempty"` // 红包总个数。Uint32类型
|
||||
TotalAmount uint32 `json:"totalamount,omitempty"` // 红包总金额。Uint32类型,单位为分。
|
||||
Type uint32 `json:"type,omitempty"` // 红包消息类型。1 普通红包、2 拼手气群红包。Uint32 类型
|
||||
Wish string `json:"wish,omitempty"` // 红包祝福语。String 类型
|
||||
TotalCnt uint32 `json:"totalcnt,omitempty"` // 红包总个数。Uint32 类型
|
||||
TotalAmount uint32 `json:"totalamount,omitempty"` // 红包总金额。Uint32 类型,单位为分。
|
||||
} `json:"redpacket,omitempty"`
|
||||
}
|
||||
|
||||
@@ -277,33 +277,33 @@ type ExternalRedPacketMessage struct {
|
||||
type SphFeedMessage struct {
|
||||
BaseMessage
|
||||
SphFeed struct {
|
||||
FeedType uint32 `json:"feed_type,omitempty"` // 视频号消息类型。2 图片、4 视频、9 直播。Uint32类型
|
||||
SphName string `json:"sph_name,omitempty"` // 视频号账号名称。String类型
|
||||
FeedDesc string `json:"feed_desc,omitempty"` // 视频号消息描述。String类型
|
||||
FeedType uint32 `json:"feed_type,omitempty"` // 视频号消息类型。2 图片、4 视频、9 直播。Uint32 类型
|
||||
SphName string `json:"sph_name,omitempty"` // 视频号账号名称。String 类型
|
||||
FeedDesc string `json:"feed_desc,omitempty"` // 视频号消息描述。String 类型
|
||||
}
|
||||
}
|
||||
|
||||
// SwitchMessage 企业切换日志
|
||||
type SwitchMessage struct {
|
||||
MsgID string `json:"msgid,omitempty"` // 消息id,消息的唯一标识,企业可以使用此字段进行消息去重
|
||||
Action string `json:"action,omitempty"` // 消息动作,切换企业为switch
|
||||
Time int64 `json:"time,omitempty"` // 消息发送时间戳,utc时间,ms单位。
|
||||
User string `json:"user,omitempty"` // 具体为切换企业的成员的userid。
|
||||
MsgID string `json:"msgid,omitempty"` // 消息 id,消息的唯一标识,企业可以使用此字段进行消息去重
|
||||
Action string `json:"action,omitempty"` // 消息动作,切换企业为 switch
|
||||
Time int64 `json:"time,omitempty"` // 消息发送时间戳,utc 时间,ms 单位。
|
||||
User string `json:"user,omitempty"` // 具体为切换企业的成员的 userid。
|
||||
}
|
||||
|
||||
// ChatRecord 会话记录消息
|
||||
type ChatRecord struct {
|
||||
Type string `json:"type,omitempty"` // 每条聊天记录的具体消息类型:ChatRecordText/ ChatRecordFile/ ChatRecordImage/ ChatRecordVideo/ ChatRecordLink/ ChatRecordLocation/ ChatRecordMixed ….
|
||||
Content string `json:"content,omitempty"` // 消息内容。Json串,内容为对应类型的json
|
||||
MsgTime int64 `json:"msgtime,omitempty"` // 消息时间,utc时间,ms单位。
|
||||
Content string `json:"content,omitempty"` // 消息内容。Json 串,内容为对应类型的 json
|
||||
MsgTime int64 `json:"msgtime,omitempty"` // 消息时间,utc 时间,ms 单位。
|
||||
FromChatroom bool `json:"from_chatroom,omitempty"` // 是否来自群会话。
|
||||
}
|
||||
|
||||
// CollectDetails 填表消息
|
||||
type CollectDetails struct {
|
||||
ID uint64 `json:"id,omitempty"` // 表项id
|
||||
ID uint64 `json:"id,omitempty"` // 表项 id
|
||||
Ques string `json:"ques,omitempty"` // 表项名称
|
||||
Type string `json:"type,omitempty"` // 表项类型,有Text(文本),Number(数字),Date(日期),Time(时间)
|
||||
Type string `json:"type,omitempty"` // 表项类型,有 Text(文本),Number(数字),Date(日期),Time(时间)
|
||||
}
|
||||
|
||||
// News 图文消息
|
||||
@@ -311,7 +311,7 @@ type News struct {
|
||||
Title string `json:"title,omitempty"` // 图文消息标题
|
||||
Desc string `json:"description,omitempty"` // 图文消息描述
|
||||
URL string `json:"url,omitempty"` // 图文消息点击跳转地址
|
||||
PicURL string `json:"picurl,omitempty"` // 图文消息配图的url
|
||||
PicURL string `json:"picurl,omitempty"` // 图文消息配图的 url
|
||||
}
|
||||
|
||||
// MixedMsg 混合消息
|
||||
@@ -323,22 +323,22 @@ type MixedMsg struct {
|
||||
// MeetingVoiceCall 音频存档消息
|
||||
type MeetingVoiceCall struct {
|
||||
EndTime int64 `json:"endtime,omitempty"` // 音频结束时间
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 音频媒体下载的id
|
||||
DemoFileData []DemoFileData `json:"demofiledata,omitempty"` // 文档分享对象,Object类型
|
||||
ShareScreenData []ShareScreenData `json:"sharescreendata,omitempty"` // 屏幕共享对象,Object类型
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 音频媒体下载的 id
|
||||
DemoFileData []DemoFileData `json:"demofiledata,omitempty"` // 文档分享对象,Object 类型
|
||||
ShareScreenData []ShareScreenData `json:"sharescreendata,omitempty"` // 屏幕共享对象,Object 类型
|
||||
}
|
||||
|
||||
// DemoFileData 文档共享消息
|
||||
type DemoFileData struct {
|
||||
FileName string `json:"filename,omitempty"` // 文档共享名称
|
||||
DemoOperator string `json:"demooperator,omitempty"` // 文档共享操作用户的id
|
||||
DemoOperator string `json:"demooperator,omitempty"` // 文档共享操作用户的 id
|
||||
StartTime int64 `json:"starttime,omitempty"` // 文档共享开始时间
|
||||
EndTime int64 `json:"endtime,omitempty"` // 文档共享结束时间
|
||||
}
|
||||
|
||||
// ShareScreenData 屏幕共享信息
|
||||
type ShareScreenData struct {
|
||||
Share string `json:"share,omitempty"` // 屏幕共享用户的id
|
||||
Share string `json:"share,omitempty"` // 屏幕共享用户的 id
|
||||
StartTime int64 `json:"starttime,omitempty"` // 屏幕共享开始时间
|
||||
EndTime int64 `json:"endtime,omitempty"` // 屏幕共享结束时间
|
||||
}
|
||||
@@ -346,7 +346,7 @@ type ShareScreenData struct {
|
||||
// VoipDocShare 音频共享文档消息
|
||||
type VoipDocShare struct {
|
||||
FileName string `json:"filename,omitempty"` // 文档共享文件名称
|
||||
Md5Sum string `json:"md5sum,omitempty"` // 共享文件的md5值
|
||||
Md5Sum string `json:"md5sum,omitempty"` // 共享文件的 md5 值
|
||||
FileSize uint64 `json:"filesize,omitempty"` // 共享文件的大小
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 共享文件的sdkfile,通过此字段进行媒体数据下载
|
||||
SdkFileID string `json:"sdkfileid,omitempty"` // 共享文件的 sdkfile,通过此字段进行媒体数据下载
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user