https://a.storyblok.com/f/270183/89866/d6b53d4b08/forward-a-call-voice-proxy-koa-js.png

Koa.jsで音声プロキシ経由で電話を転送する

最終更新日 April 30, 2024

所要時間:7 分

はじめに

このチュートリアルでは、アプリケーションに Voice 機能を追加する方法を紹介します。Node.js用のウェブフレームワークであるKoaを使用して、着信とイベントを処理するサーバーを作成します。 Vonage Voice APIを使用します。さっそく始めましょう。

プロジェクト概要

このプロジェクトが終わるころには、あなたのプロジェクト・フォルダーはこのようになっているはずだ:

[node_modules] .env .private.key forward_a_call.js package-lock.json package.json vonage_app.json

前提条件

このチュートリアルに従うには、以下のものが必要だ:

  • Node.jsインストール済み

  • Ngrokをインストールし、ローカルの開発サーバーをインターネットに公開します。

  • Voice APIにアクセスするためのVonage Developerアカウント。

セットアップ・ングロック

アプリケーションをライブ環境にデプロイすることなく、ローカル・マシンからエンドポイントを公開できるようにするために、ローカル・サーバーをインターネットからアクセスできるようにする。 ngrok

インストールが完了したら、新しいターミナル/コマンドプロンプトウィンドウで、以下を開始します。 ngrokをポート3000で起動する:

ngrok http 3000

Vonageのセットアップ

セットアップVonage CLI

Vonage CLIを使用してVonageアプリケーションを作成および管理できます。まだインストールしていない場合はインストールしてください:

npm install @vonage/cli -g

APIキーとAPIシークレットの設定

APIキーとAPIシークレットを設定するコマンドを実行します。この後 Configuration savedと表示されます。

その VONAGE_KEYVONAGE_SECRETVonageダッシュボード.

It shows where the API Key and API Secrets are. Right under the text 'API key and API Secret'Vonage Dashboard

vonage config:set --apiKey= --apiSecret=

アプリケーションの作成

CLIを使用して音声機能を持つ新しいアプリケーションを作成し、作成時に提供されたアプリケーションIDをメモしておきます。コマンドを実行して、新しい Vonage アプリケーションを作成します。

vonage apps:create

その後、いくつかのフィールドを持つプロンプトがポップアップ表示されるので、以下のように入力する。

✔ Application Name … "Forward a Call" ✔ Select App Capabilities › Voice ✔ Create voice webhooks? … yes ✔ Answer Webhook - URL … https://abc.ngrok.app/answer -> the URL of your current ngrok session followed by `/answer` ✔ Answer Webhook - Method › GET ✔ Event Webhook - URL … https://abc.ngrok.app/event -> the URL of your current ngrok session followed by `/event` ✔ Event Webhook - Method › POST ✔ Allow use of data for AI training? Read data collection disclosure - https://help.nexmo.com/hc/en-us/articles/4401914566036 … no

このような返事が返ってくるはずだ:

Creating Application... done Application Name: Forward Application ID: APPLICATION_ID Voice Settings Event Webhook: Address: https://abc.ngrok.app/event HTTP Method: POST Answer Webhook: Address: https://abc.ngrok.app/answer HTTP Method: GET Public Key -----BEGIN PUBLIC KEY----- A Long string -----END PUBLIC KEY----- App Files Vonage App File: `../vonage_app.json` Private Key File: ...`fileName.key` Improve AI: false

バーチャル番号のレンタル

次に、着信時の「顔」となるバーチャル番号が必要です。この番号はVonageアプリケーションにリンクされる:

  1. ご希望の地域で利用可能な Numbers を検索します。ありがたいことに、このようにCLIから直接Numbersを購入することができます! vonage numbers:search US(必要に応じてUSを国番号に置き換えてください)。

  2. 番号を買う: vonage numbers:buy 12079460000 US.

コマンドラインでは購入できないNumbersもありますので、ダッシュボードから購入する必要があります。購入するには Vonageダッシュボード番号購入ページ.検索フィルターで「Voice」にチェックを入れ、番号を購入したい国を選択します。

アプリケーションにバーチャル電話番号をリンクする

番号が決まったら、いよいよVonageアプリケーションに接続します。仮想電話番号は、Vonage Dashboardから直接、またはCLI経由でリンクできます。リンクすることで、バーチャル番号への通話がアプリケーションを経由して正しくルーティングされるようになります。

vonage apps:link --number=12079460000 APPLICATION_ID

ダッシュボードからもできます。ダッシュボードから アプリケーションページをクリックします。リンクしたい番号の横にあるVoiceセクションの「リンク」ボタンをクリックします。

Node.jsプロジェクトの作成

  1. プロジェクト用の新しいディレクトリを作成し、そこに移動します。(フォルダ例 VoiceWithVonage)

  2. で新しいNode.jsプロジェクトを初期化する。 npm init -yで初期化し、すべてのデフォルト設定を受け入れます。

依存関係のインストール

私たちのプロジェクトはいくつかの依存関係に依存しており、それらを1つのコマンドでインストールする:

npm install @vonage/server-sdk koa @koa/router koa-bodyparser dotenv

環境変数

アプリケーションの安全性と管理性を保つために、APIキーや電話番号のような機密情報を保存するために環境変数を使用します。

プロジェクト・ルートに .envファイルを作成し、変数を追加します。 Node.jsでの環境変数の使い方については、マイケルのブログ記事を参照してください。

// .env
VONAGE_API_KEY= Your Vonage API key, used for authenticating API requests.
VONAGE_API_SECRET= Your Vonage API secret
VONAGE_APPLICATION_ID= The ID of your Vonage application. Vonage applications allow you to manage your communication services and define how they interact with your web application.
VONAGE_PRIVATE_KEY= The path to your Vonage application's private key file. When you create a Vonage application that uses voice capabilities, you generate a public/private key pair. The private key authenticates your application when making API requests. It will  look like nameOfTheFile.key.
FROM_NUMBER= The Vonage virtual number (purchased through Vonage) that calls will come from. It is the number displayed to the user receiving the call.
YOUR_SECOND_NUMBER= The destination phone number to which the call will be forwarded. It should be in [E.164 format](https://en.wikipedia.org/wiki/E.164).

Vonageの初期化

Vonage Server SDKはVonageのサービスとの統合を簡単にします。プロジェクトでこれを初期化して Voice 機能を有効にし、プレースホルダの値が API クレデンシャルに置き換えられていることを確認します。 .envファイルに保存されている API 認証情報に置き換わっていることを確認してください。

というファイルを作成し forward_a_call.jsというファイルを作成し、以下のコードを記述する。

// forward_a_call.js
require("dotenv").config();
const { Vonage } = require("@vonage/server-sdk");

// Initialize the Vonage Server SDK with your credentials
const vonage = new Vonage({
 apiKey: process.env.VONAGE_API_KEY,
 apiSecret: process.env.VONAGE_API_SECRET,
 applicationId: process.env.VONAGE_APPLICATION_ID,
 privateKey: process.env.VONAGE_PRIVATE_KEY,
});

コアのセットアップ

まずはサーバー環境のセットアップから始める:

require("dotenv").config();
const Koa = require("koa");
const Router = require("@koa/router");
const koaBody = require("koa-bodyparser");

const app = new Koa();
const router = new Router();

app.use(koaBody());

ここでは、必要なモジュールをインポートし、Koaアプリケーションを初期化します。 .envファイルからロードします。

koaBodyparser ミドルウェアは、/event webhook で JSON ペイロードを読み込むために不可欠な、受信リクエストのボディを解析するために適用されます。

さらに、ルーティングミドルウェアである@koa/routerを使用して、アプリケーション内でルートを定義・管理しています。これにより、電話に応答するための/answerや、ウェブフックイベントを処理するための/eventのように、異なるパスのアクションを指定することができます。

NCCOで電話に出る

ルートとは /answerルートは、着信コールに応答するように定義されています。Vonageプラットフォームがバーチャル番号へのコールを受信すると、このエンドポイントにコール処理に関するNCCO(コール・コントロール・オブジェクト)と呼ばれる指示を取得するよう要求します。 /answerエンドポイントは、NCCO(Call Control Object)として知られる、コールの処理に関する指示を取得するよう要求します。

この例では NCCOは、まずVonageにメッセージを流し("Please wait while we connect your call.")、次にあなたのVonage番号(YOUR_SECOND_NUMBER)に接続します。FROM_NUMBER)を発信者番号として使用します。

router.get("/answer", async (ctx) => {
  const ncco = [
    {
      action: "talk",
      text: "Please wait while we connect your call.",
    },
    {
      action: "connect",
      eventUrl: [],
      from: process.env.FROM_NUMBER,
      endpoint: [
        {
          type: "phone",
          number: process.env.YOUR_SECOND_NUMBER,
        },
      ],
    },
  ];
  ctx.body = ncco;
});

イベントの処理、ルートの適用、サーバーの起動

この /eventルートは呼に関連するイベントをキャプチャし、ログに記録する。このエンドポイントは、呼のライフサイクルのデバッグと監視に不可欠である。イベントには、応答済み、完了、失敗などのコールステータスを含めることができる。これらのイベントをログに記録することで、コールフローを把握し、問題をトラブルシューティングすることができます。

最後に、Koaアプリケーションにルートを適用し、サーバーを起動します。

router.post("/event", async (ctx) => {
  console.log(ctx.request.body);
  ctx.status = 204; // No content to send back
});

app.use(router.routes()).use(router.allowedMethods());

app.listen(3000, () => console.log("Server running on port 3000"));

アプリケーションはポート 3000 でリッスンし、サーバが実行されるとコンソールにメッセージをログします。ここで、定義したルートにアクセスできるようになり、Vonage Dashboard でアプリケーションのアンサーとイベントのウェブフックに指定した URL に基づいて、Vonage プラットフォームがサーバーとやりとりできるようになります。

アプリケーションの実行とテスト

すべての準備が整ったら、コマンドを実行してサーバーを起動する:

node forward_a_call.js

Vonageのバーチャル番号にダイヤルして、コール転送をテストします。で指定した番号にリダイレクトされるはずです。 .envファイルで指定した番号にリダイレクトされるはずです。

結論と私たちとのつながり

おめでとうございます!これでVonageを使った電話転送をマスターしました。ご質問やご提案がある場合、または構築したものを共有したい場合は、当社の Vonage開発者Slackコミュニティに参加するか X(旧 Twitter.

さらに読む

Vonage Voice APIで脱出計画を立て、ゴーストコールを手に入れよう

NCCOで電話を転送する

シェア:

https://a.storyblok.com/f/270183/400x400/3f6b0c045f/amanda-cavallaro.png
Amanda Cavallaroデベロッパー・アドボケイト