Envía automáticamente los datos de la oportunidad a tu sistema de facturación (Stripe, QuickBooks, Xero, etc.) cuando se gana una oportunidad.
Estructura del flujo de trabajo
- Disparador: Se actualiza un registro (Oportunidad)
- Filtro: Etapa = Cerrado ganado
- Search Record: Obtener detalles de la empresa
- Code (opcional): Formatear la carga útil
- HTTP Request: Enviar al sistema de facturación
Paso 1: Configurar el disparador
- Crear un nuevo flujo de trabajo
- Selecciona el disparador Record is Updated
- Elige Opportunity como objeto
Paso 2: Filtrar por Cerrado ganado
Añade una acción Filter para continuar solo cuando la oportunidad esté ganada:
| Configuración | Valor |
|---|
| Campo | Etapa |
| Condición | Igual a |
| Valor | CLOSED_WON (o el nombre de tu etapa) |
El disparador se activa con cualquier actualización de una Oportunidad. El filtro garantiza que el flujo de trabajo solo continúe cuando la etapa cambie a Cerrado ganado.
Paso 3: Obtener detalles de la empresa
Es posible que el registro de Oportunidad no incluya todos los campos de Empresa que necesitas para la factura. Añade una acción Search Record:
| Configuración | Valor |
|---|
| Objeto | Empresa |
| Coincidir por | ID igual a {{trigger.object.companyId}} |
Esto recupera el registro completo de Empresa con dirección de facturación, ID fiscal, etc.
Si tu sistema de facturación exige un formato específico, añade una acción Code:
export const main = async (params: {
opportunity: any;
company: any;
}): Promise<object> => {
const { opportunity, company } = params;
return {
invoice: {
// Customer info from Company
customer_name: company.name,
customer_email: company.email || "",
billing_address: {
line1: company.address?.street || "",
city: company.address?.city || "",
postal_code: company.address?.postalCode || "",
country: company.address?.country || ""
},
tax_id: company.taxId || null,
// Invoice details from Opportunity
amount: opportunity.amount,
currency: opportunity.currency || "USD",
description: `Invoice for ${opportunity.name}`,
due_days: 30,
// Reference back to Twenty
metadata: {
opportunity_id: opportunity.id,
company_id: company.id
}
}
};
};
Paso 5: Enviar al sistema de facturación
Añade una acción HTTP Request:
| Configuración | Valor |
|---|
| Método | POST |
| URL | Tu endpoint de API de facturación |
| Encabezados | Authorization: Bearer YOUR_API_KEY |
| Cuerpo | {{code.invoice}} o asigna los campos directamente |
Ejemplo: Factura de Stripe
POST https://api.stripe.com/v1/invoices
Headers:
Authorization: Bearer sk_live_xxx
Content-Type: application/x-www-form-urlencoded
Body:
customer: {{company.stripeCustomerId}}
collection_method: send_invoice
days_until_due: 30
Ejemplo: Factura de QuickBooks
POST https://quickbooks.api.intuit.com/v3/company/{realmId}/invoice
Headers:
Authorization: Bearer YOUR_ACCESS_TOKEN
Content-Type: application/json
Body: {{code.invoice}}
Resumen completo del flujo de trabajo
| Paso | Acción | Propósito |
|---|
| 1 | Disparador: Registro actualizado | Se activa cuando cambia cualquier Oportunidad |
| 2 | Filtro | Procede solo si la etapa = Cerrado ganado |
| 3 | Search Record | Obtener todos los detalles de Empresa para la facturación |
| 4 | Código | Dar formato a los datos para la API de facturación |
| 5 | Solicitud HTTP | Crear la factura en el sistema externo |
Consejos
- Almacenar IDs externos: Guarda el ID de la factura devuelto por la API en la Oportunidad usando una acción Update Record
- Gestión de errores: Añade una rama para enviar una notificación si la solicitud HTTP falla
- Prueba primero: Utiliza el modo sandbox/pruebas de tu sistema de facturación antes de pasar a producción
Relacionado