OdooWiki OCA HUB

Social Media LinkedIn Sync

social_media_linkedin_sync folder_open OCA/social open_in_new
Social Network Licencia: AGPL-3

Este módulo devuelve a Odoo lo que una página de LinkedIn ya publicó: las propias publicaciones, las cifras que cada una recogió y sus comentarios y reacciones.

Es la mitad de LinkedIn de Social Media Sync, separada de Social Media Linkedin siguiendo la misma línea: lo que cuesta una llamada. El conector pide a LinkedIn un número fijo de cosas por cuenta —publicar, eliminar, las cifras diarias de toda la página— y ese número no cambia tanto si la página publicó una vez como diez mil. Todo aquello cuyo coste crece con el historial de la página vive aquí: leer el feed página a página, preguntar a LinkedIn por las publicaciones que faltan en él de cien en cien URN y una llamada por hilo de comentarios. Las cifras de las publicaciones las lee Social Media Linkedin, en tantas llamadas como exija el límite de 4 KB de la cadena de consulta, sea quien sea el que le entregue los identificadores.

Un Odoo que solo publica en LinkedIn instala Social Media Linkedin por sí solo y no paga nada de esto.

Funciones principales:

  • Importación de las publicaciones de la página, con sus imágenes y su vídeo, y de las estadísticas que cada una recogió, bajo demanda y mediante las acciones programadas de Social Media Sync.
  • Resincronización completa de una página, la única pasada que detecta una publicación eliminada en LinkedIn. Faltar en el feed nunca marca nada por sí solo: se pregunta a LinkedIn por cada sospechosa por su URN, una llamada por cada cien de ellas, y solo un 404 escribe la eliminación. La Posts API publica de forma asíncrona (PUBLISH_REQUESTED), responde al buscador de autores en contexto de lector y afirma que una página que devuelve menos resultados de los pedidos no es el final del feed, por lo que una publicación viva puede estar ausente de un listado leído entero.
  • Publicaciones eliminadas en LinkedIn reconocidas mientras se usa el panel: una reacción o un comentario respondidos con un 404 hacen que Odoo pregunte a LinkedIn por la propia publicación, y solo su confirmación marca la línea como eliminada.
  • Hilos de comentarios leídos desde el panel, con sus respuestas, y Recommend en una publicación y en cada uno de sus comentarios, que además retira la reacción que hizo.
  • Detección de páginas que se movieron desde la última importación, que pone un aviso en el panel invitando al usuario a pulsar Update. Cuesta como máximo dos llamadas por cuenta y reutiliza las cifras diarias que el conector ya leyó en la misma pasada en lugar de preguntar a LinkedIn por los mismos días dos veces.

Traducción automática al español (DeepSeek) de la descripción original de OCA, que está en inglés.

auto_awesome Qué hace este módulo

Generado por IA a partir del código · Odoo 17.0

Importa las publicaciones de una página de LinkedIn en Odoo, junto con sus imágenes, vídeos, comentarios y reacciones, y las mantiene actualizadas comprobando si la página se ha movido desde la última importación.

Este módulo completa el conector de LinkedIn trayendo de vuelta a Odoo lo que una página de LinkedIn ya ha publicado. Se instala automáticamente junto al conector de LinkedIn y añade su comportamiento a las pantallas de cuenta social y de publicaciones.

Lo que obtienen los usuarios: - Las publicaciones de una página de LinkedIn se importan al panel social, con su texto, fecha de publicación, imágenes y vídeos. - Se leen los comentarios y las respuestas de cada publicación, y se muestran el nombre y el logotipo de las organizaciones que hay detrás de ellos. - Los usuarios pueden dar o quitar «me gusta» a una publicación o a un comentario desde Odoo; la reacción se envía a LinkedIn y la tarjeta se actualiza. - Las imágenes eliminadas en LinkedIn se eliminan de la tarjeta de Odoo, mientras que las imágenes adjuntadas manualmente en Odoo se dejan intactas.

Comportamientos automáticos: - Una comprobación periódica compara las cifras diarias de toda la página con la última lectura almacenada y marca la cuenta como con actualizaciones por importar, sin importar nada por sí misma. - Una resincronización completa recorre todo el feed página a página y marca como eliminadas las publicaciones que han desaparecido de LinkedIn. - El número de páginas del feed leídas por pasada está limitado por un ajuste del sistema. - Si el token de la cuenta carece del permiso necesario para leer publicaciones, el usuario responsable recibe un mensaje en su bandeja de entrada pidiéndole que vuelva a autorizar la cuenta; este aviso se envía solo una vez hasta que la cuenta se vuelva a conectar.

Un campo exclusivo del sistema almacena las últimas cifras diarias de la página, utilizado como punto de comparación para la comprobación de actualizaciones.

Modelos y campos (2)
  • social.account · amplía un modelo existentelinkedin_missing_sync_scopes, linkedin_sync_scopes_notified, linkedin_statistics_checkpoint (Statistics Checkpoint)
  • social.post.account · amplía un modelo existente

Texto generado por IA (DeepSeek) al leer el código de la versión 17.0 en GitHub; puede contener errores, así que verifícalo en el código antes de decidir. El módulo es muy grande y solo se ha leído una parte del código. Ver el código en GitHub

Disponibilidad por versión

Revisado: 2026-11-03
Confirmado (verificado en repositorio y rama) Estimado (sin verificar) Sin información

Estado de confirmación: 1 confirmada, 8 sin información de 9 versiones.

terminal Instalación y uso

Documentación de OCA · Odoo 17.0

Este módulo se instala por sí solo en cuanto Social Media Sync y Social Media Linkedin están ambos presentes, que es para lo que sirve un módulo puente: la elección de sincronizar ya la tomó quien instaló Social Media Sync, y esto solo evita que una página de LinkedIn se quede sin la mitad que le corresponde.

Instalar Social Media Linkedin por sí solo es una instalación válida: la cuenta queda vinculada, publica, elimina y muestra las cifras diarias de su página.

La marca con la que se compara la comprobación de actualización

social.account.linkedin_statistics_checkpoint la almacena este módulo y contiene las cifras diarias que LinkedIn informó para toda la página hasta la última importación. A una cuenta que aún no tiene marca se le asigna una en la primera pasada de la comprobación bihoraria y se anuncia que no tiene nada que importar, de modo que instalar este módulo en una base de datos que ya publica en LinkedIn no muestra el aviso en todas las cuentas a la vez.

No hay que configurar nada para que este módulo funcione: utiliza las cuentas y credenciales de LinkedIn de Social Media Linkedin, y las acciones programadas de Social Media Sync.

No le pide a LinkedIn nada que el conector no pida ya. La lectura del feed de una página, de sus comentarios y de sus reacciones viaja sobre r_organization_social, que Social Media Linkedin solicita por su cuenta, concedido por el producto Community Management API que ese conector ya necesita.

Lo que no viene solo son las cuentas ya asociadas. Un token de acceso conserva los ámbitos con los que se emitió, así que una cuenta autorizada antes de que se solicitara ese permiso no lo tiene y su historial no se puede importar hasta que se autorice de nuevo. No basta con refrescar el token: abre la cuenta, pulsa Update account con Update keys marcado y autoriza de nuevo en LinkedIn.

Las cuentas afectadas lo dicen por sí mismas, así que no hay que buscar nada: se dibuja un aviso en el formulario de la cuenta mientras falte el permiso, se notifica al usuario responsable mediante la comprobación que se ejecuta cada dos horas, y la importación se rechaza con el nombre del permiso que falta en lugar del error escueto que responde LinkedIn.

El vídeo de una publicación se descarga entero, y el archivo se limita al tope de tamaño de Social Media Sync, el parámetro del sistema social_media_sync.media_max_size_mb, instalado en 100 megabytes. LinkedIn admite vídeos de hasta 500 MB, así que una página que publique vídeos largos es la que hay que subirlo para ella. Dejar los vídeos fuera de Odoo por completo es lo que hace social_media_sync.download_videos escrito como False: no se descarga ningún vídeo y ni siquiera se le pregunta a LinkedIn de dónde descargarlo, mientras que las imágenes sí. Consulta la configuración de Social Media Sync para ambas cosas.

Parámetros del sistema

Hay una clave que conviene conocer, y solo se escribe a mano en Ajustes > Técnico > Parámetros > Parámetros del sistema: hasta entonces el módulo usa el valor predeterminado que lleva el código. Se acota cuando se lee, así que un valor fuera de su rango se devuelve a él.

| Parámetro | Predeterminado | Unidad | Límites | | --- | --- | --- | --- | | social_media_linkedin_sync.posts_max_pages | 50 | páginas de 100 publicaciones | 1 a 500 |

Es hasta dónde se lee en el feed de una página en una pasada. El valor predeterminado cubre cinco mil publicaciones, y no es un límite de LinkedIn: es lo que evita que un feed que nunca termina entre en bucle infinito.

Una página con un historial más largo tiene que subirlo. Un feed leído de forma incompleta vuelve parcial, y la resincronización completa semanal —la única pasada que detecta una publicación eliminada en LinkedIn— no busca eliminaciones en un feed que no pudo leer entero. Nada se rompe y no se dice nada más allá de un aviso en el log que indica el número de páginas, así que el síntoma son publicaciones que siguen publicadas en Odoo después de eliminarse en LinkedIn.

Subirlo cuesta llamadas: cada página es una llamada contra la Posts API, así que 500 páginas son 500 llamadas por pasada de cada cuenta, más lo que añada la lectura de sus cifras. Por eso existe el techo.

Importación de lo que una página ya ha publicado.

  • El botón Update del panel importa las publicaciones de las páginas. Sin este módulo, ese botón refresca la serie diaria de la página y las cifras de las publicaciones de los últimos 30 días; con él, además incorpora las publicaciones que Odoo aún no tiene y las cifras de las anteriores a esa ventana.
  • La importación descubre las publicaciones de tres formas: una publicación por su referencia, todo el feed página a página, o —la vía ordinaria— la primera página del feed ordenada por última modificación, que es lo que capta lo que cambió desde la pasada anterior.
  • También descarga los medias de las publicaciones creadas fuera de Odoo, de modo que esas imágenes aparecen en el panel solo después de la importación. Una imagen de la que LinkedIn no pudo indicar de dónde descargarla, o cuya descarga falla, no se almacena, y la siguiente pasada que lea la publicación lo vuelve a intentar.
  • El vídeo de una publicación también se descarga, y solo una vez: un vídeo que la publicación ya tiene, incluido el de una publicación publicada desde Odoo, no se vuelve a pedir. La tarjeta de la publicación lo cuenta, y su formulario lo reproduce.
  • Un vídeo que supera el límite de tamaño de Social Media Sync, uno que LinkedIn todavía está procesando, o uno cuya descarga falla no se almacena. La publicación sigue marcada como que tiene un vídeo, su formulario indica que el vídeo no se descargó, y la siguiente pasada que lea la publicación lo vuelve a intentar.
  • No se descarga ningún vídeo mientras el parámetro del sistema social_media_sync.download_videos sea False, y tampoco se le pregunta a LinkedIn de dónde descargarlo; las imágenes sí. La publicación sigue marcada como que tiene un vídeo y su formulario indica que el vídeo no se descargó. Los vídeos ya descargados se conservan, y una vez que el parámetro vuelve a True la siguiente pasada que lea una publicación a la que aún le falta su vídeo lo descarga; el Full resync es la pasada que las lee todas.
  • La publicación refleja lo que está en línea: una imagen eliminada de la publicación en LinkedIn se elimina de la tarjeta del panel en la siguiente importación. Solo se gestionan así los medias descargados de LinkedIn, por lo que un archivo adjuntado a mano en Odoo nunca se elimina.
  • Una importación de toda la página deja una marca con las cifras de los últimos días vigilados. La comprobación cada dos horas compara con esa marca, y por eso importar es lo que retira el aviso; refrescar una sola publicación también lo retira pero deja la marca intacta, ya que una publicación no dice nada sobre el resto de la página.
  • La primera importación vuelve a pedir la serie temporal en una cuenta cuya asociación no pudo leerla, lo que es el reintento de un backfill que falló y no una repetición del mismo. Hasta dónde llega la serie es cosa del conector: Social Media Linkedin la rellena hasta donde LinkedIn responde por día en el momento en que se vincula la cuenta, y la reconstruye desde el botón Rebuild statistics history del formulario de la cuenta.

Comentarios y reacciones.

  • El hilo de comentarios de una publicación se lee desde el panel, y sus respuestas con él: LinkedIn sirve las respuestas de un comentario aparte, por lo que se piden cuando se abre el hilo.
  • Un comentario y una respuesta se escriben bajo la organización, y el hilo ofrece eliminar un comentario: LinkedIn es quien decide si la organización puede, y su negativa se informa en lugar de eliminarlo aquí.
  • Recommend se ofrece en la publicación y en cada uno de sus comentarios, enviado bajo la organización. LinkedIn mantiene una reacción por cuenta y solo se envía LIKE, por lo que la entrada es un interruptor: muestra un pulgar relleno en lo que la organización ya recomendó, y pulsarlo ahí retira la reacción. Lo que LinkedIn mantiene se vuelve a leer en cada importación, por lo que una reacción hecha o retirada desde el propio LinkedIn llega al panel en la siguiente pasada.
  • LinkedIn no acepta una imagen en un comentario, por lo que el compositor no ofrece subida en un hilo de LinkedIn.

Publicaciones eliminadas en LinkedIn.

  • Las publicaciones eliminadas directamente en LinkedIn se marcan como Deleted on LinkedIn en Odoo, de modo que el panel conserva su historial. Solo las notan el botón Full resync y la acción programada semanal, no la importación ordinaria, por lo que una eliminación puede tardar hasta una semana en informarse.
  • Abrir una publicación pregunta primero a LinkedIn, por lo que una eliminada allí se informa y se marca de inmediato en lugar de esperar a la pasada semanal.

Full resync de una página

  • Vaya a Social Media > Configuration > Accounts, seleccione la cuenta y haga clic en el botón Full resync de la cabecera.
  • El botón Update del panel lee una página del feed, la ordenada por última modificación, y refresca las cifras de cada publicación por su identificador. Eso basta para todo excepto para una cosa: no puede notar que una publicación se eliminó en LinkedIn, porque una publicación ausente de la página que leyó no está necesariamente eliminada.
  • Full resync es lo que lee todo el feed y marca como Deleted on LinkedIn lo que ya no está. Es también la pasada costosa, una llamada por cada cien publicaciones contra la cuota diaria, por lo que pide confirmación.
  • La acción programada Social: Full resync of the accounts hace lo mismo semanalmente para cada cuenta, por lo que pulsar el botón solo es necesario para ver informada antes una eliminación.
  • Una publicación editada en LinkedIn hace el tiempo suficiente como para haber salido de esa primera página conserva el texto que Odoo ya tenía hasta un full resync. Sus cifras se refrescan igualmente.

Cómo consume la sincronización la cuota de LinkedIn

Los límites de throttling de LinkedIn se cuentan por día, por aplicación y por endpoint, por lo que lo que importa no es el número total de llamadas sino cómo se reparten.

  • La acción programada que comprueba si hay actualizaciones cuesta dos llamadas por cuenta y ejecución, sea cual sea el número de publicaciones, una cuando sí encuentra algo, y solo una para una cuenta que ya anuncia publicaciones por importar o para una cuyas credenciales caducaron: la serie diaria de la página se escribe para todas ellas igualmente, y lo que se omite es la segunda llamada, la ojeada al feed que solo podría confirmar lo que el panel ya dice o fallar con un token que se sabe muerto. No se gasta ninguna llamada en una cuenta sin organización vinculada, ya que el buscador se dirige por organización y no hay nada que preguntar. Lee las cifras que LinkedIn informa para toda la página día a día y las compara con las que dejó la última importación: no se lee ninguna publicación una por una para decidir si el panel debe anunciar actualizaciones. Ejecutándose cada dos horas, eso son alrededor de 24 llamadas al día por cuenta.
  • El botón Update no recorre el feed. Las estadísticas se piden por identificador de publicación, y esos identificadores ya están almacenados en Odoo, por lo que basta una página del feed: la ordenada por última modificación, que es la que trae las publicaciones creadas o editadas en LinkedIn. Eso es una llamada en lugar de una por cada cien publicaciones.
  • Las cifras de las publicaciones no se leen aquí: la importación entrega los identificadores a Social Media Linkedin, que es donde vive esa lectura, por lo que las mismas tres llamadas responden por la página tanto si las pide esta importación como si las pide el refresco diario del conector.
  • Esas cifras se piden en tantas llamadas como necesite el límite de 4 KB de la cadena de consulta, ya que esos endpoints toman todos los identificadores en la URL y ninguno de ellos pagina. Alrededor de cien publicaciones caben en una llamada, por lo que un feed completo requiere varias. https://learn.microsoft.com/en-us/linkedin/marketing/community-management/organizations/share-statistics
  • Full resync es la pasada costosa, una llamada por cada cien publicaciones. El botón la hace para la cuenta en la que se pulsa; la acción programada semanal la hace para cada cuenta de la base de datos. Recorre el feed página a página (count=100) hasta tantas páginas como permita social_media_linkedin_sync.posts_max_pages, cincuenta por defecto, es decir 5000 publicaciones, y una página solo se toma como la última cuando vuelve vacía, porque LinkedIn documenta que una página puede traer menos publicaciones de las pedidas mientras quedan más. En una cuenta cuyo feed sea más largo que eso, la respuesta es incompleta y el barrido que marca como Deleted lo que ya no está en LinkedIn se omite en esa ejecución: no informar nada es preferible a marcar una publicación que sigue en línea.

Qué nota y qué no nota la comprobación de actualizaciones

  • Solo indica que algo se movió en la página, no qué publicación se movió. No lo necesita: lo único que decide es si el panel muestra el aviso que invita a sincronizar. Un cambio que se anula entre dos ejecuciones, una reacción retirada y otra añadida, deja las cifras de la página donde estaban y pasa desapercibido hasta la siguiente sincronización.
  • Vigila las cifras diarias de la página, sobre una ventana de los últimos siete días, y no los totales de por vida que el mismo endpoint responde cuando no se da intervalo de tiempo. Son dos lecturas separadas de los propios datos de LinkedIn, por lo que no se garantiza que coincidan en todo instante; este módulo solo se apoya en los buckets diarios. Una consecuencia que conviene saber: la actividad anterior a la ventana de siete días no se anuncia. Se importa igualmente cuando el usuario sincroniza, porque la importación lee las publicaciones mismas y no esta ventana.
  • El engagement no se compara. Es una ratio de los clics, reacciones, comentarios y compartidos sobre las impresiones, por lo que no puede moverse sin que se mueva uno de aquellos, y es la única cifra no entera del conjunto.
  • El endpoint de estadísticas solo responde actividad de los últimos 12 meses, sobre una ventana móvil. Una publicación anterior a eso deja de contarse, lo que puede mover las cifras de la página por sí solo, sin que nadie haya interactuado con nada. La comprobación anuncia actualizaciones una vez cuando eso ocurre y la siguiente importación lo reconcilia.

Traducción automática al español (DeepSeek) de la documentación original de OCA; los comandos y el código no se traducen.

info

Datos importados de GitHub: esta ficha refleja la última revisión del catálogo, no una consulta en directo. Verifica siempre en la documentación del módulo y en staging antes de instalar en producción.