使用已读回执、正在输入状态和表情回应
在保留消息和表情回应语义的同时,使服务交互具备即时响应能力。
前提条件
一条已接收的消息、操作发送者的权限,以及一个受支持的服务交互。
1. 确定信号的含义
当你的团队已将对话纳入服务工作流时,将收到的消息标记为已读。WhatsApp 同时会将该对话中更早的消息也标记为已读,因此此操作确认的不仅仅是被引用的那条消息。在准备回复时使用正在输入状态,而不是将其作为永久指示器。
2. 使用已发布的操作
对已接收的消息使用将消息标记为已读,POST /v1/whatsapp/messages/{message_id}/read。WhatsApp 会将该消息及对话中所有更早的消息标记为已读。在准备回复时设置 typing_indicator。202 确认回执已被接受处理,但不能证明客户看到了该指示器。没有回执送达 webhook 或可轮询的单独消息。
Meta 接受回执后,已接收的消息可以显示 read_at,同时保持其 received 状态。该回执不会产生计费的出站消息。有关正在输入状态的过期时间和符合条件的消息时长,请参阅已发布的已读回执操作。
3. 处理表情回应变更
订阅 whatsapp.reacted 以接收联系人发来的表情回应变更。表情回应是对被引用消息的注解,而不是另一条 whatsapp.received 文本消息。null emoji 可以表示移除。保留原始 emoji,不要对不同的值做归一化处理。
4. 将历史记录与当前状态分开
使用表情回应日志追踪变更,使用消息的 reactions 获取当前的按发送者状态。未解析的旧提供商引用可能导致没有匹配的表情回应,因此条目缺失并不能证明客户从未做过回应。
5. 测试交互的结束
演练添加、替换和移除表情回应、延迟处理以及中断的回复等场景。确保实际的回答或人工转接跟随在信号之后。
故障排除
如果消息列表中缺少某个表情回应,请改为检查表情回应事件和被引用消息日志。如果正在输入状态在你的应用状态中持续存在,请将其过期时间与已读状态分开排查。有关已发布的 webhook 结构,请参阅 WhatsApp 事件。