기본 유형
장바구니
주문 세부정보와 수령 또는 배송 요청 여부가 포함됩니다. 장바구니에는 배송 세부정보, 팁, 배송지 주소도 포함됩니다.Cart
객체는 Checkout AppRequest
에 정의되어 있습니다. Checkout AppResponse
에 장바구니 사본을 포함합니다.
다음 표에는 Cart
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
@type |
Const |
이 객체의 유형입니다. 상위 장바구니 객체가 ProposedOrder의 일부인 경우 이 필드를 생략합니다. 값: |
|
id |
String |
장바구니의 ID(선택사항)입니다. |
|
merchant |
Merchant |
이 장바구니와 제휴된 판매자입니다. |
|
lineItems |
List<LineItem > |
필수 항목입니다. 사용자가 주문하는 상품 또는 서비스 목록입니다. 항목 1개 이상이어야 합니다. |
|
promotions |
List<Promotion > |
이 장바구니에 적용된 프로모션입니다. 현재 프로모션은 하나만 지원됩니다. |
|
notes |
String |
주문 또는 배송 안내에 관한 메모 |
|
extension |
FoodCartExtension |
처리 환경설정과 같은 사용자에 관한 세부정보를 정의합니다. |
다음 예는 Cart
요소를 보여줍니다.
예 1
{ "@type": "type.googleapis.com/google.actions.v2.orders.Cart", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }
예 2
{ "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }
문의
주문 수령자에 관한 세부정보를 지정합니다.AppResponse
에서만 사용할 수 있습니다.
다음 표에는 Contact
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
displayName |
String |
주문 제품을 수령할 사람의 이름(표시할 이름) firstName 및 lastName이 지정되지 않은 경우 이 필드를 사용하세요. 예: |
|
email |
String |
주문 제품을 수령할 사람의 이메일 주소입니다. 예: |
|
firstName |
String |
주문 제품을 수령할 사람의 이름입니다. 예: |
|
lastName |
String |
주문 제품을 수령할 사람의 성입니다. 예: |
|
phoneNumber |
String |
주문 제품을 수령할 사람의 전화번호(국가 코드 포함) 예: |
|
emailVerified |
Boolean |
주문 제품을 수령하는 사용자가 Google 계정으로 로그인했는지 여부를 나타냅니다. |
다음 예는 Contact
요소를 보여줍니다.
예
{ "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" }
CustomPushMessage
요청의OrderUpdate
를 포함합니다.
다음 표에는 CustomPushMessage
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
orderUpdate |
OrderUpdate |
필수 항목입니다. 주문 정보가 업데이트되었습니다. |
다음 예는 CustomPushMessage
요소를 보여줍니다.
예
{ "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "IN_TRANSIT", "label": "Order is on the way" }, "inTransitInfo": { "updatedTime": "2017-07-17T12:00:00Z" }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } } ], "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } }
DeliveryInfo
다음 표에는 DeliveryInfo
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
deliveryTimeIso8601 |
String |
예상 전송 시간(ISO 8601 타임스탬프 형식: '{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z' 또는 시간 형식: 'P(n)Y(n)M(n)DT(n)H(n)M(n)S')입니다. 예를 들어 PT90M은 90분의 길이를 나타냅니다. 기본값인 'PT0M'은 최대한 빨리 전송하는 것이 바람직함을 나타냅니다. 참고: https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations 결제 응답 중에 예상 배송일을 업데이트하는 데 사용합니다. 예: |
다음 예는 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
다음 표에는 FeeAmountRange
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
minFeeAmount |
Money |
청구된 수수료 금액의 하한입니다. |
|
maxFeeAmount |
Money |
청구된 수수료 금액의 상한입니다. |
FeePercentRange
다음 표에는 FeePercentRange
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
minFeePercent |
숫자 |
청구되는 수수료 비율의 하한입니다. |
|
maxFeePercent |
숫자 |
청구되는 수수료 비율의 상한입니다. |
FoodCartExtension
처리 환경설정과 같은 사용자에 관한 세부정보를 포함합니다.
다음 표에는 FoodCartExtension
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
@type |
Const |
이 확장 프로그램의 유형입니다. 이 필드는 항상 'type.googleapis.com/google.actions.v2.orders.FoodCartExtension'으로 설정됩니다. 값: |
|
contact |
Contact |
주문 제품을 수령할 사람의 연락처 정보 세부정보에는 사용자의 이름, 전화번호, 이메일 주소가 포함됩니다. |
|
fulfillmentPreference |
FulfillmentOption |
필수 항목입니다. 사용자의 처리 환경설정입니다. |
|
location |
Location |
CheckoutRequestMessage에서 이 필드는 배송 주소를 지정합니다. 이 주소는 주문 상품을 배송해야 하는 경우에 필요합니다. 테이크아웃 또는 매장 수령 주문의 경우 이 입력란이 메시지에 포함되지 않습니다. |
다음 예는 FoodCartExtension
요소를 보여줍니다.
예 1
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } }
예 2
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" } }
FoodErrorExtension
요청을 처리하는 동안 발생한 하나 이상의 오류를 식별합니다. 다음 표에서는FoodErrorExtension
유형의 필드를 설명합니다.
오류는 CheckoutResponse
로 전송할 수 있습니다.
다음 표에는 FoodErrorExtension
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
@type |
Const | 필수 항목입니다. 이 확장 프로그램의 유형입니다. 값: |
|
foodOrderErrors |
List<FoodOrderError > |
필수 항목입니다. 발생한 오류를 설명하는 FoodOrderError 객체 배열입니다. 장바구니 또는 상품당 하나의 오류를 표시하는 것이 좋습니다. 항목 1개 이상이어야 합니다. |
|
correctedProposedOrder |
ProposedOrder |
수정사항이 포함된 새 ProposedOrder입니다. 원래 ProposedOrder에 복구 가능한 오류가 있는 경우 이 객체를 반환합니다. 예를 들어 장바구니에 있는 하나 이상의 광고 항목의 가격이 변경되면 복구 가능한 오류가 됩니다. 유효한 ProposedOrder가 있는 복구 가능한 오류는 사용자가 장바구니를 검토하도록 요구하는 대신 확인 단계로 진행됩니다. |
|
paymentOptions |
PaymentOptions |
사용자에게 선택된 기본 결제 옵션입니다. |
|
additionalPaymentOptions |
List<PaymentOptions > |
사용자가 사용할 수 있는 개발자 제공 결제 시스템의 대체 결제 옵션입니다. |
다음 예는 FoodErrorExtension
요소를 보여줍니다.
예
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension", "foodOrderErrors": [ { "error": "PRICE_CHANGED", "id": "sample_item_offer_id_1", "description": "The price has changed.", "updatedPrice": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, { "error": "PRICE_CHANGED", "id": "sample_item_offer_id_2", "description": "The price has changed.", "updatedPrice": { "currencyCode": "USD", "units": "8" } } ], "correctedProposedOrder": { "id": "sample_corrected_proposed_order_id_1", "otherItems": [ { "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }, { "name": "Delivery fee", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 500000000 } }, "type": "TAX" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "36", "nanos": 730000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] } }, "paymentOptions": { "googleProvidedOptions": { "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:publishableKey": "pk_live_stripe_client_key", "stripe:version": "2017-04-06" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "JCB", "VISA" ], "prepaidCardDisallowed": true } } }
FoodItemExtension
음식 항목의 부가기능을 정의합니다.
다음 표에는 FoodItemExtension
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
@type |
Const | 필수 항목입니다. 이 확장 프로그램의 유형입니다. 이 필드는 항상 'type.googleapis.com/google.actions.v2.orders.FoodItemExtension'으로 설정됩니다. 값: |
|
options |
List<FoodItemOption > |
옵션은 부가기능 상품 또는 부가기능 그룹일 수 있으며, 부가기능 그룹에는 여러 개의 부가기능이 포함될 수 있습니다. |
다음 예는 FoodItemExtension
요소를 보여줍니다.
예
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1, "subOptions": [ { "id": "10239138", "offerId": "912391723", "name": "Fries", "price": { "currencyCode": "USD", "units": "2", "nanos": 230000000 }, "quantity": 1 } ] } ] }
FoodItemOption
다음 표에는 FoodItemOption
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
id |
String |
Google에서 할당한 고유 ID입니다. FoodOrderError 또는 AsyncOrderUpdateRequest를 전송할 때 이 필드를 사용하여 장바구니에 offerId가 동일한 상품이 두 개 이상 포함된 경우를 구분합니다. 예: |
|
offerId |
String |
상품의 혜택 ID입니다. 예: |
|
name |
String |
옵션 이름입니다. 예: |
|
price |
Money |
||
note |
String |
옵션과 관련된 메모입니다. |
|
quantity |
숫자 |
상품인 옵션의 경우 상품 수입니다. 예: |
|
subOptions |
List<FoodItemOption > |
옵션의 하위 옵션(있는 경우) 예: |
다음 예는 FoodItemOption
요소를 보여줍니다.
예 1
{ "id": "10293231", "offerId": "1918491", "name": "Honey Mustard", "price": { "currencyCode": "USD", "units": "1", "nanos": 250000000 }, "quantity": 5 }
예 2
{ "id": "123166552", "offerId": "912849184", "name": "Make It A Meal", "price": { "currencyCode": "USD", "units": "3", "nanos": 730000000 }, "quantity": 1, "subOptions": [ { "id": "10239138", "offerId": "912391723", "name": "Fries", "price": { "currencyCode": "USD", "units": "2", "nanos": 230000000 }, "quantity": 1 }, { "id": "57159183", "offerId": "81837123", "name": "Drink", "price": { "currencyCode": "USD", "units": "3", "nanos": 130000000 }, "quantity": 1 } ] }
FoodOrderError
CheckoutResponse
의 오류에 관한 세부정보를 포함합니다.
다음 표에는 FoodOrderError
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
error |
Error |
필수 항목입니다. |
|
id |
String |
이 필드는 상품 수준 오류에 필요합니다. 메뉴 항목의 경우 Google에서 할당한 LineItem.id이고 부가기능의 경우 FoodItemOption.id입니다. |
|
description |
String |
오류에 대한 설명입니다. 이 설명은 내부 로깅용이며 사용자에게는 표시되지 않습니다. |
|
updatedPrice |
Money |
오류를 일으킨 상품의 새 가격입니다. 오류가 'PRICE_CHANGED'인 경우에만 필요합니다. |
|
availableQuantity |
정수 |
오류를 일으킨 상품의 새로운 재고 수입니다. 오류가 'INVALID' 또는 'NOT_FOUND'인 경우에만 필요합니다. 'INVALID' 및 'NOT_FOUND'의 경우 값은 0이어야 합니다. |
다음 예는 FoodOrderError
요소를 보여줍니다.
예 1
{ "error": "CLOSED", "description": "This store is currently reachable. Please try again later." }
예 2
{ "error": "PRICE_CHANGED", "id": "french_fries", "description": "The price has changed.", "updatedPrice": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }
FoodOrderExtension
주문에 대한 처리 정보를 포함합니다.
다음 표에는 FoodOrderExtension
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
@type |
Const |
이 확장 프로그램의 유형입니다. 이 필드는 항상 'type.googleapis.com/google.actions.v2.orders.FoodOrderExtension'으로 설정됩니다. 값: |
|
availableFulfillmentOptions |
List<FulfillmentOption > |
주문에 사용할 수 있는 처리 옵션을 나타냅니다. |
|
optinForRemarketing |
Boolean |
사용자가 마케팅 채널을 선택하도록 요청합니다. 기본적으로 사용자의 동의 없이 마케팅 콘텐츠를 보낼 수 없습니다. optinForRemarketing이 true이면 사용자를 구독할 수 있습니다. optinForRemarketing이 false이거나 존재하지 않는 경우 시스템의 구독 상태를 그대로 유지해야 합니다. 사용자는 Google을 통해 선택 해제할 수 없으며 마케팅 채널에 제공된 구독 취소 기능을 통해서만 선택 해제할 수 있습니다. 이 플래그는 SubmitOrderRequestMessage에만 있습니다. |
다음 예는 FoodOrderExtension
요소를 보여줍니다.
예 1
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] }
예 2
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2020-08-20T11:41:00Z" } ], "optinForRemarketing": true }
FulfillmentOption
다음과 같은 방법으로FulfillmentOption
객체를 사용할 수 있습니다.
-
Checkout AppRequest
및Submit AppRequest
의Cart.extension.fulfillmentPreference
: 사용자의 환경설정 (배송 또는 수령)을 저장합니다. 결제 요청이 전송될 때 가격은 항상 0입니다. -
Checkout AppResponse
에서ProposedOrder.extension.availableFulfillmentOptions
: 하나 이상의 전송 옵션을 정의합니다 (현재 하나의 옵션만 지원됨).ProposedOrder.otherItems
에서 기본 옵션을LineItem
로 지정합니다.FulfillmentOption
의offerId
는ProposedOrder.otherItems
에 지정된LineItem
의 ID와 일치해야 합니다.
다음 표에는 FulfillmentOption
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
offerId |
String |
이 처리 옵션의 고유 식별자(있는 경우)입니다. |
|
fulfillmentInfo |
FulfillmentOptionInfo |
필수 항목입니다. |
|
expiresAt |
ISO 타임스탬프 |
이 처리 옵션이 만료되는 시간입니다. |
|
price |
Money |
이 옵션의 비용입니다. |
다음 예는 FulfillmentOption
요소를 보여줍니다.
예
{ "offerId": "offer5", "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2019-05-02T00:00:00-07:00", "price": { "currencyCode": "USD", "units": "5", "nanos": 230000000 } }
FulfillmentOptionInfo
FulfillmentInfo
와 관련된 정보를 정의합니다.
다음 표에는 FulfillmentOptionInfo
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
다음 속성 그룹 중 정확히 하나가 필요합니다. | |||
delivery |
그룹 1 | DeliveryInfo |
있는 경우 배송 주문을 나타냅니다. |
pickup |
그룹 2 | PickupInfo |
이 필드가 있는 경우 수령 주문을 나타냅니다. |
이미지
다음 표에는 Image
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
sourceUrl |
String | 필수 항목입니다. 이미지의 URL입니다. 이미지는 최소 72x72픽셀이어야 합니다. 최상의 결과를 얻으려면 216x216픽셀 이상의 이미지를 사용하세요. 이미지는 6MB 미만이고 64메가픽셀 미만이어야 합니다. |
LineItem
장바구니의 콘텐츠 (Cart.lineItems
) 또는 주문의 추가 비용 (ProposedOrder.otherItems
)을 정의합니다.
다음 표에는 LineItem
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
id |
String |
장바구니의 상품 (ProposedOrder.cart.lineItems[0].id)의 경우 주문을 만들 때 Google에서 생성한 고유 ID입니다. 배송비 및 세금과 같은 항목을 추가하는 데 사용되는 ProposedOrder의 LineItem (ProposedOrder.otherItems[0].id)의 경우 ID 값은 제공업체에서 정의합니다. 예를 들어 장바구니에 준비 안내가 다른 동일한 상품 2개가 있는 경우 (예: 토핑 세트가 다른 미디엄 피자 2개) 이 경우 두 항목의 기본 offerId가 동일합니다. 상품이 거부되었음을 나타내는 주문 업데이트 요청을 전송할 때 이 ID를 구분 기호로 사용합니다. 즉, 특정 토핑이 누락되어 피자 중 하나가 거부된 경우 ID를 사용하면 Google에서 주문의 어떤 상품을 언급하는지 파악할 수 있습니다. 이 필드는 otherItems를 제외하고 필수 입력란입니다. |
|
name |
String | 필수 항목입니다. 광고 항목의 이름입니다. 사용자에게 표시되는 문자열이며 가능하면 문장 대소문자로 표시해야 합니다 (예: '배송비', '서비스 수수료', '세금'). 이 필드는 사용자의 경우 100자(영문 기준)로 잘립니다. |
|
type |
LineItemType |
필수 항목입니다. |
|
quantity |
정수 |
포함된 상품의 수입니다. ProposedOrder.otherItems에는 적용되지 않습니다. |
|
description |
String |
상품 설명 |
|
price |
Price |
필수 항목입니다. 상품의 가격입니다. 이 값은 이 광고 항목의 모든 상품 또는 서비스의 총 가격을 반영합니다 (즉, 부가기능의 비용을 더하고 수량을 곱함). 예를 들어 10달러 상품의 수량이 3개이면 가격은 30달러가 됩니다. 기본 가격이 5,000원이고 부가기능 가격이 1,000원인 피자 1개의 가격은 6,000원입니다. 기본 가격이 5,000원이고 부가기능이 1,000원인 피자 2개 (수량 = 2)의 가격은 12,000원입니다. 각 LineItem에는 가격이 '0'이더라도 가격이 있어야 합니다. 유형이 DISCOUNT인 경우 값을 음수로 지정합니다 (예: '-2'). |
|
subLines |
List<SublineNote > |
선택사항이며 유형이 'REGULAR'인 경우에만 유효합니다. 결제 요청 및 주문 제출 요청의 이 입력란에 사용자의 상품별 메모가 전송될 수 있습니다. 메모가 제공되면 판매자가 메모를 수신하는지 확인합니다. 요청에 subLines[0].note로 표시되며, 요청에 이 필드가 있는 경우 이 필드에 제공되는 유일한 값입니다. 항목 1개 이하여야 합니다. |
|
offerId |
String |
상품의 MenuItem의 혜택 ID입니다. ProposedOrder.otherItems에는 적용되지 않습니다. |
|
extension |
FoodItemExtension |
음식 항목의 부가기능을 정의합니다. |
다음 예는 LineItem
요소를 보여줍니다.
예 1
{ "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }
예 2
{ "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }
LineItemType
LineItemType
유형은 다음과 같은 값을 가질 수 있습니다.
REGULAR
: 상품 광고 항목입니다. Cart.lineItems에 적용할 수 있습니다.TAX
: 세금 항목입니다. ProposedOrder.otherItems에 적용됩니다.DISCOUNT
: 할인 광고 항목입니다. 가격은 음수여야 합니다. ProposedOrder.otherItems에 적용됩니다.GRATUITY
: 팁 항목입니다. 일반적으로 사용자가 선택한 팁의 SubmitOrderRequestMessage에 예약됩니다. ProposedOrder.otherItems에 적용됩니다.DELIVERY
: 게재 광고 항목입니다. ProposedOrder.otherItems에 적용됩니다.SUBTOTAL
: 총계 항목입니다. ProposedOrder.otherItems에 적용됩니다.FEE
: 다른 유형에 해당하지 않는 추가 광고 항목입니다. ProposedOrder.otherItems에 적용됩니다.
위치
음식 주문 주소를 지정합니다.Location
유형은 Cart
에서 배송 명령의 대상만 나타내는 데 사용됩니다.
사용자가 주문하는 경우 최종 위치는 TransactionDecisionValue
에도 표시됩니다. 수령을 지정한 주문의 경우 위치가 전혀 포함되지 않습니다 (빈 위치도 포함되지 않음).
다음 표에는 Location
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
coordinates |
Coordinates |
||
formattedAddress |
String |
위치의 주소를 표시합니다. 예: |
|
postalAddress |
PostalAddress |
||
zipCode |
String |
예: |
|
city |
String |
도시 이름입니다. 예: |
|
notes |
String |
게이트 코드와 같은 위치에 관한 메모 500자(영문 기준) 이하여야 합니다. 예: |
다음 예는 Location
요소를 보여줍니다.
예
{ "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" }
판매자
다음 표에는 Merchant
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
id |
String |
판매자의 ID입니다. 지정된 경우 레스토랑 피드의 Restaurant.@id와 일치합니다. 예: |
|
name |
String | 필수 항목입니다. 사용자에게 표시되는 판매자 이름입니다. 예: |
다음 예는 Merchant
요소를 보여줍니다.
예
{ "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }
Money
다음 표에는 Money
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
currencyCode |
String | 필수 항목입니다. ISO 4217 형식의 3글자 통화 코드입니다. 예: |
|
units |
String |
금액의 전체 단위입니다. 예를 들어 currencyCode가 'USD'인 경우 단위 '1'은 1달러(USD)입니다. 예: |
|
nanos |
정수 |
금액의 나노 (10^-9) 단위 숫자입니다. 값은 -999,999,999~+999,999,999(양 끝값 포함) 사이여야 합니다. 다음 규칙을 따르세요. 단위가 양수이면 나노가 양수 또는 0이어야 합니다. 단위가 0인 경우에는 나노가 양수, 0 또는 음수가 될 수 있습니다. 단위가 음수인 경우 나노는 음수 또는 0이어야 합니다. 예를 들어 $-1.75는 units = -1 및 nanos = -750,000,000으로 나타냅니다. 예: |
다음 예는 Money
요소를 보여줍니다.
예 1
{ "currencyCode": "USD", "units": "36", "nanos": 730000000 }
예 2
{ "currencyCode": "EUR", "units": "10" }
주문
세금, 수수료, 배송비를 포함한 최종 주문과 결제 정보가 포함됩니다. 이 객체는Submit AppRequest
의 작업에서 수신됩니다.
다음 표에는 Order
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
finalOrder |
ProposedOrder |
필수 항목입니다. 주문을 유발한 제안된 순서입니다. |
|
googleOrderId |
String | 필수 항목입니다. Google에서 할당한 주문 ID입니다. 이 ID는 주문의 전체 수명 주기 동안 안정적이어야 합니다. 이 ID는 최종 사용자에게 표시되지 않습니다. |
|
orderDate |
ISO 타임스탬프 | 필수 항목입니다. 주문이 생성된 날짜 및 시간입니다. |
|
paymentInfo |
PaymentInfo |
필수 항목입니다. 이 주문에 대한 결제에 해당하는 결제 정보입니다. |
다음 예는 Order
요소를 보여줍니다.
예
{ "finalOrder": { "cart": { "notes": "Guest prefers their food to be hot when it is delivered.", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" } } }, "otherItems": [ { "name": "Service fee", "type": "FEE", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } } }, { "name": "Tax", "type": "TAX", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } } }, { "name": "Tip", "type": "GRATUITY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 590000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "23", "nanos": 710000000 } }, "id": "sample_final_order_id", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ], "optinForRemarketing": true } }, "googleOrderId": "sample_google_order_id", "orderDate": "2017-07-17T12:00:00Z", "paymentInfo": { "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" } }
OrderUpdate
다음 표에서는AppResponse
에 포함된 OrderUpdate 유형의 필드를 설명합니다.
다음 표에는 OrderUpdate
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
actionOrderId |
String | 필수 항목입니다. 업데이트가 전송되는 주문을 식별하는 데 사용되는 통합업체 시스템의 주문 고유 ID입니다. 'CREATED' 주문에 대해 OrderUpdate에서 receipt.user_visible_order_id가 한 번 이상 제공되지 않으면 이 ID가 Google 주문 카드에 표시되는 입력된 사용자 표시 ID가 됩니다. |
|
orderState |
OrderState |
필수 항목입니다. 주문의 새 상태입니다. |
|
lineItemUpdates |
Map<String, LineItemUpdate > |
||
updateTime |
ISO 타임스탬프 | 필수 항목입니다. 주문이 업데이트된 시간입니다. |
|
orderManagementActions |
List<OrderManagementAction > |
지원팀에 문의하고 주문 세부정보를 확인하는 등 주문 후 작업 1개 이상 6개 이하여야 합니다. |
|
rejectionInfo |
RejectionInfo |
|
|
cancellationInfo |
CancellationInfo |
|
|
inTransitInfo |
InTransitInfo |
이 필드는 지원 중단되었습니다. |
|
fulfillmentInfo |
FulfillmentInfo |
이 필드는 지원 중단되었습니다. |
|
receipt |
Receipt |
영수증에 사용자에게 표시되는 주문 ID를 입력합니다. |
|
totalPrice |
Price |
주문 총 가격입니다. |
|
infoExtension |
FoodOrderUpdateExtension |
예상 배송 또는 수령 간격과 같은 주문 업데이트의 세부정보를 정의합니다. |
다음 예는 OrderUpdate
요소를 보여줍니다.
예
{ "actionOrderId": "sample_action_order_id", "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "41", "nanos": 600000000 } }, "lineItemUpdates": { "sample_item_id_1": { "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "reason": "This item has an updated price." } }, "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "updateTime": "2017-07-17T12:00:00Z", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } }
PickupInfo
다음 표에는 PickupInfo
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
pickupTimeIso8601 |
String |
예상 수령 시간(ISO 8601 타임스탬프 형식: '{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z' 또는 시간 형식: 'P(n)Y(n)M(n)DT(n)H(n)M(n)S') 예를 들어 PT90M은 90분의 길이를 나타냅니다. 기본값인 'PT0M'은 최대한 빨리 수령하기를 원하는 것을 나타냅니다. 참고: https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations 결제 응답 중에 예상 수령 시간을 업데이트하는 데 사용합니다. 예: |
다음 예는 PickupInfo
요소를 보여줍니다.
예
{ "pickupTimeIso8601": "PT90M" }
PostalAddress
다음 표에는 PostalAddress
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
regionCode |
String | 필수 항목입니다. 2자리 국가 코드입니다. 예: |
|
postalCode |
String |
우편번호입니다. 예: |
|
administrativeArea |
String |
국가 또는 지역의 우편 주소에 사용되는 최상위 행정 구역 단위입니다. 주, 도, oblast 또는 현일 수 있습니다. 예: |
|
locality |
String |
이 위치의 시/도입니다. 지역이 잘 정의되지 않거나 이 구조에 잘 맞지 않는 경우 지역을 지정하지 말고 대신 addressLines 필드를 사용하세요. 예: |
|
addressLines |
List<String> |
상세 주소를 지정하는 데 사용할 수 있는 1개 이상의 행입니다. 이 필드는 불명확한 지역을 포함할 수 있으므로 수정해서는 안 됩니다. 예: |
|
recipients |
List<String> |
주문의 수신자 목록입니다. 이 필드는 billingAddress에서만 사용할 수 있습니다. |
다음 예는 PostalAddress
요소를 보여줍니다.
예
{ "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }
가격
다음 표에는 Price
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
type |
Enum [
"ESTIMATE",
"ACTUAL"
] |
필수 항목입니다. 프로모션 쿠폰 코드입니다. |
|
amount |
Money |
필수 항목입니다. |
프로모션
다음 표에는 Promotion
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
coupon |
String | 필수 항목입니다. 프로모션 쿠폰 코드입니다. |
ProposedOrder
다음 표에는 ProposedOrder
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
id |
String |
제안된 주문의 ID(선택사항)입니다. |
|
cart |
Cart |
필수 항목입니다. 사용자의 상품입니다. |
|
otherItems |
List<LineItem > |
배송비, 기타 수수료, 세금 등 제공업체가 추가한 항목입니다. otherItems에는 사용자가 추가한 봉사료 또는 할인도 포함될 수 있습니다. 항목 10개 이하여야 합니다. |
|
image |
Image |
제안된 주문과 연결된 이미지입니다. |
|
totalPrice |
Price |
필수 항목입니다. 제안된 주문의 총 가격입니다. |
|
extension |
FoodOrderExtension |
필수 항목입니다. 음식 주문의 처리 정보를 정의합니다. |
|
disclaimers |
List<Disclaimer > |
주문하기 전에 UI에 표시되는 면책 조항 메시지에 해당합니다. |
다음 예는 ProposedOrder
요소를 보여줍니다.
예
{ "id": "sample_proposed_order_id_1", "otherItems": [ { "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }, { "name": "Delivery fee", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 500000000 } }, "type": "TAX" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "36", "nanos": 730000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] } }
SublineNote
다음 표에는 SublineNote
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
note |
String | 필수 항목입니다. |
타임스탬프
날짜 및 시간으로, 다음 형식을 따릅니다.
"{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"
TransactionDecisionValue
Order
를 포함합니다.
다음 표에는 TransactionDecisionValue
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
order |
Order |
필수 항목입니다. 결제 세부정보가 포함된 주문입니다. |
다음 예는 TransactionDecisionValue
요소를 보여줍니다.
예
{ "order": { "finalOrder": { "cart": { "notes": "Guest prefers their food to be hot when it is delivered.", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" } } }, "otherItems": [ { "name": "Service fee", "type": "FEE", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } } }, { "name": "Tax", "type": "TAX", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } } }, { "name": "Tip", "type": "GRATUITY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 590000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "23", "nanos": 710000000 } }, "id": "sample_final_order_id", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ], "optinForRemarketing": true } }, "googleOrderId": "sample_google_order_id", "orderDate": "2017-07-17T12:00:00Z", "paymentInfo": { "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" } } }
처리 요청
AppRequest
다음 표에는 AppRequest
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
isInSandbox |
Boolean |
후속 트랜잭션이 샌드박스 환경에서 실행되는지 여부를 나타냅니다. |
|
conversation |
Conversation |
||
inputs |
List<Input > |
필수 항목입니다. 장바구니 결제에 필요한 인수를 포함합니다. 정확히 1개의 항목이 있어야 합니다. |
다음 예는 AppRequest
요소를 보여줍니다.
예 1
{ "isInSandbox": true, "inputs": [ { "intent": "actions.foodordering.intent.CHECKOUT", "arguments": [ { "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.Cart", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } } } ] } ] }
예 2
{ "isInSandbox": true, "inputs": [ { "intent": "actions.intent.TRANSACTION_DECISION", "arguments": [ { "transactionDecisionValue": { "order": { "finalOrder": { "cart": { "notes": "Guest prefers their food to be hot when it is delivered.", "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Cucina Venti" }, "lineItems": [ { "name": "Sizzling Prawns Dinner", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "16", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Lovefood Ordering", "email": "ilovefood@example.com", "phoneNumber": "+16501234567" } } }, "otherItems": [ { "name": "Service fee", "type": "FEE", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } } }, { "name": "Tax", "type": "TAX", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } } }, { "name": "Tip", "type": "GRATUITY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 590000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "23", "nanos": 710000000 } }, "id": "sample_final_order_id", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ], "optinForRemarketing": true } }, "googleOrderId": "sample_google_order_id", "orderDate": "2017-07-17T12:00:00Z", "paymentInfo": { "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" } } } } ] } ] }
CheckoutRequestMessage
CheckoutRequestMessage
는 actions.foodordering.intent.CHECKOUT
인텐트가 있는 AppRequest
입니다.
SubmitOrderRequestMessage
SubmitOrderRequestMessage
는 actions.foodordering.intent.TRANSACTION_DECISION
인텐트가 있는 AppRequest
입니다.
대화
Conversation
는 하나의 세션에만 고유합니다. 필요한 경우 이를 사용하여 여러 Checkout
및 SubmitOrder
작업을 함께 연결할 수 있습니다.
다음 표에는 Conversation
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
conversationId |
String | 필수 항목입니다. 대화의 고유 ID입니다. |
다음 예는 Conversation
요소를 보여줍니다.
예
{ "conversationId": "CQnJ7Z4i7UmvEZ9ph3AxyZRJ" }
입력
장바구니 결제에 필요한 인수입니다.
다음 표에는 Input
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
intent |
Enum [
"actions.foodordering.intent.CHECKOUT",
"actions.intent.TRANSACTION_DECISION"
] |
필수 항목입니다. 결제 요청 메시지의 경우 'actions.foodordering.intent.CHECKOUT'으로, 주문 제출 요청 메시지의 경우 'actions.intent.TRANSACTION_DECISION'으로 설정합니다. |
|
arguments |
List<Argument > |
필수 항목입니다. 결제할 장바구니 또는 주문할 제품을 포함합니다. 정확히 1개의 항목이 있어야 합니다. |
인수
사용자가 확인하려는 음식에 관한 세부정보가 포함되어 있습니다. 결제의 경우 연장만 적용됩니다. 주문 제출의 경우 transactionDecisionValue만 적용됩니다.
다음 표에는 Argument
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
다음 속성 그룹 중 정확히 하나가 필요합니다. | |||
extension |
그룹 1 | Cart |
사용자가 확인하려는 음식 품목에 관한 세부정보입니다. |
transactionDecisionValue |
그룹 2 | TransactionDecisionValue |
결제 세부정보와 함께 처리할 주문을 포함합니다. |
처리 응답
AppResponse
다음 표에는 AppResponse
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
expectUserResponse |
Const |
false로 설정합니다. 값: |
|
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
CheckoutResponseMessage
는 StructuredResponse
에 checkoutResponse
또는 error
가 있는 AppResponse
입니다.
SubmitOrderResponseMessage
SubmitOrderResponseMessage
는 StructuredResponse
에 orderUpdate
가 있는 AppResponse
입니다.
FinalResponse
장바구니 결제 또는 SubmitOrderRequestMessage에 대한 응답입니다.
다음 표에는 FinalResponse
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
richResponse |
RichResponse |
필수 항목입니다. CheckoutRequestMessage 또는 SubmitOrderRequestMessage에 대한 응답을 포함합니다. |
CheckoutResponse
다음 표에는 CheckoutResponse
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
proposedOrder |
ProposedOrder |
필수 항목입니다. 거래에 사용할 제안된 주문입니다. |
|
paymentOptions |
PaymentOptions |
필수 항목입니다. 사용자에게 선택된 기본 결제 옵션입니다. |
|
additionalPaymentOptions |
List<PaymentOptions > |
사용자가 사용할 수 있는 개발자 제공 결제 시스템의 대체 결제 옵션입니다. |
다음 예는 CheckoutResponse
요소를 보여줍니다.
예
{ "proposedOrder": { "id": "sample_proposed_order_id_1", "otherItems": [ { "name": "New customer discount", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": -500000000 } }, "type": "DISCOUNT" }, { "name": "Delivery fee", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 500000000 } }, "type": "TAX" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Pita Chips", "type": "REGULAR", "id": "sample_item_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "2", "nanos": 750000000 } }, "subLines": [ { "note": "Notes for this item." } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension", "options": [ { "id": "sample_addon_offer_id_1", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "name": "Honey Mustard", "price": { "currencyCode": "USD" }, "quantity": 1 }, { "id": "sample_addon_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id2", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "nanos": 500000000 }, "quantity": 1 } ] } }, { "name": "Chicken Shwarma Wrap", "type": "REGULAR", "id": "sample_item_offer_id_2", "offerId": "https://www.exampleprovider.com/menu/item/offer/id2", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "8" } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Greek Salad", "type": "REGULAR", "id": "sample_item_offer_id_3", "offerId": "https://www.exampleprovider.com/menu/item/offer/id3", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } }, { "name": "Prawns Biryani", "type": "REGULAR", "id": "sample_item_offer_id_4", "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "15", "nanos": 990000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P90M" } } }, "location": { "coordinates": { "latitude": 37.788783, "longitude": -122.41384 }, "formattedAddress": "1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States", "zipCode": "94043", "city": "Mountain View", "postalAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] }, "notes": "Gate code is #111" } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "36", "nanos": 730000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } }, "expiresAt": "2017-07-17T12:30:00Z" } ] } }, "paymentOptions": { "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\": false }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" } }, "additionalPaymentOptions": [ { "actionProvidedOptions": { "paymentType": "ON_FULFILLMENT", "displayName": "Cash on delivery." } } ] }
항목
장바구니 결제 또는 SubmitOrderRequestMessage에 대한 응답을 포함합니다.
다음 표에는 Item
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
structuredResponse |
StructuredResponse |
필수 항목입니다. |
RichResponse
장바구니 결제에 대한 응답을 포함합니다.
다음 표에는 RichResponse
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
items |
List<Item > |
필수 항목입니다. 정확히 1개의 항목이 있어야 합니다. |
StructuredResponse
CheckoutResponseMessage의 경우 다음 중 하나일 수 있습니다. CheckoutResponse: 성공적인 결제를 나타냅니다. 또는 FoodErrorExtension: 결제 중 실패를 나타냅니다. 응답에는 수정된 ProposedOrder 및 PaymentOptions가 포함되거나 PaymentOptions가 없는 오류 메시지가 포함될 수 있습니다. SubmitOrderResponseMessage의 경우 orderUpdate만 적용됩니다.
다음 표에는 StructuredResponse
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
다음 속성 그룹 중 정확히 하나가 필요합니다. | |||
checkoutResponse |
그룹 1 | CheckoutResponse |
결제한 상품과 세금, 할인 |
error |
그룹 2 | FoodErrorExtension |
장바구니 항목에 오류가 있습니다. 오류의 성격에 따라 이 속성에는 수정된 ProposedOrder 및 PaymentOptions가 포함되거나 PaymentOptions가 없는 오류 메시지만 포함될 수 있습니다. |
orderUpdate |
그룹 3 | OrderUpdate |
비동기 주문 업데이트
이 섹션에서는 일반적인 음식 주문 내장 액션 상호작용의 요청과 응답을 구성하는 대략적인 유형을 설명합니다.AsyncOrderUpdateRequestMessage
주문이 제출되고 확인된 후 사용자에게 변경사항을 알립니다. 예를 들어 사용자에게 주문이 배송 중임을 알리거나 가격이 변경되었음을 알릴 수 있습니다. 자세한 내용은 다음을 참조하세요.다음 표에는 AsyncOrderUpdateRequestMessage
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
isInSandbox |
Boolean |
이 업데이트가 전송된 주문이 샌드박스 결제임을 나타냅니다. |
|
customPushMessage |
CustomPushMessage |
필수 항목입니다. 요청의 OrderUpdate를 포함합니다. |
다음 예는 AsyncOrderUpdateRequestMessage
요소를 보여줍니다.
예
{ "isInSandbox": true, "customPushMessage": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "IN_TRANSIT", "label": "Order is on the way" }, "inTransitInfo": { "updatedTime": "2017-07-17T12:00:00Z" }, "updateTime": "2017-07-17T12:00:00Z", "receipt": { "userVisibleOrderId": "userVisibleId1234" }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" } } } }
AsyncOrderUpdateResponseMessage
AsyncOrderUpdateRequestMessage
를 전송하면 Google에서 HTTP 200 상태와 빈 본문으로 응답합니다. 업데이트에 실패하면 Google에서 주문 업데이트가 실패한 이유에 관한 세부정보를 포함하여 응답합니다.
주문 업데이트 유형
버튼
사용자 상호작용을 제공하기 위해 추가할 수 있는 사용자 인터페이스 요소를 정의합니다.
다음 표에는 Button
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
title |
String | 필수 항목입니다. 디스플레이 라벨입니다. 올바르게 렌더링되도록 30자(영문 기준) 이하의 문장 첫 글자 대문자를 사용하세요. 예: |
|
openUrlAction |
OpenUrlAction |
필수 항목입니다. |
다음 예는 Button
요소를 보여줍니다.
예
{ "title": "Send us feedback", "openUrlAction": { "url": "mailto:person@example.com" } }
CancellationInfo
다음 표에는 CancellationInfo
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
reason |
String | 필수 항목입니다. OrderState.state가 'CANCELLED'인 경우 거부 이유를 표시할 수 있는 텍스트입니다. 예: |
다음 예는 CancellationInfo
요소를 보여줍니다.
예
{ "reason": "Insufficient inventory" }
FoodOrderUpdateExtension
이 유형은 사용자에게 주문 제품이 배송되거나 수령할 수 있을 것으로 예상되는 간격을 제공합니다. 정보가 제공되거나 마지막으로 전송된 이후 변경될 때마다 OrderUpdate
로 이 확장 프로그램을 전송합니다.
사용자의 기대치를 일관되게 충족할 수 있도록 처리 간격에 대한 보수적인 추정치를 제공합니다. 예를 들어 주문 제품이 오늘 13시에 배송될 것으로 예상되는 경우 오늘 12시 45분에서 13시 15분과 같이 교통 상황에 따른 변동과 일치하는 예상 간격을 전송해야 합니다.
ISO 8601 시간 또는 타임스탬프는 OrderUpdate
의 updateTime
(기본적으로 '지금')에서 updateTime
+ duration
까지의 간격을 의미하는 것으로 해석됩니다.
'지금'이 실제로 합리적인 기대치가 아닌 한 이 형식을 사용하지 마세요.
ISO 8601 간격은 간격의 시작부터 끝까지의 간격을 의미하는 것으로 해석됩니다.
다음 표에는 FoodOrderUpdateExtension
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
@type |
Const |
이 확장 프로그램의 유형입니다. 이 필드는 항상 'type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension'으로 설정됩니다. 값: |
|
estimatedFulfillmentTimeIso8601 |
String |
주문 상품이 배송되거나 수령할 수 있을 것으로 예상되는 시간입니다. 문자열은 ISO 8601 형식이어야 하며 고정된 단일 시간이 아닌 간격에 해당해야 합니다. 허용되는 약어는 간격, 기간, 날짜/시간입니다. 이 필드는 정보가 제공되거나 도착이 일찍 또는 지연되는 등 변경사항이 있을 때 SubmitOrderResponseMessage 또는 AsyncOrderUpdateRequestMessage로 전송할 수 있습니다. 예: |
|
foodOrderErrors |
List<FoodOrderError > |
순서 지정 후에 발생한 오류를 설명합니다. 장바구니 또는 상품당 하나의 오류를 표시하는 것이 좋습니다. RejectionInfo에 포함되지 않은 오류에는 FoodOrderUpdateExtension.FoodOrderErrors를 사용하세요. 항목 1개 이상이어야 합니다. |
다음 예는 FoodOrderUpdateExtension
요소를 보여줍니다.
예 1
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z" }
예 2
{ "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "foodOrderErrors": [ { "error": "NO_CAPACITY", "description": "Sorry, the restaurant cannot take your order right now." } ] }
FulfillmentInfo
다음 표에는 FulfillmentInfo
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
다음 속성 그룹 중 정확히 하나가 필요합니다. | |||
deliveryTime |
그룹 1 | ISO 타임스탬프 |
FoodOrderingUpdateExtension 메시지에서 estimatedFulfillmentTimeIso8601 사용 |
pickupTime |
그룹 2 | ISO 타임스탬프 |
FoodOrderingUpdateExtension 메시지에서 estimatedFulfillmentTimeIso8601 사용 |
다음 예는 FulfillmentInfo
요소를 보여줍니다.
예 1
{ "deliveryTime": "2017-05-10T02:36:38.803Z" }
예 2
{ "pickupTime": "2019-12-26T07:24:27.803Z" }
InTransitInfo
다음 표에는 InTransitInfo
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
updatedTime |
ISO 타임스탬프 |
FoodOrderingUpdateExtension 메시지에서 estimatedFulfillmentTimeIso8601 사용 |
다음 예는 InTransitInfo
요소를 보여줍니다.
예
{ "updatedTime": "2017-05-10T02:36:38.803Z" }
LineItemUpdate
다음 표에는 LineItemUpdate
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
orderState |
OrderState |
||
price |
Price |
||
reason |
String |
변경 사유입니다. 가격 변경 시 필요합니다. |
다음 예는 LineItemUpdate
요소를 보여줍니다.
예
{ "orderState": { "state": "CONFIRMED", "label": "Provider confirmed" }, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "5", "nanos": 500000000 } }, "reason": "Menu updated prices." }
OpenUrlAction
다음 표에는 OpenUrlAction
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
url |
String | 필수 항목입니다. 버튼을 클릭하거나 터치하여 트리거되는 작업입니다. 적용 가능한 접두사 목록은 orderManagementActionType에 따라 다릅니다. 'EMAIL': 접두사는 'mailto'여야 합니다. 'CALL': 접두사는 'tel'이어야 합니다. 'CUSTOMER_SERVICE': 접두사는 'mailto', 'tel', 'http' 또는 'https'여야 합니다. 예: |
OrderManagementAction
주문 관리를 통해 사용자는 주문 후 지원을 받을 수 있으며 주문 제출 AppResponse
내의 각 OrderUpdate
및 후속 AsyncOrderUpdateRequestMessage
에 전송해야 합니다. 특정 주문에 대해 전송되는 주문 관리 작업은 상태에 따라 다를 수 있습니다.
예를 들어 'CREATED' 상태에서 CUSTOMER_SERVICE
는 고객 지원 전화번호를 참조할 수 있습니다. 그런 다음 '확인됨' 상태에서 CUSTOMER_SERVICE
는 고객에게 가장 적합한 연락처가 레스토랑 전화번호인 경우 레스토랑 전화번호로 변경할 수 있습니다. 마찬가지로 주문이 'FULFILLED'(완료됨) 상태가 되면 CUSTOMER_SERVICE
에서 지원 이메일 주소를 참조할 수 있습니다.
다음 표에는 OrderManagementAction
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
type |
OrderManagementActionType |
필수 항목입니다. |
|
button |
Button |
필수 항목입니다. |
다음 예는 OrderManagementAction
요소를 보여줍니다.
예 1
{ "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }
예 2
{ "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:person@example.com" } } }
OrderManagementActionType
OrderManagementAction
와 관련된 유형을 정의합니다.
OrderManagementActionType
유형은 다음과 같은 값을 가질 수 있습니다.
CUSTOMER_SERVICE
: 주문 확인 페이지에 표시할 고객 서비스의 이메일 또는 연락처 번호입니다. 필수 항목입니다. openUrlAction.url 접두사는 'mailto', 'tel', 'http' 또는 'https'여야 합니다.EMAIL
: 주문 세부정보 페이지에서만 이메일 작업을 실행할 수 있습니다. openUrlAction.url 접두사는 'mailto'여야 합니다.CALL_DRIVER
: 주문 세부정보 페이지에서만 작업을 호출합니다. openUrlAction.url 접두사는 'tel'이어야 합니다.CALL_RESTAURANT
: 주문 세부정보 페이지에서만 작업을 호출합니다. openUrlAction.url 접두사는 'tel'이어야 합니다.
OrderState
주문의 현재 상태입니다. OrderState
의 각 state
값은 myaccount.google.com의 구매 상태에 해당합니다.
다음 표에는 OrderState
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
state |
OrderStateEnum |
필수 항목입니다. |
|
label |
String | 필수 항목입니다. 상태의 사용자에게 표시되는 표시 문자열입니다. 첫 글자는 대문자로 표기합니다. 예: |
다음 예는 OrderState
요소를 보여줍니다.
예
{ "state": "CONFIRMED", "label": "Provider confirmed" }
OrderStateEnum
OrderState
와 관련된 유형을 정의합니다.
OrderStateEnum
유형은 다음과 같은 값을 가질 수 있습니다.
CREATED
: 통합자가 주문을 생성했으며 공급자의 확인을 기다리는 중입니다. '주문됨' 구매 상태에 해당합니다.CONFIRMED
: 제공업체에서 주문을 확인했으며 주문이 활성 상태입니다. '수락됨' 구매 상태에 해당합니다.REJECTED
: 통합업체 또는 공급업체에서 주문을 거부했습니다. '거부됨' 구매 상태에 해당합니다.CANCELLED
: 사용자가 주문을 취소했습니다. '취소됨' 구매 상태에 해당합니다.IN_PREPARATION
: 음식을 준비하는 중입니다. '알 수 없는 상태' 구매 상태에 해당합니다.READY_FOR_PICKUP
: 음식을 수령할 수 있습니다. '수령 준비 완료' 구매 상태에 해당합니다.IN_TRANSIT
: 주문 제품이 배송 중입니다. '진행 중' 구매 상태에 해당합니다.FULFILLED
: 사용자가 주문한 제품을 받았습니다. '수령됨' 구매 상태에 해당합니다.
영수증
주문 제출AppResponse
에서 이 유형을 전송합니다. 여기서 OrderState
은 'CONFIRMED', 'FULFILLED' 또는 'IN_TRANSIT'입니다. userVisibleOrderId
를 사용할 수 있게 되면 영수증을 전송합니다. 후속 업데이트에서 영수증을 계속 보내지 않아도 됩니다.
다음 표에는 Receipt
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
userVisibleOrderId |
String | 필수 항목입니다. 주문이 'CONFIRMED', 'IN_TRANSIT' 또는 'FULFILLED'인 경우 필수입니다. 이 필드는 이 주문에 대한 단일 사용자 대상 ID (일반적으로 음식점의 주문 ID)로, 통합업체의 영수증과 Google 주문 카드에 모두 표시됩니다. 사용자는 이 ID를 사용하여 공급업체 및 통합업체에 고객 서비스 주문을 참조할 수 있어야 합니다. 이 ID는 주어진 OrderUpdate에서 한 번만 제공하면 됩니다. 제공될 때까지 actionOrderId는 userVisibleOrderId입니다. 예를 들어 음식점에서 주문을 확인할 때까지는 userVisibleOrderId가 없을 수 있습니다. 확인되면 OrderUpdate 및 Receipt와 함께 AsyncOrderUpdateRequestMessage를 전송해야 합니다. |
다음 예는 Receipt
요소를 보여줍니다.
예
{ "userVisibleOrderId": "userVisibleId1234" }
RejectionInfo
다음 표에는 RejectionInfo
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
type |
RejectionType |
필수 항목입니다. |
|
reason |
String |
내부 로깅에 사용되는 거부 사유입니다. 이 필드는 사용자에게 표시되지 않습니다. |
다음 예는 RejectionInfo
요소를 보여줍니다.
예
{ "type": "PAYMENT_DECLINED", "reason": "There is an issue with payment processing." }
RejectionType
RejectionType
유형은 다음과 같은 값을 가질 수 있습니다.
INELIGIBLE
: 정책 또는 위험 관련 문제로 인해 사용자가 자격 요건을 충족하지 않습니다.PAYMENT_DECLINED
: 결제 처리에 문제가 있습니다.UNAVAILABLE_SLOT
: DeliveryInfo 또는 PickupInfo에 지정된 미리 주문 시간에 주문을 처리할 수 없습니다.PROMO_NOT_APPLICABLE
: 프로모션에 문제가 있습니다.UNKNOWN
: 기타 이유
결제 관련 유형
이 섹션에서는 음식 주문 처리에 사용되는 결제 관련 유형을 설명합니다.ActionProvidedPaymentOptions
액션에서 제공하는 결제 수단의 요구사항
다음 표에는 ActionProvidedPaymentOptions
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
paymentType |
PaymentType |
필수 항목입니다. |
|
displayName |
String | 필수 항목입니다. 영수증에 표시되는 결제 수단의 이름입니다. 예: |
|
onFulfillmentPaymentData |
OnFulfillmentPaymentData |
paymentType이 'ON_FULFILLMENT'인 경우의 추가 데이터입니다. 예를 들어 이 필드를 사용하여 처리 시 현금 또는 카드가 지원되는지 지정할 수 있습니다. |
다음 예는 ActionProvidedPaymentOptions
요소를 보여줍니다.
예
{ "paymentType": "ON_FULFILLMENT", "displayName": "Pay when you get your food.", "onFulfillmentPaymentData": { "supportedPaymentOptions": [ "Cash", "Card" ] } }
AllowedAuthMethods
AllowedAuthMethods
유형은 다음과 같은 값을 가질 수 있습니다.
PAN_ONLY
: 사용자의 Google 계정에 등록되어 저장된 결제 카드와 연결된 인증 방법입니다. 반환된 결제 데이터에는 만료 월 및 만료 연도가 포함된 개인 계좌 번호 (PAN)가 포함됩니다.
AllowedCardNetworks
AllowedCardNetworks
유형은 다음과 같은 값을 가질 수 있습니다.
AMEX
DISCOVER
INTERAC
JCB
MASTERCARD
VISA
BillingAddressParameters
이 객체를 사용하면 요청된 청구서 수신 주소에 추가로 반환되는 입력란을 설정할 수 있습니다.
다음 표에는 BillingAddressParameters
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
format |
String |
거래를 완료하는 데 필요한 청구서 수신 주소 형식입니다. MIN: 이름, 국가 코드, 우편번호입니다. 전체: 이름, 상세 주소, 구/군/시, 주/도, 국가 코드, 우편번호입니다. |
다음 예는 BillingAddressParameters
요소를 보여줍니다.
예 1
{ "format": "MIN" }
예 2
{ "format": "FULL" }
CardParameters
이 객체를 사용하여 Google Pay API에 대한 사이트의 지원을 구성합니다.
다음 표에는 CardParameters
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
allowedAuthMethods |
List<Const> | 필수 항목입니다. 카드 거래를 인증하기 위해 지원되는 필드입니다. 항목 1개 이상이어야 합니다. |
|
allowedCardNetworks |
List<AllowedCardNetworks > |
필수 항목입니다. 대행업체 및 Google Pay API에서 지원하는 카드 네트워크 목록입니다. 항목 1개 이상이 있어야 합니다. |
|
billingAddressRequired |
Boolean |
청구서 수신 주소가 필요한 경우 true로 설정합니다. 거래를 처리하는 데 필요한 경우에만 청구서 수신 주소를 요청하세요. 결제 과정에서 추가 데이터를 요청하면 사용자의 불편을 야기하므로 전환율이 낮아질 수 있습니다. |
|
billingAddressParameters |
BillingAddressParameters |
billingAddressRequired가 true로 설정된 경우 반환되는 예상 필드입니다. |
|
cvcRequired |
Boolean |
TimesofMoney를 사용하는 경우 true로 설정하고 다른 모든 결제 프로세서에는 false로 설정합니다. |
다음 예는 CardParameters
요소를 보여줍니다.
예 1
{ "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "AMEX", "DISCOVER" ], "billingAddressRequired": false, "cvcRequired": false }
예 2
{ "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "AMEX", "DISCOVER" ], "billingAddressRequired": true, "billingAddressParameters": { "format": "MIN" }, "cvcRequired": false }
GoogleProvidedPaymentInstrument
다음 표에는 GoogleProvidedPaymentInstrument
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
instrumentToken |
String | 필수 항목입니다. 이전에 지정된 GoogleProvidedPaymentOptions에 따라 참여 Google Pay 프로세서로 사용자에게 청구하기 위한 결제 토큰이 포함된 base64로 인코딩된 문자열입니다. |
|
billingAddress |
PostalAddress |
결제의 청구서 수신 주소입니다. |
다음 예는 GoogleProvidedPaymentInstrument
요소를 보여줍니다.
예
{ "instrumentToken": "abcd", "billingAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "1350 Charleston Road" ] } }
GoogleProvidedPaymentOptions
Google에서 제공하는 결제 수단의 요건
다음 표에는 GoogleProvidedPaymentOptions
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
facilitationSpecification |
String |
PaymentDataRequest JSON을 문자열로 변환합니다. 이 객체를 사용하여 Google Pay API에 대한 사이트의 지원을 구성합니다. |
|
supportedCardNetworks |
List<SupportedCardNetworks > |
대신 facilitationSpecification을 사용하세요. 상담사가 지원하는 카드 네트워크 유형입니다. 이 필드는 지원 중단되었습니다. |
|
prepaidCardDisallowed |
Boolean |
대신 facilitationSpecification을 사용하세요. 선불카드가 결제 유형으로 허용되는지 여부입니다. 이 필드는 지원 중단되었습니다. |
|
billingAddressRequired |
Boolean |
대신 facilitationSpecification을 사용하세요. 청구서 수신 주소가 필요한지 여부입니다. 이 필드는 지원 중단되었습니다. |
|
tokenizationParameters |
TokenizationParameters |
이 필드는 지원 중단되었습니다. |
다음 예는 GoogleProvidedPaymentOptions
요소를 보여줍니다.
예 1
{ "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\": false }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" }
예 2
{ "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "braintree", "braintree:apiVersion": "v1", "braintree:sdkVersion": "1.4.0", "braintree:merchantId": "a1b2c3d4e5", "braintree:clientKey": "production_braintree_client_key", "braintree:authorizationFingerprint": "same_as_client_key" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "JCB", "VISA" ], "prepaidCardDisallowed": true }
예시 3
{ "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:publishableKey": "pk_live_stripe_client_key", "stripe:version": "2017-04-06" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "VISA", "JCB" ], "prepaidCardDisallowed": true, "billingAddressRequired": true }
MerchantInfo
이 객체를 사용하여 Google Pay API에 대한 사이트의 지원을 구성합니다.
다음 표에는 MerchantInfo
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
merchantId |
String |
Google Pay에서 발급한 Google 판매자 ID입니다. |
|
merchantName |
String | 필수 항목입니다. UTF-8로 인코딩된 판매자 이름입니다. 판매자 이름이 결제 명세서에 렌더링됩니다. |
OnFulfillmentPaymentData
이 객체를 사용하여 PaymentType 'ON_FULFILLMENT'의 추가 데이터를 전송합니다.
다음 표에는 OnFulfillmentPaymentData
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
supportedPaymentOptions |
List<PaymentOptionsEnums > |
주문 처리 시 사용자에게 제공되는 결제 옵션 목록입니다. |
다음 예는 OnFulfillmentPaymentData
요소를 보여줍니다.
예
{ "supportedPaymentOptions": [ "Cash", "Card" ] }
매개변수
TokenizationParameters
와 관련된 유형을 정의합니다.
다음 표에는 Parameters
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
gateway |
String | 필수 항목입니다. 예: |
|
gatewayMerchantId |
String | ||
[additionalKey: string] |
String | 추가 키-값 쌍 |
다음 예는 Parameters
요소를 보여줍니다.
예 1
{ "gatewayMerchantId": "90412491", "gateway": "olo" }
예 2
{ "gateway": "braintree", "braintree:apiVersion": "v1", "braintree:sdkVersion": "1.4.0", "braintree:merchantId": "YOUR_MERCHANT_ID", "braintree:clientKey": "YOUR_BRAINTREE_SANDVOX_OR_PRODUCTION_KEY" }
PaymentDataRequest
이 객체를 사용하여 Google Pay API에 대한 사이트의 지원을 구성합니다.
다음 표에는 PaymentDataRequest
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
apiVersion |
Const | 필수 항목입니다. API 주 버전입니다. 값: |
|
apiVersionMinor |
Const | 필수 항목입니다. API 부 버전입니다. 값: |
|
merchantInfo |
MerchantInfo |
필수 항목입니다. (Google Pay 판매자 ID) 결제 데이터를 요청하는 판매자에 대한 정보입니다. |
|
allowedPaymentMethods |
List<PaymentMethod > |
필수 항목입니다. Google Pay API에서 지원하는 하나 이상의 결제 수단에 대한 지원을 지정합니다. |
|
transactionInfo |
TransactionInfo |
필수 항목입니다. 사용자가 거래에 동의했는지 여부에 따른 거래 승인 세부정보입니다. 이 필드에는 총 가격 및 가격 상태가 포함됩니다. |
다음 예는 PaymentDataRequest
요소를 보여줍니다.
예
{ "apiVersion": 2, "apiVersionMinor": 0, "merchantInfo": { "merchantId": "10391231", "merchantName": "Burrito Town" }, "allowedPaymentMethods": [ { "type": "CARD", "parameters": { "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "VISA", "AMEX", "MASTERCARD" ], "billingAddressRequired": true, "billingAddressParameters": { "format": "FULL" }, "cvcRequired": false }, "tokenizationSpecification": { "type": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:version": "2019-05-16", "stripe:publishableKey": "pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA" } } } ], "transactionInfo": { "currencyCode": "INR", "totalPriceStatus": "ESTIMATED", "totalPrice": "185.00" } }
PaymentInfo
주문의 결제 관련 정보입니다.
다음 표에는 PaymentInfo
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
displayName |
String | 필수 항목입니다. 영수증에 표시할 결제 수단의 사용자가 볼 수 있는 이름입니다. |
|
paymentType |
PaymentType |
필수 항목입니다. |
|
googleProvidedPaymentInstrument |
GoogleProvidedPaymentInstrument |
작업에서 사용할 수 있는 토큰입니다. CheckoutResponseMessage에서 GoogleProvidedPaymentOptions를 결제 옵션으로 지정한 경우에만 지정하세요. |
다음 예는 PaymentInfo
요소를 보여줍니다.
예 1
{ "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd" }, "paymentType": "PAYMENT_CARD" }
예 2
{ "displayName": "Visa\u2006****\u20061111", "googleProvidedPaymentInstrument": { "instrumentToken": "abcd", "billingAddress": { "regionCode": "US", "postalCode": "94043", "administrativeArea": "CA", "locality": "Mountain View", "addressLines": [ "123 Random Street", "Unit ABC" ], "recipients": [ "sample_receipient" ] } }, "paymentType": "PAYMENT_CARD" }
PaymentMethod
이 객체를 사용하여 Google Pay API에 대한 사이트의 지원을 구성합니다.
다음 표에는 PaymentMethod
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
type |
Const | 필수 항목입니다. 지원되는 결제 수단의 짧은 식별자입니다. 현재 CARD만 지원됩니다. 값: |
|
parameters |
CardParameters |
필수 항목입니다. 제공된 결제 수단 유형을 구성하는 데 필요한 매개변수입니다. |
|
tokenizationSpecification |
TokenizationSpecification |
필수 항목입니다. 결제 정보를 받을 계정 또는 복호화 제공업체를 구성합니다. 이 속성은 CARD 결제 수단에 필요합니다. |
다음 예는 PaymentMethod
요소를 보여줍니다.
예
{ "type": "CARD", "parameters": { "allowedAuthMethods": [ "PAN_ONLY" ], "allowedCardNetworks": [ "VISA", "AMEX", "MASTERCARD" ], "billingAddressRequired": false }, "tokenizationSpecification": { "type": "PAYMENT_GATEWAY", "parameters": { "gatewayMerchantId": "90412491", "gateway": "olo" } } }
PaymentOptions
다음 표에는 PaymentOptions
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
다음 속성 그룹 중 정확히 하나가 필요합니다. | |||
googleProvidedOptions |
그룹 1 | GoogleProvidedPaymentOptions |
actionProvidedOptions와 상호 배타적입니다. gPay를 통한 온라인 결제에 사용합니다. |
actionProvidedOptions |
그룹 2 | ActionProvidedPaymentOptions |
googleProvidedOptions와 상호 배타적입니다. '현금 수령' 또는 '결제 시 결제'에 사용합니다. |
다음 예는 PaymentOptions
요소를 보여줍니다.
예 1
{ "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\": false }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" } }
예 2
{ "googleProvidedOptions": { "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": { \"merchantId\": \"Merchant ID\", \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [ { \"type\": \"CARD\", \"parameters\": { \"allowedAuthMethods\": [ \"PAN_ONLY\" ], \"allowedCardNetworks\": [ \"VISA\", \"AMEX\", \"MASTERCARD\" ], \"billingAddressRequired\":true, \"billingAddressParameters\": { \"format\":\"MIN\" } }, \"tokenizationSpecification\": { \"type\": \"PAYMENT_GATEWAY\", \"parameters\": { \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\", \"gateway\": \"stripe\", \"stripe:version\": \"2019-05-16\" } } }],\"transactionInfo\": { \"currencyCode\": \"AUD\", \"totalPriceStatus\": \"ESTIMATED\", \"totalPrice\": \"1.0\"}}" } }
예시 3
{ "actionProvidedOptions": { "paymentType": "ON_FULFILLMENT", "displayName": "Pay when you get your food.", "onFulfillmentPaymentData": { "supportedPaymentOptions": [ "Cash", "Card" ] } } }
PaymentOptionsEnums
PaymentOptionsEnums
유형은 다음과 같은 값을 가질 수 있습니다.
Cash
Card
UPI
Paytm
PaymentType
PaymentType
유형은 다음과 같은 값을 가질 수 있습니다.
PAYMENT_CARD
: GoogleProvidedPaymentOptions의 경우ON_FULFILLMENT
: ActionProvidedPaymentOptions의 경우
SupportedCardNetworks
GoogleProvidedPaymentOptions
와 관련된 유형을 정의합니다.
SupportedCardNetworks
유형은 다음과 같은 값을 가질 수 있습니다.
UNSPECIFIED_CARD_NETWORK
AMEX
DISCOVER
JCB
MASTERCARD
VISA
TokenizationParameters
GoogleProvidedPaymentOptions
와 관련된 유형을 정의합니다.
다음 표에는 TokenizationParameters
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
tokenizationType |
Enum [
"UNSPECIFIED_TOKENIZATION_TYPE",
"PAYMENT_GATEWAY"
] |
필수 항목입니다. 대신 facilitationSpecification을 사용하세요. 허용되는 토큰 유형입니다. |
|
parameters |
Parameters |
대신 facilitationSpecification을 사용하세요. |
TokenizationSpecification
이 객체를 사용하면 청구 가능한 결제 정보를 받을 수 있는 계정을 구성할 수 있습니다.
다음 표에는 TokenizationSpecification
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
type |
Const | 필수 항목입니다. |
|
parameters |
Parameters |
필수 항목입니다. |
다음 예는 TokenizationSpecification
요소를 보여줍니다.
예 1
{ "type": "PAYMENT_GATEWAY", "parameters": { "gatewayMerchantId": "1247192", "gateway": "cybersource" } }
예 2
{ "type": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:version": "2018-10-31", "stripe:publishableKey": "12378127" } }
TransactionInfo
이 객체는 지급인의 결제 능력을 판단하는 거래를 설명합니다. 결제 승인 대화상자를 표시하는 데 사용됩니다.
다음 표에는 TransactionInfo
유형의 속성이 나와 있습니다.
속성 | 유형 | 설명 | |
---|---|---|---|
currencyCode |
String | 필수 항목입니다. ISO 4217 알파벳 통화 코드입니다. |
|
transactionId |
String |
트랜잭션 시도를 식별하는 고유한 ID입니다. 판매자는 Google Pay 거래 시도에 기존 ID를 사용하거나 특정한 ID를 생성할 수 있습니다. 이 필드는 Google Transaction Events API에 콜백을 보낼 때 필요합니다. |
|
totalPriceStatus |
Const | 필수 항목입니다. 기본값으로 'ESTIMATED'를 사용합니다. 청구서 수신 주소에 따라 수집된 판매세와 같은 응답 세부정보를 토대로 총 가격이 조정될 수 있습니다. 값: |
|
totalPrice |
String | 필수 항목입니다. 필요에 따라 십진수를 소수점 이하 두 자리로 표시하는 거래의 총 금액입니다. 이 필드의 값은 cart.totalPrice와 동일해야 합니다. |
다음 예는 TransactionInfo
요소를 보여줍니다.
예
{ "totalPriceStatus": "ESTIMATED", "totalPrice": "12.34", "currencyCode": "USD" }