Open su-chang opened 2 years ago
图片下载建议采用lazy load的方式,如果没有接收到请求,就不下载图片。 另外,通过本地缓存保存下来每个富媒体消息图片上传情况,如果请求下载的时候没有上传完,则做一个循环等待,并设置一个等待最大时间
bot的手机端发送的图片消息,接收到的日志如下。当 onMediaUploaded 事件中 hasMedia 字段为false的情况下,无法获取到图片信息,只能拿到缩率图。
16:20:32 SILL PuppetWhatsApp Manager onMessageCreate({
"id":{
"fromMe":true,
"remote":"120363021332004743@g.us",
"id":"3A1E482D51D4B8BBC35F",
"_serialized":"true_120x6302x33x00x74x@g.us_3A1E482D51D4B8BBC35F"
},
"ack":0,
"hasMedia":false,
"body":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABsSFBcUERsXFhceHBsgKEIrKCUlKFE6PTBCYFVlZF9VXVtqeJmBanGQc1tdhbWGkJ6jq62rZ4C8ybqmx5moq6T/2wBDARweHigjKE4rK06kbl1upKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKT/wgARCABIACkDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAQCAwUBBv/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAAAW1MHcG84gd5KMqWzh6e5bVCKN8urxfOaSEtPSqlEMwsgZi17NPL6SUWxRIHAVHNCygA//8QAGhEAAwADAQAAAAAAAAAAAAAAARARAAIhMf/aAAgBAgEBPwCZIhw9zY0os+sv/8QAGBEAAgMAAAAAAAAAAAAAAAAAAAEQITD/2gAIAQMBAT8Al2hZ/wD/xAArEAACAQMCBQIGAwAAAAAAAAABAgADBBESIQUTIjFBUWEQFFJxgZEjJHL/2gAIAQEAAT8AoXCMwXBBMtV65cD+u0qnFVUHYCE4+FsxatTGPMJZKZKDJnzNww0mmftASa5DqQ2IylthOWZSRadwmN95UOkADzvKbfzZMqHN43+Zpz2micwc9SPBherVUFKeQPQzNZG1GkwEpOXumJBG3mYAWah6wHLAEZlpfG0pFNGRnMpsLi0WocLqlREW4wjatu8YZHU0wv1RFIcEiV9hFbTw+mvtKD8y4Kn0jUtu85Z9pdKekLtiVerSB5IjUj8uo9hKWhLg6iAcTnJjdh+5zaf1L+5TFS5rhaffEXhVw7rkAAHeGyRU3qMfzLy2o0GD5DBvUw1rYHq0z5i09pa39rSqMxGD2GBF4xb+Ax/E4lxE1nXlMyqBuJWqOydTk/cwmajP//4AAwD/2Q==",
"type":"image",
"timestamp":1644913232,
"from":"8613x2x7x8x2x@c.us",
"to":"120363021332004743@g.us",
"deviceType":"ios",
"isForwarded":false,
"forwardingScore":0,
"isStatus":false,
"isStarred":false,
"fromMe":true,
"hasQuotedMsg":false,
"vCards":[],
"mentionedIds":[],
"isGif":false,
"isEphemeral":false,
"links":[]
})
16:20:57 SILL PuppetWhatsApp Manager onMessageAck({
"id":{
"fromMe":true,
"remote":"120363021332004743@g.us",
"id":"3A1E482D51D4B8BBC35F",
"_serialized":"true_120x6302x33x00x74x@g.us_3A1E482D51D4B8BBC35F"
},
"ack":1,
"hasMedia":false,
"body":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABsSFBcUERsXFhceHBsgKEIrKCUlKFE6PTBCYFVlZF9VXVtqeJmBanGQc1tdhbWGkJ6jq62rZ4C8ybqmx5moq6T/2wBDARweHigjKE4rK06kbl1upKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKT/wgARCABIACkDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAQCAwUBBv/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAAAW1MHcG84gd5KMqWzh6e5bVCKN8urxfOaSEtPSqlEMwsgZi17NPL6SUWxRIHAVHNCygA//8QAGhEAAwADAQAAAAAAAAAAAAAAARARAAIhMf/aAAgBAgEBPwCZIhw9zY0os+sv/8QAGBEAAgMAAAAAAAAAAAAAAAAAAAEQITD/2gAIAQMBAT8Al2hZ/wD/xAArEAACAQMCBQIGAwAAAAAAAAABAgADBBESIQUTIjFBUWEQFFJxgZEjJHL/2gAIAQEAAT8AoXCMwXBBMtV65cD+u0qnFVUHYCE4+FsxatTGPMJZKZKDJnzNww0mmftASa5DqQ2IylthOWZSRadwmN95UOkADzvKbfzZMqHN43+Zpz2micwc9SPBherVUFKeQPQzNZG1GkwEpOXumJBG3mYAWah6wHLAEZlpfG0pFNGRnMpsLi0WocLqlREW4wjatu8YZHU0wv1RFIcEiV9hFbTw+mvtKD8y4Kn0jUtu85Z9pdKekLtiVerSB5IjUj8uo9hKWhLg6iAcTnJjdh+5zaf1L+5TFS5rhaffEXhVw7rkAAHeGyRU3qMfzLy2o0GD5DBvUw1rYHq0z5i09pa39rSqMxGD2GBF4xb+Ax/E4lxE1nXlMyqBuJWqOydTk/cwmajP//4AAwD/2Q==",
"type":"image",
"timestamp":1644913232,
"from":"8613x2x7x8x2x@c.us",
"to":"120363021332004743@g.us",
"deviceType":"ios",
"isForwarded":false,
"forwardingScore":0,
"isStatus":false,
"isStarred":false,
"fromMe":true,
"hasQuotedMsg":false,
"vCards":[],
"mentionedIds":[],
"isGif":false,
"isEphemeral":false,
"links":[]
})
16:20:57 SILL PuppetWhatsApp Manager onMediaUploaded({
"id":{
"fromMe":true,
"remote":"120363021332004743@g.us",
"id":"3A1E482D51D4B8BBC35F",
"_serialized":"true_120x6302x33x00x74x@g.us_3A1E482D51D4B8BBC35F"
},
"ack":1,
"hasMedia":false,
"body":"/9j/4AAQSkZJRgABAQAAAQABAAD/2wBDABsSFBcUERsXFhceHBsgKEIrKCUlKFE6PTBCYFVlZF9VXVtqeJmBanGQc1tdhbWGkJ6jq62rZ4C8ybqmx5moq6T/2wBDARweHigjKE4rK06kbl1upKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKSkpKT/wgARCABIACkDASIAAhEBAxEB/8QAGgAAAgMBAQAAAAAAAAAAAAAAAAQCAwUBBv/EABYBAQEBAAAAAAAAAAAAAAAAAAABAv/aAAwDAQACEAMQAAAAW1MHcG84gd5KMqWzh6e5bVCKN8urxfOaSEtPSqlEMwsgZi17NPL6SUWxRIHAVHNCygA//8QAGhEAAwADAQAAAAAAAAAAAAAAARARAAIhMf/aAAgBAgEBPwCZIhw9zY0os+sv/8QAGBEAAgMAAAAAAAAAAAAAAAAAAAEQITD/2gAIAQMBAT8Al2hZ/wD/xAArEAACAQMCBQIGAwAAAAAAAAABAgADBBESIQUTIjFBUWEQFFJxgZEjJHL/2gAIAQEAAT8AoXCMwXBBMtV65cD+u0qnFVUHYCE4+FsxatTGPMJZKZKDJnzNww0mmftASa5DqQ2IylthOWZSRadwmN95UOkADzvKbfzZMqHN43+Zpz2micwc9SPBherVUFKeQPQzNZG1GkwEpOXumJBG3mYAWah6wHLAEZlpfG0pFNGRnMpsLi0WocLqlREW4wjatu8YZHU0wv1RFIcEiV9hFbTw+mvtKD8y4Kn0jUtu85Z9pdKekLtiVerSB5IjUj8uo9hKWhLg6iAcTnJjdh+5zaf1L+5TFS5rhaffEXhVw7rkAAHeGyRU3qMfzLy2o0GD5DBvUw1rYHq0z5i09pa39rSqMxGD2GBF4xb+Ax/E4lxE1nXlMyqBuJWqOydTk/cwmajP//4AAwD/2Q==",
"type":"image",
"timestamp":1644913232,
"from":"8613x2x7x8x2x@c.us",
"to":"120363021332004743@g.us",
"deviceType":"ios",
"isForwarded":false,
"forwardingScore":0,
"isStatus":false,
"isStarred":false,
"fromMe":true,
"hasQuotedMsg":false,
"vCards":[],
"mentionedIds":[],
"isGif":false,
"isEphemeral":false,
"links":[]
})
Related issue: https://github.com/pedroslopez/whatsapp-web.js/issues/1200
案例
手机端发送一张图片,从日志来分析会经历以下几个阶段:
创建阶段
手机端发送图片开始时(可能还未完全上传成功),会收到一条包含
base64
形式缩率图的message_create
事件。此时hasMedia
字段的值为 false。服务端确认阶段
手机端发送图片成功后,会收到一条包含
base64
形式缩率图的message_ack
事件。此时hasMedia
字段的值为 false。服务端图片上传阶段
服务端上传图片结束后,会收到
media_uploaded
事件hasMedia
字段为 true,且body
字段为空值。hasMedia
字段为 false,且body
仍为该图片的缩率图(base64
形式)。设备端确认阶段
图片上传成功后,会收到
message_ack
事件,且hasMedia
字段为 true,且body
字段为空值。关于 Message ACK
日志
方案
使用
messageImage
方法时imageType
字段可以恢复使用。PUPPET.ImageType.Thumbnail
时,直接使用body
字段中的base64
作为图片PUPPET.ImageType.Artwork
时,需要调用downloadMedia
方法需要控制调用
downloadMedia
方法的时机,必须要在接收到media_uploaded
事件后,且hasMedia
字段为 true 时方可执行。待确认
downloadMedia
方法的耗时问题