Las promociones son una forma en la que tú y Google pueden incentivar a los clientes para que hagan lo siguiente: pruebe su servicio de pedido de comida con descuentos. Google admite Integrar las acciones de pedidos de extremo a extremo con la administración de promociones en un sistema de archivos.
Se admiten los siguientes tipos de descuentos:
- Códigos de promoción patrocinados por Google: Son códigos promocionales que se generan automáticamente. que Google completa previamente o que ingresan los usuarios.
- Códigos promocionales patrocinados por terceros: Son códigos promocionales que los usuarios pueden ingresar. suministrados por tu servicio de pedidos de comida.
- Descuentos automáticos patrocinados por terceros: Son descuentos que se aplican a los alimentos el servicio de pedidos se aplica automáticamente sin un código promocional.
Sin importar el tipo de descuento, Google llama a la confirmación de la compra de tu comida para verificar y aplicar el descuento.
Como desarrollador de un servicio de pedido de comida, debes hacer algunos cambios a tu implementación para calcular descuentos para códigos promocionales válidos o enviar errores de códigos promocionales no válidos, administre el canje de códigos promocionales limitaciones y un seguimiento de los datos contables para los reembolsos.
Cómo procesar las promociones
Para implementar una entrega que admita promociones, haz lo siguiente:
- Configura la integración de promociones. (Omitir si no usa códigos de promoción patrocinados por Google).
- Implementa la confirmación de la compra con promociones.
- Implementa la opción Enviar pedido con promociones.
Cómo configurar la integración de promociones
En esta sección, se describe cómo configurar la integración de promociones si tienes pensado usar Códigos promocionales que patrocina Google Si solo quieres admitir códigos promocionales descuentos que un tercero patrocina, puede especificar su propia configuración y omitir esta sección.
Google especifica el tipo de promoción que deseas patrocinar y los contactos que debes establecer la integración. Proporcionamos los siguientes detalles:
- Es el importe del descuento.
- El valor mínimo del carrito.
- Corresponde a las fechas de inicio y de finalización para usar los códigos promocionales.
- El importe máximo en dólares presupuestado para la campaña de promoción.
- Indica la cantidad de veces que se pueden usar los códigos promocionales.
Ejemplos de códigos promocionales:
FopaNewUser
: 10% (porcentaje fijo) con un máximo de USD 50 de descuento.FopaMoreThan50
: USD 10 (importe de descuento fijo)
Si Google decide detener la aplicación del código, se pondrán en contacto contigo.
Configura los desembolsos
Comunícate con tu asesor de Google EAP para programar el proceso de desembolso. Google solo reembolsa las transacciones relacionadas con promociones patrocinadas por Google. si el estado final del pedido es uno de los siguientes:
CONFIRMED
IN_TRANSIT
READY_FOR_PICKUP
IN_PREPARATION
FULFILLED
Implementa la confirmación de la compra con promociones
En esta sección, se describe la implementación del procesamiento de la confirmación de la compra cuando se brinda asistencia
códigos promocionales (patrocinados por Google o por terceros). Para
descuentos automáticos patrocinados por terceros, solo debes devolver el descuento
en la línea de pedido CheckoutResponseMessage
(ninguna verificación de código promocional es
necesario).
Durante la entrega de los pedidos de comida, Google envía un único código promocional en la
CheckoutRequestMessage
a tu entrega. Los usuarios pueden cambiar su carrito o
código promocional en solicitudes repetidas de confirmación de la compra.
Para verificar si es la primera vez que el usuario aplica un código promocional, haz lo siguiente: lo siguiente:
- Códigos promocionales patrocinados por Google: Google verifica si un usuario recurrente intentar volver a usar el mismo código promocional; no necesitas hacer nada.
- Códigos promocionales patrocinados por terceros o descuentos automáticos: Si tienes
si aún no se implementó la vinculación de cuentas ni la aceptación del usuario, no podrás verificar
los detalles del usuario durante el procesamiento de la solicitud de confirmación de la compra. En su lugar,
durante el procesamiento de
SubmitOrderRequestMessage
, conContact
(como la dirección de correo electrónico del usuario) deFoodCartExtension
.
Identificar errores o procesar descuentos con sus entregas según la información más reciente la solicitud de confirmación de la compra. Cuando lo hagas, asegúrate de que el sistema no se vuelva obsoleto. información de estado.
Verifica la validez del código promocional
Tu entrega debe verificar la validez o elegibilidad de una promoción determinada.
código conforme a condiciones estipuladas, como la fecha de vencimiento, el uso máximo y
el descuento máximo. Luego, responde de forma apropiada en el CheckoutResponseMessage
.
con el descuento calculado o con foodOrderErrors
si el código promocional
no se puede aplicar. Si detectas errores con el código promocional, sigue las
el proceso que se describe en Cómo solucionar errores con las promociones.
El siguiente fragmento muestra un foodOrderErrors
de ejemplo para un código promocional.
Asegúrate de que la correctedProposedOrder
no incluya las promociones.
el nodo de inicio de sesión.
"foodOrderErrors": [
{
"error": "PROMO_NOT_APPLICABLE",
// Copy promotions.coupon string from CheckoutRequest as the ID
"id": "GoogleNewUser",
"description": "Promotion could not be applied"
}
],
"correctedProposedOrder": {// required ...},
"paymentOptions": {// required ...}
Descuentos de Compute
Si el código promocional es válido, tu entrega debería calcular el descuento.
valor en dólares y envía un CheckoutResponseMessage
con la fórmula
de descuento en el array otherItems
. El precio total del pedido no debe ser
negativo. Si el importe del descuento supera el importe del carrito, envía el
en dólares para convertir el precio total del pedido en $0.
En el siguiente fragmento, se muestra un ejemplo de la sección CheckoutResponseMessage
para
descuento promocional:
"proposedOrder": {
"otherItems": [
. . .
{
"name": "Discount",
// copy promotions.coupon field from CheckoutRequest as the id
"id": "GoogleNewUser",
"price": {
"type": "ESTIMATE",
"amount": {
"currencyCode": "USD",
"units": "-3",
"nanos": -500000000
}
},
"type": "DISCOUNT",
}
]
}
Publica promociones sin usar
No todas las solicitudes de confirmación de compra conducen a una solicitud de envío de pedido. Si tu entrega retiene una promoción en el momento de la llamada de confirmación de la compra, asegúrese de tener mecanismo para retirar la conservación si la promoción no se reclama a través de enviar un pedido después de cierto período. Esto garantiza que tus alimentos que mantiene la cuota de campaña correcta.
Maneja errores con las promociones
Si tu entrega determina que el código promocional de una
CheckoutRequestMessage
no es válido (por ejemplo, venció, no es válido,
o no reconocido), envía un objeto CheckoutResponseMessage
con un elemento foodOrderError
.
que contiene el código de error aplicable y el texto del motivo, junto con
Objetos correctedProposedOrder
y paymentOptions
.
Si la entrega encuentra varios errores de códigos promocionales en la misma solicitud, enviar los errores irrecuperables antes de devolverlos. Prioriza tus verificaciones de la siguiente manera (de prioridad alta a baja):
PROMO_NOT_RECOGNIZED
PROMO_EXPIRED
PROMO_USER_INELIGIBLE
PROMO_ORDER_INELIGIBLE
PROMO_NOT_APPLICABLE
Ejemplos
Este es un ejemplo de una solicitud de confirmación de la compra con un código promocional:
{ "accessToken": "test_access_token", "lastSeen": "2018-06-22T19:25:39Z" }, "conversation": { "conversationId": "XYZ" }, "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": "Falafel Bite" }, "lineItems": [ { "name": "Falafel Tray", "type": "REGULAR", "id": "sample_item_offer_id_1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 950000000 } }, "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "promotions": [ { "coupon": "FOPAACTIVECODE" } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } } } } } ] } ], "directActionOnly": true, "isInSandbox": true }
Esta es la respuesta de confirmación de la compra correspondiente de la entrega si la promoción código válido:
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "checkoutResponse": { "proposedOrder": { "otherItems": [ { "name": "Delivery Fees", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "3", "nanos": 500000000 } }, "type": "DELIVERY" }, { "name": "Tax", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 370000000 } }, "type": "TAX" }, { "name": "Promotion", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5", "nanos": 0 } }, "id": "FOPAACTIVECODE", "type": "DISCOUNT" } ], "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Falafel Tray", "type": "REGULAR", "id": "2529103", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 950000000 } }, "offerId": "https://www.exampleprovider.com/menu/item/offer/id1", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "promotions": [ { "coupon": "FOPAACTIVECODE" } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } } } }, "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 820000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension", "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } }, "expiresAt": "2018-06-22T19:30:52.596Z" } ] } }, "orderOptions": {}, "paymentOptions": { "googleProvidedOptions": { "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "stripe", "stripe:publishableKey": "example_stripe_client_key", "stripe:version": "2017-04-06" } }, "supportedCardNetworks": [ "AMEX", "DISCOVER", "MASTERCARD", "VISA", "JCB" ], "prepaidCardDisallowed": true } } } } } ], "suggestions": [] } } }
Este es un ejemplo de una respuesta de confirmación de la compra si el código de promoción no es válido:
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "error": { "foodOrderErrors": [ { "error": "PROMO_NOT_RECOGNIZED", "id": "SOMEPROMO", "description": "Coupon not found" } ], "correctedProposedOrder": { "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "id": "sample_item_offer_id_4", "name": "Prawns Biryani", "type": "REGULAR", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "18", "nanos": 750000000 } }, "offerId": "https://www.exampleprovider.com/menu/item/offer/id4", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "extension": { "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension" }, "promotions": [] }, "otherItems": [ { "name": "Tax", "type": "TAX", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "1", "nanos": 650000000 } } } ], "termsOfServiceUrl": "https://exampleprovider.com/terms", "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "20", "nanos": 400000000 } }, "extension": { "availableFulfillmentOptions": [ { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "PT0M" } } } ], "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension" } }, "paymentOptions": { "googleProvidedOptions": { "prepaidCardDisallowed": false, "billingAddressRequired": true, "tokenizationParameters": { "tokenizationType": "PAYMENT_GATEWAY", "parameters": { "gateway": "braintree", "braintree:apiVersion": "v1", "braintree:sdkVersion": "1.4.0", "braintree:merchantId": "example_braintree_merchant_ID", "braintree:clientKey": "example_braintree_client_key", "braintree:authorizationFingerprint": "example_braintree_fingerprint" } } } }, "@type": "type.googleapis.com/google.actions.v2.orders.FoodErrorExtension" } } } ] } } }
Implementa la función Enviar pedido con promociones
En el procesamiento de envío de tu pedido, verifica si es la primera vez que
usuario está aplicando un código promocional. Durante SubmitOrderRequestMessage
procesamiento, puedes verificarlo con los detalles de Contact
(como el
dirección de correo electrónico del usuario) del objeto FoodCartExtension
.
También debes volver a verificar la aplicabilidad del código promocional:
- Si el código es aplicable: Confirma el pedido y marca el cupón canjeado.
- Si el código ya no es aplicable: Rechaza el pedido con el
Error
PROMO_NOT_APPLICABLE
. Puedes proporcionar un motivo específico del rechazo. con el mismo mecanismo que conFoodOrderUpdateExtension
.
Ejemplos
Este es un ejemplo de una solicitud para enviar un pedido con promociones:
{ "conversation": { "conversationId": "example_conversation_ID" }, "inputs": [ { "intent": "actions.intent.TRANSACTION_DECISION", "arguments": [ { "transactionDecisionValue": { "order": { "finalOrder": { "cart": { "merchant": { "id": "https://www.exampleprovider.com/merchant/id1", "name": "Falafel Bite" }, "lineItems": [ { "name": "Falafel Tray", "type": "REGULAR", "id": "sample_item_offer_id_1", "quantity": 1, "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 950000000 } }, "offerId": "https://www.exampleprovider.com/menu/item/addon/offer/id1", "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodItemExtension" } } ], "promotions": [ { "coupon": "FOPAACTIVECODE" } ], "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodCartExtension", "fulfillmentPreference": { "fulfillmentInfo": { "pickup": { "pickupTimeIso8601": "P0M" } } }, "contact": { "displayName": "Food Ordering", "email": "example.provider@gmail.com", "phoneNumber": "+19993334444", "firstName": "Food", "lastName": "Ordering" } } }, "otherItems": [ { "name": "Delivery Fees", "type": "DELIVERY", "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": "Promotion", "type": "DISCOUNT", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "-5" } }, "id": "FOPAACTIVECODE" }, { "name": "Subtotal", "type": "SUBTOTAL", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 950000000 } } }, { "name": "Tip", "type": "GRATUITY", "price": { "type": "ESTIMATE", "amount": { "currencyCode": "USD" } } } ], "totalPrice": { "type": "ESTIMATE", "amount": { "currencyCode": "USD", "units": "9", "nanos": 820000000 } }, "extension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderExtension" } }, "googleOrderId": "example_google_order_ID", "orderDate": "2018-06-22T19:30:59.502Z", "paymentInfo": { "displayName": "example_display_name", "googleProvidedPaymentInstrument": { "instrumentToken": "example_instrument_token" }, "paymentType": "PAYMENT_CARD" }, "locale": "en" } } } ] } ], "directActionOnly": true, "isInSandbox": true }
Este es un ejemplo de la respuesta de envío de un pedido correspondiente a una entrega Si el código promocional es válido:
{ "expectUserResponse": false, "finalResponse": { "richResponse": { "items": [ { "structuredResponse": { "orderUpdate": { "actionOrderId": "example_action_order_ID", "orderState": { "state": "CREATED", "label": "Order is created with partner." }, "updateTime": "2018-06-22T19:31:01.556Z", "orderManagementActions": [ { "type": "CALL_RESTAURANT", "button": { "title": "Call Us", "openUrlAction": { "url": "tel:+1-111-111-1111" } } }, { "type": "EMAIL", "button": { "title": "Email Us", "openUrlAction": { "url": "mailto:example.provider@gmail.com" } } }, { "type": "CUSTOMER_SERVICE", "button": { "title": "Customer Service", "openUrlAction": { "url": "http://www.google.com" } } } ] } } } ], "suggestions": [] } } }
A continuación, se muestra un ejemplo de la respuesta de envío de pedido si el código promocional no es válido:
"orderUpdate": { "actionOrderId": "sample_action_order_id", "orderState": { "state": "REJECTED", "label": "Order rejected." }, "updateTime": "2017-05-10T02:30:00.000Z", "rejectionInfo": { "type": "PROMO_NOT_APPLICABLE", "reason": "Sorry, there's something wrong. Try another code?" }, "orderManagementActions": [ { "type": "CUSTOMER_SERVICE", "button": { "title": "Contact customer service", "openUrlAction": { "url": "mailto:support@example.com" } } }, { "type": "EMAIL", "button": { "title": "Email restaurant", "openUrlAction": { "url": "mailto:example.provider@example.com" } } }, { "type": "CALL_RESTAURANT", "button": { "title": "Call restaurant", "openUrlAction": { "url": "tel:+19993334444" } } } ], "infoExtension": { "@type": "type.googleapis.com/google.actions.v2.orders.FoodOrderUpdateExtension", "foodOrderErrors": [ { "error": "PROMO_USER_INELIGIBLE", "description": "Sorry, you can only use this promotion once." } ] } }