Integracion con Microsoft Dynamics 365
Por que Dynamics 365
Microsoft Dynamics 365 Business Central (antes NAV) es el ERP de referencia para empresas del ecosistema Microsoft. Su integracion nativa con Power Platform, Office 365 y Azure lo hace ideal para empresas que ya usan tecnologias Microsoft.
Lo que puedes integrar
| Proceso | Como se conecta |
|---|---|
| Facturas venta | Webhook Cargoffer -> Power Automate -> Dynamics |
| Clientes | API Cargoffer -> API Dynamics |
| Proveedores | Sincronizacion batch |
| Pagos | Conciliacion automatica |
Opcion 1: Power Automate (sin codigo)
Recomendada para equipos sin desarrollo. Crea un flujo que:
- Trigger: HTTP request (recibe webhook de Cargoffer)
- Accion: Buscar cliente en Dynamics por CIF
- Condicion: Si existe -> crear factura. Si no -> crear cliente + factura
- Accion: Crear factura venta en Dynamics 365
Plantilla Power Automate
Para importar esta plantilla en Power Automate:
- Ve a https://make.powerautomate.com
- Importa -> Carga el archivo
- Configura las conexiones a Cargoffer y Dynamics
json
{
"definition": {
"triggers": {
"when_a_http_request_is_received": {
"type": "OpenApiConnection",
"inputs": {
"host": {
"connectionName": "shared_webhooks",
"operationId": "WhenAHttpRequestIsReceived"
},
"parameters": {
"schema": "{\"type\":\"object\",\"properties\":{\"event\":{\"type\":\"string\"},\"data\":{\"type\":\"object\"}}}"
}
}
}
},
"actions": {
"Create_invoice": {
"type": "OpenApiConnection",
"inputs": {
"host": {
"connectionName": "shared_dynamicssmbsaas",
"operationId": "CreateEntity",
"parameters": {
"entityName": "salesInvoices",
"body": {
"customerId": "@{outputs('Get_customer')['value'][0]['customerId']}",
"postingDate": "@{triggerBody()?['data']?['date']}",
"salesInvoiceLines": [{
"description": "@{concat('Transporte ', triggerBody()?['data']?['serviceCode'])}",
"quantity": 1,
"unitPrice": "@{triggerBody()?['data']?['amount']}"
}]
}
}
}
}
}
}
}
}Opcion 2: API Directa (recomendada para volumen)
bash
# Autenticar en Dynamics
curl -X POST "https://login.microsoftonline.com/tu-tenant/oauth2/v2.0/token" \
-d "client_id=tu_client_id" \
-d "client_secret=tu_secret" \
-d "scope=https://api.businesscentral.dynamics.com/.default" \
-d "grant_type=client_credentials"
# Crear factura
curl -X POST "https://api.businesscentral.dynamics.com/v2.0/tu-tenant/api/v2.0/companies(tu_company_id)/salesInvoices" \
-H "Authorization: Bearer *** \
-H "Content-Type: application/json" \
-d '{
"customerId": "A12345678",
"postingDate": "2026-06-17",
"salesInvoiceLines": [{
"description": "Transporte SRV-2026-001",
"quantity": 1,
"unitPrice": 1250.00
}]
}'Guia paso a paso
Paso 1: Registrar aplicacion en Azure AD
Necesitas una aplicacion registrada en Azure Active Directory con permisos para:
Financials.ReadWrite.AllAutomation.ReadWrite.All
Paso 2: Configurar webhook en Cargoffer
bash
curl -X POST "https://api.pro.cargoffer.com/api/webhook" \
-H "Authorization: Bearer *** \
-H "Content-Type: application/json" \
-d '{
"url": "https://tu-api-azure.azurewebsites.net/cargoffer-webhook",
"events": ["contract.signed"]
}'Paso 3: Procesar con Azure Functions
python
import azure.functions as func
import requests, os
def main(req: func.HttpRequest) -> func.HttpResponse:
evento = req.get_json()
if evento["event"] == "contract.signed":
contrato = evento["data"]
# Obtener token Dynamics
token = obtener_token_dynamics()
# Crear factura
headers = {
"Authorization": f"Bearer {token}",
"Content-Type": "application/json"
}
factura = {
"customerId": contrato["client"]["cif"],
"postingDate": contrato["date"],
"salesInvoiceLines": [{
"description": f"Transporte {contrato['serviceCode']}",
"quantity": 1,
"unitPrice": contrato["amount"]
}]
}
r = requests.post(
f"{DYNAMICS_URL}/salesInvoices",
headers=headers, json=factura
)
return func.HttpResponse(f"Factura creada: {r.status_code}")