Ruby向けProgrammable Voiceクイックスタート
必要なものはコード数行のみ。Twilio Programmable Voiceを使用し、Rubyアプリケーションから通話の発着信を行うことができます。
このRubyクイックスタートでは、REST API、Twilio Rubyヘルパーライブラリー、RubyのSinatraフレームワークを使用し、簡単に開発する方法を説明します。
このクイックスタートでは、以下について説明します。
1. Twilioにサインアップし、音声対応のTwilioの電話番号を初めて取得する
2. 開発環境を設定し、通話の発着信を行う
3. MP3を再生する通話を発信する
4. 通話の着信・応答時に、Text to Speechを使用し発信側に対しメッセージを読み上げる
ビデオもご用意しています。Rubyにより通話の発着信を行う方法(YouTube)をご覧ください。
Twilioにサインアップし電話番号を取得する
Twilioアカウント、音声対応のTwilio電話番号をすでにお持ちの場合は、ログインし、次のステップに進んでください。
Rubyから電話をかけるには、Twilioアカウントが必要です。ここでサインアップし、無料トライアルアカウントを取得するか、すでにお持ちのアカウントにログインします。
次に、音声対応のTwilioの電話番号を用意します。音声通話機能付きのTwilio電話番号をお持ちではない場合は、ご購入いただく必要があります。 [Buy a Number](番号を購入する)ページに移動し、[Voice]ボックスをチェックし、[Search](検索)をクリックします。
使用可能な電話番号とその機能のリストが表示されます。好みの番号を探し、[Buy](購入)をクリックし、アカウントに追加します。
これでTwilioアカウントとプログラム可能な電話番号が揃い、通話に必要な基本ツールが準備できました(日本の場合、Regulatory Bundleが必須です)。
TwilioのHTTP APIを使用して電話をかけることもできますが、Twilioの公式Rubyヘルパーライブラリーを使用することにより、作業をかなりシンプルにできます。インストール方法を説明します。
RubyとTwilioヘルパーライブラリーをインストールする
他のRubyのクイックスタートのいずれかをすでに終えており、RubyとTwilio Rubyヘルパーライブラリーがインストールされている場合には、このステップを省略し、最初の通話に進むことができます。
Twilioを使用した最初の通話には、RubyとTwilio Rubyヘルパーライブラリーがインストールされている必要があります。
Rubyをインストールする
MacマシンまたはLinuxマシンをご使用の場合には、Rubyがすでにインストールされている可能性があります。ターミナルを開き、以下のコマンドを実行することで確認できます。
ruby --version
次のように表示されます。
$ ruby --version
ruby 2.7.2
Windowsユーザーは、RubyInstallerを使用し、Rubyをインストールできます。
TwilioのRuby SDKは、Rubyバージョン2.4から3.0までをサポートしています。(Rubyの以前のバージョンをご使用の場合には、rbenv、RVM、またはHomebrewを使用し、サポート対象のバージョンにアップグレードできます。)
Twilio Rubyヘルパーライブラリーをインストールする
twilio-rubyは、RubyGemsからインストールするのが最も簡単な方法です。
gem install twilio-ruby
手動のインストール
または、twilio-rubyのソースコードを複製し、そこからライブラリーをインストールすることもできます。
「Permission Denied」(権限が拒否されました)
コマンドラインの中央にPermission Denied(権限が拒否されました)という長いエラーメッセージが表示された場合は、上記のコマンドにsudoを使用し、sudo gem install twilio-rubyを実行します。
Rubyを使用し通話を発信する
Rubyとtwilio-ruby
をインストールしたため、購入したTwilioの電話番号から1つのAPIリクエストを使用し、通話を発信できるようになりました。make_call.rb
という新しいファイルを作成し、このコードサンプルを入力または貼り付けします。
このコードにより、引数として渡される2つの電話番号の間で音声通話が開始します。「from」番号はTwilioの番号であり、「to」番号は通話相手の番号です。
URL引数はTwiML(Twilio Markup Language)を提示します。TwiMLは、受信者が応答した際に、Twilioが何をすべきか伝える役割を持ちます。このTwiMLにより、Text To Speech機能を通じメッセージを読み込み、MP3を再生するようにTwilioに指示します。
このコードを機能させる前に、自分のTwilioアカウントで動作するように少し編集する必要があります。
プレースホルダの認証情報値を置き換える
account_sid
とauth_token
のプレースホルダ値を、ご自身のTwilio認証情報に置き換えます。
https://www.twilio.com/consoleに移動し、ログインします。このページでは、お客様固有のAccount SIDとAuth Tokenを確認できます。この作業は、今回のようにTwilio Clientによりメッセージを送信する際に必要となります。「目」のアイコンをクリックすると、Auth Tokenが表示されます。
make_call.rb
を開き、account_sid
とauth_token
の値をご自身固有の値に置き換えます。
注意: 最初は認証情報を直接コードに埋め込んでも問題ありませんが、本番環境にデプロイするまでには、必ず環境変数を使用し、認証情報を保護してください。詳細については、環境変数の設定方法をご覧ください。
toとfromの電話番号を置き換える
数分前に購入した音声対応の電話番号を覚えていますか。入力されているfrom
の番号を、その番号に置き換えます。必ずE.164形式を使用してください。
[+][国コード][エリアコードを含む電話番号]
次に、to
の電話番号をご自身の携帯電話番号に置き換えます。通話を受信できる電話番号であればどの番号でも構いませんが、プロセスを実際に体験するために、ご自身の番号を使用することをお勧めします。上記のように、この値にはE.164形式を使用します。
変更内容を保存し、ターミナルからスクリプトを実行します。
ruby make_call.rb
これで完了です。Twilioの番号から電話がかかり、携帯電話が鳴ります。応答すると短いメッセージが聞こえます。😉
Twilioのトライアルアカウントを使用している場合、Twilioにより確認された番号のみに通話を発信できます。電話番号は、Twilio Consoleの認証済み発信者IDにより認証できます。その他のトライアルアカウントの制限については、無料のTwilioトライアルアカウントでの作業方法に関するガイドをご覧ください。
次に、Twilioの電話番号への着信通話に応答する方法を学びます。まず、Sinatraサーバーを設定し、起動します。
Sinatraをインストールし、開発環境を設定する
SMSメッセージを受信し返信するには、リクエストを受信可能な軽量のWebアプリケーションを作成する必要があります。このクイックスタートではSinatraを使用しますが、Railsの使用をご希望の場合には、こちらのブログ記事の手順をご覧ください。
まず、以下を含むGemfileが必要です。
# Gemfile
source 'https://rubygems.org'
gem 'sinatra'
gem 'twilio-ruby'
RubyプロジェクトはBundlerを使用し、依存関係を管理します。SinatraとTwilio SDKを開発環境に取り込むコマンドは、bundle installです(お使いのマシンにBundlerがインストールされていない場合は、まずgem install bundler
を実行する必要があります)。
$ bundle install
...
gemライブラリーの場所を確認するには、bundle show [gemname]コマンドを実行します。
シンプルなSinatraアプリケーションを作成する
シンプルなSinatraアプリケーションを作成することにより、開発環境が正しく設定されているかをテストできます。Sinatraのドキュメントからサンプルをコピーし、「quickstart.rb」という新しいファイルに挿入します。
require 'sinatra'
require 'twilio-ruby'
get '/' do
content_type 'text/xml'
Twilio::TwiML::VoiceResponse.new do | response |
response.say(message: "Hello World")
end.to_s
end
次に、ruby quickstart.rb
コマンドを使用し、新しいSinatraアプリケーションを実行します。ブラウザーでhttp://localhost:4567を開くと、<?xml version="1.0" encoding="UTF-8"?><Response><Say>Hello World</Say></Response>
応答が表示されるはずです。
TwilioにSinatraアプリケーションと通信させる
簡易的なSinatraアプリケーションを構築し、通話を受け付けます。その前に、Twilioがアプリケーションにアクセスできるようにする必要があります。
大半のTwilioサービスは、Webhookを使用することによりアプリケーションと通信します。例えば、Twilioが通話を受けると、通話の処理方法の指示を受けるためにアプリケーションを使用しURLに接続します。
自分の開発環境にあるSinatraアプリケーションの作業をしている場合、そのコンピューター上の他のプログラムからしかアプリにアクセスできません。つまり、Twilioからはアクセスできません。インターネットでアプリケーションにアクセスできるようにし、この問題を解決する必要があります。
アプリケーションをHerokuやAWSにデプロイするなど、方法はいくつかありますが、Twilioアプリケーションのテストには手間の少ない方法を採用します。インターネットでアプリケーションに簡単にアクセスできるようにするには、ngrokというツールをお勧めします。ngrokを開始すると、ngrok.ioドメインの一意のURLが提供され、受信リクエストがローカルの開発環境に転送されます。
以下のように機能します。
まだngrokをご利用でない場合には、ダウンロードページに移動し、お使いのオペレーティングシステムに適したバイナリをダウンロードします。ダウンロード後にパッケージを解凍します。
MacまたはLinuxをお使いの場合には、これだけで作業は終わりです。Windowsをご使用の場合は、Windowsにngrokをインストールし、設定する方法についてのガイドを参照してください。ngrokの活用方法などの詳細については、こちらの詳細なブログ記事をご覧ください。
ngrokを設定した後に、前に作成したSinatraアプリケーションを起動します。
ruby quickstart.rb
ngrokが機能するには、アプリケーションがローカルで実行されている必要があります。
次に、新しいターミナルタブまたはウィンドウを開き、このコマンドを使用しngrokを開始します。
./ngrok http 4567
4567は、Sinatraアプリケーションのデフォルトポートです。ローカルサーバーが別のポートで実行されている場合には、4567を正しいポート番号に置き換えてください。
次のような出力が表示されるはずです。
この出力から公開URLをコピーし、それをブラウザーに貼り付けます。すべてが正しく機能している場合には、Sinatraアプリケーションの<?xml version="1.0" encoding="UTF-8"?><Response><Say>Hello World</Say></Response>
メッセージが表示されるはずです。
Twilioを使用し着信に応答する
お使いのTwilio番号が通話を受けると、Twilioは次の作業の指示を求めサーバーにHTTPリクエストを送信します。リクエストを受信したら、Twilioに電話への応答方法を指示できます。
このクイックスタートでは、Sinatraアプリにて通話に応答させ、発信者に対して音声の短いメッセージ送ります。再度quickstart.rb
を開き、以下のコードサンプルのようにコードを更新します。
電話の処理方法に関する指示を使用し、Twilioから着信に応答する
ファイルを保存し、以下のコードを使用しアプリを再起動します。
ruby quickstart.rb
これにより、Webブラウザーでhttp://localhost:4567/answerを開けるようになるはずです。ページのソースコードを確認すると、以下のテキストがあるはずです。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say">Thank you for calling! Have a great day.</Say>
</Response>
このソースコードは、Twilioヘルパーライブラリーを活用した皆さんのコードから生成されたTwiML XMLです。
ngrokがlocalhost上で以前と同じポートで実行されていることを再確認します。これでTwilioが皆さんのアプリケーションにアクセスできるようになります。最後にあと一点のみ、Twilioにリクエストの送信先を伝えれば、皆さんのアプリに電話をかける準備が整います。
Webhook URLを設定する
Twilioが参照する場所を認識するためには、Twilioの電話番号を設定し、新しい通話を受けるたびにWebhook URLが呼び出されるようにする必要があります。
1. twilio.comにログインし、Consoleの[Numbers](番号)ページに移動します。
2. 音声対応の電話番号をクリックします。
3. [Voice & Fax](音声とファックス)セクションを探します。デフォルトの[Configure With](設定方法)選択項目には、[Webhooks]、[TwiML Bins]など、必要なものを設定します。
4. [A CALL COMES IN](次で通話を受信)セクションでは、[Webhook]を選択し、使用するURLを貼り付けます(「/answer」エンドポイントを忘れないでください)。
変更内容を保存すると、準備完了です。
アプリケーションをテストする
localhostとngrokサーバーが実行されていれば、新しいSinatraアプリケーションをテストできます。
自分の携帯電話から、自分のTwilio電話番号に電話をかけます。ngrokコンソールにHTTPリクエストが表示されます。Sinatraアプリは着信リクエストを処理し、TwiMLで応答します。通話が接続されると、メッセージが聞こえます
次のステップ
Rubyを使用した通話の発着信の基本が理解できました。
ここでSinatraアプリは、TwiML動詞<Say>のみを使用し、音声合成機能により発信者に向けてメッセージを読み上げましたが、<Record>、<Gather>、<Conference>などのTwiML動詞を使用し、他にもさまざまな機能を実行できます。
詳細については、以下のページをご覧ください。
- Rubyを使用し、キーパッド(DTMFトーン)によるユーザーの入力を収集する
- Rubyを使用し、発着信したTwilio Voiceの通話を録音する方法を学ぶ
- Rubyを使用し、電話会議を作成する
- Twilio Programmable VoiceのAPIリファレンスドキュメントを読む
- Rubyを使用し、進行中の通話を変更する方法を学ぶ
- ブラウザーまたはモバイルアプリケーションから電話をかけるのなら、Twilio Clientを使用し、高品質のVoIP通話と連携しましょう。
- Rubyを使用し、Twilioアカウントから進行中または完了した通話に関する情報を取得する
- RubyとSinatraを使用した、オペレーター間の通話転送方法をサンプルアプリケーションチュートリアルで確認する
コミュニケーションの未来を構築。
サポートが必要ですか?
コーディングに関するご質問、ご不明点等ございましたら、お問い合わせからご連絡いただくか、TwilioのStack Overflow Collectiveにアクセスいただくか、Stack OverflowサイトでTwilioタグを検索してください。