Google 合作夥伴可以透過預訂端對端整合服務,向 Google 提供結構化菜單資料,用於餐廳 Google 商家檔案的「菜單」部分,以及 Google 消費者平台上的其他進入點。
系統會使用通用動態饋給擷取菜單資料。事前準備:
- 請確認您已完成帳戶設定
- 瞭解一般動態饋給上傳程序
- 瞭解如何設定帳戶,以便上傳一般動態饋給
建立及上傳菜單動態饋給
建立及上傳菜單動態饋給時,請遵守下列規範和慣例:-
如要提供餐廳詳細資料,請按照商家動態饋給所述的資料規格操作。
如需 JSON 檔案範例,請參閱範例 JSON。
上傳的資料檔案名稱不得重複。建議在檔案名稱中加入時間戳記,例如
menu1_1633621547.json -
在選單動態饋給的檔案集描述元中,將
name欄位設為google.food_menu。 如要查看描述元檔案內容範例,請參閱「描述元檔案 JSON 範例」。 描述元檔案的名稱在不同上傳作業之間不得重複。建議在檔案名稱中加入時間戳記,例如descriptor_1633621547.filesetdesc.json。描述元檔案必須上傳至一般安全檔案傳輸通訊協定伺服器,做為菜單動態饋給的一部分。 - 動態饋給必須每天上傳至一般安全檔案傳輸通訊協定伺服器,以進行完整更新。
- 如「使用通用動態饋給 SFTP」一文所述,動態饋給最多只能有 1000 個分片 (檔案)
你可以在合作夥伴入口網站的「Ingestion」>「History」部分,查看動態饋給擷取狀態。如要查看動態饋給 SFTP 伺服器資訊,請前往合作夥伴入口網站的「設定」>「動態饋給」部分。
你可以在合作夥伴入口網站的「擷取」>「記錄」部分,查看動態饋給擷取狀態。如要查看動態饋給 SFTP 伺服器資訊,請前往合作夥伴入口網站的「設定」>「動態饋給」部分。
使用菜單項目選項
您可以使用 MenuItemOption proto 指定選單項目選項。
如果合作夥伴的單一菜單項目有多組必要選項 (例如拿鐵有大小和牛奶選項),則必須決定如何在 Google 中顯示這些選項。Google 建議採取下列做法:
- 菜單動態饋給應與合作夥伴的訂餐網站相符 (如果沒有該地點的訂餐網站,則應與餐廳的內用菜單相符)。如果訂購網站上顯示個別商品的價格,則應使用
MenuItem。 如果商品顯示底價和多個選項,則應使用MenuItemOption。 - 請避免加入長長的選項清單,例如:
- 雞肉捲餅
- 起司雞肉捲餅
- 雞肉捲餅佐莎莎醬
- 雞肉捲餅佐莎莎醬和起司
- 雞肉捲餅佐酪梨醬
- 雞肉捲餅,佐以酪梨醬和莎莎醬
- 只有在菜色需要選取其中一個選項時,系統才會支援菜單項目選項。舉例來說,訂購披薩時,必須選擇尺寸。系統不支援外掛程式的選單項目選項 (例如「加酪梨」的選項),因此請勿將這類選項加入動態饋給。
菜單選項的價格應為選取該選項的商品全價。 菜單項目或選項應設定價格,但兩者不得同時設定。
提供多種菜單的餐廳
單一餐廳 (實體) 只能有一個菜單。如果餐廳有多份菜單 (例如午餐和晚餐菜單),你可以使用 MenuSections 將所有菜單合併為一份 (例如一份菜單,其中包含午餐和晚餐專區)。產生的選單結構如下:
- 選單
- 午餐專區
- 湯品
- 湯 1
- 湯 2
- 三明治
- 三明治 1
- 三明治 2
- 晚餐專區
- 啟動條件
- 啟動條件 1
- Starter 2
- 主菜
- 主菜 1
- 主菜 2
在餐廳之間共用菜單
只要將所有餐廳納入菜單的merchant_ids清單,即可在多間餐廳共用同一份菜單。請注意,這份清單接受使用實體動態饋給的合作夥伴實體 ID。
最佳做法
開發菜單動態饋給時,請遵循下列最佳做法。
- 只能將一個菜單與餐廳建立關聯。
-
最多可有 3,000 個不重複的
MenuItem物件 (涵蓋所有區段和巢狀子區段)。 -
單一
Menu內,每種實體類型 (MenuSection、MenuItem、MenuItemOption) 最多可有 100,000 個不重複的實體。 -
完全組裝的
Menu(所有區段、項目和選項在重複資料刪除後合併) 不得超過 3.8 MB。 -
所有 ID 欄位 (
menu_id、merchant_ids、menu_section_ids、menu_item_ids、menu_item_option_ids、addon_menu_section_ids) 的字元數不得超過 580 個。 - 在 TextField 中,將偏好語言設為第一種語言。如果您傳送多個 LocalizedText 物件,系統會向使用者顯示文字清單中的第一個物件。
- 所有菜單品項都必須新增至菜單專區。 請勿直接將選單項目新增至選單物件。
- 使用 UTF-8 編碼提供內容。不需要逸出非 ASCII 字元。
- 如果要在多個區域推出應用程式,請務必在「單位」和「奈米」欄位中使用正確的貨幣代碼和幣值,並特別注意「奈米」欄位,因為該欄位的值是「單位」欄位的 10^-9。使用目錄檢視器中的菜單檢視器,確認價格設定正確無誤。
- 為使用者提供豐富、全面且最新的菜單,是提供實用且吸引人使用者體驗的關鍵。價格、說明、相片和飲食資訊都是影響決策的重要因素,因此建議合作夥伴盡可能提供這類資料,以提供最佳的使用者和商家體驗。
- 如要顯示不含價格,請在 Offer proto 中加入空白的 Price proto。
開發與測試工具
推出菜單動態饋給後,系統就會在探索介面中顯示菜單動態饋給資料,並可能在餐廳地點資訊頁的「菜單」分頁中顯示。Google 搜尋 (行動版和電腦版) 支援菜單分頁,這項功能也將擴展至其他平台,包括 Google 地圖。實際呈現的體驗可能會因介面而異。
如要確保菜單結構正確無誤,請使用目錄檢視器中的菜單視覺化工具預覽菜單。
餐廳菜單的來源有很多,包括餐廳透過 Google 商家檔案提供的菜單、美食訂餐和訂位合作夥伴提供的菜單、使用者拍攝的菜單相片等。如果有多個來源為同一間餐廳提供菜單,商家可以在 Google 商家檔案菜單編輯器中選擇偏好的供應商。
結構定義
如要查看完整菜單結構定義,請按這裡。
FoodMenuFeed
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
data | 物件陣列(MenuComponent) |
MenuComponent
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
| oneOf(type) | 這個 oneOf 中的欄位只能設定一個。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
menu_id | 字串 | 必填 | 合作夥伴提供的不透明字串,可明確識別合作夥伴動態饋給中的菜單。必填。 |
merchant_ids | 字串陣列 | 必填 | 菜單適用的商家。 注意:這個欄位會重複,因此連鎖餐廳可以在多個地點共用相同菜單,每個地點都是個別商家。必填。 |
display_name | 物件(TextField) | 使用者瀏覽選單時,可識別選單的名稱。 選用項目。 | |
language | 字串 | 與選單中文字標籤相關聯的預設語言代碼。預期為 BCP-47 語言代碼,例如「en-US」或「sr-Latn」。 詳情請參閱 http://www.unicode.org/reports/tr35/#Unicode_locale_identifier。選用項目。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
text | 物件陣列(LocalizedText) | 必填 | 每個語言代碼的文字值。 如果只支援一種語言代碼,則不需要在每個文字中設定 language_code,系統會根據選單的預設語言推斷語言。 如果不同語言代碼有多個文字,則必須為每個文字設定 language_code。清單中的第一個文字會視為偏好的表示方式。必填。 |
LocalizedText
特定語言的文字本地化變體。
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
text | 字串 | 以對應於下方 [language_code][google.type.LocalizedText.language_code] 的語言顯示本地化字串。 | |
language_code | 字串 | 文字的 BCP-47 語言代碼,例如「en-US」或「sr-Latn」。 詳情請參閱 http://www.unicode.org/reports/tr35/#Unicode_locale_identifier。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
menu_section_id | 字串 | 必填 | 合作夥伴提供的不透明字串,可明確識別合作夥伴動態饋給中的 MenuSection。 必填。 |
display_name | 物件(TextField) | 必填 | 使用者瀏覽菜單時,可識別 MenuSection 的名稱。必填。 |
description | 物件(TextField) | 選單專區的說明。 選用項目。 | |
images | 物件陣列(Image) | 菜單專區的圖片。 選用項目。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
uri | 字串 | 必填 | 含有圖片原始像素的網址。 必填。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
menu_item_id | 字串 | 必填 | 合作夥伴提供的不透明字串,可明確識別合作夥伴動態饋給中的 MenuItem。 必填。 |
display_name | 物件(TextField) | 必填 | 使用者瀏覽選單時,可識別 MenuItem 的名稱。 必填。 |
description | 物件(TextField) | 選單項目的說明。 選用項目。 | |
images | 物件陣列(Image) | 菜單項目的圖片。 選用項目。 | |
| oneOf(pricing) | 必填 | 這個 oneOf 中的欄位只能設定一個。 |
item_attributes | 物件(MenuItemAttributes) | 這個選單項目的屬性。 選用項目。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
offers | 物件陣列(Offer) | 必填 | 可能提供的優惠清單。 必填。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
price | 物件(Money) | 以下案例無效,會導致菜單項目遭到捨棄: 價格沒有貨幣代碼,但有單位或奈米單位,或兩者都有: price {units: 100, nanos: 1000000} price {units: 100} price {nanos: 1000000} 價格的貨幣代碼無效,但有單位或奈米單位,或兩者都有: price {currency_code: 'gXYZ', units: 100, nanos: 1000000} price {currency_code: 'gXYZ', units: 100} price {currency_code: 'gXYZ', nanos: 1000000} 價格有貨幣代碼,但單位或奈米單位無效 price {currency_code: 'USD', units: 100, nanos: -100} price {currency_code: 'USD', units: -100, nanos: 100} |
金額
代表金額與其貨幣類型。
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
currency_code | 字串 | ISO 4217 中定義的三個英文字母貨幣代碼。 | |
units | 數字 | 金額的整數單位。
舉例來說,如果 currencyCode 為 "USD",則 1 個單位為 1 美元。 | |
nanos | 數字 | 金額的奈米 (10^-9) 單位數量。
這個值必須介於 -999,999,999 和 +999,999,999 (含) 之間。
如果 units 為正值,nanos 必須為正值或零。
如果 units 為零,則 nanos 可為正值、零或負值。
如果 units 為負值,nanos 就必須為負值或零。
例如,$-1.75 美元的表式方式為 units=-1 和 nanos=-750,000,000。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
menu_item_option_ids | 字串陣列 | 必填 | 適用於此菜單項目的菜單項目選項 ID。 必填。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
number_of_servings | 數字 | 特定菜單項目可提供的份量數。 選用項目。 | |
nutrition_information | 物件(NutritionInformation) | 說明商品的完整營養資訊,例如熱量、脂肪含量。選用項目。 | |
suitable_diets | 列舉陣列(DietaryRestriction) | 這項菜單項目符合的飲食限制。 選用項目。 | |
additive | 物件陣列(Additive) | 這個選單項目的加購品。 選用項目。 | |
allergen | 物件陣列(Allergen) | 這個菜單項目的過敏原。 選用項目。 | |
packaging_deposit_info | 物件(DepositInfo) | 這個菜單項目的包裝和回收資訊。 選用項目。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
energy | 物件(NutritionValue) | 一份食物的營養能量。可定義為卡路里或千焦耳。選用項目。 | |
sodium_content | 物件(NutritionValue) | 鈉含量,以公克或毫克為單位。 選用項目。 | |
serving_size | 數字 | 營養價值適用的份量數。 選用項目。 | |
description | 物件(TextField) | 以任意文字輸入營養資訊。例如「含有防腐劑」。 選用項目。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
| oneOf(value) | 這個 oneOf 中的欄位只能設定一個。 | |
unit | enum(NutritionValueUnit) | 必填 | 合作夥伴指定的金額相關單位。我們會驗證動態饋給,確保每種營養價值的單位符合該類型的值。舉例來說,在 NutritionalInformation 的能量屬性中,只會顯示 ENERGY_CALORIES 和 ENERGY_KILOJOULES。必填。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
min | 數字 | 必填 | 最低營養價值。 必填。 |
max | 數字 | 必填 | 營養價值上限。 必填。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
name | 物件(TextField) | 必填 | 添加物的說明文字,例如「防腐劑」。 必填。 |
containment_level_code | enum(ContainmentLevelCode) | MenuItem 是否含有、可能含有或不含這項添加物。 預設值為 contains。 選用項目。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
allergen_type_code | enum(AllergenTypeCode) | 必填 | 過敏原類型。 必填。 |
containment_level_code | enum(ContainmentLevelCode) | MenuItem 是否含有、可能含有或不含此過敏原。 預設值為 contains。 選用項目。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
deposit_code | enum(DepositCode) | 要採用的押金策略,例如「可重複使用」。 選用項目。 | |
deposit_value | 物件(Money) | 正確存放商品可獲得的退款金額。 選用項目。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
menu_item_option_id | 字串 | 必填 | 合作夥伴提供的不透明字串,可專門識別合作夥伴動態饋給中的 MenuItemOption。必填。 |
value | 物件(MenuItemOptionProperty) | 必填 | 選項屬性和值,例如尺寸:小。 必填。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
property_type | enum(PropertyType) | 必填 | 這個選項屬性的類型。 必填。 |
| oneOf(value) | 必填 | 這個 oneOf 中的欄位只能設定一個。 |
NutritionValueUnit
| 名稱 | 說明 |
|---|---|
NUTRITION_VALUE_UNIT_UNSPECIFIED | 請勿使用。營養價值單位未明確設定。 |
ENERGY_CALORIES | 用於表示菜單項目能量的單位。 |
ENERGY_KILOJOULES | |
WEIGHT_MILLIGRAMS | 用於表示菜單項目中物質重量的單位。 |
WEIGHT_GRAMS |
DietaryRestriction
表示食物製備期間遵守的飲食限制或指南。
| 名稱 | 說明 |
|---|---|
DIET_UNSPECIFIED | 請勿使用。未明確指定飲食限制。 |
DIET_DIABETIC | |
DIET_GLUTEN_FREE | |
DIET_HALAL | |
DIET_HINDU | |
DIET_KOSHER | |
DIET_LOW_CALORIE | |
DIET_LOW_FAT | |
DIET_LOW_LACTOSE | |
DIET_LOW_SALT | |
DIET_VEGAN | |
DIET_VEGETARIAN |
ContainmentLevelCode
指出食品含有特定屬性的程度,例如過敏原或添加物。
| 名稱 | 說明 |
|---|---|
CONTAINMENT_LEVEL_CODE_UNSPECIFIED | 請勿使用。未明確指定包含層級代碼。 |
CONTAINMENT_LEVEL_CODE_CONTAINS | |
CONTAINMENT_LEVEL_CODE_DOES_NOT_CONTAIN | |
CONTAINMENT_LEVEL_CODE_MAY_CONTAIN |
AllergenTypeCode
從 GS1 衍生而來的過敏原類型:http://gs1.org/voc/AllergenTypeCode
| 名稱 | 說明 |
|---|---|
ALLERGEN_TYPE_CODE_UNSPECIFIED | 請勿使用。未明確指定過敏原類型代碼。 |
ALLERGEN_TYPE_CODE_ALMONDS | |
ALLERGEN_TYPE_CODE_ALPHA_ISOMETHYL_IONONE | |
ALLERGEN_TYPE_CODE_ALCOHOL | |
ALLERGEN_TYPE_CODE_AMYL_CINNAMAL | |
ALLERGEN_TYPE_CODE_ANISE_ALCOHOL | |
ALLERGEN_TYPE_CODE_BARLEY | |
ALLERGEN_TYPE_CODE_BENZYL_ALCOHOL | |
ALLERGEN_TYPE_CODE_BENZYL_BENZOATE | |
ALLERGEN_TYPE_CODE_BENZYL_CINNAMATE | |
ALLERGEN_TYPE_CODE_BENZYL_SALICYLATE | |
ALLERGEN_TYPE_CODE_BRAZIL_NUTS | |
ALLERGEN_TYPE_CODE_BUTYLPHENYL_METHYLPROPIONATE | |
ALLERGEN_TYPE_CODE_CARROTS | |
ALLERGEN_TYPE_CODE_CASHEW_NUTS | |
ALLERGEN_TYPE_CODE_CELERY | |
ALLERGEN_TYPE_CODE_CEREALS_CONTAINING_GLUTEN | |
ALLERGEN_TYPE_CODE_CINNAMAL | |
ALLERGEN_TYPE_CODE_CINNAMYL_ALCOHOL | |
ALLERGEN_TYPE_CODE_CITRAL | |
ALLERGEN_TYPE_CODE_CITRONELLOL | |
ALLERGEN_TYPE_CODE_COCOA | |
ALLERGEN_TYPE_CODE_CORIANDER | |
ALLERGEN_TYPE_CODE_CORN | |
ALLERGEN_TYPE_CODE_COUMARIN | |
ALLERGEN_TYPE_CODE_CRUSTACEANS | |
ALLERGEN_TYPE_CODE_EGGS | |
ALLERGEN_TYPE_CODE_EUGENOL | |
ALLERGEN_TYPE_CODE_EVERNIA_FURFURACEA | |
ALLERGEN_TYPE_CODE_EVERNIA_PRUNASTRI | |
ALLERGEN_TYPE_CODE_FARNESOL | |
ALLERGEN_TYPE_CODE_FISH | |
ALLERGEN_TYPE_CODE_GERANIOL | |
ALLERGEN_TYPE_CODE_GLUTEN | |
ALLERGEN_TYPE_CODE_HAZELNUTS | |
ALLERGEN_TYPE_CODE_HEXYL_CINNAMAL | |
ALLERGEN_TYPE_CODE_HYDROXYCITRONELLAL | |
ALLERGEN_TYPE_CODE_HYDROXYISOHEXYL_3_CYCLOHEXENE_CARBOXALDEHYDE_ISOEUGENOL_LIMONENE_LINAL | |
ALLERGEN_TYPE_CODE_KAMUT | |
ALLERGEN_TYPE_CODE_LACTOSE | |
ALLERGEN_TYPE_CODE_LUPINE | |
ALLERGEN_TYPE_CODE_MACADAMIA_NUTS | |
ALLERGEN_TYPE_CODE_METHYL_2_OCTYNOATE | |
ALLERGEN_TYPE_CODE_MILK | |
ALLERGEN_TYPE_CODE_MOLLUSCS | |
ALLERGEN_TYPE_CODE_MUSTARD | |
ALLERGEN_TYPE_CODE_NO_DECLARED_ALLERGENS | |
ALLERGEN_TYPE_CODE_OAT | |
ALLERGEN_TYPE_CODE_PEANUTS | |
ALLERGEN_TYPE_CODE_PEAS | |
ALLERGEN_TYPE_CODE_PECAN_NUTS | |
ALLERGEN_TYPE_CODE_PISTACHIOS | |
ALLERGEN_TYPE_CODE_POD_FRUITS | |
ALLERGEN_TYPE_CODE_QUEENSLAND_NUTS | |
ALLERGEN_TYPE_CODE_RYE | |
ALLERGEN_TYPE_CODE_SESAME_SEEDS | |
ALLERGEN_TYPE_CODE_SOYBEANS | |
ALLERGEN_TYPE_CODE_SPELT | |
ALLERGEN_TYPE_CODE_SULPHUR_DIOXIDE | |
ALLERGEN_TYPE_CODE_TREE_NUTS | |
ALLERGEN_TYPE_CODE_TREE_NUT_TRACES | |
ALLERGEN_TYPE_CODE_WALNUTS | |
ALLERGEN_TYPE_CODE_WHEAT |
DepositCode
說明如何正確存放食物或瓶子。
| 名稱 | 說明 |
|---|---|
DEPOSIT_CODE_UNSPECIFIED | 請勿使用。未明確指定存款代碼。 |
DEPOSIT_CODE_REUSABLE | |
DEPOSIT_CODE_RECYCLABLE |
PropertyType
選項適用的房源類型。
| 名稱 | 說明 |
|---|---|
UNKNOWN_PROPERTY_TYPE | 請勿使用。未明確指定屬性類型。 |
OPTION | 一般菜單項目選項屬性,不屬於下列更具體的類型。如果屬性不是 SIZE 或 PIZZA_SIDE 類型,請使用這項屬性。 |
SIZE | 表示尺寸的菜單項目選項屬性 (例如小、中或大)。 |
PIZZA_SIDE | 披薩專屬屬性。舉例來說,這個 MenuItemOption 僅適用於部分/整個披薩,例如左側、右側或整個披薩的蘑菇配料。 |
PropertyValue
選項屬性的值定義明確。
| 名稱 | 說明 |
|---|---|
UNKNOWN_PROPERTY_VALUE | 請勿使用。屬性值未明確指定。 |
PIZZA_SIDE_LEFT | MenuItemOption 僅適用於披薩左半邊。 |
PIZZA_SIDE_RIGHT | MenuItemOption 只會套用至披薩右半邊。 |
PIZZA_SIDE_WHOLE | MenuItemOption 會套用至整個披薩。 |
類型
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
menu | 物件(Menu) | 與 | |
section | 物件(MenuSection) | 與 | |
item | 物件(MenuItem) | 與 | |
option | 物件(MenuItemOption) | 與 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
offer_set | 物件(OfferSet) | 與 | 可購買這項食品的優惠。 |
menu_item_option_set | 物件(MenuItemOptionSet) | 與 | 這個選單項目可用的選項。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
amount | 數字 | 與 | 代表營養價值的單一數字。 |
range | 物件(Range) | 與 | 代表營養價值的範圍。 |
| 欄位名稱 | 類型 | 規定 | 說明 |
|---|---|---|---|
property_val | enum(PropertyValue) | 與 | 選項屬性的明確值。目前只有在 property_type 為 PIZZA_SIDE 時,才會預期有這個值。 |
text_val | 物件(TextField) | 與 | 屬性值的文字 (格式不限)。預期用於 property_type 選項和 SIZE。 |