https://a.storyblok.com/f/270183/1368x665/19c91eeff9/node-js_voiceproxy.png

Voice APIを使用してNode.jsで音声プロキシを構築する方法

最終更新日 November 28, 2024

所要時間:1 分

宅配サービスに食べ物を注文したとき、ドライバーに建物への立ち入りを許可する必要があったことはないだろうか。個人番号を教えるのはためらわれるかもしれませんが、それでも料理は確実に届けたいものです。マスク通話を使えば、あなたとドライバーの双方が実際の電話番号を明かすことなく通信することができる。ドライバーには一時的な番号が表示され、あなたにも表示されるため、双方のプライバシーが守られます。

Classified Ads App PreviewClassified Ads App Preview

このチュートリアルでは、Vonageの マスク通話機能を使います。 このアプリケーションを Vonage Cloud Runtimeにデプロイします。にデプロイします。

前提条件

  • A Vonageデベロッパーアカウント

  • Vonageの電話番号。これは、アカウント作成時に受け取った無料クレジットを使用して購入することができます。お客様の APIダッシュボード.左側のパネルで、'Build & Manage'の下にある Numbers> Numbersの購入.要件を満たす電話番号を検索し(「機能」のひとつに「Numbers」があることを確認する)、以下をクリックします。 購入する.

幸いなことに、Vonage Voice API を使えば、このようなことが簡単にできます。 Code HubにMasked Calling APIが用意されているからです。が用意されているので、これを使うのはとても簡単だ!これからこの方法を説明します。

アプリケーションの作成とデプロイ方法

Vonage デベロッパーアカウントにサインインした後、次の手順に進みます。 高度なマスク通話ページに移動します。の下にある コードのデプロイタブの下にある 新しいインスタンスをデプロイする.

地域を選択する 地域を選択し インスタンスという名前をつける。をクリックする。 番号を割り当てるをクリックし、アプリケーションにリンクするVonage電話番号を選択します。をクリックします。 続ける.画面はこのようになります:

Screenshot of Advanced Masked Calling application page with a new instance running with the buttons ‘Launch’, ‘View logs’ and ‘Delete’ next to them.Code Hub Deployedクリック 起動をクリックしてアプリケーションを実行します。ユーザー認証情報を入力するプロンプトが表示されます。APIキーとパスワード(APIシークレット)はどちらも APIダッシュボード.

すると デプロイされたインスタンス.をクリックします。 をクリックします。をクリックして実行し、Vonage API Key と Secret を入力してアプリケーションを表示します。API 仕様は "API"タブで見ることができます。

ログインすると、アプリケーションが表示されます。

Screenshot of Masked Calling API browser applicationPhone Number Pairing

ここで、2つの電話番号を追加し、通話マスキング機能の使用期限を設定することができます。クリック 追加をクリックすると、ペアリングされた電話番号リストに表示されます。さらに電話番号のペアを追加し、特定のペアを見つけたい場合は、お探しの電話番号を入力して 検索をクリックします。

これらの番号のいずれかが、このアプリケーションにリンクされているVonage番号に電話をかけると(リンクされている番号は、「設定」で確認できます。 設定ブラウザアプリケーションの「設定」タブで確認できます)、受信者は発信者の実際の番号ではなく、Vonage番号からの着信と認識します。同様に、発信者がVonage番号にダイヤルしても、受信者の実際の番号はわかりません。

試してみる

ご自身の電話番号を次のように記載したと仮定します。 電話番号1このアプリケーションにリンクされているVonageの電話番号に電話をかけるには、個人の電話を使用します。所有者は 電話番号2は、あなたの実際の番号の代わりにVonageの電話番号を示す電話を受信する必要があります。今すぐ試してみてください!

コードのカスタマイズ方法

Vonage Cloud Runtime上で事前に構築されたアプリケーションを直接カスタマイズしたい場合は、次の手順に進んでください。 コードを取得タブで 高度なマスク通話ページで新しい開発環境を作成する.をクリックします。 領域を選択します。ワークスペースに 名前そして Vonage電話番号を選択します。

Screenshot of the Masked Calling API project on Vonage Cloud RuntimeMasked Calling READMEワークスペースを開くと、サンプルアプリが準備できていることがわかる!しかし、このIDEから直接コードを変更することができます。

更新したプロジェクトを実行するには ターミナルタブを開き、次のコマンドを実行する:

npm run

デプロイする準備ができたら、次のコマンドを実行する:

vcr deploy
コールの流れはこうだ:
  • ユーザは電話番号 (numberOne, numberTwo)を追加し、ウェブサイト(フロントエンド)でペアリングの有効期限(expiryTime)を設定します。

  • pairNumbersペアを作成し、有効期限を設定する。

async function pairNumbers(numberOne, numberTwo, expiryTime, state) {
   try {
       await state.set(numberOne, numberTwo);
       await state.set(numberTwo, numberOne);

       const expirySeconds = getTimeInSeconds(expiryTime);
       await state.expire(numberOne, expirySeconds);
       await state.expire(numberTwo, expirySeconds);


       await state.mapSet('pairs', { [numberOne]: JSON.stringify({ numberTwo, expiryTime }) });
   } catch (e) {
       return false
   }
}
  • エンドポイントは onCallエンドポイントは、Vonage番号への着信を待った後にトリガーされます。

await voice.onCall('/onCall');
await voice.onCallEvent('/onCallEvent');
  • findPairは対になった数字を取り出す。

async function findPair(number, state) {
   const numbersSet = new Set();
   let pairObj = await state.mapGetValue('pairs', number);


   if (!pairObj) {
       // The pair is stored using the other number
       let pairedNumber = await state.get(number);
       numbersSet.add(pairedNumber);
       pairObj = await state.mapGetValue('pairs', pairedNumber);
   }
  • ペアが存在し、有効期限が切れていなければ、通話を接続する。

app.post('/onCall', async (req, res, next) => {
   try {
       const pairedNumber = await state.get(req.body.from);


       if (!pairedNumber) {
           res.json([{
               action: 'talk',
               text: 'This number has not been configured yet.'
           }]);
           return;
       }
  • ペアがない場合、または期限切れのペアがある場合は、それに応じて処理する(例えば、呼び出し側はエラーメッセージを聞く)。

app.post('/onCall', async (req, res, next) => {
   try {
       const pairedNumber = await state.get(req.body.from);


       if (!pairedNumber) {
           res.json([{
               action: 'talk',
               text: 'This number has not been configured yet.'
           }]);
           return;
       }
  • 有効期限が過ぎると、ペアは自動的に削除されます。

app.delete('/pairs', validateRequestMiddleware, async (req, res, next) => {
   try {
       const numberOne = req.body.number_one;
       const numberTwo = req.body.number_two;


       if (!numberOne || !numberTwo) {
           res.sendStatus(400);
           return;
       }


       await state.delete(numberOne);
       await state.delete(numberTwo);
       await state.mapDelete('pairs', [numberOne, numberTwo]);
       res.sendStatus(200);
   } catch (e) {
       next(e);
   }
});

この動作コードを自分のアプリケーションに含めることができます。しかし、プロジェクトをVonage Cloud Runtimeにデプロイしないと決めた場合、考慮すべき点がいくつかあります。以下の ドキュメントを参照して、Vonage Cloud Runtimeを使用しないアプローチを実装してください。

パーティーに参加する

これでVonage Cloud RuntimeにVoice Proxyがデプロイされました!独自の機能を追加することで、アプリケーションをさらにレベルアップさせることができます。私たちの開発者コミュニティは Slack私たちの開発者コミュニティはSlackで拡大しており、ぜひあなたもその一員になってください。もしこのチュートリアルを試すことになったら、ぜひ感想を聞かせてください。お気軽に X以前はTwitterとして知られていました。 フォローをフォローしてください。ハッピー・コーディング!

シェア:

https://a.storyblok.com/f/270183/384x384/b68093ec17/diana-pham.png
Diana Phamデベロッパー・アドボケイト

ダイアナはVonageのデベロッパー・アドボケイト。新鮮な牡蠣を食べるのが好き。