Базовые типы
Корзина
Содержит подробную информацию о заказе, а также о том, является ли запрос самовывозом или доставкой. В корзине также указаны сведения о доставке, чаевые и адрес доставки. ОбъектCart
определен в Checkout AppRequest
Вы включаете копию корзины в свой Checkout AppResponse
В следующей таблице перечислены свойства типа Cart
:
Свойство | Тип | Описание | |
---|---|---|---|
@type | Конст | Тип этого объекта. Опустите это поле, если родительский объект Cart является частью ProposeOrder. Значение: | |
id | Нить | Необязательный идентификатор корзины. | |
merchant | Merchant | Продавец, связанный с этой корзиной. | |
lineItems | Список< LineItem > | Необходимый. Список товаров или услуг, которые заказывает пользователь. Должно быть не менее 1 предмета . | |
promotions | Список< Promotion > | Акция, которая применяется в этой корзине. В настоящее время поддерживается только одна рекламная акция. | |
notes | Нить | Примечания к заказу или инструкции по доставке. | |
extension | FoodCartExtension | Определяет сведения о пользователе, например предпочтения выполнения. |
В следующем примере показан элемент Cart
:
Пример 1
{ "@type": "type.googleapis.com/google.actions.v2.orders.Cart", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }
Пример 2
{ "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }
Контакт
Указывается информация о лице, получающем заказ. Он доступен только вAppResponse
. В следующей таблице перечислены свойства типа Contact
:
Свойство | Тип | Описание | |
---|---|---|---|
displayName | Нить | Имя человека, получающего заказ, как вы хотите, чтобы оно отображалось. Используйте это поле, если имя и фамилия не указаны. Пример: | |
email | Нить | Адрес электронной почты лица, получившего заказ. Пример: | |
firstName | Нить | Имя лица, получившего заказ. Пример: | |
lastName | Нить | Фамилия лица, получившего заказ. Пример: | |
phoneNumber | Нить | Номер телефона лица, получающего заказ, включая код страны. Пример: | |
emailVerified | логическое значение | Указывает, вошел ли человек, получающий заказ, в свою учетную запись Google. |
В следующем примере показан элемент Contact
:
Пример
{ "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" }
CustomPushMessage
СодержитOrderUpdate
для запроса. В следующей таблице перечислены свойства типа CustomPushMessage
:
Свойство | Тип | Описание | |
---|---|---|---|
orderUpdate | OrderUpdate | Необходимый. Обновлена информация по заказу. |
В следующем примере показан элемент CustomPushMessage
:
Пример
{ "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "IN_TRANSIT", "label": "Order is on the way" }, "inTransitInfo": { "updatedTime": "2017-07-17T12:00:00Z" }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } } ], "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } }
Информация о доставке
В следующей таблице перечислены свойства типа DeliveryInfo
:
Свойство | Тип | Описание | |
---|---|---|---|
deliveryTimeIso8601 | Нить | Расчетное время доставки в формате отметки времени ISO 8601: "{год}-{месяц}-{день}T{час}:{мин}:{сек}[.{frac_sec}]Z" или в формате продолжительности: "P( n)Y(n)M(n)DT(n)H(n)M(n)S». Например, PT90M соответствует продолжительности 90 минут. Значение по умолчанию «PT0M» указывает на то, что предпочтительное время доставки — как можно скорее. Ссылка: https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations. Используйте это, чтобы обновить расчетное время доставки во время ответа на оформление заказа. Пример: |
В следующем примере показан элемент DeliveryInfo
:
Пример
{ "deliveryTimeIso8601": "PT90M" }
Отказ от ответственности
В следующей таблице перечислены свойства типа Disclaimer
:
Свойство | Тип | Описание | |
---|---|---|---|
predefinedMessage | PredefinedMessage | Необходимый. Чтобы показывать предопределенные сообщения об отказе от ответственности во время оформления заказа. | |
feeAmount | Money | Партнер взимает с продавца комиссию в размере N за этот заказ. | |
feeAmountRange | FeeAmountRange | Партнер взимает с ресторана комиссию в размере от N до M за заказ. | |
feePercent | Число | Партнер взимает с продавца комиссию в размере N% за этот заказ. | |
feePercentRange | FeePercentRange | Партнер взимает с продавца комиссию от N% до M% за заказ. |
В следующем примере показан элемент Disclaimer
:
Пример 1
{ "predefinedMessage": "NEW_YORK_DELIVERY_FEE_TIP_DISCLAIMER" }
Пример 2
{ "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE" }
Пример 3
{ "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE", "feePercent": 25 }
Пример 4
{ "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE", "feePercentRange": { "minFeePercent": 20, "maxFeePercent": 30 } }
Пример 5
{ "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE", "feeAmount": { "currencyCode": "AUD", "units": 2, "nanos": 500000000 } }
Пример 6
{ "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE", "feeAmountRange": { "minFeeAmount": { "currencyCode": "AUD", "units": 2, "nanos": 500000000 }, "maxFeeAmount": { "currencyCode": "AUD", "units": 10, "nanos": 0 } } }
Ошибка
Тип Error
имеет следующие возможные значения:
-
CLOSED
: Ресторан закрыт на время заказа. -
NO_CAPACITY
: нет доступных мощностей для обслуживания (например, временное отключение из-за часов пик). -
NO_COURIER_AVAILABLE
: Невозможно обработать заказ из-за ограниченного количества сотрудников, занимающихся доставкой. -
REQUIREMENTS_NOT_MET
: не соблюдены ограничения для принятия заказа (например, минимальный размер корзины). -
UNAVAILABLE_SLOT
: заказ не может быть выполнен в заранее заданное время, указанное в DeliveryInfo или PickupInfo. -
OUT_OF_SERVICE_AREA
: заказ не может быть доставлен на адрес пользователя. -
PROMO_EXPIRED
: Не удалось подать заявку, поскольку срок действия акции истек. -
PROMO_NOT_APPLICABLE
: общий код ошибки для отслеживания всех случаев невозможности применения промо-кода, если ни одна из других ошибок промо-кода не подходит. -
PROMO_NOT_RECOGNIZED
: код купона не был распознан. -
PROMO_ORDER_INELIGIBLE
: текущий заказ не имеет права на этот купон. -
PROMO_USER_INELIGIBLE
: текущий пользователь не имеет права на получение этого купона. -
AVAILABILITY_CHANGED
: элемент больше недоступен или недостаточно элементов для выполнения запроса. -
INCORRECT_PRICE
: ошибки в стоимости комиссий или общей суммы. -
INVALID
: LineItem, FulfillmentOption или Promotion содержит недопустимые данные. -
NOT_FOUND
: LineItem, FulfillmentOption или Promotion не найдены. -
PRICE_CHANGED
: цена товара изменилась.
КомиссияСуммаДиапазон
В следующей таблице перечислены свойства типа FeeAmountRange
:
Свойство | Тип | Описание | |
---|---|---|---|
minFeeAmount | Money | Нижняя граница суммы взимаемой комиссии. | |
maxFeeAmount | Money | Верхняя граница суммы взимаемой комиссии.. |
Комиссия в процентахДиапазон
В следующей таблице перечислены свойства типа FeePercentRange
:
Свойство | Тип | Описание | |
---|---|---|---|
minFeePercent | Число | Нижняя граница взимаемого процента комиссии. | |
maxFeePercent | Число | Верхняя граница взимаемого процента комиссии. |
ЕдаКорзинаРасширение
Содержит сведения о пользователе, например настройки выполнения.
В следующей таблице перечислены свойства типа FoodCartExtension
:
Свойство | Тип | Описание | |
---|---|---|---|
@type | Конст | Тип этого расширения. Для этого поля всегда установлено значение «type.googleapis.com/google.actions.v2.orders.FoodCartExtension». Значение: | |
contact | Contact | Контактная информация лица, получившего заказ. Подробная информация включает имя человека, номер телефона и адрес электронной почты. | |
fulfillmentPreference | FulfillmentOption | Необходимый. Предпочтения выполнения пользователя. | |
location | Location | В сообщении CheckoutRequestMessage в этом поле указывается адрес доставки, который необходим, если заказ предназначен для доставки. Для заказов на вынос или самовывоз это поле не включается в сообщение. |
В следующем примере показан элемент FoodCartExtension
:
Пример 1
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } }
Пример 2
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" } }
FoodErrorExtension
Идентифицирует одну или несколько ошибок, произошедших при обработке запроса. В следующей таблице описаны поля типаFoodErrorExtension
. Ошибки можно отправлять в CheckoutResponse
. В следующей таблице перечислены свойства типа FoodErrorExtension
:
Свойство | Тип | Описание | |
---|---|---|---|
@type | Конст | Необходимый. Тип этого расширения. Значение: | |
foodOrderErrors | Список FoodOrderError | Необходимый. Массив объектов FoodOrderError, описывающих произошедшие ошибки. Рекомендуется одна ошибка на корзину или на товар. Должно быть не менее 1 предмета . | |
correctedProposedOrder | ProposedOrder | Новый предлагаемый заказ с исправлениями. Верните этот объект, если в исходном ProposeOrder есть исправимые ошибки. Например, изменение цены одной или нескольких позиций в корзине является исправимой ошибкой. Устранимые ошибки с действительным ProposeOrder переходят на стадию подтверждения, вместо того, чтобы требовать от пользователя просмотра своей корзины. | |
paymentOptions | PaymentOptions | Варианты оплаты по умолчанию, выбранные для пользователя. | |
additionalPaymentOptions | Список < PaymentOptions > | Пользователю доступны альтернативные варианты оплаты. |
В следующем примере показан элемент FoodErrorExtension
:
Пример
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension", "foodOrderErrors": [ { "error": "PRICE_CHANGED", "id": "sample_item_offer_id_1", "description": "The price has changed.", "updatedPrice": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, { "error": "PRICE_CHANGED", "id": "sample_item_offer_id_2", "description": "The price has changed.", "updatedPrice": { "currencyCode": "USD", "units": "8" } } ], "correctedProposedOrder": { "id": "sample_corrected_proposed_order_id_1", "otherItems": [ { "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }, { "name": "Delivery fee", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 500000000 } }, "type": "TAX" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "36", "nanos": 730000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] } }, "paymentOptions": { "googleProvidedOptions": { "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:publishableKey": "pk_live_stripe_client_key", "stripe:version": "2017-04-06" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "JCB", "VISA" ], "prepaidCardDisallowed": true } } }
Расширение FoodItemExtension
Определяет надстройки для продуктов питания.
В следующей таблице перечислены свойства типа FoodItemExtension
:
Свойство | Тип | Описание | |
---|---|---|---|
@type | Конст | Необходимый. Тип этого расширения. Для этого поля всегда установлено значение «type.googleapis.com/google.actions.v2.orders.FoodItemExtension». Значение: | |
options | Список FoodItemOption | Опцией может быть элемент дополнения или группа дополнений, содержащая набор дополнений. |
В следующем примере показан элемент FoodItemExtension
:
Пример
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1, "subOptions": [ { "id": "10239138", "offerId": "912391723", "name": "Fries", "price": { "currencyCode": "USD", "units": "2", "nanos": 230000000 }, "quantity": 1 } ] } ] }
FoodItemOption
В следующей таблице перечислены свойства типа FoodItemOption
:
Свойство | Тип | Описание | |
---|---|---|---|
id | Нить | Уникальный идентификатор, присвоенный Google. Когда вы отправляете FoodOrderError или AsyncOrderUpdateRequest, используйте это поле, чтобы различать случаи, когда корзина содержит более одного товара с одним и тем же OfferId. Пример: | |
offerId | Нить | Идентификатор предложения для товара. Пример: | |
name | Нить | Имя опции. Пример: | |
price | Money | ||
note | Нить | Примечание, связанное с опцией. | |
quantity | Число | Для опций, являющихся элементами, количество элементов. Пример: | |
subOptions | Список FoodItemOption | Подопции для опции, если таковые имеются. |
В следующем примере показан элемент FoodItemOption
:
Пример 1
{ "id": "10293231", "offerId": "1918491", "name": "Honey Mustard", "price": { "currencyCode": "USD", "units": "1", "nanos": 250000000 }, "quantity": 5 }
Пример 2
{ "id": "123166552", "offerId": "912849184", "name": "Make It A Meal", "price": { "currencyCode": "USD", "units": "3", "nanos": 730000000 }, "quantity": 1, "subOptions": [ { "id": "10239138", "offerId": "912391723", "name": "Fries", "price": { "currencyCode": "USD", "units": "2", "nanos": 230000000 }, "quantity": 1 }, { "id": "57159183", "offerId": "81837123", "name": "Drink", "price": { "currencyCode": "USD", "units": "3", "nanos": 130000000 }, "quantity": 1 } ] }
FoodOrderError
Содержит сведения об ошибках вCheckoutResponse
. В следующей таблице перечислены свойства типа FoodOrderError
:
Свойство | Тип | Описание | |
---|---|---|---|
error | Error | Необходимый. | |
id | Нить | Требуется, если Это поле является обязательным для ошибок на уровне элемента. Это присвоенный Google LineItem.id для пунктов меню или FoodItemOption.id для надстроек. | |
description | Нить | Описание ошибки. Это описание предназначено для внутреннего ведения журнала и не видно пользователям. | |
updatedPrice | Money | Требуется, если Новая цена товара, вызвавшего ошибку. Это требуется только в случае ошибки «PRICE_CHANGED». | |
availableQuantity | Целое число | Требуется, если Новое доступное количество товара, вызвавшего ошибку. Это требуется только в том случае, если ошибка «INVALID» или «NOT_FOUND». Значение должно быть равно нулю для «INVALID» и «NOT_FOUND». |
В следующем примере показан элемент FoodOrderError
:
Пример 1
{ "error": "CLOSED", "description": "This store is currently reachable. Please try again later." }
Пример 2
{ "error": "PRICE_CHANGED", "id": "french_fries", "description": "The price has changed.", "updatedPrice": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }
Расширение заказа еды
Содержит информацию о выполнении заказа.
В следующей таблице перечислены свойства типа FoodOrderExtension
:
Свойство | Тип | Описание | |
---|---|---|---|
@type | Конст | Тип этого расширения. Для этого поля всегда установлено значение «type.googleapis.com/google.actions.v2.orders.FoodOrderExtension». Значение: | |
availableFulfillmentOptions | Список < FulfillmentOption > | Представляет доступные варианты выполнения заказа. | |
optinForRemarketing | логическое значение | Запрос пользователя на участие в ваших маркетинговых каналах. По умолчанию вы не можете отправлять маркетинговый контент без согласия пользователя. Если параметр optinForRemarketing имеет значение true, вы можете подписаться на пользователя. Если параметр optinForRemarketing имеет значение false или отсутствует, вы должны сохранить статус подписки в своей системе как есть. Пользователи не могут отказаться от подписки через Google, только с помощью функции отказа от подписки, предоставляемой в ваших маркетинговых каналах. Этот флаг присутствует только в SubmitOrderRequestMessage. |
В следующем примере показан элемент FoodOrderExtension
:
Пример 1
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] }
Пример 2
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2020-08-20T11:41:00Z" } ], "optinForRemarketing": true }
Вариант выполнения
Вы можете использовать объектFulfillmentOption
следующими способами:- В
Checkout AppRequest
иSubmit AppRequest
Cart.extension.fulfillmentPreference
: сохраняет предпочтения пользователя (доставка или самовывоз). Цена всегда равна 0 при отправке запроса на оформление заказа. - В
Checkout AppResponse
ProposedOrder.extension.availableFulfillmentOptions
определяет один или несколько вариантов доставки (в настоящее время поддерживается только один вариант). Вы указываете опцию по умолчанию какLineItem
вProposedOrder.otherItems
.offerId
FulfillmentOption
должен соответствовать идентификаторуLineItem
, указанному вProposedOrder.otherItems
.
В следующей таблице перечислены свойства типа FulfillmentOption
:
Свойство | Тип | Описание | |
---|---|---|---|
offerId | Нить | Уникальный идентификатор этого варианта выполнения, если таковой имеется. | |
fulfillmentInfo | FulfillmentOptionInfo | Необходимый. | |
expiresAt | Временная метка ISO | Время, когда истекает срок действия этой возможности выполнения. | |
price | Money | Стоимость этого варианта. |
В следующем примере показан элемент FulfillmentOption
:
Пример
{ "offerId": "offer5", "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2019-05-02T00:00:00-07:00", "price": { "currencyCode": "USD", "units": "5", "nanos": 230000000 } }
Информация о выполнении параметра
Определяет информацию, связанную сFulfillmentInfo
. В следующей таблице перечислены свойства типа FulfillmentOptionInfo
:
Свойство | Тип | Описание | |
---|---|---|---|
Требуется ровно одна из следующих групп свойств. | |||
delivery | Группа 1 | DeliveryInfo | Если присутствует, указывает порядок доставки. |
pickup | Группа 2 | PickupInfo | Если присутствует, указывает на заказ самовывоза. |
Изображение
В следующей таблице перечислены свойства типа Image
:
Свойство | Тип | Описание | |
---|---|---|---|
sourceUrl | Нить | Необходимый. URL-адрес изображения. Минимальный размер изображения должен составлять 72x72 пикселя. Для достижения наилучших результатов используйте изображение размером не менее 216x216 пикселей. Изображение должно быть меньше 6 МБ и 64 мегапикселя. |
Линейный элемент
Определяет содержимое корзины (Cart.lineItems
) или дополнительные расходы за заказ ( ProposedOrder.otherItems
). В следующей таблице перечислены свойства типа LineItem
:
Свойство | Тип | Описание | |
---|---|---|---|
id | Нить | Требуется, если Для элемента строки в корзине (ProposeOrder.cart.lineItems[0].id) это уникальный идентификатор, созданный Google при создании заказа. Для LineItem в ProposeOrder (ProposeOrder.otherItems[0].id), который используется для добавления таких элементов, как плата за доставку и налоги, значение id определяется поставщиком. Например, в корзине есть два одинаковых товара с разными инструкциями по приготовлению (например, две средние пиццы с разными наборами начинок). В этом случае оба товара имеют одинаковый базовый идентификатор предложения. Когда вы отправляете запрос на обновление заказа, чтобы указать, что товар отклонен, используйте этот идентификатор в качестве средства устранения неоднозначности. Другими словами, если одна из пицц отклонена из-за отсутствия определенной начинки, идентификатор поможет Google определить, о каком товаре в заказе вы говорите. Это поле является обязательным, за исключением других элементов. | |
name | Нить | Необходимый. Название позиции. Это строка, видимая пользователю, и по возможности она должна содержать предложения (например, «Стоимость доставки», «Сбор за обслуживание», «Налог»). Для пользователей это поле сокращается до 100 символов. | |
type | LineItemType | Необходимый. | |
quantity | Целое число | Требуется, если Количество включенных предметов. Неприменимо к ProposeOrder.otherItems. | |
description | Нить | Описание предмета. | |
price | Price | Необходимый. Цена предмета или предметов. Это значение отражает общую цену всех товаров или услуг для этой позиции (другими словами, добавьте стоимость любых дополнений и умножьте на количество). Например: если количество товара стоимостью 10 долларов США равно 3, цена составит 30 долларов США. За одну пиццу с базовой ценой в 5 долларов и надбавкой в 1 доллар цена составит 6 долларов. Для двух пицц (количество = 2) с базовой ценой 5 долларов США и каждой с надбавкой в 1 доллар цена составит 12 долларов США. Каждый элемент строки должен иметь цену, даже если цена равна «0». Если типом является СКИДКА, укажите отрицательное значение (например, «-2»). | |
subLines | Список < SublineNote > | Необязательно и допустимо только в том случае, если тип «ОБЫЧНЫЙ». В этом поле в запросе на оформление заказа и запросе на отправку заказа может быть отправлено примечание пользователя по конкретному товару. Убедитесь, что продавец получил примечание после его предоставления. В запросе оно будет указано как subLines[0].note — единственное значение, указанное в этом поле, когда оно присутствует в запросе. Должно быть не более 1 предмета . | |
offerId | Нить | Требуется, если Идентификатор предложения MenuItem для элемента. Неприменимо к ProposeOrder.otherItems. | |
extension | FoodItemExtension | Определяет надстройки для продуктов питания. |
В следующем примере показан элемент LineItem
:
Пример 1
{ "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }
Пример 2
{ "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }
LineItemType
Тип LineItemType
имеет следующие возможные значения:
-
REGULAR
: Товарная позиция. Применимо к Cart.lineItems. -
TAX
: налоговая позиция. Применимо к ProposeOrder.otherItems. -
DISCOUNT
: позиция со скидкой. Обратите внимание, что цена должна быть отрицательной. Применимо к ProposeOrder.otherItems. -
GRATUITY
: позиция, посвященная безвозмездным выплатам. Обычно зарезервировано для SubmitOrderRequestMessage для подсказки, выбранной пользователем. Применимо к ProposeOrder.otherItems. -
DELIVERY
: позиция доставки. Применимо к ProposeOrder.otherItems. -
SUBTOTAL
: позиция промежуточного итога. Применимо к ProposeOrder.otherItems. -
FEE
: дополнительная позиция, не охваченная другими типами. Применимо к ProposeOrder.otherItems.
Расположение
Указывает адрес для заказа еды. ТипLocation
используется в Cart
только для указания места назначения заказа на доставку. Окончательное местоположение также присутствует в TransactionDecisionValue
, если пользователь размещает заказ. Для заказов, в которых указано самовывоз, пункт вообще не указывается (даже пустой). В следующей таблице перечислены свойства типа Location
:
Свойство | Тип | Описание | |
---|---|---|---|
coordinates | Coordinates | ||
formattedAddress | Нить | Отобразить адрес места. Пример: | |
postalAddress | PostalAddress | ||
zipCode | Нить | Пример: | |
city | Нить | Название города. Пример: | |
notes | Нить | Примечания о местоположении, например коды ворот. Оно должно быть не более 500 символов. Пример: |
В следующем примере показан элемент Location
:
Пример
{ "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" }
Торговец
В следующей таблице перечислены свойства типа Merchant
:
Свойство | Тип | Описание | |
---|---|---|---|
id | Нить | Идентификатор продавца. Если указано, соответствует идентификатору Restaurant.@id в ленте ресторанов. Пример: | |
name | Нить | Необходимый. Видимое пользователю имя продавца. Пример: |
В следующем примере показан элемент Merchant
:
Пример
{ "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }
Деньги
В следующей таблице перечислены свойства типа Money
:
Свойство | Тип | Описание | |
---|---|---|---|
currencyCode | Нить | Необходимый. Трехбуквенный код валюты в формате ISO 4217. Пример: | |
units | Нить | Целые единицы суммы. Например, если код валюты равен «USD», то единица «1» равна одному доллару США. Пример: | |
nanos | Целое число | Количество нано (10^-9) единиц суммы. Значение должно находиться в диапазоне от -999 999 999 до +999 999 999 включительно. Используйте следующие правила: Если единицы измерения положительны, наносы должны быть положительными или нулевыми. Если единицы измерения равны нулю, нанос может быть положительным, нулевым или отрицательным. Если единицы измерения отрицательные, нано должно быть отрицательным или нулевым. Например, -1,75 доллара США представлены как единицы = -1 и нано = -750 000 000. Пример: |
В следующем примере показан элемент Money
:
Пример 1
{ "currencyCode": "USD", "units": "36", "nanos": 730000000 }
Пример 2
{ "currencyCode": "EUR", "units": "10" }
Заказ
Содержит окончательный заказ, включая налоги, сборы и стоимость доставки, а также информацию об оплате. Этот объект получен вашим действием вSubmit AppRequest
. В следующей таблице перечислены свойства типа Order
:
Свойство | Тип | Описание | |
---|---|---|---|
finalOrder | ProposedOrder | Необходимый. Предлагаемый приказ, вызвавший приказ. | |
googleOrderId | Нить | Необходимый. Идентификатор заказа, присвоенный Google. Этот идентификатор должен быть стабильным на протяжении всего жизненного цикла заказа. Этот идентификатор не виден конечному пользователю. | |
orderDate | Временная метка ISO | Необходимый. Дата и время создания заказа. | |
paymentInfo | PaymentInfo | Необходимый. Платежная информация, соответствующая оплате данного заказа. |
В следующем примере показан элемент Order
:
Пример
{ "finalOrder": { "cart": { "notes": "Guest prefers their food to be hot when it is delivered.", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" } } }, "otherItems": [ { "name": "Service fee", "type": "FEE", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } } }, { "name": "Tax", "type": "TAX", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } } }, { "name": "Tip", "type": "GRATUITY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 590000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "23", "nanos": 710000000 } }, "id": "sample_final_order_id", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ], "optinForRemarketing": true } }, "googleOrderId": "sample_google_order_id", "orderDate": "2017-07-17T12:00:00Z", "paymentInfo": { "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" } }
Обновление заказа
В следующей таблице описаны поля типа OrderUpdate, который включен вAppResponse
. В следующей таблице перечислены свойства типа OrderUpdate
:
Свойство | Тип | Описание | |
---|---|---|---|
actionOrderId | Нить | Необходимый. Уникальный идентификатор заказа в системе интегратора, используемый для идентификации заказа, для которого отправляется обновление. Если для заказа «СОЗДАНО» в OrderUpdate не указан хотя бы один раз в поле «CREATED» полученный_user_visible_order_id, этим идентификатором будет введенный видимый идентификатор пользователя, отображаемый в карточке заказа Google. | |
orderState | OrderState | Необходимый. Новое состояние порядка. | |
lineItemUpdates | Карта<String, LineItemUpdate > | ||
updateTime | Временная метка ISO | Необходимый. Время обновления заказа. | |
orderManagementActions | Список< OrderManagementAction > | Действия после заказа, такие как обращение в службу поддержки и просмотр сведений о заказе. Должно быть не менее 1 и не более 6 предметов . | |
rejectionInfo | RejectionInfo | Требуется, если | |
cancellationInfo | CancellationInfo | Требуется, если | |
inTransitInfo | InTransitInfo | Это поле устарело. | |
fulfillmentInfo | FulfillmentInfo | Это поле устарело. | |
receipt | Receipt | Требуется, когда Укажите видимый пользователю идентификатор заказа в квитанции. | |
totalPrice | Price | Общая стоимость заказа. | |
infoExtension | FoodOrderUpdateExtension | Определяет более подробную информацию об обновлении заказа, например интервал предполагаемой доставки или самовывоза. |
В следующем примере показан элемент OrderUpdate
:
Пример
{ "actionOrderId": "sample_action_order_id", "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "41", "nanos": 600000000 } }, "lineItemUpdates": { "sample_item_id_1": { "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "reason": "This item has an updated price." } }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } }
Информация о самовывозе
В следующей таблице перечислены свойства типа PickupInfo
:
Свойство | Тип | Описание | |
---|---|---|---|
pickupTimeIso8601 | Нить | Расчетное время получения в формате отметки времени ISO 8601: "{год}-{месяц}-{день}T{час}:{мин}:{сек}[.{frac_sec}]Z" или в формате продолжительности: "P( n)Y(n)M(n)DT(n)H(n)M(n)S". Например, PT90M соответствует продолжительности 90 минут. Значение по умолчанию «PT0M» указывает на то, что предпочтительное время получения — как можно скорее. Ссылка: https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations. Используйте это, чтобы обновить расчетное время получения во время ответа на оформление заказа. Пример: |
В следующем примере показан элемент PickupInfo
:
Пример
{ "pickupTimeIso8601": "PT90M" }
Почтовый адрес
В следующей таблице перечислены свойства типа PostalAddress
:
Свойство | Тип | Описание | |
---|---|---|---|
regionCode | Нить | Необходимый. Двухбуквенный код страны. Пример: | |
postalCode | Нить | Почтовый индекс. Пример: | |
administrativeArea | Нить | Высшее административное подразделение, используемое для почтовых адресов страны или региона. Это может быть штат, провинция, область или префектура. Пример: | |
locality | Нить | Город или поселок для этого местоположения. В регионах мира, где населенные пункты не определены четко или не вписываются в эту структуру, не указывайте местоположение и вместо этого используйте поле AddressLines. Пример: | |
addressLines | Список<Строка> | Одна или несколько строк, которые можно использовать для указания почтового адреса. Это поле не следует изменять, поскольку оно может содержать неясные местоположения. Пример: | |
recipients | Список<Строка> | Список получателей заказа. Это поле доступно только в BillingAddress. |
В следующем примере показан элемент PostalAddress
:
Пример
{ "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }
Цена
В следующей таблице перечислены свойства типа Price
:
Свойство | Тип | Описание | |
---|---|---|---|
type | Enum [ "ESTIMATE", "ACTUAL" ] | Необходимый. Код промо-купона. | |
amount | Money | Необходимый. |
Повышение
В следующей таблице перечислены свойства типа Promotion
:
Свойство | Тип | Описание | |
---|---|---|---|
coupon | Нить | Необходимый. Код промо-купона. |
Предлагаемый заказ
В следующей таблице перечислены свойства типа ProposedOrder
:
Свойство | Тип | Описание | |
---|---|---|---|
id | Нить | Необязательный идентификатор предлагаемого заказа. | |
cart | Cart | Необходимый. Предметы пользователя. | |
otherItems | Список< LineItem > | Элементы, добавленные поставщиком, такие как стоимость доставки, другие сборы и налоги. OtherItems также может содержать чаевые и/или скидки, добавленные пользователем. Должно быть не более 10 предметов . | |
image | Image | Изображение, связанное с предлагаемым заказом. | |
totalPrice | Price | Необходимый. Общая стоимость предлагаемого заказа. | |
extension | FoodOrderExtension | Необходимый. Определяет информацию о выполнении заказов на еду. | |
disclaimers | Список < Disclaimer > | Соответствует сообщениям об отказе от ответственности, которые будут отображаться в пользовательском интерфейсе перед размещением заказа. |
В следующем примере показан элемент ProposedOrder
:
Пример
{ "id": "sample_proposed_order_id_1", "otherItems": [ { "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }, { "name": "Delivery fee", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 500000000 } }, "type": "TAX" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "36", "nanos": 730000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] } }
ПодстрокаПримечание
В следующей таблице перечислены свойства типа SublineNote
:
Свойство | Тип | Описание | |
---|---|---|---|
note | Нить | Необходимый. |
Временная метка
Дата и время в следующем формате"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
Значение решения транзакции
СодержитOrder
. В следующей таблице перечислены свойства типа TransactionDecisionValue
:
Свойство | Тип | Описание | |
---|---|---|---|
order | Order | Необходимый. Заказ оформляется с указанием платежных реквизитов. |
В следующем примере показан элемент TransactionDecisionValue
:
Пример
{ "order": { "finalOrder": { "cart": { "notes": "Guest prefers their food to be hot when it is delivered.", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" } } }, "otherItems": [ { "name": "Service fee", "type": "FEE", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } } }, { "name": "Tax", "type": "TAX", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } } }, { "name": "Tip", "type": "GRATUITY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 590000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "23", "nanos": 710000000 } }, "id": "sample_final_order_id", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ], "optinForRemarketing": true } }, "googleOrderId": "sample_google_order_id", "orderDate": "2017-07-17T12:00:00Z", "paymentInfo": { "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" } } }
Запрос на выполнение
AppRequest
В следующей таблице перечислены свойства типа AppRequest
:
Свойство | Тип | Описание | |
---|---|---|---|
isInSandbox | логическое значение | Указывает, выполняются ли последующие транзакции в изолированной среде. | |
conversation | Conversation | ||
inputs | Список < Input > | Необходимый. Содержит ожидаемые аргументы для оформления корзины. Должно быть ровно 1 предмет . |
В следующем примере показан элемент AppRequest
:
Пример 1
{ "isInSandbox": true, "inputs": [ { "intent": "actions.foodordering.intent.CHECKOUT", "arguments": [ { "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.Cart", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } } } ] } ] }
Пример 2
{ "isInSandbox": true, "inputs": [ { "intent": "actions.intent.TRANSACTION_DECISION", "arguments": [ { "transactionDecisionValue": { "order": { "finalOrder": { "cart": { "notes": "Guest prefers their food to be hot when it is delivered.", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" } } }, "otherItems": [ { "name": "Service fee", "type": "FEE", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } } }, { "name": "Tax", "type": "TAX", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } } }, { "name": "Tip", "type": "GRATUITY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 590000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "23", "nanos": 710000000 } }, "id": "sample_final_order_id", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ], "optinForRemarketing": true } }, "googleOrderId": "sample_google_order_id", "orderDate": "2017-07-17T12:00:00Z", "paymentInfo": { "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" } } } } ] } ] }
Оформить заказЗапросСообщение
CheckoutRequestMessage
— это AppRequest
с намерением actions.foodordering.intent.CHECKOUT
.ОтправитьЗаказЗапросСообщение
SubmitOrderRequestMessage
— это AppRequest
с намерением actions.foodordering.intent.TRANSACTION_DECISION
.Беседа
Conversation
уникален только для одного сеанса. При необходимости вы можете использовать его для связывания нескольких действий Checkout
и SubmitOrder
. В следующей таблице перечислены свойства типа Conversation
:
Свойство | Тип | Описание | |
---|---|---|---|
conversationId | Нить | Необходимый. Уникальный идентификатор беседы. |
В следующем примере показан элемент Conversation
:
Пример
{ "conversationId": "CQnJ7Z4i7UmvEZ9ph3AxyZRJ" }
Вход
Ожидаемые аргументы для оформления корзины.
В следующей таблице перечислены свойства типа Input
:
Свойство | Тип | Описание | |
---|---|---|---|
intent | Enum [ "actions.foodordering.intent.CHECKOUT", "actions.intent.TRANSACTION_DECISION" ] | Необходимый. Установите значение «actions.foodordering.intent.CHECKOUT» для сообщения с запросом на оформление заказа ИЛИ «actions.intent.TRANSACTION_DECISION» для сообщения с запросом на отправку заказа. | |
arguments | Список< Argument > | Необходимый. Содержит корзину для оформления заказа или заказ для размещения. Должно быть ровно 1 предмет . |
Аргумент
Содержит подробную информацию о продуктах питания, которые пользователь хочет проверить. Для оформления заказа применимо только расширение. Для отправки заказа применимо только значение транзакцииDecisionValue.
В следующей таблице перечислены свойства типа Argument
:
Свойство | Тип | Описание | |
---|---|---|---|
Требуется ровно одна из следующих групп свойств. | |||
extension | Группа 1 | Cart | Подробно описывает продукты питания, которые пользователь хочет проверить. |
transactionDecisionValue | Группа 2 | TransactionDecisionValue | Содержит заказ, который необходимо разместить, а также детали платежа. |
Ответ на выполнение
AppResponse
В следующей таблице перечислены свойства типа AppResponse
:
Свойство | Тип | Описание | |
---|---|---|---|
expectUserResponse | Конст | Установите значение «ложь». Значение: | |
finalResponse | FinalResponse | Необходимый. Содержит ваш ответ на оформление корзины. |
В следующем примере показан элемент AppResponse
:
Пример 1
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "checkoutResponse": { "proposedOrder": { "id": "sample_proposed_order_id_1", "otherItems": [ { "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }, { "name": "Delivery fee", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 500000000 } }, "type": "TAX" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "36", "nanos": 730000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] } }, "paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\": false }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" } }, "additionalPaymentOptions": [ { "actionProvidedOptions": { "paymentType": "ON_FULFILLMENT", "displayName": "Cash on delivery." } } ] } } } ] } } }
Пример 2
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "CUSTOMER_SERVICE", "button": { "title": "Call customer service", "openUrlAction": { "url": "tel:+18005554679" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } } } ] } } }
Пример 3
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "error": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension", "foodOrderErrors": [ { "error": "CLOSED", "description": "The restaurant is closed." } ] } } } ] } } }
Пример 4
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "checkoutResponse": { "proposedOrder": { "otherItems": [ { "name": "Delivery Fees", "subLines": [], "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "subLines": [], "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } }, "type": "TAX" }, { "name": "Promotion", "subLines": [], "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": 0 } }, "id": "OWG_ACTIVE_CODE", "type": "DISCOUNT" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "promotions": [ { "coupon": "OWG_ACTIVE_CODE" } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "14", "nanos": 860000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2018-04-10T01:20:08.471Z" } ] } }, "paymentOptions": { "googleProvidedOptions": { "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:publishableKey": "pk_live_stripe_client_key", "stripe:version": "2017-04-06" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "VISA", "JCB" ], "prepaidCardDisallowed": true, "billingAddressRequired": true } } } } } ] } } }
Оформить заказОтветСообщение
CheckoutResponseMessage
— это AppResponse
с checkoutResponse
или error
в StructuredResponse
.ОтправитьЗаказОтветСообщение
SubmitOrderResponseMessage
— это AppResponse
с orderUpdate
в StructuredResponse
.Окончательный ответ
Ваш ответ на оформление корзины или сообщение SubmitOrderRequestMessage.
В следующей таблице перечислены свойства типа FinalResponse
:
Свойство | Тип | Описание | |
---|---|---|---|
richResponse | RichResponse | Необходимый. Содержит ваш ответ на CheckoutRequestMessage или SubmitOrderRequestMessage. |
Оформить заказОтвет
В следующей таблице перечислены свойства типа CheckoutResponse
:
Свойство | Тип | Описание | |
---|---|---|---|
proposedOrder | ProposedOrder | Необходимый. Предлагаемый ордер для транзакции. | |
paymentOptions | PaymentOptions | Необходимый. Для пользователя выбран вариант оплаты по умолчанию. | |
additionalPaymentOptions | Список < PaymentOptions > | Пользователю доступны альтернативные варианты оплаты. |
В следующем примере показан элемент CheckoutResponse
:
Пример
{ "proposedOrder": { "id": "sample_proposed_order_id_1", "otherItems": [ { "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }, { "name": "Delivery fee", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 500000000 } }, "type": "TAX" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "36", "nanos": 730000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] } }, "paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\": false }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" } }, "additionalPaymentOptions": [ { "actionProvidedOptions": { "paymentType": "ON_FULFILLMENT", "displayName": "Cash on delivery." } } ] }
Элемент
Содержит ваш ответ на оформление корзины или SubmitOrderRequestMessage.
В следующей таблице перечислены свойства типа Item
:
Свойство | Тип | Описание | |
---|---|---|---|
structuredResponse | StructuredResponse | Необходимый. |
РичОтклик
Содержит ваш ответ на оформление корзины.
В следующей таблице перечислены свойства типа RichResponse
:
Свойство | Тип | Описание | |
---|---|---|---|
items | Список < Item > | Необходимый. Должно быть ровно 1 предмет . |
Структурированный ответ
Для CheckoutResponseMessage это может быть одно из следующих значений: CheckoutResponse Указывает на успешную проверку. ИЛИ FoodErrorExtension: указывает на ошибку во время оформления заказа. Ответ может включать исправленные ProposeOrder и PaymentOptions или сообщение об ошибке без PaymentOptions. Для SubmitOrderResponseMessage применим только orderUpdate.
В следующей таблице перечислены свойства типа StructuredResponse
:
Свойство | Тип | Описание | |
---|---|---|---|
Требуется ровно одна из следующих групп свойств. | |||
checkoutResponse | Группа 1 | CheckoutResponse | Проверенные товары плюс налоги и скидки. |
error | Группа 2 | FoodErrorExtension | В товарах корзины обнаружены ошибки. В зависимости от характера ошибки это свойство может включать исправленные ProposeOrder и PaymentOptions или просто сообщение об ошибке без PaymentOptions. |
orderUpdate | Группа 3 | OrderUpdate |
Асинхронное обновление заказов
В этом разделе описываются типы высокого уровня, которые составляют запросы и ответы типичного встроенного взаимодействия действий при заказе еды.Асинкордерупдатерекуестмессаже
Уведомляет пользователя об изменениях после отправки и подтверждения заказа. Например, вы можете уведомить пользователя о том, что заказ находится в пути или изменилась цена. Для получения дополнительной информации см. В следующей таблице перечислены свойства типа AsyncOrderUpdateRequestMessage
:
Свойство | Тип | Описание | |
---|---|---|---|
isInSandbox | логическое значение | Указывает, что заказ, для которого было отправлено это обновление, является платежом в песочнице. | |
customPushMessage | CustomPushMessage | Необходимый. Содержит OrderUpdate для запроса. |
В следующем примере показан элемент AsyncOrderUpdateRequestMessage
:
Пример
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "IN_TRANSIT", "label": "Order is on the way" }, "inTransitInfo": { "updatedTime": "2017-07-17T12:00:00Z" }, "updateTime": "2017-07-17T12:00:00Z", "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } } }
Асинкордерупдатеответмессаже
После успешной отправкиAsyncOrderUpdateRequestMessage
Google отвечает статусом HTTP 200 и пустым телом. Если обновление не удалось, Google ответит подробной информацией о том, почему обновление заказа не удалось.Типы обновления заказов
Кнопка
Определяет элемент пользовательского интерфейса, который можно добавить для обеспечения взаимодействия с пользователем.
В следующей таблице перечислены свойства типа Button
.
Свойство | Тип | Описание | |
---|---|---|---|
title | Нить | Необходимый. Метка дисплея. Используйте регистр предложений длиной не более 30 символов, чтобы обеспечить правильное отображение. Пример: | |
openUrlAction | OpenUrlAction | Необходимый. |
В следующем примере показан элемент Button
:
Пример
{ "title": "Send us feedback", "openUrlAction": { "url": "mailto:person@example.com" } }
Информация об отмене
В следующей таблице перечислены свойства типа CancellationInfo
:
Свойство | Тип | Описание | |
---|---|---|---|
reason | Нить | Необходимый. Отображаемая текстовая причина отклонения, когда OrderState.state имеет значение «ОТМЕНЕНО». Пример: |
В следующем примере показан элемент CancellationInfo
:
Пример
{ "reason": "Insufficient inventory" }
Расширение FoodOrderUpdateExtension
Этот тип предоставляет пользователю расчетный интервал времени, когда заказ будет доставлен или готов к выдаче. Отправляйте это расширение в OrderUpdate
всякий раз, когда информация доступна или изменилась с момента ее последней отправки.
Предоставьте консервативную оценку интервала выполнения, чтобы ожидания пользователей постоянно оправдывались. Например, если заказ будет доставлен сегодня в 13:00, вам следует отправить расчетный интервал, соответствующий изменениям в зависимости от условий движения, например сегодня с 12:45 до 13:15.
Длительность или временная метка ISO 8601 интерпретируется как интервал от updateTime
OrderUpdate
(по сути, «сейчас») до updateTime
плюс duration
. Не используйте этот формат, если «сейчас» не является разумным ожиданием.
Интервал ISO 8601 интерпретируется как интервал от начала до конца интервала.
В следующей таблице перечислены свойства типа FoodOrderUpdateExtension
:
Свойство | Тип | Описание | |
---|---|---|---|
@type | Конст | Тип этого расширения. Для этого поля всегда установлено значение «type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension». Значение: | |
estimatedFulfillmentTimeIso8601 | Нить | Расчетное время, когда заказ будет доставлен или готов к самовывозу. Строка должна быть в формате ISO 8601 и соответствовать интервалу, а не одному фиксированному времени. Приемлемые соглашения: интервалы, продолжительность и дата/время. Это поле можно отправить в SubmitOrderResponseMessage или AsyncOrderUpdateRequestMessage, когда информация станет доступной или произойдет изменение, например раннее или задержанное прибытие. Пример: | |
foodOrderErrors | Список FoodOrderError | Описывает ошибки, возникшие после заказа. Рекомендуется одна ошибка на корзину или на товар. Используйте FoodOrderUpdateExtension.FoodOrderErrors для любых ошибок, не охватываемых RejectionInfo. Должно быть не менее 1 предмета . |
В следующем примере показан элемент FoodOrderUpdateExtension
:
Пример 1
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" }
Пример 2
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "foodOrderErrors": [ { "error": "NO_CAPACITY", "description": "Sorry, the restaurant cannot take your order right now." } ] }
Информация о выполнении
В следующей таблице перечислены свойства типа FulfillmentInfo
:
Свойство | Тип | Описание | |
---|---|---|---|
Требуется ровно одна из следующих групп свойств. | |||
deliveryTime | Группа 1 | Временная метка ISO | Используйте AssessmentFulfillmentTimeIso8601 в сообщении FoodOrderingUpdateExtension. |
pickupTime | Группа 2 | Временная метка ISO | Используйте AssessmentFulfillmentTimeIso8601 в сообщении FoodOrderingUpdateExtension. |
В следующем примере показан элемент FulfillmentInfo
:
Пример 1
{ "deliveryTime": "2017-05-10T02:36:38.803Z" }
Пример 2
{ "pickupTime": "2019-12-26T07:24:27.803Z" }
ИнТранзитИнфо
В следующей таблице перечислены свойства типа InTransitInfo
:
Свойство | Тип | Описание | |
---|---|---|---|
updatedTime | Временная метка ISO | Используйте AssessmentFulfillmentTimeIso8601 в сообщении FoodOrderingUpdateExtension. |
В следующем примере показан элемент InTransitInfo
:
Пример
{ "updatedTime": "2017-05-10T02:36:38.803Z" }
LineItemUpdate
В следующей таблице перечислены свойства типа LineItemUpdate
:
Свойство | Тип | Описание | |
---|---|---|---|
orderState | OrderState | ||
price | Price | ||
reason | Нить | Причина изменения. Требуется для изменения цен. |
В следующем примере показан элемент LineItemUpdate
:
Пример
{ "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "5", "nanos": 500000000 } }, "reason": "Menu updated prices." }
Опенурлэкшн
В следующей таблице перечислены свойства типа OpenUrlAction
:
Свойство | Тип | Описание | |
---|---|---|---|
url | Нить | Необходимый. Действие инициируется нажатием или прикосновением к кнопке. Список применимых префиксов зависит от orderManagementActionType. «EMAIL»: префикс должен быть «mailto». «ЗВОНОК»: префикс должен быть «тел». «CUSTOMER_SERVICE»: префикс должен быть «mailto», «tel», «http» или «https». Пример: |
Управление заказамиДействие
Order management enables users to get post-order support and should be sent in each OrderUpdate
within the submit order AppResponse
and each subsequent AsyncOrderUpdateRequestMessage
Order management actions sent for a particular order can vary based on the state.
For example, in the "CREATED" state, CUSTOMER_SERVICE
might reference your customer support telephone. Then, in the "CONFIRMED" state, CUSTOMER_SERVICE
can change to the restaurant's telephone if that becomes the best point of contact for the customer. Similarly, once the order is in the "FULFILLED" state, CUSTOMER_SERVICE
can reference your support email addresss.
The following table lists the properties for the OrderManagementAction
type:
Свойство | Тип | Описание | |
---|---|---|---|
type | OrderManagementActionType | Required. | |
button | Button | Required. |
The following example shows a OrderManagementAction
element:
Example 1
{ "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }
Example 2
{ "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }
OrderManagementActionType
Defines types related toOrderManagementAction
. The OrderManagementActionType
type has the following possible values:
-
CUSTOMER_SERVICE
: Email and/or contact number of customer service to be shown on order confirmation page. This is required. openUrlAction.url prefix must be "mailto", "tel", "http", or "https". -
EMAIL
: Email action on order details page only. openUrlAction.url prefix must be "mailto". -
CALL_DRIVER
: Call action on order details page only. openUrlAction.url prefix must be "tel". -
CALL_RESTAURANT
: Call action on order details page only. openUrlAction.url prefix must be "tel".
OrderState
The current state of the order. Each state
value of OrderState
also corresponds to a purchase status on myaccount.google.com .
The following table lists the properties for the OrderState
type:
Свойство | Тип | Описание | |
---|---|---|---|
state | OrderStateEnum | Required. | |
label | String | Required. The user-visible display string for the state. Use sentence case. Example: |
The following example shows a OrderState
element:
Пример
{ "state": "CONFIRMED", "label": "Provider confirmed" }
OrderStateEnum
Defines types related toOrderState
. The OrderStateEnum
type has the following possible values:
-
CREATED
: Order created by integrator and waiting for confirmation by provider. Corresponds to the "Ordered" purchase status. -
CONFIRMED
: Order confirmed by provider and is active. Corresponds to the "Accepted" purchase status. -
REJECTED
: Order rejected by integrator or provider. Corresponds to the "Declined" purchase status. -
CANCELLED
: User cancelled the order. Corresponds to the "Cancelled" purchase status. -
IN_PREPARATION
: Food is being prepared. Corresponds to the "Status unknown" purchase status. -
READY_FOR_PICKUP
: Food is ready for pickup. Corresponds to the "Ready for pickup" purchase status. -
IN_TRANSIT
: Order is being delivered. Corresponds to the "In progress" purchase status. -
FULFILLED
: User received what was ordered. Corresponds to the "Picked up" purchase status.
Receipt
Send this type in a submit orderAppResponse
, where OrderState
is "CONFIRMED", "FULFILLED", or "IN_TRANSIT". Send receipt at the time when the userVisibleOrderId
becomes available. You don't need to keep sending the receipt in subsequent updates. The following table lists the properties for the Receipt
type:
Свойство | Тип | Описание | |
---|---|---|---|
userVisibleOrderId | String | Required. Required if the order is "CONFIRMED", "IN_TRANSIT", or "FULFILLED". This field is the single user-facing ID for this order (usually the restaurant's order ID), displayed in both the integrator's receipt and the Google order card. The user must be able to use this ID to reference their order for customer service with the provider and integrator. You only need to provide this ID one time in any given OrderUpdate. Until it is provided, the actionOrderId is the userVisibleOrderId. For example, you may not have a userVisibleOrderId until the order is confirmed by the restaurant. Once confirmed, you must then send an AsyncOrderUpdateRequestMessage with an OrderUpdate and a Receipt. |
The following example shows a Receipt
element:
Пример
{ "userVisibleOrderId": "userVisibleId1234" }
RejectionInfo
The following table lists the properties for the RejectionInfo
type:
Свойство | Тип | Описание | |
---|---|---|---|
type | RejectionType | Required. | |
reason | String | Reason for the rejection used for internal logging. This field is not visible to users. |
The following example shows a RejectionInfo
element:
Пример
{ "type": "PAYMENT_DECLINED", "reason": "There is an issue with payment processing." }
RejectionType
The RejectionType
type has the following possible values:
-
INELIGIBLE
: User is not eligible due to policy or risk-related concerns. -
PAYMENT_DECLINED
: There is an issue with payment processing. -
UNAVAILABLE_SLOT
: The order cannot be fulfilled at the order ahead time specified by DeliveryInfo or PickupInfo. -
PROMO_NOT_APPLICABLE
: There is an issue with the promotion. -
UNKNOWN
: Any other reason.
Payment-related types
This section describes the payment-related types used for food ordering fulfillment.ActionProvidedPaymentOptions
Requirements for an action-provided payment method.
The following table lists the properties for the ActionProvidedPaymentOptions
type:
Свойство | Тип | Описание | |
---|---|---|---|
paymentType | PaymentType | Required. | |
displayName | String | Required. Name of the payment instrument displayed on the receipt. Example: | |
onFulfillmentPaymentData | OnFulfillmentPaymentData | Additional data for the paymentType "ON_FULFILLMENT". For example, you can use this field to specify if cash or card are supported on fulfillment. |
The following example shows a ActionProvidedPaymentOptions
element:
Пример
{ "paymentType": "ON_FULFILLMENT", "displayName": "Pay when you get your food.", "onFulfillmentPaymentData": { "supportedPaymentOptions": [ "Cash", "Card" ] } }
AllowedAuthMethods
The AllowedAuthMethods
type has the following possible values:
-
PAN_ONLY
: Authentication method associated with payment cards stored on file with the user's Google Account. Returned payment data includes personal account number (PAN) with the expiration month and the expiration year.
AllowedCardNetworks
The AllowedCardNetworks
type has the following possible values:
-
AMEX
-
DISCOVER
-
INTERAC
-
JCB
-
MASTERCARD
-
VISA
BillingAddressParameters
This object allows you to set additional fields to be returned for a requested billing address.
The following table lists the properties for the BillingAddressParameters
type:
Свойство | Тип | Описание | |
---|---|---|---|
format | String | Billing address format required to complete the transaction. MIN: Name, country code, and postal code. FULL: Name, street address, locality, region, country code, and postal code. |
The following example shows a BillingAddressParameters
element:
Example 1
{ "format": "MIN" }
Example 2
{ "format": "FULL" }
CardParameters
Use this object to configure your site's support for the Google Pay API.
The following table lists the properties for the CardParameters
type:
Свойство | Тип | Описание | |
---|---|---|---|
allowedAuthMethods | List<Const> | Required. Fields supported to authenticate a card transaction. Must have no fewer than 1 item . | |
allowedCardNetworks | List< AllowedCardNetworks > | Required. One or more card networks that you support that are also supported by the Google Pay API. Must have no fewer than 1 item . | |
billingAddressRequired | Boolean | Set to true if you require a billing address. Only request a billing address if it's required to process the transaction. Additional data requests can increase friction in the checkout process and lead to lower conversion rates. | |
billingAddressParameters | BillingAddressParameters | The expected fields returned if billingAddressRequired is set to true. | |
cvcRequired | Boolean | Set to true if using TimesofMoney, false for all other payment processors. |
The following example shows a CardParameters
element:
Example 1
{ "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "AMEX", "DISCOVER" ], "billingAddressRequired": false, "cvcRequired": false }
Example 2
{ "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "AMEX", "DISCOVER" ], "billingAddressRequired": true, "billingAddressParameters": { "format": "MIN" }, "cvcRequired": false }
GoogleProvidedPaymentInstrument
The following table lists the properties for the GoogleProvidedPaymentInstrument
type:
Свойство | Тип | Описание | |
---|---|---|---|
instrumentToken | String | Required. Base 64-encoded string containing the payment token for charging the user with a participating Google Pay processor, per the previously specified GoogleProvidedPaymentOptions. | |
billingAddress | PostalAddress | Billing address for the payment. |
The following example shows a GoogleProvidedPaymentInstrument
element:
Пример
{ "instrumentToken": "abcd", "billingAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] } }
GoogleProvidedPaymentOptions
Requirements for Google-provided payment method.
The following table lists the properties for the GoogleProvidedPaymentOptions
type:
Свойство | Тип | Описание | |
---|---|---|---|
facilitationSpecification | String | A PaymentDataRequest JSON as a string. Use this object to configure your site's support for the Google Pay API. | |
supportedCardNetworks | List< SupportedCardNetworks > | Use facilitationSpecification instead. Type of card networks supported by the agent. This field is deprecated. | |
prepaidCardDisallowed | Boolean | Use facilitationSpecification instead. Whether or not a prepaid card is allowed as a payment type. This field is deprecated. | |
billingAddressRequired | Boolean | Use facilitationSpecification instead. Whether or not a billing address is required. This field is deprecated. | |
tokenizationParameters | TokenizationParameters | This field is deprecated. |
The following example shows a GoogleProvidedPaymentOptions
element:
Example 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\"}}" }
Example 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 }
Example 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
Use this object to configure your site's support for the Google Pay API.
The following table lists the properties for the MerchantInfo
type:
Свойство | Тип | Описание | |
---|---|---|---|
merchantId | String | Google merchant identifier issued to you by Google Pay. | |
merchantName | String | Required. Merchant name encoded as UTF-8. Merchant name is rendered in the payment sheet. |
OnFulfillmentPaymentData
Use this object to send additional data for the PaymentType "ON_FULFILLMENT".
The following table lists the properties for the OnFulfillmentPaymentData
type:
Свойство | Тип | Описание | |
---|---|---|---|
supportedPaymentOptions | List< PaymentOptionsEnums > | List of payment options available to the user at the time of order fulfillment. |
The following example shows a OnFulfillmentPaymentData
element:
Пример
{ "supportedPaymentOptions": [ "Cash", "Card" ] }
Параметры
Defines types related to TokenizationParameters
.
The following table lists the properties for the Parameters
type:
Свойство | Тип | Описание | |
---|---|---|---|
gateway | String | Required. Example: | |
gatewayMerchantId | String | ||
[additionalKey: string] | String | Additional key-value pairs |
The following example shows a Parameters
element:
Example 1
{ "gatewayMerchantId": "90412491", "gateway": "olo" }
Example 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
Use this object to configure your site's support for the Google Pay API.
The following table lists the properties for the PaymentDataRequest
type:
Свойство | Тип | Описание | |
---|---|---|---|
apiVersion | Const | Required. Major API version. Value: | |
apiVersionMinor | Const | Required. Minor API version. Value: | |
merchantInfo | MerchantInfo | Required. (Google Pay merchant ID) Information about the merchant that requests payment data. | |
allowedPaymentMethods | List< PaymentMethod > | Required. Specifies support for one or more payment methods supported by the Google Pay API. | |
transactionInfo | TransactionInfo | Required. Details about the authorization of the transaction based upon whether the user agrees to the transaction or not. This field includes total price and price status. |
The following example shows a PaymentDataRequest
element:
Пример
{ "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
Payment-related information for an order.
The following table lists the properties for the PaymentInfo
type:
Свойство | Тип | Описание | |
---|---|---|---|
displayName | String | Required. User-visible name of the payment instrument to display on the receipt. | |
paymentType | PaymentType | Required. | |
googleProvidedPaymentInstrument | GoogleProvidedPaymentInstrument | Token that can be used by the action. Only specify this if you specified GoogleProvidedPaymentOptions as a payment option in the CheckoutResponseMessage. |
The following example shows a PaymentInfo
element:
Example 1
{ "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" }
Example 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
Use this object to configure your site's support for the Google Pay API.
The following table lists the properties for the PaymentMethod
type:
Свойство | Тип | Описание | |
---|---|---|---|
type | Const | Required. Short identifier for the supported payment method. Only CARD is currently supported. Value: | |
parameters | CardParameters | Required. Parameters required to configure the provided payment method type. | |
tokenizationSpecification | TokenizationSpecification | Required. Configure an account or decryption provider to receive payment information. This property is required for the CARD payment method. |
The following example shows a PaymentMethod
element:
Пример
{ "type": "CARD", "parameters": { "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "VISA", "AMEX", "MASTERCARD" ], "billingAddressRequired": false }, "tokenizationSpecification": { "type": "PAYMENT_GATEWAY", "parameters": { "gatewayMerchantId": "90412491", "gateway": "olo" } } }
PaymentOptions
The following table lists the properties for the PaymentOptions
type:
Свойство | Тип | Описание | |
---|---|---|---|
Exactly one of the following groups of properties is required. | |||
googleProvidedOptions | Group 1 | GoogleProvidedPaymentOptions | Mutually exclusive with actionProvidedOptions. Use this for online payment using gPay. |
actionProvidedOptions | Group 2 | ActionProvidedPaymentOptions | Mutually exclusive with googleProvidedOptions. Use this for "cash on delivery" or "pay on fulfillment". |
The following example shows a PaymentOptions
element:
Example 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\"}}" } }
Example 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\"}}" } }
Example 3
{ "actionProvidedOptions": { "paymentType": "ON_FULFILLMENT", "displayName": "Pay when you get your food.", "onFulfillmentPaymentData": { "supportedPaymentOptions": [ "Cash", "Card" ] } } }
PaymentOptionsEnums
The PaymentOptionsEnums
type has the following possible values:
-
Cash
-
Card
-
UPI
-
Paytm
PaymentType
The PaymentType
type has the following possible values:
-
PAYMENT_CARD
: For GoogleProvidedPaymentOptions. -
ON_FULFILLMENT
: For ActionProvidedPaymentOptions.
SupportedCardNetworks
Defines types related toGoogleProvidedPaymentOptions
. The SupportedCardNetworks
type has the following possible values:
-
UNSPECIFIED_CARD_NETWORK
-
AMEX
-
DISCOVER
-
JCB
-
MASTERCARD
-
VISA
TokenizationParameters
Defines types related toGoogleProvidedPaymentOptions
. The following table lists the properties for the TokenizationParameters
type:
Свойство | Тип | Описание | |
---|---|---|---|
tokenizationType | Enum [ "UNSPECIFIED_TOKENIZATION_TYPE", "PAYMENT_GATEWAY" ] | Required. Use facilitationSpecification instead. Type of tokens acceptable. | |
parameters | Parameters | Use facilitationSpecification instead. |
TokenizationSpecification
This object allows you to configure an account to receive chargeable payment information.
The following table lists the properties for the TokenizationSpecification
type:
Свойство | Тип | Описание | |
---|---|---|---|
type | Const | Required. | |
parameters | Parameters | Required. |
The following example shows a TokenizationSpecification
element:
Example 1
{ "type": "PAYMENT_GATEWAY", "parameters": { "gatewayMerchantId": "1247192", "gateway": "cybersource" } }
Example 2
{ "type": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:version": "2018-10-31", "stripe:publishableKey": "12378127" } }
TransactionInfo
This object describes a transaction that determines a payer's ability to pay. It's used to present a payment authorization dialog.
The following table lists the properties for the TransactionInfo
type:
Свойство | Тип | Описание | |
---|---|---|---|
currencyCode | String | Required. ISO 4217 alphabetic currency code. | |
transactionId | String | Unique ID that identifies a transaction attempt. Merchants may use an existing ID or generate a specific one for Google Pay transaction attempts. This field is required when you send callbacks to the Google Transaction Events API. | |
totalPriceStatus | Const | Required. Use "ESTIMATED" as the default. Total price may adjust based on the details of the response, such as sales tax collected based on a billing address. Value: | |
totalPrice | String | Required. Total monetary value of the transaction with an optional decimal precision of two decimal places. This field should have the same value as cart.totalPrice. |
The following example shows a TransactionInfo
element:
Пример
{ "totalPriceStatus": "ESTIMATED", "totalPrice": "12.34", "currencyCode": "USD" }