تنفيذ إجراءات التنفيذ المتقدّمة

ربط خلاصات القائمة وعناصر سلة التسوّق لتوصيل الطلبات

عندما يضيف العملاء أصنافًا من خلاصة القائمة إلى سلة التسوّق ويدفعون الرسوم، ترسل Google هذه السلع إلى نقطة نهاية توصيل الطلبات للتحقّق من سعرها مدى التوفر. وبعد التحقق من السعر ومدى التوفّر، يمكن للعميل تقديم الطلب. يوضّح هذا القسم كيفية ربط عناصر الخلاصة في القائمة عناصر سلة التسوق المخصصة لتوصيل الطلبات.

النماذج في هذا القسم هي إصدارات مجردة من خلاصة القائمة وعربة التسوق 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 من خلاصة القائمة. يُرجى العِلم أنّه يمكن أيضًا أن يحتوي AddOn MenuItem AddOnقائمةItems مدمَجة يتم تمثيلها كـ 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

يحتوي هذا المثال على عنصر قائمة يحتوي على عنصر AddOn MenuItems واحد أو أكثر.

السلع في القائمة في خلاصة قائمة:

{
  "@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

يحتوي هذا المثال على عنصر قائمة به خيارات عناصر القائمة، AddOn MenuItems، وAddOnقائمةItems مدمجة

السلع في القائمة في خلاصة قائمة:

{
  "@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. يمكنك استخدام هذه الصفحة لتحديد خطأ أو أكثر حدث أثناء المعالجة.

هناك طريقتان للتعامل مع الأخطاء:

  • الأخطاء التي يمكن استردادها: لا يُطلب من المستخدم تعديل سلة التسوق لإرسال طلبك. على سبيل المثال، إذا قررت أنّ عنصرًا في 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 جديدة.

التغييرات في الأسعار أثناء إرسال الطلب

في حال مواجهة مشكلة في السعر أثناء معالجة عملية إرسال الطلب (تم تشغيل الغرض 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: تنفيذ عملية الدفع، يجب أن تُجري نقطة نهاية التنفيذ عملية تحقق على كل رسالة واردة 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 التي أرجعها يجب أن يحتوي طريقة التنفيذ على 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: تنفيذ "إرسال الطلب"، يجب تنفيذ يجب أن تُجري نقطة نهاية التنفيذ عملية تحقق على كل رسالة واردة 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"
                    }
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}