Voice note played status + played_at on messages
Released: June 17, 2026
Public API — played_at on messages Added
Section titled “Public API — played_at on messages ”Meta emits a played status webhook when a recipient first plays
an outbound voice note (audio with voice: true). Kirimdev now
stores that moment on the message row as played_at (ISO-8601) and
returns it from GET /v1/{phone_number_id}/messages/{id} and list
endpoints when present.
The timestamp is taken from Meta’s statuses[].timestamp on the
webhook (converted to UTC), not the worker’s processing time — so
played_at aligns with the forwarded message.status payload your
subscriber already receives.
The delivery status field is unchanged — it still cycles
sent → delivered → read (or failed). played_at is an
independent engagement signal, not a replacement for read.
Webhooks — message.status passthrough Changed
Section titled “Webhooks — message.status passthrough ”message.status events forwarded from Meta may now include
statuses[].status: "played" for voice notes. Subscribers already
receive the raw Meta JSON — no envelope change. Handle played in
your status state machine alongside sent, delivered, read, and
failed.
Dashboard — voice played analytics Changed
Section titled “Dashboard — voice played analytics ”The Analytics Voice played KPI now counts only outbound audio
rows with a played_at stamp, and the percentage denominator on the
Messages subject is delivered voice notes (metadata.voice = true), capped at 100%. The inbox mic indicator appears only on voice
notes (not generic audio attachments).