执行方式架构

本页面介绍在使用 Google 内置操作 API 的“订单”时,履单网络服务的订单(通过 Google API 订购)。 如需了解此信息的机器可读版本,您可以下载 JSON 架构

基本类型

购物车

包含订单的详细信息,以及请求是自提还是送餐。购物车中还包含配送详情、小费和送货地址。 Cart 对象在 Checkout AppRequest 中定义。 您可以在 Checkout AppResponse 中添加购物车的副本

下表列出了 Cart 类型的属性:

属性 类型 说明
@type 对比度

此对象的类型。如果父级购物车对象是 ProposedOrder 的一部分,则省略此字段。

值:type.googleapis.com/google.actions.v2.orders.Cart

id String

购物车的可选 ID。

merchant Merchant

与此购物车关联的商家。

lineItems 列表LineItem

必需。

用户订购的商品或服务的列表。

不得少于 1 项内容

promotions 列表Promotion

此购物车中应用的促销活动。目前仅支持一项促销活动。

notes String

有关订单或送货说明的说明。

extension FoodCartExtension

定义有关用户的详细信息,例如执行方式偏好设置。

以下示例展示了 Cart 元素:

示例 1

{
  "@type": "type.googleapis.com/google.actions.v2.orders.Cart",
  "merchant": {
    "id": "https://www.exampleprovider.com/merchant/id1",
    "name": "Cucina Venti"
  },
  "lineItems": [
    {
      "name": "Sizzling Prawns Dinner",
      "type": "REGULAR",
      "id": "sample_item_offer_id_1",
      "offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
      "quantity": 1,
      "price": {
        "type": "ESTIMATE",
        "amount": {
          "currencyCode": "USD",
          "units": "16",
          "nanos": 750000000
        }
      },
      "subLines": [
        {
          "note": "Notes for this item."
        }
      ],
      "extension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension",
        "options": [
          {
            "id": "sample_addon_offer_id_1",
            "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
            "name": "Honey Mustard",
            "price": {
              "currencyCode": "USD"
            },
            "quantity": 1
          },
          {
            "id": "sample_addon_offer_id_2",
            "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2",
            "name": "BBQ Sauce",
            "price": {
              "currencyCode": "USD",
              "nanos": 500000000
            },
            "quantity": 1
          }
        ]
      }
    }
  ],
  "extension": {
    "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
    "fulfillmentPreference": {
      "fulfillmentInfo": {
        "delivery": {
          "deliveryTimeIso8601": "P0M"
        }
      }
    },
    "location": {
      "coordinates": {
        "latitude": 37.788783,
        "longitude": -122.41384
      },
      "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States",
      "zipCode": "94043",
      "city": "Mountain View",
      "postalAddress": {
        "regionCode": "US",
        "postalCode": "94043",
        "administrativeArea": "CA",
        "locality": "Mountain View",
        "addressLines": [
          "1350 Charleston Road"
        ]
      },
      "notes": "Gate code is #111"
    }
  }
}

示例 2

{
  "merchant": {
    "id": "https://www.exampleprovider.com/merchant/id1",
    "name": "Falafel Bite"
  },
  "lineItems": [
    {
      "name": "Pita Chips",
      "type": "REGULAR",
      "id": "sample_item_offer_id_1",
      "offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
      "quantity": 1,
      "price": {
        "type": "ESTIMATE",
        "amount": {
          "currencyCode": "USD",
          "units": "2",
          "nanos": 750000000
        }
      },
      "subLines": [
        {
          "note": "Notes for this item."
        }
      ],
      "extension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension",
        "options": [
          {
            "id": "sample_addon_offer_id_1",
            "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
            "name": "Honey Mustard",
            "price": {
              "currencyCode": "USD"
            },
            "quantity": 1
          },
          {
            "id": "sample_addon_offer_id_2",
            "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2",
            "name": "BBQ Sauce",
            "price": {
              "currencyCode": "USD",
              "nanos": 500000000
            },
            "quantity": 1
          }
        ]
      }
    },
    {
      "name": "Chicken Shwarma Wrap",
      "type": "REGULAR",
      "id": "sample_item_offer_id_2",
      "offerId": "https://www.exampleprovider.com/menu/item/offer/id2",
      "quantity": 1,
      "price": {
        "type": "ESTIMATE",
        "amount": {
          "currencyCode": "USD",
          "units": "8"
        }
      },
      "extension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
      }
    },
    {
      "name": "Greek Salad",
      "type": "REGULAR",
      "id": "sample_item_offer_id_3",
      "offerId": "https://www.exampleprovider.com/menu/item/offer/id3",
      "quantity": 1,
      "price": {
        "type": "ESTIMATE",
        "amount": {
          "currencyCode": "USD",
          "units": "9",
          "nanos": 990000000
        }
      },
      "extension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
      }
    },
    {
      "name": "Prawns Biryani",
      "type": "REGULAR",
      "id": "sample_item_offer_id_4",
      "offerId": "https://www.exampleprovider.com/menu/item/offer/id4",
      "quantity": 1,
      "price": {
        "type": "ESTIMATE",
        "amount": {
          "currencyCode": "USD",
          "units": "15",
          "nanos": 990000000
        }
      },
      "extension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
      }
    }
  ],
  "extension": {
    "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
    "fulfillmentPreference": {
      "fulfillmentInfo": {
        "delivery": {
          "deliveryTimeIso8601": "P90M"
        }
      }
    },
    "location": {
      "coordinates": {
        "latitude": 37.788783,
        "longitude": -122.41384
      },
      "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States",
      "zipCode": "94043",
      "city": "Mountain View",
      "postalAddress": {
        "regionCode": "US",
        "postalCode": "94043",
        "administrativeArea": "CA",
        "locality": "Mountain View",
        "addressLines": [
          "1350 Charleston Road"
        ]
      },
      "notes": "Gate code is #111"
    }
  }
}

联系

指定收到订单的人员的详细信息。它仅在 AppResponse 中提供。

下表列出了 Contact 类型的属性:

属性 类型 说明
displayName String

接收订单的用户的姓名,您希望按订单名称显示。如果未指定 firstName 和 lastName,请使用此字段。

示例:Lovefood Ordering

email String

接收订单的用户的电子邮件地址。

示例:ilovefood@example.com

firstName String

接收订单的用户的名字。

示例:Lovefood

lastName String

接收订单的人员的姓氏。

示例:Ordering

phoneNumber String

接收订单的用户的电话号码(包括国家/地区代码)。

示例:+16501234567

emailVerified Boolean

说明接收订单的用户是否已使用自己的 Google 帐号登录。

以下示例展示了 Contact 元素:

示例

{
  "displayName": "Lovefood Ordering",
  "email": "ilovefood@example.com",
  "phoneNumber": "+16501234567"
}

CustomPushMessage

包含请求的 OrderUpdate

下表列出了 CustomPushMessage 类型的属性:

属性 类型 说明
orderUpdate OrderUpdate

必需。

已更新订单信息。

以下示例展示了 CustomPushMessage 元素:

示例

{
  "orderUpdate": {
    "actionOrderId": "sample_action_order_id",
    "orderState": {
      "state": "IN_TRANSIT",
      "label": "Order is on the way"
    },
    "inTransitInfo": {
      "updatedTime": "2017-07-17T12:00:00Z"
    },
    "updateTime": "2017-07-17T12:00:00Z",
    "orderManagementActions": [
      {
        "type": "CUSTOMER_SERVICE",
        "button": {
          "title": "Contact customer service",
          "openUrlAction": {
            "url": "mailto:support@example.com"
          }
        }
      },
      {
        "type": "EMAIL",
        "button": {
          "title": "Email restaurant",
          "openUrlAction": {
            "url": "mailto:person@example.com"
          }
        }
      },
      {
        "type": "CALL_RESTAURANT",
        "button": {
          "title": "Call restaurant",
          "openUrlAction": {
            "url": "tel:+16505554679"
          }
        }
      }
    ],
    "receipt": {
      "userVisibleOrderId": "userVisibleId1234"
    },
    "infoExtension": {
      "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
      "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z"
    }
  }
}

送货信息

下表列出了 DeliveryInfo 类型的属性:

属性 类型 说明
deliveryTimeIso8601 String

预计送达时间,采用 ISO 8601 时间戳格式:<年}-{月}-{日}T{小时}:{分钟}:{sec}[.{frac_sec}]Z”或时长格式:"P(n)Y(n)M(n)DT(n)H(n)M(n)S”。例如,PT90M 表示时长为 90 分钟。默认值“PT0M”表示尽快送货。参考文档:https://en.wikipedia.org/wiki/ISO_8601#Merged_date_and_time_Presentationations。使用此方法可在结账响应期间更新预计送货时间。

示例:PT90M

以下示例展示了 DeliveryInfo 元素:

示例

{
  "deliveryTimeIso8601": "PT90M"
}

免责声明

下表列出了 Disclaimer 类型的属性:

属性 类型 说明
predefinedMessage PredefinedMessage

必需。

在结账期间显示预定义的免责声明消息。

feeAmount Money

合作伙伴需要向此订单支付 N 金额的商家费用。

feeAmountRange FeeAmountRange

合作伙伴向每笔订单向餐馆收取金额为 N 到 M 的费用。

feePercent 编号

合作伙伴需要对此订单收取 N% 的费用。

feePercentRange FeePercentRange

合作伙伴将向每笔订单向商家收取 N% 到 M% 的费用。

以下示例展示了 Disclaimer 元素:

示例 1

{
  "predefinedMessage": "NEW_YORK_DELIVERY_FEE_TIP_DISCLAIMER"
}

示例 2

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE"
}

示例 3

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE",
  "feePercent": 25
}

示例 4

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE",
  "feePercentRange": {
    "minFeePercent": 20,
    "maxFeePercent": 30
  }
}

示例 5

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE",
  "feeAmount": {
    "currencyCode": "AUD",
    "units": 2,
    "nanos": 500000000
  }
}

示例 6

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE",
  "feeAmountRange": {
    "minFeeAmount": {
      "currencyCode": "AUD",
      "units": 2,
      "nanos": 500000000
    },
    "maxFeeAmount": {
      "currencyCode": "AUD",
      "units": 10,
      "nanos": 0
    }
  }
}

错误

Error 类型具有以下可能值:

  • CLOSED:餐厅在订餐时不营业。
  • NO_CAPACITY:没有可用的服务容量(例如,高峰时段的临时中断情况)。
  • NO_COURIER_AVAILABLE:由于人手有限,无法处理订单。
  • REQUIREMENTS_NOT_MET:未达到接受订单的条件(例如,最低购物金额)。
  • UNAVAILABLE_SLOT:无法按 DeliveryInfo 或 PickupInfo 指定的提前订单履行订单。
  • OUT_OF_SERVICE_AREA:订单无法配送至用户的地址。
  • PROMO_EXPIRED:由于促销活动已过期,因此无法应用。
  • PROMO_NOT_APPLICABLE:通用促销代码,用于在没有其他适用的促销代码错误的情况下,捕获未能应用促销代码的所有情况。
  • PROMO_NOT_RECOGNIZED:优惠券代码无法识别。
  • PROMO_ORDER_INELIGIBLE:当前订单无法使用此优惠券。
  • PROMO_USER_INELIGIBLE:当前用户无法使用此优惠券。
  • AVAILABILITY_CHANGED:相应商品已下架,或者商品数量不足,无法满足相应请求。
  • INCORRECT_PRICE:费用或总费用中存在价格错误。
  • INVALID:某一 LineItem、FulfillmentOption 或 Promotion 包含无效数据。
  • NOT_FOUND:找不到 LineItem、FulfillmentOption 或 Promotion。
  • PRICE_CHANGED:商品价格发生了变化。

费用范围

下表列出了 FeeAmountRange 类型的属性:

属性 类型 说明
minFeeAmount Money

收取的费用金额的下限。

maxFeeAmount Money

收取的费用金额的上限。

费用百分比范围

下表列出了 FeePercentRange 类型的属性:

属性 类型 说明
minFeePercent 编号

收取的费用百分比下限。

maxFeePercent 编号

收取的费用百分比上限。

FoodCartExtension

包含用户的详细信息,例如执行方式偏好设置。

下表列出了 FoodCartExtension 类型的属性:

属性 类型 说明
@type 对比度

此附加信息的类型。此字段始终设置为 "type.googleapis.com/google.actions.v2.orders.FoodCartExtension"。

值:type.googleapis.com/google.actions.v2.orders.FoodCartExtension

contact Contact

接收订单的人员的联系信息。详细信息包括此人的姓名、电话号码和电子邮件地址。

fulfillmentPreference FulfillmentOption

必需。

用户的履单偏好设置。

location Location

在 CheckoutRequestMessage 中,此字段用于指定送货地址(如果订单需要送货,则必须提供)。对于提供外卖或自取订单的订单,此字段不包含在消息中。

以下示例展示了 FoodCartExtension 元素:

示例 1

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
  "fulfillmentPreference": {
    "fulfillmentInfo": {
      "delivery": {
        "deliveryTimeIso8601": "P0M"
      }
    }
  },
  "location": {
    "coordinates": {
      "latitude": 37.788783,
      "longitude": -122.41384
    },
    "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States",
    "zipCode": "94043",
    "city": "Mountain View",
    "postalAddress": {
      "regionCode": "US",
      "postalCode": "94043",
      "administrativeArea": "CA",
      "locality": "Mountain View",
      "addressLines": [
        "1350 Charleston Road"
      ]
    },
    "notes": "Gate code is #111"
  }
}

示例 2

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
  "fulfillmentPreference": {
    "fulfillmentInfo": {
      "pickup": {
        "pickupTimeIso8601": "P0M"
      }
    }
  },
  "contact": {
    "displayName": "Lovefood Ordering",
    "email": "ilovefood@example.com",
    "phoneNumber": "+16501234567"
  }
}

食品错误扩展程序

识别处理请求时发生的一个或多个错误。 下表介绍了 FoodErrorExtension 类型的字段。错误可以在 CheckoutResponse 中发送。

下表列出了 FoodErrorExtension 类型的属性:

属性 类型 说明
@type 对比度

必需。

此附加信息的类型。

值:type.googleapis.com/google.actions.v2.orders.FoodErrorExtension

foodOrderErrors 列表FoodOrderError

必需。

一系列 FoodOrderError 对象,用于描述发生的错误。建议为购物车或商品各提交一个错误。

不得少于 1 项内容

correctedProposedOrder ProposedOrder

foodOrderErrors.error = "UNAVAILABLE_SLOT", "PROMO_EXPIRED", "PROMO_NOT_APPLICABLE", "PROMO_NOT_RECOGNIZED", "PROMO_ORDER_INELIGIBLE", "PROMO_USER_INELIGIBLE", "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "INVALID", "NOT_FOUND", or "PRICE_CHANGED" 时为必需。

带有更正的新 ProposedOrder。如果原始 ProposedOrder 中存在可恢复的错误,则返回此对象。例如,购物车中一个或多个订单项的价格更改属于可恢复错误。包含有效 ProposedOrder 的可恢复错误会进入确认阶段,而不是要求用户查看购物车。

paymentOptions PaymentOptions

foodOrderErrors.error = "UNAVAILABLE_SLOT", "PROMO_EXPIRED", "PROMO_NOT_APPLICABLE", "PROMO_NOT_RECOGNIZED", "PROMO_ORDER_INELIGIBLE", "PROMO_USER_INELIGIBLE", "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "INVALID", "NOT_FOUND", or "PRICE_CHANGED" 时为必需。

为用户选择的默认付款方式。

additionalPaymentOptions 列表PaymentOptions

可供用户使用的其他付款方式。

以下示例展示了 FoodErrorExtension 元素:

示例

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
  "foodOrderErrors": [
    {
      "error": "PRICE_CHANGED",
      "id": "sample_item_offer_id_1",
      "description": "The price has changed.",
      "updatedPrice": {
        "currencyCode": "USD",
        "units": "2",
        "nanos": 750000000
      }
    },
    {
      "error": "PRICE_CHANGED",
      "id": "sample_item_offer_id_2",
      "description": "The price has changed.",
      "updatedPrice": {
        "currencyCode": "USD",
        "units": "8"
      }
    }
  ],
  "correctedProposedOrder": {
    "id": "sample_corrected_proposed_order_id_1",
    "otherItems": [
      {
        "name": "New customer discount",
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "-5",
            "nanos": -500000000
          }
        },
        "type": "DISCOUNT"
      },
      {
        "name": "Delivery fee",
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "3",
            "nanos": 500000000
          }
        },
        "type": "DELIVERY"
      },
      {
        "name": "Tax",
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "1",
            "nanos": 500000000
          }
        },
        "type": "TAX"
      }
    ],
    "cart": {
      "merchant": {
        "id": "https://www.exampleprovider.com/merchant/id1",
        "name": "Falafel Bite"
      },
      "lineItems": [
        {
          "name": "Pita Chips",
          "type": "REGULAR",
          "id": "sample_item_offer_id_1",
          "offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
          "quantity": 1,
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "2",
              "nanos": 750000000
            }
          },
          "subLines": [
            {
              "note": "Notes for this item."
            }
          ],
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension",
            "options": [
              {
                "id": "sample_addon_offer_id_1",
                "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
                "name": "Honey Mustard",
                "price": {
                  "currencyCode": "USD"
                },
                "quantity": 1
              },
              {
                "id": "sample_addon_offer_id_2",
                "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2",
                "name": "BBQ Sauce",
                "price": {
                  "currencyCode": "USD",
                  "nanos": 500000000
                },
                "quantity": 1
              }
            ]
          }
        },
        {
          "name": "Chicken Shwarma Wrap",
          "type": "REGULAR",
          "id": "sample_item_offer_id_2",
          "offerId": "https://www.exampleprovider.com/menu/item/offer/id2",
          "quantity": 1,
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "8"
            }
          },
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
          }
        },
        {
          "name": "Greek Salad",
          "type": "REGULAR",
          "id": "sample_item_offer_id_3",
          "offerId": "https://www.exampleprovider.com/menu/item/offer/id3",
          "quantity": 1,
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "9",
              "nanos": 990000000
            }
          },
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
          }
        },
        {
          "name": "Prawns Biryani",
          "type": "REGULAR",
          "id": "sample_item_offer_id_4",
          "offerId": "https://www.exampleprovider.com/menu/item/offer/id4",
          "quantity": 1,
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "15",
              "nanos": 990000000
            }
          },
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
          }
        }
      ],
      "extension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
        "fulfillmentPreference": {
          "fulfillmentInfo": {
            "delivery": {
              "deliveryTimeIso8601": "P90M"
            }
          }
        },
        "location": {
          "coordinates": {
            "latitude": 37.788783,
            "longitude": -122.41384
          },
          "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States",
          "zipCode": "94043",
          "city": "Mountain View",
          "postalAddress": {
            "regionCode": "US",
            "postalCode": "94043",
            "administrativeArea": "CA",
            "locality": "Mountain View",
            "addressLines": [
              "1350 Charleston Road"
            ]
          },
          "notes": "Gate code is #111"
        }
      }
    },
    "totalPrice": {
      "type": "ESTIMATE",
      "amount": {
        "currencyCode": "USD",
        "units": "36",
        "nanos": 730000000
      }
    },
    "extension": {
      "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
      "availableFulfillmentOptions": [
        {
          "fulfillmentInfo": {
            "delivery": {
              "deliveryTimeIso8601": "P90M"
            }
          },
          "expiresAt": "2017-07-17T12:30:00Z"
        }
      ]
    }
  },
  "paymentOptions": {
    "googleProvidedOptions": {
      "tokenizationParameters": {
        "tokenizationType": "PAYMENT_GATEWAY",
        "parameters": {
          "gateway": "stripe",
          "stripe:publishableKey": "pk_live_stripe_client_key",
          "stripe:version": "2017-04-06"
        }
      },
      "supportedCardNetworks": [
        "AMEX",
        "DISCOVER",
        "MASTERCARD",
        "JCB",
        "VISA"
      ],
      "prepaidCardDisallowed": true
    }
  }
}

食品扩展

定义适用于食品的插件。

下表列出了 FoodItemExtension 类型的属性:

属性 类型 说明
@type 对比度

必需。

此附加信息的类型。此字段始终设置为 "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"。

值:type.googleapis.com/google.actions.v2.orders.FoodItemExtension

options 列表FoodItemOption

选项可以是插件项或包含一组插件的插件组。

以下示例展示了 FoodItemExtension 元素:

示例

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension",
  "options": [
    {
      "id": "sample_addon_offer_id_1",
      "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
      "name": "Honey Mustard",
      "price": {
        "currencyCode": "USD"
      },
      "quantity": 1
    },
    {
      "id": "sample_addon_offer_id_2",
      "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2",
      "name": "BBQ Sauce",
      "price": {
        "currencyCode": "USD",
        "nanos": 500000000
      },
      "quantity": 1,
      "subOptions": [
        {
          "id": "10239138",
          "offerId": "912391723",
          "name": "Fries",
          "price": {
            "currencyCode": "USD",
            "units": "2",
            "nanos": 230000000
          },
          "quantity": 1
        }
      ]
    }
  ]
}

食品选项

下表列出了 FoodItemOption 类型的属性:

属性 类型 说明
id String

Google 分配的唯一 ID。在发送 FoodOrderError 或 AsyncOrderUpdateRequest 时,如果购物车中的商品具有相同优惠 ID 且有多个商品,请使用此字段进行区分。

示例:39231093

offerId String

商品的优惠 ID。

示例:912835081

name String

选项名称。

示例:Honey Mustard

price Money
note String

与选项相关的备注。

quantity 编号

对于商品选项,则为商品数量。

示例:3

subOptions 列表FoodItemOption

该选项的子选项(如果有)。

示例:[ { "id": "71283712", "offerId": "51209121", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "units": "3", "nanos": 780000000 }, "quantity": 2 }, { "id": "102941024", "offerId": "12084102", "name": "Ketchup", "price": { "currencyCode": "USD", "units": "2", "nanos": 980000000 }, "quantity": 6 } ]

以下示例展示了 FoodItemOption 元素:

示例 1

{
  "id": "10293231",
  "offerId": "1918491",
  "name": "Honey Mustard",
  "price": {
    "currencyCode": "USD",
    "units": "1",
    "nanos": 250000000
  },
  "quantity": 5
}

示例 2

{
  "id": "123166552",
  "offerId": "912849184",
  "name": "Make It A Meal",
  "price": {
    "currencyCode": "USD",
    "units": "3",
    "nanos": 730000000
  },
  "quantity": 1,
  "subOptions": [
    {
      "id": "10239138",
      "offerId": "912391723",
      "name": "Fries",
      "price": {
        "currencyCode": "USD",
        "units": "2",
        "nanos": 230000000
      },
      "quantity": 1
    },
    {
      "id": "57159183",
      "offerId": "81837123",
      "name": "Drink",
      "price": {
        "currencyCode": "USD",
        "units": "3",
        "nanos": 130000000
      },
      "quantity": 1
    }
  ]
}

食品订单错误

CheckoutResponse 中包含有关错误的详细信息。

下表列出了 FoodOrderError 类型的属性:

属性 类型 说明
error Error

必需。

id String

error = "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "PRICE_CHANGED", "INVALID", or "NOT_FOUND" 时为必需。

对于商品级错误,此字段为必填字段。它是 Google 为菜单项分配的 LineItem.id,或用于插件的 FoodItemOption.id。

description String

错误的说明。此说明用于内部日志记录,不会向用户显示。

updatedPrice Money

error = "PRICE_CHANGED" 时为必需。

导致错误的商品的新价格。只有在错误为“PRICE_CHANGED”时,才需要填写此字段。

availableQuantity 整数

error = "INVALID", or "NOT_FOUND" 时为必需。

导致错误的商品的新可用数量。仅当错误为“INVALID”或“NOT_FOUND”时,才需要填写此字段。“INVALID”和“NOT_FOUND”的值应为零。

以下示例展示了 FoodOrderError 元素:

示例 1

{
  "error": "CLOSED",
  "description": "This store is currently reachable. Please try again later."
}

示例 2

{
  "error": "PRICE_CHANGED",
  "id": "french_fries",
  "description": "The price has changed.",
  "updatedPrice": {
    "currencyCode": "USD",
    "units": "2",
    "nanos": 750000000
  }
}

食品订单附加信息

包含订单的履单信息。

下表列出了 FoodOrderExtension 类型的属性:

属性 类型 说明
@type 对比度

此附加信息的类型。此字段始终设置为 "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension"。

值:type.googleapis.com/google.actions.v2.orders.FoodOrderExtension

availableFulfillmentOptions 列表FulfillmentOption

表示订单的可用履单选项。

optinForRemarketing Boolean

用户请求加入您的营销渠道的请求。默认情况下,未经用户同意,您无法发送营销内容。如果“选择接受再营销”为 true,您可以订阅用户。如果“选择接受再营销”为 false 或不存在,您必须按原样保留订阅状态。用户无法通过营销渠道中提供的退订功能,通过 Google 选择退订。此标志仅出现在 SubmitOrderRequestMessage 中。

以下示例展示了 FoodOrderExtension 元素:

示例 1

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
  "availableFulfillmentOptions": [
    {
      "fulfillmentInfo": {
        "delivery": {
          "deliveryTimeIso8601": "P0M"
        }
      },
      "expiresAt": "2017-07-17T12:30:00Z"
    }
  ]
}

示例 2

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
  "availableFulfillmentOptions": [
    {
      "fulfillmentInfo": {
        "pickup": {
          "pickupTimeIso8601": "P0M"
        }
      },
      "expiresAt": "2020-08-20T11:41:00Z"
    }
  ],
  "optinForRemarketing": true
}

执行方式

您可以通过以下方式使用 FulfillmentOption 对象:
  • Checkout AppRequestSubmit AppRequest 中,Cart.extension.fulfillmentPreference:存储用户的偏好设置(送货或自提)。发送结账请求时,价格始终为 0。
  • Checkout AppResponse 中,ProposedOrder.extension.availableFulfillmentOptions:定义一个或多个递送选项(目前仅支持一个选项)。您可以在 ProposedOrder.otherItems 中将默认选项指定为 LineItemFulfillmentOptionofferId 应与 ProposedOrder.otherItems 中指定的 LineItem 的 ID 一致。

下表列出了 FulfillmentOption 类型的属性:

属性 类型 说明
offerId String

此履单选项的唯一标识符(如有)。

fulfillmentInfo FulfillmentOptionInfo

必需。

expiresAt ISO 时间戳

此履单选项的到期时间。

price Money

此选项的费用。

以下示例展示了 FulfillmentOption 元素:

示例

{
  "offerId": "offer5",
  "fulfillmentInfo": {
    "pickup": {
      "pickupTimeIso8601": "P0M"
    }
  },
  "expiresAt": "2019-05-02T00:00:00-07:00",
  "price": {
    "currencyCode": "USD",
    "units": "5",
    "nanos": 230000000
  }
}

执行方式选项信息

定义与 FulfillmentInfo 相关的信息。

下表列出了 FulfillmentOptionInfo 类型的属性:

属性 类型 说明
只能提供以下属性组之一。
delivery 分组 1 DeliveryInfo

如果存在,则表示投放订单。

pickup 分组 2 PickupInfo

如果存在,则表示自提订单。

映像

下表列出了 Image 类型的属性:

属性 类型 说明
sourceUrl String

必需。

图片的网址。图片至少应为 72x72 像素。为获得最佳效果,请使用不低于 216x216 像素的图片。图片大小必须小于 6 MB 和 6400 万像素。

LineItem

定义购物车的内容 (Cart.lineItems) 或订单的额外费用 (ProposedOrder.otherItems)。

下表列出了 LineItem 类型的属性:

属性 类型 说明
id String

type = "REGULAR" 时为必需。

对于购物车中的订单 (ProposedOrder.cart.lineItems[0].id),这是 Google 在创建订单时创建的唯一 ID。对于 ProposedOrder (ProposedOrder.otherItems[0].id) 中的 LineItem,用于添加运费和税费等项,ID 的值由提供商定义。例如,购物车中的两件相同准备说明不同的商品(例如,两份中式披萨配料组不同)。在本例中,这两件商品具有相同的基础优惠 ID。当您发送订单更新请求以指明商品遭拒时,请使用此 ID 作为消除歧义。换言之,如果一个披萨因为没有特定配料而被拒,则 Google 可以帮助该 ID 确定您所提及订单中的菜品。此字段是必填字段,但其他项除外。

name String

必需。

订单项的名称。这是用户可见的字符串,应尽可能为句首字母大写(如“送货费用”、“服务费”和“税费”)。对于用户,此字段的字符数上限为 100 个。

type LineItemType

必需。

quantity 整数

type = "REGULAR" 时为必需。

包含的商品数量。不适用于 ProposedOrder.otherItems。

description String

商品的说明。

price Price

必需。

商品的价格。此值反映了此订单项所有商品或服务的总价(也就是说,加上所有插件的费用并乘以数量)。例如:如果某个 10 元的商品数量为 3,则价格为 30 元。假如某款披萨的基准价格为 5 美元,附加功能的价格为 1 美元,则该披萨的价格为 6 美元。对于两款披萨的价格为 5 美元,每款披萨的价格为 1 美元,每种披萨的价格为 12 美元。即使价格为“0”,每个 LineItem 也都必须有价格。当类型为 DISCOUNT 时,将该值指定为负数(例如,“-2”);

subLines 列表SublineNote

可选,仅在类型为“REGULAR”时有效。在结帐请求和订单提交请求中,可能会发送用户针对特定商品的备注。确保商家在收到备注后会收到备注。它将在请求中以 subLines[0].note 开头,它是请求中提供的唯一值。

不得超过 1 项

offerId String

type = "REGULAR" 时为必需。

菜品的 MenuItem 的优惠 ID。不适用于 ProposedOrder.otherItems。

extension FoodItemExtension

定义适用于食品的插件。

以下示例展示了 LineItem 元素:

示例 1

{
  "name": "New customer discount",
  "price": {
    "type": "ESTIMATE",
    "amount": {
      "currencyCode": "USD",
      "units": "-5",
      "nanos": -500000000
    }
  },
  "type": "DISCOUNT"
}

示例 2

{
  "name": "Pita Chips",
  "type": "REGULAR",
  "id": "sample_item_offer_id_1",
  "offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
  "quantity": 1,
  "price": {
    "type": "ESTIMATE",
    "amount": {
      "currencyCode": "USD",
      "units": "2",
      "nanos": 750000000
    }
  },
  "subLines": [
    {
      "note": "Notes for this item."
    }
  ],
  "extension": {
    "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension",
    "options": [
      {
        "id": "sample_addon_offer_id_1",
        "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
        "name": "Honey Mustard",
        "price": {
          "currencyCode": "USD"
        },
        "quantity": 1
      },
      {
        "id": "sample_addon_offer_id_2",
        "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2",
        "name": "BBQ Sauce",
        "price": {
          "currencyCode": "USD",
          "nanos": 500000000
        },
        "quantity": 1
      }
    ]
  }
}

类型

LineItemType 类型具有以下可能值:

  • REGULAR:商品订单项。适用于 Cart.lineItems。
  • TAX:税费专列项。适用于 ProposedOrder.otherItems。
  • DISCOUNT:折扣订单项。请注意,价格应为负数。适用于 ProposedOrder.otherItems。
  • GRATUITY:免费订单项。通常用于用户选择的小费的 SubmitOrderRequestMessage。适用于 ProposedOrder.otherItems。
  • DELIVERY:投放订单项。适用于 ProposedOrder.otherItems。
  • SUBTOTAL:小计订单项。适用于 ProposedOrder.otherItems。
  • FEE:其他类型不涵盖的其他订单项。适用于 ProposedOrder.otherItems。

位置

指定订餐的地址。Location 类型用于 Cart 中,仅用于指示送货订单的目的地。如果用户下单,TransactionDecisionValue 中还会显示最终营业地点。对于指定了自提订单的订单,根本不包含任何位置(甚至包括空位置)。

下表列出了 Location 类型的属性:

属性 类型 说明
coordinates Coordinates
formattedAddress String

营业地点的显示地址。

示例:1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States

postalAddress PostalAddress
zipCode String

示例:90210

city String

城市的名称。

示例:Los Angeles

notes String

有关营业地点的备注,例如关口代码。名称不得超过 500 个字符。

示例:Gate code is #111

以下示例展示了 Location 元素:

示例

{
  "coordinates": {
    "latitude": 37.788783,
    "longitude": -122.41384
  },
  "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States",
  "zipCode": "94043",
  "city": "Mountain View",
  "postalAddress": {
    "regionCode": "US",
    "postalCode": "94043",
    "administrativeArea": "CA",
    "locality": "Mountain View",
    "addressLines": [
      "1350 Charleston Road"
    ]
  },
  "notes": "Gate code is #111"
}

商家

下表列出了 Merchant 类型的属性:

属性 类型 说明
id String

商家的 ID。如果指定,则与 餐馆 Feed 中的 Restaurant.@id 匹配。

示例:https://www.exampleprovider.com/merchant/id1

name String

必需。

用户可见的商家名称。

示例:Falafel Bite

以下示例展示了 Merchant 元素:

示例

{
  "id": "https://www.exampleprovider.com/merchant/id1",
  "name": "Falafel Bite"
}

金额

下表列出了 Money 类型的属性:

属性 类型 说明
currencyCode String

必需。

ISO 4217 格式的货币代码(由 3 个字母组成)。

示例:USD

units String

金额的整数单位。例如,如果 currencyCode 是“USD”,则“1”单位是一美元。

示例:36

nanos 整数

金额的纳诺 (10^-9) 单位数。该值必须介于 -999999999(含)和 +999999999(含)之间。请遵循以下规则:如果单位数是正数,纳诺必须是正数或零。如果单位数为零,纳诺可以是正数、零或负数。如果单位数是负数,纳诺必须是负数或零。例如 $-1.75 表示为单位 - 1,纳米 = -750000000。

示例:730000000

以下示例展示了 Money 元素:

示例 1

{
  "currencyCode": "USD",
  "units": "36",
  "nanos": 730000000
}

示例 2

{
  "currencyCode": "EUR",
  "units": "10"
}

订购

包含最终订单,包括税费、费用、送货费用以及付款信息。您的对象在 Submit AppRequest 中收到此对象。

下表列出了 Order 类型的属性:

属性 类型 说明
finalOrder ProposedOrder

必需。

促成订单的提案订单。

googleOrderId String

必需。

由 Google 分配的订单 ID。此 ID 应在订单的整个生命周期内保持稳定。此 ID 不会向最终用户显示。

orderDate ISO 时间戳

必需。

订单的创建日期和时间。

paymentInfo PaymentInfo

必需。

与此订单付款相对应的付款信息。

以下示例展示了 Order 元素:

示例

{
  "finalOrder": {
    "cart": {
      "notes": "Guest prefers their food to be hot when it is delivered.",
      "merchant": {
        "id": "https://www.exampleprovider.com/merchant/id1",
        "name": "Cucina Venti"
      },
      "lineItems": [
        {
          "name": "Sizzling Prawns Dinner",
          "type": "REGULAR",
          "id": "sample_item_offer_id_1",
          "offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
          "quantity": 1,
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "16",
              "nanos": 750000000
            }
          },
          "subLines": [
            {
              "note": "Notes for this item."
            }
          ],
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension",
            "options": [
              {
                "id": "sample_addon_offer_id_1",
                "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
                "name": "Honey Mustard",
                "price": {
                  "currencyCode": "USD"
                },
                "quantity": 1
              },
              {
                "id": "sample_addon_offer_id_2",
                "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2",
                "name": "BBQ Sauce",
                "price": {
                  "currencyCode": "USD",
                  "nanos": 500000000
                },
                "quantity": 1
              }
            ]
          }
        }
      ],
      "extension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
        "fulfillmentPreference": {
          "fulfillmentInfo": {
            "pickup": {
              "pickupTimeIso8601": "P0M"
            }
          }
        },
        "contact": {
          "displayName": "Lovefood Ordering",
          "email": "ilovefood@example.com",
          "phoneNumber": "+16501234567"
        }
      }
    },
    "otherItems": [
      {
        "name": "Service fee",
        "type": "FEE",
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "3",
            "nanos": 500000000
          }
        }
      },
      {
        "name": "Tax",
        "type": "TAX",
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "1",
            "nanos": 370000000
          }
        }
      },
      {
        "name": "Tip",
        "type": "GRATUITY",
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "2",
            "nanos": 590000000
          }
        }
      }
    ],
    "totalPrice": {
      "type": "ESTIMATE",
      "amount": {
        "currencyCode": "USD",
        "units": "23",
        "nanos": 710000000
      }
    },
    "id": "sample_final_order_id",
    "extension": {
      "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
      "availableFulfillmentOptions": [
        {
          "fulfillmentInfo": {
            "pickup": {
              "pickupTimeIso8601": "P0M"
            }
          },
          "expiresAt": "2017-07-17T12:30:00Z"
        }
      ],
      "optinForRemarketing": true
    }
  },
  "googleOrderId": "sample_google_order_id",
  "orderDate": "2017-07-17T12:00:00Z",
  "paymentInfo": {
    "displayName": "Visa\u2006****\u20061111",
    "googleProvidedPaymentInstrument": {
      "instrumentToken": "abcd"
    },
    "paymentType": "PAYMENT_CARD"
  }
}

OrderUpdate

下表介绍了 AppResponse 中包含的 OrderUpdate 类型的字段。

下表列出了 OrderUpdate 类型的属性:

属性 类型 说明
actionOrderId String

必需。

集成商系统中订单的唯一 ID,用于标识发送更新的订单。如果为“CREATED”订单在 OrderUpdate 中至少没有提供 order.user_visible_order_id,此 ID 将是 Google 订单卡片中显示的输入的用户可见 ID。

orderState OrderState

必需。

订单的新状态。

lineItemUpdates 映射和字符串,LineItemUpdate>
updateTime ISO 时间戳

必需。

订单的更新时间。

orderManagementActions 列表OrderManagementAction

下单后的操作,例如与支持团队联系和查看订单详情。

不得少于 1 项且不超过 6 项

rejectionInfo RejectionInfo

orderState.state = "REJECTED" 时为必需。

cancellationInfo CancellationInfo

orderState.state = "CANCELLED" 时为必需。

inTransitInfo InTransitInfo

此字段已弃用。

fulfillmentInfo FulfillmentInfo

此字段已弃用。

receipt Receipt

orderState.state = "CONFIRMED", "IN_PREPARATION", or "READY_FOR_PICKUP" 时为必需。

在收据中提供用户可见的订单 ID。

totalPrice Price

订单的总价。

infoExtension FoodOrderUpdateExtension

定义订单更新的更多详情,例如预计交货或自提的时间间隔。

以下示例展示了 OrderUpdate 元素:

示例

{
  "actionOrderId": "sample_action_order_id",
  "orderState": {
    "state": "CONFIRMED",
    "label": "Provider confirmed"
  },
  "totalPrice": {
    "type": "ESTIMATE",
    "amount": {
      "currencyCode": "USD",
      "units": "41",
      "nanos": 600000000
    }
  },
  "lineItemUpdates": {
    "sample_item_id_1": {
      "price": {
        "type": "ESTIMATE",
        "amount": {
          "currencyCode": "USD",
          "units": "3",
          "nanos": 500000000
        }
      },
      "reason": "This item has an updated price."
    }
  },
  "receipt": {
    "userVisibleOrderId": "userVisibleId1234"
  },
  "updateTime": "2017-07-17T12:00:00Z",
  "orderManagementActions": [
    {
      "type": "CUSTOMER_SERVICE",
      "button": {
        "title": "Contact customer service",
        "openUrlAction": {
          "url": "mailto:support@example.com"
        }
      }
    },
    {
      "type": "EMAIL",
      "button": {
        "title": "Email restaurant",
        "openUrlAction": {
          "url": "mailto:person@example.com"
        }
      }
    },
    {
      "type": "CALL_RESTAURANT",
      "button": {
        "title": "Call restaurant",
        "openUrlAction": {
          "url": "tel:+16505554679"
        }
      }
    }
  ],
  "infoExtension": {
    "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
    "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z"
  }
}

自提信息

下表列出了 PickupInfo 类型的属性:

属性 类型 说明
pickupTimeIso8601 String

预计自提时间,采用 ISO 8601 时间戳格式:<年}-{月}-{日}T{小时}:{分钟}:{sec}[.{frac_sec}]Z”或时长格式:"P(n)Y(n)M(n)DT(n)H(n)M(n)S”。例如,PT90M 表示时长为 90 分钟。默认值为“PT0M”,表示首选自提时间。参考文档:https://en.wikipedia.org/wiki/ISO_8601#Merged_date_and_time_Presentationations。使用此方法可在结账响应期间更新预计自提时间。

示例:PT90M

以下示例展示了 PickupInfo 元素:

示例

{
  "pickupTimeIso8601": "PT90M"
}

PostalAddress

下表列出了 PostalAddress 类型的属性:

属性 类型 说明
regionCode String

必需。

由两个字母组成的国家/地区代码。

示例:US

postalCode String

邮政编码。

示例:94043

administrativeArea String

最高行政区划,用于国家或地区的邮政地址。此值可以是州、省、州(俄罗斯)或县。

示例:CA

locality String

此营业地点所在的城市或城镇。对于没有明确定义市行政区或不符合此结构的地区,请勿指定市行政区,而改用 addressLines 字段。

示例:Mountain View

addressLines 列表和字符串

一行或多行,可用于指定街道地址。此字段不应修改,因为它可能包含不明确的市行政区。

示例:[ "1350 Charleston Road" ]

recipients 列表和字符串

订单的收件人列表。此字段仅在 billingAddress 中可用。

以下示例展示了 PostalAddress 元素:

示例

{
  "regionCode": "US",
  "postalCode": "94043",
  "administrativeArea": "CA",
  "locality": "Mountain View",
  "addressLines": [
    "1350 Charleston Road"
  ]
}

价格

下表列出了 Price 类型的属性:

属性 类型 说明
type Enum [ "ESTIMATE", "ACTUAL" ]

必需。

促销优惠券代码。

amount Money

必需。

促销信息

下表列出了 Promotion 类型的属性:

属性 类型 说明
coupon String

必需。

促销优惠券代码。

建议的订单

下表列出了 ProposedOrder 类型的属性:

属性 类型 说明
id String

建议订单的可选 ID。

cart Cart

必需。

用户的商品。

otherItems 列表LineItem

提供商添加的商品(例如运费、其他费用和税费)。otherItems 还可能包含用户添加的小费和/或折扣。

不得超过 10 项

image Image

与建议订单关联的图片。

totalPrice Price

必需。

建议订单的总价。

extension FoodOrderExtension

必需。

定义食品订单的履单信息。

disclaimers 列表Disclaimer

对应于下单之前将在界面中显示的免责声明消息。

以下示例展示了 ProposedOrder 元素:

示例

{
  "id": "sample_proposed_order_id_1",
  "otherItems": [
    {
      "name": "New customer discount",
      "price": {
        "type": "ESTIMATE",
        "amount": {
          "currencyCode": "USD",
          "units": "-5",
          "nanos": -500000000
        }
      },
      "type": "DISCOUNT"
    },
    {
      "name": "Delivery fee",
      "price": {
        "type": "ESTIMATE",
        "amount": {
          "currencyCode": "USD",
          "units": "3",
          "nanos": 500000000
        }
      },
      "type": "DELIVERY"
    },
    {
      "name": "Tax",
      "price": {
        "type": "ESTIMATE",
        "amount": {
          "currencyCode": "USD",
          "units": "1",
          "nanos": 500000000
        }
      },
      "type": "TAX"
    }
  ],
  "cart": {
    "merchant": {
      "id": "https://www.exampleprovider.com/merchant/id1",
      "name": "Falafel Bite"
    },
    "lineItems": [
      {
        "name": "Pita Chips",
        "type": "REGULAR",
        "id": "sample_item_offer_id_1",
        "offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
        "quantity": 1,
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "2",
            "nanos": 750000000
          }
        },
        "subLines": [
          {
            "note": "Notes for this item."
          }
        ],
        "extension": {
          "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension",
          "options": [
            {
              "id": "sample_addon_offer_id_1",
              "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
              "name": "Honey Mustard",
              "price": {
                "currencyCode": "USD"
              },
              "quantity": 1
            },
            {
              "id": "sample_addon_offer_id_2",
              "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2",
              "name": "BBQ Sauce",
              "price": {
                "currencyCode": "USD",
                "nanos": 500000000
              },
              "quantity": 1
            }
          ]
        }
      },
      {
        "name": "Chicken Shwarma Wrap",
        "type": "REGULAR",
        "id": "sample_item_offer_id_2",
        "offerId": "https://www.exampleprovider.com/menu/item/offer/id2",
        "quantity": 1,
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "8"
          }
        },
        "extension": {
          "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
        }
      },
      {
        "name": "Greek Salad",
        "type": "REGULAR",
        "id": "sample_item_offer_id_3",
        "offerId": "https://www.exampleprovider.com/menu/item/offer/id3",
        "quantity": 1,
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "9",
            "nanos": 990000000
          }
        },
        "extension": {
          "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
        }
      },
      {
        "name": "Prawns Biryani",
        "type": "REGULAR",
        "id": "sample_item_offer_id_4",
        "offerId": "https://www.exampleprovider.com/menu/item/offer/id4",
        "quantity": 1,
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "15",
            "nanos": 990000000
          }
        },
        "extension": {
          "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
        }
      }
    ],
    "extension": {
      "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
      "fulfillmentPreference": {
        "fulfillmentInfo": {
          "delivery": {
            "deliveryTimeIso8601": "P90M"
          }
        }
      },
      "location": {
        "coordinates": {
          "latitude": 37.788783,
          "longitude": -122.41384
        },
        "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States",
        "zipCode": "94043",
        "city": "Mountain View",
        "postalAddress": {
          "regionCode": "US",
          "postalCode": "94043",
          "administrativeArea": "CA",
          "locality": "Mountain View",
          "addressLines": [
            "1350 Charleston Road"
          ]
        },
        "notes": "Gate code is #111"
      }
    }
  },
  "totalPrice": {
    "type": "ESTIMATE",
    "amount": {
      "currencyCode": "USD",
      "units": "36",
      "nanos": 730000000
    }
  },
  "extension": {
    "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
    "availableFulfillmentOptions": [
      {
        "fulfillmentInfo": {
          "delivery": {
            "deliveryTimeIso8601": "P0M"
          }
        },
        "expiresAt": "2017-07-17T12:30:00Z"
      }
    ]
  }
}

子备注

下表列出了 SublineNote 类型的属性:

属性 类型 说明
note String

必需。

时间戳

日期和时间,格式如下: "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"

TransactionDecisionValue

包含 Order

下表列出了 TransactionDecisionValue 类型的属性:

属性 类型 说明
order Order

必需。

付款时下达订单。

以下示例展示了 TransactionDecisionValue 元素:

示例

{
  "order": {
    "finalOrder": {
      "cart": {
        "notes": "Guest prefers their food to be hot when it is delivered.",
        "merchant": {
          "id": "https://www.exampleprovider.com/merchant/id1",
          "name": "Cucina Venti"
        },
        "lineItems": [
          {
            "name": "Sizzling Prawns Dinner",
            "type": "REGULAR",
            "id": "sample_item_offer_id_1",
            "offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
            "quantity": 1,
            "price": {
              "type": "ESTIMATE",
              "amount": {
                "currencyCode": "USD",
                "units": "16",
                "nanos": 750000000
              }
            },
            "subLines": [
              {
                "note": "Notes for this item."
              }
            ],
            "extension": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension",
              "options": [
                {
                  "id": "sample_addon_offer_id_1",
                  "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
                  "name": "Honey Mustard",
                  "price": {
                    "currencyCode": "USD"
                  },
                  "quantity": 1
                },
                {
                  "id": "sample_addon_offer_id_2",
                  "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2",
                  "name": "BBQ Sauce",
                  "price": {
                    "currencyCode": "USD",
                    "nanos": 500000000
                  },
                  "quantity": 1
                }
              ]
            }
          }
        ],
        "extension": {
          "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
          "fulfillmentPreference": {
            "fulfillmentInfo": {
              "pickup": {
                "pickupTimeIso8601": "P0M"
              }
            }
          },
          "contact": {
            "displayName": "Lovefood Ordering",
            "email": "ilovefood@example.com",
            "phoneNumber": "+16501234567"
          }
        }
      },
      "otherItems": [
        {
          "name": "Service fee",
          "type": "FEE",
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "3",
              "nanos": 500000000
            }
          }
        },
        {
          "name": "Tax",
          "type": "TAX",
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "1",
              "nanos": 370000000
            }
          }
        },
        {
          "name": "Tip",
          "type": "GRATUITY",
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "2",
              "nanos": 590000000
            }
          }
        }
      ],
      "totalPrice": {
        "type": "ESTIMATE",
        "amount": {
          "currencyCode": "USD",
          "units": "23",
          "nanos": 710000000
        }
      },
      "id": "sample_final_order_id",
      "extension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
        "availableFulfillmentOptions": [
          {
            "fulfillmentInfo": {
              "pickup": {
                "pickupTimeIso8601": "P0M"
              }
            },
            "expiresAt": "2017-07-17T12:30:00Z"
          }
        ],
        "optinForRemarketing": true
      }
    },
    "googleOrderId": "sample_google_order_id",
    "orderDate": "2017-07-17T12:00:00Z",
    "paymentInfo": {
      "displayName": "Visa\u2006****\u20061111",
      "googleProvidedPaymentInstrument": {
        "instrumentToken": "abcd"
      },
      "paymentType": "PAYMENT_CARD"
    }
  }
}

履单请求

应用请求

下表列出了 AppRequest 类型的属性:

属性 类型 说明
isInSandbox Boolean

指示后续事务是否在沙盒环境中完成。

conversation Conversation
inputs 列表Input

必需。

包含用于查看购物车的预期参数。

必须正好有 1 项

以下示例展示了 AppRequest 元素:

示例 1

{
  "isInSandbox": true,
  "inputs": [
    {
      "intent": "actions.foodordering.intent.CHECKOUT",
      "arguments": [
        {
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.orders.Cart",
            "merchant": {
              "id": "https://www.exampleprovider.com/merchant/id1",
              "name": "Cucina Venti"
            },
            "lineItems": [
              {
                "name": "Sizzling Prawns Dinner",
                "type": "REGULAR",
                "id": "sample_item_offer_id_1",
                "offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
                "quantity": 1,
                "price": {
                  "type": "ESTIMATE",
                  "amount": {
                    "currencyCode": "USD",
                    "units": "16",
                    "nanos": 750000000
                  }
                },
                "subLines": [
                  {
                    "note": "Notes for this item."
                  }
                ],
                "extension": {
                  "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension",
                  "options": [
                    {
                      "id": "sample_addon_offer_id_1",
                      "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
                      "name": "Honey Mustard",
                      "price": {
                        "currencyCode": "USD"
                      },
                      "quantity": 1
                    },
                    {
                      "id": "sample_addon_offer_id_2",
                      "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2",
                      "name": "BBQ Sauce",
                      "price": {
                        "currencyCode": "USD",
                        "nanos": 500000000
                      },
                      "quantity": 1
                    }
                  ]
                }
              }
            ],
            "extension": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
              "fulfillmentPreference": {
                "fulfillmentInfo": {
                  "delivery": {
                    "deliveryTimeIso8601": "P0M"
                  }
                }
              },
              "location": {
                "coordinates": {
                  "latitude": 37.788783,
                  "longitude": -122.41384
                },
                "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States",
                "zipCode": "94043",
                "city": "Mountain View",
                "postalAddress": {
                  "regionCode": "US",
                  "postalCode": "94043",
                  "administrativeArea": "CA",
                  "locality": "Mountain View",
                  "addressLines": [
                    "1350 Charleston Road"
                  ]
                },
                "notes": "Gate code is #111"
              }
            }
          }
        }
      ]
    }
  ]
}

示例 2

{
  "isInSandbox": true,
  "inputs": [
    {
      "intent": "actions.intent.TRANSACTION_DECISION",
      "arguments": [
        {
          "transactionDecisionValue": {
            "order": {
              "finalOrder": {
                "cart": {
                  "notes": "Guest prefers their food to be hot when it is delivered.",
                  "merchant": {
                    "id": "https://www.exampleprovider.com/merchant/id1",
                    "name": "Cucina Venti"
                  },
                  "lineItems": [
                    {
                      "name": "Sizzling Prawns Dinner",
                      "type": "REGULAR",
                      "id": "sample_item_offer_id_1",
                      "offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
                      "quantity": 1,
                      "price": {
                        "type": "ESTIMATE",
                        "amount": {
                          "currencyCode": "USD",
                          "units": "16",
                          "nanos": 750000000
                        }
                      },
                      "subLines": [
                        {
                          "note": "Notes for this item."
                        }
                      ],
                      "extension": {
                        "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension",
                        "options": [
                          {
                            "id": "sample_addon_offer_id_1",
                            "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
                            "name": "Honey Mustard",
                            "price": {
                              "currencyCode": "USD"
                            },
                            "quantity": 1
                          },
                          {
                            "id": "sample_addon_offer_id_2",
                            "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2",
                            "name": "BBQ Sauce",
                            "price": {
                              "currencyCode": "USD",
                              "nanos": 500000000
                            },
                            "quantity": 1
                          }
                        ]
                      }
                    }
                  ],
                  "extension": {
                    "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
                    "fulfillmentPreference": {
                      "fulfillmentInfo": {
                        "pickup": {
                          "pickupTimeIso8601": "P0M"
                        }
                      }
                    },
                    "contact": {
                      "displayName": "Lovefood Ordering",
                      "email": "ilovefood@example.com",
                      "phoneNumber": "+16501234567"
                    }
                  }
                },
                "otherItems": [
                  {
                    "name": "Service fee",
                    "type": "FEE",
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "3",
                        "nanos": 500000000
                      }
                    }
                  },
                  {
                    "name": "Tax",
                    "type": "TAX",
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "1",
                        "nanos": 370000000
                      }
                    }
                  },
                  {
                    "name": "Tip",
                    "type": "GRATUITY",
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "2",
                        "nanos": 590000000
                      }
                    }
                  }
                ],
                "totalPrice": {
                  "type": "ESTIMATE",
                  "amount": {
                    "currencyCode": "USD",
                    "units": "23",
                    "nanos": 710000000
                  }
                },
                "id": "sample_final_order_id",
                "extension": {
                  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
                  "availableFulfillmentOptions": [
                    {
                      "fulfillmentInfo": {
                        "pickup": {
                          "pickupTimeIso8601": "P0M"
                        }
                      },
                      "expiresAt": "2017-07-17T12:30:00Z"
                    }
                  ],
                  "optinForRemarketing": true
                }
              },
              "googleOrderId": "sample_google_order_id",
              "orderDate": "2017-07-17T12:00:00Z",
              "paymentInfo": {
                "displayName": "Visa\u2006****\u20061111",
                "googleProvidedPaymentInstrument": {
                  "instrumentToken": "abcd"
                },
                "paymentType": "PAYMENT_CARD"
              }
            }
          }
        }
      ]
    }
  ]
}

CheckoutRequest 消息

CheckoutRequestMessage 是具有 actions.foodordering.intent.CHECKOUT intent 的 AppRequest

提交订单请求消息

SubmitOrderRequestMessage 是具有 actions.foodordering.intent.TRANSACTION_DECISION intent 的 AppRequest

对话

Conversation 仅在一个会话中具有唯一性。如果需要,您可以使用它将多个 CheckoutSubmitOrder Action 相关联。

下表列出了 Conversation 类型的属性:

属性 类型 说明
conversationId String

必需。

对话的唯一 ID。

以下示例展示了 Conversation 元素:

示例

{
  "conversationId": "CQnJ7Z4i7UmvEZ9ph3AxyZRJ"
}

输入

结帐购物车的预期参数。

下表列出了 Input 类型的属性:

属性 类型 说明
intent Enum [ "actions.foodordering.intent.CHECKOUT", "actions.intent.TRANSACTION_DECISION" ]

必需。

对于结帐请求消息,设置为“actions.foodordering.intent.CHECKOUT”,对于提交订单请求消息,设置为“actions.intent.TRANSACTION_DECISION”。

arguments 列表Argument

必需。

包含要结账的购物车或要下的订单

必须正好有 1 项

参数

包含用户想要结帐的食品的详细信息。对于结算,只有扩展程序适用。对于提交订单,只可使用 transactionDecisionValue

下表列出了 Argument 类型的属性:

属性 类型 说明
只能提供以下属性组之一。
extension 分组 1 Cart

详细说明用户想要结帐的食品。

transactionDecisionValue 分组 2 TransactionDecisionValue

包含要下的订单以及付款明细。

履单响应

应用响应

下表列出了 AppResponse 类型的属性:

属性 类型 说明
expectUserResponse 对比度

设置为 false。

值:False

finalResponse FinalResponse

必需。

包含您对购物车结账的响应。

以下示例展示了 AppResponse 元素:

示例 1

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "checkoutResponse": {
              "proposedOrder": {
                "id": "sample_proposed_order_id_1",
                "otherItems": [
                  {
                    "name": "New customer discount",
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "-5",
                        "nanos": -500000000
                      }
                    },
                    "type": "DISCOUNT"
                  },
                  {
                    "name": "Delivery fee",
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "3",
                        "nanos": 500000000
                      }
                    },
                    "type": "DELIVERY"
                  },
                  {
                    "name": "Tax",
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "1",
                        "nanos": 500000000
                      }
                    },
                    "type": "TAX"
                  }
                ],
                "cart": {
                  "merchant": {
                    "id": "https://www.exampleprovider.com/merchant/id1",
                    "name": "Falafel Bite"
                  },
                  "lineItems": [
                    {
                      "name": "Pita Chips",
                      "type": "REGULAR",
                      "id": "sample_item_offer_id_1",
                      "offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
                      "quantity": 1,
                      "price": {
                        "type": "ESTIMATE",
                        "amount": {
                          "currencyCode": "USD",
                          "units": "2",
                          "nanos": 750000000
                        }
                      },
                      "subLines": [
                        {
                          "note": "Notes for this item."
                        }
                      ],
                      "extension": {
                        "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension",
                        "options": [
                          {
                            "id": "sample_addon_offer_id_1",
                            "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
                            "name": "Honey Mustard",
                            "price": {
                              "currencyCode": "USD"
                            },
                            "quantity": 1
                          },
                          {
                            "id": "sample_addon_offer_id_2",
                            "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2",
                            "name": "BBQ Sauce",
                            "price": {
                              "currencyCode": "USD",
                              "nanos": 500000000
                            },
                            "quantity": 1
                          }
                        ]
                      }
                    },
                    {
                      "name": "Chicken Shwarma Wrap",
                      "type": "REGULAR",
                      "id": "sample_item_offer_id_2",
                      "offerId": "https://www.exampleprovider.com/menu/item/offer/id2",
                      "quantity": 1,
                      "price": {
                        "type": "ESTIMATE",
                        "amount": {
                          "currencyCode": "USD",
                          "units": "8"
                        }
                      },
                      "extension": {
                        "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
                      }
                    },
                    {
                      "name": "Greek Salad",
                      "type": "REGULAR",
                      "id": "sample_item_offer_id_3",
                      "offerId": "https://www.exampleprovider.com/menu/item/offer/id3",
                      "quantity": 1,
                      "price": {
                        "type": "ESTIMATE",
                        "amount": {
                          "currencyCode": "USD",
                          "units": "9",
                          "nanos": 990000000
                        }
                      },
                      "extension": {
                        "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
                      }
                    },
                    {
                      "name": "Prawns Biryani",
                      "type": "REGULAR",
                      "id": "sample_item_offer_id_4",
                      "offerId": "https://www.exampleprovider.com/menu/item/offer/id4",
                      "quantity": 1,
                      "price": {
                        "type": "ESTIMATE",
                        "amount": {
                          "currencyCode": "USD",
                          "units": "15",
                          "nanos": 990000000
                        }
                      },
                      "extension": {
                        "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
                      }
                    }
                  ],
                  "extension": {
                    "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
                    "fulfillmentPreference": {
                      "fulfillmentInfo": {
                        "delivery": {
                          "deliveryTimeIso8601": "P90M"
                        }
                      }
                    },
                    "location": {
                      "coordinates": {
                        "latitude": 37.788783,
                        "longitude": -122.41384
                      },
                      "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States",
                      "zipCode": "94043",
                      "city": "Mountain View",
                      "postalAddress": {
                        "regionCode": "US",
                        "postalCode": "94043",
                        "administrativeArea": "CA",
                        "locality": "Mountain View",
                        "addressLines": [
                          "1350 Charleston Road"
                        ]
                      },
                      "notes": "Gate code is #111"
                    }
                  }
                },
                "totalPrice": {
                  "type": "ESTIMATE",
                  "amount": {
                    "currencyCode": "USD",
                    "units": "36",
                    "nanos": 730000000
                  }
                },
                "extension": {
                  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
                  "availableFulfillmentOptions": [
                    {
                      "fulfillmentInfo": {
                        "delivery": {
                          "deliveryTimeIso8601": "P0M"
                        }
                      },
                      "expiresAt": "2017-07-17T12:30:00Z"
                    }
                  ]
                }
              },
              "paymentOptions": {
                "googleProvidedOptions": {
                  "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": {  \"merchantId\": \"Merchant ID\",  \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [  {    \"type\": \"CARD\",    \"parameters\": {      \"allowedAuthMethods\": [        \"PAN_ONLY\"      ],      \"allowedCardNetworks\": [        \"VISA\",        \"AMEX\",        \"MASTERCARD\"      ],      \"billingAddressRequired\": false    },    \"tokenizationSpecification\": {      \"type\": \"PAYMENT_GATEWAY\",      \"parameters\": {        \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\",        \"gateway\": \"stripe\",        \"stripe:version\": \"2019-05-16\"      }    }  }],\"transactionInfo\": {  \"currencyCode\": \"AUD\",  \"totalPriceStatus\": \"ESTIMATED\",  \"totalPrice\": \"1.0\"}}"
                }
              },
              "additionalPaymentOptions": [
                {
                  "actionProvidedOptions": {
                    "paymentType": "ON_FULFILLMENT",
                    "displayName": "Cash on delivery."
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

示例 2

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "orderUpdate": {
              "actionOrderId": "sample_action_order_id",
              "orderState": {
                "state": "CONFIRMED",
                "label": "Provider confirmed"
              },
              "receipt": {
                "userVisibleOrderId": "userVisibleId1234"
              },
              "updateTime": "2017-07-17T12:00:00Z",
              "orderManagementActions": [
                {
                  "type": "CUSTOMER_SERVICE",
                  "button": {
                    "title": "Contact customer service",
                    "openUrlAction": {
                      "url": "mailto:support@example.com"
                    }
                  }
                },
                {
                  "type": "CUSTOMER_SERVICE",
                  "button": {
                    "title": "Call customer service",
                    "openUrlAction": {
                      "url": "tel:+18005554679"
                    }
                  }
                },
                {
                  "type": "EMAIL",
                  "button": {
                    "title": "Email restaurant",
                    "openUrlAction": {
                      "url": "mailto:person@example.com"
                    }
                  }
                },
                {
                  "type": "CALL_RESTAURANT",
                  "button": {
                    "title": "Call restaurant",
                    "openUrlAction": {
                      "url": "tel:+16505554679"
                    }
                  }
                }
              ],
              "infoExtension": {
                "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
                "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z"
              }
            }
          }
        }
      ]
    }
  }
}

示例 3

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "error": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
              "foodOrderErrors": [
                {
                  "error": "CLOSED",
                  "description": "The restaurant is closed."
                }
              ]
            }
          }
        }
      ]
    }
  }
}

示例 4

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "checkoutResponse": {
              "proposedOrder": {
                "otherItems": [
                  {
                    "name": "Delivery Fees",
                    "subLines": [],
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "3",
                        "nanos": 500000000
                      }
                    },
                    "type": "DELIVERY"
                  },
                  {
                    "name": "Tax",
                    "subLines": [],
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "1",
                        "nanos": 370000000
                      }
                    },
                    "type": "TAX"
                  },
                  {
                    "name": "Promotion",
                    "subLines": [],
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "-5",
                        "nanos": 0
                      }
                    },
                    "id": "OWG_ACTIVE_CODE",
                    "type": "DISCOUNT"
                  }
                ],
                "cart": {
                  "merchant": {
                    "id": "https://www.exampleprovider.com/merchant/id1",
                    "name": "Falafel Bite"
                  },
                  "lineItems": [
                    {
                      "name": "Pita Chips",
                      "type": "REGULAR",
                      "id": "sample_item_offer_id_1",
                      "quantity": 1,
                      "price": {
                        "type": "ESTIMATE",
                        "amount": {
                          "currencyCode": "USD",
                          "units": "2",
                          "nanos": 750000000
                        }
                      },
                      "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
                      "extension": {
                        "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
                      }
                    }
                  ],
                  "promotions": [
                    {
                      "coupon": "OWG_ACTIVE_CODE"
                    }
                  ],
                  "extension": {
                    "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
                    "fulfillmentPreference": {
                      "fulfillmentInfo": {
                        "pickup": {
                          "pickupTimeIso8601": "P0M"
                        }
                      }
                    }
                  }
                },
                "totalPrice": {
                  "type": "ESTIMATE",
                  "amount": {
                    "currencyCode": "USD",
                    "units": "14",
                    "nanos": 860000000
                  }
                },
                "extension": {
                  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
                  "availableFulfillmentOptions": [
                    {
                      "fulfillmentInfo": {
                        "pickup": {
                          "pickupTimeIso8601": "P0M"
                        }
                      },
                      "expiresAt": "2018-04-10T01:20:08.471Z"
                    }
                  ]
                }
              },
              "paymentOptions": {
                "googleProvidedOptions": {
                  "tokenizationParameters": {
                    "tokenizationType": "PAYMENT_GATEWAY",
                    "parameters": {
                      "gateway": "stripe",
                      "stripe:publishableKey": "pk_live_stripe_client_key",
                      "stripe:version": "2017-04-06"
                    }
                  },
                  "supportedCardNetworks": [
                    "AMEX",
                    "DISCOVER",
                    "MASTERCARD",
                    "VISA",
                    "JCB"
                  ],
                  "prepaidCardDisallowed": true,
                  "billingAddressRequired": true
                }
              }
            }
          }
        }
      ]
    }
  }
}

CheckoutResponseMessage

CheckoutResponseMessageStructuredResponse 中的 checkoutResponseerrorAppResponse

提交订单响应消息

SubmitOrderResponseMessage 是包含 StructuredResponse 中的 orderUpdateAppResponse

最终回复

您对购物车结账或 SubmitOrderRequestMessage 的响应。

下表列出了 FinalResponse 类型的属性:

属性 类型 说明
richResponse RichResponse

必需。

包含您对 CheckoutRequestMessage 或 SubmitOrderRequestMessage 的响应。

结账响应

下表列出了 CheckoutResponse 类型的属性:

属性 类型 说明
proposedOrder ProposedOrder

必需。

交易使用的建议订单。

paymentOptions PaymentOptions

必需。

为用户选择的默认付款方式。

additionalPaymentOptions 列表PaymentOptions

可供用户使用的其他付款方式。

以下示例展示了 CheckoutResponse 元素:

示例

{
  "proposedOrder": {
    "id": "sample_proposed_order_id_1",
    "otherItems": [
      {
        "name": "New customer discount",
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "-5",
            "nanos": -500000000
          }
        },
        "type": "DISCOUNT"
      },
      {
        "name": "Delivery fee",
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "3",
            "nanos": 500000000
          }
        },
        "type": "DELIVERY"
      },
      {
        "name": "Tax",
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "1",
            "nanos": 500000000
          }
        },
        "type": "TAX"
      }
    ],
    "cart": {
      "merchant": {
        "id": "https://www.exampleprovider.com/merchant/id1",
        "name": "Falafel Bite"
      },
      "lineItems": [
        {
          "name": "Pita Chips",
          "type": "REGULAR",
          "id": "sample_item_offer_id_1",
          "offerId": "https://www.exampleprovider.com/menu/item/offer/id1",
          "quantity": 1,
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "2",
              "nanos": 750000000
            }
          },
          "subLines": [
            {
              "note": "Notes for this item."
            }
          ],
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension",
            "options": [
              {
                "id": "sample_addon_offer_id_1",
                "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
                "name": "Honey Mustard",
                "price": {
                  "currencyCode": "USD"
                },
                "quantity": 1
              },
              {
                "id": "sample_addon_offer_id_2",
                "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2",
                "name": "BBQ Sauce",
                "price": {
                  "currencyCode": "USD",
                  "nanos": 500000000
                },
                "quantity": 1
              }
            ]
          }
        },
        {
          "name": "Chicken Shwarma Wrap",
          "type": "REGULAR",
          "id": "sample_item_offer_id_2",
          "offerId": "https://www.exampleprovider.com/menu/item/offer/id2",
          "quantity": 1,
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "8"
            }
          },
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
          }
        },
        {
          "name": "Greek Salad",
          "type": "REGULAR",
          "id": "sample_item_offer_id_3",
          "offerId": "https://www.exampleprovider.com/menu/item/offer/id3",
          "quantity": 1,
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "9",
              "nanos": 990000000
            }
          },
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
          }
        },
        {
          "name": "Prawns Biryani",
          "type": "REGULAR",
          "id": "sample_item_offer_id_4",
          "offerId": "https://www.exampleprovider.com/menu/item/offer/id4",
          "quantity": 1,
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "15",
              "nanos": 990000000
            }
          },
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
          }
        }
      ],
      "extension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
        "fulfillmentPreference": {
          "fulfillmentInfo": {
            "delivery": {
              "deliveryTimeIso8601": "P90M"
            }
          }
        },
        "location": {
          "coordinates": {
            "latitude": 37.788783,
            "longitude": -122.41384
          },
          "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States",
          "zipCode": "94043",
          "city": "Mountain View",
          "postalAddress": {
            "regionCode": "US",
            "postalCode": "94043",
            "administrativeArea": "CA",
            "locality": "Mountain View",
            "addressLines": [
              "1350 Charleston Road"
            ]
          },
          "notes": "Gate code is #111"
        }
      }
    },
    "totalPrice": {
      "type": "ESTIMATE",
      "amount": {
        "currencyCode": "USD",
        "units": "36",
        "nanos": 730000000
      }
    },
    "extension": {
      "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
      "availableFulfillmentOptions": [
        {
          "fulfillmentInfo": {
            "delivery": {
              "deliveryTimeIso8601": "P0M"
            }
          },
          "expiresAt": "2017-07-17T12:30:00Z"
        }
      ]
    }
  },
  "paymentOptions": {
    "googleProvidedOptions": {
      "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": {  \"merchantId\": \"Merchant ID\",  \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [  {    \"type\": \"CARD\",    \"parameters\": {      \"allowedAuthMethods\": [        \"PAN_ONLY\"      ],      \"allowedCardNetworks\": [        \"VISA\",        \"AMEX\",        \"MASTERCARD\"      ],      \"billingAddressRequired\": false    },    \"tokenizationSpecification\": {      \"type\": \"PAYMENT_GATEWAY\",      \"parameters\": {        \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\",        \"gateway\": \"stripe\",        \"stripe:version\": \"2019-05-16\"      }    }  }],\"transactionInfo\": {  \"currencyCode\": \"AUD\",  \"totalPriceStatus\": \"ESTIMATED\",  \"totalPrice\": \"1.0\"}}"
    }
  },
  "additionalPaymentOptions": [
    {
      "actionProvidedOptions": {
        "paymentType": "ON_FULFILLMENT",
        "displayName": "Cash on delivery."
      }
    }
  ]
}

项目

包含您对购物车结算或 SubmitOrderRequestMessage 的响应。

下表列出了 Item 类型的属性:

属性 类型 说明
structuredResponse StructuredResponse

必需。

富媒体响应

包含您对购物车结账的响应。

下表列出了 RichResponse 类型的属性:

属性 类型 说明
items 列表Item

必需。

必须正好有 1 项

结构化响应

对于 CheckoutResponseMessage,此字段可以是以下某一个: CheckoutResponse 表示成功结账。或者 FoodErrorExtension:指示结账期间失败。响应可能包含已更正的 ProposedOrder 和 PaymentOptions 或不含 PaymentOptions 的错误消息。对于 SubmitOrderResponseMessage,仅 orderUpdate 适用。

下表列出了 StructuredResponse 类型的属性:

属性 类型 说明
只能提供以下属性组之一。
checkoutResponse 分组 1 CheckoutResponse

结帐商品以及税费和折扣。

error 分组 2 FoodErrorExtension

购物车商品中观察到的错误。根据错误的性质,此属性可能包含更正后的 ProposedOrder 和 PaymentOptions,也可能仅包含不包含 PaymentOptions 的错误消息。

orderUpdate 分组 3 OrderUpdate

异步订单更新

本部分介绍了典型食品订购内置操作互动的请求和响应的高级别类型。

AsyncOrderUpdateRequestMessage

在提交订单并确认后,通知用户相关更改。例如,您可以通知用户订单正在运送中或价格发生了变化。 如需了解详情,请参阅

下表列出了 AsyncOrderUpdateRequestMessage 类型的属性:

属性 类型 说明
isInSandbox Boolean

表示发送此更新的订单是沙盒付款。

customPushMessage CustomPushMessage

必需。

包含请求的 OrderUpdate。

以下示例展示了 AsyncOrderUpdateRequestMessage 元素:

示例

{
  "isInSandbox": true,
  "customPushMessage": {
    "orderUpdate": {
      "actionOrderId": "sample_action_order_id",
      "orderState": {
        "state": "IN_TRANSIT",
        "label": "Order is on the way"
      },
      "inTransitInfo": {
        "updatedTime": "2017-07-17T12:00:00Z"
      },
      "updateTime": "2017-07-17T12:00:00Z",
      "receipt": {
        "userVisibleOrderId": "userVisibleId1234"
      },
      "orderManagementActions": [
        {
          "type": "CUSTOMER_SERVICE",
          "button": {
            "title": "Contact customer service",
            "openUrlAction": {
              "url": "mailto:support@example.com"
            }
          }
        },
        {
          "type": "EMAIL",
          "button": {
            "title": "Email restaurant",
            "openUrlAction": {
              "url": "mailto:person@example.com"
            }
          }
        },
        {
          "type": "CALL_RESTAURANT",
          "button": {
            "title": "Call restaurant",
            "openUrlAction": {
              "url": "tel:+16505554679"
            }
          }
        }
      ],
      "infoExtension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
        "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z"
      }
    }
  }
}

AsyncOrderUpdateResponseMessage

成功发送 AsyncOrderUpdateRequestMessage 后,Google 会返回 HTTP 200 状态和空正文。如果更新失败,Google 会返回订单更新失败原因的详细信息。

订单更新类型

按钮

定义可用于提供用户互动的界面元素。

下表列出了 Button 类型的属性:

属性 类型 说明
title String

必需。

显示标签。使用句号不超过 30 个字符以确保正确呈现。

示例:Contact us

openUrlAction OpenUrlAction

必需。

以下示例展示了 Button 元素:

示例

{
  "title": "Send us feedback",
  "openUrlAction": {
    "url": "mailto:person@example.com"
  }
}

取消信息

下表列出了 CancellationInfo 类型的属性:

属性 类型 说明
reason String

必需。

OrderState.state 为“CANCELLED”的遭拒文本显示原因。

示例:Restaurant closed

以下示例展示了 CancellationInfo 元素:

示例

{
  "reason": "Insufficient inventory"
}

食品订单更新附加信息

此类型可为用户提供预计交货时间或取货时间。每当有信息可用或自上次发送后发生更改,请在 OrderUpdate 中发送此扩展程序。

为保守期提供保守估算值,以便始终如一地满足用户的预期。例如,如果预计订单将于今天 13:00 送达,您应发送由于路况条件(例如今天 12:45 至 13:15)的变化而产生的预计间隔。

ISO 8601 时长或时间戳被解释为表示从 OrderUpdateupdateTime(实质上是“现在”)到 updateTimeduration 之间的时间间隔。除非“现在”实际上是一个合理的预期,否则请勿使用此格式。

ISO 8601 间隔可表示从间隔开始到结束之间的间隔。

下表列出了 FoodOrderUpdateExtension 类型的属性:

属性 类型 说明
@type 对比度

此附加信息的类型。此字段始终设置为 "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension"。

值:type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension

estimatedFulfillmentTimeIso8601 String

预计送达时间或取货时间。该字符串必须采用 ISO 8601 格式,并且必须与时间间隔(而非单个固定时间)相对应。可接受的规范包括:间隔时间、持续时间和日期/时间。当信息可用或发生变更(例如提前或延迟到达)时,可以在 SubmitOrderResponseMessage 或 AsyncOrderUpdateRequestMessage 中发送此字段。

示例:2017-07-17T13:00:00Z/2017-07-17T13:30:00Z

foodOrderErrors 列表FoodOrderError

说明预订后发生的错误。建议为购物车或商品各提交一个错误。对于 RejectedionInfo 未涵盖的任何错误,请使用 FoodOrderUpdateExtension.FoodOrderErrors。

不得少于 1 项内容

以下示例展示了 FoodOrderUpdateExtension 元素:

示例 1

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
  "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z"
}

示例 2

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
  "foodOrderErrors": [
    {
      "error": "NO_CAPACITY",
      "description": "Sorry, the restaurant cannot take your order right now."
    }
  ]
}

FulfillmentInfo

下表列出了 FulfillmentInfo 类型的属性:

属性 类型 说明
只能提供以下属性组之一。
deliveryTime 分组 1 ISO 时间戳

在 FoodOrderingUpdateExtension 消息中使用 estimateFulfillmentTimeIso8601

pickupTime 分组 2 ISO 时间戳

在 FoodOrderingUpdateExtension 消息中使用 estimateFulfillmentTimeIso8601

以下示例展示了 FulfillmentInfo 元素:

示例 1

{
  "deliveryTime": "2017-05-10T02:36:38.803Z"
}

示例 2

{
  "pickupTime": "2019-12-26T07:24:27.803Z"
}

公交信息

下表列出了 InTransitInfo 类型的属性:

属性 类型 说明
updatedTime ISO 时间戳

在 FoodOrderingUpdateExtension 消息中使用 estimateFulfillmentTimeIso8601

以下示例展示了 InTransitInfo 元素:

示例

{
  "updatedTime": "2017-05-10T02:36:38.803Z"
}

更新

下表列出了 LineItemUpdate 类型的属性:

属性 类型 说明
orderState OrderState
price Price
reason String

变更原因。价格变动时必填。

以下示例展示了 LineItemUpdate 元素:

示例

{
  "orderState": {
    "state": "CONFIRMED",
    "label": "Provider confirmed"
  },
  "price": {
    "type": "ESTIMATE",
    "amount": {
      "currencyCode": "USD",
      "units": "5",
      "nanos": 500000000
    }
  },
  "reason": "Menu updated prices."
}

OpenUrlAction

下表列出了 OpenUrlAction 类型的属性:

属性 类型 说明
url String

必需。

点击或轻触该按钮触发的操作。适用的前缀列表取决于 orderManagementActionType。"EMAIL”:前缀必须为“mailto”。"CALL”:前缀必须为“quot;tel”。"CUSTOMER_SERVICE”:前缀必须为“mailto”、“tel”、“http”或“https”。

示例:https://www.google.com

OrderManagementAction

订单管理使用户可以获得订单后支持,并且应在提交订单 AppResponse 中的每个 OrderUpdate 中发送,并且后续每个特定订单的 AsyncOrderUpdateRequestMessage 订单管理操作可能会因状态而异。

例如,在“CREATED”状态下,CUSTOMER_SERVICE 可能会引用您的客户服务电话。然后,在“已确认”状态下,如果 CUSTOMER_SERVICE 成为客户的最佳联系人,就可以改用餐厅的电话号码。同样,订单处于“FULFILLED”状态时,CUSTOMER_SERVICE 可以引用您的支持电子邮件地址。

下表列出了 OrderManagementAction 类型的属性:

属性 类型 说明
type OrderManagementActionType

必需。

button Button

必需。

以下示例展示了 OrderManagementAction 元素:

示例 1

{
  "type": "CUSTOMER_SERVICE",
  "button": {
    "title": "Contact customer service",
    "openUrlAction": {
      "url": "mailto:support@example.com"
    }
  }
}

示例 2

{
  "type": "EMAIL",
  "button": {
    "title": "Email restaurant",
    "openUrlAction": {
      "url": "mailto:person@example.com"
    }
  }
}

OrderManagementActionType

定义与 OrderManagementAction 相关的类型。

OrderManagementActionType 类型具有以下可能值:

  • CUSTOMER_SERVICE:要在订单确认页面上显示的客户服务人员的电子邮件地址和/或联系电话。这是必填字段。openUrlAction.url 前缀必须是“mailto”、“tel”、“http”或“https”。
  • EMAIL:仅限在订单详情页面上执行的电子邮件操作。openUrlAction.url 前缀必须为“mailto”。
  • CALL_DRIVER:仅在订单详情页面上调用操作。openUrlAction.url 前缀必须为“tel”。
  • CALL_RESTAURANT:仅在订单详情页面上调用操作。openUrlAction.url 前缀必须为“tel”。

OrderState

订单的当前状态。OrderState 的每个 state 值也对应于 myaccount.google.com 上的购买状态。

下表列出了 OrderState 类型的属性:

属性 类型 说明
state OrderStateEnum

必需。

label String

必需。

用户可见的状态的显示字符串。采用句首字母大写形式。

示例:Your order has been received

以下示例展示了 OrderState 元素:

示例

{
  "state": "CONFIRMED",
  "label": "Provider confirmed"
}

OrderStateEnum

定义与 OrderState 相关的类型。

OrderStateEnum 类型具有以下可能值:

  • CREATED:由集成商创建,且正在等待提供商确认的订单。对应于“已订购”购买状态。
  • CONFIRMED:订单已由提供商确认并且处于有效状态。对应于“已接受”的购买状态。
  • REJECTED:订单被集成商或提供商拒绝。对应于“已拒绝”购买状态。
  • CANCELLED:用户取消了订单。对应于“已取消”购买状态。
  • IN_PREPARATION:正在准备食物。对应于购买状态“未知状态”。
  • READY_FOR_PICKUP:食物可以取餐了。对应于“可供自提”购买状态。
  • IN_TRANSIT:正在配送订单。对应于“正在进行”的购买状态。
  • FULFILLED:用户收到了订购的商品。对应于“已自提”购买状态。

收据

在提交订单 AppResponse 中发送此类型,其中 OrderState 为“CONFIRMED”、“FULFILLED”或“IN_TRANSIT”。在 userVisibleOrderId 可用时发送回执。您无需在后续更新中继续发送回执。

下表列出了 Receipt 类型的属性:

属性 类型 说明
userVisibleOrderId String

必需。

如果订单是“确认”、“IN_TRANSIT”或“FULFILLED”,则必须提供。此字段是此订单的唯一面向用户的 ID(通常为餐厅的订单 ID),在集成商的收据和 Google 订单卡片中均会显示。用户必须能够使用此 ID 来向提供商和集成商参考他们订购的客户服务。您只需要在任何给定的 OrderUpdate 中提供此 ID 一次。在提供之前,actionOrderId 是 userVisibleOrderId。例如,在餐厅确认订单之前,您可能没有 userVisibleOrderId。确认后,您必须发送包含 OrderUpdate 和收据的 AsyncOrderUpdateRequestMessage。

以下示例展示了 Receipt 元素:

示例

{
  "userVisibleOrderId": "userVisibleId1234"
}

拒绝信息

下表列出了 RejectionInfo 类型的属性:

属性 类型 说明
type RejectionType

必需。

reason String

用于内部日志记录的拒绝原因。此字段对用户不可见。

以下示例展示了 RejectionInfo 元素:

示例

{
  "type": "PAYMENT_DECLINED",
  "reason": "There is an issue with payment processing."
}

拒绝类型

RejectionType 类型具有以下可能值:

  • INELIGIBLE:由于政策或风险方面的原因,用户不符合条件。
  • PAYMENT_DECLINED:付款处理出现问题。
  • UNAVAILABLE_SLOT:无法按 DeliveryInfo 或 PickupInfo 指定的提前订单履行订单。
  • PROMO_NOT_APPLICABLE:促销活动出问题了。
  • UNKNOWN:任何其他原因。

与付款相关的类型

本部分介绍了与订餐相关的付款相关类型。

ActionProvidedPaymentOptions

针对操作提供的付款方式的要求。

下表列出了 ActionProvidedPaymentOptions 类型的属性:

属性 类型 说明
paymentType PaymentType

必需。

displayName String

必需。

收据上显示的付款方式的名称。

示例:Taco Points Total

onFulfillmentPaymentData OnFulfillmentPaymentData

支付类型“ON_FULFILLMENT”的其他数据。例如,您可以使用此字段指定履单时是否支持现金或银行卡。

以下示例展示了 ActionProvidedPaymentOptions 元素:

示例

{
  "paymentType": "ON_FULFILLMENT",
  "displayName": "Pay when you get your food.",
  "onFulfillmentPaymentData": {
    "supportedPaymentOptions": [
      "Cash",
      "Card"
    ]
  }
}

允许的身份验证方法

AllowedAuthMethods 类型具有以下可能值:

  • PAN_ONLY:与用户的 Google 帐号备案的支付卡关联的身份验证方法。返回的付款数据包括个人帐号 (PAN) 以及付款月份和到期年份。

允许的支付卡网络

AllowedCardNetworks 类型具有以下可能值:

  • AMEX
  • DISCOVER
  • INTERAC
  • JCB
  • MASTERCARD
  • VISA

CardParameters

使用此对象可配置您的网站对 Google Pay API 的支持。

下表列出了 CardParameters 类型的属性:

属性 类型 说明
allowedAuthMethods 列表

必需。

支持对卡交易进行身份验证的字段。

不得少于 1 项内容

allowedCardNetworks 列表AllowedCardNetworks

必需。

您所支持的一个或多个同时受 Google Pay API 支持的支付卡网络。

不得少于 1 项内容

billingAddressRequired Boolean

如果您需要帐单邮寄地址,请设为 true。仅在需要处理交易时才请求账单邮寄地址。额外的数据请求可能会增加结账流程的不便,从而导致转化率下降。

cvcRequired Boolean

如果使用 TimesofMoney,则设置为 true;对于所有其他付款处理方,设置为 false。

以下示例展示了 CardParameters 元素:

示例

{
  "allowedAuthMethods": [
    "PAN_ONLY"
  ],
  "allowedCardNetworks": [
    "AMEX",
    "DISCOVER"
  ],
  "billingAddressRequired": false,
  "cvcRequired": false
}

Google 所提供付款方式

下表列出了 GoogleProvidedPaymentInstrument 类型的属性:

属性 类型 说明
instrumentToken String

必需。

根据之前指定的 GoogleProvidedPaymentOptions,包含付款令牌的基本 64 编码字符串,用于通过参与 Google Pay 的处理方向用户收取费用。

billingAddress PostalAddress

付款的账单邮寄地址。

以下示例展示了 GoogleProvidedPaymentInstrument 元素:

示例

{
  "instrumentToken": "abcd",
  "billingAddress": {
    "regionCode": "US",
    "postalCode": "94043",
    "administrativeArea": "CA",
    "locality": "Mountain View",
    "addressLines": [
      "1350 Charleston Road"
    ]
  }
}

GoogleProvidedPaymentOptions

Google 提供的付款方式的要求。

下表列出了 GoogleProvidedPaymentOptions 类型的属性:

属性 类型 说明
facilitationSpecification String

PaymentDataRequest JSON 作为字符串。使用此对象可配置您的网站对 Google Pay API 的支持。

supportedCardNetworks 列表SupportedCardNetworks

请改为使用 facilitationSpecification。代理支持的支付卡网络类型。

此字段已弃用。

prepaidCardDisallowed Boolean

请改为使用 facilitationSpecification。是否允许使用预付卡作为付款方式。

此字段已弃用。

billingAddressRequired Boolean

请改为使用 facilitationSpecification。是否需要帐单邮寄地址。

此字段已弃用。

tokenizationParameters TokenizationParameters

此字段已弃用。

以下示例展示了 GoogleProvidedPaymentOptions 元素:

示例 1

{
  "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": {  \"merchantId\": \"Merchant ID\",  \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [  {    \"type\": \"CARD\",    \"parameters\": {      \"allowedAuthMethods\": [        \"PAN_ONLY\"      ],      \"allowedCardNetworks\": [        \"VISA\",        \"AMEX\",        \"MASTERCARD\"      ],      \"billingAddressRequired\": false    },    \"tokenizationSpecification\": {      \"type\": \"PAYMENT_GATEWAY\",      \"parameters\": {        \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\",        \"gateway\": \"stripe\",        \"stripe:version\": \"2019-05-16\"      }    }  }],\"transactionInfo\": {  \"currencyCode\": \"AUD\",  \"totalPriceStatus\": \"ESTIMATED\",  \"totalPrice\": \"1.0\"}}"
}

示例 2

{
  "tokenizationParameters": {
    "tokenizationType": "PAYMENT_GATEWAY",
    "parameters": {
      "gateway": "braintree",
      "braintree:apiVersion": "v1",
      "braintree:sdkVersion": "1.4.0",
      "braintree:merchantId": "a1b2c3d4e5",
      "braintree:clientKey": "production_braintree_client_key",
      "braintree:authorizationFingerprint": "same_as_client_key"
    }
  },
  "supportedCardNetworks": [
    "AMEX",
    "DISCOVER",
    "MASTERCARD",
    "JCB",
    "VISA"
  ],
  "prepaidCardDisallowed": true
}

示例 3

{
  "tokenizationParameters": {
    "tokenizationType": "PAYMENT_GATEWAY",
    "parameters": {
      "gateway": "stripe",
      "stripe:publishableKey": "pk_live_stripe_client_key",
      "stripe:version": "2017-04-06"
    }
  },
  "supportedCardNetworks": [
    "AMEX",
    "DISCOVER",
    "MASTERCARD",
    "VISA",
    "JCB"
  ],
  "prepaidCardDisallowed": true,
  "billingAddressRequired": true
}

商家信息

使用此对象可配置您的网站对 Google Pay API 的支持。

下表列出了 MerchantInfo 类型的属性:

属性 类型 说明
merchantId String

Google Pay 发放给您的 Google 商家标识符。

merchantName String

必需。

商家名称编码为 UTF-8。商家名称会显示在付款表格中。

OnFulfillmentPaymentData

使用此对象可为 PaymentType“ON_FULFILLMENT”发送其他数据。

下表列出了 OnFulfillmentPaymentData 类型的属性:

属性 类型 说明
supportedPaymentOptions 列表PaymentOptionsEnums

履行订单时可供用户使用的付款方式列表。

以下示例展示了 OnFulfillmentPaymentData 元素:

示例

{
  "supportedPaymentOptions": [
    "Cash",
    "Card"
  ]
}

参数

定义与 TokenizationParameters 相关的类型。

下表列出了 Parameters 类型的属性:

属性 类型 说明
gateway String

必需。

示例:braintree

gatewayMerchantId String
[additionalKey: string] String 其他键值对

以下示例展示了 Parameters 元素:

示例 1

{
  "gatewayMerchantId": "90412491",
  "gateway": "olo"
}

示例 2

{
  "gateway": "braintree",
  "braintree:apiVersion": "v1",
  "braintree:sdkVersion": "1.4.0",
  "braintree:merchantId": "YOUR_MERCHANT_ID",
  "braintree:clientKey": "YOUR_BRAINTREE_SANDVOX_OR_PRODUCTION_KEY"
}

PaymentDataRequest

使用此对象可配置您的网站对 Google Pay API 的支持。

下表列出了 PaymentDataRequest 类型的属性:

属性 类型 说明
apiVersion 对比度

必需。

主要 API 版本。

值:2

apiVersionMinor 对比度

必需。

次要 API 版本。

值:0

merchantInfo MerchantInfo

必需。

(Google Pay 商家 ID)请求付款数据的商家的相关信息。

allowedPaymentMethods 列表PaymentMethod

必需。

指定对 Google Pay API 支持的一种或多种付款方式的支持。

transactionInfo TransactionInfo

必需。

根据用户是否同意交易来提供有关交易授权的详细信息。此字段包含总价和价格状态。

以下示例展示了 PaymentDataRequest 元素:

示例

{
  "apiVersion": 2,
  "apiVersionMinor": 0,
  "merchantInfo": {
    "merchantId": "10391231",
    "merchantName": "Burrito Town"
  },
  "allowedPaymentMethods": [
    {
      "type": "CARD",
      "parameters": {
        "allowedAuthMethods": [
          "PAN_ONLY"
        ],
        "allowedCardNetworks": [
          "VISA",
          "AMEX",
          "MASTERCARD"
        ],
        "billingAddressRequired": true,
        "cvcRequired": false
      },
      "tokenizationSpecification": {
        "type": "PAYMENT_GATEWAY",
        "parameters": {
          "gateway": "stripe",
          "stripe:version": "2019-05-16",
          "stripe:publishableKey": "pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA"
        }
      }
    }
  ],
  "transactionInfo": {
    "currencyCode": "INR",
    "totalPriceStatus": "ESTIMATED",
    "totalPrice": "185.00"
  }
}

付款信息

订单的付款相关信息。

下表列出了 PaymentInfo 类型的属性:

属性 类型 说明
displayName String

必需。

显示在收据上的付款方式的用户可见名称。

paymentType PaymentType

必需。

googleProvidedPaymentInstrument GoogleProvidedPaymentInstrument

操作可以使用的令牌。仅当您在 CheckoutResponseMessage 中将 GoogleProvidedPaymentOptions 指定为付款方式时,才指定此字段。

以下示例展示了 PaymentInfo 元素:

示例 1

{
  "displayName": "Visa\u2006****\u20061111",
  "googleProvidedPaymentInstrument": {
    "instrumentToken": "abcd"
  },
  "paymentType": "PAYMENT_CARD"
}

示例 2

{
  "displayName": "Visa\u2006****\u20061111",
  "googleProvidedPaymentInstrument": {
    "instrumentToken": "abcd",
    "billingAddress": {
      "regionCode": "US",
      "postalCode": "94043",
      "administrativeArea": "CA",
      "locality": "Mountain View",
      "addressLines": [
        "123 Random Street",
        "Unit ABC"
      ],
      "recipients": [
        "sample_receipient"
      ]
    }
  },
  "paymentType": "PAYMENT_CARD"
}

付款方式

使用此对象可配置您的网站对 Google Pay API 的支持。

下表列出了 PaymentMethod 类型的属性:

属性 类型 说明
type 对比度

必需。

所支持付款方式的简短标识符。目前仅支持 CARD。

值:CARD

parameters CardParameters

必需。

配置所提供的付款方式类型所需的参数。

tokenizationSpecification TokenizationSpecification

必需。

配置帐号或解密服务提供商以接收付款信息。CARD 付款方式需要此属性。

以下示例展示了 PaymentMethod 元素:

示例

{
  "type": "CARD",
  "parameters": {
    "allowedAuthMethods": [
      "PAN_ONLY"
    ],
    "allowedCardNetworks": [
      "VISA",
      "AMEX",
      "MASTERCARD"
    ],
    "billingAddressRequired": false
  },
  "tokenizationSpecification": {
    "type": "PAYMENT_GATEWAY",
    "parameters": {
      "gatewayMerchantId": "90412491",
      "gateway": "olo"
    }
  }
}

付款方式

下表列出了 PaymentOptions 类型的属性:

属性 类型 说明
只能提供以下属性组之一。
googleProvidedOptions 分组 1 GoogleProvidedPaymentOptions

与 actionProvidedOptions 互斥。使用此付款方式通过 gPay 进行在线付款。

actionProvidedOptions 分组 2 ActionProvidedPaymentOptions

与 googleProvidedOptions 互斥。将此卡用于“货到付款现金”或“履单付款”。

以下示例展示了 PaymentOptions 元素:

示例 1

{
  "googleProvidedOptions": {
    "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": {  \"merchantId\": \"Merchant ID\",  \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [  {    \"type\": \"CARD\",    \"parameters\": {      \"allowedAuthMethods\": [        \"PAN_ONLY\"      ],      \"allowedCardNetworks\": [        \"VISA\",        \"AMEX\",        \"MASTERCARD\"      ],      \"billingAddressRequired\": false    },    \"tokenizationSpecification\": {      \"type\": \"PAYMENT_GATEWAY\",      \"parameters\": {        \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\",        \"gateway\": \"stripe\",        \"stripe:version\": \"2019-05-16\"      }    }  }],\"transactionInfo\": {  \"currencyCode\": \"AUD\",  \"totalPriceStatus\": \"ESTIMATED\",  \"totalPrice\": \"1.0\"}}"
  }
}

示例 2

{
  "actionProvidedOptions": {
    "paymentType": "ON_FULFILLMENT",
    "displayName": "Pay when you get your food.",
    "onFulfillmentPaymentData": {
      "supportedPaymentOptions": [
        "Cash",
        "Card"
      ]
    }
  }
}

PaymentOptionsEnums

PaymentOptionsEnums 类型具有以下可能值:

  • Cash
  • Card
  • UPI
  • Paytm

PaymentType

PaymentType 类型具有以下可能值:

  • PAYMENT_CARD:适用于 GoogleProvidedPaymentOptions。
  • ON_FULFILLMENT:适用于 ActionProvidedPaymentOptions。

支持的支付卡网络

定义与 GoogleProvidedPaymentOptions 相关的类型。

SupportedCardNetworks 类型具有以下可能值:

  • UNSPECIFIED_CARD_NETWORK
  • AMEX
  • DISCOVER
  • JCB
  • MASTERCARD
  • VISA

Tokenization 参数

定义与 GoogleProvidedPaymentOptions 相关的类型。

下表列出了 TokenizationParameters 类型的属性:

属性 类型 说明
tokenizationType Enum [ "UNSPECIFIED_TOKENIZATION_TYPE", "PAYMENT_GATEWAY" ]

必需。

请改为使用 facilitationSpecification。可接受的令牌类型。

parameters Parameters

请改为使用 facilitationSpecification。

令牌化规范

此对象可让您将帐号配置为接收可扣款的付款信息。

下表列出了 TokenizationSpecification 类型的属性:

属性 类型 说明
type 对比度

必需。

parameters Parameters

必需。

以下示例展示了 TokenizationSpecification 元素:

示例 1

{
  "type": "PAYMENT_GATEWAY",
  "parameters": {
    "gatewayMerchantId": "1247192",
    "gateway": "cybersource"
  }
}

示例 2

{
  "type": "PAYMENT_GATEWAY",
  "parameters": {
    "gateway": "stripe",
    "stripe:version": "2018-10-31",
    "stripe:publishableKey": "12378127"
  }
}

TransactionInfo

此对象描述了一个用于确定付款人付款能力的交易。用于显示付款授权对话框。

下表列出了 TransactionInfo 类型的属性:

属性 类型 说明
currencyCode String

必需。

ISO 4217 字母货币代码。

transactionId String

标识交易尝试的唯一 ID。商家可以使用现有 ID 或生成特定 ID 来尝试 Google Pay 交易。向 Google Transaction Events API 发送回调时,此字段为必填字段。

totalPriceStatus 对比度

必需。

使用“ESTIMATED”作为默认选项。总价可能会根据回复详细信息(例如根据账单邮寄地址收取的销售税)进行调整。

值:ESTIMATED

totalPrice String

必需。

交易的总货币价值,可选择是否精确到小数点后两位。此字段的值应与 car.totalPrice 相同。

以下示例展示了 TransactionInfo 元素:

示例

{
  "totalPriceStatus": "ESTIMATED",
  "totalPrice": "12.34",
  "currencyCode": "USD"
}