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
<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).
<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)
window.DiloEmbed.setContext({
externalId: user.tenant.externalId,
})Opción 3 — Token firmado (producción)
1. Tu servidor pide un token
POST /api/embed/contextcon sesión del workspace Dilo.2. Dilo devuelve el token
{ "token": "...", "expiresAt": "...", "client": { ... }, "flowId": "..." }3. Pasas el token al widget
DiloEmbed.setContext({ ctx: token })o iframe?embed=1&ctx=TOKEN
{
"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:
- «¿Cuál es tu nombre?» → variable
nombre - «Email de contacto» → tipo email
- «¿De qué empresa eres?» → variable
empresa - «Describe el problema» → variable
descripcion
Con contexto completo:
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:
| Dato | Se omite si pasaste… | Variables reconocidas |
|---|---|---|
| Nombre | contact.name | nombre, nombre_contacto, nombre_solicitante, name, contact_name, full_name |
contact.email | email, email_contacto, correo, correo_electronico — o cualquier paso tipo email | |
| Teléfono | contact.phone | telefono, telefono_contacto, phone, celular, movil — o paso tipo phone |
| Empresa | tenant (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:
{origin}/f/{flowId}?embed=1
&contact_name=Fernando%20Rebellon
&contact_email=fernando@empresa.com
&contact_phone=%2B573001234567Puedes 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:
window.DiloEmbed.setContext({
contact: {
name: user.fullName,
email: user.email,
phone: user.phone,
},
})Qué ocurre por dentro
- Al crear la sesión del flow embebido, Dilo guarda
metadata.embedContext(cliente y/o contacto). - Al mostrar el formulario, los pasos reconocidos se saltan en el chat; los valores se rellenan en la sesión en segundo plano.
- Al completar,
createSupportCaseFromSessionusa 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é pasar | Qué se omite en el formulario |
|---|---|---|
| Solo la empresa | externalId o clientId | Paso «empresa» / selector de cliente |
| Solo el perfil | contact: { name, email, phone } | Pasos de nombre, email, teléfono |
| Empresa + perfil | Ambos en setContext | Empresa + contacto |
| Nada | Snippet sin contexto | El flow pregunta todo al visitante |
Cargar clientes (tenant) en Dilo
- Ve a Clientes en el dashboard.
- Descarga la plantilla Excel y rellena
nombre_comercial+id_en_tu_sistema. - 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)
| Variable | Uso |
|---|---|
DILO_EMBED_CONTEXT_SECRET | Firma de tokens embed |
NEXT_PUBLIC_APP_URL | Origen en snippets (https://getdilo.io) |
Si no defines DILO_EMBED_CONTEXT_SECRET, Dilo usa DILO_INTEGRATION_SECRETS_KEY como fallback.
Siguiente lectura
- API JavaScript — firma de
setContexty URLs del iframe - Soporte con IA — deflexión + formulario + creación de casos