Workflow: WhatsApp → Lead / Suport
Module implicate: WhatsApp (Inbox · Bots · Campaigns · Templates) · WhatsApp API (Notificări Events) · Leads · Tickets · Marketing Automation
Cine îl folosește: Sales · Customer Support · Marketing
Durata tipică: Real-time (mesaje incoming) + ciclu campanie (onetime/recurring)
Overview
CRMConnect are trei module WhatsApp distincte cu scopuri complet diferite:
| Modul | Scop | Necesită Meta API? |
|---|---|---|
whatsapp |
Inbox bidirectional, bots, campanii bulk, auto-lead | Da — full setup |
whatsapp_api |
Notificări outbound la events CRM (lead creat, factură, tichet etc.) | Da — shared credentials |
whatsapp_chat |
Widget embed click-to-chat (snippet HTML terță parte) | Nu — nu are API propriu |
Acest workflow acoperă modulul principal whatsapp (inbox + auto-lead + boti + campanii) și whatsapp_api (notificări events).
Atenție: Crearea automată de tichete din conversații WhatsApp este parțial implementată (AI colectează datele dar insert-ul în
tblticketslipsește din cod). Tichetele se creează manual de către staff din interfața de chat.
Diagrama fluxului
[SETUP — admin, o singură dată]
│
├── Meta App + WhatsApp Business Account configurat
├── Webhook înregistrat la Meta: {site_url}/whatsapp/webhook/getdata
├── Număr de telefon conectat în WhatsApp → Numbers
├── Templates încărcate din Meta (sync manual sau cron orar)
└── Auto-lead activat (opțional): whatsapp_auto_lead_settings = 'enable'
│
↓
[MESAJ INCOMING]
│
├── Meta trimite webhook POST la /whatsapp/webhook/getdata
├── Sistem caută numărul în: leads → contacts → staff
│
├── NUMĂR IDENTIFICAT → mapează conversația la înregistrarea existentă
│ rel_type = 'leads' / 'contacts' / 'staff'
│
└── NUMĂR NECUNOSCUT:
├── auto_lead ACTIVAT → crează Lead automat
│ status = whatsapp_lead_status
│ source = whatsapp_lead_source
│ assigned = whatsapp_lead_assigned
│ rel_type = 'leads'
│
└── auto_lead DEZACTIVAT (implicit) → rel_type = 'general'
staff vede conversația ca necunoscută în inbox
│
↓
[BOT (dacă activ)]
│
├── BotHandler::processBots() evaluează TOATE bot-urile active
├── Trigger match → trimite răspuns automat (text / template / meniu / AI)
└── Fără match → mesajul rămâne în inbox pentru răspuns manual
│
↓
[RĂSPUNS STAFF / ESCALADARE]
│
├── Staff deschide /admin/whatsapp → inbox
├── Vede conversațiile grupate: identified (lead/contact) + general
├── Răspunde direct sau folosește Quick Replies
└── Creează manual Tichet din conversație (dacă suportul o cere)
│
↓
[CAMPANIE BULK (flux separat)]
│
├── Creat template Meta aprobat
├── Campanie nouă: tip (onetime/recurring/custom), destinatari, număr expeditor
├── send_now=1 sau scheduled_send_time planificat
└── Cron execută trimiterea → status per destinatar: failed(0) / success(2) / invalid(3)
│
↓
[NOTIFICĂRI EVENTS — modul whatsapp_api]
│
├── Lead creat → template mapat pe categoria 'leads' trimis automat
├── Tichet creat → template mapat pe 'ticket' trimis automat
├── Factură adăugată → template mapat pe 'invoice'
└── Plată înregistrată → template mapat pe after_payment_added
[CONVERSAȚIE ÎNCHISĂ / LEAD CALIFICAT ✓]
Pas cu pas
1. Setup Meta + conexiune (admin)
Unde: /admin/whatsapp → Settings → Connection tab
Condiție: Toate câmpurile de mai jos sunt is_admin() only — staff obișnuit nu poate accesa.
| Câmp / Opțiune | Descriere |
|---|---|
whatsapp_business_id |
Meta Business ID (din Meta Business Suite) |
whatsapp_business_account_id |
WABA ID (WhatsApp Business Account) |
whatsapp_access_token |
System User Token permanent (nu token temporar de user) |
whatsapp_webhook_token |
Orice string ales de voi — folosit la verificarea webhook-ului Meta |
whatsapp_meta_app_id |
App ID din Meta for Developers |
whatsapp_meta_app_secret |
App Secret din Meta for Developers |
URL webhook de înregistrat la Meta:
{site_url}/whatsapp/webhook/getdata
Subscripții necesare la Meta: messages + message_status_updates.
Numerele de telefon: după conectarea credențialelor, numerele se adaugă în WhatsApp → Numbers (via OAuth sau manual). Setați un număr ca default pentru trimiteri.
Templates: WhatsApp → Templates → Load Templates (sincronizează din Meta). Cron-ul reîmprospătează automat la fiecare oră.
2. Configurare auto-lead (opțional)
Unde: /admin/whatsapp → Settings → Auto Lead tab
| Opțiune | Descriere |
|---|---|
whatsapp_auto_lead_settings |
'enable' activează crearea automată · 'disable' (implicit) dezactivează |
whatsapp_lead_status |
ID status lead (din /admin/leads_status) setat la creare |
whatsapp_lead_source |
ID sursă lead (din /admin/leads_sources) setat la creare |
whatsapp_lead_assigned |
staffid căruia i se asignează automat lead-ul |
Flux de identificare număr (în ordine):
- Caută în
tblleads.phonenumber(normalizat fără caractere non-numerice) - Caută în
tblcontacts.phonenumber - Caută în
tblstaff.phonenumber - Dacă niciun match → crează lead (dacă auto_lead enabled) sau lasă ca
general
3. Configurare boti (opțional)
Unde: /admin/whatsapp → Bots → New Bot
Tipuri de trigger (reply_type):
| Valoare | Trigger |
|---|---|
1 |
Mesaj exact match cu trigger keyword |
2 |
Mesajul conține trigger keyword |
3 |
Primul mesaj din istoricul conversației |
4 |
Keyword match (sinonime incluse) |
5 |
Mesaj în intervalul de program (trigger = "09:00-17:00") |
6 |
Mesaj în afara programului |
7 |
Primul mesaj din sesiunea curentă (fereastră 24h) |
8 |
Utilizatorul idle X minute |
9 |
Utilizatorul cere agent uman |
10 |
Match sinonime |
11 |
Reminder timeout conversație |
12 |
Niciun răspuns de la staff în X minute |
13 |
Conversație închisă + cerere rating |
Tipuri de răspuns (bot_type):
| Valoare | Răspuns |
|---|---|
1 |
Text simplu |
2 |
Template Meta aprobat |
3 |
Meniu listă (multi-nivel, stare păstrată în interaction_menu_state) |
4 |
Flow bot (graf noduri JSON în flow_data) |
5 |
Fișier media |
6 |
Locație GPS |
7 |
Butoane interactive |
11 |
Card contact |
12 |
Răspuns AI (OpenAI / Gemini — necesită API key configurat) |
13 |
Rating cu stele |
Configurare AI (pentru bot_type=12):
Unde: Settings → AI tab: alegeți provider (openai/gemini), introduceți API key, setați whatsapp_openai_status:
auto= AI răspunde automat la toate mesajele fără match pe alți botimanual= AI generează sugestie de răspuns vizibilă staff-ului, dar nu trimite automat
4. Inbox și răspuns manual
Unde: /admin/whatsapp (necesită permisiunea whatsapp_chat → view)
Conversațiile sunt grupate după rel_type:
leads— conversații legate de lead-uricontacts— conversații legate de contactestaff— conversații cu angajațigeneral— numere neidentificate (auto_lead dezactivat)
Staff poate:
- Răspunde cu text, fișiere, Quick Replies (
tblquick_replies) - Asigna conversația altui staff
- Crea manual un Tichet din interfață (tichetul NU se crează automat)
- Vedea istoricul complet al mesajelor (
tblwhatsapp_interaction_messages)
5. Campanii bulk
Unde: /admin/whatsapp → Campaigns → New Campaign
Condiții prealabile:
- Template Meta aprobat (
status = 'APPROVED'întblwhatsapp_interaction_templates) - Cel puțin un număr de telefon configurat
Câmpuri campanie:
| Câmp | Descriere |
|---|---|
name |
Denumirea campaniei |
rel_type |
Destinatari: leads · contacts · whatsapp_groups · whatsapp_contacts |
template_id |
Template Meta aprobat |
number_id |
Numărul expeditor (din tblwhatsapp_numbers) |
campaign_type |
onetime · recurring · custom |
auto_reminder_days |
Zile între trimiteri (pentru recurring) |
scheduled_send_time |
Dată/oră planificată |
send_now |
1 = trimite imediat la execuția cron-ului |
Statusuri per destinatar (tblwhatsapp_campaign_data):
status |
Semnificație |
|---|---|
0 |
Eșuat (eroare API) |
2 |
Succes — mesaj trimis |
3 |
Număr invalid |
Statusuri livrare (message_status): sent → delivered → read
Atenție: Campaniile sunt executate de cron, nu instant. Dacă cron-ul CRM nu rulează, campaniile planificate nu se trimit.
6. Notificări automate la events CRM (modul whatsapp_api)
Unde: /admin/whatsapp_api → Template Mapping
Modulul whatsapp_api se declanșează independent de inbox, pe baza hook-urilor:
| Hook CRM | Categoria template |
|---|---|
lead_created |
leads |
web_to_lead_form_submitted |
leads |
contact_created |
contacts |
after_invoice_added |
invoice |
after_add_task |
task |
after_add_project |
project |
proposal_created |
proposal |
after_payment_added |
payment |
ticket_created |
ticket |
after_cron_run |
Remindere programate |
Configurare per notificare:
- Sync templates: WhatsApp API → Templates → Load
- Creare mapping: WhatsApp API → Template Mapping → Add
- Alegeți template + category +
send_to(contact / lead / staff) + parametrii header/body/footer
Modulul whatsapp_api împarte credențialele Meta cu modulul whatsapp (același access_token și phone_number_id), dar le stochează separat în propriile opțiuni.
Permisiuni necesare
| Permisiune | Acces |
|---|---|
whatsapp_chat → view |
Acces la inbox (citire + trimitere mesaje) |
whatsapp_bot → view/create/edit/delete |
Gestionare boti |
whatsapp_template → view / load_template |
Vizualizare și sincronizare templates |
whatsapp_campaign → view/create/edit/delete |
Gestionare campanii |
whatsapp_numbers → view/edit |
Vizualizare/editare numere |
whatsapp_contacts → view/create/edit/delete |
Gestionare contacte WhatsApp |
whatsapp_groups → view/create/edit/delete |
Gestionare grupuri |
whatsapp_log_activity → view/clear_log |
Vizualizare log activitate API |
quickreplies → view/create/edit/delete |
Răspunsuri rapide |
| Connection Settings (credențiale Meta) | is_admin() exclusiv |
| WhatsApp Chat widget settings | is_admin() exclusiv |
Gotchas
| Problemă | Cauză | Soluție |
|---|---|---|
| Webhook-ul Meta nu primește mesaje | URL incorect sau token nepotrivit | Verificați că URL-ul {site_url}/whatsapp/webhook/getdata este accesibil public și token-ul coincide |
| Lead-urile nu se creează automat | whatsapp_auto_lead_settings este 'disable' (implicit) |
Activați explicit din Settings → Auto Lead |
| Bot-ul nu răspunde | is_bot_active = 0 sau trigger nu coincide |
Activați botul și verificați condiția trigger (exact match vs. contains) |
| Campania nu s-a trimis la ora programată | Cron-ul CRM nu rulează | Verificați /admin/misc/cron_jobs — cron-ul trebuie să fie activ |
| Template-ul nu apare în campanie | Statusul în Meta nu este APPROVED |
Verificați statusul în Meta Business Manager; reîncărcați templates |
Notificările whatsapp_api nu se trimit |
phone_number_id neset în modulul whatsapp_api |
Configurați separat credențialele în WhatsApp API → Settings |
| Tichetul nu s-a creat din conversație | Crearea automată nu e implementată | Staff trebuie să creeze manual tichetul din interfața de chat |
Referințe module
- WhatsApp — documentație modul principal
- Leads — lead-uri create automat
- Tickets — creare manuală tichete
- Marketing Campaigns — campanii email (separate de WA)
Obțineți aprobarea șabloanelor WhatsApp de la Meta înainte de lansarea oricărei campanii sau flux de suport — aprobarea durează 24-48 ore și fără un șablon aprobat nu puteți iniția conversații în afara ferestrei de sesiune de 24 ore.
Credențialele WhatsApp Business API trebuie păstrate strict confidențiale. Un Access Token scurs permite oricui să trimită mesaje din numărul dvs. de business — rotiți credențialele imediat dacă se suspectează expunerea și revocați din pagina de Conexiune.