← 所有文章
教程

LINE 已读 API 迁移指南:2026 年 10 月前改用 markAsRead

要从 LINE Mark as read API(旧版)迁移,应从 Messaging API 的 webhook 消息事件中读取 markAsReadToken,再调用 POST https://api.line.me/v2/bot/chat/markAsRead。新 endpoint 无需单独申请,并可与 Official Account Chat 配合使用。LINE 将在 2026 年 10 月底停止接受旧 API 的新申请,但并未宣布在该日期停用现有接入。

关键结论

  • LINE 于 2026 年 5 月 18 日宣布:旧版企业功能将在 10 月底关闭新申请,已获批账号仍可继续使用。
  • 新 endpoint 接收 webhook 消息事件里的不透明 markAsReadToken,不能用用户 ID 或 message.id 自行构造。
  • POST /v2/bot/chat/markAsRead 会把指定消息及其之前的消息一并标记为已读,因此调用顺序和业务确认时点都很重要。
  • 新 endpoint 可与 Official Account Chat 共存;旧 API 不可以,所以这不只是改 URL,也是客服流程迁移。
  • UnifyPort 可承接普通账号的独立入站消息流程,但没有 message-read API,也不会产生 LINE 官方的 markAsReadToken

LINE 已读 API 迁移究竟改变了什么

LINE 的 5 月 18 日通知不是“10 月停服”公告。它明确的是:2026 年 10 月底停止接受 Mark as read API(旧版)的新申请,现有获批账号可以继续使用,同时 LINE 正在考虑后续弃用。对于新实现,官方建议改用 Messaging API 的标记消息为已读流程

两套契约不同,不能只替换 endpoint:

决策项Mark as read API(旧版)Messaging API markAsRead
开通方式企业可选功能,需要申请无需单独申请
Chat 功能不能与 Official Account Chat 共用手动标记已读时要求 Chat 开启
输入旧 API 的用户维度契约webhook 消息事件中的 markAsReadToken
作用范围为某个用户的消息显示已读标记 token 对应消息及更早消息为已读
新项目建议不建议官方推荐

如果在 LINE Official Account Manager 中关闭 Chat,用户消息会自动显示已读,这时新增 API 调用没有实际价值。新 endpoint 面向的是保持 Chat 开启、同时由后端决定何时显示已读的团队。

如何迁移到 POST /v2/bot/chat/markAsRead

1. 先定义客服流程里的“已读”

先确定什么业务动作值得向用户显示已读:消息进入队列、客服真正打开,还是自动处理器已接管。不要把“webhook 已送达”直接等同于“客服已阅读”。因为一次调用可能同时确认多条待处理消息,这个选择必须先写进流程规范。

盘点所有旧 API 调用点、重试任务、Official Account 和环境,并记录 Chat 当前是否开启。旧 API 文档说明,启用旧功能会关闭自动已读,而且旧功能不能和 Chat 同时使用,因此账号设置本身就是迁移状态的一部分。

2. 把 webhook read token 当作不透明值保存

用户向 LINE Official Account 发送消息时,Messaging API 的消息事件可能包含 message.markAsReadToken。LINE 表示 read token 没有过期时间,但 reference 也注明该字段并非始终存在。缺失时应记录并保留未读状态,不能从 message.id 推导或伪造 token。

建议把 token 与 webhook event ID、message ID、会话归属、接收时间和处理状态一起保存。不要把它放进分析标签或前端日志;它虽然不是 channel access token,仍是来自 LINE webhook 契约的动作凭据。

3. 调用 Messaging API endpoint

使用与你的流程已实际处理位置相匹配的最新 token:

curl -X POST "https://api.line.me/v2/bot/chat/markAsRead" \
  -H "Authorization: Bearer ${LINE_CHANNEL_ACCESS_TOKEN}" \
  -H "Content-Type: application/json" \
  -d '{"markAsReadToken":"30yhdy232..."}'

官方 reference 记录:成功返回 200 和空 JSON,read token 无效返回 400,rate limit 为每秒 2,000 次。成功调用标记的是指定消息及其之前的全部消息,而不只是你数据库中的一行。

4. 保持会话内顺序和可控重试

按会话处理已读确认。如果消息 B 晚于消息 A,确认 B 也会覆盖 A。若全局 worker 让同一会话的 token 乱序竞争,就可能在内部任务尚未完成时,让用户界面提前显示已读。

调用 LINE 前先持久化“准备确认”的业务状态,调用后再记录响应。把 400 当作契约或数据错误调查;对 timeout 或服务端错误,遵循 LINE 当前的通用重试规则并设置上限,不要无限循环。日志要能回答:尝试了哪个 token、由哪个业务动作触发。

5. 以账号为单位做验收

使用非生产 Official Account 或受控测试会话。在 Chat 开启时验证:

  1. 用户消息产生含 markAsReadToken 的 webhook 事件;
  2. 到达约定业务节点前不显示已读;
  3. 到达节点后新 endpoint 返回 200
  4. 当前消息及更早消息显示已读;
  5. token 缺失或无效时,不会误确认后续消息;
  6. 迁移后 Official Account Chat 仍可正常使用。

新路径和人工 Chat 路径都通过后,再删除旧调用方。现有旧 API 用户仍有时间安全分阶段迁移;10 月是新申请截止日期,不是必须冒险一夜切换的停服日。

UnifyPort 适合放在哪里

官方 markAsReadToken 流程属于 LINE Official Account 和 Messaging API。只要用户的 LINE 客户端必须显示官方已读状态,就应使用这条官方路径。

UnifyPort 解决的是另一类需求:连接普通 LINE 账号后,把支持的入站对话作为标准化 message.received 事件送到后端,并与 WhatsApp、Telegram、TikTok、Zalo 和 X 使用相同 envelope。webhook endpoint 配置 signing_secret 后,会通过 X-Device-TimestampX-Device-Signature 做 HMAC-SHA256 验证。

这个事件不包含 LINE 官方 markAsReadToken。UnifyPort 当前文档也明确没有 message-read API。Official Account 已读 worker 与 UnifyPort 入站 worker 应作为两种独立能力,不要在两者之间转传 token 或假设。

要了解前置决策,可继续阅读不注册 Official Account 接收 LINE 消息以及为什么 LINE analytics polling 不是入站路由

限制与取舍

如果需要 Official Account 身份、Chat、官方已读回执、rich menu、audience 工具或其他 LINE 原生能力,应选择官方 Messaging API;新的 markAsRead endpoint 正是已读需求的官方承接方式。

非官方接口不能授予 Official Account 能力、改变 LINE 的申请政策,也不能把 Official Account 会话标记为已读。后端收到消息也不等于人工已查看。如果团队只需要跨渠道入站队列,可以单独评估;只要 LINE 界面必须出现“已读”,架构中就必须保留官方 endpoint。

FAQ

LINE Mark as read API(旧版)会在 2026 年 10 月停用吗?

没有这项公告。LINE 将在 2026 年 10 月底停止接受新申请,已获批账号仍可继续使用。LINE 表示正在考虑后续弃用,并建议迁移。

新的 LINE markAsRead endpoint 需要申请吗?

不需要。POST /v2/bot/chat/markAsRead 使用 channel access token,以及 Messaging API webhook 消息事件中收到的 markAsReadToken

markAsRead 可以和 LINE Official Account Chat 共用吗?

可以。通过 Messaging API 手动标记已读时,Chat 必须开启;如果 Chat 关闭,入站用户消息会自动标记为已读。

markAsReadToken 会过期吗?

LINE 当前说明 read token 没有过期时间。但仍应仅按团队的运维和数据保留策略保存,并使用与实际确认节点相对应的 token。

UnifyPort 可以把 LINE Official Account 消息标记为已读吗?

不可以。UnifyPort 可为连接的 LINE 账号传递支持的入站消息,但没有 message-read API,也不提供 Messaging API 的官方 markAsReadToken

下一步

将旧调用方映射到 LINE 官方的标记消息为已读指南,并在受控 Official Account 上执行六项验收。如果另一个需求是普通账号的入站路由,再阅读 UnifyPort 的 LINE 授权指南设计第二条独立路径。

来源

以下 LINE 官方来源核验于 2026 年 7 月 25 日: