WaveKat Voice——通話をすべて録音・文字起こしする Mac・Linux 向けのソフトフォン——が、私たちがゼロから書き上げた SIP エンジンで動くようになりました。wavekat-sip は、電話の信号処理と音声伝送そのものを担うオープンソースの Rust クレートで、その下に第三者の SIP スタックは一切ありません。あなたが発信・応答するすべての通話、あらゆる保留や転送が、いまや私たちが端から端まで所有するコードを通ります。
これは、私たちが繰り返し立ち返る目標——すべての小規模ビジネスに大企業のような声を——に向けたもう一歩です。大きな電話システムが頼りになるのは、それを運用する人たちがあらゆる層を掌握しているからです。SIP エンジンを所有するとは、あなたの通話が実際に通る層を私たちが掌握するということ——だから、もっと信頼できるものにしたいとき、あるいは機能を出したいときに、行く手をふさぐブラックボックスがありません。
SIP とは何か、そしてなぜそこが難所なのか
SIP(Session Initiation Protocol)は、通話を確立するために電話同士が話す言語です——あなたの回線をプロバイダーに登録し、相手を呼び出し、どの音声コーデックを使うかを交渉し、通話の終わりにきれいに切断します。通話がつながったあと、実際の音声を運ぶのが RTP です。SIP をほんの少し間違えるだけで、通話が切れたり、片方向しか聞こえなかったり、ある回線が何の前触れもなく着信を受けられなくなったりします。それは地味で厳密な中核であり、ソフトフォンのほかのすべてがその上に乗っています。
つい最近まで、WaveKat Voice は第三者の SIP ライブラリを通じて通話を動かしていました。おかげで私たちは素早く電話をつなげられ、初期にはそれが正しい判断でした。しかし借り物のスタックは、通話をどうモデル化するか、エラーをどう表に出すか、そもそもどの機能に手が届くかを、あなたの代わりに決めてしまいます——そして呼び出し転送や HD 音声のような機能を作り始めた瞬間から、私たちはその形に合わせて回り道をしていて、その形と一緒に作ってはいませんでした。
なぜ自分たちで作ったのか
私たちは WaveKat Voice の SIP エンジンを wavekat-sip としてゼロから書き直しました。理由は素朴に 3 つあります。
- 掌握。 発信者を保留にする、通話を転送する、セッションタイマーで長い通話を維持する——こうした機能はすべて SIP の層に存在します。その層を所有していれば、他人のモデルを無理に曲げて合わせるのではなく、直接そこに機能を加えられます。
- 軽さ。 WaveKat Voice は、静かに邪魔にならず控えている軽量なデスクトップアプリです。焦点を絞った専用エンジンなら小さく保てます——汎用スタックが抱え込むあらゆるものではなく、実際に使う SIP と RTP だけを積んでいるからです。
- ブラックボックスがない。 通話がおかしな動きをしたとき、あなたが押したボタンから回線上のパケットまで、あいだのすべての行を私たちが読み、直せます。あなたの通話がどう動いているかについて、私たちに立ち入れない領域はありません。
このエンジンが担うこと
wavekat-sip は回線レベルの事柄を所有し、音声デバイスや通話のオーケストレーションの層には踏み込まないので、小さく組み込みやすいまま保たれます。
| 領域 | 何をするか |
|---|---|
| 登録 | あなたの回線をプロバイダーに登録し(ダイジェスト認証)、着信が常に届くよう接続を維持します。 |
| 通話 | 外部への発信と着信への応答を行い、あなたが出る前に発信者へ正しい呼び出し信号を鳴らします。 |
| 通話中の制御 | 保留と再開(SIP re-INVITE、RFC 3264)、ブラインド転送と取り次ぎ転送(SIP REFER、RFC 3515)、そして電話メニュー用の DTMF(キーパッドのトーン)。 |
| 音質 | 広帯域の「HD」音声のために Opus コーデックを交渉し、相手が対応していないときは標準の G.711 に自動的にフォールバックします。 |
| 信頼性 | RFC 4028 のセッションタイマーが、長い通話が途中でネットワークに無言で切られるのを防ぎます。 |
オープンソースです——WaveKat のほかの部分と同じように
wavekat-sip は非公開の内部コンポーネントではありません。私たちの音声区間検出やターン検出のクレートと同じく、Apache-2.0 ライセンスで crates.io に公開され、ドキュメントは docs.rs にあります。Rust でソフトフォンや音声ボット、通話録音ブリッジを作る人なら誰でも、WaveKat Voice が動かしているのと同じエンジンをそのまま使えます。オープンに作ることが私たちのやり方です——製品の下にあるツールは、堀ではなく、あなたが調べて再利用できるものです。
正直に言えば、まだ早い段階です。このクレートは活発に開発中で、API はバージョン間でまだ変わります。それでも、デモではなく、本物の製品を支える本物のエンジンです。
よくある質問
wavekat-sip とは何ですか?
wavekat-sip は、SIP 信号処理と RTP 音声伝送のための WaveKat 自社製のオープンソース Rust クレートです。WaveKat Voice が発信・応答するすべての通話を支えるエンジンであり、その下に第三者の SIP スタックはありません。
wavekat-sip はオープンソースですか、自分のプロジェクトで使えますか?
はい。wavekat-sip は Apache-2.0 ライセンスで crates.io に公開され、ドキュメントは docs.rs にあります。Rust でソフトフォンや音声ボット、通話録音ブリッジを作る人なら誰でも、WaveKat Voice が動かしているのと同じエンジンを使えます。
WaveKat Voice は HD 音声に対応していますか?
はい。WaveKat Voice は広帯域の「HD」音声のために Opus コーデックを交渉し、通話の相手が Opus に対応していないときは標準の G.711 に自動的にフォールバックします。
WaveKat Voice はどの SIP プロバイダーでも使えますか?
はい。wavekat-sip はダイジェスト認証による標準的な SIP 登録を扱うので、SIP に準拠したプロバイダーや PBX なら何でも動作します——いまお使いのアカウントのまま、プロバイダー固有の設定は不要です。
wavekat-sip は本番運用に耐えますか?
本物の製品を支える本物のエンジンなので、すでに毎日使われています——ですが、まだ早い段階です。このクレートは活発に開発中で、API はバージョン間でまだ変わるため、今日これを土台に構築するならバージョンを固定してください。
これがあなたの通話に何をもたらすか
たいていの場合、WaveKat Voice の通話は今までと何ら変わって感じられないでしょう——そしてそれこそが狙いです。通話はあるべきようにつながり、あるべきように聞こえます。変わるのは舞台裏です。WaveKat Voice を本物の受付のように感じさせる機能——保留、キャッチホン、転送、HD 音声——が、いまや依存ライブラリの都合ではなく私たちの都合で出せるようになり、もっと安定させたい部分があれば、それを動かすコードへ私たちが直接向かえます。
WaveKat Voice は Mac と Linux で公開ベータの間は無料です。すでにお持ちの電話プロバイダーを接続すれば、次の通話は、私たち自身が作り——そして手放したエンジンの上で動きます。