algos crm.
CRM Documentation
The same product docs available in the dashboard—guides for setup, architecture, modules, and day-to-day use.
Channels overview
Omnichannel Channels Engine lets each tenant connect inbound sources. Connections are per-company; webhooks are per-connection UUID.
Status matrix
| Provider key | Label | Adapter registered | Notes |
|---|---|---|---|
generic_webhook |
Generic Webhook | Yes | Best for local E2E tests |
facebook_lead_ads |
Facebook Lead Ads | Yes | Meta leadgen + Graph fetch |
whatsapp_cloud |
WhatsApp Cloud API | Yes | Inbound + Inbox reply |
website_form |
Website Forms | No (UI listed) | Use dedicated website webhook today; builder Planned |
facebook_messenger |
Facebook Messenger | No | Planned |
instagram_lead_forms |
Instagram Lead Forms | No | Planned |
instagram_dm |
Instagram DM | No | Planned |
public_api |
Public API | No | Planned |
Catalog: config/channels.php.
Registration: app/Providers/ChannelServiceProvider.php.
Multi-tenant model
flowchart TB
subgraph TenantA
ConnA[ChannelConnection A]
UUIDA["/webhooks/channels/{uuid-a}"]
end
subgraph TenantB
ConnB[ChannelConnection B]
UUIDB["/webhooks/channels/{uuid-b}"]
end
UUIDA --> ConnA --> LeadsA[Leads / Inbox A]
UUIDB --> ConnB --> LeadsB[Leads / Inbox B]
Each connection stores (as applicable): encrypted access token, webhook secret, verify token, external page/phone id, status/health.
Pipeline
sequenceDiagram
participant Ext as Provider
participant WH as ChannelWebhookController
participant Ing as WebhookIngestionService
participant Q as Queue channels
participant Job as ProcessChannelWebhookJob
participant Ad as Adapter
participant CRM as Leads / Conversations
Ext->>WH: GET verify / POST event
WH->>Ing: ingest signed payload
Ing->>Q: dispatch job
WH-->>Ext: 202 Accepted
Q->>Job: process
Job->>Ad: process event
Ad->>CRM: create/update records
Permissions
| Permission | Who |
|---|---|
view.channels |
List/show connections |
manage.channels |
Create, test, sync, disconnect, secrets, delete |
view.inbox / reply.inbox / assign.inbox |
Messaging UI |
UI entry
Administration → Channels
Actions on a connection: Test, Sync, Retry (on error), Disconnect, Regenerate webhook secret, Delete.
Environment
CHANNELS_WEBHOOK_QUEUE=channels
CHANNELS_WEBHOOK_RATE_LIMIT=60
META_APP_SECRET=
META_GRAPH_VERSION=v21.0
Workers must listen to channels (see Queues).
Local Meta testing
Meta cannot call 127.0.0.1. Use ngrok (or deploy) and set the Callback URL to:
https://{ngrok-host}/webhooks/channels/{uuid}