You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
I have run the test suite locally and all tests pass.
I have updated documentation where required.
I have added an entry to CHANGELOG.md if this change should be recorded.
How has this been tested?
uv run pytest -q — 560 passed
uv run ruff check .
uv run ruff format --check .
uv run ty check
Direct webhook smoke test confirmed three statuses dispatch once with their matching contacts
The regression tests cover both synchronous and asynchronous clients, deliberately reverse the contact order to prove ID-based matching, and verify completed listeners ignore later updates in the same batch.
This intentionally handles only multiple statuses within one change, matching the verified Meta batching behavior discussed in the issue. It does not add support for synthetic multiple-entry or multiple-change payloads.
Thanks — I read that discussion before scoping the change. This PR intentionally handles only multiple statuses within a single change, which matches the verified Meta batching behavior. It does not add support for synthetic multiple-entry or multiple-change payloads.
Do you have a real example of Meta sending multiple entry or multiple changes objects in one POST for message statuses? If so we'd like to see the raw payload (redacted as needed) — that changes the shape of the fix considerably (iterating entries and changes, not just statuses).
Sorry, I misunderstood your question. I do not have a real Meta payload showing multiple entry or changes objects in one message-status POST. Those cases in the issue were synthetic fixture variants, not observed webhook traffic. This PR only handles multiple statuses within a single change.
This branch has not been deployed
No deployments
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Summary
Fixes message status webhook batching so every status in a single
changeis dispatched instead of silently dropping all but the first.MessageStatusper item invalue["statuses"]wa_idoruser_idType of change
Checklist
How has this been tested?
uv run pytest -q— 560 passeduv run ruff check .uv run ruff format --check .uv run ty checkThe regression tests cover both synchronous and asynchronous clients, deliberately reverse the contact order to prove ID-based matching, and verify completed listeners ignore later updates in the same batch.
Breaking changes
None.
Related issues / PRs
Fixes #229.
Reviewer notes
This intentionally handles only multiple statuses within one
change, matching the verified Meta batching behavior discussed in the issue. It does not add support for synthetic multiple-entry or multiple-change payloads.