基盤にAWSを使っているところでSMS送信をしなきゃいけなくなったのでやってみました。
AmazonSNS自体初でめちゃめちゃ時間かかったんですが、実装自体はすごく楽でした。。
前提
Laravel5.4
やってみる
-
AWS SDKのサービスプロバイダーを仕込む
やっぱりありますね。
https://github.com/aws/aws-sdk-php-laravelインストールはREADME通りにやれば大丈夫なので割愛します。
私が一番悩んだのはアクセスキーとシークレットアクセスキーって何?!ってところでした笑
そもそもAWSもコンソールに入ってからGUIでちょこちょこと作業することはあったんですが、細かいこと全然わかってなかったもので。。 -
実装する
今回はPoC的なところだけ私の担当で、本実装は他の人だったので、コンソールコマンドで実装しました。
Console/Commands/SendSms.phpnamespace App\Console\Commands; use Illuminate\Console\Command; use AWS; class SendSms extends Command { /** * The name and signature of the console command. * * @var string */ protected $signature = 'command:send:sms'; /** * The console command description. * * @var string */ protected $description = 'Send SMS'; /** * Execute the console command. * * @return mixed */ public function handle() { $sms = AWS::createClient('Sns'); // 細かい設定はpublishする前にsetSMSAttributesで設定する // $sms->setSMSAttributes([ // 'DefaultSMSType' => 'Transactional', // ... // .. // . // ]); $sms->publish([ 'Message' => 'send sms test', 'PhoneNumber' => '+819000001234' ]); } }
一番注意しなければいけなのは
SMSClient
ではなくSNSClient
を使うってとこですね笑
最初aws-sdkのサンプルでS3Client使ってるのをみて勝手にSMSClient
使おうって思ったんですが、中身が何もなく、他の方からそのSMS、ショートメッセージサービスじゃなくてAWS Server Migration Serviceじゃん
とご指摘を頂きようやく気付きました。。。ここにJavaのサンプルがあって、ちゃんと
SNSClient
使ってるのにちゃんと見なかった私が悪かったです。。。なかなかドキュメントの場所がわからなかったんですが、ここにあります。
-
確認する
CLIからphp artisan command:send:sms
を実行したら無事PhoneNumberにある電話番号にSMSが送信されました!
さいごに
まずはしっかりドキュメント読め
ってのは重々承知してたつもりなのに思い込みで突っ走ったのがいけなかったです。。
ただ、SMSClientって名前はちょっとなぁ。。。(言い訳)