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

Каналы

Каналы — это интеграции с мессенджер-платформами, которые связывают PRX с внешним миром. Каждый канал реализует унифицированный интерфейс для отправки и получения сообщений, обработки медиа, управления индикаторами набора текста и проверки состояния. PRX может одновременно запускать несколько каналов из одного процесса демона.

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

PRX поддерживает 19 каналов обмена сообщениями, охватывающих потребительские платформы, корпоративные инструменты, протоколы с открытым исходным кодом и интерфейсы разработчиков.

Матрица сравнения каналов

КаналЛСГруппыМедиаГолосE2EEПлатформаСтатус
TelegramДаДаДаНетНетКросс-платформ.Стабильный
DiscordДаДаДаНетНетКросс-платформ.Стабильный
SlackДаДаДаНетНетКросс-платформ.Стабильный
WhatsAppДаДаДаНетДаCloud APIСтабильный
WhatsApp WebДаДаДаНетДаMulti-deviceБета
SignalДаДаДаНетДаКросс-платформ.Стабильный
iMessageДаДаДаНетДаТолько macOSБета
MatrixДаДаДаНетДаФедеративныйСтабильный
EmailДаНетДаНетНетIMAP/SMTPСтабильный
Lark / FeishuДаДаДаНетНетКросс-платформ.Стабильный
DingTalkДаДаДаНетНетКросс-платформ.Стабильный
QQДаДаДаНетНетКросс-платформ.Бета
MattermostДаДаДаНетНетСамохостингСтабильный
Nextcloud TalkДаДаДаНетНетСамохостингБета
IRCДаДаНетНетНетФедеративныйСтабильный
LINQДаДаДаНетНетПартнёрский APIАльфа
CLIДаНетНетНетН/ДТерминалСтабильный
TerminalДаНетНетНетН/ДТерминалСтабильный
WacliДаДаДаНетДаJSON-RPCБета

Обозначения:

  • Стабильный — готов к промышленной эксплуатации, полностью протестирован
  • Бета — функционален, с известными ограничениями
  • Альфа — экспериментальный, API может измениться

Общий шаблон конфигурации

Все каналы настраиваются в разделе [channels] файла ~/.config/openprx/openprx.toml. Каждый канал имеет собственную подсекцию с платформо-специфичными настройками.

Базовая структура

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:

toml
[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 = false

Signal:

toml
[channels.signal]
phone_number = "+1234567890"
signal_cli_path = "/usr/local/bin/signal-cli"
allowed_users = ["+1987654321"]

Matrix (с E2EE):

toml
[channels.matrix]
homeserver_url = "https://matrix.org"
username = "@prx-bot:matrix.org"
password = "secure-password"
allowed_users = ["@alice:matrix.org"]

Email (IMAP/SMTP):

toml
[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:

toml
[channels.dingtalk]
app_key = "dingxxxxxxxxxxxxxxxx"
app_secret = "xxxxxxxxxxxxxxxxxxxxxxxx"
robot_code = "dingxxxxxxxxx"
allowed_users = []

Политики ЛС

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

Типы политик

ПолитикаПоведение
pairingТребует рукопожатие сопряжения до принятия отправителя. Пользователь должен пройти поток запрос-ответ для аутентификации. Будущая функция — в настоящее время откатывается к allowlist.
allowlist(По умолчанию) Только отправители, указанные в массиве allowed_users канала, могут взаимодействовать с агентом. Сообщения от неуказанных отправителей молча игнорируются.
openЛюбой пользователь может отправлять личные сообщения агенту. Используйте с осторожностью в промышленной эксплуатации.
disabledВсе личные сообщения игнорируются. Полезно, когда PRX должен отвечать только в группах.

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

Политики ЛС задаются на верхнем уровне конфигурации каналов:

toml
[channels]
dm_policy = "allowlist"         # "pairing" | "allowlist" | "open" | "disabled"

Массив allowed_users каждого канала является списком разрешённых для этого канала:

toml
[channels.telegram]
bot_token = "..."
allowed_users = ["alice", "bob"]  # Только эти пользователи могут писать в ЛС

Когда dm_policy = "open", поле allowed_users игнорируется и все отправители принимаются.

Групповые политики

Аналогично политикам ЛС, PRX контролирует, в каких групповых разговорах агент участвует:

ПолитикаПоведение
allowlist(По умолчанию) Мониторятся только группы, указанные в списке разрешённых групп канала.
openАгент отвечает в любой группе, в которую его добавят.
disabledВсе групповые сообщения игнорируются.
toml
[channels]
group_policy = "allowlist"

[channels.telegram]
bot_token = "..."
# Список разрешённых групп настраивается для каждого канала

Режим «только по упоминанию»

Большинство каналов поддерживают флаг mention_only. При его включении агент отвечает только на сообщения, явно упоминающие его (через @-упоминание, ответ или платформо-специфичный триггер). Это полезно в групповых чатах, чтобы агент не отвечал на каждое сообщение.

toml
[channels.discord]
bot_token = "..."
mention_only = true   # Отвечать только при @-упоминании

Режим потоковой передачи

Некоторые каналы поддерживают потоковую передачу ответов LLM в реальном времени. Настройка stream_mode контролирует отображение потокового вывода:

РежимПоведение
editРедактирует одно и то же сообщение по мере поступления токенов (Telegram, Discord)
appendДополняет сообщение новым текстом
noneОжидает полный ответ перед отправкой
toml
[channels.telegram]
bot_token = "..."
stream_mode = "edit"
draft_update_interval_ms = 1000   # Как часто обновлять черновик (мс)

Добавление нового канала

Каналы PRX основаны на трейте Channel. Для подключения нового канала:

  1. Добавьте конфигурацию канала в ваш openprx.toml
  2. Перезапустите демон: prx daemon

Альтернативно используйте интерактивный мастер каналов:

bash
prx channel add telegram

Для просмотра активных каналов:

bash
prx channel list

Для диагностики проблем подключения каналов:

bash
prx channel doctor

Архитектура каналов

Внутри каждый канал:

  1. Слушает входящие сообщения от платформы (через опрос, вебхуки или WebSocket)
  2. Фильтрует сообщения на основе политик ЛС/групп и списков разрешённых
  3. Маршрутизирует принятые сообщения в цикл агента для обработки
  4. Отправляет ответ агента обратно через API платформы
  5. Сообщает о состоянии и автоматически переподключается с экспоненциальной задержкой

Все каналы работают параллельно в процессе демона, разделяя среду выполнения агента, память и подсистемы инструментов.

Следующие шаги

Выберите канал, чтобы узнать о его конкретной настройке:

  • Telegram — интеграция через Bot API
  • Discord — бот со слеш-командами
  • Slack — приложение Slack с Socket Mode
  • WhatsApp — интеграция через Cloud API
  • Signal — мост Signal CLI
  • Matrix — федеративный чат с E2EE
  • Lark / Feishu — корпоративный мессенджер
  • Email — интеграция IMAP/SMTP

Released under the Apache-2.0 License.