クラウド電話API “Twilio”で起こされてみた
どうも、開発部のクラヴマガです。
弊社サービスも最近はAWSの様なクラウド環境でサービスを構築することが多くなりました。
そこで問題になるのが、障害などによる深夜対応・・・。
データセンターに物理サーバをおいていた頃は、データセンターから障害発生時に
電話連絡をもらっていたのですが、クラウド環境では別会社に頼むか、社内で人員を確保するか・・・、
とはいえリソースも原価もかけられないし・・・と悩んでいました。
調べてみるとAPI経由で電話やSMSを送信できるサービス「twilio」というものがありました。
これなら人員確保や外部委託しなくても実現できるかも。
というわけでさっそく試しました。
最終的にはアラートメールをトリガにして、担当者に電話連絡⇒応答者がプッシュボタンで返答⇒SMSで誰が対応を開始したか一斉送信
を行うつもり。
まず今回は、「電話で連絡」と「SMSでメッセージ送信」をやってみます。
事前準備
- トライアルアカウント作成
まずはtwilioへアクセスして、トライアルアカウントを作成。
ある程度は無料で電話やSMSを送れるみたいです。 - 続いて電話番号を購入
今回はSMSもテストしたかったので、米国の電話番号を取得しました(番号によってSMSができるものとできないものがあり、日本の電話番号はできない模様) - ライブラリの設置
PHPで実装するつもりなので、
・PHP用のライブラリをダウンロード、サーバ上へアップロード
・APIライブラリよりphpのライブラリ(twilio-php-master.zip)を取得
・テスト用サーバへFTPアップロード・適当なディレクトリで展開
123mkdir testTwiliomv <FTPアップロードPATH>/twilio-php-master.zip ./testTwilio/unzip ./testTwilio/twilio-php-master.zip
電話をかけてみる
先程ライブラリを展開したディレクトリ(testTwilio)へ移動し、phpファイル(testCall.php)を作成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 |
require 'twilio-php-master/Services/Twilio.php'; $version = "2010-04-01"; $sid = '[AccountSid]'; $token = '[AuthToken]'; $phonenumber = '[Caller Number]'; // Instantiate a new Twilio Rest Client $client = new Services_Twilio($sid, $token, $version); try { // Initiate a new outbound call $call = $client->account->calls->create( $phonenumber, // The number of the phone initiating the call '[Reciveing Number]', // The number of the phone receiving call 'https://demo.twilio.com/welcome/voice/ja/' // The URL Twilio will request when the call is answered ); echo 'Started call: ' . $call->sid; } catch (Exception $e) { echo 'Error: ' . $e->getMessage(); } |
※・[AccountSid]:アカウントセッティングよりAccountSIDを確認して設定
・[AuthToken] :アカウントセッティングよりAuthTokenを確認して設定
・[CallNumber]:事前準備で購入手続きをした電話番号を設定
・[Reciveing Number]:ログインアカウント作成時登録した電話番号を設定
で、実行。
すんなり電話が掛ってきました。
電話にでると女性の声でテキスト読みあげてくれます。
設定・実装すれば固定メッセージの読み上げ、メールの内容なども読んでくれるみたいです。
SMSを送信する
同じディレクトリに今度はSMS送信用のphpファイル(testSms.php)を作成。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 |
require 'twilio-php-master/Services/Twilio.php'; $version = "2010-04-01"; $sid = '[AccountSid]'; $token = '[AuthToken]'; // Instantiate a new Twilio Rest Client $client = new Services_Twilio($sid, $token, $version); $people = array( "[Reciveing Number]" => "Test User", ); foreach ($people as $number => $name) { $sms = $client->account->messages->sendMessage( "[CallNumber]", // the number we are sending to - Any phone number $number, // the sms body "○○さんが対応を開始しました。" ); // Display a confirmation message on the screen echo "Sent message to $name"; } |
で、実行。
感想
なんかものすごく簡単です。
他にも電話同士をつないだり、コールセンターの電話受付の様に電話のダイヤルプッシュごとに処理を実行したりできる様なので、障害復旧の自動化なんかもできるかも・・・?
なんとなく感じはつかめたので、次回はプロトタイプを作成します!

関連記事
-
-
最強のSQLクライアント(GUIツール)「TeamSQL」を使ってみた!
はじめに みなさんこんにちは、プロダクト開発本部の亀梨です。 普段はXmediaOneというメディアプランニング・広告運用管理・トラッキング・マーケティング分析を行う 統合プラットフォームの開発を担当しています。 エンジニアの皆さん、SQLクライアント(GUIツール)って何使ってます? わたくしはこ …
-
-
Tableauを利用してMySQLとRedshiftのクロスDBジョインを実現する
はじめに RedshiftやTreasureDataなどのデータマート用のDBにはID単位の解析結果が格納され、ローカルのMySQLにはIDに紐づいた名称マスタが管理されている構成の場合、データマートのクロス集計結果に対してIDに紐づいた名称を付与したいことがあります。 データマート用に用意したDB …
-
-
Charlesを使ってスマホアプリ(iOS)のUAを調べてみた
はじめに ここ最近のスマホアプリには、Webブラウザの機能を実装したものが少なくありません。 (“スマホアプリ内で立ち上がるブラウザ「アプリ内ブラウザ」”の機能は「WebView」というコンポーネントを用いて実装されています。) 昨今のWebサイト、サービス運営に於いて、「通 …
-
-
初心者がRailsで開発 – deviseでユーザー認証設定 –
こんにちは、2年目のYukaです。 開発部所属でありながら実は、、 実際に自分で手を動かして開発する機会がなかなかありませんでした。。 しかしついに、、、 開発初心者がRailsでWebアプリの開発に挑戦します!! 今回のゴールは社内でも使用しているGoogleアカウントで簡単にログインができるよう …
-
-
modern.IEを使ってMac上でWindows10を動かす
Microsoftが提供している modern.IE というプロジェクトがある。そこで提供されている仮想環境を使って、MacにWindows10をインストールしてみる。ちなみに、このプロジェクトの本来の目的はInternet Explorerの表示確認やデバッグの支援。 VirtualBoxの準備 …
-
-
いまさらですが… GNU screen チートシート
最近はローカル環境で開発するようになってきたので、screen コマンドを使う機会も少なくなって来たような気がします。で、使ってないと忘れてしまうので、チートシートを作ってみました。 参照サイト GNU screen [quick_reference] 起動 コマンド 動作 screen -S &l …
-
-
Burpの使い方!
こんにちは、第二ソリューション開発部の谷口です。 受託開発の部署で開発を担当してます。 APIを扱う機会が多く、今回は通信内容を確認するためのローカルプロキシツール「Burp」について書かせて頂きます。 Burpとは Webアプリケーション開発時の検証において、Webサーバとブラウザ間の通信内容を確 …
-
-
自社サービスのDocker化(後編)
こんにちは。 インフラ開発部の上田です。 前回、前編としてDockerについて書き、早半年も経ちました。 前編はこちらです 今回は後編として、以下について書いてみたいと思います。 ■複数プロセス起動 前編で書いた通り、通常のOS起動時とは異なり、コンテナ上で個別にプロセスを起動する必要があります。 …
-
-
ゼロからAngularでSPAを作ってみた(1) はじめてのアプリ編
はじめに Single Page Application (SPA)って知っていますか? Webサイトでコンテンツのリンクをクリックした時に妙に表示が早いな〜というとき、実はページを移動するのではなくてページの一部のみを書き換えていたりします。 こういったサイトの作り方を Single Page A …
-
-
AWSにRailsアプリをデプロイする(準備編)
今回は、せっかくRailsで開発したアプリをAWS上に公開してみたいので その構築方法をまとめていきたいと思います。 (前回の記事:初心者がRailsで開発 – deviseでユーザー認証設定 ) AWSの設定はすでに社内で使用できるようになっていたので割愛します。 ★やりたいこと Gitlabでコ …