Po wymeldowaniu zadzwoń, użytkownik sprawdza zaktualizowany koszyk z podatkami, opłatami za dostawę, rabatami i inne zwrócone opłaty. użytkownik potwierdza i przesyła zamówienie, Google wysyła do punktu końcowego realizacji zamówienia żądanie JSON, które zawiera informacje o zamówieniu. Twoja usługa internetowa musi otrzymać to zamówienie, przetworzyć je i odpowiedzieć Google, podając stan orzeczenia.
W tej sekcji opisano format wiadomości z prośbą o zamówienie wysłanej przez Google,
SubmitOrderRequestMessage
oraz format wiadomości z odpowiedzią
musisz podać, tzw.
SubmitOrderResponseMessage
Więcej informacji o cyklu realizacji zamówienia znajdziesz w
Przegląd realizacji.
Implementacja realizacji zamówień
Kompleksowa usługa internetowa Ordering utworzona do współpracy z kompleksową usługą Ordering
zawierać adres URL punktu końcowego, który będzie używany do odbierania od Google komunikatów o zamówieniach. Na zamówienie
, Twoja usługa internetowa otrzyma SubmitOrderRequestMessage
w formacie JSON
jako żądanie POST od Google. To żądanie zawiera zamówienie klienta,
w tym podatki, opłaty i dane do płatności. Po otrzymaniu złożonego zamówienia
żądania, usługa internetowa musi:
- Sprawdź możliwość transakcji, np. weryfikację karty lub wykrywanie oszustw.
- Utwórz zamówienie w systemie.
- Autoryzuj formę płatności i w razie potrzeby wywołaj interfejs API do obsługi płatności przez firmę obsługującą płatności.
- Odpowiedz, podając właściwy stan zamówienia:
CREATED
,CONFIRMED
lubREJECTED
.
Po przetworzeniu zamówienia kod realizacji musi zawierać odpowiedź
w postaci wiadomości JSON SubmitOrderResponseMessage
wysyłanej do Google.
Więcej informacji o usłudze sieciowej do kompleksowej realizacji zamówień dowiesz się z artykułu Informacje o realizacji.
Wiadomość z prośbą o zamówienie
Gdy klient zdecyduje się złożyć zamówienie w ramach kompleksowego procesu składania zamówienia,
Google wysyła do Twojej usługi internetowej żądanie z wiadomością JSON o nazwie
SubmitOrderRequestMessage
zawierający te dane:
- Intencja: pole
inputs[0].intent
w każdej treści żądania przesłania zamówienia. zawiera wartość ciąguactions.intent.TRANSACTION_DECISION
. - Kolejność: pole
inputs[0].arguments[0].transactionDecisionValue
w atrybucie w żądaniu przesłania zamówienia znajduje się obiektOrder
, który reprezentuje zamówienie klienta wraz ze szczegółami płatności. - Flaga piaskownicy: pole
isInSandbox
w prośbie o przesłanie zamówienia wskazuje czy transakcja wykorzystuje płatności piaskownicy.
Przykład żądania zamówienia
Oto przykład SubmitOrderRequestMessage
:
JSON
{ "user": {}, "conversation": { "conversationId": "CTKbKfUlHCyDEdcz_5PBJTtf" }, "inputs": [ { "intent": "actions.intent.TRANSACTION_DECISION", "arguments": [ { "transactionDecisionValue": { "order": { "finalOrder": { "cart": { "merchant": { "id": "restaurant/Restaurant/QWERTY", "name": "Tep Tep Chicken Club" }, "lineItems": [ { "name": "Spicy Fried Chicken", "type": "REGULAR", "id": "299977679", "quantity": 2, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "39", "nanos": 600000000 } }, "offerId": "MenuItemOffer/QWERTY/scheduleId/496/itemId/143", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "delivery": { "deliveryTimeIso8601": "P0M" } } }, "location": { "coordinates": { "latitude": -33.8376441, "longitude": 151.0868736 }, "formattedAddress": "Killoola St, 1, Concord West NSW 2138", "zipCode": "2138", "city": "Concord West", "postalAddress": { "regionCode": "AU", "postalCode": "2138", "administrativeArea": "NSW", "locality": "Concord West", "addressLines": [ "Killoola St", "1" ] } }, "contact": { "displayName": "Hab Sy", "email": "hab9878.sy@gmail.com", "phoneNumber": "+61000000000", "firstName": "Hab", "lastName": "Sy" } } }, "otherItems": [ { "name": "Delivery fee", "type": "DELIVERY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "3", "nanos": 500000000 } } }, { "name": "Subtotal", "type": "SUBTOTAL", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "39", "nanos": 600000000 } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "AUD", "units": "43", "nanos": 100000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension" } }, "googleOrderId": "01412971004192156198", "orderDate": "2020-10-22T09:02:06.173Z", "paymentInfo": { "displayName": "Pay when you get your food", "paymentType": "ON_FULFILLMENT" } } } } ] } ], "directActionOnly": true, "isInSandbox": true }
Odpowiedź na zamówienie
Po otrzymaniu żądania kompleksowa usługa internetowa Ordering przetwarza
i wysyła żądanie SubmitOrderResponseMessage
zawierające
następujące dane:
OrderUpdate
: obiekt zawierający stan zamówienia oraz wszelkie dostępnych dla użytkownika działań po zamówieniu, takich jak kontakt z zespołem pomocy wyświetlanie szczegółów zamówień zdefiniowanych nafinalResponse.richResponse.items[0].structuredResponse.orderUpdate
pole odpowiedź.
Pole aktualizacji zamówienia
Gdy usługa internetowa wysyła żądanie SubmitOrderResponseMessage
, zawiera ona element
OrderUpdate
, które zawiera te pola:
actionOrderId
: unikalny identyfikator zamówienia, który służy do zidentyfikować zamówienie w systemie i odwoływać się do niego podczas wysyłania kolejnych aktualizacje dotyczące zamówienia.orderState
: obiektOrderState
reprezentujący stan zamówienia.orderManagementActions
– działania po zamówieniu dostępne dla użytkownika, takie jak jak kontaktowanie się z obsługą klienta i wyświetlanie szczegółów zamówienia.totalPrice
: łączna cena zamówienia. Nie jest to jednak wymagane. Tylko wysyłaj jeśli łączna cena zamówienia zmieniła się po jego przesłaniu.
Zamówienie może mieć jeden z tych stanów:
CREATED
– punkt końcowy realizacji zamówień przetworzył zamówienie, ale usługodawca nie potwierdził jeszcze zamówienia.CONFIRMED
– punkt końcowy realizacji zamówień przetworzył zamówienie, a usługodawca potwierdził zamówienie.REJECTED
: wystąpił problem i nie udało się zrealizować punktu końcowego realizacji utworzyć lub potwierdzić zamówienie, co może spowodować problemy z płatnością.
Jeśli dla zamówienia ustawisz stan REJECTED
, podaj przyczynę w polu
Pole rejectionInfo
z OrderUpdate
. Używaj
FoodOrderUpdateExtension.FoodOrderErrors
wartości w połączeniu z
rejectionInfo
typu UNKNOWN
i podaj opis.
Przykład odpowiedzi na zamówienie
Oto przykład SubmitOrderResponseMessage
:
JSON
{ "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "orderUpdate": { "actionOrderId": "1603357328160", "orderState": { "state": "CONFIRMED", "label": "Pending" }, "updateTime": "2020-10-22T02:02:08-07:00", "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Call customer service", "openUrlAction": { "url": "tel:+61234561000" } } }, { "type": "VIEW_DETAILS", "button": { "title": "View order details", "openUrlAction": { "url": "https://partner.com/view/orderstatus" } } } ], "receipt": { "userVisibleOrderId": "BXZ-1603357328" } } } } ] } } }
Żądanie odrzucone
Jeśli prośba nie zostanie przesłana, SubmitOrderResponseMessage
musi ustawić
od OrderState.state
na REJECTED
. Odpowiedź musi również
uwzględnij RejectionInfo, które zawiera RejectionType
.
do opisania typu błędu.
Przykład nieudanej odpowiedzi
JSON
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected" }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "PAYMENT_DECLINED", "reason": "Insufficient funds" }, "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", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+16505554679" } } }, { "type": "VIEW_DETAILS", "button": { "title": "View order", "openUrlAction": { "url": "https://orderview.partner.com?orderid=sample_action_order_id" } } } ] } } } ] } } }
Przesyłanie zamówienia
Podczas wdrażania interfejsu API przesyłania zamówień wykonaj opisane poniżej czynności.
Weryfikacja
- Przeprowadź weryfikację usługi, koszyka i promocji, jak w przypadku sekcji Konfiguracja Zapłać.
- Zwróć RejectionInfo z jednym z tych typów, jeśli: potrzebne:
RejectionInfoType | Przypadek użycia |
---|---|
UNAVAILABLE_SLOT |
Czas realizacji zamówienia stracił ważność. |
PROMO_USER_INELIGIBLE |
Użyj adresu e-mail w obiekcie Contact (Kontakt) w prośbie, aby sprawdzić, czy użytkownik kwalifikuje się do promocji. Zapoznaj się z przykładem wdrażania zamówienia przesyłania z promocjami. |
INELIGIBLE |
|
PAYMENT_DECLINED |
Nie można przetworzyć płatności. Przyczyną może być na przykład niewystarczająca ilość środków. |
UNKNOWN |
W przypadku innych błędów weryfikacji. |
Ustaw OrderState.state
na REJECTED
, jeśli istnieje weryfikacja
napotkanych błędów. Opcjonalnie możesz podać konkretny powód odrzucenia
przy użyciu rozszerzenia FoodOrderUpdateExtension.foodOrderErrors
. Zobacz przykłady w języku:
Prześlij weryfikację zamówienia.
Przetwarzanie płatności
- Oblicz
totalPrice
, dodając cenę koszyka, opłaty, rabat, podatki napiwek. WartośćtotalPrice
powinna być taka sama jak zwrócona wartośćtotalPrice
w wiadomości CheckoutResponseMessage oraz zmianie w wysokość napiwku, jeśli użytkownik może ją zmienić. Zobacz cenę zmian w trakcie przesyłania zamówienia, aby dowiedzieć się więcej. - przetwarzanie zamówienia i płatności po zwróceniu odpowiedzi z informacją o stanie zamówienia;
z
CREATED
lubCONFIRMED
. - Sprawdź, czy użycie wygenerowanych typów zwraca prawidłowy format odpowiedzi utworzona na podstawie schematu, jak opisano w generuj biblioteki klienta.
- Użyj
GoogleProvidedPaymentInstrument.
instrumentToken
w celu przetworzenia płatności. Zwraca RejectionInfo z typem.PAYMENT_DECLINED
, jeśli nie można przetworzyć płatności. Patrz: procedura płatności, aby dowiedzieć się więcej. - powiadamiać użytkownika natychmiast po przetworzeniu zamówienia e-mailem lub SMS.
Zwracanie odpowiedzi
- Ustaw OrderState.
state
naCREATED
lubCONFIRMED
, jeśli nie ma błędów. - Jeśli wystąpią błędy, ustaw parametr OrderState.
state
naREJECTED
i dołącz obiekt RejectionInfo z tagiem odpowiadający obiekt RejectionInfoType. - Ustaw OrderUpdate.
orderManagementActions
.