مخطط إجراءات التنفيذ

تصف هذه الصفحة الحمولة البرمجية لخدمة الويب الخاصة بتنفيذ الطلبات (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

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

مثلاً: 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 على تحديد السلعة بالترتيب الذي تشير إليه. هذا الحقل مطلوب باستثناء العناصر الأخرى.

name String

مطلوب.

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

type LineItemType

مطلوب.

quantity عدد صحيح

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

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

description String

وصف السلعة

price Price

مطلوب.

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

subLines قائمة<SublineNote>

اختيارية وصالحة فقط إذا كان النوع "REGULAR". يمكن إرسال ملاحظة خاصة بالسلعة من المستخدم في هذا الحقل في طلب الدفع وطلب إرسال الطلب. تأكَّد من أنّ التاجر يتلقّى ملاحظتك عند تقديمها. وستظهر في الطلب على النحو التالي: 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، ضمنًا. استخدم القواعد التالية: إذا كانت الوحدات موجبة، يجب أن تكون وحدات nanos موجبة أو صفرًا. إذا كانت الوحدات تساوي صفرًا، يمكن أن تكون النانو موجبة أو صفرًا أو سالبة. إذا كانت الوحدات سالبة، يجب أن تكون النانوثانية سالبة أو صفرًا. على سبيل المثال، يتم تمثيل القيمة -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#integrationd_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 القائمة<سلسلة>

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

مثلاً: [ "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>

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

يجب ألا يتضمّن أكثر من 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 الثابت

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

القيمة: 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

استخدام المقدَّرةFulfillmentTimeIso8601 في رسالة 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

مطلوب.

مطلوبة إذا كان الطلب "CONFIRMED" أو "IN_TRANSIT" أو "FULFILLED". هذا الحقل هو المعرّف الفردي الموجّه للمستخدمين (عادةً ما يكون معرّف الطلب الخاص بالمطعم)، ويظهر في كلّ من إيصال شركة الدمج وبطاقة طلب 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 صحيح/خطأ

يتم الضبط على "صحيح" في حال استخدام TimesofMoney، وعلى "خطأ" لجميع الجهات المسؤولة عن معالجة المعاملات الأخرى.

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

مطلوب.

سلسلة Base 64 مرمّزة تحتوي على الرمز المميّز للدفع لفرض رسوم على المستخدم من خلال معالج مشارك في 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 الثابت

مطلوب.

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

القيمة: 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.

totalPriceStatus Const

مطلوب.

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

القيمة: ESTIMATED

totalPrice String

مطلوب.

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

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

مثال

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