> ## Documentation Index
> Fetch the complete documentation index at: https://docs.doconda.com/llms.txt
> Use this file to discover all available pages before exploring further.

# Un chatbot con Vercel AI SDK que devuelve un Word

> Cómo hacer un chatbot en Next.js con el AI SDK de Vercel que crea documentos Word (.docx) y responde con el enlace de descarga.

Vas a hacer un chat en Next.js: el usuario pide un documento ("una carta de bienvenida para un cliente nuevo") y el
bot responde con el enlace para descargar el Word. El agente llama a Doconda desde tu servidor, así que la API key
nunca llega al navegador.

## Qué necesitas

* Un proyecto de Next.js con App Router (Node 20+).
* Una API key de Doconda en `DOCONDA_API_KEY`. Créala en el panel, en **API keys**.
* La key de tu proveedor de modelos. Aquí usamos Anthropic (`ANTHROPIC_API_KEY`); vale cualquier otro del AI SDK.

## 1. Instala las dependencias

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
npm install ai @ai-sdk/anthropic @ai-sdk/react @doconda/sdk
```

## 2. Crea la ruta del chat

`doconda.tools()` da las herramientas de Doconda (crear, subir, revisar, editar…). Las conviertes en herramientas del
AI SDK y se las pasas a `streamText`.

```ts app/api/chat/route.ts theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
import { anthropic } from "@ai-sdk/anthropic"
import { convertToModelMessages, isStepCount, jsonSchema, streamText, tool, type UIMessage } from "ai"
import { Doconda } from "@doconda/sdk"

const doconda = new Doconda()
const tools = Object.fromEntries(
  doconda.tools().map((t) => [
    t.name,
    tool({ description: t.description, inputSchema: jsonSchema(t.inputSchema), execute: (input) => t.run(input as Record<string, unknown>) }),
  ]),
)

export async function POST(req: Request) {
  const { messages }: { messages: UIMessage[] } = await req.json()
  const result = streamText({
    model: anthropic("claude-sonnet-5-5"),
    system: "Si el usuario pide un documento, créalo en Word (docx) y dale el enlace de descarga.",
    messages: await convertToModelMessages(messages),
    tools,
    stopWhen: isStepCount(5),
  })
  return result.toUIMessageStreamResponse()
}
```

## 3. Crea la página del chat

`useChat` envía los mensajes a `/api/chat` y va pintando la respuesta según llega.

```tsx app/page.tsx theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
"use client"

import { useChat } from "@ai-sdk/react"
import { useState } from "react"

export default function Chat() {
  const { messages, sendMessage } = useChat()
  const [input, setInput] = useState("")

  return (
    <main>
      {messages.map((m) => (
        <p key={m.id}>
          <b>{m.role}:</b> {m.parts.map((p) => (p.type === "text" ? p.text : "")).join("")}
        </p>
      ))}
      <form
        onSubmit={(e) => {
          e.preventDefault()
          sendMessage({ text: input })
          setInput("")
        }}
      >
        <input value={input} onChange={(e) => setInput(e.target.value)} placeholder="Pide un documento…" />
      </form>
    </main>
  )
}
```

## 4. Pruébalo

```bash theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
npm run dev
```

Abre `http://localhost:3000` y escribe "Hazme una carta de bienvenida para un cliente nuevo".

## Resultado

El agente llama a `create_document`, espera a que el Word esté listo y recibe esto:

```json theme={"theme":{"light":"github-light","dark":"github-dark-dimmed"}}
{
  "id": "doc_01JAB3…",
  "format": "docx",
  "status": "ready",
  "links": { "docx": "https://…", "pdf": "https://…" },
  "links_note": "Links expire in 5 minutes: call get_document for fresh ones."
}
```

La respuesta del bot trae el enlace al Word (`.docx`) y a su PDF. Los enlaces caducan a los 5 minutos; si el usuario
vuelve más tarde, el agente llama a `get_document` y obtiene otros nuevos.

## Siguientes pasos

* [AI SDK](/agents/ai-sdk): la guía completa, también con el cliente MCP.
* [SDK de TypeScript](/sdk/introduction): todos los métodos, por si quieres llamar a Doconda sin agente.
* [Ejemplos completos en GitHub](https://github.com/B-C-Software/doconda-examples).


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.