Giản đồ hành động thực hiện đơn hàng

Trang này mô tả tải trọng của dịch vụ web thực hiện đơn hàng (API Đặt hàng toàn diện) khi làm việc với API Hành động tích hợp toàn diện cho việc đặt hàng. Để biết phiên bản thông tin này mà máy có thể đọc được, bạn có thể tải giản đồ JSON xuống.

Loại cơ sở

Giỏ hàng

Chứa thông tin chi tiết về đơn đặt hàng, cũng như liệu yêu cầu là đến lấy hàng hay giao hàng. Giỏ hàng cũng chứa thông tin giao hàng, tiền boa và địa chỉ giao hàng. Đối tượng Cart được xác định trong Checkout AppRequest.f Bạn thêm một bản sao của giỏ hàng vào Checkout AppResponse

Bảng sau đây liệt kê các thuộc tính cho loại Cart:

Thuộc tính Loại Mô tả
@type Const

Loại của đối tượng này. Bỏ qua trường này nếu đối tượng Giỏ hàng mẹ là một phần của ProposedOrder.

Giá trị: type.googleapis.com/google.actions.v2.orders.Cart

id String

Mã nhận dạng không bắt buộc của giỏ hàng.

merchant Merchant

Người bán liên kết với giỏ hàng này.

lineItems List<LineItem>

Bắt buộc.

Danh sách (các) hàng hoá hoặc dịch vụ mà người dùng đang đặt hàng.

Phải có ít nhất 1 mục.

promotions List<Promotion>

Ưu đãi được áp dụng trong giỏ hàng này. Hiện tại, chúng tôi chỉ hỗ trợ một chương trình khuyến mãi.

notes String

Ghi chú về đơn đặt hàng hoặc hướng dẫn giao hàng.

extension FoodCartExtension

Xác định thông tin chi tiết về người dùng, chẳng hạn như lựa chọn ưu tiên về phương thức thực hiện đơn hàng.

Ví dụ sau đây cho thấy một phần tử Cart:

Ví dụ 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"
    }
  }
}

Ví dụ 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"
    }
  }
}

Thông tin liên hệ

Chỉ định thông tin chi tiết về người nhận đơn đặt hàng. Tính năng này chỉ có trong AppResponse.

Bảng sau đây liệt kê các thuộc tính cho loại Contact:

Thuộc tính Loại Mô tả
displayName String

Tên của người nhận đơn đặt hàng, theo cách bạn muốn hiển thị. Sử dụng trường này nếu bạn không chỉ định firstName và lastName.

Ví dụ: Lovefood Ordering

email String

Địa chỉ email của người nhận đơn đặt hàng.

Ví dụ: ilovefood@example.com

firstName String

Họ tên của người nhận đơn đặt hàng.

Ví dụ: Lovefood

lastName String

Họ của người nhận đơn đặt hàng.

Ví dụ: Ordering

phoneNumber String

Số điện thoại của người nhận đơn đặt hàng, bao gồm cả mã quốc gia.

Ví dụ: +16501234567

emailVerified Boolean

Cho biết người nhận đơn đặt hàng có đăng nhập bằng Tài khoản Google của họ hay không.

Ví dụ sau đây cho thấy một phần tử Contact:

Ví dụ:

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

CustomPushMessage

Chứa OrderUpdate cho yêu cầu.

Bảng sau đây liệt kê các thuộc tính cho loại CustomPushMessage:

Thuộc tính Loại Mô tả
orderUpdate OrderUpdate

Bắt buộc.

Đã cập nhật thông tin cho đơn đặt hàng.

Ví dụ sau đây cho thấy một phần tử CustomPushMessage:

Ví dụ:

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

Bảng sau đây liệt kê các thuộc tính cho loại DeliveryInfo:

Thuộc tính Loại Mô tả
deliveryTimeIso8601 String

Thời gian phân phối ước tính, ở định dạng dấu thời gian ISO 8601: "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" hoặc định dạng thời lượng: "P(n)Y(n)M(n)DT(n)H(n)M(n)S". Ví dụ: PT90M thể hiện thời lượng 90 phút. Giá trị mặc định "PT0M" cho biết thời gian giao hàng ưu tiên là càng sớm càng tốt. Tài liệu tham khảo: https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations. Sử dụng thông tin này để cập nhật thời gian giao hàng dự kiến trong phản hồi thanh toán.

Ví dụ: PT90M

Ví dụ sau đây cho thấy một phần tử DeliveryInfo:

Ví dụ:

{
  "deliveryTimeIso8601": "PT90M"
}

Tuyên bố từ chối trách nhiệm

Bảng sau đây liệt kê các thuộc tính cho loại Disclaimer:

Thuộc tính Loại Mô tả
predefinedMessage PredefinedMessage

Bắt buộc.

Để hiển thị thông báo từ chối trách nhiệm được xác định trước trong quy trình thanh toán.

feeAmount Money

Đối tác sẽ tính cho người bán khoản phí N cho đơn đặt hàng này.

feeAmountRange FeeAmountRange

Đối tác sẽ tính cho nhà hàng một khoản phí từ N đến M cho mỗi đơn đặt hàng.

feePercent Number

Đối tác sẽ tính cho người bán khoản phí N% đối với đơn đặt hàng này.

feePercentRange FeePercentRange

Đối tác sẽ tính cho người bán một khoản phí từ N% đến M% trên mỗi đơn đặt hàng.

Ví dụ sau đây cho thấy một phần tử Disclaimer:

Ví dụ 1

{
  "predefinedMessage": "NEW_YORK_DELIVERY_FEE_TIP_DISCLAIMER"
}

Ví dụ 2

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE"
}

Ví dụ 3

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

Ví dụ 4

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

Ví dụ 5

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

Ví dụ 6

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

Lỗi

Loại Error có thể có các giá trị sau:

  • CLOSED: Nhà hàng đóng cửa tại thời điểm đặt hàng.
  • NO_CAPACITY: Không có dung lượng dịch vụ (ví dụ: tạm thời ngừng hoạt động do thời gian cao điểm).
  • NO_COURIER_AVAILABLE: Không thể xử lý đơn đặt hàng do thiếu nhân viên giao hàng.
  • REQUIREMENTS_NOT_MET: Chưa đáp ứng các quy tắc ràng buộc để chấp nhận đơn đặt hàng (ví dụ: kích thước giỏ hàng tối thiểu).
  • UNAVAILABLE_SLOT: Không thể thực hiện đơn đặt hàng theo thời gian đặt trước do DeliveryInfo hoặc PickupInfo chỉ định.
  • OUT_OF_SERVICE_AREA: Không thể giao đơn đặt hàng đến địa chỉ của người dùng.
  • PROMO_EXPIRED: Không thể áp dụng vì chương trình khuyến mãi đã hết hạn.
  • PROMO_NOT_APPLICABLE: Mã lỗi chung để phát hiện tất cả trường hợp không áp dụng được mã khuyến mãi, nếu không có lỗi mã khuyến mãi nào khác phù hợp.
  • PROMO_NOT_RECOGNIZED: Không nhận dạng được mã giảm giá.
  • PROMO_ORDER_INELIGIBLE: Đơn đặt hàng hiện tại không đủ điều kiện sử dụng phiếu giảm giá này.
  • PROMO_USER_INELIGIBLE: Người dùng hiện tại không đủ điều kiện sử dụng phiếu giảm giá này.
  • AVAILABILITY_CHANGED: Mặt hàng không còn hàng hoặc không đủ mặt hàng để thực hiện yêu cầu.
  • INCORRECT_PRICE: Lỗi về giá trong phí hoặc tổng.
  • INVALID: LineItem, FulfillmentOption hoặc Promotion chứa dữ liệu không hợp lệ.
  • NOT_FOUND: Không tìm thấy LineItem, FulfillmentOption hoặc Promotion.
  • PRICE_CHANGED: Giá của một mặt hàng đã thay đổi.

FeeAmountRange

Bảng sau đây liệt kê các thuộc tính cho loại FeeAmountRange:

Thuộc tính Loại Mô tả
minFeeAmount Money

Giới hạn dưới của số tiền phí được tính.

maxFeeAmount Money

Giới hạn trên của số tiền phí được tính.

FeePercentRange

Bảng sau đây liệt kê các thuộc tính cho loại FeePercentRange:

Thuộc tính Loại Mô tả
minFeePercent Number

Giới hạn dưới của tỷ lệ phần trăm phí được tính.

maxFeePercent Number

Giới hạn trên của tỷ lệ phí được tính.

FoodCartExtension

Chứa thông tin chi tiết về người dùng, chẳng hạn như lựa chọn ưu tiên về phương thức thực hiện đơn hàng.

Bảng sau đây liệt kê các thuộc tính cho loại FoodCartExtension:

Thuộc tính Loại Mô tả
@type Const

Loại của phần mở rộng này. Trường này luôn được đặt thành "type.googleapis.com/google.actions.v2.orders.FoodCartExtension".

Giá trị: type.googleapis.com/google.actions.v2.orders.FoodCartExtension

contact Contact

Thông tin liên hệ của người nhận đơn đặt hàng. Thông tin chi tiết bao gồm tên, số điện thoại và địa chỉ email của người đó.

fulfillmentPreference FulfillmentOption

Bắt buộc.

Lựa chọn ưu tiên của người dùng về phương thức thực hiện đơn hàng.

location Location

Trong CheckoutRequestMessage, trường này chỉ định địa chỉ giao hàng. Đây là trường bắt buộc nếu đơn đặt hàng là để giao hàng. Đối với các đơn đặt hàng mang đi hoặc đến lấy, trường này sẽ không có trong thông báo.

Ví dụ sau đây cho thấy một phần tử FoodCartExtension:

Ví dụ 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"
  }
}

Ví dụ 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

Xác định một hoặc nhiều lỗi xảy ra trong khi xử lý yêu cầu. Bảng sau đây mô tả các trường của loại FoodErrorExtension. Bạn có thể gửi lỗi trong CheckoutResponse.

Bảng sau đây liệt kê các thuộc tính cho loại FoodErrorExtension:

Thuộc tính Loại Mô tả
@type Const

Bắt buộc.

Loại của phần mở rộng này.

Giá trị: type.googleapis.com/google.actions.v2.orders.FoodErrorExtension

foodOrderErrors List<FoodOrderError>

Bắt buộc.

Mảng các đối tượng FoodOrderError mô tả các lỗi đã xảy ra. Bạn nên có một lỗi cho mỗi giỏ hàng hoặc mỗi mặt hàng.

Phải có ít nhất 1 mục.

correctedProposedOrder ProposedOrder

Bắt buộc khi 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".

Một ProposedOrder mới có nội dung sửa đổi. Trả về đối tượng này nếu có lỗi có thể khôi phục trong ProposedOrder ban đầu. Ví dụ: lỗi có thể khôi phục là lỗi thay đổi giá của một hoặc nhiều mục hàng trong giỏ hàng. Các lỗi có thể khôi phục với ProposedOrder hợp lệ sẽ chuyển sang giai đoạn xác nhận, thay vì yêu cầu người dùng xem lại giỏ hàng.

paymentOptions PaymentOptions

Bắt buộc khi 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".

Các phương thức thanh toán mặc định được chọn cho người dùng.

additionalPaymentOptions List<PaymentOptions>

Các phương thức thanh toán thay thế mà người dùng có thể sử dụng.

Ví dụ sau đây cho thấy một phần tử FoodErrorExtension:

Ví dụ:

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

Xác định các món ăn kèm cho món ăn.

Bảng sau đây liệt kê các thuộc tính cho loại FoodItemExtension:

Thuộc tính Loại Mô tả
@type Const

Bắt buộc.

Loại của phần mở rộng này. Trường này luôn được đặt thành "type.googleapis.com/google.actions.v2.orders.FoodItemExtension".

Giá trị: type.googleapis.com/google.actions.v2.orders.FoodItemExtension

options List<FoodItemOption>

Tuỳ chọn có thể là một mặt hàng bổ sung hoặc nhóm bổ sung chứa một tập hợp các mặt hàng bổ sung.

Ví dụ sau đây cho thấy một phần tử FoodItemExtension:

Ví dụ:

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

Bảng sau đây liệt kê các thuộc tính cho loại FoodItemOption:

Thuộc tính Loại Mô tả
id String

Mã nhận dạng duy nhất do Google chỉ định. Khi bạn gửi FoodOrderError hoặc AsyncOrderUpdateRequest, hãy sử dụng trường này để phân biệt trong trường hợp giỏ hàng chứa nhiều mặt hàng có cùng offerId.

Ví dụ: 39231093

offerId String

Mã ưu đãi của mặt hàng.

Ví dụ: 912835081

name String

Tên tuỳ chọn.

Ví dụ: Honey Mustard

price Money
note String

Ghi chú liên quan đến tuỳ chọn.

quantity Number

Đối với các tuỳ chọn là mục, số lượng mục.

Ví dụ: 3

subOptions List<FoodItemOption>

Các tuỳ chọn phụ cho tuỳ chọn đó, nếu có.

Ví dụ: [ { "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 } ]

Ví dụ sau đây cho thấy một phần tử FoodItemOption:

Ví dụ 1

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

Ví dụ 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

Chứa thông tin chi tiết về lỗi trong CheckoutResponse.

Bảng sau đây liệt kê các thuộc tính cho loại FoodOrderError:

Thuộc tính Loại Mô tả
error Error

Bắt buộc.

id String

Bắt buộc khi error = "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "PRICE_CHANGED", "INVALID", or "NOT_FOUND".

Đây là trường bắt buộc đối với lỗi ở cấp mặt hàng. Đây là LineItem.id do Google chỉ định cho các món ăn trong thực đơn hoặc FoodItemOption.id cho các món ăn kèm.

description String

Nội dung mô tả lỗi. Nội dung mô tả này dành cho việc ghi nhật ký nội bộ và người dùng sẽ không nhìn thấy.

updatedPrice Money

Bắt buộc khi error = "PRICE_CHANGED".

Giá mới của mặt hàng gây ra lỗi. Bạn chỉ cần cung cấp thông tin này khi lỗi là "PRICE_CHANGED".

availableQuantity Số nguyên

Bắt buộc khi error = "INVALID", or "NOT_FOUND".

Số lượng mới còn hàng của mặt hàng gây ra lỗi. Bạn chỉ cần cung cấp thông tin này khi lỗi là "INVALID" hoặc "NOT_FOUND". Giá trị phải bằng 0 đối với "INVALID" và "NOT_FOUND".

Ví dụ sau đây cho thấy một phần tử FoodOrderError:

Ví dụ 1

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

Ví dụ 2

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

FoodOrderExtension

Chứa thông tin thực hiện đơn đặt hàng.

Bảng sau đây liệt kê các thuộc tính cho loại FoodOrderExtension:

Thuộc tính Loại Mô tả
@type Const

Loại của phần mở rộng này. Trường này luôn được đặt thành "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension".

Giá trị: type.googleapis.com/google.actions.v2.orders.FoodOrderExtension

availableFulfillmentOptions List<FulfillmentOption>

Biểu thị các phương thức thực hiện có sẵn cho đơn đặt hàng.

optinForRemarketing Boolean

Yêu cầu của người dùng về việc chọn sử dụng các kênh tiếp thị của bạn. Theo mặc định, bạn không thể gửi nội dung tiếp thị khi chưa có sự đồng ý của người dùng. Nếu optinForRemarketing là true, bạn có thể đăng ký người dùng. Nếu optinForRemarketing là false hoặc không có, bạn phải giữ nguyên trạng thái đăng ký trong hệ thống. Người dùng không thể chọn không tham gia thông qua Google, mà chỉ có thể chọn không tham gia thông qua một chức năng huỷ đăng ký được cung cấp trong các kênh tiếp thị của bạn. Cờ này chỉ xuất hiện trong SubmitOrderRequestMessage.

Ví dụ sau đây cho thấy một phần tử FoodOrderExtension:

Ví dụ 1

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

Ví dụ 2

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

FulfillmentOption

Bạn có thể sử dụng đối tượng FulfillmentOption theo các cách sau:
  • Trong Checkout AppRequestSubmit AppRequest, Cart.extension.fulfillmentPreference: Lưu trữ lựa chọn ưu tiên của người dùng (giao hàng hoặc đến lấy hàng). Giá luôn bằng 0 khi yêu cầu thanh toán được gửi.
  • Trong Checkout AppResponse, ProposedOrder.extension.availableFulfillmentOptions: Xác định một hoặc nhiều tuỳ chọn phân phối (hiện tại, chỉ hỗ trợ một tuỳ chọn). Bạn chỉ định tuỳ chọn mặc định là LineItem trong ProposedOrder.otherItems. offerId của FulfillmentOption phải khớp với mã nhận dạng của LineItem được chỉ định trong ProposedOrder.otherItems.

Bảng sau đây liệt kê các thuộc tính cho loại FulfillmentOption:

Thuộc tính Loại Mô tả
offerId String

Giá trị nhận dạng duy nhất của phương thức thực hiện này (nếu có).

fulfillmentInfo FulfillmentOptionInfo

Bắt buộc.

expiresAt Dấu thời gian theo tiêu chuẩn ISO

Thời điểm phương thức thực hiện này hết hạn.

price Money

Chi phí của lựa chọn này.

Ví dụ sau đây cho thấy một phần tử FulfillmentOption:

Ví dụ:

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

FulfillmentOptionInfo

Xác định thông tin liên quan đến FulfillmentInfo.

Bảng sau đây liệt kê các thuộc tính cho loại FulfillmentOptionInfo:

Thuộc tính Loại Mô tả
Bạn phải có đúng một trong các nhóm thuộc tính sau.
delivery Nhóm 1 DeliveryInfo

Cho biết thứ tự giao hàng (nếu có).

pickup Nhóm 2 PickupInfo

Cho biết đơn đặt hàng đến lấy hàng (nếu có).

Hình ảnh

Bảng sau đây liệt kê các thuộc tính cho loại Image:

Thuộc tính Loại Mô tả
sourceUrl String

Bắt buộc.

URL của hình ảnh. Hình ảnh phải có kích thước tối thiểu là 72x72 pixel. Để đạt được kết quả tốt nhất, hãy sử dụng hình ảnh có kích thước tối thiểu là 216x216 pixel. Hình ảnh phải có kích thước nhỏ hơn 6 MB và 64 megapixel.

LineItem

Xác định nội dung của giỏ hàng (Cart.lineItems) hoặc các khoản phí bổ sung cho đơn đặt hàng (ProposedOrder.otherItems).

Bảng sau đây liệt kê các thuộc tính cho loại LineItem:

Thuộc tính Loại Mô tả
id String

Bắt buộc khi type = "REGULAR".

Đối với một LineItem trong giỏ hàng (ProposedOrder.cart.lineItems[0].id), đây là mã nhận dạng duy nhất do Google tạo khi tạo đơn đặt hàng. Đối với một LineItem trong ProposedOrder (ProposedOrder.otherItems[0].id), được dùng để thêm các mặt hàng như phí vận chuyển và thuế, giá trị của mã nhận dạng do nhà cung cấp xác định. Ví dụ: trong một giỏ hàng có hai mặt hàng giống nhau nhưng có hướng dẫn chế biến khác nhau (chẳng hạn như hai chiếc pizza cỡ trung bình với các loại nhân khác nhau). Trong trường hợp này, cả hai mặt hàng đều có cùng một offerId cơ sở. Khi bạn gửi yêu cầu cập nhật đơn đặt hàng để cho biết một mặt hàng bị từ chối, hãy sử dụng mã nhận dạng này làm giá trị phân định. Nói cách khác, nếu một trong các chiếc pizza bị từ chối vì thiếu một loại nhân cụ thể, thì mã nhận dạng sẽ giúp Google xác định món ăn trong đơn đặt hàng mà bạn đang đề cập. Đây là trường bắt buộc, ngoại trừ trong otherItems.

name String

Bắt buộc.

Tên của mục hàng. Đây là chuỗi hiển thị với người dùng và phải viết hoa theo kiểu câu khi có thể (như "Phí giao hàng", "Phí dịch vụ", "Thuế"). Trường này bị cắt ngắn ở 100 ký tự đối với người dùng.

type LineItemType

Bắt buộc.

quantity Số nguyên

Bắt buộc khi type = "REGULAR".

Số lượng mặt hàng được đưa vào. Không áp dụng cho ProposedOrder.otherItems.

description String

Nội dung mô tả về mặt hàng.

price Price

Bắt buộc.

Giá của mặt hàng hoặc các mặt hàng. Giá trị này phản ánh tổng giá của tất cả hàng hoá hoặc dịch vụ cho mục hàng này (nói cách khác, cộng chi phí của mọi mặt hàng bổ sung rồi nhân với số lượng). Ví dụ: Nếu một mặt hàng trị giá 10 đô la có số lượng là 3, thì giá sẽ là 30 đô la. Đối với một chiếc pizza có giá cơ bản là 5 USD và một món ăn kèm có giá 1 USD, giá của chiếc pizza đó sẽ là 6 USD. Đối với 2 chiếc pizza (số lượng = 2) có giá cơ bản là 5 USD và mỗi chiếc có giá phụ là 1 USD, giá sẽ là 12 USD. Mỗi LineItem phải có giá, ngay cả khi giá là "0". Khi loại là DISCOUNT (GIẢM GIÁ), hãy chỉ định giá trị là số âm (ví dụ: "-2").

subLines List<SublineNote>

Không bắt buộc và chỉ hợp lệ nếu loại là "THƯỜNG". Người dùng có thể gửi ghi chú cụ thể về mặt hàng trong trường này trong yêu cầu thanh toán và yêu cầu gửi đơn đặt hàng. Đảm bảo rằng người bán nhận được ghi chú khi bạn cung cấp. Giá trị này sẽ có trong yêu cầu dưới dạng subLines[0].note. Đây là giá trị duy nhất được cung cấp trong trường này khi có trong yêu cầu.

Không được có nhiều hơn 1 mục.

offerId String

Bắt buộc khi type = "REGULAR".

Mã ưu đãi của MenuItem cho mặt hàng. Không áp dụng cho ProposedOrder.otherItems.

extension FoodItemExtension

Xác định các món ăn kèm cho món ăn.

Ví dụ sau đây cho thấy một phần tử LineItem:

Ví dụ 1

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

Ví dụ 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

Loại LineItemType có thể có các giá trị sau:

  • REGULAR: Mục hàng hoá. Áp dụng cho Cart.lineItems.
  • TAX: Mục dòng thuế. Áp dụng cho ProposedOrder.otherItems.
  • DISCOUNT: Mục chiết khấu. Xin lưu ý rằng giá phải là số âm. Áp dụng cho ProposedOrder.otherItems.
  • GRATUITY: Mục chi phí boa. Thường được dành cho SubmitOrderRequestMessage cho một khoản tiền boa do người dùng chọn. Áp dụng cho ProposedOrder.otherItems.
  • DELIVERY: Mục hàng phân phối. Áp dụng cho ProposedOrder.otherItems.
  • SUBTOTAL: Mục dòng tổng phụ. Áp dụng cho ProposedOrder.otherItems.
  • FEE: Mục hàng bổ sung không thuộc các loại khác. Áp dụng cho ProposedOrder.otherItems.

Vị trí

Chỉ định địa chỉ để đặt đồ ăn. Loại Location được dùng trong Cart chỉ để cho biết đích đến của đơn đặt hàng giao hàng. Vị trí đã hoàn tất cũng xuất hiện trong TransactionDecisionValue nếu người dùng đặt hàng. Đối với các đơn đặt hàng chỉ định phương thức đến lấy hàng, bạn không được thêm vị trí nào (thậm chí không được thêm vị trí trống).

Bảng sau đây liệt kê các thuộc tính cho loại Location:

Thuộc tính Loại Mô tả
coordinates Coordinates
formattedAddress String

Hiển thị địa chỉ của vị trí.

Ví dụ: 1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States

postalAddress PostalAddress
zipCode String

Ví dụ: 90210

city String

Tên thành phố.

Ví dụ: Los Angeles

notes String

Ghi chú về vị trí, chẳng hạn như mã cổng. Tên không được dài quá 500 ký tự.

Ví dụ: Gate code is #111

Ví dụ sau đây cho thấy một phần tử Location:

Ví dụ:

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

Người bán

Bảng sau đây liệt kê các thuộc tính cho loại Merchant:

Thuộc tính Loại Mô tả
id String

Mã nhận dạng của người bán. Nếu được chỉ định, sẽ khớp với Restaurant.@id trong nguồn cấp dữ liệu Nhà hàng.

Ví dụ: https://www.exampleprovider.com/merchant/id1

name String

Bắt buộc.

Tên người bán mà người dùng nhìn thấy.

Ví dụ: Falafel Bite

Ví dụ sau đây cho thấy một phần tử Merchant:

Ví dụ:

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

Tiền

Bảng sau đây liệt kê các thuộc tính cho loại Money:

Thuộc tính Loại Mô tả
currencyCode String

Bắt buộc.

Mã tiền tệ gồm 3 chữ cái theo định dạng ISO 4217.

Ví dụ: USD

units String

Số nguyên của số tiền. Ví dụ: nếu currencyCode là "USD", thì đơn vị "1" là một đô la Mỹ.

Ví dụ: 36

nanos Số nguyên

Số lượng đơn vị nano (10^-9) của số tiền. Giá trị phải nằm trong khoảng từ -999.999.999 đến +999.999.999. Hãy sử dụng các quy tắc sau: Nếu đơn vị dương, thì nano phải dương hoặc bằng 0. Nếu đơn vị là 0, thì nano có thể là dương, 0 hoặc âm. Nếu đơn vị âm, thì nano phải âm hoặc bằng 0. Ví dụ: -1,75 đô la được biểu thị là đơn vị = -1 và nano = -750.000.000.

Ví dụ: 730000000

Ví dụ sau đây cho thấy một phần tử Money:

Ví dụ 1

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

Ví dụ 2

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

Đặt

Chứa đơn đặt hàng cuối cùng, bao gồm cả thuế, phí và phí vận chuyển, cũng như thông tin thanh toán. Đối tượng này được hành động của bạn nhận trong Submit AppRequest.

Bảng sau đây liệt kê các thuộc tính cho loại Order:

Thuộc tính Loại Mô tả
finalOrder ProposedOrder

Bắt buộc.

Thứ tự đề xuất đã gây ra đơn đặt hàng.

googleOrderId String

Bắt buộc.

Mã đơn đặt hàng do Google chỉ định. Mã nhận dạng này phải ổn định trong toàn bộ vòng đời của đơn đặt hàng. Người dùng cuối sẽ không nhìn thấy mã này.

orderDate Dấu thời gian theo tiêu chuẩn ISO

Bắt buộc.

Ngày và giờ tạo đơn đặt hàng.

paymentInfo PaymentInfo

Bắt buộc.

Thông tin thanh toán tương ứng với khoản thanh toán cho đơn đặt hàng này.

Ví dụ sau đây cho thấy một phần tử Order:

Ví dụ:

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

Bảng sau đây mô tả các trường của loại OrderUpdate có trong AppResponse.

Bảng sau đây liệt kê các thuộc tính cho loại OrderUpdate:

Thuộc tính Loại Mô tả
actionOrderId String

Bắt buộc.

Mã nhận dạng duy nhất của đơn đặt hàng trong hệ thống của trình tích hợp được dùng để xác định đơn đặt hàng mà bạn gửi thông tin cập nhật. Nếu bạn không cung cấp receipt.user_visible_order_id ít nhất một lần trong OrderUpdate cho đơn đặt hàng "CREATED", thì mã nhận dạng này sẽ là mã nhận dạng hiển thị cho người dùng đã nhập và xuất hiện trong thẻ đơn đặt hàng của Google.

orderState OrderState

Bắt buộc.

Trạng thái mới của đơn đặt hàng.

lineItemUpdates Map<String, LineItemUpdate>
updateTime Dấu thời gian theo tiêu chuẩn ISO

Bắt buộc.

Thời điểm cập nhật đơn đặt hàng.

orderManagementActions List<OrderManagementAction>

Các thao tác sau khi đặt hàng, chẳng hạn như liên hệ với nhóm hỗ trợ và xem chi tiết đơn đặt hàng.

Phải có ít nhất 1 mục và không được nhiều hơn 6 mục.

rejectionInfo RejectionInfo

Bắt buộc khi orderState.state = "REJECTED".

cancellationInfo CancellationInfo

Bắt buộc khi orderState.state = "CANCELLED".

inTransitInfo InTransitInfo

Trường này không còn được dùng nữa.

fulfillmentInfo FulfillmentInfo

Trường này không còn được dùng nữa.

receipt Receipt

Bắt buộc khi orderState.state = "CONFIRMED", "IN_PREPARATION", or "READY_FOR_PICKUP".

Cung cấp mã đơn hàng mà người dùng có thể nhìn thấy trong biên nhận.

totalPrice Price

Tổng giá của đơn đặt hàng.

infoExtension FoodOrderUpdateExtension

Xác định thêm thông tin chi tiết về nội dung cập nhật đơn đặt hàng, chẳng hạn như khoảng thời gian giao hàng hoặc đến lấy hàng dự kiến.

Ví dụ sau đây cho thấy một phần tử OrderUpdate:

Ví dụ:

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

Bảng sau đây liệt kê các thuộc tính cho loại PickupInfo:

Thuộc tính Loại Mô tả
pickupTimeIso8601 String

Thời gian lấy hàng ước tính, ở định dạng dấu thời gian ISO 8601: "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" hoặc định dạng thời lượng: "P(n)Y(n)M(n)DT(n)H(n)M(n)S". Ví dụ: PT90M thể hiện thời lượng 90 phút. Giá trị mặc định "PT0M" cho biết thời gian lấy hàng ưu tiên là càng sớm càng tốt. Tài liệu tham khảo: https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations. Sử dụng thông tin này để cập nhật thời gian lấy hàng dự kiến trong phản hồi thanh toán.

Ví dụ: PT90M

Ví dụ sau đây cho thấy một phần tử PickupInfo:

Ví dụ:

{
  "pickupTimeIso8601": "PT90M"
}

PostalAddress (Địa chỉ bưu điện)

Bảng sau đây liệt kê các thuộc tính cho loại PostalAddress:

Thuộc tính Loại Mô tả
regionCode String

Bắt buộc.

Mã quốc gia gồm hai chữ cái.

Ví dụ: US

postalCode String

Mã bưu chính.

Ví dụ: 94043

administrativeArea String

Phân khu hành chính cao nhất dùng cho địa chỉ bưu chính của một quốc gia hoặc khu vực. Đây có thể là tiểu bang, tỉnh, oblast hoặc tỉnh.

Ví dụ: CA

locality String

Thành phố hoặc thị trấn của vị trí này. Ở những khu vực trên thế giới mà địa phương không được xác định rõ ràng hoặc không phù hợp với cấu trúc này, bạn không nên chỉ định địa phương mà hãy sử dụng trường addressLines.

Ví dụ: Mountain View

addressLines List<String>

Một hoặc nhiều dòng mà bạn có thể sử dụng để chỉ định địa chỉ đường phố. Bạn không nên sửa đổi trường này vì trường này có thể chứa các địa phương không rõ ràng.

Ví dụ: [ "1350 Charleston Road" ]

recipients List<String>

Danh sách người nhận của một đơn đặt hàng. Trường này chỉ có trong billingAddress.

Ví dụ sau đây cho thấy một phần tử PostalAddress:

Ví dụ:

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

Giá

Bảng sau đây liệt kê các thuộc tính cho loại Price:

Thuộc tính Loại Mô tả
type Enum [ "ESTIMATE", "ACTUAL" ]

Bắt buộc.

Mã phiếu giảm giá khuyến mãi.

amount Money

Bắt buộc.

Khuyến mãi

Bảng sau đây liệt kê các thuộc tính cho loại Promotion:

Thuộc tính Loại Mô tả
coupon String

Bắt buộc.

Mã phiếu giảm giá khuyến mãi.

ProposedOrder

Bảng sau đây liệt kê các thuộc tính cho loại ProposedOrder:

Thuộc tính Loại Mô tả
id String

Mã nhận dạng không bắt buộc cho đơn đặt hàng đề xuất.

cart Cart

Bắt buộc.

Các mục của người dùng.

otherItems List<LineItem>

Các mặt hàng do nhà cung cấp thêm vào, chẳng hạn như phí giao hàng, các khoản phí khác và thuế. otherItems cũng có thể chứa tiền boa và/hoặc chiết khấu do người dùng thêm vào.

Không được có nhiều hơn 10 mục.

image Image

Hình ảnh liên kết với đơn đặt hàng đề xuất.

totalPrice Price

Bắt buộc.

Tổng giá của đơn đặt hàng được đề xuất.

extension FoodOrderExtension

Bắt buộc.

Xác định thông tin thực hiện đơn đặt món ăn.

disclaimers List<Disclaimer>

Tương ứng với thông báo từ chối trách nhiệm sẽ xuất hiện trong giao diện người dùng trước khi đặt hàng.

Ví dụ sau đây cho thấy một phần tử ProposedOrder:

Ví dụ:

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

Bảng sau đây liệt kê các thuộc tính cho loại SublineNote:

Thuộc tính Loại Mô tả
note String

Bắt buộc.

Dấu thời gian

Ngày và giờ, theo định dạng sau: "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"

TransactionDecisionValue

Chứa Order.

Bảng sau đây liệt kê các thuộc tính cho loại TransactionDecisionValue:

Thuộc tính Loại Mô tả
order Order

Bắt buộc.

Đơn đặt hàng có thông tin thanh toán.

Ví dụ sau đây cho thấy một phần tử TransactionDecisionValue:

Ví dụ:

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

Yêu cầu thực hiện đơn hàng

AppRequest

Bảng sau đây liệt kê các thuộc tính cho loại AppRequest:

Thuộc tính Loại Mô tả
isInSandbox Boolean

Cho biết liệu các giao dịch tiếp theo có được thực hiện trong môi trường hộp cát hay không.

conversation Conversation
inputs List<Input>

Bắt buộc.

Chứa các đối số dự kiến để thanh toán giỏ hàng.

Phải có đúng 1 mục.

Ví dụ sau đây cho thấy một phần tử AppRequest:

Ví dụ 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"
              }
            }
          }
        }
      ]
    }
  ]
}

Ví dụ 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 là một AppRequest với ý định actions.foodordering.intent.CHECKOUT.

SubmitOrderRequestMessage

SubmitOrderRequestMessage là một AppRequest với ý định actions.foodordering.intent.TRANSACTION_DECISION.

Cuộc trò chuyện

Conversation chỉ dành riêng cho một phiên. Bạn có thể sử dụng thuộc tính này để liên kết nhiều Hành động CheckoutSubmitOrder với nhau nếu cần.

Bảng sau đây liệt kê các thuộc tính cho loại Conversation:

Thuộc tính Loại Mô tả
conversationId String

Bắt buộc.

Mã nhận dạng duy nhất của cuộc trò chuyện.

Ví dụ sau đây cho thấy một phần tử Conversation:

Ví dụ:

{
  "conversationId": "CQnJ7Z4i7UmvEZ9ph3AxyZRJ"
}

Đầu vào

Các đối số dự kiến để thanh toán cho giỏ hàng.

Bảng sau đây liệt kê các thuộc tính cho loại Input:

Thuộc tính Loại Mô tả
intent Enum [ "actions.foodordering.intent.CHECKOUT", "actions.intent.TRANSACTION_DECISION" ]

Bắt buộc.

Đặt thành "actions.foodordering.intent.CHECKOUT" cho thông báo yêu cầu thanh toán HOẶC "actions.intent.TRANSACTION_DECISION" cho thông báo yêu cầu gửi đơn đặt hàng.

arguments List<Argument>

Bắt buộc.

Chứa Giỏ hàng cần thanh toán hoặc đơn đặt hàng cần đặt

Phải có đúng 1 mục.

Đối số

Chứa thông tin chi tiết về các món ăn mà người dùng muốn thanh toán. Đối với quy trình thanh toán, chỉ áp dụng thời gian gia hạn. Đối với yêu cầu gửi đơn đặt hàng, chỉ áp dụng transactionDecisionValue

Bảng sau đây liệt kê các thuộc tính cho loại Argument:

Thuộc tính Loại Mô tả
Bạn phải có đúng một trong các nhóm thuộc tính sau.
extension Nhóm 1 Cart

Thông tin chi tiết về các món ăn mà người dùng muốn thanh toán.

transactionDecisionValue Nhóm 2 TransactionDecisionValue

Chứa đơn đặt hàng cần đặt cùng với thông tin thanh toán.

Phản hồi thực hiện đơn hàng

AppResponse

Bảng sau đây liệt kê các thuộc tính cho loại AppResponse:

Thuộc tính Loại Mô tả
expectUserResponse Const

Đặt thành false.

Giá trị: False

finalResponse FinalResponse

Bắt buộc.

Chứa nội dung phản hồi của bạn về quy trình thanh toán giỏ hàng.

Ví dụ sau đây cho thấy một phần tử AppResponse:

Ví dụ 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."
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

Ví dụ 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"
              }
            }
          }
        }
      ]
    }
  }
}

Ví dụ 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."
                }
              ]
            }
          }
        }
      ]
    }
  }
}

Ví dụ 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

CheckoutResponseMessage là một AppResponsecheckoutResponse hoặc error trong StructuredResponse.

SubmitOrderResponseMessage

SubmitOrderResponseMessage là một AppResponseorderUpdate trong StructuredResponse.

FinalResponse

Phản hồi của bạn đối với quy trình thanh toán giỏ hàng hoặc SubmitOrderRequestMessage.

Bảng sau đây liệt kê các thuộc tính cho loại FinalResponse:

Thuộc tính Loại Mô tả
richResponse RichResponse

Bắt buộc.

Chứa phản hồi của bạn đối với CheckoutRequestMessage hoặc SubmitOrderRequestMessage.

CheckoutResponse

Bảng sau đây liệt kê các thuộc tính cho loại CheckoutResponse:

Thuộc tính Loại Mô tả
proposedOrder ProposedOrder

Bắt buộc.

Thứ tự đề xuất để sử dụng cho giao dịch.

paymentOptions PaymentOptions

Bắt buộc.

Phương thức thanh toán mặc định được chọn cho người dùng.

additionalPaymentOptions List<PaymentOptions>

Các phương thức thanh toán thay thế mà người dùng có thể sử dụng.

Ví dụ sau đây cho thấy một phần tử CheckoutResponse:

Ví dụ:

{
  "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."
      }
    }
  ]
}

Mục

Chứa phản hồi của bạn đối với một giao dịch thanh toán bằng giỏ hàng hoặc SubmitOrderRequestMessage.

Bảng sau đây liệt kê các thuộc tính cho loại Item:

Thuộc tính Loại Mô tả
structuredResponse StructuredResponse

Bắt buộc.

RichResponse

Chứa câu trả lời của bạn cho một lượt thanh toán giỏ hàng.

Bảng sau đây liệt kê các thuộc tính cho loại RichResponse:

Thuộc tính Loại Mô tả
items List<Item>

Bắt buộc.

Phải có đúng 1 mục.

StructuredResponse

Đối với CheckoutResponseMessage, đây có thể là một trong những giá trị sau: CheckoutResponse Cho biết đã thanh toán thành công. HOẶC FoodErrorExtension: Cho biết lỗi trong quá trình thanh toán. Phản hồi có thể bao gồm ProposedOrder và PaymentOptions đã sửa hoặc thông báo lỗi không có PaymentOptions. Đối với SubmitOrderResponseMessage, bạn chỉ có thể áp dụng orderUpdate.

Bảng sau đây liệt kê các thuộc tính cho loại StructuredResponse:

Thuộc tính Loại Mô tả
Bạn phải có đúng một trong các nhóm thuộc tính sau.
checkoutResponse Nhóm 1 CheckoutResponse

Các mặt hàng đã được thanh toán cộng với thuế và chiết khấu.

error Nhóm 2 FoodErrorExtension

Đã phát hiện lỗi trong các mặt hàng trong giỏ hàng. Tuỳ thuộc vào bản chất của lỗi, thuộc tính này có thể bao gồm ProposedOrder và PaymentOptions đã sửa hoặc chỉ là thông báo lỗi không có PaymentOptions.

orderUpdate Nhóm 3 OrderUpdate

Thông tin cập nhật không đồng bộ về đơn đặt hàng

Phần này mô tả các loại cấp cao tạo nên các yêu cầu và phản hồi của một hoạt động tương tác tích hợp sẵn trong quy trình đặt món ăn thông thường.

AsyncOrderUpdateRequestMessage

Thông báo cho người dùng về các thay đổi sau khi đơn đặt hàng được gửi và xác nhận. Ví dụ: bạn có thể thông báo cho người dùng rằng đơn đặt hàng đang được vận chuyển hoặc giá đã thay đổi. Để biết thêm thông tin, hãy xem

Bảng sau đây liệt kê các thuộc tính cho loại AsyncOrderUpdateRequestMessage:

Thuộc tính Loại Mô tả
isInSandbox Boolean

Cho biết đơn đặt hàng mà thông tin cập nhật này được gửi là khoản thanh toán trong hộp cát.

customPushMessage CustomPushMessage

Bắt buộc.

Chứa OrderUpdate cho yêu cầu.

Ví dụ sau đây cho thấy một phần tử AsyncOrderUpdateRequestMessage:

Ví dụ:

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

Sau khi bạn gửi thành công AsyncOrderUpdateRequestMessage, Google sẽ phản hồi bằng trạng thái HTTP 200 và nội dung trống. Nếu không cập nhật được, Google sẽ phản hồi kèm theo thông tin chi tiết về lý do không cập nhật được đơn đặt hàng.

Loại thông tin cập nhật về đơn đặt hàng

Nút

Xác định một thành phần giao diện người dùng mà bạn có thể thêm để cung cấp hoạt động tương tác của người dùng.

Bảng sau đây liệt kê các thuộc tính cho loại Button:

Thuộc tính Loại Mô tả
title String

Bắt buộc.

Nhãn hiển thị. Sử dụng kiểu viết hoa đầu câu với 30 ký tự trở xuống để đảm bảo hiển thị chính xác.

Ví dụ: Contact us

openUrlAction OpenUrlAction

Bắt buộc.

Ví dụ sau đây cho thấy một phần tử Button:

Ví dụ:

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

CancellationInfo

Bảng sau đây liệt kê các thuộc tính cho loại CancellationInfo:

Thuộc tính Loại Mô tả
reason String

Bắt buộc.

Lý do từ chối có thể hiển thị dưới dạng văn bản khi OrderState.state là "CANCELLED" (ĐÃ HUỶ).

Ví dụ: Restaurant closed

Ví dụ sau đây cho thấy một phần tử CancellationInfo:

Ví dụ:

{
  "reason": "Insufficient inventory"
}

FoodOrderUpdateExtension

Loại này cung cấp cho người dùng khoảng thời gian ước tính để đơn đặt hàng được giao hoặc có thể đến lấy hàng. Gửi tiện ích này trong một OrderUpdate bất cứ khi nào có thông tin hoặc thông tin đã thay đổi kể từ lần gửi gần đây nhất.

Cung cấp thông tin ước tính thận trọng cho khoảng thời gian thực hiện để luôn đáp ứng được kỳ vọng của người dùng. Ví dụ: nếu đơn đặt hàng dự kiến sẽ được giao vào lúc 13:00 hôm nay, bạn nên gửi khoảng thời gian giao hàng dự kiến nhất quán với các biến thể do tình trạng giao thông, chẳng hạn như từ 12:45 đến 13:15 hôm nay.

Thời lượng hoặc dấu thời gian theo tiêu chuẩn ISO 8601 được hiểu là khoảng thời gian từ updateTime của OrderUpdate (về cơ bản là "bây giờ") đến updateTime cộng với duration. Đừng sử dụng định dạng này trừ phi "bây giờ" thực sự là một kỳ vọng hợp lý.

Khoảng thời gian ISO 8601 được hiểu là khoảng thời gian từ thời điểm bắt đầu đến thời điểm kết thúc khoảng thời gian.

Bảng sau đây liệt kê các thuộc tính cho loại FoodOrderUpdateExtension:

Thuộc tính Loại Mô tả
@type Const

Loại của phần mở rộng này. Trường này luôn được đặt thành "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension".

Giá trị: type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension

estimatedFulfillmentTimeIso8601 String

Thời gian dự kiến đơn đặt hàng sẽ được giao hoặc sẵn sàng để đến lấy hàng. Chuỗi phải ở định dạng ISO 8601 và phải tương ứng với một khoảng thời gian thay vì một thời điểm cố định. Các quy ước được chấp nhận là: Khoảng thời gian, Thời lượng và Ngày/Giờ. Bạn có thể gửi trường này trong SubmitOrderResponseMessage hoặc AsyncOrderUpdateRequestMessage khi có thông tin hoặc có thay đổi, chẳng hạn như đến sớm hoặc đến trễ.

Ví dụ: 2017-07-17T13:00:00Z/2017-07-17T13:30:00Z

foodOrderErrors List<FoodOrderError>

Mô tả các lỗi xảy ra sau khi đặt hàng. Bạn nên có một lỗi cho mỗi giỏ hàng hoặc mỗi mặt hàng. Sử dụng FoodOrderUpdateExtension.FoodOrderErrors cho mọi lỗi không thuộc phạm vi của RejectionInfo.

Phải có ít nhất 1 mục.

Ví dụ sau đây cho thấy một phần tử FoodOrderUpdateExtension:

Ví dụ 1

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

Ví dụ 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

Bảng sau đây liệt kê các thuộc tính cho loại FulfillmentInfo:

Thuộc tính Loại Mô tả
Bạn phải có đúng một trong các nhóm thuộc tính sau.
deliveryTime Nhóm 1 Dấu thời gian theo tiêu chuẩn ISO

Sử dụng estimatedFulfillmentTimeIso8601 trong thông báo FoodOrderingUpdateExtension

pickupTime Nhóm 2 Dấu thời gian theo tiêu chuẩn ISO

Sử dụng estimatedFulfillmentTimeIso8601 trong thông báo FoodOrderingUpdateExtension

Ví dụ sau đây cho thấy một phần tử FulfillmentInfo:

Ví dụ 1

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

Ví dụ 2

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

InTransitInfo

Bảng sau đây liệt kê các thuộc tính cho loại InTransitInfo:

Thuộc tính Loại Mô tả
updatedTime Dấu thời gian theo tiêu chuẩn ISO

Sử dụng estimatedFulfillmentTimeIso8601 trong thông báo FoodOrderingUpdateExtension

Ví dụ sau đây cho thấy một phần tử InTransitInfo:

Ví dụ:

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

LineItemUpdate

Bảng sau đây liệt kê các thuộc tính cho loại LineItemUpdate:

Thuộc tính Loại Mô tả
orderState OrderState
price Price
reason String

Lý do thay đổi. Bắt buộc đối với các thay đổi về giá.

Ví dụ sau đây cho thấy một phần tử LineItemUpdate:

Ví dụ:

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

OpenUrlAction

Bảng sau đây liệt kê các thuộc tính cho loại OpenUrlAction:

Thuộc tính Loại Mô tả
url String

Bắt buộc.

Hành động được kích hoạt bằng cách nhấp hoặc chạm vào nút. Danh sách các tiền tố hiện hành phụ thuộc vào orderManagementActionType. "EMAIL": Tiền tố phải là "mailto". "CALL": Tiền tố phải là "tel". "CUSTOMER_SERVICE": Tiền tố phải là "mailto", "tel", "http" hoặc "https".

Ví dụ: https://www.google.com

OrderManagementAction

Tính năng quản lý đơn đặt hàng cho phép người dùng nhận được dịch vụ hỗ trợ sau khi đặt hàng và phải được gửi trong mỗi OrderUpdate trong đơn đặt hàng gửi AppResponse và mỗi AsyncOrderUpdateRequestMessage tiếp theo. Các hành động quản lý đơn đặt hàng được gửi cho một đơn đặt hàng cụ thể có thể khác nhau tuỳ theo trạng thái.

Ví dụ: ở trạng thái "CREATED" (ĐÃ TẠO), CUSTOMER_SERVICE có thể tham chiếu đến số điện thoại hỗ trợ khách hàng của bạn. Sau đó, ở trạng thái "ĐÃ XÁC NHẬN", CUSTOMER_SERVICE có thể thay đổi thành số điện thoại của nhà hàng nếu đó là đầu mối liên hệ tốt nhất cho khách hàng. Tương tự, sau khi đơn đặt hàng ở trạng thái "ĐÃ THỰC HIỆN", CUSTOMER_SERVICE có thể tham chiếu đến địa chỉ email hỗ trợ của bạn.

Bảng sau đây liệt kê các thuộc tính cho loại OrderManagementAction:

Thuộc tính Loại Mô tả
type OrderManagementActionType

Bắt buộc.

button Button

Bắt buộc.

Ví dụ sau đây cho thấy một phần tử OrderManagementAction:

Ví dụ 1

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

Ví dụ 2

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

OrderManagementActionType

Xác định các loại liên quan đến OrderManagementAction.

Loại OrderManagementActionType có thể có các giá trị sau:

  • CUSTOMER_SERVICE: Email và/hoặc số điện thoại liên hệ của bộ phận dịch vụ khách hàng sẽ xuất hiện trên trang xác nhận đơn đặt hàng. Đây là thông tin bắt buộc. Tiền tố openUrlAction.url phải là "mailto", "tel", "http" hoặc "https".
  • EMAIL: Chỉ hành động gửi email trên trang chi tiết đơn đặt hàng. Tiền tố openUrlAction.url phải là "mailto".
  • CALL_DRIVER: Chỉ gọi hành động trên trang chi tiết đơn đặt hàng. Tiền tố openUrlAction.url phải là "tel".
  • CALL_RESTAURANT: Chỉ gọi hành động trên trang chi tiết đơn đặt hàng. Tiền tố openUrlAction.url phải là "tel".

OrderState

Trạng thái hiện tại của đơn đặt hàng. Mỗi giá trị state của OrderState cũng tương ứng với một trạng thái mua hàng trên myaccount.google.com.

Bảng sau đây liệt kê các thuộc tính cho loại OrderState:

Thuộc tính Loại Mô tả
state OrderStateEnum

Bắt buộc.

label String

Bắt buộc.

Chuỗi hiển thị mà người dùng nhìn thấy cho trạng thái. Sử dụng cách viết hoa đầu câu.

Ví dụ: Your order has been received

Ví dụ sau đây cho thấy một phần tử OrderState:

Ví dụ:

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

OrderStateEnum

Xác định các loại liên quan đến OrderState.

Loại OrderStateEnum có thể có các giá trị sau:

  • CREATED: Đơn đặt hàng do nhà tích hợp tạo và đang chờ nhà cung cấp xác nhận. Tương ứng với trạng thái mua hàng "Đã đặt hàng".
  • CONFIRMED: Đơn đặt hàng đã được nhà cung cấp xác nhận và đang hoạt động. Tương ứng với trạng thái mua hàng "Đã chấp nhận".
  • REJECTED: Đơn đặt hàng bị nhà tích hợp hoặc nhà cung cấp từ chối. Tương ứng với trạng thái mua hàng "Bị từ chối".
  • CANCELLED: Người dùng đã huỷ đơn đặt hàng. Tương ứng với trạng thái mua hàng "Đã huỷ".
  • IN_PREPARATION: Đang chuẩn bị đồ ăn. Tương ứng với trạng thái giao dịch mua "Trạng thái không xác định".
  • READY_FOR_PICKUP: Bạn có thể đến lấy đồ ăn. Tương ứng với trạng thái mua hàng "Có thể đến lấy hàng".
  • IN_TRANSIT: Đơn đặt hàng đang được giao. Tương ứng với trạng thái mua "Đang xử lý".
  • FULFILLED: Người dùng đã nhận được hàng đã đặt. Tương ứng với trạng thái mua hàng "Đã lấy hàng".

Biên Lai

Gửi loại này trong một đơn đặt hàng gửi AppResponse, trong đó OrderState là "CONFIRMED", "FULFILLED" hoặc "IN_TRANSIT". Gửi biên nhận tại thời điểm userVisibleOrderId có sẵn. Bạn không cần tiếp tục gửi biên nhận trong các bản cập nhật tiếp theo.

Bảng sau đây liệt kê các thuộc tính cho loại Receipt:

Thuộc tính Loại Mô tả
userVisibleOrderId String

Bắt buộc.

Bắt buộc nếu đơn đặt hàng có trạng thái là "CONFIRMED" (ĐÃ XÁC NHẬN), "IN_TRANSIT" (ĐANG TRÊN ĐƯỜNG) hoặc "FULFILLED" (ĐÃ THỰC HIỆN). Trường này là mã nhận dạng duy nhất dành cho người dùng cho đơn đặt hàng này (thường là mã đơn đặt hàng của nhà hàng), xuất hiện trong cả biên nhận của trình tích hợp và thẻ đơn đặt hàng của Google. Người dùng phải có thể sử dụng mã này để tham chiếu đến đơn đặt hàng của họ khi yêu cầu dịch vụ khách hàng với nhà cung cấp và nhà tích hợp. Bạn chỉ cần cung cấp mã nhận dạng này một lần trong bất kỳ OrderUpdate nào. Cho đến khi được cung cấp, actionOrderId là userVisibleOrderId. Ví dụ: bạn có thể không có userVisibleOrderId cho đến khi nhà hàng xác nhận đơn đặt hàng. Sau khi xác nhận, bạn phải gửi AsyncOrderUpdateRequestMessage với OrderUpdate và Receipt.

Ví dụ sau đây cho thấy một phần tử Receipt:

Ví dụ:

{
  "userVisibleOrderId": "userVisibleId1234"
}

RejectionInfo

Bảng sau đây liệt kê các thuộc tính cho loại RejectionInfo:

Thuộc tính Loại Mô tả
type RejectionType

Bắt buộc.

reason String

Lý do từ chối được dùng để ghi nhật ký nội bộ. Người dùng sẽ không thấy trường này.

Ví dụ sau đây cho thấy một phần tử RejectionInfo:

Ví dụ:

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

RejectionType

Loại RejectionType có thể có các giá trị sau:

  • INELIGIBLE: Người dùng không đủ điều kiện do các vấn đề liên quan đến chính sách hoặc rủi ro.
  • PAYMENT_DECLINED: Đã xảy ra vấn đề khi xử lý khoản thanh toán.
  • UNAVAILABLE_SLOT: Không thể thực hiện đơn đặt hàng theo thời gian đặt trước do DeliveryInfo hoặc PickupInfo chỉ định.
  • PROMO_NOT_APPLICABLE: Chương trình khuyến mãi gặp vấn đề.
  • UNKNOWN: Mọi lý do khác.

Các loại liên quan đến thanh toán

Phần này mô tả các loại liên quan đến thanh toán dùng để thực hiện đơn đặt món ăn.

ActionProvidedPaymentOptions

Yêu cầu đối với phương thức thanh toán do hành động cung cấp.

Bảng sau đây liệt kê các thuộc tính cho loại ActionProvidedPaymentOptions:

Thuộc tính Loại Mô tả
paymentType PaymentType

Bắt buộc.

displayName String

Bắt buộc.

Tên của phương thức thanh toán xuất hiện trên biên nhận.

Ví dụ: Taco Points Total

onFulfillmentPaymentData OnFulfillmentPaymentData

Dữ liệu bổ sung cho paymentType "ON_FULFILLMENT". Ví dụ: bạn có thể sử dụng trường này để chỉ định xem phương thức thanh toán bằng tiền mặt hay thẻ có được hỗ trợ trong quá trình thực hiện đơn đặt hàng hay không.

Ví dụ sau đây cho thấy một phần tử ActionProvidedPaymentOptions:

Ví dụ:

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

AllowedAuthMethods

Loại AllowedAuthMethods có thể có các giá trị sau:

  • PAN_ONLY: Phương thức xác thực liên kết với thẻ thanh toán được lưu trữ trong hồ sơ Tài khoản Google của người dùng. Dữ liệu thanh toán được trả về bao gồm số tài khoản cá nhân (PAN) cùng tháng và năm hết hạn.

AllowedCardNetworks

Loại AllowedCardNetworks có thể có các giá trị sau:

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

BillingAddressParameters

Đối tượng này cho phép bạn đặt các trường bổ sung sẽ được trả về cho địa chỉ thanh toán được yêu cầu.

Bảng sau đây liệt kê các thuộc tính cho loại BillingAddressParameters:

Thuộc tính Loại Mô tả
format String

Bạn phải điền định dạng địa chỉ thanh toán để hoàn tất giao dịch. TỐI THIỂU: Tên, mã quốc gia và mã bưu chính. ĐẦY ĐỦ: Tên, địa chỉ đường phố, địa phương, khu vực, mã quốc gia và mã bưu chính.

Ví dụ sau đây cho thấy một phần tử BillingAddressParameters:

Ví dụ 1

{
  "format": "MIN"
}

Ví dụ 2

{
  "format": "FULL"
}

CardParameters

Sử dụng đối tượng này để định cấu hình tính năng hỗ trợ của trang web cho API Google Pay.

Bảng sau đây liệt kê các thuộc tính cho loại CardParameters:

Thuộc tính Loại Mô tả
allowedAuthMethods List<Const>

Bắt buộc.

Các trường được hỗ trợ để xác thực giao dịch thẻ.

Phải có ít nhất 1 mục.

allowedCardNetworks List<AllowedCardNetworks>

Bắt buộc.

Một hoặc nhiều mạng thẻ mà bạn hỗ trợ và cũng được Google Pay API hỗ trợ.

Phải có ít nhất 1 mục.

billingAddressRequired Boolean

Đặt thành đúng nếu bạn yêu cầu địa chỉ thanh toán. Chỉ yêu cầu địa chỉ thanh toán nếu cần để xử lý giao dịch. Các yêu cầu dữ liệu bổ sung có thể làm tăng sự phiền hà trong quy trình thanh toán và dẫn đến tỷ lệ chuyển đổi thấp hơn.

billingAddressParameters BillingAddressParameters

Các trường dự kiến được trả về nếu billingAddressRequired được đặt thành true.

cvcRequired Boolean

Đặt thành đúng nếu sử dụng TimesofMoney, sai cho tất cả các trình xử lý thanh toán khác.

Ví dụ sau đây cho thấy một phần tử CardParameters:

Ví dụ 1

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

Ví dụ 2

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

GoogleProvidedPaymentInstrument

Bảng sau đây liệt kê các thuộc tính cho loại GoogleProvidedPaymentInstrument:

Thuộc tính Loại Mô tả
instrumentToken String

Bắt buộc.

Chuỗi được mã hoá bằng cơ sở 64 chứa mã thông báo thanh toán để tính phí người dùng bằng một trình xử lý Google Pay tham gia, theo GoogleProvidedPaymentOptions đã chỉ định trước đó.

billingAddress PostalAddress

Địa chỉ thanh toán.

Ví dụ sau đây cho thấy một phần tử GoogleProvidedPaymentInstrument:

Ví dụ:

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

GoogleProvidedPaymentOptions

Yêu cầu đối với phương thức thanh toán do Google cung cấp.

Bảng sau đây liệt kê các thuộc tính cho loại GoogleProvidedPaymentOptions:

Thuộc tính Loại Mô tả
facilitationSpecification String

JSON PaymentDataRequest dưới dạng chuỗi. Sử dụng đối tượng này để định cấu hình tính năng hỗ trợ của trang web cho API Google Pay.

supportedCardNetworks List<SupportedCardNetworks>

Thay vào đó, hãy sử dụng facilitationSpecification. Loại mạng thẻ mà đại lý hỗ trợ.

Trường này không còn được dùng nữa.

prepaidCardDisallowed Boolean

Thay vào đó, hãy sử dụng facilitationSpecification. Liệu thẻ trả trước có được phép làm phương thức thanh toán hay không.

Trường này không còn được dùng nữa.

billingAddressRequired Boolean

Thay vào đó, hãy sử dụng facilitationSpecification. Liệu có bắt buộc phải có địa chỉ thanh toán hay không.

Trường này không còn được dùng nữa.

tokenizationParameters TokenizationParameters

Trường này không còn được dùng nữa.

Ví dụ sau đây cho thấy một phần tử GoogleProvidedPaymentOptions:

Ví dụ 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\"}}"
}

Ví dụ 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
}

Ví dụ 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

Sử dụng đối tượng này để định cấu hình tính năng hỗ trợ của trang web cho API Google Pay.

Bảng sau đây liệt kê các thuộc tính cho loại MerchantInfo:

Thuộc tính Loại Mô tả
merchantId String

Mã nhận dạng người bán của Google do Google Pay cấp cho bạn.

merchantName String

Bắt buộc.

Tên người bán được mã hoá dưới dạng UTF-8. Tên người bán được hiển thị trong trang thanh toán.

OnFulfillmentPaymentData

Sử dụng đối tượng này để gửi dữ liệu bổ sung cho PaymentType "ON_FULFILLMENT".

Bảng sau đây liệt kê các thuộc tính cho loại OnFulfillmentPaymentData:

Thuộc tính Loại Mô tả
supportedPaymentOptions List<PaymentOptionsEnums>

Danh sách các phương thức thanh toán mà người dùng có thể sử dụng tại thời điểm thực hiện đơn đặt hàng.

Ví dụ sau đây cho thấy một phần tử OnFulfillmentPaymentData:

Ví dụ:

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

Tham số

Xác định các loại liên quan đến TokenizationParameters.

Bảng sau đây liệt kê các thuộc tính cho loại Parameters:

Thuộc tính Loại Mô tả
gateway String

Bắt buộc.

Ví dụ: braintree

gatewayMerchantId String
[additionalKey: string] String Các cặp khoá-giá trị khác

Ví dụ sau đây cho thấy một phần tử Parameters:

Ví dụ 1

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

Ví dụ 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

Sử dụng đối tượng này để định cấu hình tính năng hỗ trợ của trang web cho API Google Pay.

Bảng sau đây liệt kê các thuộc tính cho loại PaymentDataRequest:

Thuộc tính Loại Mô tả
apiVersion Const

Bắt buộc.

Phiên bản API chính.

Giá trị: 2

apiVersionMinor Const

Bắt buộc.

Phiên bản API nhỏ.

Giá trị: 0

merchantInfo MerchantInfo

Bắt buộc.

(Mã người bán Google Pay) Thông tin về người bán yêu cầu dữ liệu thanh toán.

allowedPaymentMethods List<PaymentMethod>

Bắt buộc.

Chỉ định hỗ trợ cho một hoặc nhiều phương thức thanh toán mà API Google Pay hỗ trợ.

transactionInfo TransactionInfo

Bắt buộc.

Thông tin chi tiết về việc uỷ quyền giao dịch dựa trên việc người dùng có đồng ý với giao dịch hay không. Trường này bao gồm tổng giá và trạng thái giá.

Ví dụ sau đây cho thấy một phần tử PaymentDataRequest:

Ví dụ:

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

Thông tin liên quan đến việc thanh toán cho một đơn đặt hàng.

Bảng sau đây liệt kê các thuộc tính cho loại PaymentInfo:

Thuộc tính Loại Mô tả
displayName String

Bắt buộc.

Tên hiển thị cho người dùng của phương thức thanh toán sẽ xuất hiện trên biên nhận.

paymentType PaymentType

Bắt buộc.

googleProvidedPaymentInstrument GoogleProvidedPaymentInstrument

Mã thông báo mà hành động có thể sử dụng. Chỉ chỉ định thông tin này nếu bạn đã chỉ định GoogleProvidedPaymentOptions làm phương thức thanh toán trong CheckoutResponseMessage.

Ví dụ sau đây cho thấy một phần tử PaymentInfo:

Ví dụ 1

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

Ví dụ 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

Sử dụng đối tượng này để định cấu hình tính năng hỗ trợ của trang web cho API Google Pay.

Bảng sau đây liệt kê các thuộc tính cho loại PaymentMethod:

Thuộc tính Loại Mô tả
type Const

Bắt buộc.

Giá trị nhận dạng ngắn cho phương thức thanh toán được hỗ trợ. Hiện chỉ hỗ trợ CARD.

Giá trị: CARD

parameters CardParameters

Bắt buộc.

Các tham số cần thiết để định cấu hình loại phương thức thanh toán được cung cấp.

tokenizationSpecification TokenizationSpecification

Bắt buộc.

Định cấu hình tài khoản hoặc nhà cung cấp giải mã để nhận thông tin thanh toán. Thuộc tính này là bắt buộc đối với phương thức thanh toán bằng THẺ.

Ví dụ sau đây cho thấy một phần tử PaymentMethod:

Ví dụ:

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

PaymentOptions

Bảng sau đây liệt kê các thuộc tính cho loại PaymentOptions:

Thuộc tính Loại Mô tả
Bạn phải có đúng một trong các nhóm thuộc tính sau.
googleProvidedOptions Nhóm 1 GoogleProvidedPaymentOptions

Loại trừ lẫn nhau với actionProvidedOptions. Sử dụng thông tin này để thanh toán trực tuyến bằng gPay.

actionProvidedOptions Nhóm 2 ActionProvidedPaymentOptions

Loại trừ lẫn nhau với googleProvidedOptions. Sử dụng phương thức này cho phương thức "trả tiền khi nhận hàng" hoặc "trả tiền khi thực hiện đơn hàng".

Ví dụ sau đây cho thấy một phần tử PaymentOptions:

Ví dụ 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\"}}"
  }
}

Ví dụ 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\"}}"
  }
}

Ví dụ 3

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

PaymentOptionsEnums

Loại PaymentOptionsEnums có thể có các giá trị sau:

  • Cash
  • Card
  • UPI
  • Paytm

PaymentType

Loại PaymentType có thể có các giá trị sau:

  • PAYMENT_CARD: Đối với GoogleProvidedPaymentOptions.
  • ON_FULFILLMENT: Đối với ActionProvidedPaymentOptions.

SupportedCardNetworks

Xác định các loại liên quan đến GoogleProvidedPaymentOptions.

Loại SupportedCardNetworks có thể có các giá trị sau:

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

TokenizationParameters

Xác định các loại liên quan đến GoogleProvidedPaymentOptions.

Bảng sau đây liệt kê các thuộc tính cho loại TokenizationParameters:

Thuộc tính Loại Mô tả
tokenizationType Enum [ "UNSPECIFIED_TOKENIZATION_TYPE", "PAYMENT_GATEWAY" ]

Bắt buộc.

Thay vào đó, hãy sử dụng facilitationSpecification. Loại mã thông báo được chấp nhận.

parameters Parameters

Thay vào đó, hãy sử dụng facilitationSpecification.

TokenizationSpecification

Đối tượng này cho phép bạn định cấu hình một tài khoản để nhận thông tin thanh toán có tính phí.

Bảng sau đây liệt kê các thuộc tính cho loại TokenizationSpecification:

Thuộc tính Loại Mô tả
type Const

Bắt buộc.

parameters Parameters

Bắt buộc.

Ví dụ sau đây cho thấy một phần tử TokenizationSpecification:

Ví dụ 1

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

Ví dụ 2

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

TransactionInfo

Đối tượng này mô tả một giao dịch xác định khả năng thanh toán của người thanh toán. Phương thức này dùng để hiển thị hộp thoại uỷ quyền thanh toán.

Bảng sau đây liệt kê các thuộc tính cho loại TransactionInfo:

Thuộc tính Loại Mô tả
currencyCode String

Bắt buộc.

Mã tiền tệ ở dạng chữ cái theo tiêu chuẩn ISO 4217.

transactionId String

Mã nhận dạng duy nhất giúp xác định một lượt thử thực hiện giao dịch. Người bán có thể sử dụng một mã nhận dạng hiện có hoặc tạo một mã nhận dạng cụ thể cho các lần thử giao dịch bằng Google Pay. Trường này là bắt buộc khi bạn gửi lệnh gọi lại đến API Sự kiện giao dịch của Google.

totalPriceStatus Const

Bắt buộc.

Sử dụng "ESTIMATED" (ƯỚC CHÍNH) làm giá trị mặc định. Tổng giá có thể điều chỉnh dựa trên thông tin chi tiết của phản hồi, chẳng hạn như thuế bán hàng được thu dựa trên địa chỉ thanh toán.

Giá trị: ESTIMATED

totalPrice String

Bắt buộc.

Tổng giá trị tiền tệ của giao dịch, có độ chính xác thập phân không bắt buộc là hai chữ số thập phân. Trường này phải có cùng giá trị với cart.totalPrice.

Ví dụ sau đây cho thấy một phần tử TransactionInfo:

Ví dụ:

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