As promoções são uma forma de você e o Google incentivarem os clientes a experimente seu serviço de pedido de comida com preços com desconto. Compatíveis com o Google Integrar suas ações de pedidos de ponta a ponta ao gerenciamento de promoções sistema.
Os seguintes tipos de descontos são aceitos:
- Códigos promocionais patrocinados pelo Google:códigos promocionais que são enviados automaticamente pré-preenchidos pelo Google ou inseridos pelos usuários.
- Códigos promocionais patrocinados por terceiros:são códigos promocionais que os usuários podem inserir. fornecido pelo seu serviço de pedidos de comida.
- Descontos automáticos patrocinados por terceiros:descontos dos seus alimentos serviço de pedidos é aplicado automaticamente sem um código promocional.
Seja qual for o tipo de desconto, o Google faz uma chamada para finalizar a compra da sua comida o atendimento do pedido para verificar e aplicar o desconto.
Como desenvolvedor de um serviço de pedidos de comida, você precisa fazer algumas alterações à sua implementação para calcular descontos para códigos promocionais válidos ou enviar erros de códigos promocionais inválidos, gerenciar o resgate de códigos promocionais limitações e acompanhar dados contábeis para reembolso.
Como processar promoções
Para implementar um fulfillment compatível com promoções, faça o seguinte:
- Configurar a integração de promoções. (Ignorar esta etapa se você não estiver usando códigos promocionais patrocinados pelo Google.)
- Implementar a finalização da compra com promoções.
- Implementar o envio de pedido com promoções.
Configurar a integração de promoções
Nesta seção, descrevemos como configurar a integração de promoções se você planeja usar Códigos promocionais patrocinados pelo Google. Se você quiser oferecer suporte apenas a códigos promocionais ou que um terceiro patrocina, é possível especificar sua própria configuração e pular nesta seção.
O Google especifica o tipo de promoção a ser patrocinada e entra em contato com você a integração. Fornecemos os seguintes detalhes:
- O valor do desconto.
- O valor mínimo do carrinho.
- As datas de início e término da utilização dos códigos promocionais.
- O valor máximo em reais orçado para a campanha de promoção.
- É o número de vezes que os códigos promocionais podem ser usados.
Exemplos de códigos promocionais:
FopaNewUser
: 10% (porcentagem fixa) com valor máximo de US $50 de desconto.FopaMoreThan50
: US$ 10 (valor fixo de desconto).
Caso o Google decida interromper a aplicação do código, você será contatado.
Configurar pagamentos
Entre em contato com seu consultor do EAP do Google para configurar o processo de pagamento. O Google reembolsa apenas transações que envolvem promoção patrocinada pelo Google. códigos se o status do pedido final for um dos seguintes:
CONFIRMED
IN_TRANSIT
READY_FOR_PICKUP
IN_PREPARATION
FULFILLED
Implementar a finalização da compra com promoções
Esta seção descreve a implementação do processamento de finalização de compra ao oferecer suporte
códigos promocionais (patrocinados pelo Google ou por terceiros). Para
os descontos automáticos patrocinados por terceiros, basta retornar o desconto
no item de linha CheckoutResponseMessage
(nenhuma verificação de código promocional está
necessário).
Durante o atendimento do pedido de comida, o Google envia um único código promocional no campo
CheckoutRequestMessage
até o fulfillment. Os usuários podem alterar o carrinho ou
o código promocional para solicitações repetidas de finalização de compra.
Para verificar se essa é a primeira vez que o usuário aplica um código promocional, faça o seguinte:
- Códigos promocionais patrocinados pelo Google: o Google verifica se um usuário recorrente está tentando usar o mesmo código promocional novamente. não precisa fazer nada.
- Códigos promocionais patrocinados por terceiros ou descontos automáticos: se você tem
não tiver implementado a vinculação de conta e a ativação do usuário, não será possível verificar
os detalhes do usuário durante o processamento da solicitação de finalização da compra. Em vez disso, verifique
durante o processamento de
SubmitOrderRequestMessage
, usando aContact
detalhes (como o endereço de e-mail do usuário) doFoodCartExtension
objeto.
Identifique erros ou calcule descontos com seu fulfillment com base nos a solicitação de finalização da compra. Ao fazer isso, certifique-se de que seu sistema não fique desatualizado informações de estado.
Verificar a validade do código promocional
O atendimento do pedido precisa verificar a validade ou a qualificação de uma promoção
de acordo com os termos estipulados, como a data de validade, o uso máximo e
desconto máximo. Em seguida, responda de forma adequada no CheckoutResponseMessage
com o desconto calculado ou com foodOrderErrors
se o código promocional
não podem ser aplicadas. Se você detectar erros no código promocional, siga as
o processo descrito em Solucionar erros com promoções.
O snippet a seguir mostra um exemplo de foodOrderErrors
para um código promocional.
Verifique se correctedProposedOrder
não inclui as promoções.
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 ...}
Descontos do Compute
Se o código promocional for válido, o processamento do pedido precisa calcular o desconto
valor em dólar e devolver um CheckoutResponseMessage
com o valor
o valor de desconto na matriz otherItems
. O preço total do pedido não pode ser
negativa. Se o valor do desconto exceder o valor do carrinho, envie de volta o
valor máximo em dólares para renderizar o preço total do pedido como US $0.
O snippet a seguir mostra um exemplo de seção CheckoutResponseMessage
para
o desconto 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",
}
]
}
Publicar promoções não usadas
Nem toda solicitação de finalização de compra leva a uma solicitação de envio de pedido. Se o atendimento do pedido colocar a promoção em espera no momento da chamada de finalização da compra, verifique se você tem para liberar a retenção caso a promoção não seja reivindicada por meio de enviar o pedido após um determinado período. Isso garante que seus alimentos serviço de pedidos mantém a cota de campanha correta.
Solucionar erros com promoções
Se o processamento do pedido determinar que o código promocional de um
CheckoutRequestMessage
não é válido (por exemplo, expirou, é inválido,
ou não reconhecido), envie um CheckoutResponseMessage
com um foodOrderError
.
que contenha o código do erro aplicável e o texto do motivo, além de
Objetos correctedProposedOrder
e paymentOptions
.
Caso o fulfillment encontre vários erros de código promocional na mesma solicitação, enviar de volta os erros irrecuperáveis antes de devolver os erros recuperáveis. Priorize suas verificações da seguinte maneira (da prioridade mais alta para a mais baixa):
PROMO_NOT_RECOGNIZED
PROMO_EXPIRED
PROMO_USER_INELIGIBLE
PROMO_ORDER_INELIGIBLE
PROMO_NOT_APPLICABLE
Exemplos
Veja um exemplo de solicitação de finalização de compra com um 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 é a resposta de finalização da compra correspondente do fulfillment se a promoção é 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": [] } } }
Veja um exemplo de resposta de finalização de compra se o código promocional for invá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" } } } ] } } }
Implementar o envio de pedido com promoções
Ao realizar o pedido de envio, verifique se essa é a primeira vez que o
o usuário está aplicando um código promocional. Durante SubmitOrderRequestMessage
processamento, verifique isso usando os detalhes da Contact
(como o
endereço de e-mail do usuário) do objeto FoodCartExtension
.
Verifique também novamente a aplicabilidade do código promocional:
- Se o código for aplicável:confirme o pedido e marque o cupom resgatado.
- Se o código não for mais aplicável:recuse o pedido com o
Erro
PROMO_NOT_APPLICABLE
. Você pode informar um motivo específico para a rejeição usando o mesmo mecanismo deFoodOrderUpdateExtension
.
Exemplos
Confira um exemplo de solicitação de envio de pedido com promoções:
{ "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 }
Veja um exemplo da resposta de envio de pedido correspondente de um atendimento de pedidos se o código promocional for 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": [] } } }
Veja um exemplo de resposta do pedido de envio se o código promocional for invá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." } ] } }