https://a.storyblok.com/f/270183/53108/b4abcc859b/ruby_ivr_1200x600.png

Ruby on Railsで簡単なIVRを構築する方法

最終更新日 August 25, 2021

所要時間:4 分

このサンプルはRuby 3.0.0とRuby on Rails 6.1.4.1、そしてVonage Voice APIを使って作成しました。

ある会社に電話をかけたとき、メニューの指示に従って操作するよう促されたことはありませんか?もし経験があれば、IVR(Interactive Voice Response)を利用したことになります。IVRは、通常はテンキーによる選択という形で、発信者が入力した内容に基づいて動作します。Ruby on RailsとVonage Voice APIを使って独自のIVRを構築することができます。

このチュートリアルでは、シンプルなIVRサービスをホストする小さなRailsアプリケーションを構築します。このチュートリアルが終わったら、このアプリケーションを拡張して必要なものを作成することができます。このチュートリアルでは、アプリケーションは発信者から数値入力(DTMFコードとも呼ばれる)を受け付け、入力された入力を発信者に話し戻します。

前提条件

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

  • Ruby on Rails

  • ngrokVonageがあなたのマシン上でローカルに実行されているサービスにアクセスできるようにする。

はじめに

Railsアプリケーションの作成

最初にすべきことは、新しいRailsアプリケーションを作成することです。コマンドラインで以下のように実行できます:

rails new vonage-rails-ivr-demo --skip-activerecord

上記のコマンドは、Railsアプリを /vonage-rails-ivr-demoに作成し、データベースのインストールも省略します。このチュートリアルではデータを永続化しないので、データベースは必要ありません。

ディレクトリを vonage-rails-ivr-demoフォルダに移動し、コマンドラインから bundle installをコマンドラインから実行する。Vonageには堅牢な Ruby SDK gemRailsイニシャライザーgemがありますが、このアプリケーションではどちらもインストールする必要はありません。

IVRコントローラーの作成

アプリケーションが作成されたので、次のステップでは、次の2つのルートに応答するコントローラを作成します。 Nexmoコールコントロールオブジェクト(NCCO).最初のルートは電話に出て、発信者にキーパッドで番号を押すように要求します。2番目のルートは、発信者が入力した番号を話します。

コントローラーを作成するには、コマンドラインから以下を実行する:

rails generate controller IVR

それが完了したら、お好みのコード・エディターでアプリケーションを開き、新しく生成された /app/controllers/ivr_controller.rb.これから2つのルートのメソッドを追加します。まず #answerメソッドを作りましょう:

# ivr_controller.rb

class IvrController < ApplicationController
  skip_before_action :verify_authenticity_token
  
  BASE_URL = ''

  def answer
    render json:
      [
        {
          action: 'talk',
          text: 'Welcome! This is the Vonage Ruby on Rails IVR Demo Application. Please enter a number on your keypad, followed by the hash key.',
          language: "en-US",
          style: 9
        },
        {
          action: 'input',
          submitOnHash: true,
          eventUrl: ["#{BASE_URL}/event"]
        }
      ].to_json
  end
end

上に示したように #answerメソッドは2つのNCCO命令を提供する。ひとつは talkアクションで、呼び出し元はアプリケーションに挨拶される。米国ロケールとスタイル番号9を選択しました。Voice APIは言語とスタイルのオプションを豊富に提供しています。 音声合成ガイドを参照してください。 注意してください:以前の voiceName パラメータは非推奨です。 続きを読む

つ目のアクションは inputアクションで、オプションのパラメータ submitOnHashtrueに設定し、ユーザーが携帯電話のハッシュキーを押したときに入力が終了するようにしています。また、必須パラメータである eventUrlパラメータには、ユーザーの入力に応答する別のルートを指すURLを指定します。

最後に #answerメソッドは BASE_URLという定数変数を使用していることがわかります。このチュートリアルの後半で、ngrokの外部からアクセス可能なURLでこの変数を埋めます。

では、最後の2つ目のControllerアクションを追加しましょう、 #event.これは、発信者が入力した番号に対応します:

# ivr_controller.rb

def event
  number = params['dtmf']

  render json:
  [
    {
      action: 'talk',
      text: "You entered #{number}. Thank you for trying the Vonage Ruby on Rails IVR Demo Application!",
      language: "en-US",
      style: 9
    }
  ].to_json
end

コントローラーはこのようになる:

# ivr_controller.rb

class IvrController < ApplicationController
  skip_before_action :verify_authenticity_token

  BASE_URL = ''

  def answer
    render json:
      [
        {
          action: 'talk',
          text: 'Welcome! This is the Vonage Ruby on Rails IVR Demo Application. Please enter a number on your keypad, followed by the hash key.',
          language: "en-US",
          style: 9
        },
        {
          action: 'input',
          submitOnHash: true,
          eventUrl: ["#{BASE_URL}/event"]
        }
      ].to_json
  end

  def event
    number = params['dtmf']

    render json:
    [
      {
        action: 'talk',
        text: "You entered #{number}. Thank you for trying the Vonage Ruby on Rails IVR Demo Application!",
        language: "en-US",
        style: 9
      }
    ].to_json
  end

end

ルートの定義

次のステップはルートを定義することだ。そのためには /config/routes.rbファイルを編集して、2つのControllerアクションに対応する2つのURLパスを追加します:

# routes.rb

Rails.application.routes.draw do
  get '/answer', to: 'ivr#answer'
  post '/event', to: 'ivr#event'
end

ngrokの設定

Rails 6以降では、ngrokトンネルURLに開発環境へのアクセス許可を与える必要があります。NGROK_URLは、次のステップで実際のngrok URLに置き換えられます。以下を development.rbファイルに追加します。

注意編集後 development.rbを再起動する必要があります。

#development.rb

  config.hosts << "NGROK_URL.ngrok.io"

この時点で、Railsアプリケーションを実行する準備が整いました。では、ngrokの外部アクセスURLを設定しましょう。このURLは、VonageアプリケーションとVonageプロビジョニング電話番号を作成する最後のステップで必要になります。

外の世界とつながる

ngrokのセットアップ

ローカルの開発サーバーを外部からアクセスできるようにする方法はいくつかあるが、最も簡単な方法のひとつがngrokを使う方法だ。以下の記事を読んでほしい。 この記事を参照してください。

しかし、私たちの目的には、ただそれを実行させ、それが提供するURLをコピーするだけでよい。

ngrokを起動するには、新しいターミナル・ウィンドウを開き、コマンドラインから以下を実行する:

ngrok http 3000

ターミナル・ウィンドウにngrokロギング・インターフェースが表示されます。インターフェイスの最上部近くには Forwardingで始まる行があり、2つのURLが含まれています。最初のURLは外部からアクセス可能なngrokのURLで、末尾に ngrok.ioが続きます。 http://localhost:3000これはあなたのローカル開発サーバーです。これで、あなたやVonageが ngrok.ioURLはあなたのローカルサーバーに転送されます。

に戻り、空の文字列をngrokのURLに置き換えてください。 ivr_controller.rbに戻り、空の文字列を定数 BASE_URL定数に置き換えてください。ファイルのNGROK_URLのngrok URLも置き換える必要があります。 development.rbファイルのNGROK_URLも置き換えてください。このURLは、次のステップのVonageアカウント、電話番号、Voiceアプリケーションのセットアップでも使用します。

Vonageでつながる

Vonageアカウントのセットアップ

ボイス・アプリケーションを動作させるには、Vonageアカウント、Vonageプロビジョニング済み電話番号、Vonageアプリケーション、そして最後にアプリケーションと電話番号をリンクさせる必要があります。

Vonageアカウントは無料で作成でき、ボーナスとしてアカウントに2ユーロが加算され、新しいアプリケーションを使い始めることができる。以下のサイトをご覧ください Vonage API開発者ダッシュボードにアクセスし、Vonage API Developerアカウントをまだお持ちでない場合はサインアップの手順に従ってください。サインアップが完了すると、Vonage API Developer Dashboardが表示されます。

左側のメニューから Voice menu項目をクリックします。以下のオプションが表示されます:

voice menu optionsvoice menu options

オプションをクリックすると Getting startedオプションをクリックすると、音声合成機能をテストしたり、新しいVonageアプリケーションをセットアップしたりできるページが表示されます。次の Create an applicationフォームをクリックします:

create application formcreate application form

以下の項目をフォームに記入してください:

  • Application nameテキストフィールド入力 vonage-rails-ivr-demo

完了したら、先に進んで Create Applicationボタンをクリックしてください。

アプリケーションの作成後、公開鍵と秘密鍵のペアを生成することができます。このチュートリアルでは使用しませんが、このアプリケーションの機能を拡張する場合に備えて、鍵のありかを知っておくとよいでしょう。

これでVonage Voiceアプリケーションの作成は完了です。次のステップは、Vonageの電話番号を購入し、このアプリケーションにリンクさせることです。以下のように Configure applicationをクリックします:

configure application buttonconfigure application button

アプリケーションの設定ページにリダイレクトされます。ページの後半では、アプリケーションをVonageプロビジョニング電話番号にリンクすることができます。をクリックしてください。 Buy numbersボタンをクリックすると、国、機能、タイプ、電話番号の4桁を選択するページに移動します。

buy numbers menubuy numbers menu

現在お住まいの国を選択し、市内通話になるようにします。 Voiceを選び、タイプは携帯電話か固定電話のいずれかを選ぶ。テキストフィールドには何も入力する必要はありません。 Numberテキストフィールドには何も入力する必要はありません。をクリックすると Searchをクリックすると、利用可能な電話番号のリストが表示されます。

をクリックして選んでください。 Buyボタンをクリックし、確認プロンプトでもう一度黒い Buyボタンをクリックする。

一度番号を取得すれば、あとはその番号をあなたの vonage-rails-ivr-demoVoiceアプリケーションにリンクすることができます。そのためには、左側のパネルから Your applicationsオプションをクリックします。アプリケーションページに戻ります。以下のように、ページの後半に新しく購入した電話番号が表示されます:

link numbers menulink numbers menu

白い linkボタンをクリックするだけです。ボタンが赤くなり、次のように変わります。 unlink.これでVonageの電話番号がアプリケーションにリンクされました。最後のステップでは、Vonageアプリケーションで電話を受け付けてIVR Railsアプリに送信するように設定します。上部の editボタンをクリックします。というページにリダイレクトされます。 Edit vonage-rails-ivr-demo.次の「Capabilities」セクションが見つかるまでスクロールします:

Voice API Capabilities FormVoice API Capabilities Form

以下の項目をフォームに記入してください:

  • Answer URLテキスト・フィールドにもう一度ngrokのURLを入力してください: https://[ngrok url here]/answer

  • Event URLテキストフィールドにngrokのURLを入力してください: https://[ngrok url here]/event

ページの一番下までスクロールして save-changesボタンをクリックしてください。

最後のステップで完了です!これでVonageを利用したシンプルなIVR Railsアプリケーションが完成しました。Railsサーバーを起動し、ngrokも起動した状態で、購入した電話番号に電話をかけてみてください。

さらに読む

私たちが議論したことについて学び続けるために、次のことを検討してください:

シェア:

https://a.storyblok.com/f/270183/384x384/e5480d2945/ben-greenberg.png
Ben Greenbergヴォネージの卒業生

ベンはセカンドキャリアの開発者で、以前は成人教育、コミュニティ組織化、非営利団体運営の分野で10年を過ごした。彼はVonageの開発者支援者として働いていた。コミュニティ開発とテクノロジーの交差点について定期的に執筆している。南カリフォルニア出身で、長年ニューヨークに住んでいたが、現在はイスラエルのテルアビブ近郊に在住。