Challenge Engineer Life !

エンジニア人生を楽しみたい!仕事や趣味で学んだ技術的なことを書いていくブログです。

Twilioを使ってJavaで電話をかけて音声を流す

ご存知の方も多いかと思いますが、SendGridは2/1に正式にTwilioの中に入りました。

せっかくなのでTwilioを触ってみようと思って、早速Javaを使って遊んでみました。びっくりするぐらい簡単に自分の携帯へ電話をかけて、音声を流すことができたのでまとめます。チュートリアル通りに進めるだけで電話をかけて&英語で話をする、というのができます。音声の内容はTwiMLというマークアップを使って簡単に定義できるので、そこだけプラスアルファしました。

※アカウントは作成済の前提です

電話番号を取得

ダッシュボードから「番号を取得する」を押します。
f:id:kikutaro777:20190215223021p:plain

国を選んで使える電話番号を検索します。国は自由に選べますが、アメリカだと月額150円で、日本だと月額108円でした。国によっては高い(トリニダードトバゴは4,050円とか)です。今回は日本を選びました。
f:id:kikutaro777:20190215223219p:plain

好きな番号を選んで「購入」します。
f:id:kikutaro777:20190215223757p:plain

購入確認がでるので「この番号を購入する」を押します。
f:id:kikutaro777:20190215223912p:plain

以上で電話番号の取得は終わりです。

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_SIDAUTH_TOKENはダッシュボードに表示されているので、これを使うだけです。
f:id:kikutaro777:20190215225451p:plain

Javaアプリケーションを実行

実行すると、こんな感じで普通に電話がかかってきます。
f:id:kikutaro777:20190215230020p:plain

電話に出ると「Thanks for trying our documentation. Enjoy!」と英語の音声が流れて、そのあとに切れます。めっちゃ簡単!!!

この音声の定義はCallクラスの定義で指定している「http://demo.twilio.com/docs/voice.xml」のXMLで決まります。このXMLはTwiMLというマークダウンです。
f:id:kikutaro777:20190215230147p:plain

音声の内容を変える

どうせなら日本語の音声を流したいなー、と思ってやってみました。TwiMLの定義も画面から簡単にできるようになっていて、RuntimeのメニューからTwiMLを選んで作成するだけです。
f:id:kikutaro777:20190215230646p:plain

内容を次のようなものにしました。sayで指定可能な属性より日本語を指定しました。loopは繰り返しです。
f:id:kikutaro777:20190215230738p:plain

これでもう一度電話をかけると、日本語で「乃木坂フォーティーシックスっていいグループですよね」という音声が2回流れます。うーむすごい。簡単すぎる。

にほんブログ村 IT技術ブログへ
にほんブログ村 にほんブログ村 IT技術ブログ Javaへ
にほんブログ村