Recuperar informes en Zoho a través de la API implica autenticar tu conexión, llamar a la herramienta de lectura adecuada y seguir los enlaces de respuesta hasta los registros correspondientes en tu aplicación de Zoho.
Por qué esto es importante
Cuando necesitas extraer datos de informes de forma programática —para paneles de control, auditorías o flujos de trabajo automatizados— entender cómo funciona el proceso de recuperación ahorra un tiempo considerable en la depuración. Tanto si trabajas con Zoho CRM como con Zoho Desk, el patrón subyacente de gestión de tokens, ejecución de herramientas y generación de enlaces es coherente. Como soporte experto independiente (no soporte oficial de Zoho), Beam Help te guía por cada etapa para que puedas adaptarlo a tu propio entorno.
Paso a paso
Paso 1. Establece y verifica tu conexión con Zoho.
Antes de que se puedan recuperar datos de informes, el sistema debe resolver una conexión válida para tu cuenta de usuario. La función getzohoapi busca tu registro de conexión almacenado y, si el token de acceso ha expirado, llama automáticamente a ZohoOAuth.refreshtokens usando el token de actualización almacenado y luego persiste el nuevo token de acceso en la base de datos. [8] Asegúrate de que tu registro zohoconnections contenga un refreshtoken válido y que el campo apidomain esté correctamente configurado. [8]
Paso 2. Confirma que los ámbitos OAuth correctos están autorizados.
Para la recuperación de informes en Zoho CRM, tu autorización OAuth debe incluir ámbitos como ZohoCRM.coql.READ y ZohoCRM.org.ALL. Para Zoho Desk, el acceso de lectura a tickets, contactos y búsqueda requiere ámbitos que incluyan Desk.tickets.READ, Desk.contacts.READ y Desk.search.READ. [7] Si falta algún ámbito requerido, la llamada a la API fallará silenciosamente o devolverá un error de autorización — vuelve a autorizar la conexión con la lista completa de ámbitos definida en tu configuración. [7]
Paso 3. Identifica el tipo de aplicación y el nombre de la herramienta correctos.
Al enviar una consulta, el sistema inspecciona el mensaje y el parámetro apptype (ya sea "crm" o "desk") para decidir qué herramienta invocar. Para consultas de informes de tipo recuento de registros, la herramienta resuelta es getrecordcount. [2] Para operaciones de lectura más amplias, la capa de planificación itera sobre una lista de acciones, llamando a executetoolwithrepair para cada una con el nombre de la herramienta y sus parámetros. [6] Confirma que el valor de apptype coincide con el producto de Zoho que estás consultando, ya que el cliente de API instanciado difiere entre CRM y Desk. [8]
Paso 4. Ejecuta la herramienta y captura el resultado.
La llamada de ejecución de la herramienta pasa tu instancia api, apptype, el nombre tool resuelto y un diccionario params (que debe incluir una clave module cuando sea relevante) a executetoolwithrepair. [6] La función devuelve un objeto de salida; extrae el resultado mediante execout.get("result") y el nombre final de la herramienta resuelta mediante execout.get("tool"). [2] Si la herramienta devuelve una clave clarifyingquestion en lugar de un resultado, el sistema se detiene y muestra esa pregunta al usuario antes de continuar. [6]
Paso 5. Construye enlaces directos a los registros recuperados.
Una vez que haya un toolresult no vacío disponible, pásalo junto con el nombre de la herramienta, los parámetros, apptype, el código del centro de datos (dc) y cualquier identificador de organización/portal a buildzoholinks. [3] Esta función construye URLs de enlace directo usando el patrón https://crm.zoho.{dc}/crm/tab/{Module}/{RecordId} para registros de CRM y https://desk.zoho.{dc}/agent/{portal}/tickets/details/{TicketId} para tickets de Desk. [3] El valor de dc tiene como valor predeterminado "com", pero debe configurarse con tu centro de datos real (p. ej., "eu", "au") si tu cuenta está alojada fuera de EE. UU. [3]
Paso 6. Revisa el payload de respuesta completo.
El objeto de respuesta final devuelto al llamante incluye sessionid, response (la respuesta legible por humanos), recuentos de tokens usage, toolresult (los datos brutos de la API) y un array links que contiene pares nombre/URL para cada registro recuperado. [4] En modo de streaming, los mismos campos se emiten de forma progresiva, con mensajes de estado como "Calling Zoho tool: getrecordcount..." enviados antes de que lleguen los datos. [2] Guarda el array links si necesitas presentar referencias "Abrir en Zoho" con enlace junto a la salida del informe. [1]
Errores comunes
- ID de organización faltante para Zoho Desk. Si
deskorgidestá en blanco, el cliente intenta descubrirlo automáticamente llamando agetallorganizationsy persistiendo el primer resultado. [8] Si esa llamada de descubrimiento también falla (p. ej., debido a un problema de ámbito), las llamadas posteriores a informes de Desk carecerán del contexto de organización requerido. - Código de centro de datos incorrecto. El campo
dcdetermina toda la construcción de URLs. Una discrepancia (p. ej., dejarlo como"com"cuando tu cuenta está en"eu") produce enlaces directos con apariencia válida pero inaccesibles. [3] - Fallos silenciosos por ámbitos faltantes. La lista de ámbitos OAuth es larga y específica de cada producto. [7] Un ámbito
READfaltante en el módulo de destino no siempre se manifiesta como un error obvio — verifica los ámbitos antes de asumir que la herramienta en sí está rota. - Una pregunta de aclaración interrumpe el flujo. Si la ejecución de la herramienta devuelve una
clarifying_question, el proceso se detiene y se registra el uso, pero no se devuelven datos del informe. [6] Gestiona este estado explícitamente en tu integración para que se le solicite al usuario en lugar de recibir un resultado vacío.
Qué verificar
- Verifica que tu registro de conexión almacenado contenga un
refreshtokenno expirado y los valores correctos deapidomainydc. [8] - Confirma que todos los ámbitos OAuth requeridos —en particular
ZohoCRM.coql.READpara CRM oDesk.search.READpara Desk— estén presentes en tu autorización. [7] - Tras la recuperación, inspecciona el array
linksen la respuesta para confirmar que las URLs de los registros se resuelven en el módulo y el centro de datos esperados. [3]