Preguntas Frecuentes
NUEVO
Soporte de Bitrix24
Registro e inicio de sesión en Bitrix24
Seguridad
Planes y pagos
Cómo empezar
Feed
Messenger
Collabs
Calendario
Bitrix24 Drive
Webmail
Grupos de trabajo
Tareas y proyectos
CoPilot - IA en Bitrix24
CRM
Reserva
Contact center
Sales center
CRM Analytics
BI Builder
Bitrix24 Market
Sitios web
Tienda Online
CRM + Online store
Tienda CRM
Empleados
Base de conocimientos
Firma electrónica
Firma electrónica para RR. HH.
Automatización
Flujos de trabajo
Marketing
Gestión del inventario
Telefonía
Widget del empleado
Configuraciones de la cuenta
Bitrix24 En Premisa
Bitrix24 Messenger
Preguntas generales
Actualización de los artículos (archivo)
Iniciar sesión

Bitrix24 Helpdesk

Cómo obtener datos del Conector BI con un agente de IA

Los datos de Bitrix24 se pueden analizar con agentes de IA para desarrollo, por ejemplo Codex o Claude Code. Basta con describir la tarea: el agente obtendrá los datos a través del conector BI, aplicará los filtros y preparará la respuesta.

Por ejemplo, si necesitas ver las negociaciones exitosas de los últimos seis meses, proporciona al agente la dirección de Bitrix24, la clave de BI Analytics, el enlace a la documentación y formula la tarea. El agente obtendrá los datos mediante el conector BI, seleccionará las negociaciones exitosas y mostrará el resultado.

No tendrás que analizar manualmente los parámetros de la consulta. Basta con describir la tarea, comprobar el resultado y precisar la consulta si necesitas otros datos o un formato de respuesta diferente.

En este artículo explicaremos cómo:


Qué preparar para trabajar con una herramienta de IA

Para trabajar necesitarás:

La dirección de Bitrix24. Es necesaria para que la herramienta de IA sepa a dónde enviar las solicitudes. Por ejemplo: https://example.bitrix24.es.

La clave de BI Analytics. Es necesaria para acceder a los datos. Puedes obtenerla en CRM > Analítica > Analítica en tiempo real > BI Analytics > Configuración de BI Analytics > Administrar claves.

No publiques la clave en acceso abierto, no la añadas a un repositorio compartido ni la proporciones a herramientas no verificadas. Si la clave ha quedado accesible para otras personas, crea una nueva y desactiva la anterior.

Enlace a la documentación o a la skill. Ayuda al agente a comprender qué consultas debe ejecutar. En una skill lista para usar se describe cómo obtener la lista de datos disponibles, ver los campos y solicitar filas mediante el conector BI.

Ejemplo de una skill para un agente de IA

name bitrix-bi-connector
description Querying the Bitrix24 BI-connector HTTP API — listing tables (gds.php?show_tables), describing columns (gds.php?desc), and fetching rows (pbi.php) with dateRange and dimensionsFilters predicate filtering (operators EQUALS, CONTAINS, IN_LIST, BETWEEN, IS_NULL, NUMERIC_GREATER_THAN/LESS_THAN with optional EXCLUDE negation). Use this skill whenever the user mentions Bitrix24, bi-connector, biconnector, bi-token, gds.php, pbi.php, or asks how to query, count, or filter leads (crm_lead), deals (crm_deal), tasks (task), contacts, companies, or smart-process entities (crm_dynamic_items_*) from a Bitrix24 portal via its BI-analytics endpoints. Also use when the user is constructing a dimensionsFilters JSON body, debugging EMPTY_SELECT_FIELDS_LIST errors, or seeing unexpected empty results from a Bitrix BI request (often a UTF-8 encoding issue or an unknown-operator silent-failure).

Bitrix24 BI-connector protocol

This skill captures the HTTP protocol for the Bitrix24 BI-analytics connector — the API that powers Power BI / Google Data Studio integrations and any custom client that reads CRM data from a Bitrix24 portal. Use it when constructing requests, helping users count/filter CRM entities, or implementing a BI client.


Endpoints overview

All three endpoints live on the client's Bitrix24 portal. Every request is HTTP POST and every body MUST include a key field — the client's bi-token. Only the path and query string vary: gds.php for metadata (list/describe), pbi.php for actual data rows.

Where the bi-token comes from: the BI-analytics key-management page of the client's own Bitrix24 portal (path varies by portal locale; on a fresh portal navigate via CRM → Analytics → BI-analytics → BI-analytics settings → Key management, or open {portal}/biconnector/key_list.php directly). Always ask the user for their own portal URL — never hardcode a reference portal (e.g. smith.bitrix24.com from sample docs) in production code.


Endpoint 1 — list tables

POST {portal}/bitrix/tools/biconnector/gds.php?show_tables

Body:

{"key": "<bi-token>"}

Returns [[table_name, table_description], ...].


Endpoint 2 — describe a table's columns

POST {portal}/bitrix/tools/biconnector/gds.php?desc&table=<table_name>

Body:

{"key": "<bi-token>"}

Returns an array of column objects. Key fields per column:

  • CONCEPT_TYPEDIMENSION or METRIC. METRICs are typically aggregated and grouped by DIMENSIONs — preserve this distinction in any UI or query-builder code.
  • ID — the identifier to use when referencing the column in subsequent requests (this is the name you pass in endpoint 3's fields).
  • NAME — human-readable label.
  • TYPE — data type (e.g. NUMBER, STRING, YEAR_MONTH_DAY_SECOND).
  • AGGREGATION_TYPE, GROUP_KEY, GROUP_CONCAT, GROUP_COUNT, IS_VALUE_SPLITABLE — aggregation/grouping hints, often null.

Endpoint 3 — fetch table rows

POST {portal}/bitrix/tools/biconnector/pbi.php?table=<table_name>

Body:

{"key": "<bi-token>", "fields": [{"name": "<column_id>"}, ...]}

fields lists which columns to return; use the ID values from endpoint 2. Response is a 2D array where the first row is the header (column names in request order) and the rest are data rows aligned to that header. Empty cells come back as null or "" — don't treat absence as an error.


Silent-failure traps

The BI-connector has several behaviours where bad requests succeed with HTTP 200 but return misleading results. These cause real bugs because they look indistinguishable from "no data matched":

Unknown fields are silently dropped. If you request fields that don't exist on the table, the API silently drops them. If all requested fields are unknown, you get {"error":"EMPTY_SELECT_FIELDS_LIST"} with HTTP 200 — it does not name which field was wrong. Always cross-check field IDs against endpoint 2 before querying.

Unknown operators are silently ignored. Spelling an operator wrong, or guessing one that doesn't exist (e.g. IS_NOT_NULL, STARTS_WITH), causes the server to return the unfiltered set — which looks like a successful query. Never assume an operator exists without testing it on a column with known distribution. Confirmed operators are listed below; treat everything else as unproven.

Request bodies must be UTF-8 encoded. If a filter value or URL parameter contains any non-ASCII character (in dimensionsFilters values, in a non-Latin table name, etc.), the body MUST be sent as UTF-8 bytes. A mismatched encoding does NOT produce an error — the API returns an empty result set (Rows: 0), which is indistinguishable from a legitimate "no matches". PowerShell Invoke-RestMethod -Body $stringWithNonAscii is a known offender on Windows because its default body encoding is not UTF-8: pass [Text.Encoding]::UTF8.GetBytes($json) and Content-Type: application/json; charset=utf-8 instead. In any language, set the HTTP client's body encoding to UTF-8 explicitly when sending non-ASCII filter values.


Date-range filtering

Add dateRange and optionally configParams.timeFilterColumn to the pbi.php body:

{ "key": "bi-token", "dateRange": {"startDate": "2018-07-19", "endDate": "2018-08-02"}, "configParams": {"timeFilterColumn": "DATE_CREATE"}, "fields": [{"name": "DATE_CREATE"}, {"name": "STATUS_SEMANTIC_ID"}] } 
  • startDate is treated as 00:00:00 of that day; endDate as 23:59:59.999 (inclusive).
  • For a single day, set startDate = endDate.
  • timeFilterColumn is the column ID to filter on. If omitted, the API uses the first date/datetime column in the table — usually safe but explicit is better.

Rule — always filter: always pass a dateRange when calling pbi.php, even if the user didn't ask. Without it, unfiltered tables can return thousands or millions of rows on real portals. Default to "last 3 months" (endDate = today, startDate = today − 90 days) unless the user specifies otherwise. The metadata endpoints (show_tables, desc) don't accept dateRange — only pbi.php does. Exception: if you're using dimensionsFilters (below) and it sufficiently narrows the result (e.g. filtering by a specific ID), dateRange is optional.


Predicate filtering with dimensionsFilters

Add to the pbi.php body a key dimensionsFilters whose value is an array of arrays of condition objects. Outer arrays are joined by AND; inner conditions within one array are joined by OR. Any number of inner conditions and any number of outer groups is allowed.

{ "key": "bi-token", "fields": [{"name": "ID"}, {"name": "CREATED_BY_ID"}], "dimensionsFilters": [ [ {"fieldName": "ID", "values": ["2"], "type": "INCLUDE", "operator": "EQUALS"}, {"fieldName": "ID", "values": ["12706"], "type": "INCLUDE", "operator": "EQUALS"} ], [ {"fieldName": "CREATED_BY_ID", "values": ["1"], "type": "INCLUDE", "operator": "EQUALS"} ] ] } 

Above: (ID=2 OR ID=12706) AND CREATED_BY_ID=1.


Condition object fields

  • fieldName — column ID from endpoint 2.
  • values — always a list of strings, even for numeric columns (e.g. "1", not 1).
  • type"INCLUDE" (apply the operator) or "EXCLUDE" (invert it). EXCLUDE works as a universal negator on top of any operator: EXCLUDE + EQUALS = "not equal", EXCLUDE + CONTAINS = "doesn't contain", EXCLUDE + IN_LIST = "not in list", EXCLUDE + IS_NULL = "not null" (the stand-in for the missing IS_NOT_NULL).
  • operator — confirmed values:
  • "EQUALS" — exact match; values is a single-element list, e.g. ["1"].
  • "CONTAINS" — substring match, e.g. {"fieldName":"TITLE","values":["CRM:"],"operator":"CONTAINS"}.
  • "IN_LIST" — field value is any of the listed strings, e.g. {"fieldName":"ID","values":["1","2"],"operator":"IN_LIST"}. Prefer this over OR-ing multiple EQUALS conditions for the same field — cleaner and one condition object instead of N.
  • "IS_NULL" — null check; values MUST be an empty list ([]). For non-null, use EXCLUDE + IS_NULL (there is no standalone IS_NOT_NULL operator — the server silently ignores it and returns all rows unfiltered). Caveat: the desc metadata does NOT expose which fields are nullable, so there's no way to verify at runtime. Only use this when you already know from data inspection or domain context that the field can hold null.
  • "BETWEEN" — value in range, both endpoints inclusive. values MUST be a 2-element list [low, high] (as strings, like all other operators). Behaviour on non-numeric columns is unspecified — treat it as numeric/date-only and test before applying to strings.
  • "NUMERIC_GREATER_THAN" / "NUMERIC_GREATER_THAN_OR_EQUAL" / "NUMERIC_LESS_THAN" / "NUMERIC_LESS_THAN_OR_EQUAL">, >=, <, <=. Single-element values, e.g. ["2"]. Behaviour on non-numeric columns is unspecified — use on numeric/date columns and verify before applying to strings.
  • Anything else (e.g. STARTS_WITH, ENDS_WITH, REGEX) is unproven. Per "Silent-failure traps" above, an unknown operator returns the full unfiltered table — which looks like a wide-open match. Test on a known-distribution column before relying on it.

Useful pattern — fetch a single row by ID

"dimensionsFilters": [[{"fieldName":"ID","values":["19244"],"type":"INCLUDE","operator":"EQUALS"}]]

Success/failure semantics in CRM entities

Bitrix24 uses a one-letter "semantic" code to indicate where an entity sits in its lifecycle. Same codes, different field names across entities — easy to mix up:

  • eP — in progress (non-terminal)
  • S — successful terminal state
  • F — failed terminal state
Entity (BI table) Lifecycle concept Semantic field
crm_lead Status STATUS_SEMANTIC_ID (raw) / STATUS_SEMANTIC (label)
crm_deal Stage STAGE_SEMANTIC_ID (raw) / STAGE_SEMANTIC (label)

To count "successful" leads or deals, filter on the _SEMANTIC_ID field equal to S. To count "completed" (any terminal state), include both S and F. The text-label variants (STATUS_SEMANTIC, STAGE_SEMANTIC) come back as localized strings in the portal's UI language — use them for display, not for filtering. The single-letter _ID codes are stable across locales and should always be the key you filter on. Smart-process entities (crm_dynamic_items_*) likely follow the deal convention (stages) — verify via endpoint 2 before assuming.

Non-CRM entities like task may use a completely different schema (e.g. a raw STATUS column holding a localized human-readable string, with no semantic code at all). Always check endpoint 2 before generalizing — don't assume STATUS_SEMANTIC_ID exists outside the CRM tables documented above.


Credential handling

The bi-token is a credential. Treat it as you would any API key: never log it, never commit it to source control, never echo it back in error messages or stack traces. When building configuration scaffolding for an implementation, read the token from an environment variable or a gitignored config file — never a hardcoded constant in committed code.

La tarea que hay que resolver. Es mejor describir la tarea como un resultado de trabajo y no como una solicitud técnica. Por ejemplo: «Muestra las negociaciones exitosas de los últimos seis meses» o «Encuentra los prospectos de los últimos 30 días y agrúpalos por responsable».


Cómo asignar una tarea al agente de IA

Para asignar una tarea, basta con enviar una solicitud en el chat con el agente de IA. Una buena solicitud contiene todo lo necesario para trabajar: la dirección de Bitrix24, la clave de BI Analytics, el enlace a la documentación y la descripción de la tarea.

Ejemplo de solicitud:

 Mi Bitrix24: https://example.bitrix24.es Mi token BI: tu_clave_de_BI_Analytics Documentación: Enlace Muéstrame las negociaciones exitosas de los últimos seis meses. 

En la solicitud puedes proporcionar al agente un enlace a una skill lista para usar. En ella se describe cómo trabajar con el conector BI: obtener la lista de datos disponibles, consultar los campos del conjunto de datos necesario y solicitar filas con filtros por fecha y condiciones.

Después de esto, el agente ejecutará la tarea y devolverá una tabla con la selección de datos y una conclusión. Este es un ejemplo del formato de respuesta. En el trabajo real, el resultado depende de los datos de Bitrix24 y de los campos disponibles a través del conector BI.


Cómo precisar la consulta

La primera respuesta puede ser demasiado general. En ese caso, puedes precisar la tarea directamente en el chat: pedir que muestre solo los indicadores necesarios, agrupar los datos o elaborar una breve conclusión.

Por ejemplo, puedes utilizar las siguientes solicitudes:

  • Mostrar el importe total de las negociaciones exitosas — «Muestra solo el importe total de las negociaciones exitosas de los últimos seis meses y la cantidad de negociaciones».
  • Agrupar las negociaciones — «Agrupa las negociaciones exitosas por responsable. Muestra la cantidad de negociaciones y el importe total de cada empleado».
  • Dividir las negociaciones por meses — «Divide las negociaciones exitosas por meses. Para cada mes muestra la cantidad de negociaciones y el importe».
  • Elaborar una conclusión a partir de los datos — «Haz una breve conclusión: en qué mes hubo más negociaciones exitosas y quién tiene el mayor importe».

Las precisiones ayudan a obtener la respuesta en el formato necesario. El agente de IA no solo devuelve filas de datos, sino que adapta el resultado a la tarea de trabajo.


Cómo trabajan los agentes de IA con los datos

El agente de IA trabaja con el conector BI siguiendo las mismas reglas que una aplicación normal. Envía solicitudes HTTP a Bitrix24 y recibe respuestas en formato JSON. El conector BI no devuelve todos los datos en una sola solicitud. El trabajo con él se realiza por pasos:

1. Primero, el agente averigua qué datos se pueden solicitar mediante el conector BI.
BI Analytics: conjuntos de datos

Ejemplo de solicitud para obtener la lista de datos disponibles

Dirección de la solicitud:

 POST https://example.bitrix24.es/bitrix/tools/biconnector/gds.php?show_tables 

Cuerpo de la solicitud:

 { "key": "tu_clave_de_BI_Analytics" } 

Ejemplo de respuesta:

 [ [ "crm_lead", "Prospectos" ], [ "crm_deal", "Negociaciones" ], [ "task", "Tareas" ] ] 

2. Después de eso, el agente de IA comprueba qué campos existen en el conjunto de datos necesario. La respuesta devuelve la descripción de los campos: nombre técnico, nombre descriptivo, tipo de datos y parámetros adicionales.

Ejemplo de solicitud para obtener la descripción de los campos

Dirección de la solicitud:

 POST https://example.bitrix24.es/bitrix/tools/biconnector/gds.php?desc&amp;table=crm_lead 

Cuerpo de la solicitud:

 { "key": "tu_clave_de_BI_Analytics" } 

Ejemplo de respuesta:

 [ { "ID": "ID", "NAME": "Clave única", "TYPE": "NUMBER" }, { "ID": "TITLE", "NAME": "Nombre del prospecto", "TYPE": "STRING" }, { "ID": "DATE_CREATE", "NAME": "Fecha de creación", "TYPE": "DATETIME" }, { "ID": "STATUS_ID", "NAME": "Estado", "TYPE": "STRING" }, { "ID": "ASSIGNED_BY_ID", "NAME": "Responsable", "TYPE": "NUMBER" } ] 

3. Cuando el agente de IA ha seleccionado los campos necesarios, solicita las filas de datos.

Ejemplo de solicitud para obtener los datos

Dirección de la solicitud:

 POST https://example.bitrix24.es/bitrix/tools/biconnector/pbi.php?table=crm_lead 

Cuerpo de la solicitud:

 { "key": "tu_clave_de_BI_Analytics", "fields": [ { "name": "ID" }, { "name": "TITLE" }, { "name": "DATE_CREATE" }, { "name": "STATUS_ID" }, { "name": "ASSIGNED_BY_ID" } ] } 

Ejemplo de respuesta:

 [ [ "ID", "TITLE", "DATE_CREATE", "STATUS_ID", "ASSIGNED_BY_ID" ], [ "125", "Solicitud de consulta", "2026-05-12 10:15:32", "NEW", "17" ], [ "126", "Pedido de equipos", "2026-05-13 14:42:10", "IN_PROCESS", "21" ] ] 


Qué comprobar en el resultado

El agente de IA ayuda a obtener y procesar los datos, pero es necesario comprobar el resultado. Comprueba:

  • si el período se ha seleccionado correctamente,
  • si los datos incluidos en la selección son los correctos,
  • si los filtros se han aplicado correctamente,
  • si no hay campos innecesarios,
  • si la conclusión corresponde a la tabla.

Por ejemplo, si has solicitado las negociaciones exitosas de los últimos seis meses, comprueba que la respuesta no incluya negociaciones en curso o perdidas. Si solo necesitas negociaciones cerradas y exitosas, indícalo en la solicitud.


Resumen

  • Los datos de Bitrix24 se pueden analizar con agentes de IA, por ejemplo Codex o Claude Code.
  • Basta con formular una tarea: el agente accederá al conector BI, obtendrá los datos, aplicará los filtros y preparará la respuesta.
  • Para trabajar se necesita la dirección de Bitrix24, la clave de BI Analytics y un enlace a la documentación o a una skill lista para usar.
  • La clave de BI Analytics no debe publicarse ni almacenarse en acceso abierto, ya que proporciona acceso a los datos de Bitrix24.
Ir a Bitrix24
¿No tiene una cuenta? Créela gratis