smpp-connector — Sync Contract
Status: populated | Last updated: 2026-04-18
1. Consumers of smpp-connector's Outputs
| Consumer | Interface | Dependency type | Notes |
|---|---|---|---|
dlr-processor | NATS sms.dlr.inbound | Async event | Must process every DLR event exactly once; uses JetStream durable consumer |
routing-engine | NATS operator.health | Async event | Updates Redis health cache; see routing-engine SYNC_CONTRACT |
operator-management-service | NATS operator.health | Async event | Updates operator state records and alerts |
2. Dependencies of smpp-connector
| Dependency | Interface | Failure mode |
|---|---|---|
operator-management-service | GET /internal/operators/{id}/smpp-credentials | Cannot bind new sessions; existing sessions continue until TCP teardown |
| NATS JetStream | Consumer smpp.operator.{operatorId} | No new messages dispatched; messages queue in NATS until consumer reconnects |
| Redis | TPS sliding-window | If Redis unavailable: TPS enforcement disabled (fail-open); log warn; alert fires |
PostgreSQL smpp schema | INSERT/UPDATE message_correlations | If DB unavailable: DLR correlation impossible; DLRs published without messageId (best-effort) |
| MNO SMPP server | TCP + SMPP 3.4 | Cannot send/receive; exponential backoff reconnection; operator.health UNBOUND published |
3. Schema Stability
NATS Event Schemas
| Event | Breaking change policy |
|---|---|
SmsDispatchCommand v1.0 | smpp-connector is the sole consumer; changes by sms-orchestrator require bumping version and updating consumer logic in the same deployment |
DlrInboundEvent v1.0 | dlr-processor depends on this; breaking changes require version bump and migration window |
OperatorHealthEvent v1.0 | Multiple consumers; breaking changes require broad co-ordination |
4. Operator Assignment Contract
Each smpp-connector deployment is assigned a set of operator IDs via the OPERATOR_IDS environment variable (comma-separated UUIDs). It subscribes only to smpp.operator.{operatorId} subjects for its assigned operators. This partitioning is managed by the platform team during deployments.