每条消息的 message_type 有哪些可能值?

B2C Data Innovating with Forum and Technology
Post Reply
muskanislam99
Posts: 270
Joined: Thu Dec 26, 2024 5:46 am

每条消息的 message_type 有哪些可能值?

Post by muskanislam99 »

在 WhatsApp 数据库中的 messages 表(或类似的消息存储表)中,每条消息都会有一个字段来表示其内容类型,这通常被称为 message_type(或在 Android 数据库中常见的 media_wa_type)。这个字段对于 WhatsApp 客户端至关重要,因为它决定了应用程序如何解析、渲染和处理特定消息。

虽然 WhatsApp 不会公开其内部用于这些消息类型的精确数值或字符串映射,但根据其功能和行业标准,我们可以列出其可能包含的常见消息类型及其用途:

常见的 message_type 可能值:
TEXT (文本消息):

这是最基本、最常见的消息类型,表示纯文本内容。可能还包括表情符号(emojis),它们通常作为文本的一部分编码。
IMAGE (图片消息):

表示消息中包含一张图片。客户端会显示图片的缩略图,并允许用户点击查看完整图片。数据库中会存储图片的引用(如本地路径或服务器上的加密 URL)、大小、宽度、高度等元数据。
VIDEO (视频消息):

表示消息中包含一段视频。类似图片,会显示视频的缩略图/预览,并允许用户播放视频。数据库中存储视频的引用、大小、时长等元数据。
AUDIO (音频消息):

表示消息中包含一段音频,最常见的是语音消息。客户端会显示一个播放器控件。数据库中存储音频的引用、大小、时长等元数据。
DOCUMENT / FILE (文档/文件消息):

表示消息中包含一个通用文件,如 PDF、DOCX、XLSX、ZIP 等。客户端会显示文件图标、文件名和文件大小,并允许用户下载和打开。
GIF (GIF 动图):

表示消息中包含一个 GIF 动画。通常会以循环 尼日利亚 whatsapp 数据库 播放的形式显示。虽然本质上是视频,但 WhatsApp 可能会将其作为一个独立的类型来区分处理。
LOCATION (位置消息):

表示消息中包含地理位置信息(经纬度)。客户端通常会将其渲染为带有地图预览的卡片,点击可打开地图应用。
CONTACT (联系人卡片消息):

表示消息中包含一个或多个联系人的信息(姓名、电话号码等)。客户端会显示为可直接添加到通讯录的卡片。
CALL_LOG / CALL_MISSED (通话记录/未接来电):

记录 WhatsApp 语音或视频通话的事件,例如“未接来电”、“已拨出电话”等。这些通常是系统生成的消息。
GROUP_NOTIFICATION / SYSTEM_MESSAGE (群组通知/系统消息):

这些是 WhatsApp 自动生成的,用于通知群聊成员的特定事件,例如:
“X 加入了群聊”
“Y 离开了群聊”
“群组名称已更改为 Z”
“安全码已更改”
“某成员成为管理员”等。
REVOKED / DELETED (已撤回/已删除消息):

当消息被发送者使用“删除所有人”功能撤回时,原始消息的 message_type 会被更新为这种类型,或者被一个新消息替换,以在界面上显示“此消息已删除”。客户端会根据此类型隐藏原始内容。
LIVE_LOCATION (实时位置共享):

表示用户正在实时共享其地理位置。这是一种动态消息类型,位置信息会持续更新。
PAYMENT (支付消息):

如果 WhatsApp Pay 或类似支付功能可用,此类型用于表示支付交易的通知或详情。
PRODUCT / CATALOG (商品/目录消息):

商家账户发送的,包含商品图片、描述、价格和购买链接等信息的商业消息。
UNSUPPORTED (不支持的消息类型):

当客户端收到一个它不识别或无法渲染的 message_type 时,可能会将其标记为这种类型,并显示一个通用的提示,例如“您收到一条最新版 WhatsApp 才能看到的消息”。
EPHEMERAL_TEXT / EPHEMERAL_MEDIA (限时消息/阅后即焚媒体):

对于“限时消息”功能,消息的 message_type 可能仍然是 TEXT、IMAGE 等,但会有一个额外的标志位或元数据来指示其限时属性(如 ephemeral_duration)。
对于“阅后即焚媒体”(View Once),它可能是一个独立的 message_type 值,或者也是一个与 IMAGE/VIDEO 结合的标志位,表示该媒体文件只能被查看一次。
内部表示:
在数据库内部,message_type 通常会以**整数(Integers)**的形式存储,每个整数值对应一种特定的消息类型。例如,0 可能代表文本,1 代表图片,2 代表视频,依此类推。使用整数可以最大化存储效率和查询速度,而客户端应用程序则维护一个内部的映射表,将这些整数值翻译成对应的渲染逻辑。
Post Reply