SMS — 문자로 AI에게 명령하기
SMS — Command AI by Text — easy-to-understand guide based on official docs
SMS — 문자로 AI에게 명령하기
스마트폰이 없던 시절, 문자 메시지가 가장 빠른 연락 수단이었던 때를 기억하시나요? 그 클래식한 채널이 아직도 건재합니다. 게다가 이제는 AI 어시스턴트와 대화하는 완전한 수단이 되었어요.
이제 Hermes가 Twilio를 통해 SMS에 연결됩니다. 전화번호만 있으면 누구나 봇에게 문자를 보내고 AI 응답을 받을 수 있어요. 앱 설치도, QR 코드도, 배울 것도 없습니다. 그냥 평범한 문자 메시지일 뿐이에요.
이번 업데이트의 새로운 기능
SMS 게이트웨이가 대대적으로 업그레이드되었습니다. 변경된 내용은 다음과 같아요:
SMS_WEBHOOK_URL이제 필수 — Hermes가 Twilio의 웹훅 서명을 검증해 사칭을 차단합니다. 이 값이 없으면 게이트웨이가 시작되지 않아요.- 새로운 환경 변수 —
SMS_WEBHOOK_HOST,SMS_WEBHOOK_PORT,SMS_INSECURE_NO_SIGNATURE,SMS_ALLOW_ALL_USERS로 더 세밀하게 제어할 수 있습니다. - 더 강화된 보안 기본값 — 게이트웨이는 기본적으로 모든 사용자를 거부합니다. 전화번호를 명시적으로 허용 목록에 추가해야 해요.
- 더 똑똑해진 메시지 분할 — 긴 응답은 단어 중간에서 잘리지 않고 자연스러운 경계(줄바꿈, 그다음 공백)에서 분할됩니다.
시작하기
먼저 Twilio 계정과 SMS 기능이 있는 전화번호가 필요합니다. Twilio는 무료 체험판을 제공하므로 돈 한 푼 들이지 않고 모든 것을 테스트할 수 있어요.
공개적으로 접근 가능한 서버도 필요합니다. 누군가 번호로 문자를 보내면 Twilio가 웹훅을 서버로 전송합니다. Hermes를 로컬에서 실행 중이라면 cloudflared나 ngrok 같은 도구로 localhost를 인터넷에 노출시킬 수 있어요.
SMS 확장 기능을 설치하세요:
cd ~/.hermes/hermes-agent && uv pip install -e ".[sms]"
1단계: Twilio 자격 증명 가져오기
Twilio 콘솔로 이동해 대시보드에서 Account SID와 Auth Token을 복사하고, E.164 형식(예: +15551234567)의 전화번호를 확인하세요.
2단계: Hermes 설정하기
가장 쉬운 방법은 대화형 마법사를 사용하는 것입니다:
hermes gateway setup
**SMS (Twilio)**를 선택하고 안내를 따르세요.
수동 설정을 선호하시나요? ~/.hermes/.env에 다음을 추가하세요:
TWILIO_ACCOUNT_SID=ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
TWILIO_AUTH_TOKEN=your_auth_token_here
TWILIO_PHONE_NUMBER=+15551234567
# 보안: 특정 전화번호로 제한 (권장)
SMS_ALLOWED_USERS=+15559876543,+15551112222
# 선택 사항: cron 작업 전달용 홈 채널 설정
SMS_HOME_CHANNEL=+15559876543
3단계: Twilio 웹훅 설정하기
Twilio 콘솔에서 Phone Numbers → Manage → Active Numbers로 이동해 번호를 클릭하고, Messaging → A MESSAGE COMES IN 아래에서 웹훅을 다음과 같이 설정하세요:
https://your-server:8080/webhooks/twilio
HTTP 메서드는 POST로 설정하세요.
중요: SMS_WEBHOOK_URL을 Twilio에 구성한 것과 정확히 동일한 URL로 설정하세요. 서명 검증에 필수입니다:
SMS_WEBHOOK_URL=https://your-server:8080/webhooks/twilio
웹훅 포트는 기본적으로 8080이지만 SMS_WEBHOOK_PORT로 변경할 수 있습니다.
4단계: 게이트웨이 시작하기
hermes gateway
다음과 같은 메시지가 표시될 거예요:
[sms] Twilio webhook server listening on 127.0.0.1:8080, from: +1555***4567
이제 Twilio 번호로 문자를 보내보세요 — Hermes가 SMS로 응답할 것입니다.
SMS 동작 방식의 차이점
SMS는 일반 텍스트 매체이므로 Hermes가 이에 맞게 적응합니다:
- 마크다운 없음 — SMS가 리터럴 문자로 렌더링하므로 자동으로 제거됩니다
- 1600자 제한 — 더 긴 응답은 자연스러운 경계에서 여러 메시지로 분할됩니다
- 에코 방지 — 자신의 Twilio 번호에서 온 메시지는 루프 방지를 위해 무시됩니다
- 개인정보 보호 — 로그에서 전화번호가 마스킹 처리됩니다
보안이 중요합니다
Hermes는 X-Twilio-Signature 헤더(HMAC-SHA1)를 확인하여 인바운드 웹훅이 진짜 Twilio에서 왔는지 검증합니다. 이를 통해 공격자가 가짜 메시지를 주입하는 것을 차단합니다.
게이트웨이는 기본적으로 모든 사용자를 거부합니다. 허용 목록을 구성해야 합니다:
SMS_ALLOWED_USERS=+15559876543,+15551112222
혹시 무모해지고 싶다면 (그러지 마세요):
SMS_ALLOW_ALL_USERS=true
공개 URL 없이 로컬 개발을 하는 경우 서명 검증을 비활성화할 수 있습니다:
SMS_INSECURE_NO_SIGNATURE=true
하지만 기억하세요 — 로컬 개발 전용입니다. 절대 프로덕션에서는 사용하지 마세요.
마지막 경고
SMS에는 내장 암호화가 없습니다. 민감한 작업에는 사용하지 마세요. 기밀 정보는 Signal이나 Telegram을 사용하세요.
문제 해결
메시지가 도착하지 않나요? 확인해 보세요:
- 웹훅 URL이 올바르고 공개적으로 접근 가능한지
TWILIO_ACCOUNT_SID와TWILIO_AUTH_TOKEN이 올바른지- Twilio 콘솔 → Monitor → Logs → Messaging에서 전송 오류 확인
- 전화번호가
SMS_ALLOWED_USERS에 포함되어 있는지
그게 전부입니다! 봇에게 문자를 보내고 답변을 받으세요. 정말 간단하죠.
📖 공식 문서
この記事は Hermes Agent の공식 문서に基づいています:공식 문서 › user-guide/messaging/sms