ご存知の方も多いかと思いますが、SendGridは2/1に正式にTwilioの中に入りました。
せっかくなのでTwilioを触ってみようと思って、早速Javaを使って遊んでみました。びっくりするぐらい簡単に自分の携帯へ電話をかけて、音声を流すことができたのでまとめます。チュートリアル通りに進めるだけで電話をかけて&英語で話をする、というのができます。音声の内容はTwiMLというマークアップを使って簡単に定義できるので、そこだけプラスアルファしました。
※アカウントは作成済の前提です
電話番号を取得
ダッシュボードから「番号を取得する」を押します。
国を選んで使える電話番号を検索します。国は自由に選べますが、アメリカだと月額150円で、日本だと月額108円でした。国によっては高い(トリニダードトバゴは4,050円とか)です。今回は日本を選びました。
好きな番号を選んで「購入」します。
購入確認がでるので「この番号を購入する」を押します。
以上で電話番号の取得は終わりです。
Javaアプリケーションを作成
チュートリアルによるとJDKは7以上であればよいそうです。自分の環境はOracle JDK 1.8.0_152を使いました。(Java 11を入れていたのですが、別途触っていたAzure Functionsが動かず古いものに戻したため。。)
Mavenを使ってプロジェクトを作成し、pom.xmlに以下を加えました。チュートリアルにあるバージョンは7.17.0でしたが、新しい7.35.0を使いました。
<dependency>
<groupId>com.twilio.sdk</groupId>
<artifactId>twilio</artifactId>
<version>7.35.0</version>
</dependency>
まずはチュートリアルそのままのコードを試しました。
package tech.kikutaro;
import java.net.URI;
import java.net.URISyntaxException;
import com.twilio.Twilio;
import com.twilio.rest.api.v2010.account.Call;
import com.twilio.type.PhoneNumber;
public class App {
public static final String ACCOUNT_SID = "ACxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
public static final String AUTH_TOKEN = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
public static void main(String[] args) throws URISyntaxException
{
Twilio.init(ACCOUNT_SID, AUTH_TOKEN);
String from = "+81xxxxxxxxx";
String to = "+81xxxxxxxxx";
Call call = Call.creator(new PhoneNumber(to), new PhoneNumber(from),
new URI("http://demo.twilio.com/docs/voice.xml")).create();
System.out.println(call.getSid());
}
}
ACCOUNT_SIDとAUTH_TOKENはダッシュボードに表示されているので、これを使うだけです。
Javaアプリケーションを実行
実行すると、こんな感じで普通に電話がかかってきます。
電話に出ると「Thanks for trying our documentation. Enjoy!」と英語の音声が流れて、そのあとに切れます。めっちゃ簡単!!!
この音声の定義はCallクラスの定義で指定している「http://demo.twilio.com/docs/voice.xml」のXMLで決まります。このXMLはTwiMLというマークダウンです。
音声の内容を変える
どうせなら日本語の音声を流したいなー、と思ってやってみました。TwiMLの定義も画面から簡単にできるようになっていて、RuntimeのメニューからTwiMLを選んで作成するだけです。
内容を次のようなものにしました。sayで指定可能な属性より日本語を指定しました。loopは繰り返しです。
これでもう一度電話をかけると、日本語で「乃木坂フォーティーシックスっていいグループですよね」という音声が2回流れます。うーむすごい。簡単すぎる。