Las RTU están diseñadas principalmente para actualizaciones que no puedes prever, como cierres de emergencia, o metadatos que cambian periódicamente (como las ETA). Si el cambio no necesita reflejarse de inmediato, puedes usar la transferencia masiva de feeds. Las actualizaciones en tiempo real se procesan en un plazo máximo de cinco minutos.
Configuración de Google Cloud Platform
- Configura un proyecto de GCP. Se necesita un proyecto de GCP para acceder a la API de RTU.
- Otorga acceso de editor a food-support@google.com
- Informa a tu POC de Google sobre el número de proyecto de GCP.Tu proyecto de GCP debe estar asociado a tu cuenta de Actions Center para que funcionen las actualizaciones en tiempo real.
- Habilita la API de Maps Booking:
- En GCP, ve a APIs & Services > Library.
- Busca la "API de Google Maps Booking".
- Busca la instancia de zona de pruebas (“Google Maps Booking API (Dev)”) y haz clic en Habilitar.
- Busca la instancia de producción (“API de Google Maps Booking”) y haz clic en Habilitar.
- Crea una cuenta de servicio con un rol de editor para tu proyecto de GCP. Para obtener más detalles, consulta Configuración de la cuenta de servicio.
- Asegúrate de subir feeds por lotes al entorno en el que trabajas en las actualizaciones en tiempo real.
- Para la autenticación de la API, recomendamos instalar la biblioteca cliente de Google en el lenguaje de tu elección. Usa “https://www.googleapis.com/auth/mapsbooking” como el alcance de OAuth. En los ejemplos de código que se incluyen a continuación, se usan estas bibliotecas. De lo contrario, deberás controlar los intercambios de tokens de forma manual, como se describe en Usa OAuth 2.0 para acceder a las APIs de Google.
Configuración de la cuenta de servicio
Necesitas una cuenta de servicio para realizar solicitudes HTTPS autenticadas a las APIs de Google, como la API de actualizaciones en tiempo real.
Para configurar una cuenta de servicio, haz lo siguiente:
- Accede a Google Cloud Platform Console.
- Tu cuenta en el Centro de acciones también tiene asociado un proyecto de Google Cloud. Selecciona ese proyecto si aún no lo hiciste.
- Haz clic en Cuentas de servicio en el menú de la izquierda.
- Haz clic en Crear cuenta de servicio.
- Ingresa un nombre para la cuenta de servicio y haz clic en Crear.
- En Seleccionar un rol, elige Proyecto > Editor.
- Haz clic en Continuar.
- Opcional: Agrega usuarios para otorgarles acceso a la cuenta de servicio y haz clic en Listo.
- Haz clic en Más > Crear clave para la cuenta de servicio que acabas de crear.
- Selecciona JSON como el formato y haz clic en Crear.
- Después de generar el nuevo par de claves pública y privada, descárgalo en tu máquina.
Trabajar con la API
La API de Real-time updates admite dos tipos de operaciones: Update y Delete. No se admite la adición de entidades nuevas a través de la API de actualización en tiempo real. Las actualizaciones en tiempo real se pueden procesar por lotes si incluyes varias actualizaciones en una sola solicitud a la API. Puedes agrupar hasta 1,000 actualizaciones en una sola llamada a la API. Si es posible, te recomendamos que utilices un enfoque basado en activadores para enviar actualizaciones a través de la RTU (es decir, cuando se produzca un cambio de datos en tu sistema, activa una actualización en tiempo real para Google) en lugar de un enfoque basado en la frecuencia (es decir, cada X minutos, explora tu sistema en busca de cambios).
La API de actualizaciones en tiempo real funciona en los entornos de zona de pruebas y de producción. El entorno de zona de pruebas se usa para probar las solicitudes a la API, y el entorno de producción, para actualizar el contenido visible para los usuarios de Ordering End-to-End.
- Zona de pruebas:
partnerdev-mapsbooking.googleapis.com - Producción:
mapsbooking.googleapis.com
Extremos
La API de actualizaciones en tiempo real expone dos extremos para controlar las solicitudes entrantes de actualizaciones del inventario:
- ACTUALIZACIÓN:
/v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush - BORRAR:
/v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete
El parámetro PARTNER_ID se puede encontrar en Actions Center en la página Account and users, como se muestra en la siguiente captura de pantalla.
Si tomamos 10000001 como el valor de PARTNER_ID, como se muestra en la captura de pantalla anterior, las URLs completas para enviar solicitudes a la API en el entorno de pruebas y en producción se verán como en los siguientes ejemplos.
Actualización de la zona de pruebas
https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush
Borrar en zona de pruebas
https://partnerdev-mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete
Actualización de producción
https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchPush
Borrar producción
https://mapsbooking.googleapis.com/v1alpha/inventory/partners/10000001/feeds/google.food_service/record:batchDelete
Actualiza entidades
Para actualizar entidades en tu inventario, usa el extremo update en una solicitud HTTP POST. Cada solicitud POST debe incluir el parámetro 10000001 junto con una carga útil JSON que contenga la entidad que deseas actualizar.
Nota: Asegúrate de que tus feeds de datos diarios también contengan los cambios enviados a través de la API de actualizaciones en tiempo real. De lo contrario, es posible que tus datos estén desactualizados o inactivos.
Actualiza la carga útil de la solicitud
El cuerpo de la solicitud es un objeto JSON con una lista de registros. Cada registro corresponde a una entidad que se actualiza. Consta del campo proto_record y el campo generation_timestamp que indica la fecha y hora de la actualización de la entidad:
{
"records": [
{
"proto_record":"ServiceData PROTO",
"generation_timestamp":"UPDATE_TIMESTAMP"
}
]
}ServiceData PROTO: Es la traducción de proto o JSON de la entidad ServiceData que actualizas.UPDATE_TIMESTAMP: Asegúrate de incluir la marca de tiempo de cuándo se generó la entidad en tus sistemas de backend. Si no se incluye este campo, se establecerá en el momento en que Google reciba la solicitud. Cuando se actualiza una entidad a través de una solicitudbatchPush, el campogeneration_timestampse usa para el control de versiones de la entidad. Consulta el formato esperado de los valores de tiempo en el esquema de inventario relacional.
- El cuerpo de la carga útil no debe superar los 5 MB.
- Quita los espacios en blanco para reducir el tamaño.
- Puede haber hasta 1,000 actualizaciones en una solicitud de
batchPush.
Ejemplos
Cómo actualizar un ETA
Supongamos que necesitas actualizar con urgencia el ETA de un servicio de entrega de 30 a 60 minutos a 60 a 90 minutos. Tu actualización debe contener el JSON de toda la entidad Service.
Considera una entidad de servicio que se ve de la siguiente manera:
{ "service": { "service_id": "service/entity002", "service_type": "DELIVERY", "parent_entity_id": "entity002", "lead_time": { "min_lead_time_duration": "600s", "max_lead_time_duration": "1800s" }, "action_link_id": "delivery_link/entity002" } }
Tus actualizaciones en tiempo real por HTTP POST son las siguientes (los cuerpos de las solicitudes se imprimen de forma legible):
POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush Host: mapsbooking.googleapis.com Content-Type: application/json { "records": [{ "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "service" : { "service_id" : "23456/delivery", "service_type" : "DELIVERY", "parent_entity_id" : "23456", "disabled" : "false", "action_link_id": "delivery_link/entity002", "lead_time" : { "min_lead_time_duration" : { "seconds": "3600" }, "max_lead_time_duration" : { "seconds": "5400" } } } }, "generation_timestamp": "2023-09-13T17:11:10.750Z" }] }
Actualiza varias entidades
Para actualizar varias entidades de restaurantes en una sola llamada a la API, incluye varios registros en el campo proto_record del cuerpo de la solicitud.
POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchPush Host: mapsbooking.googleapis.com Content-Type: application/json { "records": [{ "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "service" : { "service_id" : "23456/delivery", "service_type" : "DELIVERY", "parent_entity_id" : "23456", "disabled" : "false", "action_link_id": "delivery_link/entity002", "lead_time" : { "min_lead_time_duration" : { "seconds": "1800" }, "max_lead_time_duration" : { "seconds": "3600" } } } }, "generation_timestamp": "2023-09-13T17:11:10.750Z" }, { "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "fee" : { "fee_id" : "12345/delivery_fee", "fee_type" : "DELIVERY", "fixed_amount" : { "currency_code" : "USD", "units" : "10", "nanos" : "0" }, "service_ids": ["service/entity002"] } }, "generation_timestamp" : "2023-09-13T17:11:10.750Z" }] }
Borra entidades
Para borrar entidades de tu inventario, usa el extremo DELETE en una solicitud HTTP POST. Cada solicitud POST debe incluir el parámetro PARTNER_ID junto con la carga útil JSON que contiene el identificador de la entidad que deseas borrar.
Nota: Asegúrate de que tus feeds de datos diarios también contengan los cambios enviados a través de la API de actualización en tiempo real. De lo contrario, la transferencia de datos diaria por lotes sobrescribirá los cambios en tiempo real.
POST v1alpha/inventory/partners/PARTNER_ID/feeds/google.food_service/record:batchDelete Host: mapsbooking.googleapis.com Content-Type: application/json { "records": [{ "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "service" : { "service_id" : "23456/delivery" } }, "delete_time": "2023-09-13T17:11:10.750Z" }, { "proto_record": { "@type": "type.googleapis.com/food.ordering.service.v1.ServiceData", "fee" : { "fee_id" : "12345/delivery_fee" } }, "delete_time" : "2023-09-13T17:11:10.750Z" }] }
Cómo agregar entidades
No uses las actualizaciones en tiempo real para agregar entidades nuevas, ya que esto puede provocar incoherencias en los datos. En su lugar, usa feeds por lotes.
Códigos de validación y respuesta de la API
Existen dos tipos de validaciones que se realizan en las llamadas a la API de actualizaciones en tiempo real:
- A nivel de la solicitud: Estas validaciones verifican que la carga útil siga el esquema y que cada
proto_recordcontenga los camposidytype. Estas verificaciones son síncronas y los resultados se muestran en el cuerpo de la respuesta de la API. Un código de respuesta 200 y un cuerpo JSON vacío{}significan que estas validaciones se aprobaron y que las entidades de esa solicitud se pusieron en cola para su procesamiento. Un código de respuesta que no sea 200 significa que falló una o más de estas validaciones y que se rechazó toda la solicitud (incluidas todas las entidades de la carga útil). Por ejemplo, si falta un@typeen unproto_record, se muestra la siguiente respuesta de error:
{ "error": { "code": 400, "message": "Record:{...}", "status": "INVALID_ARGUMENT", "details": [ { "@type": "type.googleapis.com/google.rpc.DebugInfo", "detail": "[ORIGINAL ERROR] generic::invalid_argument: Failed to parse one or more rtu records. Record:... The entity type could not be extracted from the entity value." } ] }
- A nivel de la entidad: Cada entidad (proto_record) de la carga útil se valida según el esquema. Los problemas que se encuentran en esta fase de validación no se informan en la respuesta de la API. Solo se registran en el panel de Informes de RTU del Centro de acciones.
Nota: Un código de respuesta 200 no significa que todas las entidades se hayan transferido correctamente.
Cuotas de la API
Las actualizaciones de la API en tiempo real tienen una cuota de 1,500 solicitudes cada 60 segundos, o bien de un promedio de 25 solicitudes por segundo. Cuando se excede una cuota, Google responde con el siguiente mensaje de error:
{
"error": {
"code": 429,
"message": "Insufficient tokens for quota ...",
"status": "RESOURCE_EXHAUSTED",
"details": [...]
}
}Para controlar esta situación, intenta realizar la llamada nuevamente en intervalos cada vez más largos hasta que se complete correctamente. Si sueles agotar la cuota, considera incluir más entidades en una solicitud a la API. Puedes incluir hasta 1,000 entidades en una llamada a la API.
Actualizaciones en tiempo real de los tiempos de procesamiento
Una entidad que se actualiza a través de una actualización en tiempo real se procesa en 5 minutos.