Android x Twilio #3 アプリから一般電話に電話をかけてみよう

2013.05.08

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

はじめに

前回はサーバーサイドを Ruby on Rails で実装してデプロイするところまでご紹介しました。そして今回も引き続き QuickStart を進めてみたいと思います。 今回のサンプルを実装するとアプリで入力された電話番号に、Twilioの電話番号を使って電話をかけることができるようになります!サンプルでは PHP で実装していますが、本記事では Ruby on Rails で実装していきます。

サーバーにパラメータを渡す

まずは MonkeyPhone.javaconnect() メソッドをパラメータが受けとれるように修正します。

public void connect(String phoneNumber) {
    // パラメータのHashMapを生成
    HashMap<String, String> params = new HashMap<String, String>();
    params.put("PhoneNumber", phoneNumber);
    // Device#connect()に渡す
    connection = device.connect(params, this);
    if (connection == null) {
        Log.w(TAG, "Failed to create new connection");
    }
}

こうすることで、TwiML APPS に登録してある Twilio アプリの RequestURL にパラメータをつけることができます( http://sample.com/hello?PhoneNumber=xxx みたいになります )。あとはこのメソッドを呼んでいる HelloMonkeyActivity.java を書き換え、EditText で入力された内容を渡すようにしましょう。

@Override
public void onClick(View view) {
    if (view.getId() == R.id.dialButton) {
        // 入力された電話番号を渡す
        String phoneNumber = numberField.getText().toString();
        phone.connect(phoneNumber);
    } else if (view.getId() == R.id.hangupButton) {
        phone.disconnect();
    }
}

ここまででクライアントの実装は終わりです!

パラメータを受け取り TwiML を生成する

今度はサーバーサイドの実装です。前回実装したアプリをベースに作ります。まずは CallController というクラスを作ります。

call_controller.rb

# coding:utf-8
class CallController < ApplicationController
  # GET "/call"
  def index
    # TwiMLを生成
    response = Twilio::TwiML::Response.new do |r|
      r.Dial :callerId => 'Twilioでベリファイ済みの番号' do |d|
        d.Number params[:PhoneNumber]
      end
    end
    # XMLで出力
    render :xml => response.text
  end
end

前回作った TwiML とは異なり、電話番号などが入ってます。電話を発信したいときにはDial タグを使います。callerId 属性を必ず指定しなければいけませんが、ここで指定する電話番号は Twilio でベリファイ済みの電話番号である必要があります。つまりこちらに登録されている番号ということです。まだ登録していないかたは登録しましょう。
Number タグにパラメータで渡された PhoneNumber をセットして終わりです。これを呼び出すと以下の様な TwiML になります。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Dial callerId="Twilioでベリファイ済みの電話番号">
    <Number>パラメータで渡された電話番号</Number>
  </Dial>
</Response>

なお、この TwiML で扱う電話番号は E.164 形式でなければいけないので注意してください。あとは heroku なり EC2 なりお好きなところにデプロイし、Twilio アプリの RequestURL を新しく作った API に変更してください。

twiml_app

ここまでできたらアプリを起動しましょう。EditText に電話番号を入力して Dial ボタンをタップすると…

twilio_call01_2

電話がかかり、通話出来ました!

twilio_call02

まとめ

ここまでで QuickStart が8割くらい終わりました。いよいよ本格的に電話アプリっぽくなってきましたね。次回は一般電話から着信を受けるサンプルを実装したいと思います。

参考