执行方式操作架构

本页介绍了使用 Ordering End-to-End 内置 Action API 时执行方式 Web 服务(Ordering End-to-End API)的载荷。 如需获取此信息的机器可读版本,您可以下载 JSON 架构

基本类型

购物车

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

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

属性 类型 说明
@type Const

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

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

id String

购物车的可选 ID。

merchant Merchant

与此购物车关联的商家。

lineItems List<LineItem>

必填。

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

必须至少包含 1 项

promotions List<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 布尔值

指示接收订单的用户是否已使用其 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

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

属性 类型 说明
deliveryTimeIso8601 String

预计送达时间,采用 ISO 8601 时间戳格式:“{year}-{month}-{day}T{hour}:{min}:{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#Combined_date_and_time_representations。您可以使用此参数在结账回复期间更新预计送货时间。

示例: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 或促销活动包含无效数据。
  • NOT_FOUND:找不到 LineItem、FulfillmentOption 或 Promotion。
  • PRICE_CHANGED:商品的价格发生了变化。

FeeAmountRange

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

属性 类型 说明
minFeeAmount Money

收取的费用金额的下限。

maxFeeAmount Money

收取的费用金额的上限。

FeePercentRange

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

属性 类型 说明
minFeePercent 编号

收取的费用百分比下限。

maxFeePercent 编号

收取的费用百分比的上限。

FoodCartExtension

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

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

属性 类型 说明
@type Const

此扩展程序的类型。此字段始终设置为“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

用于标识处理请求时发生的一个或多个错误。 下表介绍了 FoodErrorExtension 类型的字段。错误可以通过 CheckoutResponse 发送。

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

属性 类型 说明
@type Const

必填。

此扩展程序的类型。

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

foodOrderErrors List<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 List<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

定义食品的附加项。

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

属性 类型 说明
@type Const

必填。

此扩展程序的类型。此字段始终设置为“type.googleapis.com/google.actions.v2.orders.FoodItemExtension”。

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

options List<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

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

属性 类型 说明
id String

由 Google 分配的唯一 ID。发送 FoodOrderError 或 AsyncOrderUpdateRequest 时,如果购物车中包含多个 offerId 相同的商品,请使用此字段进行区分。

示例:39231093

offerId String

商品的优惠 ID。

示例:912835081

name String

选项名称。

示例:Honey Mustard

price Money
note String

与选项相关的备注。

quantity 编号

对于是项的选项,则为项的数量。

示例:3

subOptions List<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
    }
  ]
}

FoodOrderError

包含 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

包含订单的履单信息。

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

属性 类型 说明
@type Const

此扩展程序的类型。此字段始终设置为“type.googleapis.com/google.actions.v2.orders.FoodOrderExtension”。

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

availableFulfillmentOptions List<FulfillmentOption>

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

optinForRemarketing 布尔值

用户请求选择接收您通过营销渠道发送的邮件。默认情况下,您必须征得用户同意才能发送营销内容。如果 optinForRemarketing 为 true,您可以为用户订阅。如果 optinForRemarketing 为 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

您可以通过以下方式使用 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
  }
}

FulfillmentOptionInfo

定义与 FulfillmentInfo 相关的信息。

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

属性 类型 说明
必须提供以下某个属性组。
delivery 第 1 组 DeliveryInfo

如果存在,则表示送货订单。

pickup 第 2 组 PickupInfo

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

Image

下表列出了 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 中的 LineItem(ProposedOrder.otherItems[0].id),该 LineItem 用于添加运费和税费等项,其 id 值由提供方定义。例如,购物车中包含两件相同的商品,但准备说明不同(例如,两份中等披萨,配料各不相同)。在本例中,这两件商品具有相同的基本 offerId。发送订单更新请求以指明商品被拒绝时,请使用此 ID 作为歧义消除符。换句话说,如果其中一个披萨因缺少特定配料而被拒绝,该 ID 可帮助 Google 确定您所指的是订单中的哪个商品。此字段是必填字段,但在 otherItems 中除外。

name String

必填。

订单项的名称。这是面向用户显示的字符串,应尽可能采用句子大写形式(例如“运费”“服务费”“税费”)。对于用户,此字段的长度上限为 100 个字符。

type LineItemType

必填。

quantity 整数

type = "REGULAR" 时为必填项。

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

description String

商品的说明。

price Price

必填。

商品的价格。此值反映此订单项的所有商品或服务的总价格(即,将所有附加项的费用相加,然后乘以数量)。例如:如果一件价格为 10 美元的商品的数量为 3,则价格为 30 美元。如果一个披萨的基本价格为 5 美元,附加费用为 1 美元,那么其价格为 6 美元。如果两个披萨(数量 = 2)的基准价格为 5 美元,每个披萨都有 1 美元的附加费用,那么价格将为 12 美元。每个 LineItem 都应具有价格,即使价格为“0”也是如此。如果类型为 DISCOUNT,请将值指定为负数(例如“-2”)。

subLines List<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

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) 单位数。此值必须介于 -999,999,999(含)和 +999,999,999(含)之间。请遵循以下规则:如果单位数是正数,纳秒数必须是正数或零。如果单位数为零,纳秒数可以是正数、零或负数。如果单位数是负数,纳诺必须是负数或零。例如,$-1.75 表示为 units = -1 和 nanos = -750,000,000。

示例: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,用于标识要发送更新的订单。如果 OrderUpdate 中未针对“已创建”订单至少提供一次 receipt.user_visible_order_id,则此 ID 将是 Google 订单卡片中显示的输入的公开订单 ID。

orderState OrderState

必填。

订单的新状态。

lineItemUpdates Map<String, LineItemUpdate>
updateTime ISO 时间戳

必填。

订单的更新时间。

orderManagementActions List<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

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

属性 类型 说明
pickupTimeIso8601 String

预计接人时间,采用 ISO 8601 时间戳格式:“{year}-{month}-{day}T{hour}:{min}:{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#Combined_date_and_time_representations。在结账回复期间,使用此属性更新预计取件时间。

示例:PT90M

以下示例展示了 PickupInfo 元素:

示例

{
  "pickupTimeIso8601": "PT90M"
}

PostalAddress

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

属性 类型 说明
regionCode String

必填。

包含两个字母的国家/地区代码。

示例:US

postalCode String

邮政编码。

示例:94043

administrativeArea String

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

示例:CA

locality String

此地理位置所属的城市或城镇。对于没有明确定义市行政区或者其无法很好地对应这个结构的地区,请勿指定市行政区,而改用 addressLines 字段。

示例:Mountain View

addressLines List<String>

您可以使用的一个或多个行来指定街道地址。此字段不应修改,因为其中可能包含不明确的地区。

示例:[ "1350 Charleston Road" ]

recipients List<String>

订单的收货人列表。此字段仅在 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

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

属性 类型 说明
id String

建议的订单的 ID(可选)。

cart Cart

必填。

用户的项。

otherItems List<LineItem>

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

不得超过 10 项

image Image

与建议的订单关联的图片。

totalPrice Price

必填。

拟议订单的总价。

extension FoodOrderExtension

必填。

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

disclaimers List<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

下表列出了 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

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

属性 类型 说明
isInSandbox 布尔值

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

conversation Conversation
inputs List<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"
              }
            }
          }
        }
      ]
    }
  ]
}

CheckoutRequestMessage

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

SubmitOrderRequestMessage

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

对话

Conversation 仅对一个会话而言是唯一的。您可以使用它将多个 CheckoutSubmitOrder 操作关联在一起(如有需要)。

下表列出了 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 List<Argument>

必填。

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

必须只有 1 项

参数

包含用户想要结账的菜品的详细信息。对于结账,只有延期付款适用。对于提交订单,只有 transactionDecisionValue 适用

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

属性 类型 说明
必须提供以下某个属性组。
extension 第 1 组 Cart

详细说明用户要结账的餐品。

transactionDecisionValue 第 2 组 TransactionDecisionValue

包含要下单的订单以及付款详情。

执行响应

AppResponse

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

属性 类型 说明
expectUserResponse Const

设为 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

CheckoutResponseMessageAppResponse,其中 StructuredResponse 中包含 checkoutResponseerror

SubmitOrderResponseMessage

SubmitOrderResponseMessageAppResponse,其中 StructuredResponse 中包含 orderUpdate

FinalResponse

您对购物车结账或 SubmitOrderRequestMessage 的回复。

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

属性 类型 说明
richResponse RichResponse

必填。

包含您对 CheckoutRequestMessage 或 SubmitOrderRequestMessage 的响应。

CheckoutResponse

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

属性 类型 说明
proposedOrder ProposedOrder

必填。

建议用于交易的订单。

paymentOptions PaymentOptions

必填。

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

additionalPaymentOptions List<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

包含您对购物车结账的回复。

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

属性 类型 说明
items List<Item>

必填。

必须只有 1 项

StructuredResponse

对于 CheckoutResponseMessage,此值可以是以下各项之一:CheckoutResponse:表示结账成功。OR FoodErrorExtension:表示结账失败。响应可以包含经过更正的 ProposedOrder 和 PaymentOptions,也可以包含不含 PaymentOptions 的错误消息。对于 SubmitOrderResponseMessage,只有 orderUpdate 适用。

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

属性 类型 说明
必须提供以下某个属性组。
checkoutResponse 第 1 组 CheckoutResponse

结账商品金额,含税费和折扣。

error 第 2 组 FoodErrorExtension

购物车商品中存在错误。根据错误的性质,此属性可以包含经过更正的 ProposedOrder 和 PaymentOptions,也可以仅包含不含 PaymentOptions 的错误消息。

orderUpdate 第 3 组 OrderUpdate

异步订单更新

本部分介绍了构成典型外卖内置 Action 互动请求和响应的概要类型。

AsyncOrderUpdateRequestMessage

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

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

属性 类型 说明
isInSandbox 布尔值

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

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

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

属性 类型 说明
reason String

必填。

当 OrderState.state 为“CANCELLED”时,显示的拒绝原因文本。

示例:Restaurant closed

以下示例展示了 CancellationInfo 元素:

示例

{
  "reason": "Insufficient inventory"
}

FoodOrderUpdateExtension

此类型可向用户提供订单预计送达或可提货的时间范围。每当有可用信息或自上次发送后信息发生更改时,请在 OrderUpdate 中发送此扩展。

请为执行间隔提供保守估算值,以便始终满足用户的预期。例如,如果订单预计今天 13:00 送达,您应发送与交通状况变化相符的预计送货时间范围,例如今天 12:45 至 13:15。

ISO 8601 时长或时间戳的含义为:从 OrderUpdateupdateTime(本质上为“现在”)到 updateTime 加上 duration 之间的间隔。 除非“现在”确实是合理的预期时间,否则请勿使用此格式。

ISO 8601 间隔的含义是指从间隔的开始到结束之间的间隔。

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

属性 类型 说明
@type Const

此扩展程序的类型。此字段始终设置为“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 List<FoodOrderError>

说明后续发生的错误。建议每个购物车或每件商品一个错误。对于 RejectionInfo 未涵盖的任何错误,请使用 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 消息中使用 estimatedFulfillmentTimeIso8601

pickupTime 第 2 组 ISO 时间戳

在 FoodOrderingUpdateExtension 消息中使用 estimatedFulfillmentTimeIso8601

以下示例展示了 FulfillmentInfo 元素:

示例 1

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

示例 2

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

InTransitInfo

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

属性 类型 说明
updatedTime ISO 时间戳

在 FoodOrderingUpdateExtension 消息中使用 estimatedFulfillmentTimeIso8601

以下示例展示了 InTransitInfo 元素:

示例

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

LineItemUpdate

下表列出了 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”:前缀必须为“tel”。“CUSTOMER_SERVICE”:前缀必须为“mailto”“tel”“http”或“https”。

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

OrderManagementAction

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

例如,在“已创建”状态下,CUSTOMER_SERVICE 可能会引用您的客户服务电话。然后,在“已确认”状态下,如果餐厅的电话号码成为客户的首选联系方式,CUSTOMER_SERVICE 可以更改为该电话号码。同样,当订单处于“已履行”状态后,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

必填。

如果订单状态为“CONFIRMED”“IN_TRANSIT”或“FULFILLED”,则必须提供。此字段是此订单的单个面向用户的 ID(通常是餐厅的订单 ID),会同时显示在集成商的收据和 Google 订单卡中。用户必须能够使用此 ID 来引用其订单,以便向提供商和集成商寻求客户服务。您只需在任何给定的 OrderUpdate 中提供一次此 ID。在提供 actionOrderId 之前,actionOrderId 为 userVisibleOrderId。例如,在餐厅确认订单之前,您可能没有 userVisibleOrderId。确认后,您必须发送包含 OrderUpdate 和 Receipt 的 AsyncOrderUpdateRequestMessage。

以下示例展示了 Receipt 元素:

示例

{
  "userVisibleOrderId": "userVisibleId1234"
}

RejectionInfo

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

属性 类型 说明
type RejectionType

必填。

reason String

用于内部日志记录的拒绝原因。用户看不到此字段。

以下示例展示了 RejectionInfo 元素:

示例

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

RejectionType

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

AllowedAuthMethods 类型有以下可能值:

  • PAN_ONLY:与用户的 Google 账号中保存的支付卡相关联的身份验证方法。返回的付款数据包含个人账号 (PAN) 以及到期月份和到期年份。

AllowedCardNetworks

AllowedCardNetworks 类型有以下可能值:

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

BillingAddressParameters

此对象可让您设置要为所请求的账单邮寄地址返回的其他字段。

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

属性 类型 说明
format String

完成交易所需的账单邮寄地址格式。MIN:姓名、国家/地区代码和邮政编码。完整:姓名、街道地址、市行政区、区域、国家/地区代码和邮政编码。

以下示例展示了 BillingAddressParameters 元素:

示例 1

{
  "format": "MIN"
}

示例 2

{
  "format": "FULL"
}

CardParameters

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

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

属性 类型 说明
allowedAuthMethods List<Const>

必填。

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

必须至少包含 1 项

allowedCardNetworks List<AllowedCardNetworks>

必填。

您和 Google Pay API 都支持的一个或多个支付卡网络。

必须至少包含 1 项

billingAddressRequired 布尔值

如果您要求提供账单邮寄地址,请将此属性设为 true。请仅在必须提供账单邮寄地址才能处理交易的情况下,请求账单邮寄地址。额外的数据请求会使结账流程不能顺畅进行,并可能会导致转化率较低。

billingAddressParameters BillingAddressParameters

如果 billingAddressRequired 设为 true,则返回预期字段。

cvcRequired 布尔值

如果使用 TimesofMoney,请将此值设为 true;对于所有其他付款处理方,请将此值设为 false。

以下示例展示了 CardParameters 元素:

示例 1

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

示例 2

{
  "allowedAuthMethods": [
    "PAN_ONLY"
  ],
  "allowedCardNetworks": [
    "AMEX",
    "DISCOVER"
  ],
  "billingAddressRequired": true,
  "billingAddressParameters": {
    "format": "MIN"
  },
  "cvcRequired": false
}

GoogleProvidedPaymentInstrument

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

属性 类型 说明
instrumentToken String

必填。

采用 Base 64 编码的字符串,其中包含用于通过参与的 Google Pay 处理方向用户收费的付款令牌,具体取决于之前指定的 GoogleProvidedPaymentOptions。

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 List<SupportedCardNetworks>

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

此字段已弃用。

prepaidCardDisallowed 布尔值

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

此字段已弃用。

billingAddressRequired 布尔值

请改用 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
}

MerchantInfo

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

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

属性 类型 说明
merchantId String

Google Pay 向您签发的 Google 商家 ID。

merchantName String

必填。

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

OnFulfillmentPaymentData

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

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

属性 类型 说明
supportedPaymentOptions List<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 Const

必填。

主要 API 版本。

值:2

apiVersionMinor Const

必填。

次要 API 版本。

值:0

merchantInfo MerchantInfo

必填。

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

allowedPaymentMethods List<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,
        "billingAddressParameters": {
          "format": "FULL"
        },
        "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

订单的付款相关信息。

下表列出了 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"
}

PaymentMethod

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

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

属性 类型 说明
type Const

必填。

所支持付款方式的短标识符。目前仅支持 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

下表列出了 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

{
  "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\":true,   \"billingAddressParameters\": {  \"format\":\"MIN\"  }    },    \"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\"}}"
  }
}

示例 3

{
  "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。

SupportedCardNetworks

定义与 GoogleProvidedPaymentOptions 相关的类型。

SupportedCardNetworks 类型有以下可能值:

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

TokenizationParameters

定义与 GoogleProvidedPaymentOptions 相关的类型。

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

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

必填。

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

parameters Parameters

请改用 facilitationSpecification。

TokenizationSpecification

借助此对象,您可以配置要接收可扣款付款信息的账号。

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

属性 类型 说明
type Const

必填。

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 Const

必填。

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

值:ESTIMATED

totalPrice String

必填。

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

以下示例展示了 TransactionInfo 元素:

示例

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