18
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Tropoでモーニングコール

Last updated at Posted at 2014-07-28

動機

  • 朝が苦手です
  • 電話が鳴りません(※そんな友達いません)

朝突然、誰かから電話がかかってきたら起きられるのでは!

作るもの

  • slackで予約
  • 時間になったら電話がかかってくる
  • 電話応答。起きた場合は1を、まだ寝る場合は0を入力
  • 起きた・起きてないをslackにお知らせ

イメージ

Tropoでモーニングコール-イメージ

クラウド電話APIサービスTropo

  • WebAPI経由で電話をかけられるWebサービス
  • 電話を受信し、通話しているユーザーからの入力を受け付けたり、返答用音声の再生をしたり出来る
  • これらをプログラムとして書ける
  • 開発時点では無料で利用できる(※!!実質無料!!後述)

登録

https://www.tropo.com/REGISTER より登録

アプリケーション作成

  1. Tropoにログイン
  2. MY APPS メニューからCreate New Appで作成
  3. アプリケーションに対し、自動で1つ電話番号が発行される

アプリケーションのタイプ

アプリケーションのタイプは2種類あります。
Scripting API

  • TropoのUI上で通話処理のスクリプトを作成
  • PHP, Java, javascript, ruby, pythonに対応
  • 電話がかかってきたら音声を流す くらいの処理であればこのタイプでよい

TropoのUI上でスクリプトを編集する

Web (HTTP) API

  • 開発者が用意したWebAPIで通話処理を実装(JSONを返すだけ)
  • TropoのアプリケーションにそのAPIのURLを設定。APIからのレスポンスによりTropo側が処理を行う
  • PHP, Java, javascript, ruby, pythonそれぞれライブラリが用意されている(https://github.com/tropo/)
  • 発着信の情報をDBに保存するなどの処理が必要な場合はこのタイプを使う

アプリケーションの開発ステータス

DevelopmentProductionの2種類あり、ステータスがDevelopmentである限り無料で利用できるようです。
Tropoでモーニングコール-アプリケーションの開発ステータス
Developmentステータスのまま使い続ければ無料で行けそうですが・・・(未検証)
また、Productionに移行するとDevelopmentに戻すにはサポートさんへの連絡が必要とのこと。

アプリケーションの実行

2パターンあるようです。
A. アプリケーションに発行された電話番号に電話をかける
Tropoでモーニングコール-アプリケーションに発行された電話番号に電話をかける.png

電話番号 03-4578-1959 が割り当てられたアプリケーションに下記コードを設定しています。

tropo.php
<?php
say ("Hello, world! I'm satoshun00!");

試しにお手元の電話でかけてみてください。たどたどしい英語が聴こえてきます。
(!電話のかけ間違いに注意してください)
(!通話料金はお客様負担です)

B. アプリケーションに発行されたAPI KeyでTropoのAPIを実行
Tropoでモーニングコール-アプリケーションに発行されたAPI KeyでTropoのAPIを実行

Tropoから日本の携帯電話に無料で電話をかける

Tropoで電話をかける(outbound)には一手間必要でした。

However, in order to make outbound calls or send outbound SMS at all, you will also need to verify your account. Please open an account ticket to begin the process.

Tropoのサポートにoutbound権限の申請(英語)がいるとのこと。サポートのフォームを使ってこんなやりとりをしました。

私 「outboundの権限が欲しいです。( ゚ρ゚ )」

5分後(早い。多分コピペ)

_サポートさん 「

  1. アプリの使い道を教えてくれ
  2. 認証するから電話番号教えてくれ
  3. $10のデポジットが必要だから払って(開発時は無料で使えるよ!)
  4. 」_

_私 「

  1. リマインダー作るよ
  2. 電話番号書く(国際電話番号で)
  3. 払ったよ
    」_

ここで非通知で謎の電話。私、キョドって無視する。

10分後に返信(早い)

_サポートさん 「

  1. もうちょい詳しく教えてくれないかな(#^ω^)悪用とかどうやって防ぐん?
  2. そのうち連絡行くと思うから、認証番号をここに書いてね
  3. いいね
    」_

_私 「

  1. 勉強のためだから外に公開しないよ!
  2. SMSで認証コードくれませんか・・・(英語で話しかけられたら詰むので
    」_

SMSで認証コードが届く。
私 「認証コードは○○○○だよ!」

10分後に返信
サポートさん 「認証コードもあってるし、権限付与したよ!」

ここまで1時間足らず。サポートさん優秀ですね。権限はゲット出来た。

日本の携帯電話にかける

権限がもらえたので、テストで電話をかけてみることに。

call.php
<?php
call('+8190*********'); // 自分の携帯番号
say('Hello World.');

かかってこない。ヘルプにも記載がないので、またサポートとやりとり。
私の操作ログ等を見て、状況を追ってくれたらしい。返ってきた返事が以下。

Calls to mobile numbers outside the United States are restricted in the development environment, due to cost.
(どうやら日本の番号にかけてるみたいだね)アメリカ国外へのoutboundは無料で出来ないんだ。

出来ないらしい。

流石に開発は無料でやりたい

デバッグするたびに通話料がかかるなんてやりたくないので、デバッグ用にはSIPによる通話を利用しました。

  1. Antisipにて無料のSIPを取得
  2. MacOSX用電話アプリTelephone.appをインストール。上記で取得したSIPを設定

先のcall()の引数に、取得したSIPを書いたらTelephone.appを通じてちゃんと電話がかかってきました。

ここまでで出来たもの

  • PublicにWeb (HTTP) APIを用意。電話をかけるJSONを返す
  • 音声ファイルの再生
  • 自分の携帯に電話がかかってくる

出来てないもの

  • slackとのつなぎ込み
  • 予約機能
  • 通話しているユーザーからの返答を受ける処理

※随時UPDATEします。。

18
17
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
18
17

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?