مخطّط إجراءات التسليم

تصف هذه الصفحة الحمولة البرمجية لخدمة الويب للتنفيذ (Ordering End-to-End API) عند استخدام واجهة برمجة التطبيقات المضمّنة لتنفيذ الإجراءات Ordering End-to-End Built-in Action API. للحصول على نسخة قابلة للقراءة آليًا من هذه المعلومات، يمكنك تنزيل مخطّط JSON.

أنواع القواعد

سلة التسوق

يحتوي على تفاصيل الطلب، بالإضافة إلى ما إذا كان الطلب للاستلام أو التسليم. تحتوي سلة التسوّق أيضًا على تفاصيل التسليم والإكرامية وعنوان العميل. يتم تعريف عنصر Cart في Checkout AppRequest. يمكنك تضمين نسخة من سلة التسوّق في Checkout AppResponse.

يسرد الجدول التالي سمات النوع Cart:

الموقع النوع الوصف
@type Const

نوع هذا العنصر انسَ هذا الحقل إذا كان عنصر سلة التسوّق الرئيسي جزءًا من ProposedOrder.

القيمة: type.googleapis.com/google.actions.v2.orders.Cart

id String

معرّف اختياري لسلة التسوّق

merchant Merchant

التاجر المرتبط بسلة التسوّق هذه

lineItems قائمة<LineItem>

مطلوب.

قائمة السلع أو الخدمات التي يطلبها المستخدم

يجب أن يتضمّن عنصرًا واحدًا على الأقل.

promotions قائمة<Promotion>

العرض الترويجي الذي تم تطبيقه في سلة التسوّق هذه يمكن حاليًا استخدام عرض ترويجي واحد فقط.

notes String

ملاحظات حول الطلب أو تعليمات التسليم

extension FoodCartExtension

تُحدِّد تفاصيل عن المستخدم، مثل الإعدادات المفضّلة للتسليم.

يوضّح المثال التالي عنصر Cart:

مثال 1

{
  "@type": "type.googleapis.com/google.actions.v2.orders.Cart",
  "merchant": {
    "id": "https://www.exampleprovider.com/merchant/id1",
    "name": "Cucina Venti"
  },
  "lineItems": [
    {
      "name": "Sizzling Prawns Dinner",
      "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": "16",
          "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
          }
        ]
      }
    }
  ],
  "extension": {
    "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
    "fulfillmentPreference": {
      "fulfillmentInfo": {
        "delivery": {
          "deliveryTimeIso8601": "P0M"
        }
      }
    },
    "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"
    }
  }
}

مثال 2

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

معلومات الاتصال

تُحدِّد تفاصيل عن الشخص الذي يستلم الطلب. لا يتوفّر هذا الخيار إلا في AppResponse.

يسرد الجدول التالي سمات النوع Contact:

الموقع النوع الوصف
displayName String

اسم الشخص الذي سيستلم الطلب، كما تريد أن يظهر استخدِم هذا الحقل في حال عدم تحديد firstName وlastName.

مثلاً: Lovefood Ordering

email String

عنوان البريد الإلكتروني للشخص الذي يتلقّى الطلب.

مثلاً: ilovefood@example.com

firstName String

الاسم الأول للشخص الذي سيستلم الطلب.

مثلاً: Lovefood

lastName String

اسم العائلة للشخص الذي سيستلم الطلب.

مثلاً: Ordering

phoneNumber String

رقم هاتف الشخص الذي سيستلم الطلب، بما في ذلك رمز البلد

مثلاً: +16501234567

emailVerified صحيح/خطأ

يشير ذلك إلى ما إذا كان الشخص الذي يتلقّى الطلب مسجِّلاً الدخول باستخدام حسابه على Google.

يوضّح المثال التالي عنصر Contact:

مثال

{
  "displayName": "Lovefood Ordering",
  "email": "ilovefood@example.com",
  "phoneNumber": "+16501234567"
}

CustomPushMessage

يحتوي على OrderUpdate للطلب.

يسرد الجدول التالي سمات النوع CustomPushMessage:

الموقع النوع الوصف
orderUpdate OrderUpdate

مطلوب.

تم تعديل معلومات الطلب.

يوضّح المثال التالي عنصر CustomPushMessage:

مثال

{
  "orderUpdate": {
    "actionOrderId": "sample_action_order_id",
    "orderState": {
      "state": "IN_TRANSIT",
      "label": "Order is on the way"
    },
    "inTransitInfo": {
      "updatedTime": "2017-07-17T12:00:00Z"
    },
    "updateTime": "2017-07-17T12:00:00Z",
    "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_RESTAURANT",
        "button": {
          "title": "Call restaurant",
          "openUrlAction": {
            "url": "tel:+16505554679"
          }
        }
      }
    ],
    "receipt": {
      "userVisibleOrderId": "userVisibleId1234"
    },
    "infoExtension": {
      "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
      "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z"
    }
  }
}

DeliveryInfo

يسرد الجدول التالي سمات النوع DeliveryInfo:

الموقع النوع الوصف
deliveryTimeIso8601 String

الوقت المقدَّر للتسليم بتنسيق الطابع الزمني ISO 8601:‏ "‎{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" أو تنسيق المدة:‏ "P(n)Y(n)M(n)DT(n)H(n)M(n)S" على سبيل المثال، يمثّل PT90M مدة 90 دقيقة. تشير القيمة التلقائية "PT0M" إلى أنّ وقت التسليم المفضّل هو في أقرب وقت ممكن. المرجع: https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations. استخدِم هذا الحقل لتعديل وقت التسليم المقدَّر أثناء الردّ على عملية الدفع.

مثلاً: PT90M

يوضّح المثال التالي عنصر DeliveryInfo:

مثال

{
  "deliveryTimeIso8601": "PT90M"
}

إخلاء المسؤولية

يسرد الجدول التالي سمات النوع Disclaimer:

الموقع النوع الوصف
predefinedMessage PredefinedMessage

مطلوب.

لعرض رسائل إخلاء المسؤولية المحدّدة مسبقًا أثناء الدفع

feeAmount Money

سيحصّل الشريك من التاجر رسومًا بقيمة N مقابل هذا الطلب.

feeAmountRange FeeAmountRange

سيحصّل الشريك من المطعم رسومًا تتراوح بين "ن" و"م" لكل طلب.

feePercent Number

سيحصّل الشريك من التاجر رسومًا بنسبة% N مقابل هذا الطلب.

feePercentRange FeePercentRange

سيحصّل الشريك من التاجر رسومًا تتراوح بين% N و% M لكل طلب.

يوضّح المثال التالي عنصر Disclaimer:

مثال 1

{
  "predefinedMessage": "NEW_YORK_DELIVERY_FEE_TIP_DISCLAIMER"
}

مثال 2

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE"
}

مثال 3

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE",
  "feePercent": 25
}

مثال 4

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE",
  "feePercentRange": {
    "minFeePercent": 20,
    "maxFeePercent": 30
  }
}

المثال الخامس

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE",
  "feeAmount": {
    "currencyCode": "AUD",
    "units": 2,
    "nanos": 500000000
  }
}

مثال 6

{
  "predefinedMessage": "FEE_CHARGED_TO_RESTAURANT_DISCLOSURE",
  "feeAmountRange": {
    "minFeeAmount": {
      "currencyCode": "AUD",
      "units": 2,
      "nanos": 500000000
    },
    "maxFeeAmount": {
      "currencyCode": "AUD",
      "units": 10,
      "nanos": 0
    }
  }
}

خطأ

يحتوي نوع Error على القيم المحتملة التالية:

  • CLOSED: المطعم مغلق في وقت تقديم الطلب.
  • NO_CAPACITY: لا تتوفّر سعة خدمة (على سبيل المثال، انقطاع مؤقت بسبب أوقات الذروة).
  • NO_COURIER_AVAILABLE: تعذّر معالجة الطلب بسبب قلة عدد موظفي التسليم.
  • REQUIREMENTS_NOT_MET: عدم استيفاء قيود قبول الطلب (على سبيل المثال، الحد الأدنى لحجم سلة التسوّق)
  • UNAVAILABLE_SLOT: لا يمكن تنفيذ الطلب في الوقت المحدَّد للطلب المُسبَق الذي حدَّدته DeliveryInfo أو PickupInfo.
  • OUT_OF_SERVICE_AREA: لا يمكن تسليم الطلب إلى عنوان المستخدم.
  • PROMO_EXPIRED: تعذّر التقديم لأنّ العرض الترويجي انتهت صلاحيته.
  • PROMO_NOT_APPLICABLE: رمز خطأ عام لرصد جميع حالات تعذُّر تطبيق الرمز الترويجي، إذا لم يكن أيّ من أخطاء الرموز الترويجية الأخرى مناسبًا.
  • PROMO_NOT_RECOGNIZED: لم يتم التعرّف على رمز القسيمة.
  • PROMO_ORDER_INELIGIBLE: الطلب الحالي غير مؤهَّل لاستخدام هذا القسيمة.
  • PROMO_USER_INELIGIBLE: المستخدم الحالي غير مؤهَّل للاستفادة من هذا القسيمة.
  • AVAILABILITY_CHANGED: لم يعُد العنصر متوفّرًا أو لا تتوفّر عناصر كافية لتلبية الطلب.
  • INCORRECT_PRICE: أخطاء في السعر في الرسوم أو الإجمالي
  • INVALID: يحتوي العنصر LineItem أو FulfillmentOption أو العرض الترويجي على بيانات غير صالحة.
  • NOT_FOUND: لا يمكن العثور على عنصر أو خيار للتوصيل أو عرض ترويجي.
  • PRICE_CHANGED: تغيّر سعر سلعة.

FeeAmountRange

يسرد الجدول التالي سمات النوع FeeAmountRange:

الموقع النوع الوصف
minFeeAmount Money

الحد الأدنى لمبلغ الرسوم المُحصَّلة

maxFeeAmount Money

الحد الأقصى لمبلغ الرسوم المُحصَّلة

FeePercentRange

يسرد الجدول التالي سمات النوع FeePercentRange:

الموقع النوع الوصف
minFeePercent Number

الحد الأدنى لنسبة الرسوم المُحصَّلة

maxFeePercent Number

الحدّ الأقصى لنسبة الرسوم المفروضة.

FoodCartExtension

يحتوي على تفاصيل عن المستخدم، مثل الإعدادات المفضّلة للتسليم.

يسرد الجدول التالي سمات النوع FoodCartExtension:

الموقع النوع الوصف
@type Const

نوع هذه الإضافة. يتم دائمًا ضبط هذا الحقل على "type.googleapis.com/google.actions.v2.orders.FoodCartExtension".

القيمة: type.googleapis.com/google.actions.v2.orders.FoodCartExtension

contact Contact

معلومات الاتصال الخاصة بالشخص الذي سيستلم الطلب وتشمل التفاصيل اسم المستخدم ورقم هاتفه وعنوان بريده الإلكتروني.

fulfillmentPreference FulfillmentOption

مطلوب.

الإعداد المفضّل للمستخدم لتسليم الطلب

location Location

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

يوضّح المثال التالي عنصر FoodCartExtension:

مثال 1

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
  "fulfillmentPreference": {
    "fulfillmentInfo": {
      "delivery": {
        "deliveryTimeIso8601": "P0M"
      }
    }
  },
  "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"
  }
}

مثال 2

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
  "fulfillmentPreference": {
    "fulfillmentInfo": {
      "pickup": {
        "pickupTimeIso8601": "P0M"
      }
    }
  },
  "contact": {
    "displayName": "Lovefood Ordering",
    "email": "ilovefood@example.com",
    "phoneNumber": "+16501234567"
  }
}

FoodErrorExtension

لتحديد خطأ واحد أو أكثر حدث أثناء معالجة طلب. يوضّح الجدول التالي حقول النوع FoodErrorExtension. يمكن إرسال الأخطاء في CheckoutResponse.

يسرد الجدول التالي سمات النوع FoodErrorExtension:

الموقع النوع الوصف
@type Const

مطلوب.

نوع هذه الإضافة.

القيمة: type.googleapis.com/google.actions.v2.orders.FoodErrorExtension

foodOrderErrors قائمة<FoodOrderError>

مطلوب.

صفيف من عناصر FoodOrderError التي تصف الأخطاء التي حدثت يُنصح بخطأ واحد لكل سلة تسوّق أو لكل سلعة.

يجب أن يتضمّن عنصرًا واحدًا على الأقل.

correctedProposedOrder ProposedOrder

تكون هذه السمة مطلوبة عند foodOrderErrors.error = "UNAVAILABLE_SLOT", "PROMO_EXPIRED", "PROMO_NOT_APPLICABLE", "PROMO_NOT_RECOGNIZED", "PROMO_ORDER_INELIGIBLE", "PROMO_USER_INELIGIBLE", "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "INVALID", "NOT_FOUND", or "PRICE_CHANGED".

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

paymentOptions PaymentOptions

تكون هذه السمة مطلوبة عند foodOrderErrors.error = "UNAVAILABLE_SLOT", "PROMO_EXPIRED", "PROMO_NOT_APPLICABLE", "PROMO_NOT_RECOGNIZED", "PROMO_ORDER_INELIGIBLE", "PROMO_USER_INELIGIBLE", "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "INVALID", "NOT_FOUND", or "PRICE_CHANGED".

خيارات الدفع التلقائية التي تم اختيارها للمستخدم

additionalPaymentOptions قائمة<PaymentOptions>

خيارات الدفع البديلة المتاحة للمستخدم

يوضّح المثال التالي عنصر FoodErrorExtension:

مثال

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

FoodItemExtension

تحدِّد هذه السمة العناصر الإضافية لأصناف الطعام.

يسرد الجدول التالي سمات النوع FoodItemExtension:

الموقع النوع الوصف
@type Const

مطلوب.

نوع هذه الإضافة. يتم ضبط هذا الحقل دائمًا على "type.googleapis.com/google.actions.v2.orders.FoodItemExtension".

القيمة: type.googleapis.com/google.actions.v2.orders.FoodItemExtension

options قائمة<FoodItemOption>

يمكن أن يكون الخيار عنصرًا إضافيًا أو مجموعة إضافية تحتوي على مجموعة من الإضافات.

يوضّح المثال التالي عنصر FoodItemExtension:

مثال

{
  "@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,
      "subOptions": [
        {
          "id": "10239138",
          "offerId": "912391723",
          "name": "Fries",
          "price": {
            "currencyCode": "USD",
            "units": "2",
            "nanos": 230000000
          },
          "quantity": 1
        }
      ]
    }
  ]
}

FoodItemOption

يسرد الجدول التالي سمات النوع FoodItemOption:

الموقع النوع الوصف
id String

المعرّف الفريد الذي تحدّده Google عند إرسال FoodOrderError أو AsyncOrderUpdateRequest، استخدِم هذا الحقل للتمييز في الحالات التي تحتوي فيها سلة التسوّق على أكثر من سلعة واحدة بالمعرّف offerId نفسه.

مثلاً: 39231093

offerId String

معرّف العرض الترويجي للسلعة.

مثلاً: 912835081

name String

اسم الخيار

مثلاً: Honey Mustard

price Money
note String

ملاحظة ذات صلة بالخيار

quantity Number

بالنسبة إلى الخيارات التي تكون عناصر، عدد العناصر.

مثلاً: 3

subOptions قائمة<FoodItemOption>

الخيارات الفرعية للخيار، إن توفّرت

مثلاً: [ { "id": "71283712", "offerId": "51209121", "name": "BBQ Sauce", "price": { "currencyCode": "USD", "units": "3", "nanos": 780000000 }, "quantity": 2 }, { "id": "102941024", "offerId": "12084102", "name": "Ketchup", "price": { "currencyCode": "USD", "units": "2", "nanos": 980000000 }, "quantity": 6 } ]

يوضّح المثال التالي عنصر FoodItemOption:

مثال 1

{
  "id": "10293231",
  "offerId": "1918491",
  "name": "Honey Mustard",
  "price": {
    "currencyCode": "USD",
    "units": "1",
    "nanos": 250000000
  },
  "quantity": 5
}

مثال 2

{
  "id": "123166552",
  "offerId": "912849184",
  "name": "Make It A Meal",
  "price": {
    "currencyCode": "USD",
    "units": "3",
    "nanos": 730000000
  },
  "quantity": 1,
  "subOptions": [
    {
      "id": "10239138",
      "offerId": "912391723",
      "name": "Fries",
      "price": {
        "currencyCode": "USD",
        "units": "2",
        "nanos": 230000000
      },
      "quantity": 1
    },
    {
      "id": "57159183",
      "offerId": "81837123",
      "name": "Drink",
      "price": {
        "currencyCode": "USD",
        "units": "3",
        "nanos": 130000000
      },
      "quantity": 1
    }
  ]
}

FoodOrderError

يحتوي على تفاصيل عن الأخطاء في CheckoutResponse.

يسرد الجدول التالي سمات النوع FoodOrderError:

الموقع النوع الوصف
error Error

مطلوب.

id String

تكون هذه السمة مطلوبة عند error = "AVAILABILITY_CHANGED", "INCORRECT_PRICE", "PRICE_CHANGED", "INVALID", or "NOT_FOUND".

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

description String

وصف الخطأ هذا الوصف مخصّص للتسجيل الداخلي ولا يظهر للمستخدمين.

updatedPrice Money

تكون هذه السمة مطلوبة عند error = "PRICE_CHANGED".

السعر الجديد للسلعة التي تسبّبت في الخطأ لا يكون هذا الحقل مطلوبًا إلا عندما يكون الخطأ هو PRICE_CHANGED.

availableQuantity عدد صحيح

تكون هذه السمة مطلوبة عند error = "INVALID", or "NOT_FOUND".

الكمية الجديدة المتوفّرة للسلعة التي تسبّبت في الخطأ لا يكون هذا الإجراء مطلوبًا إلا عندما يكون الخطأ "INVALID" أو "NOT_FOUND". يجب أن تكون القيمة صفرًا لكل من "INVALID" و "NOT_FOUND".

يوضّح المثال التالي عنصر FoodOrderError:

مثال 1

{
  "error": "CLOSED",
  "description": "This store is currently reachable. Please try again later."
}

مثال 2

{
  "error": "PRICE_CHANGED",
  "id": "french_fries",
  "description": "The price has changed.",
  "updatedPrice": {
    "currencyCode": "USD",
    "units": "2",
    "nanos": 750000000
  }
}

FoodOrderExtension

يحتوي على معلومات حول الطلب.

يسرد الجدول التالي سمات النوع FoodOrderExtension:

الموقع النوع الوصف
@type Const

نوع هذه الإضافة. يتم دائمًا ضبط هذا الحقل على "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension".

القيمة: type.googleapis.com/google.actions.v2.orders.FoodOrderExtension

availableFulfillmentOptions قائمة<FulfillmentOption>

يمثّل خيارات توصيل الطلبات المتاحة للطلب.

optinForRemarketing صحيح/خطأ

طلب المستخدم تفعيل قنواتك التسويقية لا يمكنك إرسال محتوى تسويقي تلقائيًا بدون موافقة المستخدم. إذا كانت قيمة optinForRemarketing صحيحة، يمكنك اشتراك المستخدم. إذا كان الخيار optinForRemarketing خطأ أو غير متوفّر، يجب إبقاء حالة الاشتراك في نظامك كما هي. لا يمكن للمستخدمين إيقاف الميزة من خلال Google، بل من خلال وظيفة إلغاء الاشتراك المقدَّمة في قنواتك التسويقية فقط. لا تظهر هذه العلامة إلا في SubmitOrderRequestMessage.

يوضّح المثال التالي عنصر FoodOrderExtension:

مثال 1

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
  "availableFulfillmentOptions": [
    {
      "fulfillmentInfo": {
        "delivery": {
          "deliveryTimeIso8601": "P0M"
        }
      },
      "expiresAt": "2017-07-17T12:30:00Z"
    }
  ]
}

مثال 2

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
  "availableFulfillmentOptions": [
    {
      "fulfillmentInfo": {
        "pickup": {
          "pickupTimeIso8601": "P0M"
        }
      },
      "expiresAt": "2020-08-20T11:41:00Z"
    }
  ],
  "optinForRemarketing": true
}

FulfillmentOption

يمكنك استخدام عنصر FulfillmentOption بالطرق التالية:
  • في Checkout AppRequest و Submit AppRequest، يُستخدَم العنصر Cart.extension.fulfillmentPreference لتخزين الإعداد المفضّل للمستخدم (توصيل أو استلام). يكون السعر دائمًا 0 عند إرسال طلب الدفع.
  • في Checkout AppResponse، يحدِّد العنصر ProposedOrder.extension.availableFulfillmentOptions: خيار تسليم واحدًا أو أكثر (يُتاح حاليًا خيار واحد فقط من خيارات التسليم). يمكنك تحديد الخيار التلقائي على أنّه LineItem في ProposedOrder.otherItems. يجب أن يتطابق offerId الخاص بملف FulfillmentOption مع معرّفملف LineItem المحدّد في ProposedOrder.otherItems.

يسرد الجدول التالي سمات النوع FulfillmentOption:

الموقع النوع الوصف
offerId String

المعرّف الفريد لخيار التسليم هذا، إن توفّر

fulfillmentInfo FulfillmentOptionInfo

مطلوب.

expiresAt الطابع الزمني وفقًا لمعيار ISO

الوقت الذي تنتهي فيه صلاحية خيار التسليم هذا.

price Money

تكلفة هذا الخيار.

يوضّح المثال التالي عنصر FulfillmentOption:

مثال

{
  "offerId": "offer5",
  "fulfillmentInfo": {
    "pickup": {
      "pickupTimeIso8601": "P0M"
    }
  },
  "expiresAt": "2019-05-02T00:00:00-07:00",
  "price": {
    "currencyCode": "USD",
    "units": "5",
    "nanos": 230000000
  }
}

FulfillmentOptionInfo

لتحديد المعلومات المتعلّقة بـ FulfillmentInfo

يسرد الجدول التالي سمات النوع FulfillmentOptionInfo:

الموقع النوع الوصف
يجب استخدام مجموعة واحدة بالضبط من المجموعات التالية من السمات.
delivery المجموعة 1 DeliveryInfo

تشير إلى طلب التسليم في حال توفّره.

pickup المجموعة 2 PickupInfo

يشير إلى طلب استلام في حال توفّره.

صورة

يسرد الجدول التالي سمات النوع Image:

الموقع النوع الوصف
sourceUrl String

مطلوب.

عنوان URL للصورة يجب ألا يقل حجم الصورة عن 72×72 بكسل. للحصول على أفضل النتائج، استخدِم صورة بحجم 216 x ‏216 بكسل على الأقل. يجب أن يكون حجم الصورة أقل من 6 ميغابايت وأن تكون بدقة 64 ميغابكسل.

LineItem

تُستخدَم لتحديد محتوى سلة التسوّق (Cart.lineItems) أو الرسوم الإضافية لطلب (ProposedOrder.otherItems).

يسرد الجدول التالي سمات النوع LineItem:

الموقع النوع الوصف
id String

تكون هذه السمة مطلوبة عند type = "REGULAR".

بالنسبة إلى سلعة في سلة تسوّق (ProposedOrder.cart.lineItems[0].id)، هذا هو المعرّف الفريد الذي أنشأته Google عند إنشاء الطلب. بالنسبة إلى عنصر في ProposedOrder (ProposedOrder.otherItems[0].id)، والذي يُستخدَم لإضافة عناصر مثل رسوم التسليم والضرائب، يحدّد مقدّم الخدمة قيمة المعرّف. على سبيل المثال، تحتوي سلة التسوّق على سلعتَين متطابقتَين تتضمّنان تعليمات تحضير مختلفة (مثل بيتزا متوسطة الحجم مع مجموعتَين مختلفتَين من الإضافات). في هذه الحالة، يحتوي كلا العنصرَين على معرّف العرض الأساسي نفسه. عند إرسال طلب تعديل طلب للإشارة إلى رفض سلعة، استخدِم هذا المعرّف كمزيل للتباس. بعبارة أخرى، إذا تم رفض إحدى الفطائر بسبب عدم توفّر مكونات معيّنة عليها، يساعد المعرّف Google في تحديد السلعة المُشار إليها في الطلب. هذا الحقل مطلوب باستثناء otherItems.

name String

مطلوب.

اسم العنصر. هذه سلسلة تظهر للمستخدم، ويجب أن تكون بتنسيق الجملة كلما أمكن (مثل "رسوم التسليم" و"رسوم الخدمة" و"الضريبة"). يتم اقتطاع هذا الحقل عند 100 حرف للمستخدمين.

type LineItemType

مطلوب.

quantity عدد صحيح

تكون هذه السمة مطلوبة عند type = "REGULAR".

عدد السلع المضمّنة لا ينطبق ذلك على ProposedOrder.otherItems.

description String

وصف السلعة

price Price

مطلوب.

سعر السلعة أو السلع تعكس هذه القيمة السعر الإجمالي لجميع السلع أو الخدمات لهذا البند (بمعنى آخر، إضافة تكلفة أي إضافات ومضاعفة الكمية). على سبيل المثال: إذا كان سعر سلعة بقيمة 10 دولار أمريكي هو 3 سلع، سيكون السعر 30 دولار أمريكي. إذا كان سعر البيتزا الأساسية هو 5 ريال سعودي وسعر الإضافة 1 ريال سعودي، سيكون السعر 6 ريال سعودي. إذا كانت سعر كل فطيرة هو 5 ريال سعودي وسعر الإضافة لكل فطيرة هو ريال سعودي واحد، سيكون سعر طلب فطيرتين (الكمية = 2) هو 12 ريال سعودي. يجب أن يكون لكل عنصر سعر، حتى إذا كان السعر "0". عندما يكون النوع DISCOUNT (خصم)، حدِّد القيمة على أنّها سالبة (على سبيل المثال، "-2").

subLines قائمة<SublineNote>

اختياري وصالح فقط إذا كان النوع "عادي". يمكن إرسال ملاحظة خاصة بالسلعة من المستخدم في هذا الحقل في طلب الدفع وطلب إرسال الطلب. تأكَّد من أنّ التاجر يتلقّى ملاحظتك عند تقديمها. وستظهر في الطلب على النحو التالي: subLines[0].note، وهي القيمة الوحيدة المقدَّمة في هذا الحقل عندما يكون متوفّرًا في الطلب.

يجب ألا يتضمّن أكثر من عنصر واحد.

offerId String

تكون هذه السمة مطلوبة عند type = "REGULAR".

معرّف العرض الترويجي لعنصر القائمة الخاص بالعنصر. لا ينطبق ذلك على ProposedOrder.otherItems.

extension FoodItemExtension

تحدِّد هذه السمة المكونات الإضافية لأصناف الطعام.

يوضّح المثال التالي عنصر LineItem:

مثال 1

{
  "name": "New customer discount",
  "price": {
    "type": "ESTIMATE",
    "amount": {
      "currencyCode": "USD",
      "units": "-5",
      "nanos": -500000000
    }
  },
  "type": "DISCOUNT"
}

مثال 2

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

LineItemType

يحتوي نوع LineItemType على القيم المحتملة التالية:

  • REGULAR: سلعة في فاتورة السلع تنطبق على Cart.lineItems.
  • TAX: عنصر السطر الضريبي ينطبق على ProposedOrder.otherItems.
  • DISCOUNT: عنصر الخصم يُرجى العِلم أنّ السعر يجب أن يكون سالبًا. ينطبق على ProposedOrder.otherItems.
  • GRATUITY: عنصر المكافأة محجوزة بشكل عام لـ SubmitOrderRequestMessage للحصول على معلومات إضافية يختارها المستخدم. ينطبق على ProposedOrder.otherItems.
  • DELIVERY: عنصر تسليم ينطبق على ProposedOrder.otherItems.
  • SUBTOTAL: عنصر السطر للإجمالي الفرعي ينطبق على ProposedOrder.otherItems.
  • FEE: عنصر إضافي لا يندرج ضمن الأنواع الأخرى ينطبق على ProposedOrder.otherItems.

الموقع الجغرافي

تحدِّد عنوانًا لطلب الطعام. يُستخدَم النوع Location في Cart للإشارة إلى وجهة طلب تسليم فقط. يظهر الموقع الجغرافي النهائي أيضًا في TransactionDecisionValue إذا قدّم المستخدم الطلب. بالنسبة إلى الطلبات التي تحدّد مكان الاستلام، لا يتم تضمين موقع جغرافي على الإطلاق (حتى لو كان فارغًا).

يسرد الجدول التالي سمات النوع Location:

الموقع النوع الوصف
coordinates Coordinates
formattedAddress String

عرض عنوان الموقع الجغرافي

مثلاً: 1350 CHARLESTON ROAD, MOUNTAIN VIEW, CA, United States

postalAddress PostalAddress
zipCode String

مثلاً: 90210

city String

اسم المدينة

مثلاً: Los Angeles

notes String

ملاحظات حول الموقع الجغرافي، مثل رموز البوابة يجب ألا يزيد عدد الأحرف عن 500 حرف.

مثلاً: Gate code is #111

يوضّح المثال التالي عنصر 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"
}

التاجر

يسرد الجدول التالي سمات النوع Merchant:

الموقع النوع الوصف
id String

معرّف التاجر. في حال تحديدها، تتطابق مع Restaurant.@id في خلاصة المطاعم.

مثلاً: https://www.exampleprovider.com/merchant/id1

name String

مطلوب.

الاسم الذي يظهر للمستخدم للتاجر

مثلاً: Falafel Bite

يوضّح المثال التالي عنصر Merchant:

مثال

{
  "id": "https://www.exampleprovider.com/merchant/id1",
  "name": "Falafel Bite"
}

المال

يسرد الجدول التالي سمات النوع Money:

الموقع النوع الوصف
currencyCode String

مطلوب.

رمز عملة مكوّن من 3 أحرف بتنسيق ISO 4217

مثلاً: USD

units String

الوحدات الكاملة للمبلغ على سبيل المثال، إذا كان currencyCode هو "USD"، تكون الوحدة "1" دولار أمريكي واحد.

مثلاً: 36

nanos عدد صحيح

عدد وحدات النانو (10^-9) للمبلغ يجب أن تتراوح القيمة بين -999,999,999 و‎+999,999,999، بما في ذلك هذين الرقمَين. استخدِم القواعد التالية: إذا كانت الوحدات موجبة، يجب أن تكون النانو موجبة أو صفرًا. إذا كانت الوحدات تساوي صفرًا، يمكن أن تكون النانو موجبة أو صفرًا أو سالبة. إذا كانت الوحدات سالبة، يجب أن تكون النانوثانية سالبة أو صفرًا. على سبيل المثال، يتم تمثيل القيمة -1.75 دولار أمريكي على النحو التالي: الوحدات = -1 والنانو = -750,000,000.

مثلاً: 730000000

يوضّح المثال التالي عنصر Money:

مثال 1

{
  "currencyCode": "USD",
  "units": "36",
  "nanos": 730000000
}

مثال 2

{
  "currencyCode": "EUR",
  "units": "10"
}

طلب

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

يسرد الجدول التالي سمات النوع Order:

الموقع النوع الوصف
finalOrder ProposedOrder

مطلوب.

الطلب المقترَح الذي أدّى إلى الطلب.

googleOrderId String

مطلوب.

معرّف الطلب الذي تحدّده Google يجب أن يكون هذا المعرّف ثابتًا طوال دورة حياة الطلب. لا يظهر هذا المعرّف للمستخدم النهائي.

orderDate الطابع الزمني وفقًا لمعيار ISO

مطلوب.

تاريخ ووقت إنشاء الطلب

paymentInfo PaymentInfo

مطلوب.

معلومات الدفع المرتبطة بدفعة هذا الطلب

يوضّح المثال التالي عنصر Order:

مثال

{
  "finalOrder": {
    "cart": {
      "notes": "Guest prefers their food to be hot when it is delivered.",
      "merchant": {
        "id": "https://www.exampleprovider.com/merchant/id1",
        "name": "Cucina Venti"
      },
      "lineItems": [
        {
          "name": "Sizzling Prawns Dinner",
          "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": "16",
              "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
              }
            ]
          }
        }
      ],
      "extension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
        "fulfillmentPreference": {
          "fulfillmentInfo": {
            "pickup": {
              "pickupTimeIso8601": "P0M"
            }
          }
        },
        "contact": {
          "displayName": "Lovefood Ordering",
          "email": "ilovefood@example.com",
          "phoneNumber": "+16501234567"
        }
      }
    },
    "otherItems": [
      {
        "name": "Service fee",
        "type": "FEE",
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "3",
            "nanos": 500000000
          }
        }
      },
      {
        "name": "Tax",
        "type": "TAX",
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "1",
            "nanos": 370000000
          }
        }
      },
      {
        "name": "Tip",
        "type": "GRATUITY",
        "price": {
          "type": "ESTIMATE",
          "amount": {
            "currencyCode": "USD",
            "units": "2",
            "nanos": 590000000
          }
        }
      }
    ],
    "totalPrice": {
      "type": "ESTIMATE",
      "amount": {
        "currencyCode": "USD",
        "units": "23",
        "nanos": 710000000
      }
    },
    "id": "sample_final_order_id",
    "extension": {
      "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
      "availableFulfillmentOptions": [
        {
          "fulfillmentInfo": {
            "pickup": {
              "pickupTimeIso8601": "P0M"
            }
          },
          "expiresAt": "2017-07-17T12:30:00Z"
        }
      ],
      "optinForRemarketing": true
    }
  },
  "googleOrderId": "sample_google_order_id",
  "orderDate": "2017-07-17T12:00:00Z",
  "paymentInfo": {
    "displayName": "Visa\u2006****\u20061111",
    "googleProvidedPaymentInstrument": {
      "instrumentToken": "abcd"
    },
    "paymentType": "PAYMENT_CARD"
  }
}

OrderUpdate

يوضّح الجدول التالي حقول نوع OrderUpdate الذي يكون مضمّنًا في AppResponse.

يسرد الجدول التالي سمات النوع OrderUpdate:

الموقع النوع الوصف
actionOrderId String

مطلوب.

المعرّف الفريد للطلب في نظام المُدمِج الذي يُستخدَم لتحديد الطلب الذي يتم إرسال التعديل له. إذا لم يتم تقديم receipt.user_visible_order_id مرة واحدة على الأقل في OrderUpdate لطلب "تم إنشاؤه"، سيكون هذا المعرّف هو المعرّف المعروض للمستخدم الذي تم إدخاله في بطاقة طلب Google.

orderState OrderState

مطلوب.

الحالة الجديدة للطلب.

lineItemUpdates Map<String, LineItemUpdate>
updateTime الطابع الزمني وفقًا لمعيار ISO

مطلوب.

الوقت الذي تم فيه تعديل الطلب.

orderManagementActions قائمة<OrderManagementAction>

الإجراءات التي يتم تنفيذها بعد تقديم الطلب، مثل التواصل مع فريق الدعم وعرض تفاصيل الطلب

يجب أن يتضمّن عنصرًا واحدًا على الأقل و6 عناصر كحد أقصى.

rejectionInfo RejectionInfo

تكون هذه السمة مطلوبة عند orderState.state = "REJECTED".

cancellationInfo CancellationInfo

تكون هذه السمة مطلوبة عند orderState.state = "CANCELLED".

inTransitInfo InTransitInfo

تم إيقاف هذا الحقل نهائيًا.

fulfillmentInfo FulfillmentInfo

تم إيقاف هذا الحقل نهائيًا.

receipt Receipt

تكون هذه السمة مطلوبة عند orderState.state = "CONFIRMED", "IN_PREPARATION", or "READY_FOR_PICKUP".

يجب تقديم رقم تعريف الطلب المرئي للمستخدم في الإيصال.

totalPrice Price

إجمالي سعر الطلب.

infoExtension FoodOrderUpdateExtension

لتحديد مزيد من التفاصيل حول تعديل الطلب، مثل الفاصل الزمني المقدَّر للتسليم أو الاستلام

يوضّح المثال التالي عنصر OrderUpdate:

مثال

{
  "actionOrderId": "sample_action_order_id",
  "orderState": {
    "state": "CONFIRMED",
    "label": "Provider confirmed"
  },
  "totalPrice": {
    "type": "ESTIMATE",
    "amount": {
      "currencyCode": "USD",
      "units": "41",
      "nanos": 600000000
    }
  },
  "lineItemUpdates": {
    "sample_item_id_1": {
      "price": {
        "type": "ESTIMATE",
        "amount": {
          "currencyCode": "USD",
          "units": "3",
          "nanos": 500000000
        }
      },
      "reason": "This item has an updated price."
    }
  },
  "receipt": {
    "userVisibleOrderId": "userVisibleId1234"
  },
  "updateTime": "2017-07-17T12:00:00Z",
  "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_RESTAURANT",
      "button": {
        "title": "Call restaurant",
        "openUrlAction": {
          "url": "tel:+16505554679"
        }
      }
    }
  ],
  "infoExtension": {
    "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
    "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z"
  }
}

PickupInfo

يسرد الجدول التالي سمات النوع PickupInfo:

الموقع النوع الوصف
pickupTimeIso8601 String

الوقت المقدَّر للاستلام، بتنسيق الطابع الزمني ISO 8601:‏ "‎{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z" أو تنسيق المدة:‏ "P(n)Y(n)M(n)DT(n)H(n)M(n)S". على سبيل المثال، يمثّل PT90M مدة 90 دقيقة. تشير القيمة التلقائية "PT0M" إلى أنّ وقت الاستلام المفضّل هو في أقرب وقت ممكن. المرجع: https://en.wikipedia.org/wiki/ISO_8601#Combined_date_and_time_representations. استخدِم هذا الحقل لتعديل وقت الاستلام المقدَّر أثناء الردّ على عملية الدفع.

مثلاً: PT90M

يوضّح المثال التالي عنصر PickupInfo:

مثال

{
  "pickupTimeIso8601": "PT90M"
}

PostalAddress

يسرد الجدول التالي سمات النوع PostalAddress:

الموقع النوع الوصف
regionCode String

مطلوب.

رمز بلد مكوّن من حرفين

مثلاً: US

postalCode String

تمثّل هذه السمة الرمز البريدي.

مثلاً: 94043

administrativeArea String

أعلى تقسيم فرعي إداري يُستخدَم للعناوين البريدية لبلد أو منطقة. يمكن أن يكون ذلك ولاية أو مقاطعة أو إقليمًا أو محافظة.

مثلاً: CA

locality String

المدينة أو البلدة التي يقع بها هذا الموقع الجغرافي في المناطق التي لا تكون فيها المواقع المحلية محدّدة بوضوح أو لا تتوافق مع هذه البنية، لا تحدِّد الموقع المحلي واستخدِم حقل addressLines بدلاً من ذلك.

مثلاً: Mountain View

addressLines List<String>

سطر واحد أو أكثر يمكنك استخدامه لتحديد عنوان الشارع يجب عدم تعديل هذا الحقل لأنّه قد يحتوي على مواقع جغرافية غير واضحة.

مثلاً: [ "1350 Charleston Road" ]

recipients List<String>

قائمة بالمستلمين لطلب معيّن لا يتوفّر هذا الحقل إلّا في billingAddress.

يوضّح المثال التالي عنصر PostalAddress:

مثال

{
  "regionCode": "US",
  "postalCode": "94043",
  "administrativeArea": "CA",
  "locality": "Mountain View",
  "addressLines": [
    "1350 Charleston Road"
  ]
}

السعر

يسرد الجدول التالي سمات النوع Price:

الموقع النوع الوصف
type Enum [ "ESTIMATE", "ACTUAL" ]

مطلوب.

رمز القسيمة الترويجية.

amount Money

مطلوب.

عرض ترويجي

يسرد الجدول التالي سمات النوع Promotion:

الموقع النوع الوصف
coupon String

مطلوب.

رمز القسيمة الترويجية.

ProposedOrder

يسرد الجدول التالي سمات النوع ProposedOrder:

الموقع النوع الوصف
id String

معرّف اختياري للطلب المقترَح.

cart Cart

مطلوب.

عناصر المستخدم

otherItems قائمة<LineItem>

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

يجب ألا يتضمّن أكثر من 10 عناصر.

image Image

صورة مرتبطة بالطلب المقترَح

totalPrice Price

مطلوب.

إجمالي سعر الطلب المقترَح.

extension FoodOrderExtension

مطلوب.

لتحديد معلومات تنفيذ طلبات الطعام

disclaimers قائمة<Disclaimer>

تتوافق مع رسائل إخلاء المسؤولية التي ستظهر في واجهة المستخدم قبل تقديم الطلب.

يوضّح المثال التالي عنصر 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": {
      "currencyCode": "USD",
      "units": "36",
      "nanos": 730000000
    }
  },
  "extension": {
    "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
    "availableFulfillmentOptions": [
      {
        "fulfillmentInfo": {
          "delivery": {
            "deliveryTimeIso8601": "P0M"
          }
        },
        "expiresAt": "2017-07-17T12:30:00Z"
      }
    ]
  }
}

SublineNote

يسرد الجدول التالي سمات النوع SublineNote:

الموقع النوع الوصف
note String

مطلوب.

الطابع الزمني

التاريخ والوقت بالتنسيق التالي: "{year}-{month}-{day}T{hour}:{min}:{sec}[.{frac_sec}]Z"

TransactionDecisionValue

يتضمّن المحتوى Order.

يسرد الجدول التالي سمات النوع TransactionDecisionValue:

الموقع النوع الوصف
order Order

مطلوب.

يجب تقديم طلب مع تفاصيل الدفع.

يوضّح المثال التالي عنصر TransactionDecisionValue:

مثال

{
  "order": {
    "finalOrder": {
      "cart": {
        "notes": "Guest prefers their food to be hot when it is delivered.",
        "merchant": {
          "id": "https://www.exampleprovider.com/merchant/id1",
          "name": "Cucina Venti"
        },
        "lineItems": [
          {
            "name": "Sizzling Prawns Dinner",
            "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": "16",
                "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
                }
              ]
            }
          }
        ],
        "extension": {
          "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
          "fulfillmentPreference": {
            "fulfillmentInfo": {
              "pickup": {
                "pickupTimeIso8601": "P0M"
              }
            }
          },
          "contact": {
            "displayName": "Lovefood Ordering",
            "email": "ilovefood@example.com",
            "phoneNumber": "+16501234567"
          }
        }
      },
      "otherItems": [
        {
          "name": "Service fee",
          "type": "FEE",
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "3",
              "nanos": 500000000
            }
          }
        },
        {
          "name": "Tax",
          "type": "TAX",
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "1",
              "nanos": 370000000
            }
          }
        },
        {
          "name": "Tip",
          "type": "GRATUITY",
          "price": {
            "type": "ESTIMATE",
            "amount": {
              "currencyCode": "USD",
              "units": "2",
              "nanos": 590000000
            }
          }
        }
      ],
      "totalPrice": {
        "type": "ESTIMATE",
        "amount": {
          "currencyCode": "USD",
          "units": "23",
          "nanos": 710000000
        }
      },
      "id": "sample_final_order_id",
      "extension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
        "availableFulfillmentOptions": [
          {
            "fulfillmentInfo": {
              "pickup": {
                "pickupTimeIso8601": "P0M"
              }
            },
            "expiresAt": "2017-07-17T12:30:00Z"
          }
        ],
        "optinForRemarketing": true
      }
    },
    "googleOrderId": "sample_google_order_id",
    "orderDate": "2017-07-17T12:00:00Z",
    "paymentInfo": {
      "displayName": "Visa\u2006****\u20061111",
      "googleProvidedPaymentInstrument": {
        "instrumentToken": "abcd"
      },
      "paymentType": "PAYMENT_CARD"
    }
  }
}

طلب توصيل الطلبات

AppRequest

يسرد الجدول التالي سمات النوع AppRequest:

الموقع النوع الوصف
isInSandbox صحيح/خطأ

يشير إلى ما إذا كانت المعاملات اللاحقة تتم في بيئة اختبار.

conversation Conversation
inputs قائمة<Input>

مطلوب.

يحتوي على الوسيطات المتوقّعة لدفع رسوم سلة تسوّق.

يجب أن يتضمّن عنصرًا واحدًا بالضبط.

يوضّح المثال التالي عنصر AppRequest:

مثال 1

{
  "isInSandbox": true,
  "inputs": [
    {
      "intent": "actions.foodordering.intent.CHECKOUT",
      "arguments": [
        {
          "extension": {
            "@type": "type.googleapis.com/google.actions.v2.orders.Cart",
            "merchant": {
              "id": "https://www.exampleprovider.com/merchant/id1",
              "name": "Cucina Venti"
            },
            "lineItems": [
              {
                "name": "Sizzling Prawns Dinner",
                "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": "16",
                    "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
                    }
                  ]
                }
              }
            ],
            "extension": {
              "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
              "fulfillmentPreference": {
                "fulfillmentInfo": {
                  "delivery": {
                    "deliveryTimeIso8601": "P0M"
                  }
                }
              },
              "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"
              }
            }
          }
        }
      ]
    }
  ]
}

مثال 2

{
  "isInSandbox": true,
  "inputs": [
    {
      "intent": "actions.intent.TRANSACTION_DECISION",
      "arguments": [
        {
          "transactionDecisionValue": {
            "order": {
              "finalOrder": {
                "cart": {
                  "notes": "Guest prefers their food to be hot when it is delivered.",
                  "merchant": {
                    "id": "https://www.exampleprovider.com/merchant/id1",
                    "name": "Cucina Venti"
                  },
                  "lineItems": [
                    {
                      "name": "Sizzling Prawns Dinner",
                      "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": "16",
                          "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
                          }
                        ]
                      }
                    }
                  ],
                  "extension": {
                    "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
                    "fulfillmentPreference": {
                      "fulfillmentInfo": {
                        "pickup": {
                          "pickupTimeIso8601": "P0M"
                        }
                      }
                    },
                    "contact": {
                      "displayName": "Lovefood Ordering",
                      "email": "ilovefood@example.com",
                      "phoneNumber": "+16501234567"
                    }
                  }
                },
                "otherItems": [
                  {
                    "name": "Service fee",
                    "type": "FEE",
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "3",
                        "nanos": 500000000
                      }
                    }
                  },
                  {
                    "name": "Tax",
                    "type": "TAX",
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "1",
                        "nanos": 370000000
                      }
                    }
                  },
                  {
                    "name": "Tip",
                    "type": "GRATUITY",
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "2",
                        "nanos": 590000000
                      }
                    }
                  }
                ],
                "totalPrice": {
                  "type": "ESTIMATE",
                  "amount": {
                    "currencyCode": "USD",
                    "units": "23",
                    "nanos": 710000000
                  }
                },
                "id": "sample_final_order_id",
                "extension": {
                  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
                  "availableFulfillmentOptions": [
                    {
                      "fulfillmentInfo": {
                        "pickup": {
                          "pickupTimeIso8601": "P0M"
                        }
                      },
                      "expiresAt": "2017-07-17T12:30:00Z"
                    }
                  ],
                  "optinForRemarketing": true
                }
              },
              "googleOrderId": "sample_google_order_id",
              "orderDate": "2017-07-17T12:00:00Z",
              "paymentInfo": {
                "displayName": "Visa\u2006****\u20061111",
                "googleProvidedPaymentInstrument": {
                  "instrumentToken": "abcd"
                },
                "paymentType": "PAYMENT_CARD"
              }
            }
          }
        }
      ]
    }
  ]
}

CheckoutRequestMessage

CheckoutRequestMessage هو AppRequest بهدف actions.foodordering.intent.CHECKOUT.

SubmitOrderRequestMessage

SubmitOrderRequestMessage هو AppRequest بهدف actions.foodordering.intent.TRANSACTION_DECISION.

المحادثة

يكون Conversation فريدًا لجلسة واحدة فقط. يمكنك استخدامها لربط إجراءات Checkout وSubmitOrder متعددة معًا إذا لزم الأمر.

يسرد الجدول التالي سمات النوع Conversation:

الموقع النوع الوصف
conversationId String

مطلوب.

المعرّف الفريد للمحادثة

يوضّح المثال التالي عنصر Conversation:

مثال

{
  "conversationId": "CQnJ7Z4i7UmvEZ9ph3AxyZRJ"
}

الإدخال

الوسيطات المتوقّعة لدفع رسوم سلة تسوّق.

يسرد الجدول التالي سمات النوع Input:

الموقع النوع الوصف
intent Enum [ "actions.foodordering.intent.CHECKOUT", "actions.intent.TRANSACTION_DECISION" ]

مطلوب.

اضبط القيمة على "actions.foodordering.intent.CHECKOUT" لرسالة طلب الدفع أو "actions.intent.TRANSACTION_DECISION" لرسالة طلب إرسال الطلب.

arguments قائمة<Argument>

مطلوب.

يحتوي على سلة التسوّق المطلوب الدفع من أجلها أو الطلب المطلوب تقديمه

يجب أن يتضمّن عنصرًا واحدًا بالضبط.

الوسيطة

يحتوي على تفاصيل عن أصناف الطعام التي يريد المستخدم الاطّلاع عليها. لا ينطبق سوى التوسيع على الدفع. بالنسبة إلى إرسال الطلب، لا يمكن استخدام سوى transactionDecisionValue.

يسرد الجدول التالي سمات النوع Argument:

الموقع النوع الوصف
يجب استخدام مجموعة واحدة بالضبط من المجموعات التالية من السمات.
extension المجموعة 1 Cart

تفاصيل الأطعمة التي يريد المستخدم الاطّلاع عليها

transactionDecisionValue المجموعة 2 TransactionDecisionValue

يحتوي على الطلب المطلوب تقديمه بالإضافة إلى تفاصيل الدفع.

ردّ بشأن توصيل الطلب

AppResponse

يسرد الجدول التالي سمات النوع AppResponse:

الموقع النوع الوصف
expectUserResponse Const

اضبطها على خطأ.

القيمة: False

finalResponse FinalResponse

مطلوب.

يحتوي على ردّك على عملية الدفع في سلة التسوّق.

يوضّح المثال التالي عنصر AppResponse:

مثال 1

{
  "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": {
                    "currencyCode": "USD",
                    "units": "36",
                    "nanos": 730000000
                  }
                },
                "extension": {
                  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
                  "availableFulfillmentOptions": [
                    {
                      "fulfillmentInfo": {
                        "delivery": {
                          "deliveryTimeIso8601": "P0M"
                        }
                      },
                      "expiresAt": "2017-07-17T12:30:00Z"
                    }
                  ]
                }
              },
              "paymentOptions": {
                "googleProvidedOptions": {
                  "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": {  \"merchantId\": \"Merchant ID\",  \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [  {    \"type\": \"CARD\",    \"parameters\": {      \"allowedAuthMethods\": [        \"PAN_ONLY\"      ],      \"allowedCardNetworks\": [        \"VISA\",        \"AMEX\",        \"MASTERCARD\"      ],      \"billingAddressRequired\": false    },    \"tokenizationSpecification\": {      \"type\": \"PAYMENT_GATEWAY\",      \"parameters\": {        \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\",        \"gateway\": \"stripe\",        \"stripe:version\": \"2019-05-16\"      }    }  }],\"transactionInfo\": {  \"currencyCode\": \"AUD\",  \"totalPriceStatus\": \"ESTIMATED\",  \"totalPrice\": \"1.0\"}}"
                }
              },
              "additionalPaymentOptions": [
                {
                  "actionProvidedOptions": {
                    "paymentType": "ON_FULFILLMENT",
                    "displayName": "Cash on delivery."
                  }
                }
              ]
            }
          }
        }
      ]
    }
  }
}

مثال 2

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "orderUpdate": {
              "actionOrderId": "sample_action_order_id",
              "orderState": {
                "state": "CONFIRMED",
                "label": "Provider confirmed"
              },
              "receipt": {
                "userVisibleOrderId": "userVisibleId1234"
              },
              "updateTime": "2017-07-17T12:00:00Z",
              "orderManagementActions": [
                {
                  "type": "CUSTOMER_SERVICE",
                  "button": {
                    "title": "Contact customer service",
                    "openUrlAction": {
                      "url": "mailto:support@example.com"
                    }
                  }
                },
                {
                  "type": "CUSTOMER_SERVICE",
                  "button": {
                    "title": "Call customer service",
                    "openUrlAction": {
                      "url": "tel:+18005554679"
                    }
                  }
                },
                {
                  "type": "EMAIL",
                  "button": {
                    "title": "Email restaurant",
                    "openUrlAction": {
                      "url": "mailto:person@example.com"
                    }
                  }
                },
                {
                  "type": "CALL_RESTAURANT",
                  "button": {
                    "title": "Call restaurant",
                    "openUrlAction": {
                      "url": "tel:+16505554679"
                    }
                  }
                }
              ],
              "infoExtension": {
                "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
                "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z"
              }
            }
          }
        }
      ]
    }
  }
}

مثال 3

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

مثال 4

{
  "expectUserResponse": false,
  "finalResponse": {
    "richResponse": {
      "items": [
        {
          "structuredResponse": {
            "checkoutResponse": {
              "proposedOrder": {
                "otherItems": [
                  {
                    "name": "Delivery Fees",
                    "subLines": [],
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "3",
                        "nanos": 500000000
                      }
                    },
                    "type": "DELIVERY"
                  },
                  {
                    "name": "Tax",
                    "subLines": [],
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "1",
                        "nanos": 370000000
                      }
                    },
                    "type": "TAX"
                  },
                  {
                    "name": "Promotion",
                    "subLines": [],
                    "price": {
                      "type": "ESTIMATE",
                      "amount": {
                        "currencyCode": "USD",
                        "units": "-5",
                        "nanos": 0
                      }
                    },
                    "id": "OWG_ACTIVE_CODE",
                    "type": "DISCOUNT"
                  }
                ],
                "cart": {
                  "merchant": {
                    "id": "https://www.exampleprovider.com/merchant/id1",
                    "name": "Falafel Bite"
                  },
                  "lineItems": [
                    {
                      "name": "Pita Chips",
                      "type": "REGULAR",
                      "id": "sample_item_offer_id_1",
                      "quantity": 1,
                      "price": {
                        "type": "ESTIMATE",
                        "amount": {
                          "currencyCode": "USD",
                          "units": "2",
                          "nanos": 750000000
                        }
                      },
                      "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1",
                      "extension": {
                        "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension"
                      }
                    }
                  ],
                  "promotions": [
                    {
                      "coupon": "OWG_ACTIVE_CODE"
                    }
                  ],
                  "extension": {
                    "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension",
                    "fulfillmentPreference": {
                      "fulfillmentInfo": {
                        "pickup": {
                          "pickupTimeIso8601": "P0M"
                        }
                      }
                    }
                  }
                },
                "totalPrice": {
                  "type": "ESTIMATE",
                  "amount": {
                    "currencyCode": "USD",
                    "units": "14",
                    "nanos": 860000000
                  }
                },
                "extension": {
                  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
                  "availableFulfillmentOptions": [
                    {
                      "fulfillmentInfo": {
                        "pickup": {
                          "pickupTimeIso8601": "P0M"
                        }
                      },
                      "expiresAt": "2018-04-10T01:20:08.471Z"
                    }
                  ]
                }
              },
              "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",
                    "VISA",
                    "JCB"
                  ],
                  "prepaidCardDisallowed": true,
                  "billingAddressRequired": true
                }
              }
            }
          }
        }
      ]
    }
  }
}

CheckoutResponseMessage

CheckoutResponseMessage هو AppResponse يحتوي على checkoutResponse أو error في StructuredResponse.

SubmitOrderResponseMessage

SubmitOrderResponseMessage هو AppResponse يحتوي على orderUpdate في StructuredResponse.

FinalResponse

ردّك على صفحة الدفع في سلة التسوّق أو SubmitOrderRequestMessage

يسرد الجدول التالي سمات النوع FinalResponse:

الموقع النوع الوصف
richResponse RichResponse

مطلوب.

يحتوي على ردّك على CheckoutRequestMessage أو SubmitOrderRequestMessage.

CheckoutResponse

يسرد الجدول التالي سمات النوع CheckoutResponse:

الموقع النوع الوصف
proposedOrder ProposedOrder

مطلوب.

الطلب المقترَح لاستخدامه في المعاملة.

paymentOptions PaymentOptions

مطلوب.

خيار الدفع التلقائي الذي تم اختياره للمستخدم

additionalPaymentOptions قائمة<PaymentOptions>

خيارات الدفع البديلة المتاحة للمستخدم

يوضّح المثال التالي عنصر 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": {
        "currencyCode": "USD",
        "units": "36",
        "nanos": 730000000
      }
    },
    "extension": {
      "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension",
      "availableFulfillmentOptions": [
        {
          "fulfillmentInfo": {
            "delivery": {
              "deliveryTimeIso8601": "P0M"
            }
          },
          "expiresAt": "2017-07-17T12:30:00Z"
        }
      ]
    }
  },
  "paymentOptions": {
    "googleProvidedOptions": {
      "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": {  \"merchantId\": \"Merchant ID\",  \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [  {    \"type\": \"CARD\",    \"parameters\": {      \"allowedAuthMethods\": [        \"PAN_ONLY\"      ],      \"allowedCardNetworks\": [        \"VISA\",        \"AMEX\",        \"MASTERCARD\"      ],      \"billingAddressRequired\": false    },    \"tokenizationSpecification\": {      \"type\": \"PAYMENT_GATEWAY\",      \"parameters\": {        \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\",        \"gateway\": \"stripe\",        \"stripe:version\": \"2019-05-16\"      }    }  }],\"transactionInfo\": {  \"currencyCode\": \"AUD\",  \"totalPriceStatus\": \"ESTIMATED\",  \"totalPrice\": \"1.0\"}}"
    }
  },
  "additionalPaymentOptions": [
    {
      "actionProvidedOptions": {
        "paymentType": "ON_FULFILLMENT",
        "displayName": "Cash on delivery."
      }
    }
  ]
}

المنتج/الخدمة

يحتوي على ردّك على عملية دفع في سلة التسوق أو رسالة SubmitOrderRequestMessage.

يسرد الجدول التالي سمات النوع Item:

الموقع النوع الوصف
structuredResponse StructuredResponse

مطلوب.

RichResponse

يحتوي على ردّك على عملية دفع في سلة التسوق.

يسرد الجدول التالي سمات النوع RichResponse:

الموقع النوع الوصف
items قائمة<Item>

مطلوب.

يجب أن يتضمّن عنصرًا واحدًا بالضبط.

StructuredResponse

بالنسبة إلى CheckoutResponseMessage، يمكن أن يكون هذا أحد الخيارَين التاليَين: CheckoutResponse يشير إلى إتمام عملية الدفع بنجاح. أو FoodErrorExtension: يشير إلى حدوث خطأ أثناء الدفع. يمكن أن يتضمّن الردّ ProposedOrder وPaymentOptions معدَّلَين أو رسالة خطأ بدون PaymentOptions. بالنسبة إلى SubmitOrderResponseMessage، لا ينطبق سوى orderUpdate.

يسرد الجدول التالي سمات النوع StructuredResponse:

الموقع النوع الوصف
يجب استخدام مجموعة واحدة بالضبط من المجموعات التالية من السمات.
checkoutResponse المجموعة 1 CheckoutResponse

السلع التي تمّ شراؤها بالإضافة إلى الضرائب والخصومات

error المجموعة 2 FoodErrorExtension

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

orderUpdate المجموعة 3 OrderUpdate

تعديلات الطلبات غير المتزامنة

يوضّح هذا القسم الأنواع العالية المستوى التي تشكّل الطلبات والنتائج لتفاعل نموذجي لطلب الطعام في إجراء مضمّن.

AsyncOrderUpdateRequestMessage

إشعار المستخدم بالتغييرات بعد إرسال الطلب وتأكيده على سبيل المثال، يمكنك إبلاغ المستخدم بأنّ الطلب قيد النقل أو إذا كان السعر قد تغيّر. لمزيد من المعلومات، اطلع على

يسرد الجدول التالي سمات النوع AsyncOrderUpdateRequestMessage:

الموقع النوع الوصف
isInSandbox صحيح/خطأ

يشير ذلك إلى أنّ الطلب الذي تم إرسال هذا التعديل له هو دفعة في وضع المحاكاة.

customPushMessage CustomPushMessage

مطلوب.

يحتوي على OrderUpdate للطلب.

يوضّح المثال التالي عنصر AsyncOrderUpdateRequestMessage:

مثال

{
  "isInSandbox": true,
  "customPushMessage": {
    "orderUpdate": {
      "actionOrderId": "sample_action_order_id",
      "orderState": {
        "state": "IN_TRANSIT",
        "label": "Order is on the way"
      },
      "inTransitInfo": {
        "updatedTime": "2017-07-17T12:00:00Z"
      },
      "updateTime": "2017-07-17T12:00:00Z",
      "receipt": {
        "userVisibleOrderId": "userVisibleId1234"
      },
      "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_RESTAURANT",
          "button": {
            "title": "Call restaurant",
            "openUrlAction": {
              "url": "tel:+16505554679"
            }
          }
        }
      ],
      "infoExtension": {
        "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
        "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z"
      }
    }
  }
}

AsyncOrderUpdateResponseMessage

بعد إرسال AsyncOrderUpdateRequestMessage بنجاح، تردّ Google بحالة HTTP 200 ونص فارغ. إذا تعذّر إجراء التعديل، ستردّد Google ردًا يتضمّن تفاصيل عن سبب تعذّر تعديل الطلب.

أنواع تعديلات الطلبات

زرّ

تحدِّد عنصر واجهة مستخدِم يمكنك إضافته لتوفير تفاعل المستخدِم.

يسرد الجدول التالي سمات النوع Button:

الموقع النوع الوصف
title String

مطلوب.

التصنيف المعروض استخدِم حالة أحرف الجملة مع 30 حرفًا أو أقل لضمان العرض الصحيح.

مثلاً: Contact us

openUrlAction OpenUrlAction

مطلوب.

يوضّح المثال التالي عنصر Button:

مثال

{
  "title": "Send us feedback",
  "openUrlAction": {
    "url": "mailto:person@example.com"
  }
}

CancellationInfo

يسرد الجدول التالي سمات النوع CancellationInfo:

الموقع النوع الوصف
reason String

مطلوب.

سبب الرفض القابل للعرض عندما يكون OrderState.state‏ = "CANCELLED"

مثلاً: Restaurant closed

يوضّح المثال التالي عنصر CancellationInfo:

مثال

{
  "reason": "Insufficient inventory"
}

FoodOrderUpdateExtension

يقدّم هذا النوع للمستخدم فترة زمنية مقدَّرة لوقت تسليم الطلب أو وقت استعداده للاستلام. أرسِل هذه الإضافة في OrderUpdate عندما تكون المعلومات متاحة أو تغيّرت منذ آخر مرة تم إرسالها فيها.

قدِّم تقديرًا متحفظًا للفاصل الزمني للتسليم حتى يتم تلبية توقعات المستخدِم باستمرار. على سبيل المثال، إذا كان من المتوقّع أن يتم تسليم الطلب اليوم في الساعة 13:00، يجب إرسال فاصل زمني مقدَّر يتوافق مع الاختلافات الناتجة عن ظروف حركة المرور، مثل اليوم من الساعة 12:45 إلى الساعة 13:15.

يتم تفسير المدة أو الطابع الزمني بتنسيق ISO 8601 على أنّه الفاصل الزمني من updateTime من OrderUpdate (أي "الآن") إلى updateTime بالإضافة إلى duration. لا تستخدِم هذا التنسيق ما لم تكن "الآن" توقّعًا معقولاً.

يتم تفسير فاصل ISO 8601 على أنّه الفاصل من البداية إلى نهاية الفاصل.

يسرد الجدول التالي سمات النوع FoodOrderUpdateExtension:

الموقع النوع الوصف
@type Const

نوع هذه الإضافة. يتم دائمًا ضبط هذا الحقل على "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension".

القيمة: type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension

estimatedFulfillmentTimeIso8601 String

الوقت المقدَّر الذي سيتم فيه تسليم الطلب أو يصبح فيه جاهزًا للاستلام يجب أن تكون السلسلة بتنسيق ISO 8601 وأن تتطابق مع فاصل زمني بدلاً من وقت ثابت واحد. وتشمل الاصطلاحات المقبولة: الفواصل الزمنية والمدد والتواريخ/الأوقات. يمكن إرسال هذا الحقل في رسالة SubmitOrderResponseMessage أو AsyncOrderUpdateRequestMessage عندما تصبح المعلومات متاحة أو يحدث تغيير، مثل الوصول مبكرًا أو متأخرًا.

مثلاً: 2017-07-17T13:00:00Z/2017-07-17T13:30:00Z

foodOrderErrors قائمة<FoodOrderError>

يصف الأخطاء التي حدثت بعد الطلب. يُنصح بخطأ واحد لكل سلة تسوّق أو لكل سلعة. استخدِم FoodOrderUpdateExtension.FoodOrderErrors لأي أخطاء لا تغطيها RejectionInfo.

يجب أن يتضمّن عنصرًا واحدًا على الأقل.

يوضّح المثال التالي عنصر FoodOrderUpdateExtension:

مثال 1

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
  "estimatedFulfillmentTimeIso8601": "2017-07-17T13:00:00Z/2017-07-17T13:30:00Z"
}

مثال 2

{
  "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension",
  "foodOrderErrors": [
    {
      "error": "NO_CAPACITY",
      "description": "Sorry, the restaurant cannot take your order right now."
    }
  ]
}

FulfillmentInfo

يسرد الجدول التالي سمات النوع FulfillmentInfo:

الموقع النوع الوصف
يجب استخدام مجموعة واحدة بالضبط من المجموعات التالية من السمات.
deliveryTime المجموعة 1 الطابع الزمني وفقًا لمعيار ISO

استخدام estimatedFulfillmentTimeIso8601 في رسالة FoodOrderingUpdateExtension

pickupTime المجموعة 2 الطابع الزمني وفقًا لمعيار ISO

استخدام estimatedFulfillmentTimeIso8601 في رسالة FoodOrderingUpdateExtension

يوضّح المثال التالي عنصر FulfillmentInfo:

مثال 1

{
  "deliveryTime": "2017-05-10T02:36:38.803Z"
}

مثال 2

{
  "pickupTime": "2019-12-26T07:24:27.803Z"
}

InTransitInfo

يسرد الجدول التالي سمات النوع InTransitInfo:

الموقع النوع الوصف
updatedTime الطابع الزمني وفقًا لمعيار ISO

استخدام estimatedFulfillmentTimeIso8601 في رسالة FoodOrderingUpdateExtension

يوضّح المثال التالي عنصر InTransitInfo:

مثال

{
  "updatedTime": "2017-05-10T02:36:38.803Z"
}

LineItemUpdate

يسرد الجدول التالي سمات النوع LineItemUpdate:

الموقع النوع الوصف
orderState OrderState
price Price
reason String

سبب التغيير مطلوبة لتغييرات الأسعار.

يوضّح المثال التالي عنصر LineItemUpdate:

مثال

{
  "orderState": {
    "state": "CONFIRMED",
    "label": "Provider confirmed"
  },
  "price": {
    "type": "ESTIMATE",
    "amount": {
      "currencyCode": "USD",
      "units": "5",
      "nanos": 500000000
    }
  },
  "reason": "Menu updated prices."
}

OpenUrlAction

يسرد الجدول التالي سمات النوع OpenUrlAction:

الموقع النوع الوصف
url String

مطلوب.

الإجراء الذي يتم تشغيله من خلال النقر على الزر أو لمسه تعتمد قائمة البادئات السارية على orderManagementActionType. "EMAIL": يجب أن تكون البادئة "mailto". "CALL": يجب أن تكون البادئة "tel". "CUSTOMER_SERVICE": يجب أن تكون البادئة "mailto" أو "tel" أو "http" أو "https".

مثلاً: https://www.google.com

OrderManagementAction

تتيح إدارة الطلبات للمستخدمين الحصول على دعم بعد تقديم الطلب، ويجب إرسالها في كل OrderUpdate ضمن إرسال طلب العميل AppResponse وكل AsyncOrderUpdateRequestMessage إجراء لاحق لإدارة الطلبات المُرسَل لطلب معيّن يمكن أن يختلف استنادًا إلى الحالة.

على سبيل المثال، في الحالة "تم الإنشاء"، قد يشير CUSTOMER_SERVICE إلى رقم هاتف فريق دعم العملاء. بعد ذلك، في الحالة "تم التأكيد"، يمكن تغيير CUSTOMER_SERVICE إلى رقم هاتف المطعم إذا أصبح ذلك أفضل جهة اتصال للعميل. وبالمثل، بعد أن يصبح الطلب في الحالة "تم تسليمه"، يُمكن لفريق CUSTOMER_SERVICE الرجوع إلى عنوان بريدك الإلكتروني المخصّص للدعم.

يسرد الجدول التالي سمات النوع OrderManagementAction:

الموقع النوع الوصف
type OrderManagementActionType

مطلوب.

button Button

مطلوب.

يوضّح المثال التالي عنصر OrderManagementAction:

مثال 1

{
  "type": "CUSTOMER_SERVICE",
  "button": {
    "title": "Contact customer service",
    "openUrlAction": {
      "url": "mailto:support@example.com"
    }
  }
}

مثال 2

{
  "type": "EMAIL",
  "button": {
    "title": "Email restaurant",
    "openUrlAction": {
      "url": "mailto:person@example.com"
    }
  }
}

OrderManagementActionType

تحدِّد الأنواع ذات الصلة OrderManagementAction.

يحتوي نوع OrderManagementActionType على القيم المحتملة التالية:

  • CUSTOMER_SERVICE: البريد الإلكتروني و/أو رقم الهاتف المخصّصَين لخدمة العملاء والمراد عرضهما في صفحة تأكيد الطلب هذا الإجراء مطلوب. يجب أن تكون بادئة openUrlAction.url هي "mailto" أو "tel" أو "http" أو "https".
  • EMAIL: يجب أن يظهر الإجراء المتعلق بالبريد الإلكتروني في صفحة تفاصيل الطلب فقط، ويجب أن تكون البادئة openUrlAction.url هي mailto.
  • CALL_DRIVER: يجب أن يظهر إجراء الاتصال في صفحة تفاصيل الطلب فقط. يجب أن تكون البادئة openUrlAction.url هي "tel".
  • CALL_RESTAURANT: يجب أن يظهر إجراء الاتصال في صفحة تفاصيل الطلب فقط. يجب أن تكون البادئة openUrlAction.url هي "tel".

OrderState

الحالة الحالية للطلب تتوافق كل قيمة state من OrderState أيضًا مع حالة شراء على myaccount.google.com.

يسرد الجدول التالي سمات النوع OrderState:

الموقع النوع الوصف
state OrderStateEnum

مطلوب.

label String

مطلوب.

سلسلة العرض الظاهرة للمستخدم للحالة استخدِم حالة أحرف الجملة.

مثلاً: Your order has been received

يوضّح المثال التالي عنصر OrderState:

مثال

{
  "state": "CONFIRMED",
  "label": "Provider confirmed"
}

OrderStateEnum

تحدِّد الأنواع ذات الصلة OrderState.

يحتوي نوع OrderStateEnum على القيم المحتملة التالية:

  • CREATED: تم إنشاء الطلب من قِبل جهة الدمج، في انتظار تأكيد مقدّم الخدمة. تتوافق مع حالة الشراء "تم الطلب".
  • CONFIRMED: أكّد مقدّم الخدمة الطلب وهو نشط. تتوافق مع حالة الشراء "مقبول".
  • REJECTED: رفض الطلب من قِبل الجهة المُدمجة أو مقدّم الخدمة تتوافق مع حالة الشراء "مرفوض".
  • CANCELLED: ألغى المستخدم الطلب. تتوافق مع حالة الشراء "ملغى".
  • IN_PREPARATION: جارٍ تحضير الطعام. تتوافق مع حالة الشراء "الحالة غير معروفة".
  • READY_FOR_PICKUP: الطعام جاهز للاستلام. تتوافق مع حالة الشراء "جاهز للاستلام".
  • IN_TRANSIT: يتم تسليم الطلب. تتوافق مع حالة الشراء "قيد المعالجة".
  • FULFILLED: استلم المستخدم ما طلبه. تتوافق مع حالة الشراء "تم استلام الطلب".

الوصل

أرسِل هذا النوع في طلب إرسال AppResponse، حيث يكون OrderState هو "CONFIRMED" أو "FULFILLED" أو "IN_TRANSIT". أرسِل الإيصال في الوقت الذي يصبح فيه userVisibleOrderId متاحًا. لست بحاجة إلى مواصلة إرسال الإيصال في التحديثات اللاحقة.

يسرد الجدول التالي سمات النوع Receipt:

الموقع النوع الوصف
userVisibleOrderId String

مطلوب.

مطلوبة إذا كانت حالة الطلب "تم التأكيد" أو "قيد النقل" أو "تم تسليمه". هذا الحقل هو المعرّف الوحيد الموجَّه للمستخدم لهذا الطلب (عادةً ما يكون معرّف طلب المطعم)، ويتم عرضه في إيصال المُدمِج وبطاقة طلب Google. يجب أن يتمكّن المستخدم من استخدام هذا المعرّف للإشارة إلى طلبه لخدمة العملاء مع مقدّم الخدمة والمُدمِج. ما عليك سوى تقديم هذا المعرّف مرّة واحدة فقط في أي OrderUpdate معيّن. إلى أن يتم تقديمه، يكون actionOrderId هو userVisibleOrderId. على سبيل المثال، قد لا يتوفّر لديك userVisibleOrderId إلى أن يؤكّد المطعم الطلب. بعد التأكيد، عليك إرسال AsyncOrderUpdateRequestMessage مع OrderUpdate وإيصال.

يوضّح المثال التالي عنصر Receipt:

مثال

{
  "userVisibleOrderId": "userVisibleId1234"
}

RejectionInfo

يسرد الجدول التالي سمات النوع RejectionInfo:

الموقع النوع الوصف
type RejectionType

مطلوب.

reason String

سبب الرفض المستخدَم في التسجيل الداخلي لا يظهر هذا الحقل للمستخدمين.

يوضّح المثال التالي عنصر RejectionInfo:

مثال

{
  "type": "PAYMENT_DECLINED",
  "reason": "There is an issue with payment processing."
}

RejectionType

يحتوي نوع RejectionType على القيم المحتملة التالية:

  • INELIGIBLE: المستخدم غير مؤهَّل بسبب مخاوف متعلّقة بالسياسة أو المخاطر.
  • PAYMENT_DECLINED: حدثت مشكلة في معالجة الدفع.
  • UNAVAILABLE_SLOT: لا يمكن تنفيذ الطلب في الوقت المحدَّد للطلب المُسبَق الذي حدَّدته DeliveryInfo أو PickupInfo.
  • PROMO_NOT_APPLICABLE: هناك مشكلة في العرض الترويجي.
  • UNKNOWN: أي سبب آخر

الأنواع ذات الصلة بالدفع

يوضّح هذا القسم الأنواع ذات الصلة بالدفع المستخدَمة لطلب الطعام وتسليمه.

ActionProvidedPaymentOptions

متطلبات طريقة الدفع المقدَّمة من خلال إجراء

يسرد الجدول التالي سمات النوع ActionProvidedPaymentOptions:

الموقع النوع الوصف
paymentType PaymentType

مطلوب.

displayName String

مطلوب.

اسم طريقة الدفع المعروضة في الإيصال

مثلاً: Taco Points Total

onFulfillmentPaymentData OnFulfillmentPaymentData

بيانات إضافية لـ paymentType‏ "ON_FULFILLMENT" على سبيل المثال، يمكنك استخدام هذا الحقل لتحديد ما إذا كان الدفع نقدًا أو بالبطاقة متاحًا عند التسليم.

يوضّح المثال التالي عنصر ActionProvidedPaymentOptions:

مثال

{
  "paymentType": "ON_FULFILLMENT",
  "displayName": "Pay when you get your food.",
  "onFulfillmentPaymentData": {
    "supportedPaymentOptions": [
      "Cash",
      "Card"
    ]
  }
}

AllowedAuthMethods

يحتوي نوع AllowedAuthMethods على القيم المحتملة التالية:

  • PAN_ONLY: طريقة المصادقة المرتبطة ببطاقات الدفع المخزّنة في ملف مرتبط بحساب المستخدم على Google. تتضمّن بيانات الدفع المُسترَدة رقم الحساب الشخصي (PAN) مع شهر انتهاء الصلاحية وسنة انتهاء الصلاحية.

AllowedCardNetworks

يحتوي نوع AllowedCardNetworks على القيم المحتملة التالية:

  • AMEX
  • DISCOVER
  • INTERAC
  • JCB
  • MASTERCARD
  • VISA

BillingAddressParameters

يتيح لك هذا العنصر ضبط حقول إضافية ليتم عرضها لعنوان الفوترة المطلوب.

يسرد الجدول التالي سمات النوع BillingAddressParameters:

الموقع النوع الوصف
format String

يجب إدخال تنسيق عنوان إرسال الفواتير لإكمال المعاملة. MIN: الاسم ورمز البلد والرمز البريدي كامل: الاسم وعنوان الشارع والموقع الجغرافي والمنطقة ورقم تعريف البلد والرمز البريدي

يوضّح المثال التالي عنصر BillingAddressParameters:

مثال 1

{
  "format": "MIN"
}

مثال 2

{
  "format": "FULL"
}

CardParameters

استخدِم هذا العنصر لضبط إعدادات موقعك الإلكتروني للتوافق مع Google Pay API.

يسرد الجدول التالي سمات النوع CardParameters:

الموقع النوع الوصف
allowedAuthMethods List<Const>

مطلوب.

الحقول المتوافقة للمصادقة على معاملة بطاقة

يجب أن يتضمّن عنصرًا واحدًا على الأقل.

allowedCardNetworks قائمة<AllowedCardNetworks>

مطلوب.

شبكة بطاقات واحدة أو أكثر تتيحها أنت وتتوافق أيضًا مع Google Pay API

يجب أن يتضمّن عنصرًا واحدًا على الأقل.

billingAddressRequired صحيح/خطأ

اضبطها على true إذا كنت بحاجة إلى عنوان إرسال الفواتير. لا تطلب عنوان إرسال الفواتير إلا إذا كان ذلك مطلوبًا لمعالجة المعاملة. يمكن أن تزيد طلبات البيانات الإضافية من الصعوبات في عملية الدفع وتؤدي إلى انخفاض معدّلات الإحالات الناجحة.

billingAddressParameters BillingAddressParameters

الحقول المتوقّعة التي يتم عرضها إذا تم ضبط billingAddressRequired على true

cvcRequired صحيح/خطأ

اضبط القيمة على true في حال استخدام TimesofMoney، واضبطها على false لجميع معالجات الدفع الأخرى.

يوضّح المثال التالي عنصر CardParameters:

مثال 1

{
  "allowedAuthMethods": [
    "PAN_ONLY"
  ],
  "allowedCardNetworks": [
    "AMEX",
    "DISCOVER"
  ],
  "billingAddressRequired": false,
  "cvcRequired": false
}

مثال 2

{
  "allowedAuthMethods": [
    "PAN_ONLY"
  ],
  "allowedCardNetworks": [
    "AMEX",
    "DISCOVER"
  ],
  "billingAddressRequired": true,
  "billingAddressParameters": {
    "format": "MIN"
  },
  "cvcRequired": false
}

GoogleProvidedPaymentInstrument

يسرد الجدول التالي سمات النوع GoogleProvidedPaymentInstrument:

الموقع النوع الوصف
instrumentToken String

مطلوب.

سلسلة مشفّرة بترميز Base64 تحتوي على رمز الدفع لشحن رسوم من المستخدم من خلال جهة معالجة مشاركة في Google Pay، وفقًا لخيارات GoogleProvidedPaymentOptions المحدّدة سابقًا.

billingAddress PostalAddress

عنوان إرسال الفواتير للدفع

يوضّح المثال التالي عنصر GoogleProvidedPaymentInstrument:

مثال

{
  "instrumentToken": "abcd",
  "billingAddress": {
    "regionCode": "US",
    "postalCode": "94043",
    "administrativeArea": "CA",
    "locality": "Mountain View",
    "addressLines": [
      "1350 Charleston Road"
    ]
  }
}

GoogleProvidedPaymentOptions

متطلبات طريقة الدفع التي تقدّمها Google

يسرد الجدول التالي سمات النوع GoogleProvidedPaymentOptions:

الموقع النوع الوصف
facilitationSpecification String

ملف JSON بتنسيق PaymentDataRequest كسلسلة استخدِم هذا العنصر لضبط إعدادات موقعك الإلكتروني للتوافق مع Google Pay API.

supportedCardNetworks قائمة<SupportedCardNetworks>

استخدِم facilitationSpecification بدلاً من ذلك. نوع شبكات البطاقات المتوافقة مع موظّف الدعم

تم إيقاف هذا الحقل نهائيًا.

prepaidCardDisallowed صحيح/خطأ

استخدِم facilitationSpecification بدلاً من ذلك. ما إذا كان يُسمح باستخدام بطاقة مسبقة الدفع كنوع من أنواع الدفع

تم إيقاف هذا الحقل نهائيًا.

billingAddressRequired صحيح/خطأ

استخدِم facilitationSpecification بدلاً من ذلك. ما إذا كان عنوان إرسال الفواتير مطلوبًا أم لا

تم إيقاف هذا الحقل نهائيًا.

tokenizationParameters TokenizationParameters

تم إيقاف هذا الحقل نهائيًا.

يوضّح المثال التالي عنصر GoogleProvidedPaymentOptions:

مثال 1

{
  "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": {  \"merchantId\": \"Merchant ID\",  \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [  {    \"type\": \"CARD\",    \"parameters\": {      \"allowedAuthMethods\": [        \"PAN_ONLY\"      ],      \"allowedCardNetworks\": [        \"VISA\",        \"AMEX\",        \"MASTERCARD\"      ],      \"billingAddressRequired\": false    },    \"tokenizationSpecification\": {      \"type\": \"PAYMENT_GATEWAY\",      \"parameters\": {        \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\",        \"gateway\": \"stripe\",        \"stripe:version\": \"2019-05-16\"      }    }  }],\"transactionInfo\": {  \"currencyCode\": \"AUD\",  \"totalPriceStatus\": \"ESTIMATED\",  \"totalPrice\": \"1.0\"}}"
}

مثال 2

{
  "tokenizationParameters": {
    "tokenizationType": "PAYMENT_GATEWAY",
    "parameters": {
      "gateway": "braintree",
      "braintree:apiVersion": "v1",
      "braintree:sdkVersion": "1.4.0",
      "braintree:merchantId": "a1b2c3d4e5",
      "braintree:clientKey": "production_braintree_client_key",
      "braintree:authorizationFingerprint": "same_as_client_key"
    }
  },
  "supportedCardNetworks": [
    "AMEX",
    "DISCOVER",
    "MASTERCARD",
    "JCB",
    "VISA"
  ],
  "prepaidCardDisallowed": true
}

مثال 3

{
  "tokenizationParameters": {
    "tokenizationType": "PAYMENT_GATEWAY",
    "parameters": {
      "gateway": "stripe",
      "stripe:publishableKey": "pk_live_stripe_client_key",
      "stripe:version": "2017-04-06"
    }
  },
  "supportedCardNetworks": [
    "AMEX",
    "DISCOVER",
    "MASTERCARD",
    "VISA",
    "JCB"
  ],
  "prepaidCardDisallowed": true,
  "billingAddressRequired": true
}

MerchantInfo

استخدِم هذا العنصر لضبط إعدادات موقعك الإلكتروني للتوافق مع Google Pay API.

يسرد الجدول التالي سمات النوع MerchantInfo:

الموقع النوع الوصف
merchantId String

معرّف التاجر في Google الذي أصدرته لك خدمة Google Pay

merchantName String

مطلوب.

اسم التاجر بترميز UTF-8 يتم عرض اسم التاجر في جدول الدفع.

OnFulfillmentPaymentData

استخدِم هذا العنصر لإرسال بيانات إضافية لسمة PaymentType‏ "ON_FULFILLMENT".

يسرد الجدول التالي سمات النوع OnFulfillmentPaymentData:

الموقع النوع الوصف
supportedPaymentOptions قائمة<PaymentOptionsEnums>

قائمة خيارات الدفع المتاحة للمستخدم في وقت تسليم الطلب

يوضّح المثال التالي عنصر OnFulfillmentPaymentData:

مثال

{
  "supportedPaymentOptions": [
    "Cash",
    "Card"
  ]
}

المعلمات

تحدِّد الأنواع ذات الصلة TokenizationParameters.

يسرد الجدول التالي سمات النوع Parameters:

الموقع النوع الوصف
gateway String

مطلوب.

مثلاً: braintree

gatewayMerchantId String
[additionalKey: string] String أزواج مفتاح/قيمة إضافية

يوضّح المثال التالي عنصر Parameters:

مثال 1

{
  "gatewayMerchantId": "90412491",
  "gateway": "olo"
}

مثال 2

{
  "gateway": "braintree",
  "braintree:apiVersion": "v1",
  "braintree:sdkVersion": "1.4.0",
  "braintree:merchantId": "YOUR_MERCHANT_ID",
  "braintree:clientKey": "YOUR_BRAINTREE_SANDVOX_OR_PRODUCTION_KEY"
}

PaymentDataRequest

استخدِم هذا العنصر لضبط إعدادات موقعك الإلكتروني للتوافق مع Google Pay API.

يسرد الجدول التالي سمات النوع PaymentDataRequest:

الموقع النوع الوصف
apiVersion Const

مطلوب.

رقم الإصدار الرئيسي لواجهة برمجة التطبيقات

القيمة: 2

apiVersionMinor Const

مطلوب.

الإصدار الثانوي لواجهة برمجة التطبيقات

القيمة: 0

merchantInfo MerchantInfo

مطلوب.

(معرّف التاجر في Google Pay) معلومات عن التاجر الذي يطلب بيانات الدفع

allowedPaymentMethods قائمة<PaymentMethod>

مطلوب.

تُحدِّد هذه السمة توفُّر طريقة دفع واحدة أو أكثر متوافقة مع Google Pay API.

transactionInfo TransactionInfo

مطلوب.

تفاصيل عن تفويض المعاملة استنادًا إلى ما إذا كان المستخدم يوافق على المعاملة أم لا يتضمّن هذا الحقل السعر الإجمالي وحالة السعر.

يوضّح المثال التالي عنصر PaymentDataRequest:

مثال

{
  "apiVersion": 2,
  "apiVersionMinor": 0,
  "merchantInfo": {
    "merchantId": "10391231",
    "merchantName": "Burrito Town"
  },
  "allowedPaymentMethods": [
    {
      "type": "CARD",
      "parameters": {
        "allowedAuthMethods": [
          "PAN_ONLY"
        ],
        "allowedCardNetworks": [
          "VISA",
          "AMEX",
          "MASTERCARD"
        ],
        "billingAddressRequired": true,
        "billingAddressParameters": {
          "format": "FULL"
        },
        "cvcRequired": false
      },
      "tokenizationSpecification": {
        "type": "PAYMENT_GATEWAY",
        "parameters": {
          "gateway": "stripe",
          "stripe:version": "2019-05-16",
          "stripe:publishableKey": "pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA"
        }
      }
    }
  ],
  "transactionInfo": {
    "currencyCode": "INR",
    "totalPriceStatus": "ESTIMATED",
    "totalPrice": "185.00"
  }
}

PaymentInfo

معلومات متعلقة بالدفع لطلب معيّن

يسرد الجدول التالي سمات النوع PaymentInfo:

الموقع النوع الوصف
displayName String

مطلوب.

اسم طريقة الدفع الذي يظهر للمستخدم ليتم عرضه على الإيصال

paymentType PaymentType

مطلوب.

googleProvidedPaymentInstrument GoogleProvidedPaymentInstrument

الرمز المميّز الذي يمكن أن يستخدمه الإجراء لا تحدِّد هذا الخيار إلا إذا حدّدت GoogleProvidedPaymentOptions كخيار دفع في CheckoutResponseMessage.

يوضّح المثال التالي عنصر PaymentInfo:

مثال 1

{
  "displayName": "Visa\u2006****\u20061111",
  "googleProvidedPaymentInstrument": {
    "instrumentToken": "abcd"
  },
  "paymentType": "PAYMENT_CARD"
}

مثال 2

{
  "displayName": "Visa\u2006****\u20061111",
  "googleProvidedPaymentInstrument": {
    "instrumentToken": "abcd",
    "billingAddress": {
      "regionCode": "US",
      "postalCode": "94043",
      "administrativeArea": "CA",
      "locality": "Mountain View",
      "addressLines": [
        "123 Random Street",
        "Unit ABC"
      ],
      "recipients": [
        "sample_receipient"
      ]
    }
  },
  "paymentType": "PAYMENT_CARD"
}

PaymentMethod

استخدِم هذا العنصر لضبط إعدادات موقعك الإلكتروني للتوافق مع Google Pay API.

يسرد الجدول التالي سمات النوع PaymentMethod:

الموقع النوع الوصف
type Const

مطلوب.

معرّف قصير لطريقة الدفع المتوافقة لا تتوفّر حاليًا سوى بطاقات الائتمان.

القيمة: CARD

parameters CardParameters

مطلوب.

المَعلمات المطلوبة لضبط نوع طريقة الدفع المقدَّمة

tokenizationSpecification TokenizationSpecification

مطلوب.

عليك إعداد حساب أو مقدّم خدمة فك التشفير لتلقّي معلومات الدفع. يجب استخدام هذه السمة لطريقة الدفع CARD.

يوضّح المثال التالي عنصر PaymentMethod:

مثال

{
  "type": "CARD",
  "parameters": {
    "allowedAuthMethods": [
      "PAN_ONLY"
    ],
    "allowedCardNetworks": [
      "VISA",
      "AMEX",
      "MASTERCARD"
    ],
    "billingAddressRequired": false
  },
  "tokenizationSpecification": {
    "type": "PAYMENT_GATEWAY",
    "parameters": {
      "gatewayMerchantId": "90412491",
      "gateway": "olo"
    }
  }
}

PaymentOptions

يسرد الجدول التالي سمات النوع PaymentOptions:

الموقع النوع الوصف
يجب استخدام مجموعة واحدة بالضبط من المجموعات التالية من السمات.
googleProvidedOptions المجموعة 1 GoogleProvidedPaymentOptions

متعارض مع actionProvidedOptions. استخدِم هذا الرمز للدفع على الإنترنت باستخدام gPay.

actionProvidedOptions المجموعة 2 ActionProvidedPaymentOptions

سمة متعارضة مع googleProvidedOptions. استخدِم هذا الخيار لميزة "الدفع نقدًا عند الاستلام" أو "الدفع عند التسليم".

يوضّح المثال التالي عنصر PaymentOptions:

مثال 1

{
  "googleProvidedOptions": {
    "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": {  \"merchantId\": \"Merchant ID\",  \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [  {    \"type\": \"CARD\",    \"parameters\": {      \"allowedAuthMethods\": [        \"PAN_ONLY\"      ],      \"allowedCardNetworks\": [        \"VISA\",        \"AMEX\",        \"MASTERCARD\"      ],      \"billingAddressRequired\": false    },    \"tokenizationSpecification\": {      \"type\": \"PAYMENT_GATEWAY\",      \"parameters\": {        \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\",        \"gateway\": \"stripe\",        \"stripe:version\": \"2019-05-16\"      }    }  }],\"transactionInfo\": {  \"currencyCode\": \"AUD\",  \"totalPriceStatus\": \"ESTIMATED\",  \"totalPrice\": \"1.0\"}}"
  }
}

مثال 2

{
  "googleProvidedOptions": {
    "facilitationSpecification": "{\"apiVersion\": 2,\"apiVersionMinor\": 0,\"merchantInfo\": {  \"merchantId\": \"Merchant ID\",  \"merchantName\": \"Merchant Name\"},\"allowedPaymentMethods\": [  {    \"type\": \"CARD\",    \"parameters\": {      \"allowedAuthMethods\": [        \"PAN_ONLY\"      ],      \"allowedCardNetworks\": [        \"VISA\",        \"AMEX\",        \"MASTERCARD\"      ],      \"billingAddressRequired\":true,   \"billingAddressParameters\": {  \"format\":\"MIN\"  }    },    \"tokenizationSpecification\": {      \"type\": \"PAYMENT_GATEWAY\",      \"parameters\": {        \"stripe:publishableKey\": \"pk_test_OoPcJNnxI1rDXhBq8BiXO2wz00s1Xc92dA\",        \"gateway\": \"stripe\",        \"stripe:version\": \"2019-05-16\"      }    }  }],\"transactionInfo\": {  \"currencyCode\": \"AUD\",  \"totalPriceStatus\": \"ESTIMATED\",  \"totalPrice\": \"1.0\"}}"
  }
}

مثال 3

{
  "actionProvidedOptions": {
    "paymentType": "ON_FULFILLMENT",
    "displayName": "Pay when you get your food.",
    "onFulfillmentPaymentData": {
      "supportedPaymentOptions": [
        "Cash",
        "Card"
      ]
    }
  }
}

PaymentOptionsEnums

يحتوي نوع PaymentOptionsEnums على القيم المحتملة التالية:

  • Cash
  • Card
  • UPI
  • Paytm

PaymentType

يحتوي نوع PaymentType على القيم المحتملة التالية:

  • PAYMENT_CARD: لعنصر GoogleProvidedPaymentOptions
  • ON_FULFILLMENT: لعنصر ActionProvidedPaymentOptions.

SupportedCardNetworks

تحدِّد الأنواع ذات الصلة GoogleProvidedPaymentOptions.

يحتوي نوع SupportedCardNetworks على القيم المحتملة التالية:

  • UNSPECIFIED_CARD_NETWORK
  • AMEX
  • DISCOVER
  • JCB
  • MASTERCARD
  • VISA

TokenizationParameters

يحدِّد الأنواع ذات الصلة GoogleProvidedPaymentOptions.

يسرد الجدول التالي سمات النوع TokenizationParameters:

الموقع النوع الوصف
tokenizationType Enum [ "UNSPECIFIED_TOKENIZATION_TYPE", "PAYMENT_GATEWAY" ]

مطلوب.

استخدِم facilitationSpecification بدلاً من ذلك. نوع الرموز المقبولة

parameters Parameters

استخدِم facilitationSpecification بدلاً من ذلك.

TokenizationSpecification

يتيح لك هذا العنصر ضبط حساب لتلقّي معلومات دفعات قابلة للفوترة.

يسرد الجدول التالي سمات النوع TokenizationSpecification:

الموقع النوع الوصف
type Const

مطلوب.

parameters Parameters

مطلوب.

يوضّح المثال التالي عنصر TokenizationSpecification:

مثال 1

{
  "type": "PAYMENT_GATEWAY",
  "parameters": {
    "gatewayMerchantId": "1247192",
    "gateway": "cybersource"
  }
}

مثال 2

{
  "type": "PAYMENT_GATEWAY",
  "parameters": {
    "gateway": "stripe",
    "stripe:version": "2018-10-31",
    "stripe:publishableKey": "12378127"
  }
}

TransactionInfo

يصف هذا العنصر معاملة تحدّد قدرة المدفوع عنه على الدفع. ويُستخدَم لعرض مربّع حوار تفويض الدفع.

يسرد الجدول التالي سمات النوع TransactionInfo:

الموقع النوع الوصف
currencyCode String

مطلوب.

رمز العملة الأبجدي وفقًا لمعيار ISO 4217

transactionId String

معرّف فريد يحدّد محاولة إجراء معاملة. يمكن للتجّار استخدام مستند تعريف حالي أو إنشاء مستند تعريف محدّد لمحاولات إجراء معاملات Google Pay. هذا الحقل مطلوب عند إرسال عمليات استدعاء إلى Google Transaction Events API.

totalPriceStatus Const

مطلوب.

استخدِم "ESTIMATED" كقيمة تلقائية. قد يتم تعديل السعر الإجمالي استنادًا إلى تفاصيل الردّ، مثل ضريبة المبيعات التي يتم تحصيلها استنادًا إلى عنوان إرسال الفواتير.

القيمة: ESTIMATED

totalPrice String

مطلوب.

إجمالي القيمة النقدية للمعاملة مع دقة اختيارية للموضعَين العشريَين يجب أن يتضمّن هذا الحقل القيمة نفسها التي يتضمّنها cart.totalPrice.

يوضّح المثال التالي عنصر TransactionInfo:

مثال

{
  "totalPriceStatus": "ESTIMATED",
  "totalPrice": "12.34",
  "currencyCode": "USD"
}