プログラマーのメモ書き

伊勢在住のプログラマーが気になることを気ままにメモったブログです

Twilio 試した(1/3):電話(音声通話)機能を使ってみました

今の作業場から引っ越すことになりました。 新しい作業場では、新たにフレッツ光を引く予定です。それはそれでいいのですが、ふとその時、電話とFAXどうしようか?と思い立ちました。

田舎なんで会議やセミナーとかの連絡がまだまだ FAX でやってきます。 なので、 FAX なしで仕事するのは現実的に無理だと思ってます。

素直にフレッツ光にひかり電話をつけて、プリンタ複合機のFAXを使えばいいのですが、なんだかなー、と思ってしまいます(安いとはいえ出費もありますしね)。 そんなこんなことをもやもやと思っていたある日、ふとしたきっかけで、ずいぶんまえに Twilio という電話サービスのAPI(であってる?)があるよと聞いたのを思い出しました。

twilio.kddi-web.com

「FAXも使えるならいいかもねー」と軽い気持ちで調べると、なんと、β扱いですが、FAXが使えるではありませんか!

俄然、試してみたくなりました。もっと調べると、電話番号一つが月額 100円(税抜)なので、FAXと電話で2つ電話番号を持っても、ひかり電話よりも安い! 仕事用の電話番号は一度公開してみたかったのですが、いままでは自宅兼用なので公開するわけにもいかなかったこともあり、電話番号もお安く持てるかも。 Twilio の電話(音声通話)も魅力がありますねー。

ということで、 Twilio を試す理由ができました 。何をやりたいのか整理して、試してみたので、いろいろとメモっときます。今回は3本立てです。

Twilio 試した(1/3):電話(音声通話)機能を使ってみました - プログラマーのメモ書き

Twilio 試した(2/3):FAX 送信を試しました - プログラマーのメモ書き

Twilio 試した(3/3):FAX 受信と通知を試しました - プログラマーのメモ書き

やりたいこと

そんなこんなで、あれこれ思案すると、とりあえず下記のようなことがやりたいことだなとなりました。

  • Twilio で FAX と電話(音声通話)用に電話番号を二つ契約する
  • 電話は常に留守電にしておいて、必要があれば用件を入れてもらう
  • 電話に着信があったら通知(メール?slack?)を飛ばす
  • 留守電聞いて、必要に応じてこちらから折り返し電話する
  • FAXは受信したら、通知を飛ばす
  • FAXの送信は多少手間かかっても送れればOK

いまでも、仕事の電話のやり取りはほぼ携帯でやってるので、大事な電話は基本的に携帯にかかってきます。 で、仕事場にかかってくるのは一時的な電話がほとんどなので、こういう運用でも問題ないかなと思います。 このあたりの事情は個人個人で違うところだと思います。

まずは、電話(音声通話)から試していきます。

Twilio の無料アカウントにサインアップ

一番最初に Twilio の無料アカウントを申し込みます。

この無料アカウントがあると、トライアル用に電話番号が一つ使えるようになり、普通の家の電話や携帯電話に電話を掛けたり、FAXを流したりできます。 まあ、トライアルアカウントなので、事前に通話先の電話番号を登録しておかないといけないとか制限はありますが、テストには十分です。

ということで、無料アカウントを申し込んで、電話番号を一つ発行します。

実は、この電話番号の発行の部分で最初ずいぶんと躓きました。 結論から言うと、無料アカウント申し込み後、コンソールにログインした直後は、何もない状態なので、ここで最初にプロジェクトを作成して、そのプロジェクト内で電話番号を取得する、という作業になります。

ですが、Twilio のチュートリアル的な資料では、そのプロジェクトを作る、という部分が抜けていました。

jp.twilio.com

ま、タイミングが悪かったんでしょうかね。 電話番号を取得して、気を取り直して試していきます。あ、電話番号の取得の説明などはあちこちにあるので省いときます。

(補足)

Twilio さんの名誉のために補足です。無料サインアップのページにある動画を見たら、プロジェクトを作るという話が出てきてました。 先にこっち見てれば気づいたのになー。

電話の着信

Twilio の電話番号は、着信があった場合にどういう動作をするのか?というのをいくつかの方法で指定することができます。 今回は、 TwiML という XML 形式で動作を定義できるものがあるので、それを使います。

TwiML の作成

コンソールから、Runtimeを選び、下のほうにある TwiML Bins を選びます。

f:id:junichim:20181109104927p:plain

表示された画面の+(プラス)のボタンを押すと、TwiMLの作成画面が表示されます。

f:id:junichim:20181109104945p:plain

まずは、FRIENDLY NAME にこの TwiML の名前を入れます。 そして、下側のTwiMLの部分に、着信があったら音声で応答するように動作を書きます。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Say language="ja-JP"> こんにちは </Say>
</Response>

これでOKです。 画面下部に『create』のボタンがあるので、これを押して TwiML の完成です。

電話番号の設定

次に、取得した電話番号にたいして着信があったときに、上記で定義した TwiML が実行されるように指定します。

Phone Numbers を選び、 Active Numbers を選択すると、購入している電話番号の一覧が表示されます。

f:id:junichim:20181109105018p:plain

電話番号をクリックすると設定画面が表示されます。

f:id:junichim:20181109105036p:plain

次のように設定します。

  • 受け付ける着信』:『Voice Calls』
  • 構成内容:『Webhooks, TwiML Bins, Functions, ・・・』
  • 通話着信時:『TwiML』、隣のドロップダウンリストより、さきほど作成した TwiML の名前を指定

簡単ですね。これで準備OKです。

電話をかけてみる

さっそく、電話をかけてみると、着信後『Twilio をご利用いただきありがとうございます。・・・』とういトライアルアカウントですよ、ということを知らせるメッセージが流れます。

そのあと、『こんにちは』とTwiMLで指定した文字が読み上げられます。 音声は合成なので、若干不自然ですがまあ十分かと思います。

着信を録音する

これで TwiMLを使って着信時に動作させる要領がわかったので、次に電話の着信があったら、録音してみたいと思います。

TwiML を下記のようにします。

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Say language="ja-JP">録音します。録音が終了したらシャープを押してください。</Say>
  <Record action="https://handler.twilio.com/twiml/xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"/>
</Response>

録音の場合、気をつけない点があります。 録音が終了すると、自動的に指定されたURLにリクエストが飛びます(上記の action属性です)。 actionが指定されていない場合のデフォルトは、同じ TwiML です。で、呼び出し後も通話は継続されます。 ということで、同じ録音のTwiMLが呼ばれるため、こちらから切らない限り、何度も録音が繰り返されることになります。

ドキュメントにもしっかり書いてありました。

TwiML™ Voice: <Record> - Twilio

ということで、今回は録音が終わったら電話を切るという TwiML を呼び出すという方法をとります。

こういう電話を切るための TwiML を作成し

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Hangup/>
</Response>

このURLを さきほどの録音用の TwiML のactionで指定しておきます。

録音させてみる

実際に電話をかけると、メッセージがながれます。適当に話してシャープを押すと録音されます。

録音した音声は、コンソールから『Programable Voices』、『通話』、『コールログ』とたどると

f:id:junichim:20181109101839p:plain

のように、ログのところに、メッセージを再生するボタンがあるので、確認できます。 ここをクリックすると、録音メッセージがちゃんと再生され、さきほど録音した自分の声が流れました。

ここまでできれば、あとはactionの先を通知処理のURLにすればよいだけです。 こちらは後述するFAX受信時の通知を流用しようと思うので、まずはそちらを試します。

ということで、FAXのお試しの記事へ続きます。