app/config.py
Add setting WHATSAPP_SHARD_COUNT (default 1).
app/queue/producer.py
def _shard_for(channel_id: UUID) -> int:
n = get_settings().WHATSAPP_SHARD_COUNT
return 0 if n <= 1 else int(str(channel_id).replace("-", "")[:8], 16) % n
def queue_for_channel(base: str, channel_id: UUID) -> str:
n = get_settings().WHATSAPP_SHARD_COUNT
return base if n <= 1 else f"{base}-{_shard_for(channel_id)}"
Call sites
All connector-bound jobs carry a channel_id, so each enqueue(WHATSAPP_QUEUE, …) becomes enqueue(queue_for_channel(WHATSAPP_QUEUE, channel_id), …).
enqueue_connect
enqueue_disconnect
enqueue_send
enqueue_send_media
enqueue_send_location
enqueue_send_reaction
enqueue_mark_read
enqueue_resync_history
enqueue_group_*
enqueue_revoke
enqueue_download_media routes via queue_for_channel(WHATSAPP_MEDIA_QUEUE, …)
enqueue_fetch_avatar routes via queue_for_channel(WHATSAPP_AVATAR_QUEUE, …)
Untouched (consumed by Python workers in the API, not the connector): SCHEDULED, FLOW_RUNS, CHANNEL_PURGE, ORG_PURGE, CHANNEL_REPARENT.