Tú construyes la experiencia. Apointoo guarda la prueba.
Next.js, Vue, WordPress, páginas de destino personalizadas, tu propio formulario o un flujo de reservas. Apointoo funciona como la capa de atribución detrás. Handler-first, completamente tipado, tree-shakeable. Funciona en Node.js, Deno, Cloudflare Workers y cualquier runtime de edge con la Fetch API.
npm install git+https://github.com/vizuh/apointoo-sdk.gitnpmInicio rápido
Captura eventos vía API o SDK, preserva el GCLID, los UTMs y los datos de sesión, y envía leads, reservas y actualizaciones de resultados a través de tu ruta /api/* en Next.js, Hono o Express.
import { createBookingHandler } from '@vizuh/apointoo-sdk/server'
import { brevoRestAdapter } from '@vizuh/apointoo-sdk/adapters/notification/brevo-rest'
import { directConfirmAdapter } from '@vizuh/apointoo-sdk/adapters/booking/direct-confirm'
export const app = createBookingHandler({
config: {
projectKey: 'your-clinic',
locale: 'en-US',
timezone: 'America/New_York',
},
booking: directConfirmAdapter(),
notification: brevoRestAdapter({ apiKey: env.BREVO_API_KEY }),
})Adaptadores
Cada integración es un adaptador tree-shakeable para los sistemas donde ocurren las conversiones. Importa solo lo que usas.
| Adaptador | Tipo | Estado | Importación |
|---|---|---|---|
| BLVD | booking | production | @vizuh/apointoo-sdk/adapters/booking/blvd |
| OpenDental | booking | beta | @vizuh/apointoo-sdk/adapters/booking/open-dental |
| direct-confirm | booking | production | @vizuh/apointoo-sdk/adapters/booking/direct-confirm |
| Brevo REST | notification | production | @vizuh/apointoo-sdk/adapters/notification/brevo-rest |
| Twilio WhatsApp | notification | beta | @vizuh/apointoo-sdk/adapters/notification/twilio-whatsapp |
| Sheets | persistence | production | @vizuh/apointoo-sdk/adapters/persistence/sheets |
| Upstash | dedup | production | @vizuh/apointoo-sdk/adapters/dedup/upstash |
Arquitectura
Un handler es el punto de entrada. Ejecuta el pipeline que mantiene la atribución en cada paso y envía la conversión confirmada a Google Ads a través de los adaptadores configurados.
Variables de entorno
La configuración se hace mediante variables de entorno. Sin archivos de configuración específicos del SDK. Pon las claves, despliega, publica.
| Variable | Requerida | Descripción |
|---|---|---|
| NEXT_PUBLIC_GTM_ID | No | ID del contenedor de Google Tag Manager. Déjalo vacío para desactivar GTM. |
| HEADLESS_WP_URL | No | Endpoint GraphQL de WordPress para el contenido de /docs y /blog. |
| BREVO_API_KEY | No | Clave de API REST de Brevo (Sendinblue) para el adaptador de notificaciones de Brevo. |
| BLVD_API_KEY | No | Clave de API de BLVD para el adaptador de reservas de BLVD. |
| UPSTASH_REDIS_URL | No | URL REST de Upstash Redis para el adaptador de deduplicación. |
| UPSTASH_REDIS_TOKEN | No | Token REST de Upstash Redis. |
| GOOGLE_SHEETS_SPREADSHEET_ID | No | ID de la hoja de cálculo de Google Sheets para el adaptador de persistencia. |