プログラマブログ

by wacul

menu

2014.10.07SMS送信サービスのNexmoを利用する

概要

ユーザ登録時の本人確認や簡単な情報の通知にSMSを使うケースがあります。
今回、SMS送信サービスのNexmoを利用してみたので紹介します。

SMS送信サービス

SMS送信サービスなどでGoogle検索を行うと、様々なサービスが見つかります。
送るキャリアによって料金が異なったりしますが、おおよそ1通6円〜10円前後となっています。

今回は、Lineやカカオトークで採用されているNexmoを利用したいと思います。 値段は2014/10/03現在、どのキャリア宛でも1通、0.0631ドルとなっています。
値段

NexmoのSMS送信APIを使用する

NexmoのSMS送信APIは非常にシンプルです。 Nexmo SMS送信APIドキュメント によると、指定されたURLにパラメータをつけてGETかPOSTをするだけで良さそうです。
その際、Nexmoに登録した際に発行されるKEY、SECRET、送信元として使用する電話番号が必要になります。

Node.jsでAPIを使用して送信する場合のサンプルが以下です。

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
var request = require('request');

request.post('https://rest.nexmo.com/sms/json', {form: {
  api_key: 'xxxxxxx',     //Nexmoで発行されたKEY
  api_secret: 'xxxxxxxx', //Nexmoで発行されたSECRET
  from: 'xxxxxxxxx',      //Nexmoで購入した電話番号
  to: '81xxxxxxxxxx',     //送信先電話番号。日本の場合は81で始め、先頭の0は取る。例: 09012345678なら819012345678
  text: 'テスト送信。日本語もOK',
  type: 'unicode'         //日本語を送る際は typeを unicode にする必要があります
}}, function(err, res, body){
  if(err || res.statusCode != 200){
    console.log('error');
    return;
  }

  //jsonでレスポンスが返ってくる
  var msg = JSON.parse(body);
  for(var i = 0; i < msg['message-count']; i++){
    //メッセージのステータスを確認する。パラメータ誤りや送信先誤りの場合、エラーとして検出される
    if(msg.messages[i].status != '0'){
      console.log("error code:" + msg.messages[i].status);
      return;
    }
  }
});

日本語を送る際に、送信パラメータの type に unicode を指定しないといけないのが注意です。
au、ドコモ、ソフトバンク宛に試したところ、無事届くことが確認できました。

まとめ

今回はSMS送信サービスとして、Lineなどで利用実績のあるNexmoを利用しました。
Nexmoの提供しているSMS送信APIはシンプルで使いやすいと思います。
現在、SMSは1通数円程度かかるため、大量に送信する場合は、コストを考慮する必要があります。

参考

この記事を書いた人enokido

榎戸です。趣味ではゲームを作っています。

waculでは、プログラマを募集しています。

現在はプロダクトとして、課題発見から改善提案まで自動で行うWeb改善プラットフォーム「AIアナリスト」を開発中です。

waculの採用情報へ

ページトップへ