DEV Community

Cover image for Conectar un agente Python a SAP CAP desde un chatbot en SAPUI5

Conectar un agente Python a SAP CAP desde un chatbot en SAPUI5

Hace unas semanas estuve buscando la forma de aunar SAP CAP con IA, que hoy en día está ya en todas partes. Se me ocurrió montar un Chatbot con un agente que posea ciertas capacidades para manejar los datos de la aplicación que he creado, aquí os dejo las movidas que se me ocurrieron montar :D

Backend

En SAP CAP tengo una app backend que expone entidades como Materials, Suppliers, PurchaseOrders, etc.
CAP está montado con autenticación básica y sirve como fuente de datos del agente.

Agente en Python con FastAPI + LangChain

El cerebro de la operación es un agente Python. Usa FastAPI para exponer un endpoint /ask, y LangChain para procesar preguntas del usuario, llamar al backend SAP CAP, y devolver una respuesta en lenguaje natural.
🔧 Herramientas expuestas

Usé @tool de LangChain para definir funciones específicas:

@tool
def get_material(material_name: str):
    """Get material details based on the material name"""
    url = f"{BASE_URL}/Materials?$filter=name eq '{material_name}'"
    response = requests.get(url, headers=headers, auth=auth)
    return response.json()
Enter fullscreen mode Exit fullscreen mode

También se pueden crear materiales, consultar stock, proveedores, etc.

Endpoint principal /ask

@app.post("/ask")
async def ask_question(q: Question):
    response = agent.invoke(q.question)
    return {"answer": response}

Enter fullscreen mode Exit fullscreen mode

Recibe una pregunta como:

{ "question": "¿Qué materiales hay en el centro 1000?" }
Enter fullscreen mode Exit fullscreen mode

Y responde con texto como:

{ "answer": "Hay 57 materiales disponibles en el centro 1000. Ej: M-001, M-002." }
Enter fullscreen mode Exit fullscreen mode

Interfaz conversacional con SAPUI5

En el frontend de la app, monté un chatbot simple usando componentes estándar de SAPUI5. Está dentro de un Panel lateral.
Quedó terriblemente feo, debería volver a echarle un vistazo y cambiarlo :)

XML de la vista

<Panel headerText="Virtual Assistant">
  <FlexBox direction="Column">
    <List items="{chatModel>/chat}">
      <CustomListItem>
        <HBox>
          <Text text="{chatModel>sender}: " class="chatSender"/>
          <Text text="{chatModel>message}" class="chatMessage"/>
        </HBox>
      </CustomListItem>
    </List>
    <HBox>
      <TextArea id="chatInput" placeholder="Write your message here..."/>
      <Button text="Enviar" press="onSendChat"/>
    </HBox>
  </FlexBox>
</Panel>
Enter fullscreen mode Exit fullscreen mode

Lógica del controlador

onSendChat: async function () {
  const sMessage = this.byId("chatInput").getValue();
  const oModel = this.getView().getModel("chatModel");
  const aChat = oModel.getProperty("/chat");

  // Añadir mensaje del usuario
  aChat.push({ sender: "", message: sMessage });
  oModel.setProperty("/chat", aChat);

  try {
    const res = await fetch("http://localhost:8000/ask", {
      method: "POST",
      headers: { "Content-Type": "application/json" },
      body: JSON.stringify({ question: sMessage })
    });
    const data = await res.json();

    // Añadir respuesta del bot
    aChat.push({ sender: "Bot", message: data.answer.output });
    oModel.setProperty("/chat", aChat);
  } catch (e) {
    aChat.push({ sender: "Bot", message: "Error conectando con el asistente." });
    oModel.setProperty("/chat", aChat);
  }

  this.byId("chatInput").setValue(""); // Limpiar input
}
Enter fullscreen mode Exit fullscreen mode

El chatbot es funcional, rápido, y permite integraciones conversacionales sobre SAP sin complicaciones.

El proyecto completo está en GitHub:
Betheval - MaterialFlow

Integrar SAP CAP con un agente inteligente en Python abre un mundo de posibilidades. Puedes construir asistentes conversacionales internos, interfaces más naturales para usuarios o incluso automatizar flujos complejos de negocio.

Top comments (0)