Appearance
Analítica de producto
Generado desde
DialerDigital/corecommit0fc18008b3c8— especificaciónopenapi/dialer-v1.yamlv0.134.0. No se edita a mano; consulta Cómo se construye esta referencia. Descargar la especificación OpenAPI.
Traducción en curso
Esta referencia se genera desde la especificación OpenAPI. Las cadenas que todavía no tienen traducción aparecen en inglés.
Analítica de producto y NPS dentro de la consola, propios y sin terceros (macro-tasks#876): eventos de uso como claves de un catálogo cerrado, y la pregunta de NPS para los administradores de la cuenta. Siempre activa; nunca lleva datos de un consumidor.
Endpoints
| Método | Ruta | Resumen |
|---|---|---|
POST | /v1/product-analytics/events | Registrar los eventos de uso de la consola del usuario que llama |
GET | /v1/product-analytics/nps | ¿Toca hacer la pregunta de NPS al usuario que llama? |
POST | /v1/product-analytics/nps | Responder la pregunta de NPS, o descartarla |
Registrar los eventos de uso de la consola del usuario que llama
http
POST /v1/product-analytics/eventsLa consola informa de qué pantalla abrió un usuario y qué función usó. Cada evento es una CLAVE de un catálogo cerrado (screen.<route> o feature.<function>): no hay campo de texto libre, así que ningún dato de un consumidor puede viajar en uno. El servidor estampa la hora y el tenant (los del login, nunca de la entrada del cuerpo). Las claves fuera del catálogo se descartan y se cuentan en rejected, de modo que una consola más nueva que el servidor no rompe nada. Como máximo 50 claves por petición. Los eventos se conservan 180 días.
Requiere un login de dashboard: una clave dd_ no tiene persona detrás y recibe 403.
Cuerpo de la petición (JSON, obligatorio)
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
events | arreglo de string | sí |
Respuestas
202
Aceptado; cuántas claves se almacenaron y cuántas se descartaron.
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
accepted | integer | sí | |
rejected | integer | sí |
400 — BadRequest
Petición mal formada (errores de forma/tipo, filtros no válidos, marcas de tiempo erróneas).
json
{
"error": {
"code": "bad_request",
"message": "from must be RFC-3339"
}
}401 — Unauthorized
Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.
json
{
"error": {
"code": "unauthorized",
"message": "invalid or revoked API key"
}
}403 — Forbidden
El tenant está suspendido. Una sesión del dashboard (ddu_) de un tenant cuya política de inicio de sesión (ADR 227) está en modo enforce responde 403 con el código login_policy_denied ante una solicitud desde una dirección o en una hora que la política no permite — el mismo cuerpo en ambos casos; la sesión no se revoca y una solicitud posterior dentro de la política se procesa. Un token de widget (ddw_) de un puesto queda sujeto a la misma política en cada solicitud (core#2406, indicador widget_login_honors_policy). Un tenant sintético (demo) responde 403 con el código synthetic_tenant en toda ruta que llegaría a un tercero — marcación manual, pierna de transferencia externa o de conferencia, envío de SMS (core#2251, adenda del ADR #280). Ningún pago lo cambia.
json
{
"error": {
"code": "forbidden",
"message": "tenant is suspended"
}
}¿Toca hacer la pregunta de NPS al usuario que llama?
http
GET /v1/product-analytics/npsdue es true solo para un account_admin cuyo último registro de NPS (una respuesta o un descarte) tiene al menos interval_days de antigüedad, o que no tiene ninguno. Cualquier otro usuario recibe due: false. Requiere un login de dashboard.
Respuestas
200
Si hay que preguntar ahora.
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
due | boolean | sí | |
interval_days | integer | sí |
401 — Unauthorized
Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.
json
{
"error": {
"code": "unauthorized",
"message": "invalid or revoked API key"
}
}403 — Forbidden
El tenant está suspendido. Una sesión del dashboard (ddu_) de un tenant cuya política de inicio de sesión (ADR 227) está en modo enforce responde 403 con el código login_policy_denied ante una solicitud desde una dirección o en una hora que la política no permite — el mismo cuerpo en ambos casos; la sesión no se revoca y una solicitud posterior dentro de la política se procesa. Un token de widget (ddw_) de un puesto queda sujeto a la misma política en cada solicitud (core#2406, indicador widget_login_honors_policy). Un tenant sintético (demo) responde 403 con el código synthetic_tenant en toda ruta que llegaría a un tercero — marcación manual, pierna de transferencia externa o de conferencia, envío de SMS (core#2251, adenda del ADR #280). Ningún pago lo cambia.
json
{
"error": {
"code": "forbidden",
"message": "tenant is suspended"
}
}Responder la pregunta de NPS, o descartarla
http
POST /v1/product-analytics/npsEnvía { "score": 0..10, "comment": "..." } (el comentario es opcional, de 500 caracteres como máximo) o { "dismissed": true }. Ambos aplazan la siguiente pregunta interval_days. Solo un account_admin responde (403 en caso contrario); preguntar de nuevo antes de que pase el intervalo es 409. El comentario es texto libre que escribe una persona: la consola le pide que no ponga datos de clientes en él.
Cuerpo de la petición (JSON, obligatorio)
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
score | integer | no | |
comment | string | no | |
dismissed | boolean | no |
Respuestas
201
El registro almacenado.
| Campo | Tipo | Obligatorio | Descripción |
|---|---|---|---|
response | object | sí | |
response.outcome | answered · dismissed | sí | |
response.score | integer,null | sí | |
response.comment | string,null | sí |
400 — BadRequest
Petición mal formada (errores de forma/tipo, filtros no válidos, marcas de tiempo erróneas).
json
{
"error": {
"code": "bad_request",
"message": "from must be RFC-3339"
}
}401 — Unauthorized
Clave de API ausente, desconocida o revocada (o, en /v1/admin/*, un token de administración incorrecto o sin definir; en webhooks, una firma incorrecta o ausente). Una sesión del dashboard (ddu_) que un inicio de sesión más reciente de la misma persona haya cerrado responde en cambio con el código session_superseded (indicador de tenant single_session_enforced), para que la pantalla pueda explicar por qué se cerró la sesión; un cierre de sesión, un token vencido o uno desconocido siguen siendo unauthorized.
json
{
"error": {
"code": "unauthorized",
"message": "invalid or revoked API key"
}
}403 — Forbidden
El tenant está suspendido. Una sesión del dashboard (ddu_) de un tenant cuya política de inicio de sesión (ADR 227) está en modo enforce responde 403 con el código login_policy_denied ante una solicitud desde una dirección o en una hora que la política no permite — el mismo cuerpo en ambos casos; la sesión no se revoca y una solicitud posterior dentro de la política se procesa. Un token de widget (ddw_) de un puesto queda sujeto a la misma política en cada solicitud (core#2406, indicador widget_login_honors_policy). Un tenant sintético (demo) responde 403 con el código synthetic_tenant en toda ruta que llegaría a un tercero — marcación manual, pierna de transferencia externa o de conferencia, envío de SMS (core#2251, adenda del ADR #280). Ningún pago lo cambia.
json
{
"error": {
"code": "forbidden",
"message": "tenant is suspended"
}
}409 — Conflict
Transición de estado no válida, conflicto de unicidad, o un asiento que está ocupado/reservado.
json
{
"error": {
"code": "conflict",
"message": "invalid state transition"
}
}