> For the complete documentation index, see [llms.txt](https://docs.salework.net/salework-tai-lieu/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.salework.net/salework-tai-lieu/salework-contact/vai-tro-admin/tich-hop-du-lieu-tu-he-thong-ben-ngoai-vao-salework-contact.md).

# Tích hợp dữ liệu từ hệ thống bên ngoài vào Salework Contact

### Mục đích

Tính năng **Tích hợp dữ liệu (Inbound Webhook)** cho phép hệ thống bên ngoài (Website, Landing Page, CRM, Google Apps Script, Facebook Lead Form,...) gửi dữ liệu khách hàng trực tiếp vào Salework Contact thông qua **Webhook URL**.

Sau khi nhận dữ liệu, hệ thống sẽ:

* Tự động tạo khách hàng mới.
* Kiểm tra trùng theo số điện thoại.
* Cập nhật dữ liệu nếu khách hàng đã tồn tại.
* Đưa khách hàng vào đúng Kho dữ liệu và Quy trình đã cấu hình.

***

## Điều kiện sử dụng

Người dùng cần có quyền quản trị hệ thống.

Chuẩn bị trước:

* Đã tạo Kho dữ liệu.
* Đã tạo Quy trình.
* Có hệ thống có khả năng gửi HTTP POST (JSON).

***

## Truy cập tính năng

Truy cập màn hình khách hàng -> Tích hợp

Màn hình hiển thị danh sách các cổng tích hợp đã tạo.

<figure><img src="/files/U5lOp8ZoxmmVCjgLmiy9" alt=""><figcaption></figcaption></figure>

***

## Tạo cổng tích hợp mới

Nhấn

**Thêm mới Inbound**

Hệ thống mở màn hình cấu hình.

Các thông tin cần khai báo:

| Trường            | Ý nghĩa                                              |
| ----------------- | ---------------------------------------------------- |
| Quy trình áp dụng | Quy trình khách hàng sẽ tham gia sau khi được tạo    |
| Tên cổng          | Tên nhận diện webhook                                |
| Kho dữ liệu       | Kho lưu khách hàng                                   |
| Webhook URL       | Địa chỉ để hệ thống ngoài gửi dữ liệu                |
| Kiểm tra trùng    | Kiểm tra theo số điện thoại trước khi tạo khách hàng |

***

## Kiểm tra trùng dữ liệu

Khi bật tùy chọn:

**Kiểm tra trùng số điện thoại và tự động cập nhật vào dữ liệu gần nhất**

Hệ thống sẽ:

* tìm khách hàng theo SĐT
* nếu chưa có → tạo mới
* nếu đã tồn tại → cập nhật thông tin mới

> Lưu ý:
>
> Số điện thoại là trường định danh chính của dữ liệu khách hàng.

***

## Thiết lập dữ liệu mẫu lần đầu

Sau khi tạo webhook, cần gửi một payload mẫu từ hệ thống ngoài để Salework Contact nhận diện các trường dữ liệu.

Có thể:

* Dán trực tiếp JSON mẫu
* Hoặc chọn **Push dữ liệu mẫu**

Sau khi hệ thống đọc dữ liệu, các key sẽ xuất hiện để thực hiện Mapping.

Ví dụ dữ liệu mẫu:

```
{  "variant_url": "",  "utm_campaign": "",  "ip": "222.252.23.45",  "utm_medium": "",  "Số lượng nhân sự quản lý": "",  "link": "https://www.saleworkzalomanager.com/dangky",  "message_id": "be624ef2-7de2-11f0-b793-f4359504c510",  "message": "12ewqe",  "utm_term": "",  "message_time": 1755707325868,  "event_id": "ladi.1755682125765.90360982908",  "phone": "0975444222",  "url_page": "https://www.saleworkzalomanager.com/dangky",  "name": "3123",  "ladi_form_id": "FORM4",  "data_fbp": "fb.1.1751070267992.764822425151210374",  "email": "12312@gmail.com",  "user_agent": "Mozilla/5.0...",  "variant_content": "",  "utm_source": "",  "utm_content": ""}
```

***

## Mapping dữ liệu

Sau khi đọc JSON mẫu, hệ thống sẽ hiển thị:

* Danh sách trường của Salework Contact
* Danh sách key nhận được từ payload

Người dùng chọn trường tương ứng.

Ví dụ:

| Trường Salework | Key nhận từ Webhook |
| --------------- | ------------------- |
| Họ và tên       | name                |
| Số điện thoại   | phone               |
| Email           | email               |
| Ghi chú         | message             |

Các trường không cần sử dụng có thể bỏ trống.

***

## Kích hoạt cổng tích hợp

Sau khi hoàn tất Mapping

Nhấn

**Kích hoạt cổng**

Webhook sẽ sẵn sàng tiếp nhận dữ liệu.

***

## Ví dụ luồng hoạt động

&#x20;                     Website\
&#x20;                            │\
&#x20;                            │ Submit Form\
&#x20;                           ▼\
&#x20;                     Google Apps Script\
&#x20;                            │\
&#x20;                            │ HTTP POST\
&#x20;                           ▼\
&#x20;                     Webhook URL Salework Contact\
&#x20;                            │\
&#x20;                           ▼\
&#x20;                     Kiểm tra trùng SĐT\
&#x20;                            │\
&#x20;                    ┌────────┐\
&#x20;                     │                                │\
&#x20;                     Có                      Không\
&#x20;                        │                             │\
&#x20;                     Cập nhật        Tạo khách hàng\
&#x20;                        │\
&#x20;                       ▼\
&#x20;                     Đưa vào Kho dữ liệu\
&#x20;                        │\
&#x20;                       ▼\
&#x20;                     Tham gia Quy trình

***

## Payload tối thiểu khuyến nghị

Để tạo khách hàng thành công, nên gửi tối thiểu:

{\
"name":"Nguyễn Văn A",\
"phone":"0987654321"\
}

Khuyến nghị bổ sung:

{\
"name":"Nguyễn Văn A",\
"phone":"0987654321",\
"email":"<abc@gmail.com>",\
"message":"Khách hàng quan tâm gói Premium",\
"utm\_source":"facebook",\
"utm\_campaign":"sale2025",\
"url\_page":"<https://landingpage.com",\\>
"ip":"222.252.23.45"\
}

***

## Ví dụ tích hợp Google Form bằng Apps Script

Ví dụ một Google Form thu thập các trường:

* Họ và tên
* Số điện thoại
* Facebook/Zalo/TikTok
* Tên Shop
* Ngành hàng
* Nhu cầu
* Quy mô
* Thời gian tư vấn
* Ghi chú

Apps Script chỉ cần Mapping tại một nơi để dễ bảo trì.

```
const WEBHOOK =  "https://contact.salework.net:808/api/webhook/v1.0/sota/ec0c50fc-7655-4dac-bb2f-4079dfda";const FIELD_MAP = {  "Họ và tên khách hàng": "name",  "Số điện thoại khách hàng": "phone",  "Link Facebook/Zalo/TikTok của khách hàng (nếu có)": "social_link",  "Tên shop/doanh nghiệp khách hàng?": "shop_name",  "Khách hàng hiện đang kinh doanh sản phẩm/ngành hàng nào?": "industry",  "Nhu cầu khách hàng đang quan tâm là gì?": "need",  "Quy mô vận hành hiện tại của khách hàng?": "company_size",  "Thời gian khách hàng có thể nhận tư vấn": "contact_time",  "Ghi chú thêm (nếu có)": "message"};function buildPayload(formData) {  const payload = {};  Object.keys(FIELD_MAP).forEach(formField => {    const webhookKey = FIELD_MAP[formField];    payload[webhookKey] = formData[formField] || "";  });  return payload;}function sendWebhook(payload) {  UrlFetchApp.fetch(WEBHOOK, {    method: "post",    contentType: "application/json",    payload: JSON.stringify(payload)  });}
```

**Ưu điểm của cách triển khai này:**

* Chỉ cần sửa `FIELD_MAP` khi thay đổi tên key hoặc bổ sung trường mới.
* Không phải sửa logic xử lý hoặc gửi webhook.
* Dễ mở rộng khi Salework Contact bổ sung thêm trường dữ liệu trong tương lai.
