ใช้การดําเนินการตามคําสั่งซื้อขั้นสูง

การแมปฟีดเมนูและรายการในรถเข็นการดําเนินการตามคําสั่งซื้อ

เมื่อลูกค้าเพิ่มสินค้าจากฟีดเมนูลงในรถเข็นและชำระเงิน Google จะส่งสินค้าเหล่านั้นไปยังปลายทางการดำเนินการตามคำสั่งซื้อเพื่อยืนยันราคาและ เมื่อตรวจสอบราคาและความพร้อมจำหน่ายสินค้าแล้ว ลูกค้าจะทำสิ่งต่อไปนี้ได้ สั่งซื้อ ส่วนนี้จะแสดงวิธีแมปรายการฟีดในเมนูกับ ดำเนินการตามคำสั่งซื้อสินค้าในรถเข็น

ตัวอย่างในส่วนนี้เป็นเวอร์ชันที่มีการนำฟีดเมนูและรถเข็นออก สคีมา เฉพาะช่องที่เกี่ยวข้องกับการแสดงการแมประหว่างฟีดเมนูกับ จะแสดงออบเจ็กต์รถเข็น โปรดดูสคีมาทั้งหมดได้ที่ Menu และ Cart

รายการในฟีด Menu ที่เพิ่มลงในรถเข็นจะส่งไปที่ Cart สำหรับทั้งการส่งการชำระเงินและคำสั่งซื้อ

  • MenuItem แบบง่ายจะแสดงเป็น LineItem ใน lineItems อาร์เรย์ที่มี offerId เป็น offer.id ของรายการในเมนูที่เลือกไว้ในเมนู ฟีด
  • MenuItem ที่มี MenuItemOption ที่จำเป็นจะแสดงเป็น LineItem ในอาร์เรย์ lineItems ที่มีการเลือก offerId เป็น offer.id ของตัวเลือกรายการในเมนูจากฟีดเมนู
  • AddOnMenuItem ของ LineItem จะแสดงเป็น FoodItemOption ในอาร์เรย์ options ของ FoodItemExtension แต่ละตัวเลือกมี offerId ที่สอดคล้องกับเมนูส่วนเสริมที่เลือกไว้ offer.id ของรายการจากฟีดเมนู โปรดทราบว่า AddOnMenuItem สามารถมี AddOnMenuItem ที่ฝัง ซึ่งแสดงเป็น subOptions อยู่ภายในแต่ละเมนู ตัวเลือก

ตัวอย่างต่อไปนี้แมปรายการในเมนูระหว่างฟีดเมนูกับการจำหน่าย รถเข็น

JSON

ตัวอย่างนี้มีรายการในเมนูแบบง่าย

รายการในเมนูในฟีดเมนู

{
  "@type": "Menu",
  "@id": "menu_id",
  "hasMenuItem": [
    {
      "@type": "MenuItem",
      "@id": "menuitem_id_1",
      "offers": [
        {
          "@type": "Offer",
          "@id": "menuitem_offer_id_1",
          "price": "p_1",
          "priceCurrency": "USD"
        }
      ]
    },
    {
      "@type": "MenuItem",
      "@id": "menuitem_id_2",
      "offers": [
        {
          "@type": "Offer",
          "@id": "menuitem_offer_id_2",
          "price": "p_2",
          "priceCurrency": "USD"
        }
      ]
    }
  ]
}

รายการในเมนูที่แมปกับรถเข็นสำหรับการดำเนินการตามคำสั่งซื้อมีดังนี้

{
  "@type": "Cart",
  "lineItems": [
    {
      "offerId": "menuitem_offer_id_1",
      "price": {
        "amount": {
          "currencyCode": "USD",
          "units": "dollar(q_1*p_1)",
          "nanos": "cent(q_1*p_1)"
        }
      },
      "quantity": "q_1"
    },
    {
      "offerId": "menuitem_offer_id_2",
      "price": {
        "amount": {
          "currencyCode": "USD",
          "units": "dollar(q_2*p_2)",
          "nanos": "cent(q_2*p_2)"
        }
      },
      "quantity": "q_2"
    }
  ]
}

JSON

ตัวอย่างนี้มีรายการในเมนูที่มี AddOnMenuItems อย่างน้อย 1 รายการ

รายการในเมนูในฟีดเมนู

{
  "@type": "Menu",
  "@id": "menu_id",
  "hasMenuItem": [
    {
      "@type": "MenuItem",
      "@id": "menuitem_id_1",
      "offers": [
        {
          "@type": "Offer",
          "@id": "menuitem_offer_id_1",
          "price": "p_1",
          "priceCurrency": "USD"
        }
      ],
      "menuAddOn": [
        {
          "@type": "MenuAddOnSection",
          "@id": "menuaddon_section_id_1",
          "hasMenuItem": [
            {
              "@type": "AddOnMenuItem",
              "@id": "menuitem_addon_id_1",
              "offers": [
                {
                  "@type": "Offer",
                  "@id": "menuitem_addon_offer_id_1",
                  "price": "addon_p_1",
                  "priceCurrency": "USD"
                }
              ]
            },
            {
              "@type": "AddOnMenuItem",
              "@id": "menuitem_addon_id_2",
              "offers": [
                {
                  "@type": "Offer",
                  "@id": "menuitem_addon_offer_id_2",
                  "price": "addon_p_2",
                  "priceCurrency": "USD"
                }
              ]
            }
          ]
        }
      ]
    },
    {
      "@type": "MenuItem",
      "@id": "menuitem_id_2",
      "offers": [
        {
          "@type": "Offer",
          "@id": "menuitem_offer_id_2",
          "price": "p_2",
          "priceCurrency": "USD"
        }
      ]
    }
  ]
}

รายการในเมนูที่แมปกับรถเข็นสำหรับการดำเนินการตามคำสั่งซื้อมีดังนี้

{
  "@type": "Cart",
  "lineItems": [
    {
      "offerId": "menuitem_offer_id_1",
      "price": {
        "amount": {
          "currencyCode": "USD",
          "units": "dollar(q_1*(p_1 + addon_q_1*addon_p_1 + addon_q_2*addon_p_2))",
          "nanos": "cent(q_1*(p_1 + addon_q_1*addon_p_1 + addon_q_2*addon_p_2))"
        }
      },
      "quantity": "q_1",
      "extension": {
        "@type": "FoodItemExtension",
        "options": [
          {
            "offerId": "menuitem_addon_offer_id_1",
            "price": {
                "currencyCode": "USD",
                "units": "dollar(addon_q_1*addon_p_1)",
                "nanos": "cent(addon_q_1*addon_p_1)"
            },
            "quantity": "addon_q_1"
          },
          {
            "offerId": "menuitem_addon_offer_id_2",
            "price": {
                "currencyCode": "USD",
                "units": "dollar(addon_q_2*addon_p_2)",
                "nanos": "cent(addon_q_2*addon_p_2)"
            },
            "quantity": "addon_q_2"
          }
        ]
      }
    },
    {
      "offerId": "menuitem_offer_id_2",
      "price": {
        "amount": {
          "currencyCode": "USD",
          "units": "dollar(q_2*p_2)",
          "nanos": "cent(q_2*p_2)"
        }
      },
      "quantity": "q_2"
    }
  ]
}

JSON

ตัวอย่างนี้มีรายการในเมนูที่มีตัวเลือกรายการในเมนู เช่น AddOnMenuItems และ AddOnMenuItems ที่ฝังอยู่

รายการในเมนูในฟีดเมนู

{
  "@type": "MenuItem",
  "@id": "menuitem_id_1",
  "hasMenuItemOptions": [
    {
      "@type": "MenuItemOption",
      "value": {
        "@type": "PropertyValue",
        "name": "OPTION",
        "value": "Large",
        "offers": [
          {
            "@type": "Offer",
            "@id": "menuitem_option_offer_id_1",
            "price": "p_1",
            "priceCurrency": "USD"
          }
        ],
        "menuAddOn": [
          {
            "@type": "AddOnMenuSection",
            "@id": "menuitem_option_addon_section_id_1",
            "hasMenuItem": [
              {
                "@type": "AddOnMenuItem",
                "@id": "menuitem_option_addon_id_1",
                "offers": [
                  {
                    "@type": "Offer",
                    "@id": "menuitem_option_addon_offer_id_1",
                    "price": "addon_p_1",
                    "priceCurrency": "USD"
                  }
                ]
              },
              {
                "@type": "AddOnMenuItem",
                "@id": "menuitem_option_addon_id_2",
                "offers": [
                  {
                    "@type": "Offer",
                    "@id": "menuitem_option_addon_offer_id_2",
                    "price": "addon_p_2",
                    "priceCurrency": "USD"
                  }
                ],
                "menuAddOn": [
                  {
                    "@type": "AddOnMenuSection",
                    "@id": "menuitem_option_subaddon_section_id_1",
                    "hasMenuItem": [
                      {
                        "@type": "AddOnMenuItem",
                        "@id": "menuitem_option_subaddon_id_1",
                        "offers": [
                          {
                            "@type": "Offer",
                            "@id": "menuitem_option_subaddon_offer_id_1",
                            "price": "subaddon_p_1",
                            "priceCurrency": "USD"
                          }
                        ]
                      }
                    ]
                  }
                ]
              }
            ]
          }
        ]
      }
    }
  ]
}

รายการในเมนูที่แมปกับรถเข็นสำหรับการดำเนินการตามคำสั่งซื้อมีดังนี้

{
  "@type": "Cart",
  "lineItems": [
    {
      "offerId": "menuitem_option_offer_id_1",
      "price": {
        "amount": {
          "currencyCode": "USD",
          "units": "dollar(q_1*(p_1 + addon_q_1*addon_p_1 + addon_q_2*(addon_p_2 + subaddon_q_1*subaddon_p_1)))",
          "nanos": "cent(q_1*(p_1 + addon_q_1*addon_p_1 + addon_q_2*(addon_p_2 + subaddon_q_1*subaddon_p_1)))"
        }
      },
      "quantity": "q_1",
      "extension": {
        "@type": "FoodItemExtension",
        "options": [
          {
            "offerId": "menuitem_option_addon_offer_id_1",
            "price": {
              "currencyCode": "USD",
              "units": "dollar(addon_q_1*addon_p_1)",
              "nanos": "cent(addon_q_1*addon_p_1)"
            },
            "quantity": "addon_q_1"
          },
          {
            "offerId": "menuitem_option_addon_offer_id_2",
            "price": {
              "currencyCode": "USD",
              "units": "dollar(addon_q_2*(addon_p_2 + subaddon_q_1*subaddon_p_1))",
              "nanos": "cent(addon_q_2*(addon_p_2 + subaddon_q_1*subaddon_p_1))"
            },
            "quantity": "addon_q_2",
            "subOptions": [
              {
                "offerId": "menuitem_option_subaddon_offer_id_1",
                "price": {
                  "currencyCode": "USD",
                  "units": "dollar(subaddon_q_1*subaddon_p_1)",
                  "nanos": "cent(subaddon_q_1*subaddon_p_1)"
                },
                "quantity": "subaddon_q_1"
              }
            ]
          }
        ]
      }
    }
  ]
}

การจัดการข้อผิดพลาด

หากพบปัญหาขณะประมวลผล CheckoutRequestMessage โปรด สามารถตอบกลับด้วย CheckoutResponseMessage ที่มี FoodErrorExtension แทนที่จะเป็น CheckoutResponse คุณใช้ การตอบกลับเพื่อระบุข้อผิดพลาดอย่างน้อย 1 รายการที่เกิดขึ้นระหว่างการประมวลผล

การจัดการข้อผิดพลาดมี 2 วิธีดังนี้

  • ข้อผิดพลาดที่กู้คืนได้: ผู้ใช้ไม่จำเป็นต้องแก้ไขรถเข็นเพื่อส่ง คำสั่งซื้อ ตัวอย่างเช่น หากคุณเห็นว่ารายการใน Cart มี การเปลี่ยนแปลงราคา คุณสามารถตอบกลับโดยมีข้อผิดพลาดประเภท FoodOrderError PRICE_CHANGED รวมถึง correctedProposedOrder และ paymentOptions Google จะแจ้งให้ผู้ใช้ทราบเกี่ยวกับการเปลี่ยนแปลง แต่อนุญาตให้ผู้ใช้ส่งพร้อม correctedProposedOrder นอกจากนี้ ผู้ใช้ยังกลับไปแก้ไขรถเข็นได้ในกรณีที่ ที่ต้องการ คุณจะได้รับ CheckoutRequestMessage ใหม่หรือ SubmitOrderRequestMessage
  • ข้อผิดพลาดที่กู้คืนไม่ได้: ผู้ใช้จะต้องแก้ไขรถเข็นก่อน ส่งคำสั่งซื้อ ตัวอย่างเช่น หากคุณระบุว่าร้านอาหารนั้น ปิดแล้ว คุณสามารถตอบกลับด้วย FoodOrderError ประเภทข้อผิดพลาด CLOSED Google แจ้งให้ผู้ใช้ทราบและจัดการการโต้ตอบเพื่ออัปเดตเป็น ร้านอาหาร คุณจะได้รับCheckoutRequestMessageใหม่สำหรับบัญชี รถเข็น

โดยทั่วไป ทำให้ข้อผิดพลาดระดับรถเข็นกู้คืนไม่ได้และข้อผิดพลาดระดับสินค้า กู้คืนได้ ดูรายการประเภทข้อผิดพลาดทั้งหมดและความหมายได้ที่ FoodOrderError

การจัดการการเปลี่ยนแปลงราคา

การเปลี่ยนแปลงราคาระหว่างการชำระเงิน

หากพบปัญหาเกี่ยวกับราคาขณะประมวลผลจุดชำระเงินของลูกค้า โปรดทำตามขั้นตอนต่อไปนี้

  1. ตอบกลับ CheckoutRequestMessage ด้วย CheckoutResponseMessage ที่มี FoodErrorExtension ในฐานะ ตามที่อธิบายไว้ในการจัดการข้อผิดพลาด
  2. ในการตอบกลับข้อผิดพลาด ให้ใช้ correctedProposedOrder.cart เพื่ออัปเดตราคา เป็นค่าที่ถูกต้อง Google ได้รับคำสั่งซื้อที่ได้รับการแก้ไขและอาจออก CheckoutRequestMessage

หลังการชำระเงิน Google จะแสดงหน้ายืนยันคำสั่งซื้อต่อผู้ใช้ปลายทาง ไม่ว่า ProposedOrder จะมีการเปลี่ยนแปลงหรือไม่

หาก ProposedOrder ถูกต้อง Google อาจแสดงคำเตือนเพิ่มเติมให้กับ แจ้งให้ผู้ใช้ทราบถึงการเปลี่ยนแปลง หากผู้ใช้ตกลงที่จะสั่งซื้อ จะไม่มีคำขอชำระเงินอีกต่อไป ขั้นตอนจะยังคงสั่งซื้อการส่งต่อไป โดยมี ProposedOrder ที่แก้ไขแล้ว

แต่ผู้ใช้สามารถเปลี่ยนใจและแก้ไขรถเข็นอีกครั้งได้ทุกเมื่อ วันและเวลา การอัปเดตรถเข็นในลักษณะนี้ Google จะส่ง CheckoutRequestMessage ใหม่

มีการเปลี่ยนแปลงราคาระหว่างการส่งคำสั่งซื้อ

หากพบปัญหาเกี่ยวกับราคาขณะประมวลผลการส่งคำสั่งซื้อ (มีการทริกเกอร์ Intent ของ actions.intent.TRANSACTION_DECISION) ไม่ต้องตอบสนอง โดยมีข้อผิดพลาดหรืออัปเดตราคาในการตอบกลับ ถ้าราคา จำนวน หรือรายละเอียดอื่นๆ ใน SubmitOrderRequestMessage ไม่สอดคล้องกับ ตอบกลับด้วยการตั้งค่า orderState เป็น REJECTED เพื่อระบุว่า ไม่สามารถสั่งซื้อตามที่ขอ

จากนั้น หากรายละเอียดคำสั่งซื้อและการชำระเงินถูกต้อง ให้ตั้งค่า orderState เป็น CREATED หรือ CONFIRMED นอกจากนี้ ให้ใส่ actionOrderId เพื่อแสดงรหัสคำสั่งซื้อใน ระบบของคุณ ต้องใช้รหัสนี้เมื่อส่งการอัปเดตครั้งต่อๆ ไป

หากคุณไม่สามารถประมวลผลการชำระเงินและได้ส่ง SubmitOrderRequestMessage คุณสามารถส่ง ตั้งค่า AsyncOrderUpdateRequestMessage ที่มี orderState เป็น REJECTED เพื่ออนุญาตให้ ผู้ใช้ทราบว่าคำสั่งซื้อจะไม่สำเร็จ

ราคาเปลี่ยนแปลงหลังจากส่งคำสั่งซื้อ

หากคุณพิจารณาแล้วว่าราคาได้เปลี่ยนแปลงไปจากราคาที่ใช้เมื่อลูกค้า ส่งคำสั่งซื้อแล้ว คุณสามารถออก AsyncOrderUpdateRequestMessage ได้ ตามที่อธิบายไว้ในการติดตั้งใช้งานการอัปเดตคำสั่งซื้อแบบอะซิงโครนัสด้วยราคาใหม่

วิธีอัปเดตราคาโดยใช้การอัปเดตคำสั่งซื้อแบบไม่พร้อมกัน

  1. เปลี่ยนราคาในสกุลเงิน lineItemUpdates[x].price ช่วงเวลานี้ แสดงค่าใช้จ่ายรวมของสินค้า ซึ่งรวมถึงส่วนเสริมและตัวคูณ ตามจำนวน (สำหรับข้อมูลเพิ่มเติม โปรดดูคำอธิบายของ ฟิลด์ price จาก LineItem)
  2. ป้อนคำอธิบายเป็นภาษาlineItemUpdates[x].reason
  3. ตั้งค่า lineItemUpdates[x].orderState ไปยัง CONFIRMED

คุณสามารถพยายามเรียกเก็บเงินจากเครื่องมือการชำระเงินก่อนหรือหลังจากส่ง AsyncOrderUpdateRequestMessage ตามการพิจารณาตามที่เห็นสมควร หากทำธุรกรรมไม่สำเร็จ (อาจเป็นเพราะเดลต้าราคาสูงเกินไป) ให้ส่ง AsyncOrderUpdateRequestMessage พร้อมการตั้งค่าต่อไปนี้ใน OrderUpdate เพื่อแจ้ง Google เกี่ยวกับความล้มเหลว:

  • ตั้งค่า orderState เป็น REJECTED
  • อธิบายความล้มเหลวในช่อง label

การตรวจสอบความถูกต้องของจุดชำระเงิน

ดังที่อธิบายไว้ในขั้นตอนที่ 4: นำการชำระเงินไปใช้ ปลายทางของ Fulfillment ควรทำการตรวจสอบสำหรับขาเข้าทุกรายการ CheckoutRequestMessage แล้วตอบกลับด้วย CheckoutResponseMessage

ต่อไปนี้คือตัวอย่างของ CheckoutResponseMessage ที่ประสบความสำเร็จ การตรวจสอบความถูกต้อง:

กรณีการใช้งาน วิธีติดตั้งใช้งาน
กรณีการใช้งาน 1: ตรวจสอบสำเร็จ กลับ CheckoutResponse ต้องมี ProposedOrder และ PaymentOptions ProposedOrder รวมภาษี ค่าธรรมเนียม และราคารวมของ รถเข็น

JSON

{
  "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": {
                    // Represents $36.73
                    "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
                }
              }
            }
          }
        }
      ]
    }
  }
}

การตรวจสอบที่อยู่สำหรับจัดส่ง

ปลายทางของการดำเนินการตามคำสั่งซื้อควรตรวจสอบที่อยู่สำหรับจัดส่งที่มีอยู่ในแต่ละปลายทาง CheckoutRequestMessage

หากที่อยู่สำหรับจัดส่งมีปัญหา เช่น อยู่นอกระยะ บริการจัดส่ง CheckoutResponseMessage ที่ส่งคืนโดย Fulfillment ควรมีประเภทที่เหมาะสมเป็น FoodOrderError

กรณีการใช้งาน วิธีติดตั้งใช้งาน
กรณีการใช้งาน 1: การตรวจสอบความถูกต้องล้มเหลวเนื่องจากที่อยู่สำหรับจัดส่งปิดอยู่ หรือมีปัญหาเกี่ยวกับที่อยู่สำหรับจัดส่ง ส่งคืน FoodErrorExtension พร้อมกับ FoodOrderError ของข้อผิดพลาดประเภท OUT_OF_SERVICE_AREA

JSON

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "error": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
              "foodOrderErrors": [
                {
                  "error": "OUT_OF_SERVICE_AREA",
                  "description": "Sorry, the restaurant cannot deliver to your address."
                }
              ]
            }
          }
        }
      ]
    }
  }
}

การตรวจสอบมูลค่าการสั่งซื้อขั้นต่ำ

ปลายทางการดำเนินการตามคำสั่งซื้อควรตรวจสอบมูลค่าการสั่งซื้อขั้นต่ำของแต่ละผลิตภัณฑ์ CheckoutRequestMessage

หากไม่ถึงมูลค่าการสั่งซื้อขั้นต่ำ ระบบจะสั่งซื้อ CheckoutResponseMessage การแสดงผลโดยการดำเนินการของคุณควรมีประเภทข้อผิดพลาด FoodOrderError REQUIREMENTS_NOT_MET

กรณีการใช้งาน วิธีติดตั้งใช้งาน
กรณีการใช้งาน 1: การตรวจสอบความถูกต้องล้มเหลวเนื่องจากมูลค่าการสั่งซื้อขั้นต่ำ ไม่ตรง ส่งคืน FoodErrorExtension พร้อมกับ FoodOrderError ของข้อผิดพลาดประเภท REQUIREMENTS_NOT_MET

JSON

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "error": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
              "foodOrderErrors": [
                {
                  "error": "REQUIREMENTS_NOT_MET",
                  "description": "The cart subtotal must be over $20."
                }
              ]
            }
          }
        }
      ]
    }
  }
}

การตรวจสอบกรอบเวลาการสั่งซื้อ

ปลายทางของการดำเนินการตามคำสั่งซื้อควรตรวจสอบปัจจัยที่อาจส่งผลต่อ กรอบเวลาการสั่งซื้อของ CheckoutRequestMessage แต่ละรายการ

ตัวอย่างเช่น หากร้านอาหารปิดหรือไม่รับคำสั่งซื้อที่ ในตอนนี้ CheckoutResponseMessage ที่ส่งคืนโดยการดำเนินการตามคำสั่งซื้อ มีข้อผิดพลาด FoodOrderError ประเภท CLOSED หรือ NO_CAPACITY ตามลำดับ

กรณีการใช้งาน วิธีติดตั้งใช้งาน
กรณีการใช้งาน 1: ตรวจสอบไม่สำเร็จเนื่องจากร้านอาหารปิดอยู่ หรือ ไม่รองรับอีกต่อไป ส่งคืน FoodErrorExtension พร้อมกับ FoodOrderError ของข้อผิดพลาดประเภท CLOSED
กรณีการใช้งาน 2: ตรวจสอบไม่สำเร็จเนื่องจากร้านอาหารไม่ว่างและ ไม่รับคำสั่งซื้อในขณะนี้ ส่งคืน FoodErrorExtension พร้อมกับ FoodOrderError ของข้อผิดพลาดประเภท NO_CAPACITY

JSON

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "error": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
              "foodOrderErrors": [
                {
                  "error": "CLOSED",
                  "description": "The restaurant is closed."
                }
              ]
            }
          }
        }
      ]
    }
  }
}

JSON

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "error": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
              "foodOrderErrors": [
                {
                  "error": "NO_CAPACITY",
                  "description": "Sorry, the restaurant is busy at the moment."
                }
              ]
            }
          }
        }
      ]
    }
  }
}

การตรวจสอบรายการในรถเข็น

ปลายทางการดำเนินการตามคำสั่งซื้อควรตรวจสอบราคาและความพร้อมจำหน่ายสินค้าของผลิตภัณฑ์แต่ละรายการ สินค้าในรถเข็นที่อยู่ใน CheckoutRequestMessage

หากความพร้อมจำหน่ายสินค้าหรือราคามีการเปลี่ยนแปลง CheckoutResponseMessage การแสดงผลโดยการดำเนินการของคุณควรมีประเภทข้อผิดพลาด FoodOrderError AVAILABILITY_CHANGED หรือ PRICE_CHANGED ตามลำดับ

กรณีการใช้งาน วิธีติดตั้งใช้งาน
กรณีการใช้งาน 1: การตรวจสอบความถูกต้องล้มเหลวเนื่องจากรายการในเมนูบางรายการและ/หรือ การปรับแต่งของพวกเขาไม่ถูกต้องหรือหมด ส่งคืน FoodErrorExtension พร้อมกับ correctedProposedOrder PaymentOptions และ FoodOrderError ของประเภทข้อผิดพลาด AVAILABILITY_CHANGED รายการที่ไม่ถูกต้องต้องถูกนำออกจาก CorrectedProposedOrder
กรณีการใช้งาน 2: การตรวจสอบความถูกต้องล้มเหลวเนื่องจากรายการในเมนูบางรายการและ/หรือ การกำหนดค่าไม่ถูกต้องหรือไม่มีในสต็อก รถเข็นที่แก้ไขแล้ว ไม่เป็นไปตามข้อกำหนดมูลค่าการสั่งซื้อขั้นต่ำอีกต่อไป ส่งคืน FoodErrorExtension พร้อมกับ FoodOrderError ของประเภทข้อผิดพลาด AVAILABILITY_CHANGED และ REQUIREMENTS_NOT_MET
กรณีการใช้งาน 3: การตรวจสอบความถูกต้องล้มเหลวเนื่องจากรายการในเมนูบางรายการและ/หรือ ราคาที่กำหนดเองมีการเปลี่ยนแปลง ส่งคืน FoodErrorExtension พร้อมกับ correctedProposedOrder PaymentOptions และ FoodOrderError ของประเภทข้อผิดพลาด PRICE_CHANGED ต้องอัปเดตราคาที่ไม่เป็นปัจจุบันใน CorrectedProposedOrder
กรณีการใช้งาน 4: การตรวจสอบความถูกต้องล้มเหลวเนื่องจากรายการในเมนูบางรายการและ/หรือ ราคาที่ปรับได้มีการเปลี่ยนแปลง รถเข็นที่แก้ไขแล้วไม่เป็นไปตาม ข้อกำหนดมูลค่าการสั่งซื้อขั้นต่ำ ส่งคืน FoodErrorExtension พร้อมกับ FoodOrderError ของประเภทข้อผิดพลาด PRICE_CHANGED และ REQUIREMENTS_NOT_MET

JSON

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "error": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
              "foodOrderErrors": [
                {
                  "error": "AVAILABILITY_CHANGED",
                  "id": "sample_item_offer_id_1",
                  "description": "The item is no longer available."
                },
                {
                  "error": "AVAILABILITY_CHANGED",
                  "id": "sample_item_offer_id_2",
                  "description": "The item is no longer available."
                }
              ],
              "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": "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
                }
              }
            }
          }
        }
      ]
    }
  }
}

JSON

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "error": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
              "foodOrderErrors": [
                {
                  "error": "REQUIREMENTS_NOT_MET",
                  "description": "The cart subtotal must be over $20."
                },
                {
                  "error": "AVAILABILITY_CHANGED",
                  "id": "cart_lineitem_id"
                  "description": "cart_lineitem_id is no longer available."
                }
              ]
            }
          }
        }
      ]
    }
  }
}

JSON

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "error": {
              "@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
                }
              }
            }
          }
        }
      ]
    }
  }
}

JSON

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "error": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension",
              "foodOrderErrors": [
                {
                  "error": "REQUIREMENTS_NOT_MET",
                  "description": "The cart subtotal must be over $20."
                },
                {
                  "error": "PRICE_CHANGED",
                  "id": "cart_lineitem_id"
                  "description": "cart_lineitem_id price has been updated."
                  "updatedPrice": {
                    "currencyCode": "USD",
                    "units": "2",
                    "nanos": 750000000
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

ส่งการตรวจสอบคำสั่งซื้อ

ตามที่อธิบายไว้ในขั้นตอนที่ 7: ใช้การส่งคำสั่งซื้อ ปลายทางของ Fulfillment ควรทำการตรวจสอบสำหรับขาเข้าทุกรายการ SubmitOrderRequestMessage และตอบกลับด้วย SubmitOrderResponseMessage

ต่อไปนี้คือตัวอย่างของ SubmitOrderResponseMessage ที่ประสบความสำเร็จ การตรวจสอบความถูกต้อง:

กรณีการใช้งาน วิธีติดตั้งใช้งาน
กรณีการใช้งาน 1: สร้างคำสั่งซื้อเรียบร้อยแล้ว SubmitOrderResponseMessage ที่มีคำสั่งซื้อ CREATED ต้องมี actionOrderId userVisibleId, orderManagementActions และ estimatedFulfillmentTime
กรณีการใช้งาน 2: คำสั่งซื้อถูกปฏิเสธเนื่องจากปัญหาด้านการชำระเงิน SubmitOrderResponseMessage ที่มีคำสั่งซื้อ REJECTED ต้องมี actionOrderId userVisibleId, orderManagementActions และ rejectionInfo ประเภท PAYMENT_DECLINED
กรณีการใช้งาน 3: คำสั่งซื้อถูกปฏิเสธสำหรับผู้ใช้ที่มีการแจ้งว่าถูกแบน SubmitOrderResponseMessage ที่มีคำสั่งซื้อ REJECTED สถานะ ต้องมี actionOrderId userVisibleId, orderManagementActions และ rejectionInfo ประเภท INELIGIBLE
กรณีการใช้งาน 4: คำสั่งซื้อถูกปฏิเสธเนื่องจากข้อมูลผู้ใช้ ไม่สมบูรณ์หรือไม่ถูกต้อง SubmitOrderResponseMessage ที่มีคำสั่งซื้อ REJECTED ต้องมี actionOrderId userVisibleId, orderManagementActions และ rejectionInfo ประเภท INELIGIBLE
กรณีการใช้งาน 5: คำสั่งซื้อถูกปฏิเสธโดยไม่ทราบสาเหตุ SubmitOrderResponseMessage ที่มีคำสั่งซื้อ REJECTED ต้องมี actionOrderId userVisibleId, orderManagementActions และ rejectionInfo ประเภท UNKNOWN

JSON

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "orderUpdate": {
              "actionOrderId": "sample_action_order_id",
              "orderState": {
                "state": "CREATED",
                "label": "Order received"
              },
              "updateTime": "2017-05-10T02:30:00.000Z",
              "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"
                    }
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

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

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": "INELIGIBLE",
                 "reason": "Sorry, we are not able to take orders from this user"
              },
              "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"
                    }
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

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": "INELIGIBLE",
                 "reason": "Sorry, the phone number must not be blank"
              },
              "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"
                    }
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

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": "UNKNOWN",
                 "reason": "Sorry, there is something wrong with this order."
              },
              "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"
                    }
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}