Triển khai

Giản đồ POST

Yêu cầu POST được gửi đến webhook sẽ ở định dạng JSON với giản đồ sau:

Tải trọng Webhook Proto

// Represent user lead data for single column
message UserLeadColumnData {
  // Human-readable text of the field type (e.g.: Full Name,  What is your
  // preferred dealership?). This field might not always be populated.
  optional string column_name = 1;

  // Column value based on column type
  oneof column_value {
    string string_value = 2;
  }
  // Column ID. Populated for all types of fields. (e.g.: FULL_NAME)
  optional string column_id = 3;
}

// Message to construct webhook JSON payload
message WebhookLead {
  // Unique ID to represent lead
  optional string lead_id = 1;
  // User inputted data per column
  repeated UserLeadColumnData user_column_data = 2;
  // API version
  optional string api_version = 3;
  // Form ID to which lead belonged to.
  optional int64 form_id = 4;
  // Campaign ID that the lead form is associated with
  optional int64 campaign_id = 5;
  // Key to be used by advertiser to verify the request
  // is from Google.
  optional string google_key = 6;
  // Denotes if the lead is a test lead.
  optional bool is_test = 7;
  // Click ID for the lead submission.
  optional string gcl_id = 8;
  // Adgroup ID which generated the lead.
  optional int64 adgroup_id = 9;
  // Creative ID which generated the lead.
  optional int64 creative_id = 10;
  // Asset group ID represents the container for holding assets, associated
  // URLs, hints and criteria that will be used to select assets and for
  // optimization. This field is only populated for Performance Max campaigns.
  int64 asset_group_id = 11;
  // Lead stage at the time of delivery.
  string lead_stage = 12 [(datapol.semantic_type) = ST_NOT_REQUIRED];
  // Lead submit time in ISO-8601 format. Ex- 2024-09-26T12:30:00Z
  string lead_submit_time = 13 [(datapol.semantic_type) = ST_NOT_REQUIRED];
}

Phần mô tả về trường

Trường Mô tả
lead_id Chuỗi duy nhất xác định một khách hàng tiềm năng cụ thể.

Xử lý đề xuất: Sử dụng đề xuất này để loại bỏ khách hàng tiềm năng trùng lặp mà bạn nhận được. Mã này sẽ là duy nhất trên tất cả các biểu mẫu. Khi báo cáo vấn đề liên quan đến một khách hàng tiềm năng cụ thể, bạn sẽ phải cung cấp mã nhận dạng này.

api_version Phiên bản API mà giản đồ khách hàng tiềm năng này thuộc về. Thao tác này sẽ được dùng khi di chuyển sang một giản đồ mới và bạn có thể bỏ qua thao tác này ngay bây giờ.
form_id Mã nhận dạng riêng biệt cho từng biểu mẫu được định cấu hình trong Google Ads. Sản phẩm hiện tại cho phép đính kèm biểu mẫu ở cấp chiến dịch (thay vì đính kèm ở cấp nhóm quảng cáo hoặc quảng cáo).

Hậu quả: Bạn chỉ có thể phân đoạn khách hàng tiềm năng ở cấp form_id (tức là ở cấp chiến dịch).

Khách hàng cần sử dụng số nguyên 8 byte để xử lý.

campaign_id Mã chiến dịch Google Ads hoặc mã mục hàng (Display & Video 360) của biểu mẫu khách hàng tiềm năng được đính kèm.

Khách hàng cần sử dụng số nguyên 8 byte để xử lý.

adgroup_id Mã nhóm quảng cáo trên Google Ads được dùng để phân biệt nhóm quảng cáo cụ thể trong chiến dịch. (Chỉ dành cho khách hàng tiềm năng từ quảng cáo dạng video và quảng cáo Khám phá)

Khách hàng cần sử dụng số nguyên 8 byte để xử lý.

creative_id Mã mẫu quảng cáo Google Ads được dùng để phân biệt mẫu quảng cáo cụ thể trong nhóm quảng cáo. (Chỉ dành cho khách hàng tiềm năng từ quảng cáo dạng video và quảng cáo Khám phá)

Khách hàng cần sử dụng số nguyên 8 byte để xử lý.

gcl_id Mã lượt nhấp của Google, một tham số duy nhất dùng để theo dõi từng lượt nhấp vào quảng cáo.
google_key Khoá do nhà quảng cáo định cấu hình cho từng biểu mẫu.

Cách xử lý đề xuất: Trước khi xử lý khách hàng tiềm năng nhận được qua webhook, hãy xác thực google_key giống như khi định cấu hình trong Google Ads để tin tưởng hơn rằng khách hàng tiềm năng là hợp lệ. Giữ bí mật khoá này và cập nhật trong Google Ads nếu có lý do để tin rằng khoá này đã bị rò rỉ trên diện rộng.

is_test Trường này có ngữ nghĩa "không bắt buộc". Nếu giá trị là true, hãy coi khách hàng tiềm năng này là khách hàng tiềm năng thử nghiệm. Nếu giá trị là false hoặc nếu trường không có, hãy coi khách hàng tiềm năng này là khách hàng tiềm năng hợp lệ để sản xuất.
user_column_data Một bộ khoá-giá trị lặp lại truyền dữ liệu do người dùng gửi.
  • user_column_data.column_id: Loại dữ liệu do người dùng gửi.
  • User_column_data.column_value: Đối với mỗi loại dữ liệu, sẽ có một loại giá trị được điền sẵn tuỳ thuộc vào loại dữ liệu. Tất cả các kiểu dữ liệu hiện tại của chúng tôi đều có giá trị user_column_data.string_value.
  • user_column_data.column_name: Văn bản mà con người có thể đọc được về kiểu dữ liệu do người dùng gửi. Trường này có thể không phải lúc nào cũng được điền sẵn, hãy sử dụng column_id .
user_column_data.column_id Nội dung User_column_data.string_value user_column_data.column_name (Không dùng nữa)
"FULL_NAME" Họ và tên của người dùng. "Tên đầy đủ"
"FIRST_NAME" Tên của người dùng. "Tên"
"LAST_NAME" Họ của người dùng. "Họ"
"EMAIL" Email người dùng. "Email của người dùng"
"PHONE_NUMBER" Điện thoại của người dùng ở định dạng E.164, ví dụ: "+11234567890". "Điện thoại của người dùng"
"PHONE_NUMBER_VERIFIED" Số điện thoại của người dùng đã được xác minh hay chưa. "Đã xác minh số điện thoại"
"POSTAL_CODE" Mã bưu chính của người dùng. "Mã bưu chính"
"COMPANY_NAME" Tên công ty của người dùng. "Tên công ty"
"JOB_TITLE" Chức danh của người dùng. "Chức danh"
"WORK_EMAIL" Email công việc của người dùng. "Email công việc"
"WORK_PHONE" Số điện thoại cơ quan của người dùng. "Điện thoại công việc"
"STREET_ADDRESS" Địa chỉ đường phố của người dùng. "Địa chỉ đường"
"CITY" Thành phố của người dùng. "Thành phố"
"REGION" Khu vực của người dùng. "Khu vực"
"COUNTRY" Quốc gia của người dùng. "Quốc gia"
"VEHICLE_MODEL" Bạn quan tâm đến mô hình nào? Không áp dụng
"VEHICLE_TYPE" Bạn quan tâm đến loại phương tiện đi lại nào? Không áp dụng
"PREFERRED_DEALERSHIP" Chọn đại lý bạn ưa thích Không áp dụng
"VEHICLE_PURCHASE_TIMELINE" Khi nào bạn có kế hoạch mua xe? Không áp dụng
"VEHICLE_CONDITION" Bạn quan tâm đến tình trạng xe nào? Không áp dụng
"VEHICLE_OWNERSHIP" Bạn có sở hữu phương tiện đi lại nào không? "Không áp dụng"
"VEHICLE_PAYMENT_TYPE" Bạn muốn chọn quyền sở hữu xe nào? Không áp dụng
"COMPANY_SIZE" Công ty bạn có quy mô như thế nào? Không áp dụng
"ANNUAL_SALES" Doanh số hàng năm của bạn là bao nhiêu? Không áp dụng
"YEARS_IN_BUSINESS" Bạn đã kinh doanh được bao nhiêu năm? Không áp dụng
"JOB_DEPARTMENT" Ngành nghề của bạn là gì? Không áp dụng
"JOB_ROLE" Chức danh của bạn là gì? Không áp dụng
"EDUCATION_PROGRAM" Bạn quan tâm đến chương trình nào? Không áp dụng
"EDUCATION_COURSE" Bạn quan tâm đến khóa học nào? Không áp dụng
"PRODUCT" Bạn quan tâm đến sản phẩm nào? Không áp dụng
"SERVICE" Bạn quan tâm đến dịch vụ nào? Không áp dụng
"OFFER" Bạn quan tâm đến dịch vụ nào? Không áp dụng
"CATEGORY" Bạn quan tâm đến danh mục nào? Không áp dụng
"PREFERRED_CONTACT_METHOD" Chọn phương thức liên hệ mà bạn muốn Không áp dụng
"PREFERRED_LOCATION" Chọn địa điểm mà bạn muốn Không áp dụng
"PREFERRED_CONTACT_TIME" Thời điểm tốt nhất để liên hệ với bạn là khi nào? Không áp dụng
"PURCHASE_TIMELINE" Bạn định thực hiện giao dịch mua khi nào? Không áp dụng
"YEARS_OF_EXPERIENCE" Bạn có bao nhiêu năm kinh nghiệm làm việc? Không áp dụng
"JOB_INDUSTRY" Bạn làm ngành gì? Không áp dụng
"LEVEL_OF_EDUCATION" Trình độ học vấn cao nhất của bạn là gì? Không áp dụng
"PROPERTY_TYPE" Bạn đang tìm kiếm loại khách sạn nào? Không áp dụng
"REALTOR_HELP_GOAL" Bạn cần người môi giới trợ giúp về vấn đề gì? Không áp dụng
"PROPERTY_COMMUNITY" Bạn quan tâm đến cộng đồng nào? Không áp dụng
"PRICE_RANGE" Bạn đang tìm kiếm khoảng giá nào? Không áp dụng
"NUMBER_OF_BEDROOMS" Bạn đang tìm kiếm chỗ ở có bao nhiêu phòng ngủ? Không áp dụng
"FURNISHED_PROPERTY" Bạn có đang tìm kiếm khách sạn có sẵn đồ đạc không? Không áp dụng
"PETS_ALLOWED_PROPERTY" Bạn đang tìm kiếm khách sạn cho phép thú cưng phải không? Không áp dụng
"NEXT_PLANNED_PURCHASE" Bạn dự định mua loại sản phẩm nào tiếp theo? Không áp dụng
"EVENT_SIGNUP_INTEREST" Bạn có muốn đăng ký tham gia sự kiện không? Không áp dụng
"PREFERRED_SHOPPING_PLACES" Bạn thích mua sắm ở đâu? Không áp dụng
"FAVORITE_BRAND" Bạn yêu thích thương hiệu nào? Không áp dụng
"TRANSPORTATION_COMMERCIAL_LICENSE_TYPE" Bạn có loại giấy phép thương mại còn hiệu lực nào? Không áp dụng
"EVENT_BOOKING_INTEREST" Bạn có muốn đặt chỗ tổ chức sự kiện không? Không áp dụng
"DESTINATION_COUNTRY" Bạn đến quốc gia nào? Không áp dụng
"DESTINATION_CITY" Bạn đến thành phố nào? Không áp dụng
"DEPARTURE_COUNTRY" Bạn khởi hành từ quốc gia nào? Không áp dụng
"DEPARTURE_CITY" Bạn khởi hành từ thành phố nào? Không áp dụng
"DEPARTURE_DATE" Bạn khởi hành vào ngày nào? Không áp dụng
"RETURN_DATE" Bạn quay về vào ngày nào? Không áp dụng
"NUMBER_OF_TRAVELERS" Bạn sẽ đi với bao nhiêu người? Không áp dụng
"TRAVEL_BUDGET" Ngân sách cho việc di chuyển của bạn là bao nhiêu? Không áp dụng
"TRAVEL_ACCOMMODATION" Bạn muốn lưu trú ở đâu trong thời gian di chuyển? Không áp dụng
asset_group_id Trường này chỉ được điền sẵn cho chiến dịch Tối đa hoá hiệu suất. Đây là mã nhận dạng vùng chứa chứa biểu mẫu khách hàng tiềm năng.

Khách hàng cần sử dụng số nguyên 8 byte để xử lý.

lead_stage Đây là giai đoạn khách hàng tiềm năng tại thời điểm phân phối khách hàng tiềm năng. Trường này hữu ích trong việc theo dõi giai đoạn trên phễu / trạng thái chuyển đổi của khách hàng tiềm năng.
lead_submit_time Đây là dấu thời gian cho biết thời điểm người dùng gửi biểu mẫu. Được biểu thị ở định dạng ISO-8601. Ex- 2024-09-26T12:30:00Z

Các trường không được nhận dạng và khả năng tương thích trong tương lai

Để đảm bảo chế độ tích hợp webhook của bạn vẫn mạnh mẽ và có thể thích ứng với các tính năng nâng cao trong tương lai, bạn nên thiết kế trình phân tích cú pháp JSON để bỏ qua một cách linh hoạt mọi trường trong tải trọng webhook mà hệ thống của bạn không sử dụng hoặc nhận dạng một cách rõ ràng.

Đề xuất chính: Định cấu hình logic phân tích cú pháp JSON để chỉ xử lý các trường mà bạn cần cụ thể cho ứng dụng của mình. Đừng viết mã dự kiến một tập hợp trường cố định hoặc sẽ gặp lỗi nếu có các trường mới, không mong muốn trong tải trọng.

Tại sao điều này lại quan trọng:

  • Khả năng tương thích về sau: Google có thể thêm các trường mới (không bắt buộc) vào tải trọng webhook trong các bản cập nhật sau này để cung cấp dữ liệu phong phú hơn hoặc các tính năng mới. Nếu trình phân tích cú pháp của bạn quá nghiêm ngặt (ví dụ: không thành công đối với các thuộc tính không xác định), thì quá trình tích hợp của bạn có thể bị gián đoạn khi Google triển khai những thay đổi không gây lỗi như vậy.
  • Bảo trì đơn giản: Bằng cách chỉ tập trung vào những điểm dữ liệu mà bạn đang sử dụng, mã tích hợp của bạn sẽ đơn giản và dễ duy trì hơn.

Hầu hết các thư viện phân tích cú pháp JSON hiện đại đều cung cấp các lựa chọn để bỏ qua các thuộc tính không xác định theo mặc định hoặc có thể được định cấu hình để làm như vậy.

Xử lý khách hàng tiềm năng

Trình xử lý khách hàng tiềm năng phải phản hồi bằng các mã HTTP sau:

Phản hồi HTTP Nội dung phản hồi (JSON) Lỗi có thể thử lại?
200 {} Không áp dụng
4XX {"message: Free form error text, describing what was wrong with request"} Không
5XX {"message: Intermittent retraible error optional message"}

Liên hệ trùng lặp

Không đảm bảo rằng một khách hàng tiềm năng duy nhất sẽ được phân phối chính xác một lần, do đó, webhook xử lý khách hàng tiềm năng phải xử lý các trường hợp trùng lặp một cách phù hợp.