En tus feeds por lotes, la versión de una entidad se determina a través del
campo dateModified
en el sobre del feed:
{
"@context": "http://schema.googleapis.com",
"dateModified": "2018-12-28T06:30:00:123-07:00",
"@type": "DataFeed",
"dataFeedElement": [
/* All the items that are part of this feed go here */
]
}
Todas las entidades enumeradas en el campo dataFeedElement
tendrán la misma marca de tiempo, como se indica en el sobre.
Por ejemplo, podría tener el siguiente feed con dos entidades:
{
"@context": "http://schema.googleapis.com",
"@type": "DataFeed",
"dateModified": "2018-12-28T06:30:00:123-07:00",
"dataFeedElement": [
{
"@type": "Restaurant",
"@id": "http://www.provider.com/somerestaurant",
...
},
{
"@type": "Menu",
"@id": "http://www.provider.com/somerestaurant/menu/1"
...
}
]
}
Una vez recibidas y procesadas, tanto el menú como las entidades de los restaurantes tendrían versiones individuales como "2018-12-28T06:30:00:123-07:00".
Control de versiones con actualizaciones incrementales
Cuando envías una entidad mediante actualizaciones de inventario, la versión se establece a través del campo update_time
(en el caso de una llamada de adición o actualización) o el campo delete_time
(en el caso de una llamada de eliminación). Dado que estos campos son opcionales, la marca de tiempo predeterminada se establece cuando Google recibió la llamada.
Ejemplo 1: update_time configurado explícitamente
Supongamos que la siguiente llamada incremental se recibe a las 2018-12-28T06:30:10:123-07:00 de un restaurante completamente nuevo. A continuación, se muestra la solicitud HTTP POST para esa entidad con el ID “http://www.provider.com/somerestaurant" suponiendo que el feed de datos usa el esquema de inventario v1:
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
A continuación, el cuerpo de la carga útil JSON contiene el campo update_time
. La entidad con el ID "http://www.provider.com/somerestaurant" da como resultado que esta entidad se controle como 6:30:00 y no cuando se la recibió (diez segundos después a las 6:30:10):
{
// This envelope is to be used for incremental.
"entity": {
// Note: "data" is not serialized as a string in our example for readability.
"data": "[entity in JSON format serialized as a string]",
"vertical": "FOODORDERING"
},
"update_time":"2018-12-28T06:30:00:123-07:00"
}
Ejemplo 2: update_time configurado implícitamente
Supongamos que la siguiente llamada incremental se recibe a las 2018-12-28T06:30:10:123-07:00 de un restaurante completamente nuevo. A continuación, se muestra la solicitud HTTP POST para esa entidad con el ID “http://www.provider.com/somerestaurant" suponiendo que el feed usa el esquema de inventario v1:
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
A continuación, el cuerpo de la carga útil JSON no contiene el campo update_time
. Por lo tanto, la entidad con ID "http://www.provider.com/somerestaurant" hace que esta entidad se controle según la versión 6:30:10:
{
// This envelope is to be used for incremental.
"entity": {
//Note: "data" is not serialized as a string in our example for readability.
"data": "[entity in JSON format serialized as a string]",
"vertical": "FOODORDERING"
}
}
Control de versiones por lotes y incremental
Una entidad que se envía a Google se procesa y entrega solo si tiene la versión más reciente. Ten en cuenta que las entidades enviadas a través de lotes suelen tardar unos días en procesarse, mientras que las entidades enviadas a través de la API incremental se procesan de inmediato.
Prácticas recomendadas
- Configura los campos
update_time
ydateModified
en incrementos y por lotes, respectivamente, según cuándo se modificó la entidad en tus sistemas. - Si un feed por lotes (archivo) enumera más de una entidad de nivel superior (por ejemplo, vinculas tus restaurantes con servicios y menús), actualiza la marca de tiempo a medida que se actualizan los datos de una entidad.
- En las llamadas incrementales, te recomendamos que configures de forma explícita el campo
update_time
. - Es fundamental que, una vez que se realice una llamada incremental, la marca de tiempo del feed correspondiente (
dateModified
) también se actualice antes de que Google la recupere.
Ejemplo
Google recupera el siguiente archivo a las 11 a.m. el 28 de diciembre de 2018 para un restaurante completamente nuevo:
{
"@context": "http://schema.googleapis.com",
"@type": "DataFeed",
"dateModified": "2018-12-28T06:30:00-07:00",
"dataFeedElement": [
{
"@type": "Restaurant",
"@id": "http://www.provider.com/newrestaurant",
...
},
{
"@type": "Menu",
"@id": "http://www.provider.com/newrestaurant/menu/1"
...
}
{
"@type": "Service",
"@id": "http://www.provider.com/newrestaurant/service/1"
...
}
]
}
Estas entidades se procesan de forma correcta y se controlan sus versiones como “2018-12-28T06:30:00-07:00". Debido a que los feeds por lotes tardan en procesarse, estos se suelen publicar 2 días después.
Sin embargo, a la 1 p.m., el sistema del socio tiene una actualización del número de teléfono del restaurante, que da como resultado la siguiente llamada incremental, que Google recibe a las 13:05 (5 segundos después):
POST v2/apps/provider-project/entities/http%3A%2F%2Fwww.provider.com%2Fnewrestaurant:push
Host: actions.googleapis.com
Content-Type: application/ld+json
{
// This envelope is to be used for incremental.
"entity": {
//Note: "data" is not serialized as a string in our example for readability.
"data": "[entity in JSON format serialized as a string]",
"vertical": "FOODORDERING"
},
"update_time":"2018-12-28T13:00:00-07:00"
}
El update_time
se proporciona de manera explícita y es mayor (más reciente) que la versión anterior (6:30 a.m. del mismo día), por lo que la entidad del restaurante ahora tiene la versión "2018-12-28T13:00:00-07:00". Sin embargo, el menú y las entidades de servicio aún tienen versiones como "2018-12-28T06:30:00-07:00".
Se realizó una llamada incremental, por lo que el feed por lotes se actualiza con la nueva marca de tiempo correspondiente. Además, los cambios correspondientes se aplican a las entidades relevantes (se actualiza el número de teléfono de la entidad del restaurante).
{
"@context": "http://schema.googleapis.com",
"@type": "DataFeed",
"dateModified": "2018-12-28T13:00:00-07:00",
"dataFeedElement": [
{
"@type": "Restaurant",
"@id": "http://www.provider.com/newrestaurant",
...
},
{
"@type": "Menu",
"@id": "http://www.provider.com/newrestaurant/menu/1"
...
}
{
"@type": "Service",
"@id": "http://www.provider.com/newrestaurant/service/1"
...
}
]
}
Al día siguiente (29 de diciembre de 2018) a las 11:00 p.m., el feed se recupera nuevamente. El restaurante aún tiene la misma versión (1 p.m. del 28 de diciembre), por lo que se descarta esta entidad y se conserva la versión actual. Sin embargo, las entidades del menú y del servicio se actualizan con una versión nueva.
Marcas de tiempo del mapa del sitio
El encabezado de respuesta last-modified
en el mapa del sitio no afecta la versión de una entidad. Afecta cuándo Google recupera el feed.
Prácticas recomendadas
- Actualiza el encabezado de respuesta solo cuando todos los archivos estén actualizados y listos para recuperarse.
- Usa
update_time
ydelete_time
de forma explícita en forma incremental. - Configura
update_time
,delete_time
ydateModified
para que cambien los datos en tu extremo.