Documentación

Contexto de cliente y contacto

Pasa tenant, nombre, email y teléfono al widget — Dilo omite esas preguntas del formulario y crea el caso con los datos correctos.

Si tu producto ya sabe quién es el usuario y de qué empresa es, no hace falta volver a preguntarlo en el formulario de soporte. Dilo recibe ese contexto al abrir el widget y salta los pasos que ya puedes responder tú.

Escenarios

A — SaaS con login (recomendado)
Un solo dashboard. Cada usuario tiene tenant + perfil. Al cargar o cambiar de sesión llamas DiloEmbed.setContext con externalId y contact.

B — Snippet fijo por portal
Cada cliente tiene su propio embed con data-external-id estático (empresa fija; el contacto suele ir por setContext tras login).


Tenant / empresa

Opción 1 — Parámetro en el script

ID externo del tenant
<script
  src="https://getdilo.io/embed.js"
  data-flow="TU_FLOW_UUID"
  data-mode="bubble"
  data-external-id="tenant_4821"
></script>

El external_id debe coincidir con id_en_tu_sistema del cliente en Dilo (plantilla Excel en Clientes).

UUID de cliente Dilo
<script
  src="https://getdilo.io/embed.js"
  data-flow="TU_FLOW_UUID"
  data-client="CLIENT_UUID_EN_DILO"
></script>

Opción 2 — API JavaScript (runtime)

setContext con tenant
window.DiloEmbed.setContext({
  externalId: user.tenant.externalId,
})

Opción 3 — Token firmado (producción)

  1. 1. Tu servidor pide un token

    POST /api/embed/context con sesión del workspace Dilo.

  2. 2. Dilo devuelve el token

    { "token": "...", "expiresAt": "...", "client": { ... }, "flowId": "..." }

  3. 3. Pasas el token al widget

    DiloEmbed.setContext({ ctx: token }) o iframe ?embed=1&ctx=TOKEN

POST /api/embed/context
{
  "flowId": "uuid-del-flow",
  "externalId": "tenant_4821",
  "ttlSeconds": 3600
}

Datos de contacto (nombre, email, teléfono)

Si tu app conoce el perfil del usuario logueado, pásalo en contact. Dilo no mostrará en el chat las preguntas que ya puedes responder.

Ejemplo: flow con «¿Cuál es tu nombre?»

Imagina un flow de soporte con estos pasos:

  1. «¿Cuál es tu nombre?» → variable nombre
  2. «Email de contacto» → tipo email
  3. «¿De qué empresa eres?» → variable empresa
  4. «Describe el problema» → variable descripcion

Con contexto completo:

Usuario logueado en tu app
window.DiloEmbed.setContext({
  externalId: user.tenant.externalId,
  contact: {
    name: user.fullName,
    email: user.email,
    phone: user.phone,
  },
})

Qué ve el usuario: entra directo (o tras deflexión) a «Describe el problema». No aparecen nombre, email ni empresa en el hilo conversacional.

Qué recibe tu equipo: el caso en Soporte incluye nombre, email, tenant y descripción — aunque el usuario no escribió los tres primeros campos.

Cómo sabe Dilo qué pasos saltar

Dilo compara el nombre de variable del paso (sin tildes, minúsculas) y el tipo del paso:

DatoSe omite si pasaste…Variables reconocidas
Nombrecontact.namenombre, nombre_contacto, nombre_solicitante, name, contact_name, full_name
Emailcontact.emailemail, email_contacto, correo, correo_electronico — o cualquier paso tipo email
Teléfonocontact.phonetelefono, telefono_contacto, phone, celular, movil — o paso tipo phone
Empresatenant (externalId / clientId)empresa, company, compania, nombre_empresa, organizacion, etc.

Pasar contacto por URL (iframe)

Útil en pruebas o iframes propios. El loader embed.js también acepta query al construir el iframe:

Parámetros de contacto
{origin}/f/{flowId}?embed=1
  &contact_name=Fernando%20Rebellon
  &contact_email=fernando@empresa.com
  &contact_phone=%2B573001234567

Puedes combinar tenant + contacto:

/f/{flowId}?embed=1&external_id=6&contact_name=Fernando&contact_email=f@empresa.com

Solo contacto, sin tenant

Válido si no necesitas omitir empresa:

Solo perfil de usuario
window.DiloEmbed.setContext({
  contact: {
    name: user.fullName,
    email: user.email,
    phone: user.phone,
  },
})

Qué ocurre por dentro

  1. Al crear la sesión del flow embebido, Dilo guarda metadata.embedContext (cliente y/o contacto).
  2. Al mostrar el formulario, los pasos reconocidos se saltan en el chat; los valores se rellenan en la sesión en segundo plano.
  3. Al completar, createSupportCaseFromSession usa esos datos para el solicitante del caso (nombre, email, teléfono, empresa).

Si el flow tiene el conector «Crear caso de soporte al completar el flow» activo, el ticket llega a la bandeja con toda la información aunque el usuario solo respondió asunto y descripción.


Cuándo usar tenant vs contacto

Tu app sabe…Qué pasarQué se omite en el formulario
Solo la empresaexternalId o clientIdPaso «empresa» / selector de cliente
Solo el perfilcontact: { name, email, phone }Pasos de nombre, email, teléfono
Empresa + perfilAmbos en setContextEmpresa + contacto
NadaSnippet sin contextoEl flow pregunta todo al visitante

Cargar clientes (tenant) en Dilo

  1. Ve a Clientes en el dashboard.
  2. Descarga la plantilla Excel y rellena nombre_comercial + id_en_tu_sistema.
  3. Sube el archivo — Dilo hace upsert por external_id.

En Configuración → Conexiones puedes copiar el snippet y probar con un cliente de ejemplo.


Variables de entorno (servidor)

VariableUso
DILO_EMBED_CONTEXT_SECRETFirma de tokens embed
NEXT_PUBLIC_APP_URLOrigen en snippets (https://getdilo.io)

Si no defines DILO_EMBED_CONTEXT_SECRET, Dilo usa DILO_INTEGRATION_SECRETS_KEY como fallback.

Siguiente lectura