Ir al contenido
WhatsMarketingDeveloper Hub

Recetas

Patrones que se repiten en casi todas las integraciones. Cada receta usa solo lo que ya existe en la API.

Formulario web → contacto → campaña de bienvenida

  1. Tu formulario envía los datos a tu servidor (nunca llames a la API desde el navegador: expondrías la clave).
  2. El servidor hace POST /contacts con source: "WEBSITE_FORM" y el consentimiento.
  3. Si responde 409 CONTACT_PHONE_EXISTS, usa contactId y haz PATCH /contacts/{id} para añadir la etiqueta de la campaña.
  4. En el panel, una automatización con disparador «entra en la etapa Lead nuevo» envía la plantilla de bienvenida. No hace falta código para el envío.

Sincronizar con tu CRM (HubSpot, Zoho, Pipedrive, Salesforce)

Del CRM a WhatsMarketing: cuando se crea o cambia un contacto en el CRM, POST /contacts o PATCH /contacts/{id}; guarda el id de WhatsMarketing en un campo personalizado del CRM para no buscar cada vez.

De WhatsMarketing al CRM: suscríbete a contact.created, contact.updated y contact.stage_changed. Cada evento trae el contactId y los datos básicos; pide la ficha si necesitas más, actualiza el CRM y, si la etapa cambió a «Cliente», mueve el negocio en el CRM.

Consejo: etiqueta en WhatsMarketing con el identificador del CRM (crm:12345) y filtra por tag cuando necesites cruzarlos.

Aviso en Slack cuando termina una campaña

Suscríbete a campaign.finished. El evento trae el id de la campaña; pide el detalle y publícalo con un webhook entrante de Slack:

Node.js
app.post('/webhooks/wm', express.raw({ type: 'application/json' }), async (req, res) => {
  if (!verificar(req.body.toString(), req.header('X-WM-Signature'), SECRETO)) return res.status(401).end();
  res.status(200).end();
  const { event, data } = JSON.parse(req.body);
  if (event !== 'campaign.finished') return;
  const r = await fetch(`https://micuenta.whatsmarketing.es/api/v1/campaigns/${data.campaignId}`, {
    headers: { Authorization: `Bearer ${process.env.WM_API_KEY}` },
  });
  const c = await r.json();
  await fetch(process.env.SLACK_WEBHOOK, {
    method: 'POST',
    headers: { 'Content-Type': 'application/json' },
    body: JSON.stringify({ text: `Campaña «${c.name}» terminada: ${c.stats.delivered} entregados, ${c.stats.replied} respuestas.` }),
  });
});

Lanzar una campaña desde tu sistema

curl
# 1. Crear el borrador
curl -X POST $API/campaigns -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" \
  -d '{"name":"Recordatorio de cita","phoneNumberId":"…","templateId":"…","variables":{"1":"{{fullName}}"}}'
# 2. Audiencia por etiqueta
curl -X POST $API/campaigns/$ID/recipients -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" -d '{"tag":"cita-manana"}'
# 3. Coste antes de enviar
curl $API/campaigns/$ID/preview-cost -H "Authorization: Bearer $KEY"
# 4. Enviar ahora
curl -X POST $API/campaigns/$ID/send -H "Authorization: Bearer $KEY" -H "Content-Type: application/json" -d '{"when":"now"}'

Si preview-cost dice wallet.sufficient: false, recarga la wallet en el panel antes de enviar: el envío respondería 400 «Saldo insuficiente en la wallet.».

Sin código: n8n, Make y Zapier

Mientras no haya nodos oficiales, usa el nodo HTTP de cada herramienta:

  • Autenticación: cabecera Authorization: Bearer wm_live_… (en n8n, credencial «Header Auth»).
  • Entrada: un nodo «Webhook» recibe los eventos; verifica X-WM-Signature con un nodo de código (el ejemplo de Webhooks vale tal cual en n8n).
  • Salida: nodos HTTP con las rutas de la referencia.

Las plantillas listas para importar (HubSpot, Zoho, Pipedrive, formulario web, aviso de saldo en Slack) llegarán al panel; las anunciaremos en el changelog.