Webhooks
¿Qué son los webhooks?
Los webhooks permiten suscribirte a ciertos eventos que occuren a nivel de recurso en la api de a3factura. Por ejemplo, puedes suscribirte a un webhook de clientes para que cuando desde la aplicación o vía API se dé de alta un nuevo cliente, se envíe una petición POST a tu servidor que te avisará que se ha producido un evento de alta.
Los recursos de la API permiten suscribirse a notificaciones de cambio, siendo principalmente Updated, Created y Deleted.
Recursos que permiten configurar webhooks
Te detallamos la relación de recursos y acciones que permiten suscripción:
Recurso |
---|
Customer.Created |
Customer.Deleted |
Customer.Updated |
Product.Created |
Product.Deleted |
Product.Updated |
Supplier.Created |
Supplier.Deleted |
Supplier.Updated |
Representative.Created |
Representative.Deleted |
Representative.Updated |
Contact.Created |
Contact.Deleted |
Contact.Updated |
Due.Created |
Due.Deleted |
Due.Updated |
SaleInvoice.Created |
SaleInvoice.Deleted |
SaleInvoice.Updated |
PurchaseInvoice.Created |
PurchaseInvoice.Deleted |
PurchaseInvoice.Updated |
SaleOffer.Created |
SaleOffer.Deleted |
SaleOffer.Updated |
SaleOrder.Created |
SaleOrder.Deleted |
SaleOrder.Updated |
PurchaseOrder.Created |
PurchaseOrder.Deleted |
PurchaseOrder.Updated |
SaleDeliveryNote.Created |
SaleDeliveryNote.Deleted |
SaleDeliveryNote.Updated |
PurchaseDeliveryNote.Created |
PurchaseDeliveryNote.Deleted |
PurchaseDeliveryNote.Updated |
Bank.Created |
Bank.Deleted |
Bank.Updated |
IncomeType.Created |
IncomeType.Deleted |
IncomeType.Updated |
ExpenseType.Created |
ExpenseType.Deleted |
ExpenseType.Updated |
CompanyData.Updated |
CompanySettings.Updated |
Configurando tu servidor
Antes de poder suscribirte a un webhook, es necesario que configures tu servidor para recibir las peticiones HTTP POST que se van a realizar. Algunos aspectos básicos que esperamos de tu endpoint son:
- Debe utilizar HTTPS sobre el puerto estándar 443
- Tiene que responder a la petición HTTP POST antes de 5 segundos con una respuesta HTTP 2xx.
- Los headers de respuesta no deben contener cookies.
- Si la firma es inválida, deberás devolver un error HTTP 401.
Suscribirme a un webhook
Para crear un nuevo webhook deberás enviar una petición POST al endpoint api/webhooks
con el siguiente body:
uri
: Tiene que tener el formatohttps://{baseaddress}/api/webhooks/incoming/a3Factura
donde {baseaddress} es la url desde donde se está haciendo la petición.entity
: entidad al que se quiere subscribir.action
: tipo de acción al que se quiere subscribir. (Created, Updated, Deleted).secret
: string para indentificar quién hace la llamada.isPaused
: indica si se quiere pausar o no la subscripcion.applicationName
: nombre de la aplicación receptora.description
: descripción del hook.
POST /a3factura/api/webhooks HTTP/1.1
Host: a3api.wolterskluwer.es
Ocp-Apim-Subscription-Key: 2kxwf5rb7ffb65dd5
Authorization: Bearer eyJhbG ...
Content-Type: application/json
Content-Length: 376
{
"uri": "http://{baseaddress}/api/webhooks/incoming/a3Factura",
"entity": "Supplier",
"action": "Updated",
"secret": "12345678901234567890123456789012",
"isPaused": false,
"applicationName": "Test",
"descripion": "Test"
}
En este momento, nuestra plataforma de webhooks comprobará si el servidor al que quiere enviar los eventos está escuchando, por lo que realizará una petición GET a la URI proporcionada, agregando el parámetro ?echo=GUID
al final de la URL. El valor de este GUID
debe ser devuelto como respuesta en el body-response
de la petición GET para que la suscripción sea efectiva.
Notificación del webhook
Cuando se produce un evento, la notificación enviada a tu servidor es el siguiente objeto:
public class WebHookNotificationCommand
{
public string Entity { get; set; }
public string EntityId { get; set; }
public string TenantId { get; set; }
public string User { get; set; }
public List<AttributeChanged> Changes { get; set; }
}
public class AttributeChanged
{
public string Name { get; set; }
public string Value { get; set; }
}
GET All webhooks
Para obtener todos los webhook a los que estás suscrito, puedes enviar una petición GET
al endpoint /api/webhooks
GET /a3factura/api/webhooks HTTP/1.1
Host: a3api.wolterskluwer.es
Ocp-Apim-Subscription-Key: 2kxwf5rb7ffb65dd5
Authorization: Bearer eyJhbG...
Content-Type: application/json
Unsubscribe de un webhook
Para eliminar la suscripción a un webhook, deberás enviar una petición DELETE
al endpoint /api/webhooks/{id}
DELETE /a3factura/api/webhooks/{id} HTTP/1.1
Host: a3api.wolterskluwer.es
Ocp-Apim-Subscription-Key: 2kxwf5rb7ffb65dd5
Authorization: Bearer eyJhbG...
Content-Type: application/json