SIPBridge 開発者ドキュメント
SIPBridge は、日本のSIP回線(REGISTER認証方式)を、海外の音声AIプラットフォームや最新のSIP Trunkサービス(IP認証 / 固定Trunk方式)へ中継・接続するためのクラウドサービスです。ダッシュボード・API・CLIから、番号の追加や設定をかんたんに行えます。
現在、海外の音声AIプラットフォームでは個人アカウントでの日本の電話番号(050/03)の取得が実質不可となり、法人でも調達・維持の手続きが極めて複雑になっています。SIPBridgeは、ブラステルや楽天コミュニケーションズ等の日本の格安キャリアを自前で調達し、それらを海外AIエンジンと即座に連携させるための架け橋(Bridge)となります。
プロトコル変換の仕組み
国内キャリアはセキュリティや端末の接続を考慮し SIP REGISTER(ID・パスワードによる一定時間ごとの動的認証)を要求します。 一方、Retell AIやVapiなどの海外AIは、指定された固定IPに対して認証なしでSIPパケットを送る Elastic SIP Trunking を要求します。この2つはそのままでは直結できません。
SIPBridgeは中間にプロトコル変換レイヤーを配置し、両者と並行して接続を維持し、パケットおよび音声ストリームをシームレスに中継します。
クイックスタート
SIPBridgeを利用開始するまでの流れは、わずか4ステップです。
- アカウント作成
SIPBridge公式サイトからメールアドレスでアカウントを作成します。Googleアカウントでのログインに対応しています。
- ダッシュボードにログイン
アカウント作成後、ダッシュボードにログインします。初回ログイン時に500円分の無料クレジットが自動的に付与されます。
- 設定画面でAPIキーを生成 (任意)
「設定(Settings)」➔「APIキー」から新しいキーを生成します。CLI やプログラムからの操作に使用します。
- 番号を追加
ダッシュボードの「番号管理」画面、API、またはCLI からお持ちのSIP回線情報を登録すると、自動的にプロビジョニングが実行されます。
料金システム
SIPBridge は初期費用ゼロで開始できる、プリペイド(クレジット残高)方式の従量課金システムを採用しています。
料金の内訳
| 課金項目 | 金額 | 引き落とし方法 |
|---|---|---|
| 初期クレジット | ¥500 分の残高 | 新規アカウント登録時に、残高へ自動で無料付与されます。 |
| 基本料金 (維持費) | ¥500 / 月換算 / 1番号 | 1日あたり約 ¥16.67 を、毎日深夜に残高から自動で日割り減算します。番号を削除した時点で減算は即座に停止します。 |
| 通話転送料金 | ¥10 / 分 | 通話終了時に、秒単位で正確に残高からリアルタイム減算します(1秒あたり約¥0.167)。 |
ご利用にあたっては、①国内SIPキャリアの料金、②SIPBridgeの転送・維持費、③接続先AIプラットフォームの利用料の3つがそれぞれ発生します。
残高不足時の挙動について
通話中に残高が 0円以下 になった場合、進行中の通話は強制切断されず、最後まで接続されます。 通話終了後、残高がマイナス(0円以下)になった時点でアカウントが一時停止され、登録されているすべての番号の発着信が一時的にロック(停止)されます。 Stripeからクレジットカード等で再度チャージ(デポジット最低 ¥1,000〜)することで、即時にロックが解除され、利用を再開できます。
Retell AI との連携方法
Retell AI で日本の電話番号による音声対話を行うための設定手順です。
1. Retell AI でのインバウンド設定(着信)
- Retell AI ダッシュボードの「Phone Numbers」に移動し、「Buy Number」ではなく「Import Number (BYOC)」を選択します。
- Phone Number 欄に、E.164形式の日本番号(例:
+815000000000)を入力します。 - SIP Endpoint に、ダッシュボード「番号管理」で表示される SIP Trunk URI(例:
sip:203.0.113.10:5060;transport=tcp)を設定します。
※203.0.113.10は例示用です。実際の接続先ホストIPアドレスはダッシュボードでご確認ください。 - 対象の電話番号に関連付ける Agent (対話ボット) を選択し、保存します。
2. SIPBridge での転送設定
- SIPBridgeダッシュボード「番号管理」で対象の番号の編集(✏️)を開きます。
- 着信転送先 を
sip.retellai.comに設定します。 - トランスポートプロトコル で TCP(推奨)を選択して「保存してデプロイ」します。
Vapi との連携方法
Vapi (vapi.ai) で日本の電話番号による音声対話を行うための設定手順です。
1. Vapi での SIP Trunk 作成
- Vapi ダッシュボードの「Phone Numbers」に移動し、「Import / BYO Number」を選択します。
- 連携タイプとして「SIP Trunk」を選び、新しいトランクを作成します。
- Outbound SIP URI として、SIPBridgeのダッシュボードに表示されている Trunk URI (例:
sip:+815000000000@203.0.113.10:5060;transport=tcp)を設定します。 - SBC (Session Border Controller) または IP 接続許可リストに、SIPBridgeのIPアドレス(ダッシュボードに記載のIP、例:
203.0.113.10)を登録して許可します。
VapiのSIPホストはリージョンによって異なります。ご自身のアカウントのリージョン(例: 米国は sip.vapi.ai、欧州は sip.eu.vapi.ai)を転送先ドメインに設定してください。
2. SIPBridge での転送設定
- SIPBridgeダッシュボードで 着信転送先 に
sip.vapi.ai(またはご利用のリージョンのSIPホスト) を指定します。 - トランスポートプロトコル は TCP(推奨)を設定してデプロイします。
認証方法
SIPBridge APIへのすべてのリクエストには認証が必要です。以下の2つの方法のいずれかでAPIキーを送信してください。
方法1: x-api-key ヘッダー
x-api-key: sb_live_your_private_key
Content-Type: application/json方法2: Authorization Bearer ヘッダー
Authorization: Bearer sb_live_your_private_key
Content-Type: application/json※APIキーは、ダッシュボードの「設定(Settings)」➔「APIキー」から安全に発行して使用してください。キーは一度しか表示されないため、安全な場所に保管してください。
GET /api/v1/status
SIPBridgeの現在の稼働状況、通話統計、および登録番号の概要を取得します。
リクエスト例
curl -X GET https://api.sipbridge.dev/api/v1/status \
-H "x-api-key: sb_live_your_private_key"レスポンス例(200 OK)
{
"ok": true,
"system": {
"version": "2.4.1",
"uptime": "up 14 days, 6 hours"
},
"stats": {
"totalCalls": 1248,
"successRate": 97.8,
"avgDuration": 142,
"inboundCalls": 834,
"outboundCalls": 414
},
"numbers": [
{
"id": "num_1783006777874",
"sipUser": "4689****",
"status": "active",
"forwardUri": "sip.retellai.com"
}
]
}GET /api/v1/numbers
登録済みの電話番号一覧を取得します。セキュリティのため、SIPユーザーIDの一部はマスクされて返されます。
リクエスト例
curl -X GET https://api.sipbridge.dev/api/v1/numbers \
-H "x-api-key: sb_live_your_private_key"レスポンス例(200 OK)
{
"ok": true,
"numbers": [
{
"id": "num_1783006777874",
"sipUser": "4689****",
"sipDomain": "softphone.spc.brastel.ne.jp",
"phoneNumber": "050-0000-0000",
"forwardUri": "sip.retellai.com",
"status": "active",
"createdAt": "2026-06-15T08:30:00Z"
},
{
"id": "num_1783006889012",
"sipUser": "5243****",
"sipDomain": "softphone.spc.brastel.ne.jp",
"phoneNumber": "050-1234-5678",
"forwardUri": "sip.vapi.ai",
"status": "active",
"createdAt": "2026-07-01T12:00:00Z"
}
]
}POST /api/v1/numbers
新しい電話番号を登録し、自動プロビジョニングを実行します。
リクエスト例
curl -X POST https://api.sipbridge.dev/api/v1/numbers \
-H "x-api-key: sb_live_your_private_key" \
-H "Content-Type: application/json" \
-d '{
"sipUser": "example_sip_user",
"sipPassword": "your_password",
"sipDomain": "softphone.spc.brastel.ne.jp",
"phoneNumber": "050-0000-0000",
"forwardUri": "sip.retellai.com"
}'リクエストボディ
| フィールド | 型 | 必須 | 説明 |
|---|---|---|---|
sipUser | string | ✓ | SIPアカウントのユーザー名(例: ブラステルのアクセスID) |
sipPassword | string | ✓ | SIPアカウントのパスワード |
sipDomain | string | ✓ | SIPレジストラのドメイン |
phoneNumber | string | ✓ | 電話番号(表示用、例: 050-0000-0000) |
forwardUri | string | ✓ | 転送先のSIP URI(例: sip.retellai.com) |
レスポンス例(201 Created)
{
"ok": true,
"message": "番号を登録し、プロビジョニングを完了しました",
"number": {
"id": "num_1783006777874",
"sipUser": "exam****",
"sipDomain": "softphone.spc.brastel.ne.jp",
"phoneNumber": "050-0000-0000",
"forwardUri": "sip.retellai.com",
"status": "active",
"createdAt": "2026-07-08T10:00:00Z"
}
}エラーケース
{
"ok": false,
"error": "VALIDATION_ERROR",
"message": "sipUser は必須フィールドです"
}{
"ok": false,
"error": "DUPLICATE_NUMBER",
"message": "この電話番号は既に登録されています"
}DELETE /api/v1/numbers
登録済みの電話番号を削除し、プロビジョニングを解除します。
リクエスト例
curl -X DELETE "https://api.sipbridge.dev/api/v1/numbers?id=num_1783006777874" \
-H "x-api-key: sb_live_your_private_key"レスポンス例(200 OK)
{
"ok": true,
"message": "番号を削除しました",
"deletedId": "num_1783006777874"
}GET /api/user/usage
現在の利用状況(通話時間、登録番号数、現在のプリペイド残高)を取得します。
リクエスト例
curl -X GET https://api.sipbridge.dev/api/user/usage \
-H "x-api-key: sb_live_your_private_key"レスポンス例(200 OK)
{
"ok": true,
"balance": 1840,
"status": "active",
"usage": {
"usedSeconds": 2520,
"usedMinutes": 42,
"numbersUsed": 2
}
}レート制限
APIリクエストにはレート制限が適用されます。制限を超えた場合、429 Too Many Requests レスポンスが返されます。
レスポンスヘッダー
| ヘッダー | 説明 |
|---|---|
X-RateLimit-Limit | 現在のウィンドウ内の最大リクエスト数 (標準: 1分あたり100リクエスト) |
X-RateLimit-Remaining | 現在のウィンドウ内の残りリクエスト数 |
Retry-After | 制限超過時、次のリクエストまでの待機秒数 |
エラーレスポンス形式
APIがエラーを返す場合、以下の統一されたJSON形式で応答します。
{
"ok": false,
"error": "ERROR_CODE",
"message": "人間が読めるエラーメッセージ"
}主なエラーコード
| HTTPステータス | エラーコード | 説明 |
|---|---|---|
401 | UNAUTHORIZED | APIキーが無効、または未指定です。 |
403 | FORBIDDEN | アクセス権限がありません(アカウントロック状態等)。 |
429 | RATE_LIMITED | レート制限を超えました。Retry-After ヘッダーの秒数だけ待機してください。 |
500 | INTERNAL_ERROR | サーバー内部エラーが発生しました。繰り返し発生する場合はサポートにお問い合わせください。 |
CLIツールのインストール
ターミナルから直接SIPBridgeを操作できるCLIクライアントツールです。
# パッケージのインストール
npm install -g @sipbridge/cli
# またはリポジトリから直接リンク
cd cli
npm install
npm link
# 環境変数の設定(.bashrc / .zshrc に追加を推奨)
export SIPBRIDGE_API_URL="https://api.sipbridge.dev"
export SIPBRIDGE_API_KEY="sb_live_your_api_key_here"設定が完了したら、sipbridge status を実行して接続を確認してください。
sipbridge status
SIPBridgeの稼働状態と通話統計を確認します。
$ sipbridge status
┌─────────────────────────────────────────┐
│ SIPBridge Status │
├─────────────────┬───────────────────────┤
│ バージョン │ 2.4.1 │
│ ステータス │ ● 稼働中 │
│ 稼働時間 │ 14 days, 6 hours │
├─────────────────┼───────────────────────┤
│ 総通話数 │ 1,248 │
│ 成功率 │ 97.8% │
│ 平均通話時間 │ 142秒 │
│ 着信 │ 834 │
│ 发信 │ 414 │
├─────────────────┼───────────────────────┤
│ 登録番号 │ 2 (残高: ¥1,840) │
└─────────────────┴───────────────────────┘sipbridge numbers list
登録済みの電話番号一覧をテーブル形式で表示します。
$ sipbridge numbers list
┌──────────────────────┬───────────┬──────────────────┬───────────────────┬──────────┐
│ ID │ SIPユーザー │ 電話番号 │ 転送先 │ ステータス │
├──────────────────────┼───────────┼──────────────────┼───────────────────┼──────────┤
│ num_1783006777874 │ 4689**** │ 050-0000-0000 │ sip.retellai.com │ ● active │
│ num_1783006889012 │ 5243**** │ 050-1234-5678 │ sip.vapi.ai │ ● active │
└──────────────────────┴───────────┴──────────────────┴───────────────────┴──────────┘
2 番号が登録されていますsipbridge numbers add
新しい電話番号を登録し、自動プロビジョニングを実行します。
フラグ一覧
| フラグ | 短縮形 | 必須 | 説明 |
|---|---|---|---|
--user | -u | ✓ | SIPアカウントのユーザー名 |
--pass | -p | ✓ | SIPアカウントのパスワード |
--domain | -d | ✓ | SIPレジストラのドメイン |
--phone | -n | ✓ | 電話番号(表示用) |
--forward | -f | ✓ | 転送先のSIP URI |
使用例
$ sipbridge numbers add \
--user "example_sip_user" \
--domain "softphone.spc.brastel.ne.jp" \
--phone "050-0000-0000" \
--forward "sip.retellai.com"
Enter SIP Password: **********
✓ 番号を登録しました
ID: num_1783006777874
番号: 050-0000-0000
転送先: sip.retellai.com
ステータス: active※ --pass (-p) フラグでパスワードを直接入力することも可能ですが、シェルのプロセス履歴にパスワードが残るのを防ぐため、対話式入力での指定、または SIPBRIDGE_SIP_PASSWORD 環境変数を推奨します。
sipbridge numbers remove
登録済みの電話番号を削除し、プロビジョニングを解除します。
$ sipbridge numbers remove --id "num_1783006777874"
✓ 番号を削除しました (num_1783006777874)513 Message too large エラー
513 Message too large が返り切断される。原因: SIP INVITEのメッセージサイズが、接続先キャリアまたは中継設備の許容サイズ(一般にUDPパケットサイズ限界)を超えた場合に発生します。
対策: SIPBridgeはこの問題に対処するため、不要なSIPヘッダーの自動削減やセッションタイマーの無効化などを自動的に適用して中継します。通常は追加設定は不要です。このエラーが発生した場合は、サポートにお問い合わせください。
通話時の無音(片通話)
原因: 音声ストリーム(RTP)のルーティングに一時的な問題が発生している可能性があります。
対策: ダッシュボードの「番号管理」から対象番号の「再プロビジョニング」をお試しください。改善しない場合は、サポートにお問い合わせください。
接続タイムアウト
原因: プロビジョニング処理中にサーバーとの通信が一時的に不安定になっている可能性があります。
対策: 数分待ってからリトライしてください。繰り返し発生する場合は、support@sipbridge.dev までお問い合わせください。ダッシュボードの「ステータス」ページでサービス稼働状況もご確認いただけます。
よくある質問 (FAQ)
A. いいえ、SIPBridge自体は電話番号の販売や回線の提供は行いません。お客様自身が国内のSIPプロバイダ(ブラステル等)とご契約いただき、そこで取得された番号の接続情報をSIPBridgeに登録していただく形になります。
A. はい。日本の回線への着信を海外AIに転送する「インバウンド着信」と、海外AIからの要求を日本の回線経由でダイヤル発信する「アウトバウンド発信」の両方に対応しています。
A. SIPBridge自体のインフラとしては制限を設けていませんが、お客様がご契約されている国内キャリア(例: ブラステルの「My 050」は通常同時1通話)の回線同時通話数枠の上限に依存します。
A. クレジット残高が0円以下になると、すべてのアクティブな回線の接続(REGISTER)が自動的に一時ロックされます。Stripe経由で追加チャージ(最低 ¥1,000〜)を行うことで、即座にプロビジョニングが走り自動復旧します。
A. 日本国内のPSTN(一般電話網)で広く使われている PCMU (u-law) を推奨・最適化しています。
A. 番号維持のための基本料金(月換算 ¥500)は日割り(約 ¥16.67/日)で計算されます。番号をダッシュボードから削除したその日から維持費の自動引き落としは即座に停止します。
A. はい。パスワードなどの機密情報はデータベース上に強力に暗号化されて保存されます。システムログ等に出力されたり、ダッシュボード上に平文で再表示されたりすることは一切ありません。また、番号を削除した場合は設定ファイルおよびデータベース上から情報が完全に消去されます。