Amazon SNSでSMSを送信する

Amazon SNSでSMSを送信する

Amazon SNSをつかって、携帯電話にショートメッセージ(SMS)を送信してみた。

Amazon Simple Notification Service(Amazon SNS)とは

アプリケーションからの通知を実装できるサービス。
使える通知プロトコルは、以下がある。
HTTP、HTTPS、Eメール、JSON形式のメール、Amazon SQS、AWS Lambda、
プラットフォームアプリケーションのエンドポイント、SMS(Short Message Service)

管理コンソールから手動でSMS配信

前提事項

東京リージョンで実行
USリージョンだと、サブスクリプションでSMSプロトコルが選択できなかった。

トピックの作成

名前:KCP-SMS
それ以外はデフォルトのまま

サブスクリプションの作成

トピックARN:自動入力
プロトコル:SMS
エンドポイント:受信できる携帯電話番号

テキストメッセージの発行

テキストメッセージング(SMS) ブロックにあるメニュー

メッセージのタイプ:プロモーション
電話番号:宛先電話番号
メッセージ:送信メッセージ

「メッセージの発行」ボタンで送信確認できた。

メッセージタイプについて

メッセージタイプは以下の種類がある。
本格運用では、「トランザクション」タイプでの配信がのぞましい。

  • プロモーション
    マーケティングメッセージなどの重要度が低いメッセージ。
    Amazon SNS は、コストを最も低く抑えるようにメッセージの配信を最適化します。

  • トランザクション
    顧客のトランザクションをサポートする重要なメッセージ (たとえば、多要素認証のためのワンタイムパスコードなど)。Amazon SNS によってメッセージの配信が最適化され、最高の信頼性が実現されます。

phpプログラムからSMS配信

  • 利用ライブラリ
    • aws/aws-sdk-php 3.151
<?php

require 'vendor/autoload.php';
use Aws\Sns\SnsClient;
use Aws\Exception\AwsException;

$SnSclient = new SnsClient([
    'profile' => 'default',
    'region' => 'ap-northeast-1', // 東京リージョン
    'version' => '2010-03-31'
]);

$message = '確認コード:' . '123456'; // メッセージ本文
$phone = '+818012345678'; // 携帯電話番号

try {
    $result = $SnSclient->publish([
        'Message' => $message,
        'PhoneNumber' => $phone,
    ]);
    var_dump($result);
} catch (AwsException $e) {
    // output error message if fails
    error_log($e->getMessage());
} 

上記ファイルを実行し、SMS配信の確認がとれた。

var_dump($result) 出力結果

object(Aws\Result)#115 (2) {
  ["data":"Aws\Result":private]=>
  array(2) {
    ["MessageId"]=>
    string(36) "953a77ed-2b60-5367-a590-202c5ab1bfda"
    ["@metadata"]=>
    array(4) {
      ["statusCode"]=>
      int(200)
      ["effectiveUri"]=>
      string(40) "https://sns.ap-northeast-1.amazonaws.com"
      ["headers"]=>
      array(4) {
        ["x-amzn-requestid"]=>
        string(36) "ec8562b5-8d5e-5289-bbab-3574fc8f2e34"
        ["content-type"]=>
        string(8) "text/xml"
        ["content-length"]=>
        string(3) "294"
        ["date"]=>
        string(29) "Thu, 27 Aug 2020 08:32:17 GMT"
      }
      ["transferStats"]=>
      array(1) {
        ["http"]=>
        array(1) {
          [0]=>
          array(0) {
          }
        }
      }
    }
  }
  ["monitoringEvents":"Aws\Result":private]=>
  array(0) {
  }
}

料金

初期費用無料、従量制
日本の携帯電話にSMS送信する場合は、1通あたり以下の料金が発生する

ネットワーク/ HNI トランザクションSMS プロモーションSMS
すべてのネットワーク $ 0.07451 $ 0.07451
  • 無効な電話番号に配信しようとしても、課金はされる

無効な電話番号へのメッセージ送信が試行されたと宛先キャリアから報告された場合、配信が失敗していても課金されます。電話番号が無効になる理由はいくつかあります。電話番号が存在しない、受信者の口座に十分な残金がない、宛先の番号が固定電話の番号である、などです。

[注意] 初期設定では、メッセージ送信数は、月12通ほどしか送信できない

テキストメッセージ (SMS メッセージ) 月別使用制限のデフォルト値である 1.00 USD に達すると、Amazon SNS は SMS メッセージの送信を停止します。使用量が月別制限に達する前に通知する Amazon CloudWatch アラームを作成します。

注意: ビジネスの事例で SMS メッセージングの月別使用制限を引き上げる必要がある場合は、使用制限の引き上げをリクエストできます。

参考リンク

Web技術カテゴリの最新記事