프로젝트 소개

httpSMS는 Android 휴대폰을 SMS 게이트웨이로 사용할 수 있게 해주는 서비스입니다. 간단한 HTTP API를 호출하면 요청이 Android 휴대폰에서 SMS를 전송하도록 트리거합니다. 휴대폰에서 수신한 메시지는 사용자가 제공한 웹훅 엔드포인트로 전달할 수 있습니다. 이 프로젝트는 많은 국가에서 가상 전화번호를 사용할 수 없고, 저자가 실제 휴대폰을 통해 SMS를 자동화된 API 기반 방식으로 주고받고 싶어서 만들어졌습니다. 구성 요소 - 웹 UI: Nuxt와 Vuetify로 만든 단일 페이지 애플리케이션으로 Firebase에 호스팅되며, 소스는 web 디렉터리에 있습니다. - API: Go와 Fiber로 만들었고 CockroachDB를 사용하며, Google Cloud Run에서 서버리스로 실행되도록 설계되었습니다. API 문서는 별도로 게시됩니다. - Android 앱: 메시지를 주고받으려면 휴대폰에 반드시 설치해야 하는 네이티브 Kotlin 애플리케이션입니다. APK와 GitHub 릴리스로 배포됩니다. 기능 - 종단간 암호화: 메시지를 AES-256으로 암호화할 수 있으며 키는 휴대폰에만 저장되므로 서버는 메시지 내용을 읽을 수 없습니다. - 웹훅: 수신한 SMS 메시지를 콜백 URL로 전달해 통합 기능을 만들 수 있습니다. - 백 프레셔: 구성 가능한 속도 제한(예: 분당 3개 메시지)으로 많은 수신자가 대기 중이어도 휴대폰의 SMS API가 과부하되지 않게 합니다. - 메시지 만료: 메시지 유효 기간에 대한 타임아웃을 설정할 수 있으며, 전송되기 전에 메시지가 만료되면 알림을 받습니다. API 클라이언트 Go와 JavaScript/TypeScript용 공식 클라이언트 라이브러리가 나열되어 있습니다. 전송 흐름 전송 엔드포인트에 대한 요청은 HTTP 202로 접수되고, 푸시 알림이 예약되어 Android 앱으로 전달되며, 앱이 메시지를 가져와 Android SMS API를 통해 전송하고, 전송 결과와 전달 보고서를 비동기적으로 API에 다시 보고합니다. Docker를 사용한 자체 호스팅 README에는 Docker 기반 자체 호스팅 경로가 설명되어 있습니다. Firebase 프로젝트와 웹 SDK 구성을 만들고, 이메일/비밀번호 로그인을 활성화하고(이메일 열거 보호에 대한 우회 방법이 언급됨), Firebase 서비스 계정 자격 증명과 Android google-services.json을 생성하고, SMTP 이메일 서비스를 구성하고, 메시지 검색 경로를 보호할 Cloudflare Turnstile 위젯을 설정하고, 저장소를 복제하고, 제공된 .env.docker 파일을 web과 api용으로 복사하고, 환경 변수를 채운 다음 docker compose up --build를 실행합니다. 그러면 웹 UI는 포트 3000에서, API는 포트 8000에서 접근할 수 있습니다. 이벤트 큐 설정과 일치하는 id와 api_key를 가진 시스템 사용자를 users 테이블에 삽입하고, 그 후 API 컨테이너를 다시 시작해야 합니다. 푸시 메시징이 작동하려면 Android 앱을 Android Studio에서 교체한 google-services.json과 함께 빌드해야 합니다. 테스트 및 라이선스 종단간 통합 테스트는 Android 기기를 시뮬레이션하는 휴대폰 에뮬레이터와 함께 전체 스택(API, PostgreSQL, Redis)을 Docker에서 실행하며, main에 대한 푸시와 풀 리퀘스트에서 CI로도 실행됩니다. 이 프로젝트는 GNU Affero General Public License v3에 따라 라이선스가 부여됩니다.