Promociones

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:

  1. Configura la integración de promociones. (Omitir si no usa códigos de promoción patrocinados por Google).
  2. Implementa la confirmación de la compra con promociones.
  3. 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, con Contact (como la dirección de correo electrónico del usuario) de FoodCartExtension .

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 con FoodOrderUpdateExtension.

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