Agencias y workspaces
Una agencia que gestiona el WhatsApp de varios clientes separa cada uno en un workspace: una cuenta completa, con sus propios números, contactos, conversaciones, etiquetas, campos, públicos, supresiones, flujos, campañas, plantillas, claves de API, webhooks y sitios. Nada de un cliente aparece en otro. Todos los workspaces están en la suscripción de la agencia: una sola factura, con números, mensajes, contactos y plazas sumados en el grupo.
Los workspaces se crean y gestionan en el panel, en la pantalla Workspaces de la cuenta de la agencia. La API no crea ni elimina workspaces; lo que cambia para una integración está abajo.
Cuántos. El dueño de la cuenta abre un workspace por cada número de WhatsApp que permite el plan, sin pedir nada a nadie: un plan de tres números cubre tres clientes. En un plan sin límite de números, no hay límite de workspaces.
Una clave pertenece a una cuenta
Una clave de API es siempre de una cuenta — la de la agencia o la de un cliente — y solo alcanza lo que es de ella. Para integrar el sitio o el sistema de un cliente, crea la clave dentro de su workspace (entra en el cliente desde el selector de cuentas del panel y ve a Claves de API). Una clave de la cuenta de la agencia no envía por los números de un cliente, y la de un cliente no ve a los demás.
Todo lo demás funciona como en cualquier cuenta: la clave puede limitarse a algunos números, y los webhooks registrados en un workspace reciben solo los eventos de ese cliente.
Saber de quién es la cuenta
GET /account/me trae parent: la agencia que gestiona y paga la cuenta cuando
es el workspace de un cliente, y null en una cuenta común.
{
"data": {
"id": "cm1clinica",
"name": "Clínica Sonrisa",
"parent": { "id": "cm1agencia", "name": "Agencia Acme" },
"wabas": []
}
}
Cobrar a cada cliente lo que usó
GET /workspaces, con la clave sin restricción de números de la cuenta
de la agencia, devuelve el grupo: primero la cuenta de la agencia y después cada workspace, con lo
que consumió en el período de facturación (usage: números conectados, contactos y mensajes). Es
la cifra que la agencia usa para repercutir el costo a cada cliente.
curl https://api.joinotify.com/workspaces \
-H "Authorization: Bearer sk_live_DE_LA_AGENCIA"
La clave de un workspace recibe 409 not_principal, y una clave limitada a números recibe 403:
un cliente nunca se entera de los demás.
Leer los contactos de todos los clientes
GET /contacts?account=all, con la clave sin restricción de números de la agencia, lista los
contactos de la agencia y de todos los workspaces, con los mismos filtros de la lista común;
?account=<id del workspace> lista los de un solo cliente. Cada contacto trae workspace — el
cliente del que viene, o null para los de la propia agencia.
Entregar activos a un cliente
Desde el panel, el dueño de la agencia entrega al workspace de un cliente lo que estaba en la cuenta de la agencia: contactos (los que la agencia aún usa se copian; los demás cambian de cuenta), un flujo (copiado como borrador) y una clave de API. Una clave entregada conserva el mismo secreto: lo que la integración envíe desde entonces llega al cliente. La clave también puede crearse directamente en el workspace, desde la cuenta de la agencia.
El dinero es de la agencia
Un workspace no tiene suscripción, factura, cartera ni programa de afiliados propios. /wallet y
/affiliate responden 409 billed_by_parent con la clave de un workspace; lo que se consulta
sobre facturación se consulta con la clave de la agencia.
Clientes que estaban mezclados
La agencia que ya atendía a varios clientes en una sola cuenta lleva cada uno a su workspace desde
el panel, un WABA a la vez: el WABA llega con sus números, plantillas, conversaciones, contactos
y las claves limitadas solo a esos números. Después, esas claves pasan a ser del workspace — la
integración sigue funcionando sin cambiar la clave, pero GET /account/me pasa a responder con el
cliente y con parent.