CRAIM already has a lead-intake layer, which is important because not every inbound item starts as a human conversation.
Supported intake patterns
The current backend supports public and authenticated intake flows for:
- website forms
- landing forms
- Meta lead ads
- VK lead forms
- Telegram inbound conversations
- Instagram direct message intake
Why intake is a first-class concept
Lead intake should normalize inbound events before they become leads, conversations, qualification triggers, or tasks.
That keeps the system from mixing:
- transport-level webhook data
- CRM record creation
- qualification logic
- conversation handling
Lead sources versus channels
Lead sources represent where new opportunities originate.
Channels represent where conversations happen.
This separation is correct and should stay.
Lead source integrations
The codebase already has a dedicated lead-sources module with a production-oriented design for Meta and a placeholder path for VK.
Recommended routing pattern
- 1Normalize inbound event.
- 2Resolve company configuration.
- 3Create or update the lead record.
- 4Apply default assignment and status rules.
- 5Trigger qualification or follow-up logic only when appropriate.
Practical advice
Do not document lead intake as a side note under generic integrations. It deserves its own documentation because it defines how raw external events become CRM truth.