Каналы
Каналы — это интеграции с мессенджер-платформами, которые связывают PRX с внешним миром. Каждый канал реализует унифицированный интерфейс для отправки и получения сообщений, обработки медиа, управления индикаторами набора текста и проверки состояния. PRX может одновременно запускать несколько каналов из одного процесса демона.
Поддерживаемые каналы
PRX поддерживает 19 каналов обмена сообщениями, охватывающих потребительские платформы, корпоративные инструменты, протоколы с открытым исходным кодом и интерфейсы разработчиков.
Матрица сравнения каналов
| Канал | ЛС | Группы | Медиа | Голос | E2EE | Платформа | Статус |
|---|---|---|---|---|---|---|---|
| Telegram | Да | Да | Да | Нет | Нет | Кросс-платформ. | Стабильный |
| Discord | Да | Да | Да | Нет | Нет | Кросс-платформ. | Стабильный |
| Slack | Да | Да | Да | Нет | Нет | Кросс-платформ. | Стабильный |
| Да | Да | Да | Нет | Да | Cloud API | Стабильный | |
| WhatsApp Web | Да | Да | Да | Нет | Да | Multi-device | Бета |
| Signal | Да | Да | Да | Нет | Да | Кросс-платформ. | Стабильный |
| iMessage | Да | Да | Да | Нет | Да | Только macOS | Бета |
| Matrix | Да | Да | Да | Нет | Да | Федеративный | Стабильный |
| Да | Нет | Да | Нет | Нет | IMAP/SMTP | Стабильный | |
| Lark / Feishu | Да | Да | Да | Нет | Нет | Кросс-платформ. | Стабильный |
| DingTalk | Да | Да | Да | Нет | Нет | Кросс-платформ. | Стабильный |
| Да | Да | Да | Нет | Нет | Кросс-платформ. | Бета | |
| Mattermost | Да | Да | Да | Нет | Нет | Самохостинг | Стабильный |
| Nextcloud Talk | Да | Да | Да | Нет | Нет | Самохостинг | Бета |
| IRC | Да | Да | Нет | Нет | Нет | Федеративный | Стабильный |
| LINQ | Да | Да | Да | Нет | Нет | Партнёрский API | Альфа |
| CLI | Да | Нет | Нет | Нет | Н/Д | Терминал | Стабильный |
| Terminal | Да | Нет | Нет | Нет | Н/Д | Терминал | Стабильный |
| Wacli | Да | Да | Да | Нет | Да | JSON-RPC | Бета |
Обозначения:
- Стабильный — готов к промышленной эксплуатации, полностью протестирован
- Бета — функционален, с известными ограничениями
- Альфа — экспериментальный, API может измениться
Общий шаблон конфигурации
Все каналы настраиваются в разделе [channels] файла ~/.config/openprx/openprx.toml. Каждый канал имеет собственную подсекцию с платформо-специфичными настройками.
Базовая структура
[channels]
# Включение встроенного CLI-канала (по умолчанию: true)
cli = true
# Таймаут обработки одного сообщения в секундах (по умолчанию: 300)
message_timeout_secs = 300
# ── Telegram ──────────────────────────────────────────────
[channels.telegram]
bot_token = "123456789:ABCdefGHIjklMNOpqrsTUVwxyz"
allowed_users = ["alice", "bob"]
stream_mode = "edit" # "edit" | "append" | "none"
mention_only = false
# ── Discord ───────────────────────────────────────────────
[channels.discord]
bot_token = "MTIzNDU2Nzg5.XXXXXX.XXXXXXXXXX"
guild_id = "1234567890" # необязательно: ограничить одним сервером
allowed_users = [] # пусто = разрешить всем
listen_to_bots = false
mention_only = false
# ── Slack ─────────────────────────────────────────────────
[channels.slack]
bot_token = "xoxb-..."
app_token = "xapp-..."
allowed_users = []
mention_only = trueПримеры для конкретных каналов
Lark / Feishu:
[channels.lark]
app_id = "cli_xxxxxxxxxxxx"
app_secret = "xxxxxxxxxxxxxxxxxxxxxxxx"
allowed_users = []
use_feishu = false # true для Feishu (Китай), false для Lark (международный)
receive_mode = "websocket" # "websocket" | "webhook"
mention_only = falseSignal:
[channels.signal]
phone_number = "+1234567890"
signal_cli_path = "/usr/local/bin/signal-cli"
allowed_users = ["+1987654321"]Matrix (с E2EE):
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@prx-bot:matrix.org"
password = "secure-password"
allowed_users = ["@alice:matrix.org"]Email (IMAP/SMTP):
[channels.email]
imap_host = "imap.gmail.com"
imap_port = 993
smtp_host = "smtp.gmail.com"
smtp_port = 587
username = "[email protected]"
password = "app-specific-password"
allowed_from = ["[email protected]"]DingTalk:
[channels.dingtalk]
app_key = "dingxxxxxxxxxxxxxxxx"
app_secret = "xxxxxxxxxxxxxxxxxxxxxxxx"
robot_code = "dingxxxxxxxxx"
allowed_users = []Политики ЛС
PRX обеспечивает детальный контроль над тем, кто может отправлять личные сообщения вашему агенту. Политика ЛС настраивается для каждого канала и определяет, как обрабатываются входящие личные сообщения.
Типы политик
| Политика | Поведение |
|---|---|
pairing | Требует рукопожатие сопряжения до принятия отправителя. Пользователь должен пройти поток запрос-ответ для аутентификации. Будущая функция — в настоящее время откатывается к allowlist. |
allowlist | (По умолчанию) Только отправители, указанные в массиве allowed_users канала, могут взаимодействовать с агентом. Сообщения от неуказанных отправителей молча игнорируются. |
open | Любой пользователь может отправлять личные сообщения агенту. Используйте с осторожностью в промышленной эксплуатации. |
disabled | Все личные сообщения игнорируются. Полезно, когда PRX должен отвечать только в группах. |
Конфигурация
Политики ЛС задаются на верхнем уровне конфигурации каналов:
[channels]
dm_policy = "allowlist" # "pairing" | "allowlist" | "open" | "disabled"Массив allowed_users каждого канала является списком разрешённых для этого канала:
[channels.telegram]
bot_token = "..."
allowed_users = ["alice", "bob"] # Только эти пользователи могут писать в ЛСКогда dm_policy = "open", поле allowed_users игнорируется и все отправители принимаются.
Групповые политики
Аналогично политикам ЛС, PRX контролирует, в каких групповых разговорах агент участвует:
| Политика | Поведение |
|---|---|
allowlist | (По умолчанию) Мониторятся только группы, указанные в списке разрешённых групп канала. |
open | Агент отвечает в любой группе, в которую его добавят. |
disabled | Все групповые сообщения игнорируются. |
[channels]
group_policy = "allowlist"
[channels.telegram]
bot_token = "..."
# Список разрешённых групп настраивается для каждого каналаРежим «только по упоминанию»
Большинство каналов поддерживают флаг mention_only. При его включении агент отвечает только на сообщения, явно упоминающие его (через @-упоминание, ответ или платформо-специфичный триггер). Это полезно в групповых чатах, чтобы агент не отвечал на каждое сообщение.
[channels.discord]
bot_token = "..."
mention_only = true # Отвечать только при @-упоминанииРежим потоковой передачи
Некоторые каналы поддерживают потоковую передачу ответов LLM в реальном времени. Настройка stream_mode контролирует отображение потокового вывода:
| Режим | Поведение |
|---|---|
edit | Редактирует одно и то же сообщение по мере поступления токенов (Telegram, Discord) |
append | Дополняет сообщение новым текстом |
none | Ожидает полный ответ перед отправкой |
[channels.telegram]
bot_token = "..."
stream_mode = "edit"
draft_update_interval_ms = 1000 # Как часто обновлять черновик (мс)Добавление нового канала
Каналы PRX основаны на трейте Channel. Для подключения нового канала:
- Добавьте конфигурацию канала в ваш
openprx.toml - Перезапустите демон:
prx daemon
Альтернативно используйте интерактивный мастер каналов:
prx channel add telegramДля просмотра активных каналов:
prx channel listДля диагностики проблем подключения каналов:
prx channel doctorАрхитектура каналов
Внутри каждый канал:
- Слушает входящие сообщения от платформы (через опрос, вебхуки или WebSocket)
- Фильтрует сообщения на основе политик ЛС/групп и списков разрешённых
- Маршрутизирует принятые сообщения в цикл агента для обработки
- Отправляет ответ агента обратно через API платформы
- Сообщает о состоянии и автоматически переподключается с экспоненциальной задержкой
Все каналы работают параллельно в процессе демона, разделяя среду выполнения агента, память и подсистемы инструментов.
Следующие шаги
Выберите канал, чтобы узнать о его конкретной настройке: