Webhooks¶
Advertencia
Le recomendamos consultar a un desarrollador, arquitecto de soluciones o cualquier otra persona con experiencia técnica antes de decidir si usar webhooks y durante el proceso de implementación. Si no se hace una configuración adecuada, los webhooks pueden afectar la base de datos de Odoo y puede tomar tiempo solucionar estos problemas.
Los webhooks, que puedes crear en Studio de Odoo, te permiten automatizar una acción en tu base de datos de Odoo cuando ocurre un evento específico en otro sistema externo.
En la práctica funciona de la siguiente manera: cuando ocurre el evento en el sistema externo, se envía un archivo de datos (la «carga» o payload) a la URL del webhook de Odoo mediante una solicitud API POST
y se ejecuta una acción predefinida en tu base de datos de Odoo.
A diferencia de las acciones programadas (que se ejecutan en intervalos definidos) o de las solicitudes API manuales (que necesitas invocar de forma explícita), los webhooks habilitan la comunicación y automatización en tiempo real basada en eventos. Por ejemplo, puedes configurar un webhook para que tus datos de inventario en Odoo se actualicen en automático al confirmar una orden de venta en un sistema de punto de venta externo.
Al configurar un webhook en Odoo no necesitas escribir código cuando conectas dos bases de datos de Odoo, pero para probar un webhook sí necesitas una herramienta externa. Es probable que para los registros o acciones personalizados sí debas contar con conocimientos de programación.
Nota
Este artículo explica cómo crear un webhook que reciba datos de una fuente externa. Sin embargo, también puedes crear una acción automatizada que envíe datos a un webhook externo cuando ocurra un cambio en tu base de datos de Odoo.
Crear un webhook en Odoo¶
Importante
Antes de implementar un webhook en una base de datos activa, primero configúralo y pruébalo en una base de datos duplicada para que verifiques que funciona correctamente.
Truco
Activar el modo de desarrollador antes de crear un webhook te da más flexibilidad para elegir el modelo al que está dirigida la regla de automatización. También te permite encontrar el nombre técnico del modelo y de los campos, que pueden ser datos necesarios para configurar la carga.
Para encontrar el nombre técnico de un modelo, con el modo de desarrollador activado, pasa el cursor sobre el nombre del modelo y haz clic en (Enlace interno). El nombre técnico aparecerá en el campo Modelo. Por ejemplo, el webhook de una orden de venta usa el modelo Orden de venta, pero en la carga utiliza sale.order
.
Sigue estos pasos para crear un webhook en Studio:
Abre Studio, haz clic en Webhooks y después en Nuevo.
Asígnale un nombre al webhook. Este debe ayudar a identificar su propósito.
Si es necesario, y con el modo de desarrollador activado, selecciona el modelo adecuado en el menú desplegable. Si no está activado, la regla de automatización estará dirigida al modelo actual de forma predeterminada.
La URL del webhook se genera de forma automática, pero puedes cambiarla si es necesario al hacer clic en Rotar secreto. Esta es la URL que debes usar al implementar el webhook en el sistema externo que enviará actualizaciones a la base de datos.
Advertencia
La URL es confidencial y debes tener cuidado con ella. Si la compartes en línea o si no tomas las medidas adecuadas podrías darle acceso a otras personas a tu base de datos de Odoo. Si actualizas la URL después de la implementación inicial, asegúrate de actualizarla también en el sistema externo.
Si lo deseas, activa la opción Registrar llamadas para registrar el historial de las solicitudes API hechas a la URL del webhook, esto podría ser útil para solucionar algunos errores.
Si el sistema que envía el webhook no es Odoo, ajusta el código del registro objetivo para buscar el registro JSON incluido en la carga cuando se haga la solicitud API a la URL del webhook. Si el sistema que envía el webhook es una base de datos de Odoo, asegúrate de que tanto
id
comomodel
aparezcan en la carga.Usa
model.browse(i)
omodel.search(i)
en lugar del formato predeterminado de registro objetivo si el webhook servirá para crear registros en la base de datos de Odoo.Haz clic en Agregar una acción en la pestaña Acciones a realizar para definir las acciones que se ejecutarán.
Prueba el webhook antes de implementarlo en el sistema externo, así te asegurarás de que funciona.
Truco
También puedes crear webhooks desde el menú Automatizaciones en Studio si seleccionas el activador Al usar webhook.
Para acceder al historial de solicitudes API si la opción Registrar llamadas está activa, haz clic en el botón inteligente Registros que se encuentra en la parte superior del formulario Reglas de automatización.
Debes elegir la acción Ejecutar código si el propósito del webhook no es actualizar un registro existente, por ejemplo, crear un registro nuevo.
Probar un webhook¶
Para probar un webhook necesitas una carga de prueba y una herramienta o sistema externo, como Postman, para enviar la carga mediante una solicitud API POST
. En esta sección encontrarás los pasos para probar un webhook en Postman.
Truco
Consulta la sección de casos de uso de los webhook para conocer todos los pasos para probar los webhooks con cargas de prueba.
Contacta al equipo de soporte de Postman si necesitas ayuda específica sobre cómo probar un webhook con este sistema.
Crea una nueva petición HTTP en Postman y configura su método con POST.
Copia la URL del webhook desde tu base de datos de Odoo con el icono (enlace) y pégalo en el campo URL en Postman.
Haz clic en la pestaña Cuerpo y selecciona raw (sin procesar).
Selecciona JSON como tipo de archivo, luego copia el código de la carga de prueba y pégalo en el editor de código.
Haz clic en Enviar.
El visualizador de respuestas que se encuentra en la parte inferior de la pantalla de Postman indica si el webhook está funcionando correctamente o no, así como algunos detalles y el código de estado de respuesta HTTP.
Los mensajes
200 OK
ystatus: ok
indican que el webhook funciona de forma correcta en Odoo. Ahora podrás implementarlo en el otro sistema para enviar las solicitudes API a la URL del webhook de Odoo en automático.Si aparece otra respuesta, el número asociado con ella te ayudará a identificar el problema. Por ejemplo, el mensaje
500 Internal Server Error
indica que Odoo no pudo interpretar la llamada. En este caso, asegúrate de que los campos del archivo JSON están correctamente vinculados en la configuración del webhook y en el sistema que envía la llamada de prueba.
Truco
Si activas el registro de llamadas en la configuración del webhook en Odoo podrás consultar el registro de los errores si el webhook no funciona como debería.
Implementar un webhook en un sistema externo¶
Una vez que hayas creado el webhook con éxito en Odoo y lo hayas probado, deberás implementarlo en el sistema que envía los datos a la base de datos de Odoo. Asegúrate de que las solicitudes `POST`a la API se envíen a la URL del webhook.
Casos de uso del webhook¶
A continuación encontrarás dos ejemplos del uso de webhooks en Odoo. Cada ejemplo cuenta con una carga de prueba y podrás encontrarlas en la sección «Prueba del webhook». El servicio que utilizaremos para enviar estas cargas es Postman.
Actualizar la moneda de una orden de venta¶
Este webhook actualiza una orden de venta en la aplicación Ventas a USD
cuando el sistema externo envía una solicitud POST
de API a la URL del webhook que incluye el número de esa orden de venta (que se identifica por el registro id
de la carga).
Esto podría ser útil para las filiales que no están ubicadas en los Estados Unidos pero que sí tienen una empresa matriz ubicada en ese país o al consolidar datos en una base de datos de Odoo durante alguna fusión o adquisición.
Crear un webhook¶
Sigue las instrucciones para crear este webhook:
Abre la aplicación Ventas, después abre Studio y haz clic en Webhooks. El modelo Orden de venta estará seleccionado de forma predeterminada.
Haz clic en Nuevo. El activador está configurado con la opción Al usar webhook de forma predeterminada.
Configura Registro objetivo con el valor
model.env[payload.get('model')].browse(int(payload.get('id')))
, donde:payload.get('model')
obtiene el valor relacionado con la clave demodel
en la carga; en este caso essale.order
, que es el nombre técnico del modelo Orden de venta.payload.get('id')
obtiene el valor relacionado con la clave deid
en la carga; en este caso es el número de la orden de venta objetivo en tu base de datos Odoo, pero elimina laS
y los ceros a la izquierda.int
convierte el id recuperado a un valor de tipo integer (es decir, un número entero) porque el métodobrowse()
solo es compatible con los enteros.
Haz clic en Agregar una acción.
Haz clic en Actualizar registro dentro de la sección Tipo.
Selecciona Actualizar en la sección Detalles de la acción, elige el campo Moneda y selecciona USD.
Haz clic en Guardar y cerrar.
Prueba del webhook¶
Sigue estos pasos para probar el webhook:
Abre Postman, crea una nueva petición HTTP y selecciona POST como método.
Copia la URL del webhook de Odoo con el icono (enlace) y pégalo en el campo URL de Postman.
Haz clic en la pestaña Cuerpo y selecciona raw (sin procesar).
Elige JSON como tipo de archivo, luego copia este código (es la carga) y pégalo en el editor de código:
{ "model": "sale.order", "id": "SALES ORDER NUMBER" }
Elige una orden de venta para probar el webhook en tu base de datos de Odoo. Una vez que hayas pegado el código, reemplaza
SALES ORDER NUMBER
con el número de la orden de venta sin laS
ni los ceros antes del número. Por ejemplo, para ingresar la orden de venta con el númeroS00007
, en Postman tendrías que escribir7
.Haz clic en Enviar.
Revisa el visualizador de respuestas en Postman para determinar si el webhook funciona correctamente. Si en la pantalla no aparece el mensaje
200 OK
ostatus: ok
, entonces el código de la respuesta te ayudará a identificar el problema.
Crear un nuevo contacto¶
Este webhook utiliza código personalizado para crear un nuevo contacto en una base de datos de Odoo cuando el sistema externo envía una solicitud de API POST
a la URL del webhook que incluye la información del contacto. Esto podría ser útil para crear nuevos proveedores o clientes en automático.
Crear un webhook¶
Sigue las instrucciones para crear este webhook:
Abre la aplicación Contactos, luego abre Studio y haz clic en Webhooks. El modelo Contacto está seleccionado de forma predeterminada.
Haz clic en Nuevo. El activador está configurado con la opción Al usar webhook de forma predeterminada.
El registro objetivo debe ser
model.browse([2])
. Funcionará como marcador de posición, ya que el código en la acción automatizada le dice al webhook qué necesita obtener de la carga y en qué modelo debe crear el registro.Haz clic en Agregar una acción.
Haz clic en Ejecutar código en la sección Tipo.
Copia este código y pégalo en el editor de código en la pestaña Código de la sección Detalles de la acción:
# variables to retrieve and hold data from the payload contact_name = payload.get('name') contact_email = payload.get('email') contact_phone = payload.get('phone') # a Python function to turn the variables into a contact in Odoo if contact_name and contact_email: new_partner = env['res.partner'].create({ 'name': contact_name, 'email': contact_email, 'phone': contact_phone, 'company_type':'person', 'customer_rank': 1, }) # an error message for missing required data in the payload else: raise ValueError("Missing required fields: 'name' and 'email'")
Haz clic en Guardar y cerrar.
Prueba del webhook¶
Sigue estos pasos para probar el webhook:
Crea una nueva petición HTTP en Postman y configura su método con POST.
Copia la URL del webhook de Odoo con el icono (enlace) y pégalo en el campo URL de Postman.
Haz clic en la pestaña Cuerpo y selecciona raw (sin procesar).
Elige JSON como tipo de archivo, luego copia este código (es la carga) y pégalo en el editor de código:
{ "name": "CONTACT NAME", "email": "CONTACTEMAIL@EMAIL.COM", "phone": "CONTACT PHONE NUMBER" }
Reemplaza
CONTACT NAME
(nombre del contacto),CONTACTEMAIL@EMAIL.COM`(correo del contacto) y `CONTACT PHONE NUMBER
(teléfono del contacto) con la información del nuevo contacto en el código que pegaste.Haz clic en Enviar.
Revisa el visualizador de respuestas en Postman para determinar si el webhook funciona correctamente. Si en la pantalla no aparece el mensaje
200 OK
ostatus: ok
, entonces el código de la respuesta te ayudará a identificar el problema.