*

AppEngineでTwilioを試してみた(基本編)

公開日: : 最終更新日:2015/04/17 投稿者: GAE, GCP

AppEngineでTwilioを試してみた(基本編)
AppEngineでTwilioを試してみた(応用編)

はじめに

これまでapps-gcpではデータストアやCloud SQL等のGoogle Cloud Platform(以下GCP)上のAPIについて検証をおこなってきました。ただ、これからGCP上で開発をおこないたいと考えている方の中には外部のAPIも利用してより幅の広いサービスを開発していきたいという方もいるかと思います。ということで、今回はGCPサービスと連携可能なサードパーティのAPIにスポットを当ててみようかと思います。記念すべき第一回は「twillio」を取り上げてみます。

Twilioとは?

Twilioとは”電話”そのものをクラウド化したサービスのことで、開発者はハードウェアの購入をおこなわずに自前でコミュニケーションサービスを構築することができます。TwilioAPIを利用するユーザは一般のクラウドサービスと同様に利用した分だけ使用料金を支払います。もちろん、初期費用は一切かかりません。今回は実際にTwilioアカウントを作成し音声メッセージの出力までを試してみました。Twilio社はGoogle App Engine(以下GAE)用にライブラリを提供しているため、本稿ではGAE上でtwilio APIを利用する方法について説明します。

Twilioの仕組み

TwilioとGAEの連携は以下のフローで動作します。 Untitled

画像1. twilioとGAEの連携

 

(1)モバイルによる発信処理

ユーザがtwilioから発行された電話番号に発信をおこなうと、リクエストがtwilioサーバに送信されます。

(2)リクエストURL(GAE)への問い合わせ

twilioサーバはあらかじめ開発者が設定しておいたリクエストURL(GAE)に対して、ユーザとのコミュニケーションを定義したTwiMLと呼ばれるXMLファイルをリクエストします。

(3)TwiMLをレスポンスとして返却

GAEサーバはtwileサーバに対してTwiMLを返却します。

(4)モバイルへ音声メッセージの出力

twilioサーバはTwiMLファイルで定義された挙動(音声出力・録音等)を実行します。

twiMLとは?

twiMLとは、電話からの発信を受信した場合の挙動を定義するためのXMLファイルです。twilioサーバはGAEからこのtwiMLを受け取り、ユーザとのコミュニケーションをおこないます。本章では、twiMLのタグをいくつかピックアップして紹介します。

(1)Sayタグ

通話による音声出力をおこなう場合はSayタグ内に出力する文字列を定義します。Sayタグの主な属性は以下の通りです。例1は、電話を発信すると2回「こんにちわ。」という音声を出力するサンプルtwiMLです。
・voice
音声を指定します。設定できる値は「man」「woman」「alice」です。

※1 aliceは、多数の言語をサポートする属性です。ただし女性の声しかサポートしていません。
※2 日本語版の場合は3種類のうち「woman」しか対応していません。

・language
音声言語を指定します。日本語の場合は「ja-jp」を指定します。

・loop
繰り返す回数を指定します。

<?xml version="1.0" encoding="UTF-8" ?>
<Response>
<Say voice="woman" language="ja-jp" loop="2">こんにちわ。</Say>
</Response>

例1. Sayタグ

(2)Playタグ

通話中に音声ファイルを再生する場合はPlayタグ内に再生する音声ファイルのURLを定義します。Playタグの主な属性は以下の通りです。例2は、10回音声ファイルを再生するサンプルtwiMLです。

・loop
繰り返す回数を指定します。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Play loop="10">https://api.twilio.com/cowbell.mp3</Play>
</Response>

例2. Playタグ

(3)Gatherタグ

携帯電話の入力キーを取得する場合はGatherタグを利用します。Gatherタグの属性は以下の通りです。例3は、携帯の入力キーを受け付けるサンプルtwiMLです。

・method
「GET」または「POST」を指定します。

・action
入力キーを受信するURLを指定します。URLは「Digits」というパラメータから入力キーを取得します。

・finishOnKey
入力を終了するためのキーを指定します。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Gather action="/getKey" method="GET" finishOnKey=”*”>
<Say>キーパッドからキーを入力してください。</Say>
</Gather>
</Response>

例3. Gatherタグ

※入力キーはGatherタグのactionで指定されたURLに送信されます。GAEから見たログは以下の通りです。キーパッドから”4”を入力した場合は、パラメータは「Digits=4」という形式で送信されてくることがわかります。

 image06

画像2.キー入力取得時のGAEログ

(4)Smsタグ

通話中にSMSメッセージを送信する場合はSmsタグを利用します。Smsタグの主な属性は以下の通りです。例4は、通話者に対してSMSメッセージを送信するサンプルtwiMLです。

・to
送信先を指定します。指定しない場合は通話したユーザ宛にメッセージが送信されます。

・from
送信元を指定します。指定しない場合は通話先の電話番号が送信元となります。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say>電話を受け付けました。SMSメッセージを送信します。</Say>
<Sms from=”+15104038862”>メッセージを送信しました。</Sms>
</Response>

例4. Smsタグ

 

(5)Redirectタグ

他のtwiMLを呼び出す場合はRedirectタグを利用します。Redirectタグの主な属性は以下の通りです。例5は、他のtwiMLにリダイレクトするサンプルtwiMLです。

・method
「GET」または「POST」を指定します。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Redirect method="POST">http://hoge.hoge/twiml.xml</Redirect>
</Response>

例5. Redirectタグ

Twilioのアカウント登録

Twilioのアカウント作成はとても簡単です。以下のURLにアクセスし「サインアップ」リンクをクリックしてください。
https://jp.twilio.com/

(1)ユーザ情報の入力をおこない「利用開始」ボタンを押下します。

image01

画像3. Twilioアカウントの登録

(2)手持ちの携帯電話番号を入力し「Text Me」ボタンを押下します。

image04

画像4.電話番号の認証

(3)確認コードが記載されたSMSメッセージを受信したら、本コードを入力し「Submit」ボタンを押下します。

image02

画像5.確認コードの入力

(4)twillioからトライアル用の電話番号が発行されます。

これでアカウント作成は完了です。2つ目以降の電話番号を発行する場合は、アカウントのアップグレードをおこないます。アップグレードにはクレジット情報の入力が必要となります。

image07

画像6.アカウント発行時に付与される電話番号

環境構築

AppEngineでTwilioの開発環境を構築するのはとても簡単です。 以下のダウンロードをおこない、Eclipseに(3)のライブラリのビルドパスを設定してください。

※既にApp Engineの環境が整っている場合は、TwilioのHelperライブラリだけダウンロードしてください。

(1)Eclipse

(2)Google Plugin

(3)Twilio Helper Libraries(v3.4.4)

・twilio-java-sdk-3.4.4.jar

・twilio-java-sdk-3.4.4-jar-with-dependencies.jar

https://www.twilio.com/docs/libraries

音声メッセージを出力してみる

通話をおこなうと「Hello, it’s apps-gcp!」という音声メッセージを出力するサーブレットプログラムを実行してみます。EclipseからAppEngineプロジェクトを作成し、以下のサーブレットを作成してください。

(1)音声メッセージ出力のサーブレットの作成

– TwilioServlet

public class TwilioServlet extends HttpServlet {
 public void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException {
  // Create a TwiML response and add our friendly message.
  TwiMLResponse twiml = new TwiMLResponse();
  Say say = new Say("Hello, it’s apps-gcp!");
  try {
   twiml.append(say);
  } catch (TwiMLException e) {
   // TODO Auto-generated catch block
   e.printStackTrace();
  }
  resp.setContentType("application/xml");
  resp.getWriter().print(twiml.toXML());
 }
}

図1.音声メッセージ出力用サーブレット

– web.xml

...
<servlet>
 <servlet-name>Twilio</servlet-name>
 <servlet-class>test.TwilioServlet</servlet-class>
</servlet>
<servlet-mapping>
 <servlet-name>Twilio</servlet-name>
 <url-pattern>/twilio</url-pattern>
</servlet-mapping>
<welcome-file-list>
 <welcome-file>index.html</welcome-file>
</welcome-file-list>
...

図2.サーブレットのURL定義

(2)デプロイ

作成したプログラムをEclipseからデプロイしてください。web.xmlで設定したサーブレットURLにアクセスし、以下のtwiMLが出力されることを確認してください。

image00

画像7.twiML

(3)サーブレットURLの登録

Twilioのアカウントページ(https://jp.twilio.com/)にログイン後、ヘッダメニューの「NUMBERS」を選択し、[音声通話]-[Redirect URL]に今回作成したサーブレットのURLを登録してください。

 image03

画像8.音声通話に対応するRequest URLの設定

(4)実際に電話をかけてみる

Twilioから発行された電話番号に対して実際に電話をかけてみます。

(5)音声メッセージの確認

「Hello, It’s apps-gcp!」という音声メッセージが電話から聞き取れれば、プログラムの実行は成功です。

※当分の間、以下の電話番号を公開しますので興味がある方は実際に電話をかけてみてください。上記メッセージが受話器から流れるはずです。ただし、公開は予告なしに取り下げる可能性がありますのでご了承ください。

050-3159-7370

まとめ

以上のことから、twilio SDKを利用することで開発者は簡易にコミュニケーションシステムを構築できることがわかりました。さらにAppEngineを利用することで他のプラットフォームを利用するよりも、よりスピーディに開発がおこなえることが実感できたと思います。次回は応用編としてより高度なtwilio APIの使い方について説明したいと思います。

AppEngineでTwilioを試してみた(基本編)
AppEngineでTwilioを試してみた(応用編)

この記事を書いた人

tomorier
tomorier
普段はGCP専門のエンジニアをやっています。
最近は個人的な活動としてGOとswiftでアプリ作ってます。

関連記事

GCEにPuttyから簡単接続する

年末ではありますが、先日ちょっとGCE(Google Compute Engine)を触る機会がまた

記事を読む

Search API詳細解説 Part4「Search API 詳細 検索性能編」

Search API詳細解説シリーズ タイトル Part1Search API 概要説明

記事を読む

GAEのautomatic scalingとbasic scalingを徹底比較!!

Google App Engine(以下GAE)(※1)は、GCPユーザならば言わずと知れた

記事を読む

Datastoreの仕組み 〜Consistencyについて〜

はじめに スケーラビリティと可用性が高いと言われているGoogle Cloud Datastore

記事を読む

15分でできる!!GAE/GOで高速REST APIを構築するための簡単手順 〜前編〜

iOSやAndroid等のクライアントアプリを開発する場合、サーバ側の開発も必要となるケースは多

記事を読む

Search API詳細解説 Part2「Search APIの使い方 登録・削除編」

Search API詳細解説シリーズ タイトル Part1Search API 概要説明

記事を読む

AppEngine Security Scan Tool

AppEngine Security Scan Toolが利用出来るようになりました。ついては、GA

記事を読む

新しいRPCフレームワーク、gRPCをGoで試してみる。

  みなさん、今年の2月末にGoogleが発表したgRPCをご存知でしょうか?gRP

記事を読む

Prediction API入門(中編)

Prediction API入門実行編 みなさん、こんにちは。 前編では、Google Pr

記事を読む

2015/05/27 GCE vs AWS ベンチマーク

2015/05/27 GCE vs AWS ベンチマーク 本シリーズでは定期的にGCEとEC2のベ

記事を読む

PAGE TOP ↑