IA en Business Central: agentes, modelos y formas de personalizar
Un primer acercamiento para ordenar conceptos y entender las posibilidades que tenemos para incorporar IA a nuestras personalizaciones de Business Central.
Escribo este artículo casi más para mí que para la web. Llevo unos días leyendo sobre Copilot, agentes e inteligencia artificial en Business Central y, aunque algunos conceptos parecen sencillos por separado, cuando empiezas a relacionarlos es fácil hacerse un lío.
No pretendo profundizar demasiado, sino tener una visión general de las posibilidades que tenemos para incorporar IA a nuestras personalizaciones de Business Central. Porque, si hay algo que sí tengo claro, es que como consultores tenemos que empezar a cambiar la forma en la que pensamos y planteamos las soluciones, teniendo en cuenta todas estas nuevas posibilidades.
Agentes, modelos y conexiones
Antes de hablar de desarrollo, creo que es importante diferenciar tres conceptos:
- Agente: podríamos entenderlo como un trabajador que tiene un objetivo, recibe instrucciones y puede utilizar herramientas para realizar tareas. No tiene por qué ser necesariamente un chat, aunque reconozco que es lo primero que se me viene a la cabeza.
- Modelo de IA: es el cerebro que interpreta la información, razona y genera respuestas. Me gusta pensar en él como “el que consume los tokens”, y aquí es donde hay que tener cuidado para que el consumo no se nos vaya de madre y termine saliendo caro.
- API o MCP: son mecanismos que permiten conectar un agente con otros sistemas para consultar información o ejecutar acciones. Esta es quizás la parte que más fácil me resulta entender: es la conexión que permite que las distintas piezas se conecten y trabajen juntas. Con APIs ya venimos trabajando mucho tiempo, por lo que es, en mi opinión, la pieza más sencilla del rompecabezas.

Modelos de IA
Aquí también tenía cierta confusión, porque muchas veces hablamos de GPT como si fuera sinónimo de inteligencia artificial, pero en realidad GPT es una familia de modelos desarrollada por OpenAI.
Existen otras empresas con sus propios modelos, como Anthropic (Claude), Google (Gemini), Meta (Llama), Mistral AI (Mistral) o Microsoft (Phi).
También está Azure OpenAI, que no es otro modelo, sino un servicio de Microsoft Azure que permite utilizar modelos de OpenAI desde nuestras aplicaciones.
Lo interesante es que, dependiendo de cómo desarrollamos nuestra solución, podremos elegir el proveedor y el modelo que queremos utilizar o trabajar con los que Microsoft ya proporciona.

Personalizar IA en Business Central
Me gusta pensar en tres enfoques diferentes.
1. Crear un agente dentro de Business Central
Desarrollar un Copilot mediante AL
Microsoft dispone de un AI Development Toolkit que nos permite desarrollar nuestras propias funcionalidades de Copilot utilizando AL.
Por ejemplo, podemos crear una ventana donde el usuario explique lo que necesita y la IA le proponga un resultado que pueda revisar y aceptar. Además, podemos permitir que la IA realice determinadas acciones dentro de Business Central, siempre que las hayamos preparado previamente.
En este caso, podemos utilizar nuestro propio servicio Azure OpenAI, configurando el modelo y gestionando su consumo.
Crear un agente dentro de Business Central
La otra alternativa es crear un agente que pueda realizar tareas dentro de Business Central, de forma similar a como lo haría un usuario. Es decir, que pueda consultar registros, abrir páginas, ejecutar acciones y decidir qué pasos seguir para completar una tarea.
Aquí tenemos dos posibilidades:
- Sin programar: mediante el diseñador de agentes de Business Central, definiendo sus instrucciones, permisos y tareas. Actualmente está en versión preliminar.
- Mediante AL: utilizando el Agent SDK para AL, que nos permite desarrollar agentes personalizados e integrarlos con nuestras extensiones.
En este caso, no necesitamos contratar nuestro propio Azure OpenAI, ya que utilizamos la infraestructura de Microsoft. Eso sí, la ejecución de los agentes tiene un consumo asociado, gestionado mediante Copilot Credits.
La principal diferencia es que un Copilot ayuda al usuario a realizar una tarea, mientras que un agente puede encargarse de ejecutarla con cierta autonomía.
2. Crear un agente externo.
Otra posibilidad es crear el agente fuera de Business Central y conectarlo posteriormente para que pueda consultar información o realizar operaciones sobre el ERP.
Aquí tenemos principalmente dos alternativas:
Utilizar Microsoft Copilot Studio
Copilot Studio es una plataforma de Microsoft que permite crear agentes de IA de forma visual, sin necesidad de desarrollar toda la lógica mediante programación. Estos agentes pueden conectarse a Business Central mediante el conector estándar de Power Platform o utilizando MCP (Model Context Protocol). Además, podemos publicarlos en otros entornos, como Microsoft Teams o una página web.
En este caso, Microsoft proporciona la infraestructura de IA y el consumo se gestiona mediante las licencias y los créditos de Copilot Studio.
Desarrollar nuestro propio agente
También podemos desarrollar el agente directamente, por ejemplo, en una aplicación Python alojada en Railway o en cualquier otro servidor.
Nota: Comento Railway porque hace unas semanas desplegué ahí una pequeña aplicación de gastos, utilizando Supabase como base de datos y para la autenticación, y la verdad es que estoy bastante contento con el funcionamiento.
Esta alternativa nos ofrece más libertad, ya que podemos elegir el modelo de IA que queramos: GPT de OpenAI, Claude de Anthropic, Gemini de Google, etc. Es decir, somos nosotros quienes gestionamos el servicio de IA, su integración y su consumo.
¿Y cómo accede nuestro agente a los datos de Business Central? Igual que en el caso anterior, podemos conectarlo mediante las APIs habituales o utilizando MCP, un protocolo estándar que permite a los agentes descubrir y utilizar herramientas de otros sistemas.
3. Incorporar IA directamente en nuestro código AL
Esta opción me parece especialmente interesante para personalizaciones concretas, ya que no siempre necesitamos desarrollar un agente. Podemos utilizar la IA directamente desde un procedimiento AL, por ejemplo, al pulsar un botón o en mitad de un proceso.
Imaginemos que estamos buscando una factura para relacionarla con un cobro. Primero intentamos localizarla mediante los filtros tradicionales de BC y, si no encontramos ninguna coincidencia, hacemos una llamada a un modelo de IA para que nos ayude. De esta forma, no tendremos que programar expresamente cada posible casuística del proceso de búsqueda, sino que podremos apoyarnos en la IA para encontrar coincidencias que los filtros tradicionales no han conseguido localizar. Eso sí, habrá que validar siempre el resultado antes de utilizarlo. Este escenario me gusta porque solo utilizamos IA cuando realmente la necesitamos.
En AL podemos utilizar System.AI con Azure OpenAI, o conectarnos mediante APIs a otros modelos. Por ejemplo, comparto una prueba que hice en TypeScript utilizando Gemini, de Google, para obtener los países de la Unión Europea mediante un prompt. Una prueba sencilla que me ayudó a entender cómo consumir IA desde una aplicación. La idea era que no necesitaba considerar todos los países de la UE, ni siquiera conocerlos, ya que la IA los buscaba y los insertaba por mí. Y aquí es donde creo que está la clave: ya no siempre es necesario programar todas las casuísticas posibles, sino definir un objetivo claro y apoyarnos en la IA para resolverlo.
type Country = {
code: string;
name: string;
is_eu: boolean;
};
export async function getEuCountries(): Promise<Country[]> {
const apiKey = process.env.GEMINI_API_KEY;
const model = process.env.GEMINI_MODEL ?? "gemini-2.5-flash";
if (!apiKey) throw new Error("Falta GEMINI_API_KEY");
const prompt = `
Devuelve únicamente JSON válido, sin markdown y sin explicación.
Necesito la lista actual de países miembros de la Unión Europea.
Formato exacto:
{"countries":[{"code":"ES","name":"España","is_eu":true}]}
Reglas:
- code debe ser ISO 3166-1 alpha-2 en mayúsculas.
- name debe estar en español.
- is_eu debe ser true.
- No incluyas países que no sean miembros actuales de la Unión Europea.
`.trim();
const response = await fetch(
`https://generativelanguage.googleapis.com/v1beta/models/${model}:generateContent?key=${apiKey}`,
{
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({
contents: [{ role: "user", parts: [{ text: prompt }] }],
generationConfig: {
temperature: 0,
responseMimeType: "application/json",
},
}),
},
);
if (!response.ok) {
throw new Error(`Error de Gemini: ${await response.text()}`);
}
const data = await response.json();
const text = data.candidates?.[0]?.content?.parts
?.map((part: { text?: string }) => part.text ?? "")
.join("\n");
if (!text) throw new Error("Gemini no devolvió contenido");
const parsed = JSON.parse(
text
.trim()
.replace(/^```(?:json)?\s*/i, "")
.replace(/```$/, ""),
);
if (!Array.isArray(parsed.countries)) {
throw new Error("La respuesta no contiene una lista de países");
}
return parsed.countries
.map((country: Country) => ({
code: String(country.code ?? "")
.trim()
.toUpperCase(),
name: String(country.name ?? "").trim(),
is_eu: Boolean(country.is_eu),
}))
.filter(
(country: Country) =>
country.code.length === 2 && country.name.length > 0 && country.is_eu,
);
}

Agentes estándar de Microsoft
Además de las posibilidades de desarrollo comentadas, Business Central ya incorpora agentes estándar, como el Sales Order Agent o el Payables Agent. En estos casos no tenemos que desarrollar el agente desde cero, sino configurar y utilizar las capacidades que Microsoft proporciona. Pero esta parte la veremos en otro artículo con más profundidad.
Consideraciones
Por el momento, creo que lo primoldial es entender bien las diferencias entre estos enfoques y, sobre todo, saber cuándo tiene sentido utilizar cada uno.
No creo que todo tenga que resolverse con agentes. En algunos casos será suficiente con incorporar una llamada a un modelo de IA en un procedimiento AL, mientras que en otros puede tener más sentido desarrollar un agente completo, ya sea dentro o fuera de Business Central.
Este artículo es simplemente un primer acercamiento para ordenar conceptos. Mi idea es ir haciendo pruebas reales con cada una de estas posibilidades y compartirlas en la web mediante nuevos artículos, con ejemplos de código, configuraciones y los problemas que me vaya encontrando.
Una idea para seguir pensando.
Explorar otras lecturas →