Message authentication flow
1
Message arrives via channel connector
The inbound message enters through a channel connector (WhatsApp, Telegram) and is normalized into Celai’s internal message format.
2
Command authorization check
CommandsAuthMiddleware inspects the message for slash commands. If the message is a command, it verifies whether commands are enabled for this deployment and whether the command is authorized.3
Phone number normalization
PayhubAuthMiddleware normalizes the sender’s phone number to a standard international format before any identity lookup occurs.4
Identity service query
PayhubAuthMiddleware queries the identity service using the normalized phone number to fetch the sender’s profile and compliance status.5
Identity found — metadata injection
If the sender is found, their identity is injected into the message metadata as a
ContextUser object containing verification status, payment method summaries, and identity details. The message proceeds to the LogicRouter for agent selection.6
Identity service unavailable — graceful degradation
If the identity service returns a
404 or is unreachable, the unavailable_service flag is set on the message metadata. The message is not blocked — it is routed to the service unavailable agent for graceful degradation.7
LogicRouter evaluates authenticated identity
The LogicRouter reads the authenticated identity from the message metadata and selects the appropriate agent: onboarding, sender home, blocked, pending CIP, or service unavailable.
Phone normalization
All phone numbers are normalized to a standard international format before any identity lookup. This prevents identity spoofing through different phone number format representations. For example,+1-555-0100, 15550100, and +15550100 all resolve to the same canonical form before the identity service is queried. Without normalization, a sender could potentially present different identities by varying their phone number format.
ContextUser
The authenticated sender object provides agents with the following verified data:
Agents receive this object as part of the message context. They cannot modify it, and they cannot access fields beyond what the identity service provides.
Session tokens
JWT tokens with EC key pairs secure communication between Lola Send and the frontend web widgets used for identity verification and card authorization:
Tokens are generated when the agent creates a ticket for an out-of-band operation (CIP verification, card authorization). The widget uses the token to authenticate its requests to Lola Send’s callback endpoints.
Authentication is non-blocking by design. If the identity service is unavailable, the sender is routed to a graceful degradation agent rather than receiving an error. This ensures the messaging channel remains responsive even during backend outages.