Схема действий по исполнению

На этой странице описываются полезные данные веб-службы выполнения заказов (сквозной API заказа) при работе со встроенным API сквозного действия заказа. Чтобы получить машиночитаемую версию этой информации, вы можете скачать схему JSON .

Базовые типы

Корзина

Содержит подробную информацию о заказе, а также о том, является ли запрос самовывозом или доставкой. В корзине также указаны сведения о доставке, чаевые и адрес доставки. Объект Cart определен в Checkout AppRequest Вы включаете копию корзины в свой Checkout AppResponse

В следующей таблице перечислены свойства типа Cart :

Свойство Тип Описание
@type Конст

Тип этого объекта. Опустите это поле, если родительский объект Cart является частью ProposeOrder.

Значение: type.googleapis.com/google.actions.v2.orders.Cart .

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 Нить

Имя человека, получающего заказ, как вы хотите, чтобы оно отображалось. Используйте это поле, если имя и фамилия не указаны.

Пример: Lovefood Ordering

email Нить

Адрес электронной почты лица, получившего заказ.

Пример: ilovefood@example.com

firstName Нить

Имя лица, получившего заказ.

Пример: Lovefood

lastName Нить

Фамилия лица, получившего заказ.

Пример: Ordering

phoneNumber Нить

Номер телефона лица, получающего заказ, включая код страны.

Пример: +16501234567 .

emailVerified логическое значение

Указывает, вошел ли человек, получающий заказ, в свою учетную запись Google.

В следующем примере показан элемент Contact :

Пример

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

CustomPushMessage

Содержит OrderUpdate для запроса.

В следующей таблице перечислены свойства типа CustomPushMessage :

Свойство Тип Описание
orderUpdate OrderUpdate

Необходимый.

Обновлена ​​информация по заказу.

В следующем примере показан элемент CustomPushMessage :

Пример

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

Информация о доставке

В следующей таблице перечислены свойства типа DeliveryInfo :

Свойство Тип Описание
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. Используйте это, чтобы обновить расчетное время доставки во время ответа на оформление заказа.

Пример: PT90M

В следующем примере показан элемент DeliveryInfo :

Пример

{
  "deliveryTimeIso8601": "PT90M"
}

Отказ от ответственности

В следующей таблице перечислены свойства типа Disclaimer :

Свойство Тип Описание
predefinedMessage PredefinedMessage

Необходимый.

Чтобы показывать предопределенные сообщения об отказе от ответственности во время оформления заказа.

feeAmount Money

Партнер взимает с продавца комиссию в размере N за этот заказ.

feeAmountRange FeeAmountRange

Партнер взимает с ресторана комиссию в размере от N до M за заказ.

feePercent Число

Партнер взимает с продавца комиссию в размере N% за этот заказ.

feePercentRange FeePercentRange

Партнер взимает с продавца комиссию от N% до M% за заказ.

В следующем примере показан элемент Disclaimer :

Пример 1

{
  "predefinedMessage": "NEW_YORK_DELIVERY_FEE_TIP_DISCLAIMER"
}

Пример 2

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE"
}

Пример 3

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

Пример 4

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

Пример 5

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

Пример 6

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

Ошибка

Тип Error имеет следующие возможные значения:

  • CLOSED : Ресторан закрыт на время заказа.
  • NO_CAPACITY : нет доступных мощностей для обслуживания (например, временное отключение из-за часов пик).
  • NO_COURIER_AVAILABLE : Невозможно обработать заказ из-за ограниченного количества сотрудников, занимающихся доставкой.
  • REQUIREMENTS_NOT_MET : не соблюдены ограничения для принятия заказа (например, минимальный размер корзины).
  • UNAVAILABLE_SLOT : заказ не может быть выполнен в заранее заданное время, указанное в DeliveryInfo или PickupInfo.
  • OUT_OF_SERVICE_AREA : заказ не может быть доставлен на адрес пользователя.
  • PROMO_EXPIRED : Не удалось подать заявку, поскольку срок действия акции истек.
  • PROMO_NOT_APPLICABLE : общий код ошибки для отслеживания всех случаев невозможности применения промо-кода, если ни одна из других ошибок промо-кода не подходит.
  • PROMO_NOT_RECOGNIZED : код купона не был распознан.
  • PROMO_ORDER_INELIGIBLE : текущий заказ не имеет права на этот купон.
  • PROMO_USER_INELIGIBLE : текущий пользователь не имеет права на получение этого купона.
  • AVAILABILITY_CHANGED : элемент больше недоступен или недостаточно элементов для выполнения запроса.
  • INCORRECT_PRICE : ошибки в стоимости комиссий или общей суммы.
  • INVALID : LineItem, FulfillmentOption или Promotion содержит недопустимые данные.
  • NOT_FOUND : LineItem, FulfillmentOption или Promotion не найдены.
  • PRICE_CHANGED : цена товара изменилась.

КомиссияСуммаДиапазон

В следующей таблице перечислены свойства типа FeeAmountRange :

Свойство Тип Описание
minFeeAmount Money

Нижняя граница суммы взимаемой комиссии.

maxFeeAmount Money

Верхняя граница суммы взимаемой комиссии..

Комиссия в процентахДиапазон

В следующей таблице перечислены свойства типа FeePercentRange :

Свойство Тип Описание
minFeePercent Число

Нижняя граница взимаемого процента комиссии.

maxFeePercent Число

Верхняя граница взимаемого процента комиссии.

ЕдаКорзинаРасширение

Содержит сведения о пользователе, например настройки выполнения.

В следующей таблице перечислены свойства типа FoodCartExtension :

Свойство Тип Описание
@type Конст

Тип этого расширения. Для этого поля всегда установлено значение «type.googleapis.com/google.actions.v2.orders.FoodCartExtension».

Значение: type.googleapis.com/google.actions.v2.orders.FoodCartExtension .

contact Contact

Контактная информация лица, получившего заказ. Подробная информация включает имя человека, номер телефона и адрес электронной почты.

fulfillmentPreference FulfillmentOption

Необходимый.

Предпочтения выполнения пользователя.

location Location

В сообщении CheckoutRequestMessage в этом поле указывается адрес доставки, который необходим, если заказ предназначен для доставки. Для заказов на вынос или самовывоз это поле не включается в сообщение.

В следующем примере показан элемент FoodCartExtension :

Пример 1

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

Пример 2

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

FoodErrorExtension

Идентифицирует одну или несколько ошибок, произошедших при обработке запроса. В следующей таблице описаны поля типа FoodErrorExtension . Ошибки можно отправлять в CheckoutResponse .

В следующей таблице перечислены свойства типа FoodErrorExtension :

Свойство Тип Описание
@type Конст

Необходимый.

Тип этого расширения.

Значение: type.googleapis.com/google.actions.v2.orders.FoodErrorExtension .

foodOrderErrors Список FoodOrderError

Необходимый.

Массив объектов FoodOrderError, описывающих произошедшие ошибки. Рекомендуется одна ошибка на корзину или на товар.

Должно быть не менее 1 предмета .

correctedProposedOrder ProposedOrder

foodOrderErrors.error = "UNAVAILABLE_SLOT", "PROMO_EXPIRED", "PROMO_NOT_APPLICABLE", "PROMO_NOT_RECOGNIZED", "PROMO_ORDER_INELIGIBLE", "PROMO_USER_INELIGIBLE", "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "INVALID", "NOT_FOUND", or "PRICE_CHANGED" .

Новый предлагаемый заказ с исправлениями. Верните этот объект, если в исходном ProposeOrder есть исправимые ошибки. Например, изменение цены одной или нескольких позиций в корзине является исправимой ошибкой. Устранимые ошибки с действительным ProposeOrder переходят на стадию подтверждения, вместо того, чтобы требовать от пользователя просмотра своей корзины.

paymentOptions PaymentOptions

foodOrderErrors.error = "UNAVAILABLE_SLOT", "PROMO_EXPIRED", "PROMO_NOT_APPLICABLE", "PROMO_NOT_RECOGNIZED", "PROMO_ORDER_INELIGIBLE", "PROMO_USER_INELIGIBLE", "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "INVALID", "NOT_FOUND", or "PRICE_CHANGED" .

Варианты оплаты по умолчанию, выбранные для пользователя.

additionalPaymentOptions Список < PaymentOptions >

Пользователю доступны альтернативные варианты оплаты.

В следующем примере показан элемент FoodErrorExtension :

Пример

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

Расширение FoodItemExtension

Определяет надстройки для продуктов питания.

В следующей таблице перечислены свойства типа FoodItemExtension :

Свойство Тип Описание
@type Конст

Необходимый.

Тип этого расширения. Для этого поля всегда установлено значение «type.googleapis.com/google.actions.v2.orders.FoodItemExtension».

Значение: type.googleapis.com/google.actions.v2.orders.FoodItemExtension .

options Список FoodItemOption

Опцией может быть элемент дополнения или группа дополнений, содержащая набор дополнений.

В следующем примере показан элемент FoodItemExtension :

Пример

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

FoodItemOption

В следующей таблице перечислены свойства типа FoodItemOption :

Свойство Тип Описание
id Нить

Уникальный идентификатор, присвоенный Google. Когда вы отправляете FoodOrderError или AsyncOrderUpdateRequest, используйте это поле, чтобы различать случаи, когда корзина содержит более одного товара с одним и тем же OfferId.

Пример: 39231093

offerId Нить

Идентификатор предложения для товара.

Пример: 912835081

name Нить

Имя опции.

Пример: Honey Mustard

price Money
note Нить

Примечание, связанное с опцией.

quantity Число

Для опций, являющихся элементами, количество элементов.

Пример: 3

subOptions Список FoodItemOption

Подопции для опции, если таковые имеются.

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

В следующем примере показан элемент FoodItemOption :

Пример 1

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

Пример 2

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

FoodOrderError

Содержит сведения об ошибках в CheckoutResponse .

В следующей таблице перечислены свойства типа FoodOrderError :

Свойство Тип Описание
error Error

Необходимый.

id Нить

Требуется, если error = "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "PRICE_CHANGED", "INVALID", or "NOT_FOUND" .

Это поле является обязательным для ошибок на уровне элемента. Это присвоенный Google LineItem.id для пунктов меню или FoodItemOption.id для надстроек.

description Нить

Описание ошибки. Это описание предназначено для внутреннего ведения журнала и не видно пользователям.

updatedPrice Money

Требуется, если error = "PRICE_CHANGED" .

Новая цена товара, вызвавшего ошибку. Это требуется только в случае ошибки «PRICE_CHANGED».

availableQuantity Целое число

Требуется, если error = "INVALID", or "NOT_FOUND" .

Новое доступное количество товара, вызвавшего ошибку. Это требуется только в том случае, если ошибка «INVALID» или «NOT_FOUND». Значение должно быть равно нулю для «INVALID» и «NOT_FOUND».

В следующем примере показан элемент FoodOrderError :

Пример 1

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

Пример 2

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

Расширение заказа еды

Содержит информацию о выполнении заказа.

В следующей таблице перечислены свойства типа FoodOrderExtension :

Свойство Тип Описание
@type Конст

Тип этого расширения. Для этого поля всегда установлено значение «type.googleapis.com/google.actions.v2.orders.FoodOrderExtension».

Значение: type.googleapis.com/google.actions.v2.orders.FoodOrderExtension .

availableFulfillmentOptions Список < FulfillmentOption >

Представляет доступные варианты выполнения заказа.

optinForRemarketing логическое значение

Запрос пользователя на участие в ваших маркетинговых каналах. По умолчанию вы не можете отправлять маркетинговый контент без согласия пользователя. Если параметр 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 Нить

Требуется, если type = "REGULAR" .

Для элемента строки в корзине (ProposeOrder.cart.lineItems[0].id) это уникальный идентификатор, созданный Google при создании заказа. Для LineItem в ProposeOrder (ProposeOrder.otherItems[0].id), который используется для добавления таких элементов, как плата за доставку и налоги, значение id определяется поставщиком. Например, в корзине есть два одинаковых товара с разными инструкциями по приготовлению (например, две средние пиццы с разными наборами начинок). В этом случае оба товара имеют одинаковый базовый идентификатор предложения. Когда вы отправляете запрос на обновление заказа, чтобы указать, что товар отклонен, используйте этот идентификатор в качестве средства устранения неоднозначности. Другими словами, если одна из пицц отклонена из-за отсутствия определенной начинки, идентификатор поможет Google определить, о каком товаре в заказе вы говорите. Это поле является обязательным, за исключением других элементов.

name Нить

Необходимый.

Название позиции. Это строка, видимая пользователю, и по возможности она должна содержать предложения (например, «Стоимость доставки», «Сбор за обслуживание», «Налог»). Для пользователей это поле сокращается до 100 символов.

type LineItemType

Необходимый.

quantity Целое число

Требуется, если type = "REGULAR" .

Количество включенных предметов. Неприменимо к ProposeOrder.otherItems.

description Нить

Описание предмета.

price Price

Необходимый.

Цена предмета или предметов. Это значение отражает общую цену всех товаров или услуг для этой позиции (другими словами, добавьте стоимость любых дополнений и умножьте на количество). Например: если количество товара стоимостью 10 долларов США равно 3, цена составит 30 долларов США. За одну пиццу с базовой ценой в 5 долларов и надбавкой в ​​1 доллар цена составит 6 долларов. Для двух пицц (количество = 2) с базовой ценой 5 долларов США и каждой с надбавкой в ​​1 доллар цена составит 12 долларов США. Каждый элемент строки должен иметь цену, даже если цена равна «0». Если типом является СКИДКА, укажите отрицательное значение (например, «-2»).

subLines Список < SublineNote >

Необязательно и допустимо только в том случае, если тип «ОБЫЧНЫЙ». В этом поле в запросе на оформление заказа и запросе на отправку заказа может быть отправлено примечание пользователя по конкретному товару. Убедитесь, что продавец получил примечание после его предоставления. В запросе оно будет указано как subLines[0].note — единственное значение, указанное в этом поле, когда оно присутствует в запросе.

Должно быть не более 1 предмета .

offerId Нить

Требуется, если type = "REGULAR" .

Идентификатор предложения 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 Нить

Отобразить адрес места.

Пример: 1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States

postalAddress PostalAddress
zipCode Нить

Пример: 90210

city Нить

Название города.

Пример: Los Angeles

notes Нить

Примечания о местоположении, например коды ворот. Оно должно быть не более 500 символов.

Пример: Gate code is #111

В следующем примере показан элемент Location :

Пример

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

Торговец

В следующей таблице перечислены свойства типа Merchant :

Свойство Тип Описание
id Нить

Идентификатор продавца. Если указано, соответствует идентификатору Restaurant.@id в ленте ресторанов.

Пример: https://www.exampleprovider.com/merchant/id1

name Нить

Необходимый.

Видимое пользователю имя продавца.

Пример: Falafel Bite

В следующем примере показан элемент Merchant :

Пример

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

Деньги

В следующей таблице перечислены свойства типа Money :

Свойство Тип Описание
currencyCode Нить

Необходимый.

Трехбуквенный код валюты в формате ISO 4217.

Пример: USD

units Нить

Целые единицы суммы. Например, если код валюты равен «USD», то единица «1» равна одному доллару США.

Пример: 36

nanos Целое число

Количество нано (10^-9) единиц суммы. Значение должно находиться в диапазоне от -999 999 999 до +999 999 999 включительно. Используйте следующие правила: Если единицы измерения положительны, наносы должны быть положительными или нулевыми. Если единицы измерения равны нулю, нанос может быть положительным, нулевым или отрицательным. Если единицы измерения отрицательные, нано должно быть отрицательным или нулевым. Например, -1,75 доллара США представлены как единицы = -1 и нано = -750 000 000.

Пример: 730000000

В следующем примере показан элемент Money :

Пример 1

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

Пример 2

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

Заказ

Содержит окончательный заказ, включая налоги, сборы и стоимость доставки, а также информацию об оплате. Этот объект получен вашим действием в Submit AppRequest .

В следующей таблице перечислены свойства типа Order :

Свойство Тип Описание
finalOrder ProposedOrder

Необходимый.

Предлагаемый приказ, вызвавший приказ.

googleOrderId Нить

Необходимый.

Идентификатор заказа, присвоенный Google. Этот идентификатор должен быть стабильным на протяжении всего жизненного цикла заказа. Этот идентификатор не виден конечному пользователю.

orderDate Временная метка ISO

Необходимый.

Дата и время создания заказа.

paymentInfo PaymentInfo

Необходимый.

Платежная информация, соответствующая оплате данного заказа.

В следующем примере показан элемент Order :

Пример

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

Обновление заказа

В следующей таблице описаны поля типа OrderUpdate, который включен в AppResponse .

В следующей таблице перечислены свойства типа OrderUpdate :

Свойство Тип Описание
actionOrderId Нить

Необходимый.

Уникальный идентификатор заказа в системе интегратора, используемый для идентификации заказа, для которого отправляется обновление. Если для заказа «СОЗДАНО» в OrderUpdate не указан хотя бы один раз в поле «CREATED» полученный_user_visible_order_id, этим идентификатором будет введенный видимый идентификатор пользователя, отображаемый в карточке заказа Google.

orderState OrderState

Необходимый.

Новое состояние порядка.

lineItemUpdates Карта<String, LineItemUpdate >
updateTime Временная метка ISO

Необходимый.

Время обновления заказа.

orderManagementActions Список< OrderManagementAction >

Действия после заказа, такие как обращение в службу поддержки и просмотр сведений о заказе.

Должно быть не менее 1 и не более 6 предметов .

rejectionInfo RejectionInfo

Требуется, если orderState.state = "REJECTED" .

cancellationInfo CancellationInfo

Требуется, если orderState.state = "CANCELLED" .

inTransitInfo InTransitInfo

Это поле устарело.

fulfillmentInfo FulfillmentInfo

Это поле устарело.

receipt Receipt

Требуется, когда orderState.state = "CONFIRMED", "IN_PREPARATION", or "READY_FOR_PICKUP" .

Укажите видимый пользователю идентификатор заказа в квитанции.

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. Используйте это, чтобы обновить расчетное время получения во время ответа на оформление заказа.

Пример: PT90M

В следующем примере показан элемент PickupInfo :

Пример

{
  "pickupTimeIso8601": "PT90M"
}

Почтовый адрес

В следующей таблице перечислены свойства типа PostalAddress :

Свойство Тип Описание
regionCode Нить

Необходимый.

Двухбуквенный код страны.

Пример: US

postalCode Нить

Почтовый индекс.

Пример: 94043

administrativeArea Нить

Высшее административное подразделение, используемое для почтовых адресов страны или региона. Это может быть штат, провинция, область или префектура.

Пример: CA

locality Нить

Город или поселок для этого местоположения. В регионах мира, где населенные пункты не определены четко или не вписываются в эту структуру, не указывайте местоположение и вместо этого используйте поле AddressLines.

Пример: Mountain View

addressLines Список<Строка>

Одна или несколько строк, которые можно использовать для указания почтового адреса. Это поле не следует изменять, поскольку оно может содержать неясные местоположения.

Пример: [ "1350 Charleston Road" ]

recipients Список<Строка>

Список получателей заказа. Это поле доступно только в BillingAddress.

В следующем примере показан элемент PostalAddress :

Пример

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

Цена

В следующей таблице перечислены свойства типа Price :

Свойство Тип Описание
type Enum [ "ESTIMATE", "ACTUAL" ]

Необходимый.

Код промо-купона.

amount Money

Необходимый.

Повышение

В следующей таблице перечислены свойства типа Promotion :

Свойство Тип Описание
coupon Нить

Необходимый.

Код промо-купона.

Предлагаемый заказ

В следующей таблице перечислены свойства типа 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 Конст

Установите значение «ложь».

Значение: False

finalResponse FinalResponse

Необходимый.

Содержит ваш ответ на оформление корзины.

В следующем примере показан элемент AppResponse :

Пример 1

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

Пример 2

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

Пример 3

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

Пример 4

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

Оформить заказОтветСообщение

CheckoutResponseMessage — это 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 символов, чтобы обеспечить правильное отображение.

Пример: Contact us

openUrlAction OpenUrlAction

Необходимый.

В следующем примере показан элемент Button :

Пример

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

Информация об отмене

В следующей таблице перечислены свойства типа CancellationInfo :

Свойство Тип Описание
reason Нить

Необходимый.

Отображаемая текстовая причина отклонения, когда OrderState.state имеет значение «ОТМЕНЕНО».

Пример: Restaurant closed

В следующем примере показан элемент 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».

Значение: type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension

estimatedFulfillmentTimeIso8601 Нить

Расчетное время, когда заказ будет доставлен или готов к самовывозу. Строка должна быть в формате ISO 8601 и соответствовать интервалу, а не одному фиксированному времени. Приемлемые соглашения: интервалы, продолжительность и дата/время. Это поле можно отправить в SubmitOrderResponseMessage или AsyncOrderUpdateRequestMessage, когда информация станет доступной или произойдет изменение, например раннее или задержанное прибытие.

Пример: 2017-07-17T13:00:00Z/2017-07-17T13:30:00Z

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».

Пример: https://www.google.com

Управление заказамиДействие

Order management enables users to get post-order support and should be sent in each OrderUpdate within the submit order AppResponse and each subsequent AsyncOrderUpdateRequestMessage Order management actions sent for a particular order can vary based on the state.

For example, in the "CREATED" state, CUSTOMER_SERVICE might reference your customer support telephone. Then, in the "CONFIRMED" state, CUSTOMER_SERVICE can change to the restaurant's telephone if that becomes the best point of contact for the customer. Similarly, once the order is in the "FULFILLED" state, CUSTOMER_SERVICE can reference your support email addresss.

The following table lists the properties for the OrderManagementAction type:

Свойство Тип Описание
type OrderManagementActionType

Required.

button Button

Required.

The following example shows a OrderManagementAction element:

Example 1

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

Example 2

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

OrderManagementActionType

Defines types related to OrderManagementAction .

The OrderManagementActionType type has the following possible values:

  • CUSTOMER_SERVICE : Email and/or contact number of customer service to be shown on order confirmation page. This is required. openUrlAction.url prefix must be "mailto", "tel", "http", or "https".
  • EMAIL : Email action on order details page only. openUrlAction.url prefix must be "mailto".
  • CALL_DRIVER : Call action on order details page only. openUrlAction.url prefix must be "tel".
  • CALL_RESTAURANT : Call action on order details page only. openUrlAction.url prefix must be "tel".

OrderState

The current state of the order. Each state value of OrderState also corresponds to a purchase status on myaccount.google.com .

The following table lists the properties for the OrderState type:

Свойство Тип Описание
state OrderStateEnum

Required.

label String

Required.

The user-visible display string for the state. Use sentence case.

Example: Your order has been received

The following example shows a OrderState element:

Пример

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

OrderStateEnum

Defines types related to OrderState .

The OrderStateEnum type has the following possible values:

  • CREATED : Order created by integrator and waiting for confirmation by provider. Corresponds to the "Ordered" purchase status.
  • CONFIRMED : Order confirmed by provider and is active. Corresponds to the "Accepted" purchase status.
  • REJECTED : Order rejected by integrator or provider. Corresponds to the "Declined" purchase status.
  • CANCELLED : User cancelled the order. Corresponds to the "Cancelled" purchase status.
  • IN_PREPARATION : Food is being prepared. Corresponds to the "Status unknown" purchase status.
  • READY_FOR_PICKUP : Food is ready for pickup. Corresponds to the "Ready for pickup" purchase status.
  • IN_TRANSIT : Order is being delivered. Corresponds to the "In progress" purchase status.
  • FULFILLED : User received what was ordered. Corresponds to the "Picked up" purchase status.

Receipt

Send this type in a submit order AppResponse , where OrderState is "CONFIRMED", "FULFILLED", or "IN_TRANSIT". Send receipt at the time when the userVisibleOrderId becomes available. You don't need to keep sending the receipt in subsequent updates.

The following table lists the properties for the Receipt type:

Свойство Тип Описание
userVisibleOrderId String

Required.

Required if the order is "CONFIRMED", "IN_TRANSIT", or "FULFILLED". This field is the single user-facing ID for this order (usually the restaurant's order ID), displayed in both the integrator's receipt and the Google order card. The user must be able to use this ID to reference their order for customer service with the provider and integrator. You only need to provide this ID one time in any given OrderUpdate. Until it is provided, the actionOrderId is the userVisibleOrderId. For example, you may not have a userVisibleOrderId until the order is confirmed by the restaurant. Once confirmed, you must then send an AsyncOrderUpdateRequestMessage with an OrderUpdate and a Receipt.

The following example shows a Receipt element:

Пример

{
  "userVisibleOrderId": "userVisibleId1234"
}

RejectionInfo

The following table lists the properties for the RejectionInfo type:

Свойство Тип Описание
type RejectionType

Required.

reason String

Reason for the rejection used for internal logging. This field is not visible to users.

The following example shows a RejectionInfo element:

Пример

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

RejectionType

The RejectionType type has the following possible values:

  • INELIGIBLE : User is not eligible due to policy or risk-related concerns.
  • PAYMENT_DECLINED : There is an issue with payment processing.
  • UNAVAILABLE_SLOT : The order cannot be fulfilled at the order ahead time specified by DeliveryInfo or PickupInfo.
  • PROMO_NOT_APPLICABLE : There is an issue with the promotion.
  • UNKNOWN : Any other reason.

Payment-related types

This section describes the payment-related types used for food ordering fulfillment.

ActionProvidedPaymentOptions

Requirements for an action-provided payment method.

The following table lists the properties for the ActionProvidedPaymentOptions type:

Свойство Тип Описание
paymentType PaymentType

Required.

displayName String

Required.

Name of the payment instrument displayed on the receipt.

Example: Taco Points Total

onFulfillmentPaymentData OnFulfillmentPaymentData

Additional data for the paymentType "ON_FULFILLMENT". For example, you can use this field to specify if cash or card are supported on fulfillment.

The following example shows a ActionProvidedPaymentOptions element:

Пример

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

AllowedAuthMethods

The AllowedAuthMethods type has the following possible values:

  • PAN_ONLY : Authentication method associated with payment cards stored on file with the user's Google Account. Returned payment data includes personal account number (PAN) with the expiration month and the expiration year.

AllowedCardNetworks

The AllowedCardNetworks type has the following possible values:

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

BillingAddressParameters

This object allows you to set additional fields to be returned for a requested billing address.

The following table lists the properties for the BillingAddressParameters type:

Свойство Тип Описание
format String

Billing address format required to complete the transaction. MIN: Name, country code, and postal code. FULL: Name, street address, locality, region, country code, and postal code.

The following example shows a BillingAddressParameters element:

Example 1

{
  "format": "MIN"
}

Example 2

{
  "format": "FULL"
}

CardParameters

Use this object to configure your site's support for the Google Pay API.

The following table lists the properties for the CardParameters type:

Свойство Тип Описание
allowedAuthMethods List<Const>

Required.

Fields supported to authenticate a card transaction.

Must have no fewer than 1 item .

allowedCardNetworks List< AllowedCardNetworks >

Required.

One or more card networks that you support that are also supported by the Google Pay API.

Must have no fewer than 1 item .

billingAddressRequired Boolean

Set to true if you require a billing address. Only request a billing address if it's required to process the transaction. Additional data requests can increase friction in the checkout process and lead to lower conversion rates.

billingAddressParameters BillingAddressParameters

The expected fields returned if billingAddressRequired is set to true.

cvcRequired Boolean

Set to true if using TimesofMoney, false for all other payment processors.

The following example shows a CardParameters element:

Example 1

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

Example 2

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

GoogleProvidedPaymentInstrument

The following table lists the properties for the GoogleProvidedPaymentInstrument type:

Свойство Тип Описание
instrumentToken String

Required.

Base 64-encoded string containing the payment token for charging the user with a participating Google Pay processor, per the previously specified GoogleProvidedPaymentOptions.

billingAddress PostalAddress

Billing address for the payment.

The following example shows a GoogleProvidedPaymentInstrument element:

Пример

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

GoogleProvidedPaymentOptions

Requirements for Google-provided payment method.

The following table lists the properties for the GoogleProvidedPaymentOptions type:

Свойство Тип Описание
facilitationSpecification String

A PaymentDataRequest JSON as a string. Use this object to configure your site's support for the Google Pay API.

supportedCardNetworks List< SupportedCardNetworks >

Use facilitationSpecification instead. Type of card networks supported by the agent.

This field is deprecated.

prepaidCardDisallowed Boolean

Use facilitationSpecification instead. Whether or not a prepaid card is allowed as a payment type.

This field is deprecated.

billingAddressRequired Boolean

Use facilitationSpecification instead. Whether or not a billing address is required.

This field is deprecated.

tokenizationParameters TokenizationParameters

This field is deprecated.

The following example shows a GoogleProvidedPaymentOptions element:

Example 1

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

Example 2

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

Example 3

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

MerchantInfo

Use this object to configure your site's support for the Google Pay API.

The following table lists the properties for the MerchantInfo type:

Свойство Тип Описание
merchantId String

Google merchant identifier issued to you by Google Pay.

merchantName String

Required.

Merchant name encoded as UTF-8. Merchant name is rendered in the payment sheet.

OnFulfillmentPaymentData

Use this object to send additional data for the PaymentType "ON_FULFILLMENT".

The following table lists the properties for the OnFulfillmentPaymentData type:

Свойство Тип Описание
supportedPaymentOptions List< PaymentOptionsEnums >

List of payment options available to the user at the time of order fulfillment.

The following example shows a OnFulfillmentPaymentData element:

Пример

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

Параметры

Defines types related to TokenizationParameters .

The following table lists the properties for the Parameters type:

Свойство Тип Описание
gateway String

Required.

Example: braintree

gatewayMerchantId String
[additionalKey: string] String Additional key-value pairs

The following example shows a Parameters element:

Example 1

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

Example 2

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

PaymentDataRequest

Use this object to configure your site's support for the Google Pay API.

The following table lists the properties for the PaymentDataRequest type:

Свойство Тип Описание
apiVersion Const

Required.

Major API version.

Value: 2

apiVersionMinor Const

Required.

Minor API version.

Value: 0

merchantInfo MerchantInfo

Required.

(Google Pay merchant ID) Information about the merchant that requests payment data.

allowedPaymentMethods List< PaymentMethod >

Required.

Specifies support for one or more payment methods supported by the Google Pay API.

transactionInfo TransactionInfo

Required.

Details about the authorization of the transaction based upon whether the user agrees to the transaction or not. This field includes total price and price status.

The following example shows a PaymentDataRequest element:

Пример

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

PaymentInfo

Payment-related information for an order.

The following table lists the properties for the PaymentInfo type:

Свойство Тип Описание
displayName String

Required.

User-visible name of the payment instrument to display on the receipt.

paymentType PaymentType

Required.

googleProvidedPaymentInstrument GoogleProvidedPaymentInstrument

Token that can be used by the action. Only specify this if you specified GoogleProvidedPaymentOptions as a payment option in the CheckoutResponseMessage.

The following example shows a PaymentInfo element:

Example 1

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

Example 2

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

PaymentMethod

Use this object to configure your site's support for the Google Pay API.

The following table lists the properties for the PaymentMethod type:

Свойство Тип Описание
type Const

Required.

Short identifier for the supported payment method. Only CARD is currently supported.

Value: CARD

parameters CardParameters

Required.

Parameters required to configure the provided payment method type.

tokenizationSpecification TokenizationSpecification

Required.

Configure an account or decryption provider to receive payment information. This property is required for the CARD payment method.

The following example shows a PaymentMethod element:

Пример

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

PaymentOptions

The following table lists the properties for the PaymentOptions type:

Свойство Тип Описание
Exactly one of the following groups of properties is required.
googleProvidedOptions Group 1 GoogleProvidedPaymentOptions

Mutually exclusive with actionProvidedOptions. Use this for online payment using gPay.

actionProvidedOptions Group 2 ActionProvidedPaymentOptions

Mutually exclusive with googleProvidedOptions. Use this for "cash on delivery" or "pay on fulfillment".

The following example shows a PaymentOptions element:

Example 1

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

Example 2

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

Example 3

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

PaymentOptionsEnums

The PaymentOptionsEnums type has the following possible values:

  • Cash
  • Card
  • UPI
  • Paytm

PaymentType

The PaymentType type has the following possible values:

  • PAYMENT_CARD : For GoogleProvidedPaymentOptions.
  • ON_FULFILLMENT : For ActionProvidedPaymentOptions.

SupportedCardNetworks

Defines types related to GoogleProvidedPaymentOptions .

The SupportedCardNetworks type has the following possible values:

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

TokenizationParameters

Defines types related to GoogleProvidedPaymentOptions .

The following table lists the properties for the TokenizationParameters type:

Свойство Тип Описание
tokenizationType Enum [ "UNSPECIFIED_TOKENIZATION_TYPE", "PAYMENT_GATEWAY" ]

Required.

Use facilitationSpecification instead. Type of tokens acceptable.

parameters Parameters

Use facilitationSpecification instead.

TokenizationSpecification

This object allows you to configure an account to receive chargeable payment information.

The following table lists the properties for the TokenizationSpecification type:

Свойство Тип Описание
type Const

Required.

parameters Parameters

Required.

The following example shows a TokenizationSpecification element:

Example 1

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

Example 2

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

TransactionInfo

This object describes a transaction that determines a payer's ability to pay. It's used to present a payment authorization dialog.

The following table lists the properties for the TransactionInfo type:

Свойство Тип Описание
currencyCode String

Required.

ISO 4217 alphabetic currency code.

transactionId String

Unique ID that identifies a transaction attempt. Merchants may use an existing ID or generate a specific one for Google Pay transaction attempts. This field is required when you send callbacks to the Google Transaction Events API.

totalPriceStatus Const

Required.

Use "ESTIMATED" as the default. Total price may adjust based on the details of the response, such as sales tax collected based on a billing address.

Value: ESTIMATED

totalPrice String

Required.

Total monetary value of the transaction with an optional decimal precision of two decimal places. This field should have the same value as cart.totalPrice.

The following example shows a TransactionInfo element:

Пример

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