Skip to main content

Sendblue iMessage webhook channel for Zeno.

Project description

zeno-channel-sendblue

Sendblue iMessage webhook channel for Zeno. The first webhook-style channel — use it as the template for any Channel that hosts its own HTTP inbound transport.

Hosts a Starlette + uvicorn server for Sendblue's inbound webhook and posts outbound messages to Sendblue's REST API. Verifies the shared-secret header, enforces a phone-number allowlist, and fires a typing indicator per accepted inbound message.

Install

uv add 'zeno-framework[sendblue]'
# or, without the AI package:
uv add zeno-channel-sendblue

Minimal usage

from zeno.channels.sendblue.channel import SendblueChannel

channel = SendblueChannel(
    api_key_id="...",
    api_secret="...",
    from_number="+15550001111",
    signing_secret="...",            # shared with Sendblue dashboard
    allowed_numbers=("+31600000000",),
    host="127.0.0.1",
    port=8080,
    webhook_path="/webhook",
)
# Then pass it to ZenoApp(channels=[channel]) exactly like any Channel.

See apps/zeno-example-imessage for the complete runnable reference app, including ngrok / Cloudflare Tunnel setup notes.

Behavior

  • Signature verification: Sendblue echoes the configured secret in the sb-signing-secret header. Bad or missing signature → 401. Every other drop (non-iMessage service, group message, unallowlisted sender, malformed JSON, queue full) returns 200 so Sendblue doesn't retry and so the 401 audit signal stays meaningful.
  • Inbound → IncomingMessage: user_id = from_number (E.164), text = content, thread_key = from_number so replies route back. A non-empty media_url becomes an image Attachment.
  • Outbound: text + optional single image via POST /api/send-message. Content over 18,996 chars is truncated (WARNING log) to fit Sendblue's limit.
  • Capabilities: supports_images=True, supports_typing=True, others False.

Testing

uv run pytest packages/zeno-channel-sendblue

Tests use httpx.MockTransport for outbound and the Starlette TestClient for the router. No Sendblue secrets required in CI.

Part of the Zeno framework.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

zeno_channel_sendblue-1.0.0rc1.tar.gz (13.6 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

zeno_channel_sendblue-1.0.0rc1-py3-none-any.whl (11.3 kB view details)

Uploaded Python 3

File details

Details for the file zeno_channel_sendblue-1.0.0rc1.tar.gz.

File metadata

  • Download URL: zeno_channel_sendblue-1.0.0rc1.tar.gz
  • Upload date:
  • Size: 13.6 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? Yes
  • Uploaded via: twine/6.1.0 CPython/3.13.12

File hashes

Hashes for zeno_channel_sendblue-1.0.0rc1.tar.gz
Algorithm Hash digest
SHA256 7e4fcca586ce1e26cf0c6ee63c83367f8a74f60b29c93a5102596aa30ed89a50
MD5 fbeccdd308767feb535232713beb9496
BLAKE2b-256 725026f5d4bd7e80c0844815b28e6b2dd06b2c7725bac0b1fffbbf6e664aafb2

See more details on using hashes here.

Provenance

The following attestation bundles were made for zeno_channel_sendblue-1.0.0rc1.tar.gz:

Publisher: publish.yml on nkootstra/zeno

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

File details

Details for the file zeno_channel_sendblue-1.0.0rc1-py3-none-any.whl.

File metadata

File hashes

Hashes for zeno_channel_sendblue-1.0.0rc1-py3-none-any.whl
Algorithm Hash digest
SHA256 384de0ca89037698f6579e4795835eb5709565a1ca064363adab805c20ef2c26
MD5 b0d1f32d5426b9a9d75840966c082187
BLAKE2b-256 667795bf7f81464500d2fb3d923598a375ce252f7b368954b39212f3cb4781c5

See more details on using hashes here.

Provenance

The following attestation bundles were made for zeno_channel_sendblue-1.0.0rc1-py3-none-any.whl:

Publisher: publish.yml on nkootstra/zeno

Attestations: Values shown here reflect the state when the release was signed and may no longer be current.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page