> For clean Markdown of any page, append .md to the page URL.
> For a complete documentation index, see https://agentinbox.space/llms.txt.
> For AI client integration (Claude Code, Cursor, etc.), connect to the MCP server at https://agentinbox.space/_mcp/server.

# Интеграция с LiveKit Agents

> Пошаговое руководство по интеграции с LiveKit Agents SDK.

## Обзор

В этом руководстве собирается голосовой ассистент с почтой в реальном времени. Для голоса используется LiveKit Agents SDK.

## Требования

Сначала пройдите [быстрый старт LiveKit Voice AI](https://docs.livekit.io/agents/start/voice-ai/) и соберите простой голосовой ассистент. Здесь мы расширим его почтовыми возможностями.

Должен быть файл `agent.py`, который мы будем менять.

## Настройка

Установите пакеты Python:

```shell
pip install agentinbox agentinbox-toolkit
```

Задайте переменные окружения:

```env
AGENTINBOX_API_KEY=<Your Agent Inbox API key>
AGENTINBOX_USERNAME=<Choose a username for your agent's inbox>
```

## Код

В `agent.py` добавьте импорты:

```python
import os
import asyncio

from agentinbox import Agentinbox, AsyncAgentinbox, Subscribe, MessageReceivedEvent
from agentinbox_toolkit.livekit import AgentinboxToolkit
```

Затем добавьте класс `EmailAssistant`:

```python
class EmailAssistant(Agent):
    inbox_id: str
    ws_task: asyncio.Task | None = None

    def __init__(self) -> None:
        client = Agentinbox()

        # By setting the client_id the inbox is created only once.
        username = os.getenv("AGENTINBOX_USERNAME")
        inbox = client.inboxes.create(username=username, client_id=f"{username}-inbox")

        self.inbox_id = inbox.inbox_id

        super().__init__(
            instructions=f"""
            Ты полезный голосовой и почтовый AI-ассистент. Твоё имя — Agent Inbox. Ты получаешь письма на {self.inbox_id}. Можешь отправлять письма и отвечать.
            При вызове почтовых инструментов указывай "{self.inbox_id}" как inbox_id. В подписи писем указывай «Agent Inbox».
            Говори по-русски.
            ВАЖНО: {self.inbox_id} — твой ящик, а не ящик пользователя.
            """,
            # The Agent Inbox Toolkit has ready-to-go tools for LiveKit agents.
            tools=AgentinboxToolkit(client=client).get_tools(
                [
                    "list_threads",
                    "get_thread",
                    "get_attachment",
                    "send_message",
                    "reply_to_message",
                ]
            ),
        )

    async def _websocket_task(self):
        # Open a websocket connection to Agent Inbox.
        async with AsyncAgentinbox().websockets.connect() as socket:
            # Subscribe to events from the inbox.
            await socket.send_subscribe(Subscribe(inbox_ids=[self.inbox_id]))

            while True:
                data = await socket.recv()

                # If a message is received by the inbox, interrupt the current conversation and generate a reply.
                if isinstance(data, MessageReceived):
                    self.session.interrupt()

                    await self.session.generate_reply(
                        instructions=f"""Скажи «Я получил письмо», затем прочитай письмо.""",
                        user_input=data.message.model_dump_json(),
                    )

    # Open the websocket connection and generate a greeting when the agent enters the call.
    async def on_enter(self):
        self.ws_task = asyncio.create_task(self._websocket_task())

        await self.session.generate_reply(
            instructions=f"""По-русски поздоровайся с пользователем, представься как Agent Inbox, скажи, что можешь получать письма на {self.inbox_id}, и предложи помощь.""",
            allow_interruptions=False,
        )

    # Close the websocket connection when the agent exits the call.
    async def on_exit(self):
        if self.ws_task:
            self.ws_task.cancel()
```

Наконец обновите функцию `entrypoint`:

```python
await session.start(
    room=ctx.room,
    agent=EmailAssistant(),  # Replace Assistant with EmailAssistant.
    room_input_options=RoomInputOptions(
        noise_cancellation=noise_cancellation.BVC()
    ),
)
```

## Готово

Запустите агента в терминале и отправьте ему письмо:

```shell
python agent.py console
```