
シェア:
ベンはセカンドキャリアの開発者で、以前は成人教育、コミュニティ組織化、非営利団体運営の分野で10年を過ごした。彼はVonageの開発者支援者として働いていた。コミュニティ開発とテクノロジーの交差点について定期的に執筆している。南カリフォルニア出身で、長年ニューヨークに住んでいたが、現在はイスラエルのテルアビブ近郊に在住。
Ruby on RailsでVoiceプロキシ経由で電話を転送する
所要時間:3 分
私たちは日常生活の多くをアプリで行っているかもしれないが、それでも電話をかけることは私たちの世界では必要なことだ。電話でビジネスをするたびに、私たちはプライベートな電話番号を他人にさらすことになる。これは、すべての関係者にプライバシーとセキュリティの両方のリスクをもたらす可能性があります。しかし、音声プロキシを利用すれば、この問題を軽減し、安心して電話をかけることができる。
ボイスプロキシとは、電話を仲介電話番号を通して最終目的地に転送する方法である。最終的な電話番号は仲介電話番号の後ろに隠蔽されるため、プライバシーが保たれます。このチュートリアルでは、Nexmo Voice APIを使用して音声プロキシ経由で音声通話を転送するRuby on Railsアプリケーションを作成します。
前提条件
このチュートリアルを行うには Nexmoアカウント.アカウントをお持ちでない場合は、今すぐサインアップしてください。
そのほかにも、必要なものがある:
ngrokを使用して、Rails アプリケーションを外部に公開します。
Railsで音声プロキシ経由で音声通話を転送する
Nexmo Voice APIを使って、Voiceプロキシ経由で音声通話を転送するために、以下の作業を行う:
Railsアプリケーションを作成する
アプリケーションを外部に公開し、Nexmoが通信できるようにする。
Nexmoアカウントの設定、Nexmo電話番号の購入、Nexmo Voiceアプリケーションの作成
Railsのコントローラ、ビュー、ルートを作成する
Railsアプリケーションの作成
コマンドラインから以下を実行する:
上記のコマンドを実行すると、PostgreSQLをデフォルトのデータベースとする新しいRailsアプリケーションが作成されます。新しいRailsアプリケーションをお好みのコードエディタで開き dotenv-railsと nexmogemをプロジェクトのルートディレクトリの Gemfileをプロジェクトのルートディレクトリに追加します:
# Gemfile
gem 'nexmo'
gem 'dotenv-rails`これでgemの依存関係をアプリケーションにインストールする準備ができました。ターミナルから bundle installを実行します。ターミナルから rake db:migrateを実行することもできます。このチュートリアルでは、データを永続化するためにデータベースを使用しません。
この時点で、Nexmoがアプリケーションと通信するために使用する、外部からアクセス可能なURLを取得するために、ngrokをセットアップする。
アプリケーションの公開
ローカルの開発サーバーを外部からアクセスできるようにする方法はいくつかあるが、最も簡単な方法のひとつがngrokを使う方法だ。以下の記事を読んでほしい。 この記事を参照してほしい。しかし、今回の目的では、ngrokを起動して、ngrokが提供するURLをコピーするだけでいい。
ngrokを起動するには、新しいターミナル・ウィンドウを開き、コマンドラインから以下を実行する:
ターミナル・ウィンドウにngrokロギング・インターフェースが表示されます。インターフェイスの最上部近くには Forwardingで始まる行があり、2つのURLが含まれています。最初のURLは外部からアクセス可能なngrokのURLで、末尾に ngrok.ioが続きます。 http://localhost:3000これはあなたのローカル開発サーバーです。これで、あなたやNexmoが ngrok.ioURLはあなたのローカルサーバーに転送されます。
必ず ngrok.ioURLを安全な場所にコピーしてください。このURLは、次のステップでNexmoアカウント、電話番号、Voiceアプリケーションを設定する際に使用します。
電話番号とVoice ApplicationsでNexmoアカウントを作成する
音声アプリケーションを動作させるためには、Nexmoアカウント、Nexmoプロビジョニングされた電話番号、Nexmoアプリケーション、そして最後にアプリケーションと電話番号をリンクさせる必要があります。
Nexmoアカウントは無料で作成でき、さらにボーナスとして2ユーロがアカウントに入金され、新しいアプリケーションを使い始めることができます。ウェブブラウザで<${CUSTOMER_DASHBOARD_URL}/sign-up>に移動し、サインアップのステップに進みます。完了すると、Nexmoダッシュボードになります。
左側のメニューから Voice menuの項目をクリックします。以下の4つのオプションが表示されます。 APPLICATIONS:

をクリックしてください。 Create an applicationオプションをクリックすると、新しいNexmoアプリケーションを設定するページが表示されます。
以下の項目をフォームに記入してください:
Application nameテキストフィールド入力voice-proxy-forwarding-demoEvent URLテキストフィールドにngrokのURLを入力してください:https://[ngrok url here]/eventAnswer URLテキスト・フィールドにもう一度ngrokのURLを入力してください:https://[ngrok url here]/webhooks/answer
完了したら、先に進んで青い Create Applicationボタンをクリックしてください。
これでNexmo Voiceアプリケーションが作成できました。次のステップは、Nexmoの電話番号を購入し、このアプリケーションにリンクさせることです。
Nexmoダッシュボードから左メニューの Numbersメニュー項目をクリックします。3つのオプションが表示されます:

オプションをクリックすると Buy numbersをクリックすると、国、機能、タイプ、4桁の番号を選択するページに移動します。

現在お住まいの国を選択し、市内通話になるようにします。 Voiceを選び、タイプは携帯電話か固定電話のいずれかを選ぶ。テキストフィールドには何も入力する必要はありません。 Numberテキストフィールドには何も入力する必要はありません。をクリックすると Searchをクリックすると、利用可能な電話番号のリストが表示されます。
オレンジ色の Buyボタンをクリックし、確認画面でもう一度オレンジ色の Buyボタンをクリックする。
一度番号を取得すれば、あとはその番号をあなたの voice-proxy-forwarding-demoVoiceアプリケーションにリンクさせることができます。電話番号の横にある歯車のアイコンをクリックすると、以下のメニューが表示されます:

を選択します。 voice-proxy-forwarding-demoドロップダウンリストからアプリケーションを選択し、青いボタンをクリックします。 Okボタンをクリックします。これでNexmoの電話番号がVoiceアプリケーションにリンクされ、ボイスプロキシ経由で着信電話を受けたり転送したりできるようになります。
アプリケーションを実行する前の最後のステップは、Railsコントローラのアクションとルーティングを定義することです。
Railsのコントローラとルートを作成する
という名前のControllerファイルを作成します。 call_controller.rbという名前の /app/controllers/.Controllerの中には、Controllerアクションと3つの定数変数を定義します。アクションには Nexmo Call Control Object (NCCO)が含まれ、音声プロキシ経由で個人番号に電話を転送します。3つの定数変数には、それぞれngrok URL、Nexmo番号、個人番号を格納します。
# call_controller.rb
class CallController < ApplicationController
BASE_URL = 'YOUR NGROK URL GOES HERE'
NEXMO_NUMBER='YOUR NEXMO PROVISIONED NUMBER GOES HERE'
PERSONAL_NUMBER = 'YOUR PERSONAL NUMBER GOES HERE'
def answer
render json:
[
{
"action": "talk",
"text": "Please wait while we forward your call"
},
{
:action => 'connect',
:eventUrl => [],
:from => NEXMO_NUMBER,
:endpoint => [
{
:type => 'phone',
:number => PERSONAL_NUMBER
}
]
}
]
end
end
最後に、ルートを routes.rbでルートを定義する必要があります。 GETリクエストの送信先がわかるようにします。先に進んで /config/routes.rbを開き、以下を追加する:
# routes.rb
get '/webhooks/answer', to: 'call#answer'リクエストのパスが GETリクエストのパスが、Nexmo ダッシュボードで Nexmo Voice アプリケーションをセットアップしたときに指定した URL と同じであることに注意してください。
アプリケーションの実行準備が整いました!おめでとう!
アプリケーションの実行
アプリケーションを実行するには、コマンドラインから以下を実行すればよい:
これでRailsサーバーが起動する。別のターミナルウィンドウで、ngrokも起動していることを確認してください。Nexmoの電話番号に電話をかけると、アプリケーションから「電話を転送しますのでお待ちください。
アプリケーションに、転送していることを知らせずに通話を転送させたい場合はどうすればいいでしょうか?必要なのは talkNCCO命令を #answerルートから NCCO 命令を削除するだけです。そうすると、最終的なControllerメソッドは以下のようになります:
# call_controller.rb
def answer
render json:
[
{
:action => 'connect',
:eventUrl => [],
:from => NEXMO_NUMBER,
:endpoint => [
{
:type => 'phone',
:number => PERSONAL_NUMBER
}
]
}
]
end
さらに読む
もっと知りたい、もっと読みたいという方は、以下を参考にしてほしい: