Penawaran
Integrasi penawaran memungkinkan Anda menyampaikan informasi terstruktur tentang promosi dan diskon penjual yang diterapkan pada layanan tertentu pada waktu tertentu. Penawaran terdiri dari penawaran sebenarnya (persentase diskon, potongan harga ...), periode validitas (waktu tertentu, hari dalam seminggu ...), dan penggunaan yang berlaku (penawaran hanya dapat digunakan pada layanan tertentu) serta kombinasi pembatasan yang kompleks.
Contoh penawaran:
- Hidangan pembuka setengah harga pada hari Rabu dan Kamis di bulan Desember dari pukul 12.00 hingga 17.00
- Beli satu gratis satu hidangan penutup untuk makan malam Hari Ibu dari pukul 18.00 hingga 22.00
- Diskon $5 untuk hidangan utama sarapan siang setiap hari Minggu pukul 10.00 hingga 14.00
- Diskon 10% sebagai penawaran datang langsung yang dapat digabungkan dengan diskon 5% untuk pelanggan premium dan diskon 5% jika pengguna membayar melalui aplikasi Anda.
Agar penawaran disertakan dalam integrasi, penawaran tersebut harus sesuai dengan model data teknis dan memenuhi persyaratan kelayakan kami. Pastikan untuk meninjau kebijakan penawaran kami untuk memastikan integrasi Anda mematuhi kebijakan dan untuk mendapatkan petunjuk tentang tindakan yang harus dilakukan terhadap penawaran yang tidak sesuai dengan persyaratan teknis.
Penerapan penawaran
Integrasi penawaran terdiri dari dua feed yang akan diupload setiap hari atau pada frekuensi yang memastikan akurasi tinggi (yang berarti mengurangi keusangan):
- Salah satu:
- Feed penjual
(menggunakan konfigurasi
Merchant) - Atau
Feed entitas
(menggunakan
konfigurasi
Generic)
- Feed penjual
(menggunakan konfigurasi
- Dan
Feed penawaran
(menggunakan
konfigurasi
Generic)
OfferFeed
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
data | array objek(Offer) |
Penawaran
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
offer_id | string | Wajib | ID unik penawaran. Wajib. |
entity_ids | array string | Daftar penjual yang berpartisipasi dalam penawaran ini. | |
add_on_offer_applicable_to_all_entities | boolean | Jika benar, penawaran ini berlaku untuk semua entity di bawah agregator. Hanya berlaku untuk penawaran add-on. | |
offer_source | enum(OfferSource) | Wajib | Penawaran dapat diberikan oleh agregator, penjual perorangan, atau bahkan pihak ketiga sebagai add-on. Wajib. |
action_type | enum(ActionType) | Wajib | Layanan yang menyediakan penawaran. offer_id hanya dapat dimiliki oleh satu action_type. Jika penawaran dapat dibagikan di beberapa jenis layanan, penawaran duplikat dengan ID unik diharapkan dibuat untuk setiap jenis layanan. Wajib. |
offer_modes | array enum(OfferMode) | Wajib | Metode yang dapat digunakan untuk mendapatkan penawaran - datang langsung, reservasi, online, dll. Wajib diisi. |
offer_category | enum(OfferCategory) | Wajib | Kategori penawaran. Wajib. |
source_assigned_priority | angka | Bilangan bulat non-negatif ([1-100], dengan 1 mewakili prioritas tertinggi) yang menunjukkan tingkat prioritas penawaran yang ditetapkan oleh sumber. Jika beberapa penawaran tersedia untuk penjual yang sama, ini akan menjadi sinyal untuk memberi peringkat penawaran. 0 menunjukkan bahwa prioritas tidak ditetapkan. | |
offer_details | object(OfferDetails) | Wajib | Detail penawaran seperti diskon, biaya pemesanan, dll. Wajib diisi. |
offer_restrictions | object(OfferRestrictions) | Wajib | Menjelaskan bagaimana penawaran dibatasi, yaitu apakah langganan/alat pembayaran diperlukan, apakah penawaran ini dapat digabungkan dengan penawaran lain (dan jenisnya), dll. Wajib. |
coupon | object(Coupon) | Detail kupon. Wajib untuk offer_category: OFFER_CATEGORY_ADD_ON_COUPON_OFFER. | |
payment_instrument | object(PaymentInstrument) | Detail instrumen pembayaran. Wajib untuk offer_category: OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER. | |
subscription | object(Subscription) | Detail langganan. Wajib untuk offer_category: OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER. | |
terms | object(Terms) | Wajib | Persyaratan dan ketentuan penawaran. Wajib. |
validity_periods | array objek(ValidityPeriod) | Wajib | Periode validitas penawaran. Menjelaskan jangka waktu berlakunya penawaran, termasuk waktu mulai dan akhir, hari dalam seminggu, dll. Wajib. |
offer_url | string | URL ke halaman penawaran penjual. Wajib untuk offer_category: OFFER_CATEGORY_BASE_OFFER. | |
tags | array enum(OfferTag) | Tag khusus yang terkait dengan penawaran. Ini digunakan untuk mengidentifikasi penawaran khusus seperti "Festive", "Top Rated", "Most booked", dll. | |
brand_id | string | Wajib diisi untuk transaksi Kartu Voucher guna mengidentifikasi merek yang menawarkan transaksi. | |
availability_level | enum(AvailabilityLevel) | Tingkat ketersediaan penawaran. |
OfferDetails
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
offer_display_text | string | Wajib | Teks penawaran yang ingin ditampilkan penyedia penawaran kepada pelanggan di halaman hasil penelusuran. Perhatikan bahwa hal ini mungkin tidak persis seperti yang ditampilkan kepada pengguna dan kami dapat menggunakan metadata lain untuk menulis ulang/mengubah kata-katanya. Wajib. |
| oneOf(offer_specification) | Wajib | Hanya salah satu kolom dalam oneOf ini yang dapat ditetapkan. |
max_discount_value | object(Money) | Diskon maksimum yang dapat diperoleh. Misalnya, diskon 10% hingga Rp1.000.000. | |
min_spend_value | object(Money) | Nilai pembelanjaan minimum untuk mendapatkan diskon. Misalnya, diskon 10% jika total harga Rp1.000.000 atau lebih. | |
booking_cost | object(Money) | Biaya untuk memesan penawaran ini. Misalnya, diskon Rp1.000.000 untuk tagihan akhir jika meja dipesan dengan biaya Rp150.000. | |
booking_cost_unit | enum(FeeUnit) | Satuan biaya pemesanan. Misalnya, per orang, per transaksi. | |
convenience_fee | object(Fee) | ||
booking_cost_adjustable | boolean | Apakah biaya pemesanan dapat disesuaikan, yaitu biaya pemesanan dikurangi dari tagihan akhir. Misalnya: Diskon 30% untuk makan malam dengan reservasi. Biaya untuk memesan $15 dan akan diterapkan ke tagihan akhir. Jadi, tagihan akhir: Total Pembelanjaan - 30% - $15 | |
additional_fees | array objek(AdditionalFee) | Biaya tambahan yang ditagihkan kepada pengguna. Contoh: biaya kenyamanan, penanganan, pengiriman, pengemasan, biaya layanan, dll. | |
offer_discount_type | enum(OfferDiscountType) | Jenis diskon. | |
gift_card_info | object(GiftCardInfo) | Detail khusus untuk promo kartu voucher. |
Uang
Mewakili jumlah uang dengan jenis mata uangnya.
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
currency_code | string | Kode mata uang tiga huruf yang ditentukan dalam ISO 4217. | |
units | angka | Seluruh unit jumlahnya.
Misalnya, jika currencyCode adalah "USD", maka 1 unit adalah satu dolar AS. | |
nanos | angka | Jumlah unit nano (10^-9) dari jumlah.
Nilainya harus antara -999.999.999 dan +999.999.999 inklusif.
Jika units positif, nanos harus positif atau nol.
Jika units nol, nanos dapat positif, nol, atau negatif.
Jika units negatif, nanos harus negatif atau nol.
Misalnya $-1,75 ditampilkan sebagai units=-1 dan nanos=-750.000.000. |
Biaya
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
unit | enum(FeeUnit) | ||
type | enum(FeeType) | ||
| oneOf(cost) | Hanya salah satu kolom dalam oneOf ini yang dapat ditetapkan. |
MoneyRange
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
min_amount | object(Money) | ||
max_amount | object(Money) |
AdditionalFee
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
name | string | Wajib | Nama biaya tambahan. Contoh: biaya administrasi, biaya pemrosesan, dll. Wajib. |
fee | object(Fee) |
GiftCardInfo
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
| oneOf(denomination_type) | Hanya salah satu kolom dalam oneOf ini yang dapat ditetapkan. |
FixedDenominations
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
amounts | array objek(Money) | Daftar semua nominal diskret yang tersedia (misalnya, [100, 500, 1000]). |
OfferRestrictions
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
combinable_with_other_offers | boolean | Apakah penawaran ini dapat digabungkan dengan penawaran lainnya. Jika benar (true), partner dapat menentukan penawaran yang dapat digabungkan dengan penawaran ini. Jika combinable_offer_categories & combinable_offer_ids ditetapkan, penawaran yang cocok dengan salah satu kondisi di atas akan dapat digabungkan. | |
combinable_offer_categories | array enum(OfferCategory) | Daftar jenis penawaran yang dapat digabungkan dengan penawaran ini. Misalnya, penawaran ini dapat digabungkan dengan Kupon lainnya. Jika combinable_with_other_offers bernilai benar dan kolom ini tidak disetel, semua jenis akan dapat digabungkan. | |
combinable_offer_ids | array string | Daftar offer_id yang dapat digabungkan dengan penawaran ini. Beberapa penawaran hanya dapat digabungkan dengan offer_id tertentu lainnya (dapat dianggap sebagai penawaran induk). Jika combinable_with_other_offers benar dan kolom ini tidak disetel, semua id penawaran dapat digabungkan. | |
inclusions | array objek(OfferCondition) | Daftar kondisi yang harus dipenuhi agar penawaran valid (misalnya, minuman non-alkohol, makanan). | |
exclusions | array objek(OfferCondition) | Daftar kondisi yang akan membatalkan penawaran (misalnya, prasmanan, penawaran combo, dan koktail). | |
min_guest | angka | Jumlah minimum orang yang diperlukan untuk memanfaatkan penawaran. Catatan: Kolom ini hanya berlaku untuk reservasi tempat makan dan tidak boleh digunakan untuk vertikal lainnya. | |
food_offer_restrictions | object(FoodOfferRestrictions) | Batasan khusus untuk penawaran makanan. | |
max_redemption_count | angka | Batasan khusus untuk jumlah penggunaan penawaran ini. Nilai 0 akan menentukan bahwa tidak ada batas. Misalnya, nilai 3 berarti pengguna dapat menggunakan penawaran ini 3 kali. | |
max_total_discount_value | object(Money) | Diskon maksimum yang dapat diperoleh di beberapa transaksi penawaran ini. | |
special_conditions | array string | Kondisi khusus untuk penawaran ini yang harus ditampilkan kepada pengguna. Contoh: "Hanya berlaku untuk pembayaran di [area]", "Tidak termasuk pembayaran online", "Voucher Hadiah DAPAT digunakan selama Penjualan". |
OfferCondition
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
description | string |
FoodOfferRestrictions
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
meal_types | array enum(MealType) | Jenis makanan yang dapat menerapkan penawaran, seperti makan siang atau makan malam. Jika tidak disetel, penawaran dapat diterapkan ke semua jenis makanan. | |
restricted_to_certain_courses | boolean | Apakah penawaran hanya dapat diterapkan pada kursus tertentu. |
Kupon
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
text | string | Teks kupon yang ingin ditampilkan penyedia penawaran kepada pengguna. | |
code | string | Wajib | Perlu kode kupon untuk menukarkan penawaran. Wajib. |
PaymentInstrument
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
items | array objek(PaymentInstrumentItem) | Wajib | Daftar alat pembayaran yang dapat digunakan untuk mendapatkan penawaran. Wajib. |
provider_name | string | Nama penyedia instrumen pembayaran. Dapat berupa partner perbankan, nama bank, dll. Misalnya: American Express, HDFC, ICICI. |
PaymentInstrumentItem
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
type | enum(PaymentInstrumentType) | Wajib | Jenis instrumen pembayaran. Wajib. |
name | string | Wajib | Nama item instrumen pembayaran seperti nama kartu kredit. Misalnya: HDFC Infinia, American Express Platinum. Wajib. |
Langganan
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
name | string | Wajib | Nama langganan. Wajib. |
subscription_auto_added | boolean | Apakah langganan ditambahkan secara otomatis saat pengguna memanfaatkan penawaran ini | |
cost | object(Money) | Wajib | Biaya langganan. Wajib. |
subscription_duration | object(Duration) | Wajib | Durasi masa berlaku langganan pada subscription_cost. Wajib. |
terms_and_conditions_url | string | URL ke persyaratan dan ketentuan partner yang relevan dengan langganan ini. |
Durasi
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
seconds | angka | Detik yang ditandatangani dari rentang waktu. Harus dari -315.576.000.000 hingga +315.576.000.000 inklusif. Catatan: batas ini dihitung dari: 60 dtk/mnt * 60 mnt/j * 24 j/h * 365,25 h/thn * 10.000 thn | |
nanos | angka | Pecahan detik bertanda pada resolusi nanodetik rentang waktu. Durasi kurang dari satu detik ditampilkan dengan kolom 0
seconds dan kolom nanos positif atau negatif. Untuk durasi
satu detik atau lebih, nilai non-nol untuk kolom nanos harus
memiliki tanda yang sama dengan kolom seconds. Harus dari -999.999.999
hingga +999.999.999 inklusif. |
Persyaratan
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
url | string | URL persyaratan dan ketentuan partner. | |
restricted_to_certain_users | boolean | Apakah penawaran dibatasi untuk pengguna tertentu. | |
terms_and_conditions | string | Teks S&K utama yang disediakan oleh partner. | |
additional_terms_and_conditions | array string | Persyaratan dan ketentuan selain T&C utama dari partner. |
ValidityPeriod
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
valid_period | object(ValidityRange) | Stempel waktu mulai dan akhir yang valid untuk penawaran. Waktu ini harus mewakili hari yang berbeda, yaitu waktu mulai harus 00.00 (awal hari) dan waktu berakhir harus 00. 00 (eksklusif) pada hari berakhirnya periode validitas. | |
time_of_day | array objek(TimeOfDayWindow) | Menentukan interval waktu yang valid pada hari tertentu dan hari mana yang tersedia untuk penawaran. Untuk jangka waktu yang melewati tengah malam (misalnya, pukul 22.00 hingga
02.00), gunakan jendela terpisah untuk setiap hari: satu berakhir pada pukul 23.59.59 dan
satu lagi dimulai pada pukul 00.00 pada hari berikutnya.
Misalnya:
Senin: 10.00 hingga 17.00
Selasa: 10.00 hingga 14.00
Selasa: 17.00 hingga 19.00
Rabu, Kamis, Jumat, Sabtu, Minggu: 15.00 hingga 19.00
Jika tidak ada yang ditetapkan, artinya penawaran tersedia sepanjang waktu dalam
valid_period. | |
time_exceptions | array objek(ValidTimeException) | Menentukan pengecualian untuk valid_period dan valid_time_of_week di atas | |
date_exceptions | array objek(Date) | Menentukan pengecualian dalam hari untuk valid_period dan time_of_day di atas | |
validity_scope | enum(ValidityScope) | Menentukan cakupan periode validitas. | |
validity_duration_in_days | angka | Durasi (dalam hari) masa berlaku voucher/kupon, setelah dibeli. |
ValidityRange
Rentang stempel waktu tertutup-terbuka.
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
valid_from_time | object(Timestamp) | Wajib | Waktu awal rentang (inklusif). Wajib. |
valid_through_time | object(Timestamp) | Waktu berakhir rentang (eksklusif). Jika tidak disetel, berarti periode ini tidak akan pernah berakhir. Opsional. |
Stempel waktu
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
seconds | angka | Mewakili detik waktu UTC sejak epoch Unix 1970-01-01T00:00:00Z. Harus antara -62135596800 dan 253402300799 inklusif (yang sesuai dengan 0001-01-01T00:00:00Z hingga 9999-12-31T23:59:59Z). | |
nanos | angka | Pecahan detik non-negatif pada resolusi nanodetik. Kolom ini adalah bagian nanodetik dari durasi, bukan alternatif untuk detik. Nilai detik negatif dengan pecahan harus tetap memiliki nilai nanos non-negatif yang dihitung maju dalam waktu. Harus antara 0 dan 999.999.999 inklusif. |
TimeOfDayWindow
Objek TimeWindow adalah entitas komposit yang menjelaskan daftar jendela tempat pesanan pengguna dapat dilakukan atau dipenuhi.
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
time_windows | object(TimeOfDayRange) | Wajib | Jangka waktu pesanan dapat dilakukan/dipenuhi. Wajib. |
day_of_week | array enum(DayOfWeek) | Daftar hari dalam seminggu saat jendela diterapkan. Jika tidak ada yang ditetapkan, berarti berlaku untuk semua hari dalam seminggu. Opsional. | |
day_of_month | array objek(DayOfMonthRange) | Hari dalam sebulan saat jendela diterapkan. Jika tidak ada yang ditetapkan, berarti berlaku untuk semua hari dalam sebulan. Opsional. |
TimeOfDayRange
Rentang waktu tutup-buka.
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
open_time | object(TimeOfDay) | Waktu yang menunjukkan waktu awal hari dalam rentang (inklusif). Jika tidak disetel, berarti 00:00:00. Opsional. | |
close_time | object(TimeOfDay) | Waktu yang menunjukkan waktu berakhir hari dalam rentang (eksklusif). Jika tidak disetel, berarti pukul 23.59.59. Opsional. |
TimeOfDay
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
hours | angka | Jam dalam sehari dalam format 24 jam. Harus lebih besar dari atau sama dengan 0 dan biasanya harus kurang dari atau sama dengan 23. API dapat memilih untuk mengizinkan nilai "24:00:00" untuk skenario seperti waktu tutup bisnis. | |
minutes | angka | Menit dalam satu jam. Harus lebih besar dari atau sama dengan 0 dan kurang dari atau sama dengan 59. | |
seconds | angka | Detik dalam satu menit. Harus lebih besar dari atau sama dengan 0 dan biasanya harus lebih kecil dari atau sama dengan 59. API dapat mengizinkan nilai 60 jika mengizinkan detik kabisat. | |
nanos | angka | Pecahan detik, dalam nanodetik. Harus lebih besar dari atau sama dengan 0 dan kurang dari atau sama dengan 999.999.999. |
DayOfMonthRange
Rentang hari dalam sebulan yang berlaku untuk semua bulan dalam setahun.
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
valid_from_day | angka | Wajib | Hari awal rentang (inklusif). Wajib. |
valid_through_day | angka | Hari akhir rentang (inklusif). Jika tidak disetel, berarti rentang ini mewakili satu hari (valid_from_day). Opsional. |
ValidTimeException
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
exceptional_period | object(ValidityRange) | Stempel waktu mulai dan akhir saat penawaran tidak valid. Waktu ini harus mewakili hari yang berbeda, yaitu waktu mulai harus 00.00 (awal hari) dan waktu berakhir harus 00. 00 (eksklusif) pada hari periode pengecualian berakhir. |
Tanggal
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
year | angka | Tahun tanggal. Harus dari 1 hingga 9999, atau 0 untuk menentukan tanggal tanpa tahun. | |
month | angka | Bulan dalam setahun. Harus dari 1 hingga 12, atau 0 untuk menentukan tahun tanpa bulan dan hari. | |
day | angka | Hari dalam sebulan. Harus dari 1 hingga 31 dan berlaku untuk tahun dan bulan, atau 0 untuk menentukan tahun saja atau tahun dan bulan jika hari dianggap tidak signifikan. |
OfferSource
| Nama | Deskripsi |
|---|---|
OFFER_SOURCE_UNSPECIFIED | |
OFFER_SOURCE_AGGREGATOR |
ActionType
Mewakili mode pemenuhan penawaran. Jika penawaran dapat dibagikan di beberapa mode pemenuhan, penawaran duplikat diharapkan dibuat untuk setiap mode pemenuhan.
| Nama | Deskripsi |
|---|---|
ACTION_TYPE_UNSPECIFIED | |
ACTION_TYPE_FOOD_DELIVERY | Penawaran ini berlaku untuk layanan pengiriman makanan. |
ACTION_TYPE_FOOD_TAKEOUT | Penawaran ini berlaku untuk pesanan makanan yang diambil atau dibawa pulang. |
ACTION_TYPE_DINING | Penawaran ini berlaku untuk bersantap di restoran. |
ACTION_TYPE_SHOPPING_IN_STORE | Penawaran ini berlaku untuk pembelian offline di toko. |
OfferMode
Menentukan metode atau saluran yang dapat digunakan pengguna untuk memanfaatkan penawaran.
| Nama | Deskripsi |
|---|---|
OFFER_MODE_OTHER | Gunakan untuk metode pemenuhan yang tidak tercakup oleh mode spesifik lainnya. |
OFFER_MODE_WALK_IN | Penawaran ini tersedia untuk kunjungan langsung tanpa reservasi sebelumnya. |
OFFER_MODE_FREE_RESERVATION | Penawaran berlaku saat pengguna melakukan pemesanan yang tidak memerlukan biaya di muka. |
OFFER_MODE_PAID_RESERVATION | Penawaran berlaku saat pengguna membuat reservasi yang memerlukan pembayaran di muka. |
OFFER_MODE_ONLINE_ORDER | Penawaran ini berlaku untuk pesanan yang dilakukan melalui situs atau platform digital. |
OFFER_MODE_GIFT_CARD_PURCHASE | Menunjukkan bahwa pembelian kartu voucher adalah langkah utama yang diperlukan untuk mendapatkan penawaran. |
OfferCategory
Kategori penawaran. Penawaran dasar adalah penawaran standar yang tersedia untuk semua pelanggan, seperti diskon 10% untuk pembelanjaan di atas Rp1.000.000. Penawaran dasar yang dibatasi oleh kupon atau instrumen pembayaran akan memiliki kolom masing-masing yang ditetapkan. Kami juga memiliki penawaran add-on x seperti ADD_ON_PAYMENT_OFFER. Penawaran tersebut dapat ditambahkan ke penawaran lain untuk mendapatkan diskon tambahan.
| Nama | Deskripsi |
|---|---|
OFFER_CATEGORY_UNSPECIFIED | Nilai enum UNSPECIFIED atau default tidak boleh digunakan dalam feed. |
OFFER_CATEGORY_BASE_OFFER | |
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER | |
OFFER_CATEGORY_ADD_ON_COUPON_OFFER | |
OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER | |
OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER |
FeeUnit
| Nama | Deskripsi |
|---|---|
FEE_UNIT_UNSPECIFIED | Nilai enum UNSPECIFIED atau default tidak boleh digunakan dalam feed. |
FEE_UNIT_PER_GUEST | |
FEE_UNIT_PER_TRANSACTION |
FeeType
| Nama | Deskripsi |
|---|---|
FEE_TYPE_UNSPECIFIED | Nilai enum UNSPECIFIED atau default tidak boleh digunakan dalam feed. |
FEE_TYPE_FIXED | |
FEE_TYPE_VARIABLE |
OfferDiscountType
| Nama | Deskripsi |
|---|---|
OFFER_DISCOUNT_TYPE_UNSPECIFIED | |
OFFER_DISCOUNT_TYPE_INSTANT_DISCOUNT | |
OFFER_DISCOUNT_TYPE_CASHBACK | |
OFFER_DISCOUNT_TYPE_REWARD_POINT |
MealType
| Nama | Deskripsi |
|---|---|
MEAL_TYPE_UNSPECIFIED | Nilai enum UNSPECIFIED atau default tidak boleh digunakan dalam feed. |
MEAL_TYPE_BREAKFAST | |
MEAL_TYPE_LUNCH | |
MEAL_TYPE_DINNER |
PaymentInstrumentType
| Nama | Deskripsi |
|---|---|
PAYMENT_INSTRUMENT_TYPE_UNSPECIFIED | Nilai enum UNSPECIFIED atau default tidak boleh digunakan dalam feed. |
PAYMENT_INSTRUMENT_CREDIT_CARD | |
PAYMENT_INSTRUMENT_DEBIT_CARD | |
PAYMENT_INSTRUMENT_BANK_ACCOUNT | |
PAYMENT_INSTRUMENT_UPI | |
PAYMENT_INSTRUMENT_ONLINE_WALLET | |
PAYMENT_INSTRUMENT_NETBANKING |
DayOfWeek
Mewakili hari dalam seminggu.
| Nama | Deskripsi |
|---|---|
DAY_OF_WEEK_UNSPECIFIED | Hari dalam seminggu tidak ditentukan. |
MONDAY | Senin |
TUESDAY | Selasa |
WEDNESDAY | Rabu |
THURSDAY | Kamis |
FRIDAY | Jumat |
SATURDAY | Sabtu |
SUNDAY | Minggu |
ValidityScope
Cakupan masa berlaku; yaitu tindakan apa saja yang berlaku dalam masa berlaku ini.
| Nama | Deskripsi |
|---|---|
VALIDITY_SCOPE_UNSPECIFIED | |
VALIDITY_SCOPE_CLAIM | |
VALIDITY_SCOPE_REDEEM |
OfferTag
| Nama | Deskripsi |
|---|---|
OFFER_TAG_UNSPECIFIED | Nilai enum UNSPECIFIED atau default tidak boleh digunakan dalam feed. |
OFFER_TAG_NEW_YEAR_SPECIAL | |
OFFER_TAG_VALENTINES_SPECIAL |
AvailabilityLevel
Menunjukkan status stok atau ketersediaan penawaran.
| Nama | Deskripsi |
|---|---|
AVAILABILITY_LEVEL_UNSPECIFIED | |
AVAILABILITY_LEVEL_LOW | Menunjukkan bahwa penawaran hampir habis. Pengguna dianjurkan untuk menukarkannya sebelum stok habis. Kami mungkin menambahkan MEDIUM dan HIGH nanti. |
offer_specification
Diskon dapat berupa persentase atau nilai tetap yang dikurangi dari nilai total. Contoh: 1. Diskon 10% untuk tagihan akhir. 2. Diskon Rp150.000 untuk pesanan. Penjual juga dapat menawarkan diskon kustom seperti 'beli satu gratis satu' melalui kolom spesifikasi yang relevan. Wajib.
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
discount_percent | angka | Tidak dapat muncul bersamaan dengan | Persentase tagihan yang didiskon. [0, 100] Untuk penawaran 1+1 atau diskon 50% yang berlaku untuk seluruh makanan (misalnya, prasmanan 1+1, 1+1 untuk seluruh tagihan, 1+1 untuk menu tetap), nilai ini dapat ditetapkan ke 50. |
discount_value | object(Money) | Tidak dapat muncul bersamaan dengan | Nilai tetap diskon. |
other_offer_detail_text | string | Tidak dapat muncul bersamaan dengan | Teks bentuk bebas untuk mendeskripsikan diskon. Untuk penawaran 1+1 tertentu (misalnya, 1+1 minuman, +1 hidangan utama, 1+1 item menu tertentu), detail ini harus dijelaskan di sini. |
biaya
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
amount | object(Money) | Tidak dapat muncul bersamaan dengan | |
amount_range | object(MoneyRange) | Tidak dapat muncul bersamaan dengan |
denomination_type
| Nama Kolom | Jenis | Persyaratan | Deskripsi |
|---|---|---|---|
fixed_denominations | object(FixedDenominations) | Tidak dapat muncul bersamaan dengan | Digunakan saat kartu voucher tersedia dalam jumlah tetap tertentu. |
custom_range | object(MoneyRange) | Tidak dapat muncul bersamaan dengan | Digunakan saat merek mengizinkan pengguna memilih nilai nominal kustom (fleksibel) dalam rentang yang ditentukan. |
Upload feed
Feed penawaran
harus diupload ke server SFTP feed Generic. Ikuti
Tutorial Cara menggunakan server SFTP feed generik
untuk mendapatkan petunjuk dan gunakan set name ke google.offer dalam file deskriptor
Anda.
Frekuensi upload
Secara umum, Google mengharapkan 1 upload feed per hari. Frekuensi dapat ditingkatkan atau dikurangi, bergantung pada frekuensi pembaruan penawaran di pihak Anda untuk memastikan presisi yang tinggi secara konsisten. Berkonsultasilah dengan POC Google Anda.
Perlu waktu beberapa jam hingga data muncul di Google.
Penawaran kategorisasi
OFFER_CATEGORY_BASE_OFFER: Penawaran yang dapat diklaim secara terpisah tanpa digabungkan dengan penawaran lain. Saluran ini mencakup:- Diskon tetap untuk seluruh tagihan (misalnya, diskon 20%)
- Penawaran langganan (misalnya, Dessert gratis dengan langganan)
- Penawaran pembayaran jika tidak ada penawaran dasar lain untuk restoran
- Catatan: Penawaran penghapusan atau pengurangan biaya di seluruh platform tidak boleh ditetapkan sebagai penawaran dasar.
- Penawaran Add-On: Penawaran yang memerlukan penawaran dasar untuk diklaim. Hal ini
mencakup:
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER(misalnya, Diskon tambahan 10% dengan kartu kredit tertentu)OFFER_CATEGORY_ADD_ON_COUPON_OFFER(misalnya, Minuman gratis dengan kode kupon tertentu)OFFER_CATEGORY_ADD_ON_SUBSCRIPTION_OFFER(misalnya, Diskon tambahan 10% untuk pelanggan)OFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFER(misalnya, Pengiriman gratis atau biaya lebih rendah)
Pertimbangan Lainnya
- Penawaran penghapusan atau pengurangan biaya di seluruh platform tidak boleh ditetapkan sebagai penawaran dasar (
OFFER_CATEGORY_BASE_OFFER). Penawaran tersebut hanya boleh ditetapkan sebagaiOFFER_CATEGORY_ADD_ON_FEE_REDUCTION_OFFERuntuk melengkapi penawaran dasar aktif lainnya. - Jika restoran tidak menetapkan Penawaran Dasar, penawaran Add-On tidak akan ditampilkan.
Jika tidak ada Penawaran Dasar, setiap Penawaran Pembayaran, Langganan, atau Kupon yang dapat diklaim tanpa perlu ditambahkan ke penawaran lain harus diberi tag
OFFER_CATEGORY_BASE_OFFER.- Bergantung pada jenisnya, data yang relevan untuk
PaymentInstrument,Subscription, atauCouponharus ditetapkan. - Partner harus memberikan 2 salinan setiap penawaran ini untuk mencakup
skenario saat penawaran tersebut berfungsi sebagai Penawaran Dasar dan Penawaran Add-On. Teks Penawaran Add-On kemudian dapat ditetapkan untuk beberapa restoran menggunakan
entity_idsatauadd_on_offer_applicable_to_all_entities.
- Bergantung pada jenisnya, data yang relevan untuk
- Jika restoran memiliki beberapa Penawaran Dasar yang dapat digabungkan, semua Penawaran Dasar harus diberi tag
OFFER_CATEGORY_BASE_OFFER, dan Penawaran Dasar yang merupakan penawaran Pembayaran, Langganan, atau Kupon harus dikirimkan juga sebagai jenis Penawaran Add-On yang relevan. ValidityPeriodharus digunakan untuk mengaktifkan penawaran Add-On sebagai Penawaran Dasar hanya jika tidak ada Penawaran Dasar yang aktif.- Konsolidasi penawaran identik menurut instrumen pembayaran: Jika beberapa
instrumen pembayaran memiliki nilai diskon yang sama persis (misalnya, Kartu
Kredit, Kartu Debit, dan Net Banking semuanya menawarkan diskon 5%), kelompokkan
instrumen pembayaran tersebut dalam satu objek
Offeryang dikonsolidasikan, bukan mengirimkan penawaran duplikat yang terpisah. Untuk melakukannya, isi daftarpayment_instrument.itemsdengan semua instrumen pembayaran yang berlaku. Tindakan ini mengurangi kekacauan tata letak di antarmuka Google dan mencegah potensi penurunan peringkat karena pembatasan duplikat yang berlebihan.
Skenario contoh:
Sebuah restoran menawarkan diskon 5% jika membayar dengan kartu kredit tertentu dan minuman gratis dengan kode kupon tertentu
- Penawaran kartu kredit diskon 5% harus dikirim sebagai 2 salinan, satu diberi tag sebagai
OFFER_CATEGORY_BASE_OFFERdan satu lagi diberi tag sebagaiOFFER_CATEGORY_ADD_ON_PAYMENT_OFFERdengan detailPaymentInstrumentyang disertakan. - Penawaran minuman gratis dengan kode kupon harus dikirim sebagai
OFFER_CATEGORY_ADD_ON_COUPON_OFFERdengan detailCoupondisertakan.
- Penawaran kartu kredit diskon 5% harus dikirim sebagai 2 salinan, satu diberi tag sebagai
Sebuah restoran menawarkan diskon 10% untuk pelanggan yang datang langsung dan diskon 5% jika membayar dengan kartu kredit tertentu, yang keduanya dapat digabungkan.
- Penawaran datang langsung 10% harus diberi tag
OFFER_CATEGORY_BASE_OFFER. - Penawaran kartu kredit diskon 5% harus memiliki 2 salinan, dengan satu salinan diberi tag sebagai
OFFER_CATEGORY_BASE_OFFER, dan satu salinan diberi tag sebagaiOFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
- Penawaran datang langsung 10% harus diberi tag
Sebuah restoran menawarkan diskon 10% hanya untuk makan siang pada hari kerja, dan diskon 5% kapan saja saat membayar dengan kartu kredit tertentu.
- Penawaran diskon 10% harus ditetapkan
ValidityPerioduntuk menunjukkan hanya selama jam makan siang restoran pada hari kerja. - Penawaran kartu kredit diskon 5% harus dikirimkan sebagai 2 salinan.
- Satu salinan harus diberi tag sebagai
OFFER_CATEGORY_BASE_OFFERdengan detailPaymentInstrumentyang disertakan.ValidityPeriodharus disetel untuk mengecualikan jam makan siang pada hari kerja saat penawaran makan siang diskon 10% aktif - Satu salinan harus diberi tag sebagai
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFERdengan detailPaymentInstrumentyang disertakan.
- Satu salinan harus diberi tag sebagai
- Semua Penawaran Pembayaran lainnya untuk restoran ini harus diberi tag sebagai
OFFER_CATEGORY_ADD_ON_PAYMENT_OFFER.
- Penawaran diskon 10% harus ditetapkan
Proses pengembangan & peluncuran
Selama integrasi, Partner Portal akan dapat membantu Anda dengan memberikan informasi dan masukan berdasarkan pengembangan Anda. Proses pengembangan akan mengikuti alur ini:
- Integrasi akan terlebih dahulu dikembangkan di lingkungan sandbox. Anda harus menggunakan ekspor produksi (atau bahkan data produksi secara langsung) di lingkungan Google Sandbox. Hal ini membantu memastikan pengembangan Anda menangkap semua kasus ekstrem dan memungkinkan Google mengevaluasi kualitas data serta memberikan bantuan yang lebih baik berdasarkan model data Anda.
- Setelah Anda mengupload feed harian Penjual, Layanan, dan Transaksi yang lengkap secara konsisten di lingkungan Google Sandbox, tim Google akan mengevaluasi feed Anda. Setelah tim Google memberikan persetujuan, Anda dapat mengirimkan kode ke produksi dan mulai mengirimkan data produksi ke lingkungan Produksi Google.
- Setelah Anda sepenuhnya menguji integrasi Produksi, tim Google juga akan mengujinya. Setelah semua pengujian selesai, integrasi Anda akan diluncurkan.
Pemantauan
Untuk memastikan pengalaman pengguna yang baik, Google akan memeriksa bahwa penawaran yang diberikan valid, benar, dan memenuhi kriteria kebijakan kami sebelum dan setelah peluncuran. Untuk melakukannya, Google akan menggunakan kombinasi peninjauan manual dan otomatis. Hasil ulasan ini dapat diakses di Dasbor Penawaran di Pusat Tindakan (khusus produksi). Hasil pemantauan ini dapat digunakan untuk memengaruhi peringkat penawaran.
Pastikan halaman dimuat sepenuhnya dalam waktu kurang dari 5 detik dengan
penawaran, jika tidak, hal ini akan dianggap sebagai kegagalan dan akan ditandai sebagai
Bad link.
Pemeriksaan otomatis (Crawler)
Tim kualitas Google menerapkan crawler. Crawler adalah skrip yang mengotomatiskan browser web untuk melakukan beberapa klik dan mengekstrak informasi penawaran, hanya untuk tujuan pengujian kualitas.
Jumlah kueri
Misalnya, jika kami memutuskan untuk mengirim 5.000 pemeriksaan per hari, berarti 5.000 kali per hari (didistribusikan secara merata sepanjang hari, yaitu sekitar satu kali setiap 17 detik), crawler kami melakukan semua tindakan berikut yang akan dilakukan pengguna biasa:
- Mulai dari Google Penelusuran, lalu klik link partner.
- Cari informasi penawaran.
- Jika penawaran memerlukan pemesanan, penawaran akan dilanjutkan ke alur pemesanan untuk mengonfirmasi bahwa penawaran tersedia pada waktu yang ditentukan (tidak ada pemesanan yang dilakukan).
Deteksi scraper web
Untuk memastikan bahwa web scraper tidak dilarang (yang dapat menyebabkan scraper menyimpulkan bahwa penawaran tidak tersedia), pastikan sistem Anda mengizinkan web scraper kami untuk membuat kueri halaman Anda setiap saat. Untuk mengidentifikasi scraper web kami:
- Agen Pengguna web scraper akan berisi string "Google-Offers":
- Contoh: Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko; Google-Offers) Chrome/104.0.5112.101 Safari/537.36
- Anda juga dapat memeriksa apakah panggilan berasal dari Google menggunakan DNS terbalik seperti yang direkomendasikan dalam "Memverifikasi Googlebot dan crawler Google lainnya".
Dalam kasus khusus kami, resolusi DNS terbalik mengikuti pola ini:
google-proxy-***-***-***-***.google.com.
Perilaku teknis
Menyimpan ke cache
Untuk mengurangi beban di situs partner, crawler kami umumnya dikonfigurasi untuk mematuhi semua header caching HTTP standar yang ada dalam respons. Artinya, untuk situs yang dikonfigurasi dengan benar, kita menghindari pengambilan konten yang jarang berubah (misalnya, library JavaScript) berulang kali. Untuk mengetahui detail selengkapnya tentang cara menerapkan caching, baca dokumentasi caching HTTP ini.