Recuperar señales en Zoho requiere una conexión OAuth válida y activa: la plataforma rechazará cualquier solicitud con un token caducado, por lo que tu integración debe gestionar la renovación del token automáticamente antes de realizar llamadas a la API.
Por qué esto es importante
Cuando construyes automatizaciones o paneles que obtienen señales en tiempo real (datos de actividad, recuentos de registros, actualizaciones de estado) desde Zoho CRM o Zoho Desk, un token de acceso desactualizado romperá silenciosamente tu pipeline de datos. Entender cómo funciona la capa de conexión te permite diagnosticar errores 401 rápidamente y mantener la recuperación de señales de forma fiable. Esto es especialmente importante en sesiones de larga duración donde los tokens caducan a mitad del proceso. Como soporte experto independiente para Zoho (no soporte oficial de Zoho), Beam Help te guía a través del flujo completo a continuación.
Paso a paso
Paso 1. Verifica que existe una conexión de Zoho para el usuario.
Antes de intentar recuperar cualquier señal, confirma que hay un registro de conexión presente en tu almacén de datos. La consulta busca en tu tabla de conexiones por user_id; si no se encuentra ningún registro, la función devuelve None y no debe realizarse ninguna llamada a la API. [1]
Paso 2. Comprueba la caducidad del token y renuévalo de forma proactiva.
En lugar de esperar una respuesta 401 en tiempo real, compara la marca de tiempo actual con el valor almacenado en tokenexpiresat. Una práctica recomendada es aplicar un margen de 120 segundos: si el token va a caducar en los próximos dos minutos, renuévalo inmediatamente antes de que se realice la llamada de recuperación de señales. [1]
Paso 3. Llama a ZohoOAuth.refresh_tokens con el refresh token almacenado.
Pasa el refreshtoken de tu registro de conexión al método de renovación. Internamente, esto envía una solicitud granttype: refreshtoken junto con tu clientid y clientsecret al endpoint de tokens de Zoho. Si tiene éxito, recibirás un nuevo accesstoken y un tokenexpiresat actualizado. [6]
Paso 4. Persiste los nuevos tokens de inmediato.
Escribe el accesstoken renovado y el tokenexpiresat de vuelta en tu tabla de conexiones antes de continuar. Esto evita una condición de carrera en la que una solicitud paralela utilice el token antiguo, que ya no es válido. Actualiza el registro usando el userid como clave y añade también una marca de tiempo updated_at. [^1, ^5]
Paso 5. Instancia el cliente de API correcto para tu tipo de señal.
Usa getzohoapi con el app_type apropiado: "crm" para señales de Zoho CRM o "desk" para señales de Zoho Desk. Esta función llama internamente a la lógica de recuperación de conexión de los pasos 1 al 4 y devuelve tanto un objeto api como el diccionario conn sin procesar. [5]
Paso 6. Proporciona un callback token_refresher al cliente.
Al construir ZohoCrmClient o ZohoDeskClient, pasa un callable que vuelva a ejecutar el flujo de renovación. Esto permite al cliente recuperarse automáticamente si un token caduca a mitad de una solicitud, sin necesidad de reiniciar toda la recuperación. [^5, ^7]
Paso 7. Ejecuta la herramienta de recuperación de señales.
Con una instancia de API válida disponible, llama a la herramienta correspondiente; por ejemplo, getrecordcount para recuperar señales agregadas, u otra herramienta con nombre específico para datos de registros concretos. El wrapper de ejecución acepta el objeto api, el app_type, el nombre de la tool y un diccionario params. [3]
Paso 8. Extrae el resultado y construye enlaces contextuales.
Una vez que la herramienta devuelva el resultado, extrae el payload de la clave toolresult en la respuesta. Si tu caso de uso requiere enlaces directos a la interfaz de Zoho, pasa el resultado a través de un constructor de enlaces junto con los valores dc (centro de datos), crmorgid, deskorgid y deskportal del registro de conexión. [3]
Paso 9. Gestiona el caso en que no se encuentre ninguna conexión.
Si getzohoapi devuelve None para el objeto api, muestra un mensaje claro al usuario —por ejemplo, indicándole que vuelva a conectar su cuenta de Zoho— en lugar de continuar con un cliente nulo que lanzará excepciones no controladas. [8]
Errores comunes
deskorgidausente para señales de Zoho Desk. Si el campodeskorgidestá vacío en tu registro de conexión, el cliente de Desk intentará una llamada de autodescubrimiento para obtener todas las organizaciones y persistir el primer resultado. Esto añade latencia a la primera recuperación de señales. Rellena el ID de organización durante el callback de OAuth para evitarlo. [5]- La renovación del token devuelve una clave de error. La respuesta de renovación puede contener una clave
"error"en lugar de una clave"accesstoken"si el refresh token ha sido revocado. Comprueba siempre la ausencia de"accesstoken"—no solo la presencia de"error"— antes de decidir si actualizar el token almacenado. [^6, ^4] - Condiciones de carrera en entornos multiusuario. Si dos solicitudes para el mismo usuario se ejecutan simultáneamente y ambas detectan un token caducado, ambas pueden intentar una renovación. La segunda renovación puede invalidar el primer token nuevo. Serializa las llamadas de renovación por usuario o utiliza un bloqueo a nivel de base de datos. [1]
Qué verificar
- Confirma que
tokenexpiresaten tu tabla de conexiones se actualiza correctamente después de cada renovación exitosa, y que el valor es una marca de tiempo Unix (entero), no una cadena ISO. [1] - Verifica que el
apptypepasado agetzoho_apicoincide con la fuente de la señal: usar"crm"al consultar endpoints de Desk (o viceversa) resultará en una inicialización incorrecta del cliente. [5] - Tras la recuperación, comprueba que la clave
tool_resultestá presente en la respuesta antes de intentar analizar los datos de la señal; una clave ausente indica que la herramienta devolvió una pregunta aclaratoria o un error en lugar de un payload de datos. [4]