Recuperar listas de precios en Zoho CRM es sencillo una vez que conoces las dos operaciones de API disponibles: una para listar todas las listas de precios y otra para obtener un registro específico por ID.
Por qué es importante
Las listas de precios en Zoho CRM te permiten gestionar precios escalonados o específicos por cliente en todo tu catálogo de productos. Si estás creando integraciones, automatizaciones o paneles personalizados, necesitarás obtener datos de listas de precios de forma programática. Saber qué endpoints llamar —y cómo fluye la autenticación en esas llamadas— ahorra un tiempo considerable de depuración.
> Nota: Beam Help es soporte experto independiente para Zoho y no es el soporte oficial de Zoho.
---
Paso a paso
Paso 1. Asegúrate de que tu conexión OAuth está establecida y tu token es válido.
Antes de cualquier llamada a la API, tu integración debe disponer de un token de acceso válido para Zoho CRM. La capa de conexión comprueba la expiración del token y lo actualiza automáticamente usando el refresh token almacenado cuando el token está a menos de 120 segundos de expirar —así que asegúrate de que tu registro zoho_connections esté actualizado antes de continuar. [8]
Paso 2. Inicializa el cliente de la API de CRM.
Llama a getzohoapi con el userid correspondiente y pasa "crm" como apptype. Esto devuelve una instancia autenticada de la API de CRM respaldada por la lógica de actualización de tokens descrita anteriormente. Si no existe ninguna conexión para el usuario, la función devuelve None —gestiona ese caso antes de continuar. [2]
Paso 3. Recupera todas las listas de precios.
Para obtener la lista completa de listas de precios, realiza una solicitud GET al endpoint /PriceBooks. En el código, esto corresponde a la operación getprice_books, que acepta un diccionario de parámetros opcional (p):
def get_price_books(self, p: dict = None):
return self.c.request("GET", "/Price_Books", p or {})
Pasa cualquier parámetro de consulta compatible (como paginación o filtros de campos) dentro del dict p. Si no tienes filtros, pasa un dict vacío u omite el argumento por completo. [3]
Paso 4. Recupera una lista de precios específica por ID.
Cuando ya conoces el ID de registro de la lista de precios, utiliza la operación getpricebook en su lugar. Esta realiza una solicitud GET a /PriceBooks/{pbid}, sustituyendo el ID real en la ruta:
def get_price_book(self, pb_id: str):
return self.c.request("GET", f"/Price_Books/{pb_id}")
Proporciona el pb_id como cadena de texto. La respuesta contendrá el registro completo de esa lista de precios específica. [4]
Paso 5. Confirma que tus scopes de OAuth cubren los módulos de CRM.
Tu aplicación OAuth registrada debe incluir los scopes de Zoho CRM apropiados. La configuración de scopes incluye ZohoCRM.org.ALL y acceso amplio a los módulos de CRM —verifica que los scopes concedidos a tu aplicación no sean más restrictivos que los configurados; de lo contrario, las llamadas a /Price_Books devolverán errores de autorización. [5]
---
Errores comunes
- Token de acceso ausente o expirado. Si
getzohoapidevuelveNone, el registro de conexión está ausente o la actualización falló. Comprueba que elrefreshtokenalmacenado enzohoconnectionssigue siendo válido y no ha sido revocado. [2] apptypeincorrecto. Las listas de precios se encuentran en Zoho CRM, no en Zoho Desk. Pasa siempreapptype="crm"al inicializar el cliente de la API —pasar"desk"enrutará tu solicitud al cliente equivocado. [2]- Dict de parámetros vacío vs.
None. El métodogetpricebooksprotege contra un valorNonesustituyéndolo por un dict vacío (p or {}), pero si llamas directamente a la capa de solicitudes subyacente, pasa siempre un dict para evitar errores de tipo. [3] - Discrepancia de centro de datos. Las URLs de CRM y los dominios de API varían según el centro de datos (p. ej.,
.com,.eu,.in). Asegúrate de que elapi_domainalmacenado en tu registro de conexión coincide con el centro de datos donde está alojada tu organización de Zoho CRM. [7]
---
Qué verificar
- Validez del token: Confirma que el token de acceso se ha actualizado correctamente y que
tokenexpiresatestá en el futuro antes de realizar solicitudes de listas de precios. [8] - Respuesta correcta del endpoint: Una llamada exitosa a
GET /PriceBooksdebe devolver una lista de registros de listas de precios; una llamada aGET /PriceBooks/{pb_id}debe devolver un único objeto de registro —verifica que la estructura de la respuesta coincide con lo esperado. [^3, ^4] - Cobertura de scopes: Comprueba que los scopes de OAuth concedidos a tu aplicación conectada incluyen los permisos necesarios de Zoho CRM, para que las lecturas de listas de precios no queden bloqueadas en la capa de autorización. [5]