Cómo colaboran la app sin conexión, la API del CRM y la captación de leads, además de lo que ya incluye la app.
El formulario de solicitud envía directamente a la API LeadIntake del CRM, sin servidor intermedio.
<!-- POST mediante fetch → https://launcherp.be/api/v1/leads --> { "name": "...", // nombre "email": "...", // correo electrónico (obligatorio) "company": "...", // empresa "plan": "hidden", // plan elegido (desde prijzen.html) "source": "salesonipad" // fuente → el lead se etiqueta en el CRM }
✓ El campo honeypot website filtra bots. ✓ Error de red → aviso claro, sin leads perdidos.
// config/cors.php 'paths' => ['api/*', 'sanctum/csrf-cookie'], 'allowed_origins' => [env('APP_URL'), 'https://salesonipad.com'], // bootstrap/app.php — excepción CSRF para el endpoint de leads ->withMiddleware(function (Middleware $middleware) { $middleware->validateCsrfTokens(except: ['api/v1/leads']); })
✓ El LeadIntakeController existente procesa los datos; no se necesita backend nuevo.
La app ya se sincroniza con la API del CRM mediante los mismos patrones que los pedidos. Estos módulos ya funcionan y solo hay que conectarlos.
scripts/leads.jsnovasync.syncLeads) y App → CRM (cola erp="send")crm:<uuid> o lead:<ts>) — nunca duplicadosscripts/opportunities.jspdf.js: creditNotaFromFactuurscripts/novasync.jsQué ocurre en el iPad y en el CRM.
| Componente | Funcionamiento |
|---|---|
| Protección con PIN | Cierra la app frente al uso no autorizado |
| Copia de seguridad en Dropbox | OAuth 2.0 PKCE — copia de seguridad con un solo toque, restauración posterior en el mismo iPad o en uno nuevo |
| Cola sin conexión | Los pedidos pendientes sobreviven a un reinicio; cola de copia de seguridad separada |
| Preparado para Peppol | Campos para la facturación electrónica presentes; el módulo del CRM genera la factura electrónica UBL como descarga. El envío a través de un Peppol Access Point todavía no está operativo. |
| PWA / sin conexión | El service worker guarda en caché la app completa — funciona sin red |
La app es una Progressive Web App: los representantes la instalan en su iPad sin App Store y funciona completamente sin conexión.
La combinación utiliza la sincronización existente — sin infraestructura nueva.
1. CRM-account aangemaakt (Stripe checkout) 2. SalesOnIPad-licentie gekoppeld aan het CRM-bedrijf 3. App weet via config welk sync-endpoint te gebruiken 4. Sync loopt automatisch — gebruikers zien "gesynchroniseerd" in de app 5. CRM opzeggen = sync stopt; de app blijft lokaal werken
Los pedidos, leads, oportunidades y notas de crédito ya usan el mismo patrón de sincronización. El módulo de venta de campo los conecta al panel del CRM.
Lo que queda por hacer para poner en marcha la conexión.
| Paso | Trabajo | Estado |
|---|---|---|
| 1. Captación de leads en línea | Enviar el formulario a la API + CORS | Listo (testwebsite) |
| 2. Módulo de venta de campo | Activar CRMModules + precios | Siguiente paso |
| 3. Conectar la sincronización | Conectar endpoints por cliente | Piloto |
| 4. Upsell en el checkout | Stripe + página de bienvenida | Ampliación |