You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

使用whatsmeow开发WhatsApp TUI客户端:如何获取单个联系人对话数据?

获取单个联系人对话数据的解决方案(基于whatsmeow)

首先你提到的ParseWebMessage方法,核心是用来解析Web WhatsApp导出的备份消息格式,并非获取实时/历史对话数据的正确途径。要获取单个联系人的对话记录,应该用whatsmeow内置的聊天同步API,具体步骤和代码示例如下:

1. 确定目标联系人的JID

WhatsApp用JID作为唯一标识,获取方式分两种:

  • 已知联系人手机号:直接转换为JID,格式为types.NewJID("不带+号的手机号", "s.whatsapp.net")
  • 从联系人列表获取:遍历cli.Store.Contacts,找到目标联系人对应的JID字段

2. 拉取对话历史

使用Client.LoadChatHistory方法拉取指定JID的聊天记录,支持分页加载,示例代码:

import (
    "go.mau.fi/whatsmeow"
    "go.mau.fi/whatsmeow/types"
)

// 假设已初始化好客户端实例 cli *whatsmeow.Client
targetJID := types.NewJID("1234567890", "s.whatsapp.net") // 替换为目标联系人手机号

// 拉取最近100条消息,可按需调整数量
msgChan, err := cli.LoadChatHistory(targetJID, 100, "", false)
if err != nil {
    // 处理错误逻辑
    panic(err)
}

// 遍历消息通道获取完整消息数据
for msg := range msgChan {
    // msg包含完整消息结构体,可直接提取所需字段
    println("消息内容:", msg.Message.GetConversation())
    println("发送时间:", msg.Timestamp)
    println("发送者:", msg.Sender.String())
}

3. ParseWebMessage的正确使用场景

如果你的需求是导入Web WhatsApp导出的聊天备份(比如.json格式的历史记录),才需要用到这个方法,示例:

// 假设从Web备份中读取到单条消息的原始JSON数据
webMsgJSON := `{"type":"text","id":"AB123...","body":"Hello","from":"1234567890@s.whatsapp.net","timestamp":1699999999}`

// 解析为whatsmeow标准消息事件
chatJID, _ := types.ParseJID("1234567890@s.whatsapp.net")
evt, err := cli.ParseWebMessage(chatJID, []byte(webMsgJSON))
if err != nil {
    // 处理解析错误
}

// 之后可复用现有消息处理逻辑
yourNormalEventHandler(evt)

额外提示

  • 分页加载更早的消息时,LoadChatHistory的第三个参数传入上一页最后一条消息的ID即可
  • 必须确保客户端已完成登录和同步(cli.IsLoggedIn()返回true),否则无法拉取聊天记录

内容的提问来源于stack exchange,提问作者Winter

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.11 01:15:54