Khi khách hàng nhắn vào Zalo OA Di Động Việt, hệ thống Smax có 8 Keyword Triggers (~405 keywords tổng cộng) để classify intent ngay từ đầu: Hỏi giá, Trả góp, Ưu đãi, Hỗ trợ, Máy cũ, Thu cũ đổi mới, Tư vấn, BHĐT. Mỗi trigger fire vào L1 entry block riêng (set s_campaign) rồi chạy chung qua L2-L8 (46 blocks gồm 26 core + 5 sequence/followup wrappers + 15 reminder blocks). Có 1 Sequence drip campaign + 2 Follow Up triggers chạy song song. Bên cạnh đó, 1 GenAI Trigger luôn lắng nghe inbox — nhưng chỉ kích hoạt khi s_status = chatting (sau khi KH đã cho SĐT). Tổng cộng 12 GenAI items.
Trigger "Hỏi giá" có 50 keywords (47 IN + 3 IS). Để xem đầy đủ 8 triggers + bảng so sánh đụng độ keyword, mở tab "8 Triggers".
| Layer | Mô tả | Số block |
|---|---|---|
| L1 | Trigger entry — ghi note + chuyển | 1 |
| L2 | IF/ELSE branching theo phone & ERP | 1 |
| L3a | Lookup ERP customer info qua n8n | 1 |
| L4 | GenAI Intent Router (8 nhánh) | 1 |
| L5 | 8 intent handlers (BHĐT, Trả góp, Hỏi giá, Tư vấn, Thu cũ, Ưu đãi, Hỗ trợ, Máy cũ) | 8 |
| L6 | Phone & Time collection + Escalation | 5 |
| L7 | Lead capture (4 paths) + Reset | 6 |
| L8 | Final layer + CDP terminator | 3 |
| SEQ | Sequence drip wrapper blocks | 3 |
| FU | Followup wrapper blocks | 2 |
| REM | Remind content blocks (2 levels × 7 intents) | 14 |
| REM | Remind support: Chưa xác nhận SĐT cũ | 1 |
💡 Tip: Trong tất cả diagram, click vào ô có ID 24-hex để mở thẳng SMAX UI trong tab mới. Hover sẽ đổi viền theo màu: xanh dương = block · cam = trigger · tím = sequence · hồng = follow-up · xanh lá = GenAI item.
Toàn bộ 46 blocks theo flow chính + Sequence + Followups.
flowchart TB
TR[8 Keyword Triggers - 405 keywords + GenAI Trigger]
subgraph entry [Entry and Routing L1-L4]
L1H[L1 Hoi gia 69e49c94]
L1T[L1 Tra gop 69e49c26]
L1U[L1 Uu dai 69e49d40]
L1S[L1 Ho tro 69e49d5f]
L1M[L1 May cu 69e49d7b]
L1C[L1 Thu cu 69e49d22]
L1V[L1 Tu van 69e49cfc]
L1B[L1 BHDT 69e49d98]
L2[L2 PhoneValidate 69e4a6ee]
L3a[L3a Customer Order Lookup 69e4a59e]
L4[L4 GenAI Intent Router 69e49944]
L1H --> L2
L1T --> L2
L1U --> L2
L1S --> L2
L1M --> L2
L1C --> L2
L1V --> L2
L1B --> L2
L2 -->|IF phone and no ERP| L3a
L2 -->|ELSE| L4
L3a --> L4
end
subgraph intents [L5 - 8 Intent Handlers]
L5a[BHDT 69e37d1c]
L5b[Tra gop 69d8c4f5]
L5c[Hoi gia 69df51c9]
L5d[Tu van 69df51e0]
L5e[Thu cu 69df51f2]
L5f[Uu dai 69df5202]
L5g[Ho tro 69df526a]
L5h[May cu 69df522d]
end
subgraph phone_layer [L6 - Phone and Time]
L6Esc[L6 Tu Van Chat 69df16e5]
L6Phone[L6 Confirm Phone Old 69d8ca5c]
L6Time[L6 Confirm Time Call 69d8cb34]
end
subgraph lead_layer [L7 - Lead Capture]
L7Reset[L7 Reset Attrs 69e0e7ae]
L7NewPh[L7 Xin SDT Moi 69e0c181]
L7Off[L7 OffHours 69d8ce79]
L7Now[L7 Goi Ngay 69d8cf20 priority high]
L7_30m[L7 Sau 30P 69d8cfbd priority medium]
L7Cust[L7 Khung gio khac 69d8d00c]
end
subgraph final_layer [L8 - Final]
L8OffNew[L8 Off Hours Form 69e5dcbc]
L8Conf[L8 Confirm Custom Time 69df0451 priority low]
L8CDP[L8-CDP TERMINATOR 69d8d2f7]
end
subgraph triggers [Sequence and Followups - chay song song sau L5x]
SEQ[Sequence 69d8cc27 Drip 3 steps]
FU1[Followup 69df128f - Remind cho SDT 2 steps]
FU2[Followup 69df133d - Remind goi SDT cu DEPRECATED]
end
subgraph genaitrigger [GenAI Trigger - chay song song trong inbox]
GTR[Trigger 69e0a17c GenAI ZaloOA s_status=chatting]
GAI[GenAI 69b90add Phan loai nhu cau]
CHK[Block 69e73733 Check is_intent_in_progress]
DETECT[Block 69e0a2bc GenAI Detect - call GenAI 69b90add lan 2]
ESC[L6-Escalation 69df16e5]
NEW1[Block 69e0b90b NEW khach-cho-sdt path]
NEW2[Block 69e0b93b NEW khach-cho-thoi-gian-goi path]
NEW3[Block 69e0b79a NEW default fallback]
GTR --> GAI
GAI --> CHK
CHK -->|filter pass| DETECT
DETECT -->|tu-van-qua-chat or chung-chung or truong-hop-khac| ESC
DETECT -->|khach-cho-sdt| NEW1
DETECT -->|khach-cho-thoi-gian-goi| NEW2
DETECT -->|default fallback| NEW3
end
DEAD[Block Rong 69d8cc5d - cards empty - 8 refs]
TR -->|kw Hoi gia| L1H
TR -->|kw Tra gop| L1T
TR -->|kw Uu dai| L1U
TR -->|kw Ho tro| L1S
TR -->|kw May cu| L1M
TR -->|kw Thu cu| L1C
TR -->|kw Tu van| L1V
TR -->|kw BHDT| L1B
L4 --> L5a
L4 --> L5b
L4 --> L5c
L4 --> L5d
L4 --> L5e
L4 --> L5f
L4 --> L5g
L4 --> L5h
L5c -.->|davao_intent any| L6Esc
L6Esc --> L7Reset
L5c -.->|phone any| L6Phone
L6Phone -->|btn DongY| L6Time
L6Phone -->|btn khac| L7NewPh
L7NewPh --> L6Time
L5c -.->|phone_campaign any| L6Time
L6Time -->|outhours| L7Off
L6Time -->|btn Now| L7Now
L6Time -->|btn 30P| L7_30m
L6Time -->|btn Custom| L7Cust
L7Off --> L8OffNew
L8OffNew --> L8Conf
L7Cust --> L8Conf
L7Now --> L8CDP
L7_30m --> L8CDP
L8Conf --> L8CDP
L8CDP --> L7Reset
L5c -.->|sequence ADD cuoi block| SEQ
L5c -.->|follow_up CHANGE| FU1
classDef router fill:#dbeafe,stroke:#2563eb,stroke-width:2px
classDef trigger fill:#f3e8ff,stroke:#7c3aed,stroke-width:2px
classDef warn fill:#fef3c7,stroke:#d97706
class L4,L2 router
class SEQ,FU1,FU2 trigger
class DEAD warn
Ví dụ: KH nhắn "iphone 15 giá nhiêu" và bấm "Gọi Ngay".
sequenceDiagram
autonumber
actor KH as Khach hang
participant Z as Zalo OA
participant TE as Trigger Engine
participant BE as Block Engine
participant DB as MongoDB
participant N8N as n8n
participant GAI as GenAI
participant CDP as CRM CDP
KH->>Z: iphone 15 gia nhieu
Z->>TE: webhook message
TE->>DB: Lookup triggers
TE->>TE: Match keyword fire trigger
Note over BE: L1 Trigger Keyword
BE->>DB: thread_note Trigger keyword Hoi gia
BE->>BE: goto L2
Note over BE: L2 PhoneValidate
alt co phone va no ERP
BE->>BE: goto L3a
BE->>N8N: POST webhook 6c27a870
N8N-->>BE: customer_type note
BE->>DB: thread_note erp_customer_note
BE->>BE: self-call POST partner send
BE->>BE: goto L4
end
Note over BE: L4 GenAI Intent Router
BE->>GAI: classify input
GAI-->>BE: intent hoi-gia
BE->>BE: goto L5c
Note over BE: L5c Intent Hoi gia
BE->>BE: sequence REMOVE drip
BE->>DB: set 7 attrs
BE->>DB: tags add intent-hoi-gia
BE->>GAI: generate response
GAI-->>BE: cau tra loi
BE->>Z: zalo_message
Z->>KH: Da model anh quan tam dang co gia rat tot
BE->>DB: follow_up CHANGE 69df128f
BE->>DB: sequence ADD 69d8cc27
BE->>BE: goto L6-PhoneOld
Note over BE: L6 Phone Old
BE->>Z: Xac nhan SDT plus 2 buttons
KH->>Z: Dong Y
Z->>BE: Click=dongy
BE->>BE: goto L6-TimeCall
Note over BE: L6 Time Call
BE->>BE: checktime
BE->>Z: Anh chi tien nghe may luc nao plus 3 buttons
KH->>Z: Goi Ngay
BE->>BE: goto L7-CallNow
Note over BE: L7 Call Now
BE->>BE: idempotency check
BE->>Z: Cam on DDV se goi ngay
BE->>DB: ticket_priority high davao leadcdp
BE->>BE: goto L8-CDP
Note over BE: L8 CDP TERMINATOR
BE->>GAI: analyze 20 last msgs
BE->>N8N: webhook 6c27a870 re-lookup
BE->>N8N: webhook 85759540 send 23-field lead
N8N->>CDP: Forward to CRM
BE->>BE: self-call again
BE->>BE: goto L7-Reset
Note over CDP: Lead created
L6-L8 — flow xin SĐT, chọn giờ gọi và lưu lead.
flowchart TD
Start[Den tu Intent block L5x] --> Phone[phone any?]
Phone -->|Yes| L6Old[L6-PhoneOld - Confirm SDT cu]
Phone -->|No| Form[zalo_form xin SDT moi 30min]
Form -->|co phone_campaign| L6Time
L6Old -->|btn Dong Y| L6Time[L6-TimeCall - Confirm Time Call]
L6Old -->|btn Goi So Khac| L7New[L7-NewPhone - Xin SDT Moi]
L7New --> L6Time
L6Time --> CheckTime[checktime 7h30 to 21h30?]
CheckTime -->|Out of hours| L7Off[L7-OffHours - 5 of 7 inactive]
CheckTime -->|In hours| Buttons[3 buttons]
Buttons -->|Now| L7Now[L7-CallNow - priority high]
Buttons -->|30m| L7_30m[L7-Delay30m - priority medium]
Buttons -->|Custom| L7Cust[L7-CustomTime - GenAI parse time]
L7Off --> L8OffNew[L8-OffHoursForm]
L8OffNew --> L8Conf[L8-Confirm Custom Time - priority low]
L7Cust --> L8Conf
L7Now --> CDP[L8-CDP TERMINATOR]
L7_30m --> CDP
L8Conf --> CDP
CDP --> Reset[Reset Attributes]
Mỗi intent block có ~18 cards theo cùng pattern. Đặc biệt: ADD vào Sequence + Set Followup ở cuối.
flowchart TD
Entry[Vao tu L4 GenAI Router] --> Seq1[sequence REMOVE drip 69d8cc27]
Seq1 --> CheckRepeat[davao_intent any? - da co intent tu truoc]
CheckRepeat -->|Yes| Esc[L6 Tu Van Chat - escalation CSKH]
CheckRepeat -->|No| NoteCard[thread_note Intent X]
NoteCard --> Attrs[set 7 attrs - intent X davao_intent X s_campaign keyword X is_intent_in_progress true]
Attrs --> Tags[tags add intent X bot active - remove leadchat lead]
Tags --> GAI[GenAI - prompt rieng cho intent]
GAI --> Delay[delay 0.2s]
Delay --> Send[zalo_message]
Send --> CheckPhone[phone any? tuvanquachat null?]
CheckPhone -->|Yes| GoPhone[goto L6-PhoneOld]
CheckPhone -->|No| AskPhone[zalo_form xin SDT 30min]
AskPhone --> CheckCampaign[phone_campaign any?]
CheckCampaign -->|Yes| GoTime[goto L6-TimeCall]
CheckCampaign -->|No| ChattingState
GoPhone --> ChattingState[s_status chatting]
GoTime --> ChattingState
ChattingState --> Followup[follow_up CHANGE 69df128f - L5h dung KEEP - inconsistent]
Followup --> Seq2[sequence ADD drip 69d8cc27]
Seq2 --> Cleanup[Reset is_intent_in_progress null]
| Intent | Block | Số chủ đề |
|---|---|---|
| bhdt | 69e37d1c | 7 |
| tra-gop | 69d8c4f5 | (prompt rỗng) |
| hoi-gia | 69df51c9 | 6 |
| tu-van | 69df51e0 | 8 |
| thu-cu | 69df51f2 | 6 |
| uu-dai | 69df5202 | 6 |
| ho-tro | 69df526a | 11 |
| may-cu | 69df522d | 8 |
Block cuối cùng — gửi lead lên CDP. 13 cards và nhiều integration.
flowchart TD
Entry[Den tu L7 lead blocks] --> Sync1[phone_campaign equals phone_ai - IF phone_campaign null AND phone_ai any AND phone null]
Sync1 --> Sync2[phone_campaign equals phone - IF phone_campaign null AND phone_ai null AND phone any]
Sync2 --> CheckPhone[phone_campaign null?]
CheckPhone -->|Yes| Dead[Block Rong - early exit]
CheckPhone -->|No| Mark[davao leadcdp - flow_end_time NOW - s_status finished]
Mark --> GAI[GenAI analyze 20 last msgs - set 3 attrs san-pham-quan-tam nhu_cau_tu_van san_pham_hien_tai]
GAI --> Delay1[delay 1s]
Delay1 --> ERP[POST webhook 6c27a870 - get customer_type and erp_customer_note]
ERP --> Delay2[delay 0.5s]
Delay2 --> NoteCard[thread_note INTERNAL_CHAT - erp_customer_note]
NoteCard --> Lead[POST webhook 85759540 - 23 field lead payload - send to CRM and CDP]
Lead --> SelfCall[self-call POST partner send - thread_note USER_PROFILE]
SelfCall --> RemoveBot[tags remove bot active]
RemoveBot --> Reset[goto L7-Reset]
customer_name, phone, id_conversation, thread_tid, thread_url lead_status, intent san_pham_quan_tam, nhom_san_pham_quan_tam nhu_cau_khach_hang, event_source pid, psid ticket_type, ticket_priority campaign_name, flow_start_time, flow_end_time cta_main, call_time_selection channel = "Zalo OA" customer_type, note
Flow Hỏi giá có 3 loại trigger chạy song song với main flow: Sequence drip (kích hoạt sau intent block, remind theo lịch), Follow Up (kích hoạt theo điều kiện idle), và GenAI Trigger (lắng nghe inbox liên tục, gated bởi s_status=chatting).
Trigger này LUÔN lắng nghe mọi tin nhắn KH gửi vào inbox Zalo OA, nhưng engine SMAX gating bằng attribute s_status="chatting". Nghĩa là chỉ khi KH đã đi qua flow chính và set s_status=chatting tại các block GoPhone (L6/L7) thì GenAI trigger mới fire.
zl2858385037676592618
s_status == "chatting"
69b90addcc8e2d3ad435be08 · "GenAI phân loại nhu cầu"
sequenceDiagram
autonumber
participant U as Customer
participant ZL as Zalo OA
participant TE as SMAX Trigger Engine
participant DB as Customer attrs
participant GA as GenAI 69b90add
participant BE as Block Engine
U->>ZL: Send any message after KH gave SDT
ZL->>TE: Inbox webhook
TE->>DB: Check s_status
alt s_status equals chatting
TE->>GA: Classify message - history session length 1
GA-->>TE: 1 of 5 intents OR other catch-all
TE->>BE: send_block 69e73733
BE->>DB: Filter is_intent_in_progress IS_NOT true AND pid IS_NOT zl806xxx
alt Filter pass
BE->>BE: go_to_block 69e0a2bc downstream
else Filter fail
BE->>BE: STOP - skip to avoid concurrent intent
end
else s_status not chatting
TE-->>ZL: STOP - GenAI trigger does not fire
end
| # | Intention ID | Intent name (GenAI item) | Active (item) | action | block_id target |
|---|---|---|---|---|---|
| 1 | 29cdcc81… | quan-tam-iphone-17-promax | ✓ | send_block | 69e73733 |
| 2 | f23fbe35… | khach-cho-sdt | ✓ | send_block | 69e73733 |
| 3 | 46c14a13… | tu-van-qua-chat | ✓ | send_block | 69e73733 |
| 4 | d8f6899a… | khach-cho-thoi-gian-goi | ✓ | send_block | 69e73733 |
| 5 | b271bd6d… | truong-hop-khac | ✓ | send_block | 69e73733 |
| 6 | other | (catch-all — không có trong intents của GenAI item) | — | send_block | 69e73733 |
Block 69e73733e399c90c1ea469eb — "ZaloOA_Check is_intent_in_progress"
Card 1 (go_to_block):
target = 69e0a2bcc8470a7971e15296
filter (AND):
• is_intent_in_progress IS_NOT "true"
• pid IS_NOT "zl8060357869761932150"
Block downstream từ filter gate. Đây là nơi GenAI Trigger thực sự xử lý: gọi LẠI cùng GenAI item 69b90add nhưng với prompt khác + intent set khác, kết quả lưu vào attribute genai_detect, sau đó branch theo value.
Block 69e0a2bcc8470a7971e15296 — "ZaloOA_GenAI Detect"
Card 1 (go_to_block, GUARD): IF s_source \!= Smax AND campaign_source \!= Smax
AND s_status \!= chatting
AND s_campaign \!= [keyword_tragop, hoigia, tuvan, thucu,
uudai, hotro, maycu, bhdt]
THEN goto 69d8cc5d (Block_Rỗng — exit)
⚠ Filter có thể là DEAD CODE: GenAI Trigger đã gate s_status=chatting
→ điều kiện thứ 3 không bao giờ pass → toàn bộ AND fail.
Card 2 (thread_note): "GenAI detect - Kích hoạt" (INTERNAL_CHAT)
Card 3 (genai): gen_ai_id=69b90add ← CÙNG GenAI item như ở Trigger
prompt: "Dựa trên {{last_content_by_user}}, xác định nhu cầu KH..."
intent set: [chung-chung, khach-cho-sdt, khach-cho-thoi-gian-goi,
tu-van-qua-chat, truong-hop-khac]
mapping_attr: answer → genai_detect
intentions: [] (KHÔNG dùng intentions branching, dùng attribute)
Card 4 (delay): 0.2s
Card 5 (go_to_block): IF genai_detect IS "tu-van-qua-chat" → 69df16e5 (L6-Escalation)
Card 6 (go_to_block): IF genai_detect IS "khach-cho-sdt" → 69e0b90b (NEW)
Card 7 (go_to_block): IF genai_detect IS "khach-cho-thoi-gian-goi" → 69e0b93b (NEW)
Card 8 (go_to_block): IF genai_detect IS "chung-chung" → 69df16e5 (L6-Escalation)
Card 9 (go_to_block): IF genai_detect IS "truong-hop-khac" → 69df16e5 (L6-Escalation)
Card 10 (go_to_block): NO filter (default fallback) → 69e0b79a (NEW)
🔴 CRITICAL FINDING — Conflict giữa system_content và block_prompt
GenAI item 69b90add có system_content liệt kê 5 intents: quan-tam-iphone-17-promax, khach-cho-sdt, tu-van-qua-chat, khach-cho-thoi-gian-goi, truong-hop-khac.
Nhưng prompt ở Card 3 yêu cầu output 5 intents khác: chung-chung, khach-cho-sdt, khach-cho-thoi-gian-goi, tu-van-qua-chat, truong-hop-khac.
→ LLM nhận 2 set intent xung đột (system_content vs user prompt). Output có thể không deterministic. Đề xuất: đồng bộ 2 set, hoặc tách thành 2 GenAI items riêng (1 cho trigger classifier, 1 cho block detect).
⚠ Schema bug — value_boolean lệch values (5 cards): mỗi card go_to_block có value_boolean chứa giá trị của card TRƯỚC nó, còn values mới đúng. Đây là UI bug giống bug "value_boolean string" đã document ở 23+ blocks khác. SMAX engine dùng values nên flow chạy đúng, nhưng cần fix UI để tránh confuse khi đọc code.
📌 3 BLOCK DOWNSTREAM MỚI cần gửi data:
• 69e0b90b4a84a2e7113f049f — nhánh khach-cho-sdt (KH cho SĐT trong lúc đang chat → có thể update SĐT mới?)
• 69e0b93b9786396fbd7d9b1c — nhánh khach-cho-thoi-gian-goi (KH chỉ định thời gian gọi → update lịch hẹn?)
• 69e0b79a0c8ad16bfcc09ee8 — fallback default (genai_detect rỗng/lỗi)
type_message_history="session" + session_length=1 — KHÁC với 11 GenAI khác trong flow (mặc định history_messages_length=null, lấy default 50). Có nghĩa mỗi tin nhắn KH coi là 1 phiên độc lập, không nhớ tin trước. Ưu: phân loại nhanh, không bị nhiễu lịch sử dài; Nhược: KH gửi "ok" sau câu hỏi giá → bị coi là truong-hop-khac, mất context.other) là catch-all do Trigger Engine fill khi GenAI không match intent nào — cần xác nhận với Dev là behavior đúng (không phải bug missing config).69c1f5a4 (GenAI phân loại nhu cầu v2 — dùng ở L8-CDP). Có thể item này được clone từ v2. Active state khác nhau: ở đây all=true, ở v2 quan-tam-iphone-17-promax=false (đã tắt).quan-tam-iphone-17-promax hardcode "iphone 17" — sẽ outdated khi launch iPhone 18. Đề xuất dùng generic quan-tam-flagship-iphone hoặc tách theo product_id.is_intent_in_progress IS_NOT "true" — đảm bảo KH đang trong intent flow nào thì không fire intent mới. Tuy nhiên cần xác nhận attribute này được set/clear ở đâu trong flow chính (chưa thấy ở 46 blocks hiện có).pid = "zl8060357869761932150" — đây là 1 KH cụ thể. Test account? Blacklist? Cần Dev xác nhận để tránh "magic number" trong filter.s_status được set chatting tại các block GoPhone (sau khi KH cho SĐT) — xem tab Attribute Lifecycle. Vì vậy GenAI Trigger CHỈ chạy khi KH đã cho SĐT và đang chat tiếp với CSKH. Trước đó, Keyword trigger "Hỏi giá" lo phần đầu flow.Khi Followup #1 fire → routing theo intent → 14 block remind chuyên biệt.
flowchart TD
F1[Followup 69df128f Step 1 sau 30m] --> R1[Block 69df126e Remind Ko Tuong Tac 1]
F1S2[Followup 69df128f Step 2 sau 4h] --> R2[Block 69df128b Remind Ko Tuong Tac 2]
R1 --> RT1[Block 69df1a57 Remind Tuong Tac 1 router]
R2 --> RT2[Block 69df323a Remind Tuong Tac 2 router]
RT1 -->|intent tra-gop| RT1a[69df2ea3 R1 Tra gop]
RT1 -->|intent hoi-gia| RT1b[69df3071 R1 Hoi gia]
RT1 -->|intent tu-van| RT1c[69df30e0 R1 Tu van]
RT1 -->|intent thu-cu| RT1d[69df312e R1 Thu cu]
RT1 -->|intent uu-dai| RT1e[69df3181 R1 Uu dai]
RT1 -->|intent ho-tro| RT1f[69df31ca R1 Ho tro]
RT1 -->|intent may-cu| RT1g[69df34ed R1 May cu]
RT2 -->|intent tra-gop| RT2a[69df3263 R2 Tra gop]
RT2 -->|intent hoi-gia| RT2b[69df327c R2 Hoi gia]
RT2 -->|intent tu-van| RT2c[69df3297 R2 Tu van]
RT2 -->|intent thu-cu| RT2d[69df32b0 R2 Thu cu]
RT2 -->|intent uu-dai| RT2e[69df32c9 R2 Uu dai]
RT2 -->|intent ho-tro| RT2f[69df32e5 R2 Ho tro]
RT2 -->|intent may-cu| RT2g[69df354c R2 May cu]
| Intent | R1 (sau 30m) | R1 timeout | R2 (sau 4h) | R2 timeout |
|---|
Block này nhận redirect từ Sequence 69d8cc27 step 1 + step 2 (cùng wrapper 69df12e2 / 12ee). Là content message với 2 buttons.
Block 69df15c8 - "Chưa xác nhận SĐT cũ"
Card 1: go_to Block_Rong nếu (Click IS dongy/goisokhac AND tuvanquachat IS yes) - idempotency
Card 2: zalo_message
Text: "Dạ, khi nào Anh/Chị tiện nghe máy hoặc em có thể hỗ trợ chat tư vấn tại đây ạ."
Buttons:
[Gọi Ngay] -> 69d8cf20 (L7-CallNow)
[Nhắn Tin] -> 69df16e5 (L6-Escalation)
SET RESET (null/empty) READ (filter) + TAG - TAG
Cuộn ngang để xem hết các attributes.
Lifecycle chi tiết của từng attribute trong flow:
Tất cả các customer attributes được set/đọc trong flow, phân loại theo nhóm.
mindmap
root((Customer Attrs))
Identity
pid
page_pid
phone
phone_ai
phone_campaign
zalo_name
Intent
intent
davao_intent
intent_repeat_flag
is_intent_in_progress
davao_remind
Campaign
s_campaign
campaign_source
s_source
s_status
flow_start_time
flow_end_time
UI_Click
Click
davao
cta_goingay
cta_goisau30p
cta_khunggiokhac
call_time_selection
confirm_time_call
tuvanquachat
Lead_Quality
ticket_type
ticket_priority
lead_status
cta_main
GenAI_Output
genai
thoi_gian_mong_muon
san_pham_quan_tam
nhom_san_pham_quan_tam
nhu_cau_tu_van
san_pham_hien_tai
ERP
erp_customer_note
customer_type
Cards count là approximate.
| Layer | Block ID | Tên | Cards | Active path |
|---|
Tất cả 8 trigger keyword đều fire vào L1 entry block riêng → set s_campaign → merge vào L2 PhoneValidate → chạy chung từ L2 đến L8. Tổng ~405 keywords trên 8 trigger. Theo card 1 GUARD ở block 69e0a2bc, 8 giá trị s_campaign được hardcode trong filter: keyword_tragop, keyword_hoigia, keyword_tuvan, keyword_thucu, keyword_uudai, keyword_hotro, keyword_maycu, keyword_bhdt.
| # | Trigger name | Trigger ID | L1 entry block | s_campaign | Keywords | Match | Operator |
|---|---|---|---|---|---|---|---|
| 1 | Hỏi giá | 69df64a360491403e2c9edbf | 69e49c94 | keyword_hoigia | 50 | IN + IS | AND |
| 2 | Trả góp | 69d8c48940711e1e787b0b2b | 69e49c26 | keyword_tragop | 21 | IN | AND |
| 3 | Ưu đãi | 69df5e15f5f074cb7eba8321 | 69e49d40 | keyword_uudai | 26 | IN | AND |
| 4 | Hỗ trợ | 69df675e0c8ad16bfcbeca29 | 69e49d5f | keyword_hotro | 115 | IN + IS | AND |
| 5 | Máy cũ | 69df6adfacb0cfe2bf9e0307 | 69e49d7b | keyword_maycu | 65 | IN | OR |
| 6 | Thu cũ | 69df5d1829de5bfb50581029 | 69e49d22 | keyword_thucu | 31 | IS | AND |
| 7 | Tư vấn | 69df68ba0d19b0411a1065ab | 69e49cfc | keyword_tuvan | 42 | IN | AND |
| 8 | BHĐT | 69e36edeb6860bc3d3d9dce7 | 69e49d98 | keyword_bhdt | 54 | IN | OR |
🔴 8 keyword xuất hiện ở >1 trigger — KH gõ keyword này thì SMAX sẽ fire trigger nào? Theo weight? First-match? Cần Dev xác nhận luật ưu tiên. Một số keyword có thể bị classify sai intent (vd: "đổi máy" trigger Hỗ trợ thay vì Tư vấn).
| Keyword | Trigger fire | Số trigger |
|---|
Click ▶ để mở rộng từng trigger và xem đầy đủ keyword list.
AND, 2/8 dùng OR (Máy cũ + BHĐT). Vì cả 2 trigger này chỉ có 1 condition nên operator không tạo khác biệt — nhưng nếu sau này thêm condition thứ 2 (vd condition IS) thì behavior sẽ khác. Đề xuất: thống nhất AND.IS (exact) cho TẤT CẢ 31 keyword — nghĩa là "thu cũ máy iPhone" sẽ KHÔNG fire (vì match=IS). Trong khi Hỗ trợ và Hỏi giá dùng cả IN + IS. Cần xác nhận chủ ý này." góp 0%", " cấn móp", " loa", " bảo hành") — match=IN có lẽ trim, nhưng vẫn nên cleanup để consistent.Mỗi card GenAI trong block có 2 lớp prompt: Block-level prompt (instruction tại runtime trong card genai của block) và GenAI item config (system_content, sample_responses, knowledge texts). Cuộn xuống để xem chi tiết từng GenAI.
| # | GenAI ID | Tên | Dùng ở | Type | Model | History |
|---|