Skip to content
Эта страница создана и переведена с помощью ИИ. Если вы заметили неточности, помогите нам улучшить её. Редактировать на GitHub

Обмен сообщениями

PRX предоставляет два инструмента обмена сообщениями, которые позволяют агентам отправлять сообщения обратно через каналы связи. Инструмент message_send -- это высокоуровневый интерфейс для отправки текстовых, медиа- и голосовых сообщений на любой настроенный канал, а инструмент gateway предоставляет низкоуровневый доступ к HTTP/WebSocket-шлюзу Axum для прямой доставки сообщений.

Инструменты обмена сообщениями регистрируются на уровне шлюза и доступны при наличии активного канала. Инструмент message_send автоматически маршрутизирует сообщения в активный канал (Telegram, Discord, Slack, CLI и т.д.), а инструмент gateway предлагает прямой доступ к протоколу шлюза для продвинутых сценариев.

Эти инструменты дополняют систему входящих каналов. В то время как каналы обрабатывают получение сообщений от пользователей и их маршрутизацию к агенту, инструменты обмена сообщениями обрабатывают исходящее направление -- отправку сгенерированного агентом контента обратно пользователям.

Конфигурация

Инструменты обмена сообщениями не имеют отдельного раздела конфигурации. Их доступность зависит от конфигурации каналов и шлюза:

toml
# Конфигурация шлюза (инструменты обмена сообщениями зависят от неё)
[gateway]
host = "127.0.0.1"
port = 16830

# Конфигурация каналов (message_send маршрутизирует в активный канал)
[channels_config]
cli = true
message_timeout_secs = 300

[channels_config.telegram]
bot_token = "123456:ABC-DEF..."
allowed_users = ["alice", "bob"]
stream_mode = "partial"

Инструмент message_send доступен при наличии хотя бы одного активного канала. Инструмент gateway всегда регистрируется в all_tools().

Справочник инструментов

message_send

Отправляет сообщение на любой настроенный канал и получателю. Инструмент автоматически маршрутизирует в активный канал -- канал, через который происходит текущий разговор.

Отправка текстового сообщения:

json
{
  "name": "message_send",
  "arguments": {
    "text": "The build completed successfully. All 42 tests passed.",
    "channel": "telegram"
  }
}

Отправка медиа (изображение/файл):

json
{
  "name": "message_send",
  "arguments": {
    "media_path": "/tmp/screenshot.png",
    "caption": "Current dashboard state",
    "channel": "telegram"
  }
}

Отправка голосового сообщения:

json
{
  "name": "message_send",
  "arguments": {
    "voice_path": "/tmp/summary.mp3",
    "channel": "telegram"
  }
}
ПараметрТипОбязательныйПо умолчаниюОписание
textstringУсловно--Текст сообщения (обязателен, если нет медиа/голоса)
channelstringНетАктивный каналИмя целевого канала (определяется автоматически, если не указано)
recipientstringНетТекущий пользовательИдентификатор получателя (ID пользователя, ID чата и т.д.)
media_pathstringНет--Путь к медиафайлу (изображение, документ, видео)
captionstringНет--Подпись для медиа-сообщений
voice_pathstringНет--Путь к голосовому/аудиофайлу
reply_tostringНет--ID сообщения для ответа (зависит от платформы)

gateway

Низкоуровневый доступ к шлюзу для отправки необработанных сообщений через HTTP/WebSocket-шлюз Axum. Этот инструмент предназначен для продвинутых сценариев, где message_send недостаточен.

json
{
  "name": "gateway",
  "arguments": {
    "action": "send",
    "payload": {
      "type": "text",
      "content": "Raw gateway message",
      "target": "ws://localhost:16830/ws"
    }
  }
}
ПараметрТипОбязательныйПо умолчаниюОписание
actionstringДа--Действие шлюза: "send", "broadcast", "status"
payloadobjectУсловно--Полезная нагрузка сообщения (обязательна для "send" и "broadcast")

Использование

Автоматическая маршрутизация каналов

В большинстве случаев агенту не нужно указывать канал. Когда пользователь отправляет сообщение через Telegram, ответ агента автоматически маршрутизируется обратно в Telegram:

Пользователь (через Telegram): Какая погода?
Агент: [вызывает message_send с text="Currently 22C and sunny in Shanghai."]
       → Автоматически отправлено в Telegram, в тот же чат

Межканальные сообщения

Агент может отправлять сообщения в другой канал, отличный от того, в котором происходит разговор:

json
{
  "name": "message_send",
  "arguments": {
    "text": "Build failed! Check CI logs.",
    "channel": "discord",
    "recipient": "111222333"
  }
}

Это полезно для сценариев уведомлений, когда агент мониторит один канал и отправляет оповещения в другой.

Доставка медиа

Агент может отправлять файлы, изображения и аудио через каналы обмена сообщениями:

  1. Сгенерировать или загрузить медиафайл
  2. Сохранить его во временный путь
  3. Отправить через message_send с media_path
Агент размышляет: Пользователь попросил график данных.
  1. [shell] python3 generate_chart.py --output /tmp/chart.png
  2. [message_send] media_path="/tmp/chart.png", caption="Monthly revenue chart"

Голосовые сообщения

Для каналов с поддержкой голоса (Telegram, WhatsApp, Discord) агент может отправлять аудио-сообщения:

Агент размышляет: Пользователь попросил голосовое резюме.
  1. [tts] text="Here is your daily summary..." output="/tmp/summary.mp3"
  2. [message_send] voice_path="/tmp/summary.mp3"

Детали маршрутизации каналов

При вызове message_send без явного параметра channel PRX определяет целевой канал по следующей логике:

  1. Канал активной сессии: Канал, связанный с текущей сессией агента (устанавливается при создании сессии входящим сообщением)
  2. Канал по умолчанию: Если канал сессии не установлен, переключается на первый активный канал
  3. Резервный CLI: Если каналы не настроены, вывод идёт в stdout

Поддерживаемые транспорты каналов

КаналТекстМедиаГолосОтвет
TelegramДаДаДаДа
DiscordДаДаДаДа
SlackДаДаНетДа
WhatsAppДаДаДаДа
SignalДаДаНетДа
MatrixДаДаНетДа
EmailДаДа (вложение)НетДа
CLIДаНетНетНет

Безопасность

Авторизация каналов

Исходящие сообщения подчиняются тем же политикам каналов, что и входящие сообщения. Агент может отправлять сообщения только в настроенные и активные каналы. Попытка отправки в ненастроенный канал возвращает ошибку.

Валидация получателей

При указании recipient PRX проверяет, что получатель доступен через целевой канал. Для каналов со списками allowed_users исходящие сообщения к незарегистрированным получателям блокируются.

Ограничение частоты

Исходящие сообщения подчиняются ограничениям частоты канала (настраиваемым для каждой платформы). Например, Telegram применяет ограничения API, которые PRX соблюдает с автоматической задержкой.

Политика безопасности

Инструментами обмена сообщениями можно управлять через политику безопасности:

toml
[security.tool_policy.tools]
message_send = "allow"
gateway = "supervised"     # Требовать одобрение для прямого доступа к шлюзу

Журнал аудита

Все исходящие сообщения записываются в журнал аудита:

  • Целевой канал и получатель
  • Тип сообщения (текст, медиа, голос)
  • Метка времени
  • Статус доставки

Пути к медиафайлам логируются, но содержимое файлов не сохраняется в журнале аудита.

Связанные разделы

Released under the Apache-2.0 License.