このプロジェクトについて
httpSMSは、AndroidスマートフォンをSMSゲートウェイとして利用できるサービスです。シンプルなHTTP APIを呼び出すと、そのリクエストがAndroidスマートフォンにSMS送信を実行させます。スマートフォンで受信したメッセージは、指定したWebhookエンドポイントへ転送できます。このプロジェクトは、多くの国で仮想電話番号が利用できないことから、実際の携帯電話を通じてAPI駆動でSMSを自動送受信する方法を作者が求めたことがきっかけで作られました。
コンポーネント
- Web UI: NuxtとVuetifyで構築されたシングルページアプリケーションで、Firebase上でホストされています。ソースはwebディレクトリにあります。
- API: GoとFiberで構築され、CockroachDBを使用し、Google Cloud Run上でサーバーレス実行できるように設計されています。APIドキュメントは別途公開されています。
- Androidアプリ: ネイティブKotlinアプリケーションで、メッセージの送受信前にスマートフォンへインストールする必要があります。APKおよびGitHubリリースで配布されています。
機能
- エンドツーエンド暗号化: メッセージはAES-256で暗号化でき、鍵はスマートフォン上にのみ保存されるため、サーバーはメッセージ内容を読み取れません。
- Webhook: 受信したSMSメッセージをコールバックURLへ転送し、連携機能を構築できます。
- バックプレッシャー: 設定可能なレート制限(例: 1分間に3通)により、多数の宛先がキューに溜まってもスマートフォンのSMS APIが過負荷になるのを防ぎます。
- メッセージ有効期限: メッセージの有効期限を設定でき、送信前に期限切れになった場合は通知されます。
APIクライアント
公式クライアントライブラリとしてGoおよびJavaScript/TypeScript向けのものが記載されています。
送信フロー
送信エンドポイントへのリクエストはHTTP 202で受け付けられ、プッシュ通知がスケジュールされてAndroidアプリへ配信されます。アプリはメッセージを取得し、Android SMS APIを通じて送信し、送信結果と配信レポートを非同期でAPIに報告します。
Dockerによるセルフホスティング
READMEにはDockerベースのセルフホスト手順が記載されています。FirebaseプロジェクトとWeb SDK設定を作成し、メール/パスワード認証を有効化し(メール列挙保護に関する回避策も記載)、Firebaseサービスアカウント認証情報とAndroid用google-services.jsonを生成し、SMTPメールサービスを設定し、メッセージ検索ルートを保護するためにCloudflare Turnstileウィジェットをセットアップし、リポジトリをクローンし、webおよびapi用に提供されている.env.dockerファイルをコピーして環境変数を入力し、docker compose up --buildを実行します。その後、Web UIはポート3000、APIはポート8000でアクセス可能になります。イベントキュー設定と一致するidとapi_keyを持つシステムユーザーをusersテーブルに挿入し、その後APIコンテナを再起動する必要があります。プッシュメッセージングを機能させるには、AndroidアプリをAndroid Studioでビルドし、置き換えたgoogle-services.jsonを使用する必要があります。
テストとライセンス
エンドツーエンド統合テストでは、Docker内でフルスタック(API、PostgreSQL、Redis)を実行し、Androidデバイスをシミュレートする電話エミュレータを使用します。また、mainへのプッシュとプルリクエスト時にCIでも実行されます。このプロジェクトはGNU Affero General Public License v3の下でライセンスされています。
Comments
0 people shared their preference · Deer Point appears after 10 participants
Sign in to join the discussion.