Vonage(旧Nexmo) が動作しない:deprecated error 対処法

SMS送信のAPIでいつも利用しているVonage(旧Nexmo)が急にエラーを吐き出したので、その対処法

何が起きたか

いつも利用しているVonageのAPIを使ってSMS送信のシステムを構築していたわけです。

まずは必要なパッケージのインストールします。

php composer require laravel/vonage-notification-channel

SMSメッセージの送信処理部分の実装はこちら。

use Nexmo\Client;
use Nexmo\Client\Credentials\Basic;

class Sms
{
    public function send($tel,$body)
    {
        //SMS送信前処理
        $basic = new Basic(config('app.sms_basic_key'), config('app.sms_basic_secret'));
        $client = new Client($basic);
        //SMS送信処理
        $message = $client->message()->send(
            [
                'to' => '81' . mb_substr($tel, 1, 10),
                'from' => 'syun03',
                'type' => 'unicode',
                'text' => $body
            ]);
    }
}

いつもならこのコードで問題なくSMS送信されるのですが、なぜかエラー発生

エラー:Passing an array to Vonage\Messages\Client::send() is deprecated, please pass a MessageInterface object instead

こちらエラーメッセージが表示されていました。

Vonage\Messages\Client::send() に配列を渡すという機能は廃止されたから、MessageInterface を代わりに使ってね!

という事のようです。

エラーメッセージに従い、コードを変更します。

use Nexmo\Client;
use Nexmo\Client\Credentials\Basic;
use Nexmo\Message\Message;

class Sms
{
    public function send($tel,$body)
    {
        //SMS送信前処理
        $basic = new Basic(config('app.sms_basic_key'), config('app.sms_basic_secret'));
        $client = new Client($basic);
        //SMS送信処理
          $message = $client->message()->send(
              new Message('81'.mb_substr($tel,1,10),'syun03',
            [
                  'type'  => 'unicode',
                  'text' => $body
              ]));
    }
}

Sendメソッドに渡す変数をNexmo\Messageオブジェクト型にしています。

これで処理を再実行したところ、問題なくSMS送信されました!

ご参考まで。

コメントを残す