AmazonSNSのSMS送信をLaravelでやってみた


基盤にAWSを使っているところでSMS送信をしなきゃいけなくなったのでやってみました。
AmazonSNS自体初でめちゃめちゃ時間かかったんですが、実装自体はすごく楽でした。。

前提

Laravel5.4

やってみる

  1. AWS SDKのサービスプロバイダーを仕込む
    やっぱりありますね。
    https://github.com/aws/aws-sdk-php-laravel

    インストールはREADME通りにやれば大丈夫なので割愛します。

    私が一番悩んだのはアクセスキーとシークレットアクセスキーって何?!ってところでした笑
    そもそもAWSもコンソールに入ってからGUIでちょこちょこと作業することはあったんですが、細かいこと全然わかってなかったもので。。

  2. 実装する

    今回はPoC的なところだけ私の担当で、本実装は他の人だったので、コンソールコマンドで実装しました。

    Console/Commands/SendSms.php
    namespace 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 使ってるのにちゃんと見なかった私が悪かったです。。。

    なかなかドキュメントの場所がわからなかったんですが、ここにあります。

  3. 確認する
    CLIから php artisan command:send:sms を実行したら無事PhoneNumberにある電話番号にSMSが送信されました!

さいごに

まずはしっかりドキュメント読め ってのは重々承知してたつもりなのに思い込みで突っ走ったのがいけなかったです。。
ただ、SMSClientって名前はちょっとなぁ。。。(言い訳)