Базовые типы
Корзина
Содержит подробную информацию о заказе, а также о том, является ли запрос самовывозом или доставкой. В корзине также указаны сведения о доставке, чаевые и адрес доставки. Объект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 не указан хотя бы один раз check.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». Пример: |
Управление заказамиДействие
Управление заказами позволяет пользователям получать поддержку после заказа и должно отправляться в каждом OrderUpdate
в заказе на отправку AppResponse
и в каждом последующем AsyncOrderUpdateRequestMessage
Действия по управлению заказами, отправляемые для конкретного заказа, могут различаться в зависимости от состояния.
Например, в состоянии «CREATED» CUSTOMER_SERVICE
может ссылаться на ваш телефон службы поддержки клиентов. Затем в состоянии «ПОДТВЕРЖДЕНО» CUSTOMER_SERVICE
может переключиться на телефон ресторана, если это станет лучшей точкой контакта для клиента. Аналогичным образом, когда заказ находится в состоянии «ИСПОЛНЕН», CUSTOMER_SERVICE
может ссылаться на ваши адреса электронной почты службы поддержки.
В следующей таблице перечислены свойства типа OrderManagementAction
:
Свойство | Тип | Описание | |
---|---|---|---|
type | OrderManagementActionType | Необходимый. | |
button | Button | Необходимый. |
В следующем примере показан элемент OrderManagementAction
:
Пример 1
{ "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }
Пример 2
{ "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }
Тип управления заказом
Определяет типы, связанные сOrderManagementAction
. Тип OrderManagementActionType
имеет следующие возможные значения:
-
CUSTOMER_SERVICE
: адрес электронной почты и/или контактный номер службы поддержки клиентов, которые будут отображаться на странице подтверждения заказа. Это необходимо. Префикс openUrlAction.url должен быть «mailto», «tel», «http» или «https». -
EMAIL
: действие по электронной почте только на странице сведений о заказе. Префикс openUrlAction.url должен быть «mailto». -
CALL_DRIVER
: Вызов действия только на странице сведений о заказе. Префикс openUrlAction.url должен быть «tel». -
CALL_RESTAURANT
: Вызов действия только на странице сведений о заказе. Префикс openUrlAction.url должен быть «tel».
Состояние заказа
Текущее состояние заказа. Каждое значение state
OrderState
также соответствует статусу покупки на myaccount.google.com .
В следующей таблице перечислены свойства для типа OrderState
:
Свойство | Тип | Описание | |
---|---|---|---|
state | OrderStateEnum | Необходимый. | |
label | Нить | Необходимый. Пользовательская строка отображения для состояния. Используйте случай предложения. Пример: |
В следующем примере показан элемент OrderState
:
Пример
{ "state": "CONFIRMED", "label": "Provider confirmed" }
OrderStateenum
Определяет типы, связанные сOrderState
. Тип OrderStateEnum
имеет следующие возможные значения:
-
CREATED
: заказ, созданный интегратором и ожидание подтверждения провайдером. Соответствует статусу «упорядоченного» покупки. -
CONFIRMED
: заказ подтвержден поставщиком и активен. Соответствует «принятому» статусу покупки. -
REJECTED
: заказ отклонен интегратором или поставщиком. Соответствует статусу «отклонено». -
CANCELLED
: пользователь отменил заказ. Соответствует статусу «отмененного» покупки. -
IN_PREPARATION
: еда готовится. Соответствует статусу «Неизвестный статус». -
READY_FOR_PICKUP
: еда готова для пикапа. Соответствует статусу покупки «Готово к выказу». -
IN_TRANSIT
: порядок доставлен. Соответствует статусу покупки «в прогрессе». -
FULFILLED
: Пользователь получил то, что было заказано. Соответствует статусу покупки "забрана".
Квитанция
Отправьте этот тип вAppResponse
по заказа отправки, где OrderState
«подтвержден», «исполнен» или «in_transit». Отправьте квитанцию в то время, когда userVisibleOrderId
становится доступной. Вам не нужно продолжать отправлять квитанцию в последующих обновлениях. В следующей таблице перечислены свойства для типа Receipt
:
Свойство | Тип | Описание | |
---|---|---|---|
userVisibleOrderId | Нить | Необходимый. Требуется, если заказ «подтвержден», «in_transit» или «выполнен». Это поле является единственным идентификатором, связанным с пользователем для этого заказа (обычно идентификатор заказа ресторана), отображаемого как в квитанции интегратора, так и в карте заказа Google. Пользователь должен иметь возможность использовать этот идентификатор для ссылки на свой заказ для обслуживания клиентов с поставщиком и интегратором. Вам нужно предоставить этот идентификатор только один раз в любом данном OrderUpdate. Пока это не будет предоставлено, ActionOrderID является USERVIBLEORDORDERID. Например, у вас может не быть UservisibleOrderID, пока ресторан не подтвердит заказ. После подтверждения вы должны отправить AsyncorderupDateRequestMessage с OrderUpdate и квитанцией. |
В следующем примере показан элемент Receipt
:
Пример
{ "userVisibleOrderId": "userVisibleId1234" }
Отказ
В следующей таблице перечислены свойства для типа RejectionInfo
:
Свойство | Тип | Описание | |
---|---|---|---|
type | RejectionType | Необходимый. | |
reason | Нить | Причина отклонения, используемого для внутренней ведения журнала. Это поле не видно для пользователей. |
В следующем примере показан элемент RejectionInfo
:
Пример
{ "type": "PAYMENT_DECLINED", "reason": "There is an issue with payment processing." }
DecryType
Тип RejectionType
имеет следующие возможные значения:
-
INELIGIBLE
: пользователь не имеет права из-за политики или связанных с рисками. -
PAYMENT_DECLINED
: Существует проблема с обработкой платежей. -
UNAVAILABLE_SLOT
: заказ не может быть выполнен в преддверии заказа, указанное Divelinfo или Pickupinfo. -
PROMO_NOT_APPLICABLE
: Есть проблема с продвижением по службе. -
UNKNOWN
: любая другая причина.
Связанные с платежей типы
В этом разделе описываются типы, связанные с оплатой, используемые для выполнения заказа пищи.ActionProvidePaymentOptions
Требования к предоставляемому действию метод оплаты.
В следующей таблице перечислены свойства для типа ActionProvidedPaymentOptions
:
Свойство | Тип | Описание | |
---|---|---|---|
paymentType | PaymentType | Необходимый. | |
displayName | Нить | Необходимый. Название платежного инструмента, отображаемого в квитанции. Пример: | |
onFulfillmentPaymentData | OnFulfillmentPaymentData | Дополнительные данные для платежа "on_fulfillment". Например, вы можете использовать это поле, чтобы указать, поддерживаются ли наличные или карта при выполнении. |
В следующем примере показан элемент ActionProvidedPaymentOptions
, предпринимаемый
Пример
{ "paymentType": "ON_FULFILLMENT", "displayName": "Pay when you get your food.", "onFulfillmentPaymentData": { "supportedPaymentOptions": [ "Cash", "Card" ] } }
Разрешены
Тип AllowedAuthMethods
имеет следующие возможные значения:
-
PAN_ONLY
: метод аутентификации, связанный с платежными картами, хранящимися в файле с учетной записью Google пользователя. Возвращенные данные платежа включают личный номер счета (PAN) с истечением месяца срока действия и годом истечения срока действия.
AldCardnetWorks
Тип AllowedCardNetworks
имеет следующие возможные значения:
-
AMEX
-
DISCOVER
-
INTERAC
-
JCB
-
MASTERCARD
-
VISA
BillingAddressParameters
Этот объект позволяет возвращать дополнительные поля для возврата для запрошенного платежного адреса.
В следующей таблице перечислены свойства для типа BillingAddressParameters
:
Свойство | Тип | Описание | |
---|---|---|---|
format | Нить | Формат биллингового адреса, необходимый для завершения транзакции. Мин: Имя, код страны и почтовый код. Полное: имя, уличный адрес, местоположение, регион, код страны и почтовый код. |
В следующем примере показан элемент BillingAddressParameters
:
Пример 1
{ "format": "MIN" }
Пример 2
{ "format": "FULL" }
CardParameters
Используйте этот объект, чтобы настроить поддержку вашего сайта для API Google Pay.
В следующей таблице перечислены свойства для типа CardParameters
:
Свойство | Тип | Описание | |
---|---|---|---|
allowedAuthMethods | Список <const> | Необходимый. Поля поддерживаются для аутентификации транзакции карты. Должно быть не менее 1 предмета . | |
allowedCardNetworks | Список AllowedCardNetworks | Необходимый. Одна или несколько карт, которые вы поддерживаете, которые также поддерживаются API Google Pay. Должно быть не менее 1 предмета . | |
billingAddressRequired | логическое значение | Установите True, если вам нужен биллинг -адрес. Запросите платежный адрес только в том случае, если он требуется для обработки транзакции. Дополнительные запросы на данные могут увеличить трение в процессе оформления заказа и привести к более низким показателям конверсии. | |
billingAddressParameters | BillingAddressParameters | Ожидаемые поля, возвращенные, если BillingAddressRequired установлен на True. | |
cvcRequired | логическое значение | Установите на True, если используйте TimesOfMoney, False для всех других платежных процессоров. |
В следующем примере показан элемент CardParameters
:
Пример 1
{ "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "AMEX", "DISCOVER" ], "billingAddressRequired": false, "cvcRequired": false }
Пример 2
{ "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "AMEX", "DISCOVER" ], "billingAddressRequired": true, "billingAddressParameters": { "format": "MIN" }, "cvcRequired": false }
GoogleProvidePaymentInstrument
В следующей таблице перечислены свойства для типа GoogleProvidedPaymentInstrument
:
Свойство | Тип | Описание | |
---|---|---|---|
instrumentToken | Нить | Необходимый. База 64-кодированная строка, содержащая платежный токен для зарядки пользователя участвующим процессором Google Pay, в соответствии с ранее указанным Google ProvovidePaymentOptions. | |
billingAddress | PostalAddress | Биллинг адрес для оплаты. |
В следующем примере показан элемент GoogleProvidedPaymentInstrument
:
Пример
{ "instrumentToken": "abcd", "billingAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] } }
GoogleProvidePaymentOptions
Требования к предоставлению Google метод оплаты.
В следующей таблице перечислены свойства для типа GoogleProvidedPaymentOptions
:
Свойство | Тип | Описание | |
---|---|---|---|
facilitationSpecification | Нить | Платеж DATATAREQUEST JSON в качестве строки. Используйте этот объект, чтобы настроить поддержку вашего сайта для API Google Pay. | |
supportedCardNetworks | Список SupportedCardNetworks | Вместо этого используйте облегчение. Тип карточных сетей, поддерживаемых агентом. Это поле устарело. | |
prepaidCardDisallowed | логическое значение | Вместо этого используйте облегчение. Разрешена ли предоплаченная карта в качестве типа оплаты. Это поле устарело. | |
billingAddressRequired | логическое значение | Вместо этого используйте облегчение. Требуется ли платежный адрес. Это поле устарело. | |
tokenizationParameters | TokenizationParameters | Это поле устарело. |
В следующем примере показан элемент GoogleProvidedPaymentOptions
:
Пример 1
{ "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\": false }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" }
Пример 2
{ "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "braintree", "braintree:apiVersion": "v1", "braintree:sdkVersion": "1.4.0", "braintree:merchantId": "a1b2c3d4e5", "braintree:clientKey": "production_braintree_client_key", "braintree:authorizationFingerprint": "same_as_client_key" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "JCB", "VISA" ], "prepaidCardDisallowed": true }
Пример 3
{ "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:publishableKey": "pk_live_stripe_client_key", "stripe:version": "2017-04-06" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "VISA", "JCB" ], "prepaidCardDisallowed": true, "billingAddressRequired": true }
Merchantinfo
Используйте этот объект, чтобы настроить поддержку вашего сайта для API Google Pay.
В следующей таблице перечислены свойства для типа MerchantInfo
:
Свойство | Тип | Описание | |
---|---|---|---|
merchantId | Нить | Google Merchant Identifier, выпущенный вам Google Pay. | |
merchantName | Нить | Необходимый. Торговое имя, закодированное как UTF-8. Имя торговца отображается в платежном листе. |
OnfulFillmentPaymentData
Используйте этот объект, чтобы отправить дополнительные данные для платежа "on_fulfillment".
В следующей таблице перечислены свойства для типа OnFulfillmentPaymentData
:
Свойство | Тип | Описание | |
---|---|---|---|
supportedPaymentOptions | Список < PaymentOptionsEnums | Список вариантов оплаты, доступных пользователю во время выполнения заказа. |
В следующем примере показан элемент OnFulfillmentPaymentData
:
Пример
{ "supportedPaymentOptions": [ "Cash", "Card" ] }
Параметры
Определяет типы, связанные с TokenizationParameters
.
В следующей таблице перечислены свойства для типа Parameters
:
Свойство | Тип | Описание | |
---|---|---|---|
gateway | Нить | Необходимый. Пример: | |
gatewayMerchantId | Нить | ||
[additionalKey: string] | Нить | Дополнительные пары ключей |
В следующем примере показан элемент Parameters
:
Пример 1
{ "gatewayMerchantId": "90412491", "gateway": "olo" }
Пример 2
{ "gateway": "braintree", "braintree:apiVersion": "v1", "braintree:sdkVersion": "1.4.0", "braintree:merchantId": "YOUR_MERCHANT_ID", "braintree:clientKey": "YOUR_BRAINTREE_SANDVOX_OR_PRODUCTION_KEY" }
PAYTERDATAREQUEST
Используйте этот объект, чтобы настроить поддержку вашего сайта для API Google Pay.
В следующей таблице перечислены свойства для типа PaymentDataRequest
:
Свойство | Тип | Описание | |
---|---|---|---|
apiVersion | Конст | Необходимый. Основная версия API. Значение: | |
apiVersionMinor | Конст | Необходимый. Незначительная версия API. Значение: | |
merchantInfo | MerchantInfo | Необходимый. (Google Pay идентификатор продавца) Информация о продавцах, который запрашивает данные о платежах. | |
allowedPaymentMethods | Список < PaymentMethod > | Необходимый. Определяет поддержку одного или нескольких методов оплаты, поддерживаемых API Google Pay. | |
transactionInfo | TransactionInfo | Необходимый. Подробная информация об авторизации транзакции на основе того, согласен ли пользователь на транзакцию или нет. Это поле включает в себя общую цену и статус цены. |
В следующем примере показан элемент PaymentDataRequest
: элемент:
Пример
{ "apiVersion": 2, "apiVersionMinor": 0, "merchantInfo": { "merchantId": "10391231", "merchantName": "Burrito Town" }, "allowedPaymentMethods": [ { "type": "CARD", "parameters": { "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "VISA", "AMEX", "MASTERCARD" ], "billingAddressRequired": true, "billingAddressParameters": { "format": "FULL" }, "cvcRequired": false }, "tokenizationSpecification": { "type": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:version": "2019-05-16", "stripe:publishableKey": "pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA" } } } ], "transactionInfo": { "currencyCode": "INR", "totalPriceStatus": "ESTIMATED", "totalPrice": "185.00" } }
Информация о платеже
Связанная с платежей информация для заказа.
В следующей таблице перечислены свойства для типа PaymentInfo
:
Свойство | Тип | Описание | |
---|---|---|---|
displayName | Нить | Необходимый. Пользовательский имени платежный инструмент для отображения в квитанции. | |
paymentType | PaymentType | Необходимый. | |
googleProvidedPaymentInstrument | GoogleProvidedPaymentInstrument | Токен, который может быть использован действием. Укажите это только в том случае, если вы указали Google ProvovidePaymentOptions как вариант оплаты в проверке. |
В следующем примере показан элемент PaymentInfo
:
Пример 1
{ "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" }
Пример 2
{ "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd", "billingAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "123 Random Street", "Unit ABC" ], "recipients": [ "sample_receipient" ] } }, "paymentType": "PAYMENT_CARD" }
Способ оплаты
Используйте этот объект, чтобы настроить поддержку вашего сайта для API Google Pay.
В следующей таблице перечислены свойства для типа PaymentMethod
:
Свойство | Тип | Описание | |
---|---|---|---|
type | Конст | Необходимый. Короткий идентификатор для поддерживаемого способа оплаты. В настоящее время поддерживается только карта. Значение: | |
parameters | CardParameters | Необходимый. Параметры, необходимые для настройки предоставленного типа метода оплаты. | |
tokenizationSpecification | TokenizationSpecification | Необходимый. Настройте поставщика учетной записи или дешифрования для получения платежной информации. Это свойство требуется для метода оплаты карты. |
В следующем примере показан элемент PaymentMethod
:
Пример
{ "type": "CARD", "parameters": { "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "VISA", "AMEX", "MASTERCARD" ], "billingAddressRequired": false }, "tokenizationSpecification": { "type": "PAYMENT_GATEWAY", "parameters": { "gatewayMerchantId": "90412491", "gateway": "olo" } } }
Варианты оплаты
В следующей таблице перечислены свойства для типа PaymentOptions
:
Свойство | Тип | Описание | |
---|---|---|---|
Требуется именно одна из следующих групп свойств. | |||
googleProvidedOptions | Группа 1 | GoogleProvidedPaymentOptions | Взаимно эксклюзив с действиями. Используйте это для онлайн -платежа с помощью GPAY. |
actionProvidedOptions | Группа 2 | ActionProvidedPaymentOptions | Взаимно эксклюзив с Google Provovidoptions. Используйте это для «наличных на доставке» или «оплата за выполнение». |
В следующем примере показан элемент PaymentOptions
:
Пример 1
{ "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\": false }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" } }
Пример 2
{ "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\":true, \"billingAddressParameters\": { \"format\":\"MIN\" } }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" } }
Пример 3
{ "actionProvidedOptions": { "paymentType": "ON_FULFILLMENT", "displayName": "Pay when you get your food.", "onFulfillmentPaymentData": { "supportedPaymentOptions": [ "Cash", "Card" ] } } }
Платежон
Тип PaymentOptionsEnums
имеет следующие возможные значения:
-
Cash
-
Card
-
UPI
-
Paytm
Способ оплаты
Тип PaymentType
имеет следующие возможные значения:
-
PAYMENT_CARD
: для Google ProvovidePaymentOptions. -
ON_FULFILLMENT
: для Action ProvovidePaymentOptions.
Поддержка CardnetWorks
Определяет типы, связанные сGoogleProvidedPaymentOptions
. Тип SupportedCardNetworks
-
UNSPECIFIED_CARD_NETWORK
-
AMEX
-
DISCOVER
-
JCB
-
MASTERCARD
-
VISA
TokenizationParameters
Определяет типы, связанные сGoogleProvidedPaymentOptions
. В следующей таблице перечислены свойства для типа TokenizationParameters
:
Свойство | Тип | Описание | |
---|---|---|---|
tokenizationType | Enum [ "UNSPECIFIED_TOKENIZATION_TYPE", "PAYMENT_GATEWAY" ] | Необходимый. Вместо этого используйте облегчение. Тип токенов приемлемо. | |
parameters | Parameters | Вместо этого используйте облегчение. |
Определение токенизаций
Этот объект позволяет вам настроить учетную запись для получения платежной информации.
В следующей таблице перечислены свойства для типа TokenizationSpecification
:
Свойство | Тип | Описание | |
---|---|---|---|
type | Конст | Необходимый. | |
parameters | Parameters | Необходимый. |
В следующем примере показан элемент TokenizationSpecification
:
Пример 1
{ "type": "PAYMENT_GATEWAY", "parameters": { "gatewayMerchantId": "1247192", "gateway": "cybersource" } }
Пример 2
{ "type": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:version": "2018-10-31", "stripe:publishableKey": "12378127" } }
TransactionInfo
Этот объект описывает транзакцию, которая определяет способность плательщика платить. Он используется для представления диалога авторизации оплаты.
В следующей таблице перечислены свойства для типа TransactionInfo
:
Свойство | Тип | Описание | |
---|---|---|---|
currencyCode | Нить | Необходимый. ISO 4217 Код алфавитной валюты. | |
transactionId | Нить | Уникальный идентификатор, который определяет попытку транзакции. Торговцы могут использовать существующий идентификатор или генерировать конкретный для попыток Google Pay Transaction. Это поле требуется, когда вы отправляете обратные вызовы в API событий транзакции Google. | |
totalPriceStatus | Конст | Необходимый. Используйте «оцененный» в качестве дефолта. Общая цена может корректироваться в зависимости от деталей ответа, таких как налог с продаж, собранные в зависимости от выставления счетов. Значение: | |
totalPrice | Нить | Необходимый. Общее денежное значение транзакции с дополнительной десятичной точностью двух десятичных знаков. Это поле должно иметь то же значение, что и cart.totalprice. |
В следующем примере показан элемент TransactionInfo
:
Пример
{ "totalPriceStatus": "ESTIMATED", "totalPrice": "12.34", "currencyCode": "USD" }