Action Node - Chiến dịch Callbot
I. Tổng quan
Node Chiến dịch Callbot dùng để tương tác với chiến dịch callbot của UCALL trực tiếp từ flow tự động hoá. Node này cho phép người cấu hình quản lý danh sách khách hàng trong chiến dịch, thay đổi trạng thái chiến dịch và kích hoạt cuộc gọi callbot — tất cả trong cùng một builder mà không cần vào giao diện Chiến dịch thủ công.
1. Vấn đề
- Các flow chăm sóc khách hàng, sales automation hoặc remarketing thường cần thêm/cập nhật danh sách gọi của chiến dịch callbot theo dữ liệu CRM động. Nếu không có action node tích hợp, người vận hành phải thao tác thủ công trong module Chiến dịch, làm gián đoạn luồng tự động.
- Việc bật/tắt chiến dịch hoặc gọi ngay cho một khách hàng cụ thể trong flow cũng cần được xử lý tập trung mà không phải thoát ra khỏi builder.
2. Giải pháp
- Cung cấp node
Chiến dịch Callbotvới 6 hành động bao phủ toàn bộ vòng đời tương tác giữa flow và chiến dịch callbot: thêm, cập nhật, truy vấn khách hàng, kiểm soát trạng thái chiến dịch và kích hoạt cuộc gọi.
3. Đối tượng
- Người cấu hình automation: sales ops, marketing ops, CX team cần điều phối danh sách gọi theo hành vi của khách hàng hoặc theo trigger từ CRM.
- Admin vận hành chiến dịch callbot cần kiểm soát trạng thái chiến dịch theo điều kiện nghiệp vụ.
4. Tầm nhìn/insight
- Khi số lượng chiến dịch và kịch bản callbot tăng lên, node này có thể mở rộng thêm hành động như xóa khách hàng khỏi chiến dịch, lấy kết quả cuộc gọi theo lô, hoặc tạo chiến dịch mới từ flow.
II. Yêu cầu chức năng
1. Danh sách tính năng
- Loại node:
Action. - Nhóm node:
Integration. - 6 hành động (operation) tương tác với chiến dịch Callbot:
| # | Hành động | Mô tả ngắn |
|---|---|---|
| 1 | Thêm khách hàng vào chiến dịch |
Thêm một khách hàng vào danh sách gọi của chiến dịch |
| 2 | Cập nhật khách hàng chiến dịch theo điều kiện |
Cập nhật các khách hàng trong chiến dịch thỏa mãn bộ lọc |
| 3 | Cập nhật khách hàng từ node trước |
Cập nhật khách hàng cụ thể được truyền từ node phía trước |
| 4 | Lấy thông tin khách hàng chiến dịch |
Lấy danh sách khách hàng từ chiến dịch |
| 5 | Bật/tắt chiến dịch |
Thay đổi trạng thái hoạt động của chiến dịch |
| 6 | Gọi Callbot với kịch bản có sẵn |
Kích hoạt cuộc gọi callbot theo kịch bản đã cấu hình |
2. Đặc tả chi tiết
Hành động 1: Thêm khách hàng vào chiến dịch
User story: Là một [Người cấu hình flow], tôi muốn [tự động thêm khách hàng vào chiến dịch callbot khi họ thỏa điều kiện trigger] để [danh sách gọi luôn được cập nhật theo dữ liệu thực mà không cần thao tác tay].
-
Use case 1.1 (Happy path – Thêm thành công): User chọn hành động
Thêm khách hàng vào chiến dịch→ Chọn chiến dịch đích từ dropdown → Map số điện thoại (bắt buộc) và các trường bổ sung → Lưu node → Khi flow chạy, hệ thống thêm khách hàng vào danh sách gọi của chiến dịch. -
Use case 1.2 (Happy path – Trùng số điện thoại, toggle BẬT → bỏ qua và dừng flow): Toggle
Nếu trùng số điện thoại với khách hàng của chiến dịch thì bỏ qua và dừng flowđang Bật → Flow chạy đến node → Số điện thoại đã tồn tại trong chiến dịch → Hệ thống bỏ qua việc thêm và dừng flow tại đây, không báo lỗi. -
Use case 1.3 (Happy path – Trùng số điện thoại, toggle TẮT → tiếp tục flow): Toggle đang Tắt → Số điện thoại đã tồn tại trong chiến dịch → Hệ thống thêm bản ghi mới (hoặc xử lý theo rule của chiến dịch) → Flow tiếp tục bình thường.
-
Use case 1.4 (Exception – Thiếu số điện thoại hoặc giá trị null): Trường
Số điện thoạikhông được map hoặc giá trị rỗng khi flow chạy → Node trả lỗi thực thi → Run detail ghi nhận lý do.
Cài đặt:
| Field | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| Chọn chiến dịch | Dropdown | ✅ | Chọn chiến dịch callbot đích. Hệ thống chỉ hiển thị các chiến dịch được cập nhật trong 6 tháng gần nhất. |
| Nếu trùng số điện thoại với khách hàng của chiến dịch thì bỏ qua và dừng flow | Toggle | — | Mặc định: Bật. Khi bật và số điện thoại đã tồn tại trong chiến dịch thì bỏ qua và dừng flow. Khi tắt, flow tiếp tục xử lý bình thường. |
→ Số điện thoại (number) |
Giá trị | ✅ | Trường bắt buộc duy nhất. Giá trị có thể là giá trị cố định hoặc biến từ node trước. |
→ Các trường bổ sung (ví dụ: Mã cần – boolean) |
Giá trị | ❌ | Các trường tùy chọn theo cấu hình danh sách khách hàng của chiến dịch (Bước 2 chiến dịch). Giá trị có thể là giá trị cố định hoặc biến từ node trước. |
Nút + |
— | — | Thêm trường mapping từ danh sách trường của chiến dịch đang chọn. |
Nguồn dữ liệu trường: Danh sách trường trong bảng mapping được lấy từ cấu hình Bước 2 – Danh sách khách hàng của chiến dịch callbot được chọn. Khi người dùng đổi chiến dịch, danh sách trường sẽ thay đổi theo.
Đầu ra:
- Trạng thái thêm:
thành công/bỏ qua – trùng số điện thoại/thất bại. - ID khách hàng trong chiến dịch (nếu hệ thống trả về).
Hành động 2: Cập nhật khách hàng chiến dịch theo điều kiện
User story: Là một [Người cấu hình flow], tôi muốn [cập nhật hàng loạt khách hàng trong chiến dịch thỏa mãn bộ lọc] để [đồng bộ dữ liệu chiến dịch theo biến động của CRM mà không cần sửa từng record thủ công].
-
Use case 2.1 (Happy path – Cập nhật thành công): User chọn hành động → Chọn chiến dịch → Cấu hình bộ lọc điều kiện (ví dụ:
Số điện thoại bằng với) → Map các field cần cập nhật trong bảngCập nhật dữ liệu→ Khi flow chạy, hệ thống lọc khách hàng thỏa điều kiện và cập nhật các field đã map. -
Use case 2.2 (Happy path – Không có khách hàng thỏa điều kiện): Bộ lọc không khớp bất kỳ record nào → Node kết thúc thành công với
updated_count: 0→ Flow tiếp tục bình thường. -
Use case 2.3 (Exception – Chưa chọn chiến dịch): Dropdown chiến dịch chưa được chọn → Node ở trạng thái
lỗi cấu hình→ Flow không được xuất bản. -
Use case 2.4 (Exception – Thử cập nhật trường số điện thoại): Trường
Số điện thoạikhông xuất hiện trong danh sách trường có thể cập nhật → Hệ thống không cho phép chọn trường này để cập nhật.
Cài đặt:
| Field | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| Chọn chiến dịch | Dropdown | ✅ | Chọn chiến dịch callbot cần cập nhật khách hàng. |
Cập nhật khi khách hàng mới đáp ứng các điều kiện sau – Thỏa mãn |
Dropdown | ✅ | Chọn logic áp dụng cho nhiều điều kiện: Tất cả (AND) hoặc Bất kỳ (OR). |
Cập nhật khi khách hàng mới đáp ứng các điều kiện sau – điều kiện |
Dropdown | ✅ | Chọn nhóm điều kiện lọc: Callbot (thông tin khách hàng – other attributes), Kết quả cuộc gọi, Contact (associated contact). |
| → Mỗi hàng điều kiện | Row | ✅ | Trường lọc → Toán tử (bằng với, khác, chứa, lớn hơn…) → Giá trị (cố định hoặc biến từ node trước). |
Nút + Thêm điều kiện |
— | — | Thêm hàng điều kiện mới vào bộ lọc. |
| Cập nhật dữ liệu – Bảng mapping field | — | — | Danh sách các trường có thể cập nhật, được quy định theo cấu hình Bước 2 – Danh sách khách hàng của chiến dịch. |
→ Các trường (ví dụ: Họ và tên – string, Xác nhận – boolean) |
Giá trị | ❌ | Giá trị có thể là giá trị cố định hoặc biến từ node trước. |
Nút + (Cập nhật dữ liệu) |
— | — | Thêm trường cần cập nhật từ danh sách trường của chiến dịch. |
Giới hạn: Trường Số điện thoại không được phép cập nhật trong hành động này. Hệ thống không hiển thị trường này trong danh sách
Cập nhật dữ liệu.
Bộ lọc điều kiện tương đương bộ lọc nâng cao tại Báo cáo chi tiết Callbot, bao gồm ba nhóm:
- Callbot (other attributes): lọc theo các trường thông tin khách hàng trong chiến dịch.
- Kết quả cuộc gọi: lọc theo trạng thái, kết quả cuộc gọi đã thực hiện.
- Contact (associated): lọc theo contact được liên kết với khách hàng trong chiến dịch.
Đầu ra:
- Số lượng khách hàng đã được cập nhật (
updated_count). - Trạng thái thực thi: thành công / thất bại.
Hành động 3: Cập nhật khách hàng từ node trước
User story: Là một [Người cấu hình flow], tôi muốn [cập nhật hàng loạt khách hàng từ kết quả của một node Callbot trước đó] để [đồng bộ dữ liệu chiến dịch ngay trong flow mà không cần xác định lại điều kiện lọc].
-
Use case 3.1 (Happy path – Cập nhật thành công): Node Callbot trước (ví dụ: Hành động 4 – Lấy thông tin khách hàng chiến dịch) trả về danh sách khách hàng → User chọn hành động này → Chọn output khách hàng từ node trước vào field
Chọn khách hàng→ FieldChiến dịchđược tự điền từ dữ liệu khách hàng đã chọn → Map các field cần cập nhật → Khi flow chạy, hệ thống cập nhật toàn bộ khách hàng trong danh sách đó. -
Use case 3.2 (Exception – Node trước không phải node Callbot): Field
Chọn khách hàngkhông tìm thấy output khách hàng hợp lệ từ node Callbot nào phía trước → Danh sách chọn rỗng hoặc không điền được → Node ở trạng tháilỗi cấu hình. -
Use case 3.3 (Exception – Danh sách khách hàng rỗng khi chạy): Node Callbot trước trả về
customers: []→ Hành động 3 không có gì để cập nhật → Node kết thúc thành công vớiupdated_count: 0. -
Use case 3.4 (Exception – Thử cập nhật trường số điện thoại): Trường
Số điện thoạikhông xuất hiện trong danh sách trường có thể cập nhật → Hệ thống không cho phép chọn trường này.
Cài đặt:
| Field | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| Chọn khách hàng | Data picker | ✅ | Chọn output khách hàng từ một node Chiến dịch Callbot phía trước (thường là output của Hành động 4 – Lấy thông tin khách hàng chiến dịch). Chỉ có thể chọn output từ node Callbot, không nhập thủ công. |
| Chiến dịch | Text (read-only) | — | Tự điền tên chiến dịch dựa trên dữ liệu khách hàng được chọn. Không chỉnh sửa thủ công. |
| Cập nhật dữ liệu – Bảng mapping field | — | — | Danh sách các trường có thể cập nhật, được quy định theo cấu hình Bước 2 – Danh sách khách hàng của chiến dịch được tự điền. |
→ Các trường (ví dụ: Họ và tên – string, Xác nhận – boolean) |
Giá trị | ❌ | Giá trị có thể là giá trị cố định hoặc biến từ node trước. |
Nút + (Cập nhật dữ liệu) |
— | — | Thêm trường cần cập nhật từ danh sách trường của chiến dịch. |
Giới hạn: Trường Số điện thoại không được phép cập nhật. Hệ thống không hiển thị trường này trong danh sách
Cập nhật dữ liệu.
Nguồn khách hàng: Chỉ lấy từ output của node Chiến dịch Callbot phía trước (không tương thích với output từ node CRM Contact hay các node khác). Field
Chiến dịchsẽ được tự điền và read-only.
Đầu ra:
- Số lượng khách hàng được cập nhật (
updated_count). - Trạng thái thực thi: thành công / thất bại.
Hành động 4: Lấy thông tin khách hàng chiến dịch
User story: Là một [Người cấu hình flow], tôi muốn [lấy danh sách khách hàng từ chiến dịch callbot thỏa mãn điều kiện lọc] để [các node sau trong flow có thể xử lý hoặc phân nhánh dựa trên dữ liệu khách hàng thực tế của chiến dịch].
-
Use case 4.1 (Happy path – Lấy danh sách khách hàng): User chọn hành động → Chọn chiến dịch → Cấu hình bộ lọc (ví dụ:
Trạng thái là Thành công) → Khi flow chạy, hệ thống trả về danh sách khách hàng thỏa điều kiện → Node sau sử dụng danh sách này để xử lý tiếp. -
Use case 4.2 (Happy path – Không có khách hàng thỏa điều kiện): Bộ lọc không khớp bất kỳ record nào → Node trả về danh sách rỗng (
customers: []) → Flow tiếp tục bình thường. -
Use case 4.3 (Exception – Chưa chọn chiến dịch): Dropdown chiến dịch chưa được chọn → Node ở trạng thái
lỗi cấu hình→ Flow không được xuất bản.
Cài đặt:
| Field | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| Chọn chiến dịch | Dropdown | ✅ | Chọn chiến dịch callbot cần truy vấn khách hàng. |
Lấy thông tin khi khách hàng đáp ứng các điều kiện sau – Điều kiện thỏa mãn |
Dropdown | ✅ | Chọn logic giữa các điều kiện: Tất cả (AND) hoặc Bất kỳ (OR). |
| → Mỗi hàng điều kiện | Row | ❌ | Trường lọc → Toán tử (là, khác, chứa…) → Giá trị (cố định hoặc biến từ node trước). |
Nút + Thêm điều kiện |
— | — | Thêm hàng điều kiện mới vào bộ lọc. |
Bộ lọc điều kiện tương đương bộ lọc nâng cao tại Báo cáo chi tiết Callbot, bao gồm ba nhóm:
- Callbot (other attributes): lọc theo các trường thông tin khách hàng trong chiến dịch.
- Kết quả cuộc gọi: lọc theo trạng thái, kết quả cuộc gọi đã thực hiện (ví dụ:
Trạng thái là Thành công).- Contact (associated): lọc theo contact được liên kết với khách hàng trong chiến dịch.
Không bắt buộc phải có điều kiện lọc; nếu không cấu hình, node trả về toàn bộ khách hàng của chiến dịch.
Đầu ra:
- Danh sách khách hàng thỏa điều kiện (
customers[]) – mỗi item chứa các field được cấu hình trong danh sách khách hàng của chiến dịch. - Tổng số record thỏa điều kiện (
total_count).
Hành động 5: Bật/tắt chiến dịch
User story: Là một [Người cấu hình flow], tôi muốn [thay đổi trạng thái hoạt động của chiến dịch callbot theo điều kiện nghiệp vụ trong flow] để [kiểm soát thời điểm gọi mà không cần vào giao diện Chiến dịch thủ công].
-
Use case 5.1 (Chuyển sang Đang chạy): User chọn hành động → Chọn chiến dịch → Chọn trạng thái đích là
Đang chạy→ Khi flow chạy, hệ thống chuyển chiến dịch sang trạng thái đang hoạt động và các cuộc gọi trong chiến dịch được phép thực hiện. -
Use case 5.2 (Tạm dừng chiến dịch): User chọn trạng thái đích là
Tạm dừng→ Khi flow chạy, hệ thống tạm dừng chiến dịch → Các cuộc gọi đang xếp hàng trong chiến dịch không được thực hiện thêm cho đến khi chiến dịch được bật lại. -
Use case 5.3 (Exception – Chiến dịch không tồn tại hoặc đã bị xóa): Chiến dịch được chọn không còn hợp lệ → Node trả lỗi thực thi → Run detail ghi nhận.
-
Use case 5.4 (Exception – Chưa chọn chiến dịch hoặc trạng thái): Một trong hai field bắt buộc chưa được điền → Node ở trạng thái
lỗi cấu hình→ Flow không được xuất bản.
Cài đặt:
| Field | Loại | Bắt buộc | Mô tả |
|---|---|---|---|
| Chọn chiến dịch | Dropdown | ✅ | Chọn chiến dịch callbot cần thay đổi trạng thái. |
| Thay đổi trạng thái chiến dịch thành | Dropdown | ✅ | Chọn một trong hai trạng thái: Đang chạy hoặc Tạm dừng. |
Trạng thái chiến dịch chỉ có 2 giá trị:
- Đang chạy: chiến dịch đang hoạt động, hệ thống thực hiện gọi tự động.
- Tạm dừng: chiến dịch bị tạm ngưng, không gọi mới cho đến khi được bật lại.
Đầu ra:
- Trạng thái mới của chiến dịch sau khi thay đổi.
- Kết quả thực thi: thành công / thất bại.
Hành động 6: Gọi Callbot với kịch bản có sẵn
User story: Là một [Người cấu hình flow], tôi muốn [kích hoạt ngay một cuộc gọi callbot tới một khách hàng cụ thể theo kịch bản có sẵn] để [thực hiện cuộc gọi đơn lẻ theo sự kiện mà không cần đợi chiến dịch xử lý theo lô].
-
Use case 6.1 (Happy path – Gọi ngay): User chọn hành động → Chọn kịch bản callbot → Map số điện thoại từ output node trước → Truyền biến động vào kịch bản nếu cần → Khi flow chạy, hệ thống thực hiện cuộc gọi callbot ngay lập tức theo kịch bản đã chọn.
-
Use case 6.2 (Happy path – Khách không nghe máy): Cuộc gọi được thực hiện nhưng không có người nghe → Output trả về
status: NO_ANSWER→ Node sau có thể đọc trạng thái để rẽ nhánh (ví dụ: gửi SMS thay thế). -
Use case 6.3 (Exception – Số điện thoại không hợp lệ): Số điện thoại thiếu hoặc sai định dạng → Node trả lỗi validation → Flow không thực hiện cuộc gọi → Run detail ghi nhận.
-
Use case 6.4 (Exception – Service callbot lỗi): Hệ thống callbot trả lỗi khi thực thi → Node trả trạng thái
lỗi thực thi→ Run detail ghi nhận mã lỗi → Flow không crash.
Cài đặt:
- Chọn kịch bản callbot (bắt buộc).
- Map số điện thoại người nhận (bắt buộc).
- Map các biến động nếu kịch bản có placeholder.
Đầu ra:
| Field | Kiểu | Mô tả |
|---|---|---|
call_id |
string |
ID định danh cuộc gọi trong hệ thống UCALL |
status |
enum |
Trạng thái cuộc gọi: ANSWERED, NO_ANSWER, BUSY, FAILED |
duration_seconds |
number |
Thời lượng cuộc gọi tính bằng giây (0 nếu không nghe máy) |
recording_url |
string |
URL file ghi âm cuộc gọi nếu có |
dtmf_response |
string |
Phím bấm phản hồi của khách hàng nếu kịch bản có IVR |
called_at |
datetime |
Thời điểm thực hiện cuộc gọi |
3. Danh sách nghiệp vụ
Chung cho toàn bộ hành động:
- Người dùng phải chọn một hành động hợp lệ trước khi cấu hình các field còn lại; nếu chưa chọn hành động thì node ở trạng thái
chưa cấu hình. - Các field bắt buộc của từng hành động chưa được điền thì node bị đánh dấu
lỗi cấu hìnhvà flow không được xuất bản. - Chiến dịch được chọn phải đang tồn tại và hợp lệ trong hệ thống; chiến dịch đã bị xóa không được hiển thị.
- Output của mọi hành động phải có thể được tham chiếu tại các node tiếp theo trong flow.
- Nếu hành động thực thi lỗi ở runtime, node phải phản ánh rõ trạng thái
lỗi thực thitrong run detail mà không làm crash toàn bộ flow run.
Riêng cho hành động Gọi Callbot với kịch bản có sẵn:
- Số điện thoại người nhận phải đúng định dạng 10 chữ số Việt Nam hoặc định dạng quốc tế; nếu sai thì node trả lỗi validation.
- Kịch bản chưa được kích hoạt không được chọn để gọi.
- Node không tự retry; nếu cần retry thì người cấu hình thêm node Delay + Condition node rẽ nhánh theo
status.
4. Giao diện
- Figma tham chiếu:
- https://www.figma.com/design/tBBrdtHlG1LAYJUfJsvyS3/UCALL-2026–Ant-Design-5.10.1-?node-id=23163-157814&m=dev
- Card node hiển thị nhãn
Callbot, tóm tắt Hành động đang chọn và tên Chiến dịch đang liên kết. - Panel cấu hình bên phải gồm 3 tab:
Hành động,Cài đặt,Đầu ra.- Tab
Hành động: Thanh tìm kiếm + danh sách 6 hành động; hành động đang chọn được highlight. - Tab
Cài đặt: Form cấu hình tương ứng với hành động đang chọn (chọn chiến dịch, map field, cấu hình điều kiện). - Tab
Đầu ra: Hiển thị schema output của hành động đang chọn để node sau có thể tham chiếu.
- Tab
III. Yêu cầu phi chức năng
- Hiệu năng: Các hành động thao tác trên chiến dịch phải phản hồi trong vòng 5 giây; hành động
Gọi Callbotphải kích hoạt lệnh gọi trong vòng 3 giây. - Logging: Mọi thao tác qua node này phải được ghi log đầy đủ: thời điểm thực thi, hành động được dùng, chiến dịch liên quan và kết quả để đối chiếu trong run detail.
- Bảo mật: Số điện thoại khách hàng xử lý qua kênh nội bộ UCALL; không log raw payload ra ngoài.
- Giới hạn: Hành động
Lấy thông tin khách hàng chiến dịchcần giới hạn số lượng record trả về theo trang để tránh quá tải flow run khi chiến dịch có lượng lớn. - Tính nhất quán: Danh sách chiến dịch và kịch bản trong panel phải được đồng bộ từ hệ thống UCALL theo thời gian thực hoặc có cơ chế refresh để tránh hiển thị dữ liệu cũ.
IV. Dependency (liên quan & phụ thuộc)
- flow.md
- node_overview.md
- Module Chiến dịch Callbot của UCALL (quản lý campaign, kịch bản, danh sách khách hàng)
- Module Callbot / Kịch bản của UCALL (dùng cho hành động 6)
- Contact CRM nếu số điện thoại được map từ object contact
V. API Contract (Dev viết)
- Chưa chốt API chi tiết.
- Dự kiến node sẽ gọi tới internal API của module Chiến dịch Callbot với structure chung:
{ "action": "ADD_CUSTOMER | UPDATE_BY_FILTER | UPDATE_FROM_NODE | GET_CUSTOMERS | TOGGLE_CAMPAIGN | CALL_WITH_SCENARIO", "campaign_id": "string", "payload": {}, "flow_run_id": "string" } - Riêng hành động
Gọi Callbot với kịch bản có sẵn, payload dự kiến:{ "scenario_id": "string", "phone_number": "string", "variables": { "key": "value" }, "flow_run_id": "string" } - Kết quả cuộc gọi thực tế (hành động 6) được cập nhật qua callback/webhook sau khi cuộc gọi kết thúc.
VI. Test case (BA hoặc tester viết)
Hành động 1 – Thêm khách hàng vào chiến dịch:
- TC1.1: Map đủ số điện thoại hợp lệ, chiến dịch hợp lệ → Khách hàng được thêm thành công.
- TC1.2: Bỏ trống số điện thoại → Node trả lỗi thực thi.
- TC1.3: Khách hàng đã tồn tại trong chiến dịch → Hệ thống xử lý theo rule trùng lặp, không crash.
Hành động 2 – Cập nhật khách hàng chiến dịch theo điều kiện:
- TC2.1: Bộ lọc khớp nhiều record, có field cần cập nhật hợp lệ → Tất cả record thỏa điều kiện được cập nhật, output trả
updated_count> 0. - TC2.2: Bộ lọc không khớp record nào → Output trả
updated_count: 0, flow tiếp tục bình thường. - TC2.3: Chưa chọn chiến dịch → Node ở trạng thái
lỗi cấu hình, flow không xuất bản. - TC2.4: Bộ lọc
Thỏa mãn = Tất cả, 2 điều kiện, cả 2 đều khớp → Cập nhật thành công. - TC2.5: Bộ lọc
Thỏa mãn = Tất cả, 1 điều kiện khớp, 1 không → Không có record thỏa điều kiện,updated_count: 0. - TC2.6: Kiểm tra trường
Số điện thoạikhông xuất hiện trong danh sách field có thể cập nhật → Đúng theo thiết kế.
Hành động 3 – Cập nhật khách hàng từ node trước:
- TC3.1: Node Callbot trước (Hành động 4) trả về danh sách khách hàng, chọn đúng output →
Chiến dịchtự điền → Map field hợp lệ → Tất cả khách hàng trong danh sách được cập nhật thành công. - TC3.2: Node Callbot trước trả về
customers: []→updated_count: 0, flow tiếp tục bình thường. - TC3.3: Field
Chọn khách hàngđể trống → Node ở trạng tháilỗi cấu hình, flow không xuất bản. - TC3.4: Kiểm tra trường
Số điện thoạikhông xuất hiện trong danh sách field có thể cập nhật → Đúng theo thiết kế. - TC3.5: Chọn output từ node không phải Callbot → Hệ thống không cho phép chọn.
Hành động 4 – Lấy thông tin khách hàng chiến dịch:
- TC4.1: Chiến dịch hợp lệ, bộ lọc
Trạng thái là Thành côngkhớp nhiều record → Trả vềcustomers[]đúng,total_count> 0. - TC4.2: Bộ lọc không khớp record nào → Trả về
customers: [],total_count: 0, flow tiếp tục. - TC4.3: Không cấu hình bộ lọc → Trả về toàn bộ khách hàng của chiến dịch.
- TC4.4: Chưa chọn chiến dịch → Node ở trạng thái
lỗi cấu hình, flow không xuất bản. - TC4.5: Bộ lọc
Điều kiện thỏa mãn = Tất cả, 2 điều kiện – cả 2 khớp → Trả về đúng danh sách khách hàng thỏa cả 2 điều kiện.
Hành động 5 – Bật/tắt chiến dịch:
- TC5.1: Chiến dịch hợp lệ, chọn
Đang chạy→ Chiến dịch chuyển trạng tháiĐang chạythành công, các cuộc gọi được thực hiện. - TC5.2: Chiến dịch đang chạy, chọn
Tạm dừng→ Chiến dịch tạm dừng, không gọi mới. - TC5.3: Chiến dịch không tồn tại → Node trả lỗi thực thi, run detail ghi nhận.
- TC5.4: Chưa chọn chiến dịch → Node ở trạng thái
lỗi cấu hình, flow không xuất bản. - TC5.5: Chưa chọn trạng thái đích → Node ở trạng thái
lỗi cấu hình, flow không xuất bản.
Hành động 6 – Gọi Callbot với kịch bản có sẵn:
- TC6.1: Kịch bản hợp lệ, số điện thoại hợp lệ, điền đủ biến → Cuộc gọi được thực hiện, output trả
call_idvàstatus. - TC6.2: Khách không nghe máy → Output trả
status: NO_ANSWER,duration_seconds: 0. - TC6.3: Số điện thoại sai định dạng → Node trả lỗi validation, không thực hiện cuộc gọi.
- TC6.4: Chưa chọn kịch bản → Node ở trạng thái
lỗi cấu hình, flow không được xuất bản. - TC6.5: Service callbot trả HTTP 5xx → Node trả
lỗi thực thi, run detail ghi nhận mã lỗi, flow không crash.