設定提交訂單

結帳後 通話, 使用者查看更新過的購物車時,包括稅金、運費、折扣和 您退回的其他費用。使用者確認並提交訂單 Google 會將 JSON 要求傳送至您的執行要求端點,其中包含 該訂單的相關資訊您的網路服務必須接收並處理這筆訂單, 然後向 Google 回覆訂單狀態。

本節將說明 Google 傳送的訂單要求訊息格式。 呼叫 SubmitOrderRequestMessage,以及回應訊息的格式 第一個步驟稱為 SubmitOrderResponseMessage。 如要進一步瞭解訂單執行要求生命週期,請參閱 執行要求總覽

實作訂單履行設定

您為了支援端對端訂單而建立的端對端網路服務必須 包含用於接收 Google 訂單訊息的網址端點。訂單 您的網路服務會收到 JSON 格式的 SubmitOrderRequestMessage 做為 Google 的 POST 要求格式這項要求內含客戶訂單 包括稅金、手續費和付款資訊收到提交的訂單時 要求時,您的網路服務必須執行下列操作:

  • 確認交易資格條件,例如卡片驗證或詐欺偵測。
  • 在系統中建立訂單。
  • 授權付款方式,並呼叫付款處理方的 charge API (如適用)。
  • 以適當的訂單狀態回應:CREATEDCONFIRMEDREJECTED

處理訂單後,您的執行要求代碼必須提供回應 方法是以 SubmitOrderResponseMessage JSON 訊息的形式傳回 Google。

進一步瞭解「訂購端對端出貨網路服務」 實作需求條件,請參閱執行要求總覽

訂單要求訊息

顧客在「端對端訂購」流程中選擇下單時, Google 將要求傳送至您的網路服務,其中包含稱為「 SubmitOrderRequestMessage,其中包含以下資料:

  1. 意圖:每個提交訂單要求主體的 inputs[0].intent 欄位 包含 actions.intent.TRANSACTION_DECISION 字串值。
  2. 順序:顯示 inputs[0].arguments[0].transactionDecisionValue 欄位的 提交訂單要求會包含 Order 物件,用來代表 下單和付款詳情
  3. 沙箱標記:提交訂單要求的 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 狀態,請在 OrderUpdaterejectionInfo 欄位。使用 搭配使用 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 時,應採取下列步驟。

驗證

  1. 按照「設定 結帳
  2. 如果發生以下情況,會傳回 RejectionInfo: 需求:
RejectionInfoType 用途
UNAVAILABLE_SLOT 出貨時間已失效。
PROMO_USER_INELIGIBLE 使用要求中「聯絡人」物件中的電子郵件,驗證使用者是否符合促銷活動資格。請參閱「導入透過促銷活動提交訂單的功能」中的範例。
INELIGIBLE
  • 使用者資訊 (例如電話號碼或電子郵件) 無效。
  • 您的風險引擎偵測到詐欺。
PAYMENT_DECLINED 無法處理付款。舉例來說,這可能是因為資金不足。
UNKNOWN 其他驗證錯誤。

如果有驗證,請將 OrderState.state 設為 REJECTED 發生錯誤。你也可以視需要提供具體的拒絕原因 使用 FoodOrderUpdateExtension.foodOrderErrors。範例如下: 提交訂單驗證

處理付款

  1. 計算 totalPrice,方法是加入購物車價格、手續費、折扣、稅金和 也沒有問題totalPrice 應與傳回的 totalPrice 相同 ,再加上 CheckoutResponseMessage 中的 表示使用者可修改祝賀詞。請參閱價格 變更期間發生的變更
  2. 如果您傳回包含訂單狀態的回應,處理訂單和付款 共 CREATEDCONFIRMED
  3. 使用產生的類型,確保傳回有效的回應格式 建立 Deployment 產生用戶端程式庫
  4. 使用 GoogleProvidedPaymentInstrumentinstrumentToken 來處理付款。傳回類型為 RejectionInfo 如果我們無法處理付款,請PAYMENT_DECLINED。查看程序 付款瞭解詳情。
  5. 訂單處理後,立即以電子郵件通知使用者,或 簡訊。

傳回回應

  1. OrderState.state 設為 CREATEDCONFIRMED (如有) 沒有任何錯誤。
  2. 如果發生錯誤,請將 OrderState.state 設為 REJECTED 並在呼叫時加入 RejectionInfo 物件, 相應的 RejectionInfoType
  3. 設定 OrderUpdateorderManagementActions