Skip to content

feat(messages): add openedAt/clickedAt engagement fields to Message#11

Merged
tuyakhov merged 2 commits into
mainfrom
claude/gallant-einstein-56qo2v
Jul 8, 2026
Merged

feat(messages): add openedAt/clickedAt engagement fields to Message#11
tuyakhov merged 2 commits into
mainfrom
claude/gallant-einstein-56qo2v

Conversation

@tuyakhov

@tuyakhov tuyakhov commented Jul 8, 2026

Copy link
Copy Markdown
Contributor

Summary

SenderKit now records provider-reported email opens and link clicks on messages and emits matching outgoing webhook events. This brings the Python SDK up to date with those new read surfaces. Purely additive and backwards compatible.

SDK

  • Message gains two fields, hydrated from messages.get / messages.list (default None when absent from the payload):

    • opened_at — first provider-reported email open (ISO 8601 string), or None until opened.
    • clicked_at — first provider-reported link click (ISO 8601 string), or None until a link is clicked.

    Both are set once on the first occurrence and are never updated afterward.

Webhooks

  • Documents two new subscribable event types: message.opened and message.clicked. These are engagement signals and never change a message's status (delivered stays terminal); the message.clicked payload additionally carries the clicked link.

Related issues

Checklist

  • ruff check . passes
  • ruff format . applied
  • mypy src passes
  • pytest passes (62 passed)
  • PR title / commits follow Conventional Commits
  • Docs / docstrings updated

The TypeScript and PHP SDKs receive the equivalent field additions in their own PRs.

🤖 Generated with Claude Code


Generated by Claude Code

Adds the new read-only engagement timestamps returned by the messages API:

- opened_at: first provider-reported email open (ISO 8601), or None.
- clicked_at: first provider-reported link click (ISO 8601), or None.

Both are set once on the first occurrence and hydrated on the Message model.
README documents the two new subscribable webhook events, message.opened and
message.clicked (the latter carries the clicked link).
@codecov

codecov Bot commented Jul 8, 2026

Copy link
Copy Markdown

Codecov Report

✅ All modified and coverable lines are covered by tests.

📢 Thoughts on this report? Let us know!

Asserts the new engagement timestamps hydrate from the messages API and
default to None when absent from the payload.
@tuyakhov tuyakhov merged commit 577bdba into main Jul 8, 2026
9 checks passed
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants