2014-01-02

ApexからTwilio APIを叩く!

巷で有名なTwilioをapexから触ってみた。

 

Twilioとは、Web技術で電話やSMS送信が出来るサービス。

REST APIがサポートされていて

例のごとくREST APIをラッピングしている各々のプログラム言語のライブラリ(Helperライブラリ)も公開されてます。

 

サポートされているプログラミング言語では珍しくapex(force.com)も利用できるので、今回カンタンに触ってみた。

 

使い方のドキュメントとgithubのURLはこちら↓

https://twilio-salesforce.readthedocs.org/en/latest/

https://github.com/twilio/twilio-salesforce

 

まずはTwilioのアカウントを取得して電話番号を購入する。

※現在、日本の電話番号だとSMSを送信できないので、SMS送信する場合は、アメリカあたりの海外の電話番号をTwilioで取得する必要があります。

BuyPhoneNumber

 

その後、パッケージリンクからSalesforce環境にオブジェクトやらクラスをインストール↓

https://login.salesforce.com/packaging/installPackage.apexp?p0=04ti0000000XkE0

 

そのあと、Twilio Configというカスタム設定(リスト)で適当にレコードを作成して、

AccountSidとAuthTokenにTwilioダッシュボードで表示されている値をセットする。

Twilio Dashboard

TwilioConfigForSalesforce

 

あとは、コードを書くだけ!

 

電話かけるとき

TwilioRestClient client = TwilioAPI.getDefaultClient();
TwilioCall call = client.getAccount().getCalls().create(new Map<String, String>{
   'To' => 'Input Your To Phone Number(E.164)',
   'From' => 'Input Your From Phone Number(E.164)',
   'Url' => 'Input Your TwiML url for Call'
});

 

SMS送信

TwilioRestClient client = TwilioAPI.getDefaultClient();
TwilioMessage message = client.getAccount().getMessages().create(new Map<String, String>{
   'To' => 'Input Your To Phone Number(E.164)',
   'From' => 'Input Your From Phone Number(E.164)',
   'Body' => 'Hello World!! by Twilio'
});

 

全ての電話番号の形式はE.164形式じゃないとだめなので

090-xxxx-yyyyの電話番号は日本の場合は

’+8190xxxxyyyy’という文字列で記述する必要がある。

 

ちなみに電話をかけて、かけた相手が電話を受け取った時に自動的に流す音声や

購入した電話番号に電話やSMS送信をしたときの挙動はTwiMLというXMLファイルで定義するらしい。

キーパッドでダイヤルさせて処理を分岐させたり、音声録音したりできるので

柔軟なコールセンターアプリみたいなのも作れるみたい。

 

ちなみにTwilioのapexライブラリのソースコードちょっと読んでたら

リスト形式のカスタム設定なのにgetOrgDefaults()使っていて、しかもちゃんと動いていてビックリした。

apexのリファレンスにはgetOrgDefaultsのメソッドは定義されていないはずなんだけどなー。

 

どちらにせよ難しいAPI仕様じゃないのし(めんどくさいsignature生成が必要ないBasic認証)

ライブラリ自体も読みやすそうです。

個人的には電話とかシビアな機能のAPIなのにBasic認証で良いの?って感じですがw

 

あと、AWSのSNSは日本ではSMSでのPush Notificationができないので

日本でSMSやろうとすると必然的にTwilioを使う必要があります(電話番号は海外)。

 

SNSと統合するなら、

SNSのHTTP Notification

→通知されたエンドポイントのプログラムからTwilio API叩きに行く

って感じにすればノード増えちゃうけど、SNSで一括管理できるから便利かも。

このエントリーをはてなブックマークに追加