Penerapan

Skema POST

Permintaan POST yang dikirim ke webhook akan dalam format JSON dengan skema berikut:

Payload Proto Webhook

// 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];
}

Deskripsi kolom

Kolom Deskripsi
lead_id String unik yang mengidentifikasi prospek tertentu.

Penanganan rekomendasi: Gunakan ini untuk menghapus duplikat prospek yang diterima. ID ini akan unik di semua formulir. Saat melaporkan masalah terkait prospek tertentu, ID ini akan diperlukan.

api_version Versi API yang memiliki skema prospek ini. Ini akan digunakan saat bermigrasi ke skema baru, dan dapat diabaikan untuk saat ini.
form_id ID unik untuk setiap formulir yang dikonfigurasi di Google Ads. Produk saat ini memungkinkan melampirkan formulir dengan tingkat kampanye (vs. melampirkan di tingkat grup iklan atau iklan).

Implikasi: Prospek hanya dapat dikelompokkan di tingkat form_id (yaitu, di tingkat kampanye).

Klien harus menggunakan bilangan bulat 8 byte untuk diproses.

campaign_id ID kampanye Google Ads atau ID item baris (Display & Video 360) dari formulir prospek terlampir.

Klien harus menggunakan bilangan bulat 8 byte untuk diproses.

adgroup_id ID grup iklan Google Ads digunakan untuk membedakan grup iklan tertentu dalam kampanye. (Hanya tersedia untuk prospek dari iklan video dan Discovery)

Klien harus menggunakan bilangan bulat 8 byte untuk diproses.

creative_id ID materi iklan Google Ads digunakan untuk membedakan materi iklan tertentu dalam grup iklan. (Hanya tersedia untuk prospek dari iklan video dan Discovery)

Klien harus menggunakan bilangan bulat 8 byte untuk diproses.

gcl_id ID klik Google, parameter unik yang digunakan untuk melacak setiap klik iklan.
google_key Kunci yang dikonfigurasi oleh pengiklan dengan setiap formulir.

Penanganan rekomendasi: Sebelum memproses prospek yang diterima melalui webhook, validasi google_key sama dengan konfigurasi di Google Ads agar lebih yakin bahwa prospek tersebut valid. Jaga kerahasiaan kunci ini dan perbarui di Google Ads jika ada alasan untuk meyakini bahwa kunci ini telah bocor secara luas.

is_test Kolom ini memiliki semantik "opsional". Jika nilainya benar, perlakukan prospek ini sebagai prospek pengujian. Jika nilai salah (false) atau jika kolom tidak ada, perlakukan prospek ini sebagai prospek produksi yang valid.
user_column_data Tuple nilai kunci berulang yang mengirimkan data yang dikirimkan pengguna.
  • user_column_data.column_id: Jenis data yang dikirimkan oleh pengguna.
  • User_column_data.column_value: Untuk setiap jenis data, akan ada jenis nilai yang diisi bergantung pada jenis data. Semua jenis data saat ini memiliki nilai user_column_data.string_value.
  • user_column_data.column_name: Teks yang dapat dibaca manusia dari jenis data yang dikirimkan oleh pengguna. Kolom ini mungkin tidak selalu diisi, gunakan column_id sebagai gantinya.
user_column_data.column_id Konten User_column_data.string_value user_column_data.column_name (Tidak digunakan lagi)
"FULL_NAME" Nama lengkap pengguna. "Nama Lengkap"
"FIRST_NAME" Nama depan pengguna. "Nama Depan"
"LAST_NAME" Nama belakang pengguna. "Nama Belakang"
"EMAIL" Email pengguna. "Email Pengguna"
"PHONE_NUMBER" Telepon Pengguna dalam format E.164, misalnya, "+11234567890". "User Phone" (Telepon Pengguna)
"PHONE_NUMBER_VERIFIED" Apakah Nomor telepon pengguna diverifikasi. "Nomor Telepon Terverifikasi"
"POSTAL_CODE" Kode pos pengguna. "Kode Pos"
"COMPANY_NAME" Nama perusahaan pengguna. "Nama Perusahaan"
"JOB_TITLE" Jabatan pengguna. "Jabatan"
"WORK_EMAIL" Email kantor pengguna. "Email Kantor"
"WORK_PHONE" Nomor telepon kantor pengguna. "Ponsel Kantor"
"STREET_ADDRESS" Alamat jalan pengguna. "Alamat Jalan"
"CITY" Kota pengguna. "Kota"
"REGION" Wilayah pengguna. "Region" (Wilayah)
"COUNTRY" Negara pengguna. "Negara"
"VEHICLE_MODEL" Model manakah yang Anda minati? T/A
"VEHICLE_TYPE" Jenis kendaraan apa yang Anda minati? T/A
"PREFERRED_DEALERSHIP" Pilih dealer yang Anda inginkan T/A
"VEHICLE_PURCHASE_TIMELINE" Kapan Anda berencana membeli kendaraan? T/A
"VEHICLE_CONDITION" Jenis kondisi kendaraan apa yang Anda minati? T/A
"VEHICLE_OWNERSHIP" Apakah Anda memiliki kendaraan pribadi? "T/A"
"VEHICLE_PAYMENT_TYPE" Opsi kepemilikan kendaraan apa yang Anda minati? T/A
"COMPANY_SIZE" Seberapa besar perusahaan Anda? T/A
"ANNUAL_SALES" Seberapa besar volume penjualan tahunan Anda? T/A
"YEARS_IN_BUSINESS" Sudah berapa lama Anda berbisnis? T/A
"JOB_DEPARTMENT" Apa departemen pekerjaan Anda? T/A
"JOB_ROLE" Apa peran pekerjaan Anda? T/A
"EDUCATION_PROGRAM" Program manakah yang Anda minati? T/A
"EDUCATION_COURSE" Kursus manakah yang Anda minati? T/A
"PRODUCT" Produk manakah yang Anda minati? T/A
"SERVICE" Layanan manakah yang Anda minati? T/A
"OFFER" Penawaran manakah yang menarik bagi Anda? T/A
"CATEGORY" Kategori manakah yang Anda minati? T/A
"PREFERRED_CONTACT_METHOD" Pilih metode kontak yang Anda inginkan T/A
"PREFERRED_LOCATION" Pilih lokasi yang Anda inginkan T/A
"PREFERRED_CONTACT_TIME" (WAKTU PREFERENSI UNTUK DIHUBUNGI) Kapan waktu yang sesuai untuk menghubungi Anda? T/A
"PURCHASE_TIMELINE" Kapan Anda akan melakukan pembelian? T/A
"YEARS_OF_EXPERIENCE" Berapa tahun pengalaman kerja yang Anda miliki? T/A
"JOB_INDUSTRY" Apa industri tempat Anda bekerja? T/A
"LEVEL_OF_EDUCATION" Apa tingkat pendidikan tertinggi Anda? T/A
"PROPERTY_TYPE" Jenis properti apa yang Anda cari? T/A
"REALTOR_HELP_GOAL" Bantuan apa yang Anda butuhkan dari agen properti? T/A
"PROPERTY_COMMUNITY" Komunitas apa yang Anda minati? T/A
"PRICE_RANGE" Berapa rentang harga yang Anda cari? T/A
"NUMBER_OF_BEDROOMS" Berapa kamar yang Anda cari? T/A
"FURNISHED_PROPERTY" Apakah Anda mencari properti dengan furnitur lengkap? T/A
"PETS_ALLOWED_PROPERTY" Apakah Anda mencari properti yang mengizinkan hewan peliharaan? T/A
"NEXT_PLANNED_PURCHASE" Produk apa yang akan Anda beli selanjutnya? T/A
"EVENT_SIGNUP_INTEREST" Apakah Anda ingin mendaftar untuk suatu acara? T/A
"PREFERRED_SHOPPING_PLACES" Di manakah Anda tertarik untuk berbelanja? T/A
"FAVORITE_BRAND" Apa merek favorit Anda? T/A
"TRANSPORTATION_COMMERCIAL_LICENSE_TYPE" Apa jenis SIM kendaraan niaga yang valid yang Anda miliki? T/A
"EVENT_BOOKING_INTEREST" Apakah Anda ingin memesan tiket untuk acara? T/A
"DESTINATION_COUNTRY" Apa negara tujuan Anda? T/A
"DESTINATION_CITY" Apa kota tujuan Anda? T/A
"DEPARTURE_COUNTRY" Dari negara mana Anda berangkat? T/A
"DEPARTURE_CITY" Dari kota mana Anda berangkat? T/A
"DEPARTURE_DATE" Kapan tanggal keberangkatan Anda? T/A
"RETURN_DATE" Kapan tanggal kepulangan Anda? T/A
"NUMBER_OF_TRAVELERS" Berapa banyak teman perjalanan Anda? T/A
"TRAVEL_BUDGET" Berapa anggaran perjalanan Anda? T/A
"TRAVEL_ACCOMMODATION" Di mana Anda ingin bermalam saat melakukan perjalanan? T/A
asset_group_id Kolom ini hanya diisi untuk kampanye Performa Maksimal. Menunjukkan ID penampung yang berisi formulir prospek.

Klien harus menggunakan bilangan bulat 8 byte untuk diproses.

lead_stage Ini menunjukkan tahap prospek pada saat pengiriman prospek. Kolom ini berguna dalam melacak tahap funnel / status konversi prospek.
lead_submit_time Ini menunjukkan stempel waktu saat pengguna mengirimkan formulir. Direpresentasikan dalam format ISO-8601. Ex- 2024-09-26T12:30:00Z

Kolom yang tidak dikenal dan kompatibilitas ke depan

Untuk memastikan integrasi webhook Anda tetap kuat dan dapat beradaptasi dengan peningkatan di masa mendatang, praktik terbaik standar adalah mendesain parser JSON Anda agar mengabaikan dengan baik semua kolom dalam payload webhook yang tidak secara eksplisit digunakan atau dikenali oleh sistem Anda.

Rekomendasi Utama: Konfigurasi logika penguraian JSON Anda agar hanya memproses kolom yang secara khusus Anda perlukan untuk aplikasi Anda. Jangan menulis kode yang mengharapkan sekumpulan kolom tetap atau yang akan gagal jika ada kolom baru yang tidak terduga dalam payload.

Mengapa hal ini penting:

  • Kompatibilitas ke Depan: Google dapat menambahkan kolom baru yang bersifat opsional ke payload webhook dalam update mendatang untuk memberikan data yang lebih kaya atau fitur baru. Jika parser Anda terlalu ketat (misalnya, gagal pada properti yang tidak diketahui), integrasi Anda dapat terganggu saat perubahan tidak merusak tersebut diluncurkan oleh Google.
  • Pemeliharaan yang Disederhanakan: Dengan hanya berfokus pada titik data yang aktif Anda gunakan, kode integrasi Anda tetap lebih sederhana dan lebih mudah dikelola.

Sebagian besar library penguraian JSON modern menawarkan opsi untuk mengabaikan properti yang tidak diketahui secara default atau dapat dikonfigurasi untuk melakukannya.

Penanganan prospek

Penangan prospek harus merespons dengan kode HTTP berikut:

Respons HTTP Isi respons (JSON) Error yang dapat dicoba lagi?
200 {} T/A
4XX {"message: Free form error text, describing what was wrong with request"} Tidak
5XX {"message: Intermittent retraible error optional message"} Ya

Duplikat

Satu lead tidak dijamin akan dikirimkan tepat satu kali, sehingga webhook penanganan lead harus menangani duplikat dengan baik.