Sipariş gönderme ayarlarını yapma

Ödemeden sonra arayın, Kullanıcı güncellenmiş alışveriş sepetini vergiler, teslimat ücretleri, indirimler ve başka ücretler de alabilirsiniz. Kullanıcı siparişi onaylayıp gönderir ve Google, sipariş karşılama uç noktanıza şunu içeren bir JSON isteği gönderir: sipariş bilgileri. Web hizmetiniz bu siparişi almalı, işlemelidir, ve Google'a siparişin durumunu bildirir.

Bu bölümde, Google tarafından gönderilen sipariş isteği mesajı biçimi açıklanmaktadır. yanıt iletisinin biçimini ve SubmitOrderRequestMessage adı verilen SubmitOrderResponseMessage Sipariş karşılama yaşam döngüsü hakkında daha fazla bilgi için Sipariş karşılamaya genel bakış.

Sipariş karşılama uygulaması

Uçtan Uca Sipariş ile çalışmak için oluşturduğunuz Siparişin Uçtan Uca web hizmeti, Google'dan sipariş mesajları almak için bir URL uç noktası ekleyin. Sipariş için işleme alındığında web hizmetiniz JSON biçiminde bir SubmitOrderRequestMessage alır biçimini Google'dan POST isteği olarak gönderebilirsiniz. Bu istek bir müşteri siparişi içeriyor (vergiler, ücretler ve ödeme bilgileri dahil) Bir sipariş gönderildiğinde isteğinde bulunmak için web hizmetinizin aşağıdakileri yapması gerekir:

  • Kart doğrulama veya sahtekarlık tespiti gibi işlemlerin uygunluğunu kontrol edin.
  • Sisteminizde bir sipariş oluşturun.
  • Ödeme yöntemini yetkilendirin ve geçerli olduğunda ödeme işleyicinizin ödeme API'sini çağırın.
  • Siparişin uygun durumuyla yanıt verin: CREATED, CONFIRMED veya REJECTED.

Sipariş işlendikten sonra, sipariş karşılama kodunuzun yanıt vermesi gerekir SubmitOrderResponseMessage JSON mesajı biçimindedir.

Uçtan uca sipariş karşılama web hizmeti hakkında daha fazla bilgi uygulama şartları için Sipariş karşılamaya genel bakış bölümüne bakın.

Sipariş isteği mesajı

Bir müşteri Uçtan Uca Sipariş akışı sırasında sipariş vermeyi seçtiğinde Google, web hizmetinize Aşağıdaki verileri içeren SubmitOrderRequestMessage:

  1. Amaç: Her sipariş gönderme isteğinin gövdesinin inputs[0].intent alanı actions.intent.TRANSACTION_DECISION dize değerini içerir.
  2. Sipariş: Bir verinin inputs[0].arguments[0].transactionDecisionValue alanı sipariş isteği, şunu temsil eden bir Order nesnesi içeriyor: siparişinin verilebilmesini sağlar ve ödeme ayrıntılarıyla birlikte.
  3. Korumalı alan işareti: Sipariş gönderme isteğinin isInSandbox alanında, İşlemin korumalı alan ödemelerini kullanıp kullanmadığı.
ziyaret edin.

Sipariş isteği örneği

Aşağıda örnek bir SubmitOrderRequestMessage verilmiştir:

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
}
    

Sipariş yanıtı mesajı

Bir istek aldıktan sonra, Sipariş Uçtan Uca web hizmetiniz isteği gönderir ve aşağıdakileri içeren bir SubmitOrderResponseMessage geri gönderir: aşağıdaki veriler:

  • OrderUpdate: Siparişin durumunu içeren bir nesne ve herhangi bir kullanıcının kullanabildiği sipariş sonrası işlemler (ör. destek ekibiyle iletişime geçme sipariş ayrıntılarını görüntülemenizi sağlar. finalResponse.richResponse.items[0].structuredResponse.orderUpdate alanı yanıt verelim.

Sipariş güncelleme alanı

Web hizmetiniz bir SubmitOrderResponseMessage gönderdiğinde, Aşağıdaki alanları içeren OrderUpdate alanı:

  • actionOrderId: Siparişin benzersiz bir şekilde kullanılması için kullanılan benzersiz kimliği siparişi sisteminizde tanımlamalı ve daha sonraki gönderimlerde sipariş güncellemeleri.
  • orderState: Siparişin durumunu temsil eden bir OrderState nesnesi.
  • orderManagementActions: Kullanıcının kullanabileceği sipariş sonrası işlemleri. Örneğin, müşteri desteğiyle iletişim kurmak ve sipariş ayrıntılarını görüntülemek gibi.
  • totalPrice: Siparişin toplam fiyatı. Bu işlem isteğe bağlıdır. Yalnızca gönder Sipariş gönderildikten sonra siparişin toplam fiyatı değişirse.

Sipariş, aşağıdaki durumlardan birinde olabilir:

  • CREATED: Sipariş karşılama uç noktanız siparişi başarıyla işledi. ancak sağlayıcı siparişi henüz onaylamadı.
  • CONFIRMED: Sipariş karşılama uç noktanız siparişi başarıyla işledi. ve sağlayıcı siparişi onayladı.
  • REJECTED: Bir sorun oluştu ve sipariş karşılama uç noktanız tamamlanamadı Ödemeyle ilgili sorunlar içerebilecek olan siparişi oluşturma veya onaylama.

Bir siparişi REJECTED durumuna ayarlarsanız bunun nedenini OrderUpdate öğesinin rejectionInfo alanı. Tekliflerinizi otomatikleştirmek ve optimize etmek için Şununla birlikte FoodOrderUpdateExtension.FoodOrderErrors değerleri: UNKNOWN türünde rejectionInfo ve bir açıklama girin.

Sipariş yanıtı örneği

Aşağıda örnek bir SubmitOrderResponseMessage verilmiştir:

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"
              }
            }
          }
        }
      ]
    }
  }
}

Başarısız istek

Gönderme isteği başarısız olursa SubmitOrderResponseMessage şunları ayarlamalıdır: OrderState.state değerini REJECTED olarak değiştirin. Yanıtta ayrıca bir RejectionType içeren RejectionInfo değerini de içermelidir. nesnesini tanımlayın.

Başarısız yanıt örneği

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"
                    }
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}
    

Sipariş uygulamasını gönderme

Sipariş gönderme API'si uygulanırken aşağıdaki adımlar uygulanmalıdır.

Doğrulama

  1. Kurulumda yaptığınız gibi hizmet, alışveriş sepeti ve promosyon doğrulamalarını yapın. Ödeme.
  2. Aşağıdaki durumlardan biriyle birlikte RejectionInfo değerini döndürün gerekli:
RejectionInfoType Kullanım alanı
UNAVAILABLE_SLOT Sipariş karşılama zamanı artık geçerli değil.
PROMO_USER_INELIGIBLE Kullanıcı için promosyon uygunluğunu doğrulamak üzere istekteki Contact nesnesindeki E-posta adresini kullanın. Promosyonlarla sipariş gönderme özelliğini uygulama bölümündeki örneğe bakın.
INELIGIBLE
  • Telefon numarası veya e-posta gibi kullanıcı bilgileri geçerli değildir.
  • Risk motorunuz sahtekarlık algılar.
PAYMENT_DECLINED Ödeme işlenemiyor. Örneğin, bu durum yetersiz bakiyeden kaynaklanıyor olabilir.
UNKNOWN Diğer doğrulama hataları için.

Doğrulama varsa OrderState.state değerini REJECTED olarak ayarlayın. hata ile karşılaşıldı. İsteğe bağlı olarak, özel bir ret nedeni belirtebilirsiniz. FoodOrderUpdateExtension öğesini kullanın.foodOrderErrors. Örnekleri şurada inceleyin: Sipariş doğrulamasını gönderin.

Ödemeyi işleme koyun

  1. Alışveriş sepeti fiyatını, ücretleri, indirimi, vergileri vetotalPrice bahşiş. totalPrice, döndürülen totalPrice ile aynı olmalıdır CheckoutResponseMessage'daki değişikliklerin yanı sıra bahşiş, kullanıcı tarafından değiştirilebilirse bahşiş tutarı. Fiyata Bakın değişiklikleri hakkında daha fazla bilgi edinin.
  2. Sipariş durumu içeren bir yanıt döndürürseniz siparişi ve ödemeyi işleme alabilirsiniz. CREATED veya CONFIRMED.
  3. Oluşturulan türleri kullanarak geçerli bir yanıt biçimi döndürüldüğünden emin olma aşağıda açıklandığı gibi şemadan oluşturulan istemci kitaplıkları oluşturabilirsiniz.
  4. Şunu kullanın: GoogleProvidedPaymentInstrument.instrumentToken kabul edersiniz. Türle birlikte RejectionInfo değerini döndürün Ödeme yapılamıyorsa PAYMENT_DECLINED. Bkz. İşlem ödeme başlıklı makaleye göz atın.
  5. Sipariş E-posta ile işlendikten hemen sonra kullanıcıyı bilgilendirebilir veya SMS'e dokunun.

Yanıtı geri ver

  1. OrderState.state değerini CREATED veya CONFIRMED olarak ayarlayın. hata yok.
  2. Hata varsa OrderState.state değerini REJECTED olarak ayarlayın. ile karşılaştığımız andan itibaren şununla birlikte RejectionInfo nesnesini karşılık gelen RejectionInfoType ile ilişkilidir.
  3. OrderUpdate'i (Sipariş Güncelleme) ayarlayın.orderManagementActions