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 メッセージングの月別使用制限を引き上げる必要がある場合は、使用制限の引き上げをリクエストできます。
参考リンク
- Amazon SNSでメールとSMS通知を飛ばす | It works for me
https://www.blog.danishi.net/2019/06/02/post-1360/ - Managing Topics in Amazon SNS with the AWS SDK for PHP Version 3 – AWS SDK for PHP
https://docs.aws.amazon.com/sdk-for-php/v3/developer-guide/sns-examples.html - Amazon SNSのSMSをPHPで送信してみる | 株式会社サイバーブレーン | 東京都豊島区のホームページ・WEB制作会社
https://www.cyberbrain.co.jp/news/detail/122/ - 料金 – Amazon SNS | AWS
https://aws.amazon.com/jp/sns/sms-pricing/ - よくある質問 – Amazon SNS | AWS
https://aws.amazon.com/jp/sns/faqs/ - Amazon SNS で SMS の月別使用制限アラームを設定する
https://aws.amazon.com/jp/premiumsupport/knowledge-center/sns-sms-spending-limit-alarm/
コメントを書く