CRMconnect Azuvio · Docs

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 tbltickets lipseș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):

  1. Caută în tblleads.phonenumber (normalizat fără caractere non-numerice)
  2. Caută în tblcontacts.phonenumber
  3. Caută în tblstaff.phonenumber
  4. 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 boti
  • manual = 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-uri
  • contacts — conversații legate de contacte
  • staff — conversații cu angajați
  • general — 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' în tblwhatsapp_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): sentdeliveredread

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:

  1. Sync templates: WhatsApp API → Templates → Load
  2. Creare mapping: WhatsApp API → Template Mapping → Add
  3. 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

Tip

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.

Warning

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.