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 开启时验证:
- 用户消息产生含
markAsReadToken的 webhook 事件; - 到达约定业务节点前不显示已读;
- 到达节点后新 endpoint 返回
200; - 当前消息及更早消息显示已读;
- token 缺失或无效时,不会误确认后续消息;
- 迁移后 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-Timestamp 与 X-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 日: