페어링
SMS의 기본 DM 정책은 페어링입니다.
Gateway 보안
Webhook 노출과 발신자 접근 제어를 검토하세요.
채널 문제 해결
채널 간 진단 및 복구 플레이북입니다.
시작하기 전에
필요한 항목:openclaw plugins install @openclaw/sms로 설치한 공식 SMS Plugin.- SMS를 사용할 수 있는 전화번호가 있는 Twilio 계정 또는 Twilio Messaging Service.
- Twilio Account SID 및 Auth Token.
- OpenClaw Gateway에 도달하는 공개 HTTPS URL.
- 발신자 정책 선택: 개인 사용에는
pairing, 사전 승인된 전화번호에는allowlist, 의도적으로 공개 SMS 접근을 제공할 때만open.
빠른 설정
Twilio 발신자 생성 또는 선택
Twilio에서 Phone Numbers > Manage > Active numbers를 열고 SMS를 사용할 수 있는 번호를 선택합니다. 다음을 저장하세요.
- Account SID, 예:
ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx - Auth Token
- 발신자 전화번호, 예:
+15551234567
MGxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx.Twilio가 Gateway Webhook을 가리키도록 설정
Twilio 전화번호 설정에서 Messaging을 열고 A message comes in을 다음으로 설정합니다.HTTP
POST를 사용하세요. 기본 로컬 경로는 /webhooks/sms입니다. 다른 경로가 필요하면 channels.sms.webhookPath를 변경하세요.정확한 SMS Webhook 경로 노출
공개 URL은 SMS 경로를 Gateway 프로세스로 라우팅해야 합니다. 로컬 테스트에 Tailscale Funnel을 사용한다면 음성 통화와 SMS는 별도의 Webhook 경로를 사용합니다. 같은 Twilio 번호가 둘 다 처리한다면 Twilio와 터널에 두 경로를 모두 구성해 두세요.
/webhooks/sms를 명시적으로 노출하세요.구성 예시
구성 파일
채널 정의가 Gateway 구성과 함께 이동해야 할 때 구성 파일 설정을 사용하세요.환경 변수
시크릿을 호스트 환경에서 가져오는 단일 계정 배포에는 env 설정을 사용하세요.TWILIO_SMS_FROM은 TWILIO_PHONE_NUMBER의 별칭으로 허용됩니다. Twilio가 Messaging Service에서 발신자를 선택해야 할 때는 전화번호 발신자 대신 TWILIO_MESSAGING_SERVICE_SID를 사용하세요.
SecretRef 인증 토큰
authToken은 SecretRef일 수 있습니다. 평문 구성을 저장하는 대신 Gateway가 OpenClaw 시크릿 런타임에서 Twilio Auth Token을 해석해야 할 때 사용하세요.
허용 목록 전용 개인 번호
알려진 전화번호만 에이전트와 대화할 수 있어야 할 때allowlist를 사용하세요.
Messaging Service 발신자
Twilio가 Messaging Service를 통해 발신자를 선택해야 할 때fromNumber 대신 messagingServiceSid를 사용하세요.
fromNumber와 messagingServiceSid가 모두 있으면 fromNumber가 사용됩니다.
기본 아웃바운드 대상
전송 흐름이 명시적 대상을 생략하는 경우 자동화 또는 에이전트가 시작한 전달에 기본 목적지가 있어야 한다면defaultTo를 설정하세요.
접근 제어
channels.sms.dmPolicy는 직접 SMS 접근을 제어합니다.
pairing(기본값)allowlist(allowFrom에 발신자가 하나 이상 필요)open(allowFrom에"*"포함 필요)disabled
allowFrom 항목은 +15551234567 같은 E.164 전화번호여야 합니다. sms: 접두사는 허용되며 정규화됩니다. 개인 비서에는 명시적 전화번호와 함께 dmPolicy: "allowlist"를 선호하세요.
SMS 보내기
아웃바운드 SMS 대상은 SMS 채널을 선택한 상태에서sms: 서비스 접두사를 사용합니다.
twilio-sms:+15551234567이 iMessage에서 사용하는 기존 채널 소유 sms: 서비스 접두사를 넘겨받지 않고 이 채널을 선택합니다.
--target이 필요합니다. defaultTo는 채널 구성에서 대상을 해석할 수 있는 자동화 및 에이전트 시작 전달 경로용입니다.
인바운드 SMS 대화의 에이전트 응답은 구성된 Twilio 발신자를 통해 자동으로 발신자에게 돌아갑니다.
SMS 출력은 일반 텍스트입니다. OpenClaw은 마크다운을 제거하고, 펜스 코드 블록을 평탄화하며, 읽기 쉬운 링크를 보존하고, 긴 응답을 Twilio를 통해 보내기 전에 청크로 나눕니다.
설정 확인
Gateway가 시작된 후:- Gateway 로그에 SMS Webhook 경로가 표시되는지 확인합니다.
- Twilio 측 프로브를 실행합니다.
- 휴대폰에서 Twilio 번호로 SMS를 보냅니다.
openclaw pairing list sms를 실행합니다.openclaw pairing approve sms <CODE>로 페어링 코드를 승인합니다.- SMS를 하나 더 보내고 에이전트가 응답하는지 확인합니다.
macOS iMessage/SMS에서 엔드투엔드 테스트
Messages를 통해 통신사 SMS를 보낼 수 있는 Mac에서는 휴대폰을 만지지 않고imsg로 발신자 측을 구동할 수 있습니다.
Webhook 보안
기본적으로 OpenClaw은publicWebhookUrl과 authToken을 사용해 X-Twilio-Signature를 검증합니다. publicWebhookUrl은 스킴, 호스트, 경로, 쿼리 문자열을 포함해 Twilio에 구성된 URL과 바이트 단위로 일치하도록 유지하세요.
로컬 터널 테스트에서만 다음을 설정할 수 있습니다.
다중 계정 구성
두 개 이상의 Twilio 번호를 운영할 때accounts를 사용하세요.
webhookPath를 사용해야 합니다.
문제 해결
Twilio가 403을 반환하거나 OpenClaw이 Webhook을 거부함
publicWebhookUrl이 스킴, 호스트, 경로, 쿼리 문자열을 포함해 Twilio에 구성된 URL과 정확히 일치하는지 확인하세요. Twilio는 공개 URL 문자열에 서명하므로 프록시 재작성과 대체 호스트 이름은 서명 검증을 깨뜨릴 수 있습니다.
페어링 요청이 나타나지 않음
Twilio 번호의 Messaging Webhook URL과 메서드를 확인하세요. SMS Webhook URL을 가리키고POST를 사용해야 합니다. 또한 Gateway가 공개 인터넷이나 터널을 통해 접근 가능한지 확인하세요.
Twilio 메시지 로그에 오류 11200이 표시되면 Twilio가 인바운드 SMS를 수락했지만 Webhook에 도달할 수 없었다는 뜻입니다. 다음을 확인하세요.
- Twilio Messaging > A message comes in이
publicWebhookUrl을 가리킵니다. - 메서드는
POST입니다. - 터널 또는 리버스 프록시가 정확한
webhookPath를 노출합니다. Tailscale Funnel의 경우tailscale funnel status를 실행하고/webhooks/sms가 목록에 있는지 확인하세요. - 서명 검증이 서명된 URL을 재현할 수 있도록
publicWebhookUrl은 Twilio가 보내는 것과 동일한 스킴, 호스트, 경로, 쿼리 문자열을 사용합니다.
아웃바운드 전송 실패
accountSid, authToken, 그리고 fromNumber 또는 messagingServiceSid 중 하나가 해석되는지 확인하세요. Twilio 평가판 계정을 사용하는 경우 아웃바운드 SMS를 보내기 전에 Twilio에서 목적지 번호를 확인해야 할 수 있습니다.
메시지는 도착하지만 에이전트가 응답하지 않음
dmPolicy와 allowFrom을 확인하세요. 기본 pairing 정책에서는 일반 에이전트 턴이 처리되기 전에 발신자가 승인되어야 합니다.