結帳後 通話, 使用者查看更新過的購物車時,包括稅金、運費、折扣和 您退回的其他費用。使用者確認並提交訂單 Google 會將 JSON 要求傳送至您的執行要求端點,其中包含 該訂單的相關資訊您的網路服務必須接收並處理這筆訂單, 然後向 Google 回覆訂單狀態。
本節將說明 Google 傳送的訂單要求訊息格式。
呼叫 SubmitOrderRequestMessage
,以及回應訊息的格式
第一個步驟稱為
SubmitOrderResponseMessage
。
如要進一步瞭解訂單執行要求生命週期,請參閱
執行要求總覽。
實作訂單履行設定
您為了支援端對端訂單而建立的端對端網路服務必須
包含用於接收 Google 訂單訊息的網址端點。訂單
您的網路服務會收到 JSON 格式的 SubmitOrderRequestMessage
做為 Google 的 POST 要求格式這項要求內含客戶訂單
包括稅金、手續費和付款資訊收到提交的訂單時
要求時,您的網路服務必須執行下列操作:
- 確認交易資格條件,例如卡片驗證或詐欺偵測。
- 在系統中建立訂單。
- 授權付款方式,並呼叫付款處理方的 charge API (如適用)。
- 以適當的訂單狀態回應:
CREATED
。CONFIRMED
或REJECTED
。
處理訂單後,您的執行要求代碼必須提供回應
方法是以 SubmitOrderResponseMessage
JSON 訊息的形式傳回 Google。
進一步瞭解「訂購端對端出貨網路服務」 實作需求條件,請參閱執行要求總覽。
訂單要求訊息
顧客在「端對端訂購」流程中選擇下單時,
Google 將要求傳送至您的網路服務,其中包含稱為「
SubmitOrderRequestMessage
,其中包含以下資料:
- 意圖:每個提交訂單要求主體的
inputs[0].intent
欄位 包含actions.intent.TRANSACTION_DECISION
字串值。 - 順序:顯示
inputs[0].arguments[0].transactionDecisionValue
欄位的 提交訂單要求會包含Order
物件,用來代表 下單和付款詳情 - 沙箱標記:提交訂單要求的
isInSandbox
欄位會指出 是否使用沙箱付款機制。
訂單要求示例
以下是 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 }
訂單回應訊息
收到要求後,您的訂購端對端網路服務就會處理
並傳回SubmitOrderResponseMessage
下列資料:
OrderUpdate
:包含訂單狀態的物件,以及 使用者可以執行的訂單後動作,例如聯絡支援團隊 查看訂單詳細資料,您可以在 以下地點的finalResponse.richResponse.items[0].structuredResponse.orderUpdate
欄位: 回應。
訂單更新欄位
當網路服務傳送 SubmitOrderResponseMessage
時,會含有
OrderUpdate
欄位包含下列欄位:
actionOrderId
:訂單的專屬 ID,用於專門用來 在系統中識別訂單,並在傳送後續時參照此訂單 訂單動態orderState
:代表訂單狀態的OrderState
物件。orderManagementActions
:使用者可執行的訂單後動作,例如 例如聯絡客戶服務團隊並查看訂單詳細資料。totalPrice
:訂單總價。。僅傳送 如果訂單的總價在訂單提交後有變動。
訂單可能處於下列其中一種狀態:
CREATED
:執行要求端點已成功處理訂單, 供應商尚未確認訂單。CONFIRMED
:執行要求端點已成功處理訂單, 且供應商已確認訂單。REJECTED
:發生問題,無法成功執行要求端點 建立或確認訂單,包括付款問題。
如果您要將訂單設為 REJECTED
狀態,請在
OrderUpdate
的 rejectionInfo
欄位。使用
搭配使用 FoodOrderUpdateExtension.FoodOrderErrors
個值和
UNKNOWN
類型的 rejectionInfo
,並提供說明。
訂單回應範例
以下是 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" } } } } ] } } }
要求失敗
如果提交要求失敗,請設定 SubmitOrderResponseMessage
OrderState.state
變更為 REJECTED
。回應也必須
加入 RejectionInfo,其中包含 RejectionType
物件說明錯誤類型
回應失敗範例
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" } } } ] } } } ] } } }
提交訂單實作資料
導入提交訂單 API 時,應採取下列步驟。
驗證
- 按照「設定 結帳。
- 如果發生以下情況,會傳回 RejectionInfo: 需求:
RejectionInfoType | 用途 |
---|---|
UNAVAILABLE_SLOT |
出貨時間已失效。 |
PROMO_USER_INELIGIBLE |
使用要求中「聯絡人」物件中的電子郵件,驗證使用者是否符合促銷活動資格。請參閱「導入透過促銷活動提交訂單的功能」中的範例。 |
INELIGIBLE |
|
PAYMENT_DECLINED |
無法處理付款。舉例來說,這可能是因為資金不足。 |
UNKNOWN |
其他驗證錯誤。 |
如果有驗證,請將 OrderState.state
設為 REJECTED
發生錯誤。你也可以視需要提供具體的拒絕原因
使用 FoodOrderUpdateExtension.foodOrderErrors
。範例如下:
提交訂單驗證。
處理付款
- 計算
totalPrice
,方法是加入購物車價格、手續費、折扣、稅金和 也沒有問題totalPrice
應與傳回的totalPrice
相同 ,再加上 CheckoutResponseMessage 中的 表示使用者可修改祝賀詞。請參閱價格 變更期間發生的變更 - 如果您傳回包含訂單狀態的回應,處理訂單和付款
共
CREATED
或CONFIRMED
。 - 使用產生的類型,確保傳回有效的回應格式 建立 Deployment 產生用戶端程式庫。
- 使用
GoogleProvidedPaymentInstrument
instrumentToken
來處理付款。傳回類型為 RejectionInfo 如果我們無法處理付款,請PAYMENT_DECLINED
。查看程序 付款瞭解詳情。 - 訂單處理後,立即以電子郵件通知使用者,或 簡訊。
傳回回應
- 將 OrderState.
state
設為CREATED
或CONFIRMED
(如有) 沒有任何錯誤。 - 如果發生錯誤,請將 OrderState.
state
設為REJECTED
並在呼叫時加入 RejectionInfo 物件, 相應的 RejectionInfoType。 - 設定 OrderUpdate。
orderManagementActions
。