巷で有名な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で取得する必要があります。
その後、パッケージリンクからSalesforce環境にオブジェクトやらクラスをインストール↓
https://login.salesforce.com/packaging/installPackage.apexp?p0=04ti0000000XkE0
そのあと、Twilio Configというカスタム設定(リスト)で適当にレコードを作成して、
AccountSidとAuthTokenにTwilioダッシュボードで表示されている値をセットする。
あとは、コードを書くだけ!
電話かけるとき
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で一括管理できるから便利かも。