콘텐츠로 이동

메시징 채널 연결

채널 개념, 허용 목록 동작 방식, 폴링 대 웹훅 전달 방식, 그리고 첫 번째 채널을 추가하는 방법을 설명합니다.

채널은 에이전트가 메시징 플랫폼(Telegram, Discord, Slack, Matrix, WhatsApp, 이메일 등)을 통해 사용자에게 연락하는 수단입니다. 각 채널은 데몬 아래에서 실행되며, 인바운드 메시지를 수신하고, 허용 목록을 적용한 뒤, 플랫폼 API를 통해 에이전트의 응답을 전송합니다. 이 가이드에서는 채널 모델, 운영 전에 반드시 이해해야 할 전면 거부(deny-all) 허용 목록 기본값, 폴링과 웹훅 전달 방식의 차이, 그리고 채널을 추가·조회·제어하는 revka channel 명령어를 설명합니다. CLI에서 첫 번째 채널을 연결할 때 이 가이드를 활용하세요.

플랫폼별 설정 절차는 Telegram 및 Matrix 설정Mattermost 및 Nextcloud Talk 설정을 참고하거나, 전체 채널 개요와 채널 카탈로그를 확인하세요. 채널이 실행되는 호스트 프로세스를 시작하려면 대시보드 실행을 먼저 읽어보세요.

모든 채널은 ~/.revka/config.toml[channels_config] 네임스페이스 아래에 설정되며, 데몬이 실행될 때 채널 수퍼바이저가 관리합니다. 수퍼바이저는 각 채널에 발신자별 대화 기록, 동시 메시지 처리, 자동 지수 백오프 재연결 기능을 제공합니다.

채널은 revka daemon(게이트웨이 + 채널 + 하트비트 + cron) 내부에서 실행됩니다. revka channel start로 설정된 채널만 단독으로 시작할 수도 있습니다. 채널은 대시보드와 API만 제공하는 revka gateway 단독 실행 환경에서는 동작하지 않습니다.

최소한의 Telegram 채널 블록은 다음과 같습니다.

[channels_config]
message_timeout_secs = 300
[channels_config.telegram]
bot_token = "1234567890:ABCDEFabcdef-your-token"
allowed_users = ["myusername"]
stream_mode = "off"
mention_only = false

message_timeout_secs(기본값 300)는 메시지당 기본 타임아웃이며, 툴 루프 깊이에 따라 [pacing].message_timeout_scale_max(기본값 4)까지 늘어납니다. 플랫폼 공통 채널 필드로는 bot_token/api_key, 허용 목록 필드(아래 참조), mention_only, stream_mode, proxy_url 등이 있습니다. 각 플랫폼의 정확한 키는 Config: 채널, 도구 및 통합과 채널별 카탈로그 페이지에서 확인할 수 있습니다.

허용 목록 동작 방식 (기본값: 전면 거부)

섹션 제목: “허용 목록 동작 방식 (기본값: 전면 거부)”

가장 중요한 채널 개념은 모든 채널의 허용 목록은 기본적으로 빈 목록이며, 이는 전면 거부를 의미합니다. 새로 추가된 채널은 연결되어 메시지를 수신하지만, 신원을 명시적으로 추가하기 전까지는 모든 메시지를 무시합니다. 이는 봇을 발견한 불특정 사용자가 에이전트를 조작하는 것을 막기 위한 보안 기본값입니다.

두 가지 특수 케이스:

  • 빈 목록 [] → 전면 거부 (아무도 허용되지 않음).
  • 단일 항목 "*" → 전체 허용 (모든 발신자 허용). 노출 범위를 충분히 이해한 경우에만 사용하세요.

허용 목록 필드명은 플랫폼마다 다릅니다.

채널허용 목록 필드
Telegram, Discord, Slack, Mattermost, Matrix, IRC, Lark, Feishu, DingTalk, QQ, Nextcloud Talk, WeCom, Mochat, Twitterallowed_users
Signalallowed_from
WhatsApp (Cloud API & Web), WATIallowed_numbers
Email, Linq, Gmail Pushallowed_senders
iMessageallowed_contacts
Nostrallowed_pubkeys
ClawdTalkallowed_destinations

따라서 전면 거부 Discord 채널과 전체 허용 채널은 allowed_users 값만 다릅니다.

[channels_config.discord]
bot_token = "..."
allowed_users = [] # deny all (default)
# vs.
[channels_config.discord]
bot_token = "..."
allowed_users = ["*"] # allow all senders

채널은 두 가지 방식 중 하나로 인바운드 메시지를 수신하며, 이 차이에 따라 공개 주소가 필요한지 여부가 결정됩니다.

  • 폴링 / 아웃바운드 연결 채널은 Revka에서 시작하는 연결을 사용합니다(롱 폴링, 봇이 다이얼아웃하는 WebSocket/게이트웨이 연결, 또는 주기적인 REST 폴링). NAT 뒤에서도 동작하며 공개 인바운드 포트가 필요하지 않습니다. Telegram, Discord, Slack, Mattermost, Matrix, Signal, IRC, Bluesky, Reddit, 이메일(IMAP IDLE)이 여기에 해당합니다.
  • 웹훅 / 푸시 채널은 플랫폼이 사용자에게 이벤트를 POST해야 하므로, 게이트웨이에 도달할 수 있는 공개 HTTPS 콜백 URL이 필요합니다. WhatsApp Cloud API, WATI, Nextcloud Talk, Linq, Gmail Push, 범용 웹훅 채널이 이 방식으로 동작합니다.
채널수신 방식공개 인바운드 포트 필요 여부
Telegramlong-polling아니요
DiscordGateway WebSocket아니요
SlackSocket Mode / polling아니요
MattermostREST polling아니요
Matrixsync API아니요
Signalsignal-cli SSE bridge아니요
IRCTLS socket아니요
Email (IMAP)IMAP IDLE아니요
WhatsApp Cloud APIwebhook (push)
WATIwebhook (push)
Nextcloud Talkwebhook (push)
Linqwebhook (push)
Gmail PushPub/Sub webhook
Generic WebhookHTTP server대부분 예

플랫폼에 공개 콜백이 필요한 경우, 게이트웨이를 공개 주소에 직접 바인딩하는 대신 터널로 노출하세요. 터널로 게이트웨이 노출웹훅 인그레스 API 레퍼런스를 참고하세요. 모든 플랫폼의 전체 전달 방식 매트릭스는 채널 개요에서 확인할 수 있습니다.

가장 빠른 방법은 revka channel add입니다. 채널 유형과 JSON 설정 블록을 인수로 전달하면 config.toml에 기록됩니다. 지원 유형은 telegram, discord, slack, whatsapp, matrix, imessage, email입니다.

  1. 채널을 추가합니다. 나중에 참조할 수 있도록 name을 포함하세요. 허용 목록은 여전히 전면 거부가 기본값이므로, 다음 단계에서 본인을 추가할 계획을 세우세요.

    Terminal window
    revka channel add telegram '{"bot_token":"123456:YOUR-TOKEN","name":"my-bot"}'
  2. 본인을 허용 목록에 추가합니다. Telegram의 경우 전용 헬퍼 명령어가 있습니다. 사용자 이름(@ 없이) 또는 숫자 사용자 ID를 전달하면 허용 목록에 추가됩니다.

    Terminal window
    revka channel bind-telegram revka_user
    revka channel bind-telegram 123456789

    다른 플랫폼의 경우, config.toml에서 해당 채널의 허용 목록 필드(예: allowed_users, allowed_numbers, allowed_senders)를 직접 편집하세요.

  3. 설정을 확인합니다. 시작하기 전에 채널 상태 검사를 실행하세요.

    Terminal window
    revka channel doctor
  4. 채널을 시작합니다 (또는 revka daemon으로 전체 런타임을 시작합니다).

    Terminal window
    revka channel start
  5. 플랫폼에서 봇에게 테스트 메시지를 보냅니다. mention_only = false로 설정하고 본인의 신원이 허용 목록에 있으면 에이전트가 응답합니다.

토큰 입력을 대화형으로 진행하고 싶다면, 온보딩 마법사에 채널 설정 단계가 포함되어 있으며, revka onboard --channels-only를 실행하면 채널 복구 플로우만 다시 실행할 수 있습니다.

revka channel은 CLI에서 통신 채널을 관리합니다. 서브커맨드 목록:

서브커맨드기능
revka channel list설정된 모든 채널 목록 표시
revka channel start설정된 모든 채널 시작
revka channel doctor설정된 모든 채널의 상태 검사 실행
revka channel add <type> <config_json>채널 추가 (telegram, discord, slack, whatsapp, matrix, imessage, email)
revka channel remove <name>설정 이름으로 채널 제거
revka channel bind-telegram <identity>Telegram 사용자 이름(@ 없이) 또는 숫자 사용자 ID를 허용 목록에 추가
revka channel send <message> --channel-id <NAME> --recipient <TARGET>일회성 메시지 전송
Terminal window
revka channel list
revka channel add discord '{"bot_token":"...","name":"my-discord"}'
revka channel remove my-bot

revka channel send는 대화 없이 이미 설정된 채널을 통해 단일 메시지를 전달합니다. --channel-id는 채널의 설정 이름이고, --recipient는 플랫폼별 대상(채팅 ID, 전화번호 등)입니다. 센서 알림, cron 작업 요약, 배포 알림 등 스크립트 알림 및 자동화 파이프라인용으로 설계되었습니다.

Terminal window
revka channel send 'Someone is near your device.' --channel-id telegram --recipient 123456789

채널이 실행 중일 때 채널 런타임은 config.toml을 감시하며, 데몬 재시작 없이 다음 인바운드 메시지 수신 시 특정 키를 리로드합니다.

  • default_provider
  • default_model
  • default_temperature
  • api_key / api_url
  • reliability.* (재시도 및 폴백 공급자)

이를 통해 라이브 채널에서 공급자, 모델, 또는 API 키를 교체하면 다음 메시지에서 변경 사항이 적용됩니다. 채널 추가·제거, 토큰 및 허용 목록 변경 등 그 외 설정은 핫 리로드되지 않으므로, 채널(revka channel start) 또는 데몬을 재시작하여 적용하세요.

텍스트 명령어를 지원하는 채널(예: Telegram, Discord)에서는 허용 목록에 등록된 사용자가 세션을 인라인으로 제어할 수 있습니다.

명령어효과
/models사용 가능한 공급자 표시
/models <provider>현재 세션의 공급자 전환
/model현재 모델 표시
/model <model-id>현재 세션의 모델 전환
/new대화 기록을 초기화하고 새로 시작
  • 봇이 연결되지만 응답하지 않습니다. 발신자가 허용 목록에 없는 것입니다. 기본값은 전면 거부([])임을 기억하세요. 본인의 신원을 추가(Telegram의 경우 revka channel bind-telegram <you>, 또는 허용 목록 필드 편집)하고 채널을 재시작하세요.
  • 웹훅 채널이 아무것도 수신하지 않습니다. 게이트웨이에 도달할 수 있는 공개 HTTPS 콜백이 필요합니다. 플랫폼의 웹훅 URL이 127.0.0.1이 아닌 터널을 가리키는지 확인하세요. 터널로 게이트웨이 노출을 참고하세요.
  • 설정 변경이 적용되지 않습니다. 위의 핫 리로드 키만 다음 메시지에서 적용됩니다. 그 외 변경 사항은 revka channel start를 실행하거나 데몬을 재시작하세요.
  • 상태가 이상합니다. revka channel doctor로 채널별 상태 검사를 실행하고, revka doctor로 전체 시스템 진단을 수행하세요.