I am working on a Laravel 9 project and I've been following the documentation from the Laravel website. I managed to get the sms to work for a single phone number but the user has multiple phone numbers and I can't figure out how to send sms to all of them. There is no documentation for that on the Laravel website and can't find information on google.
Here is my notification class:
<?php
namespace App\Notifications;
use Illuminate\Bus\Queueable;
use Illuminate\Contracts\Queue\ShouldQueue;
use Illuminate\Notifications\Messages\VonageMessage;
use Illuminate\Notifications\Notification;
class SmsNotification extends Notification implements ShouldQueue
{
use Queueable;
/**
* Create a new notification instance.
*
* @return void
*/
public function __construct(public string $message)
{
//
}
/**
* Get the notification's delivery channels.
*
* @param mixed $notifiable
* @return array
*/
public function via($notifiable)
{
return ['vonage'];
}
/**
* Get the mail representation of the notification.
*
* @param mixed $notifiable
* @return \Illuminate\Notifications\Messages\MailMessage
*/
public function toVonage($notifiable)
{
return (new VonageMessage())
->content($this->message);
}
/**
* Get the array representation of the notification.
*
* @param mixed $notifiable
* @return array
*/
public function toArray($notifiable)
{
return [
//
];
}
}
Here is how I call it:
$user = User::with(['phones', 'alarmEmails'])->findOrFail($userId);
// phone sms notifications
$message = "{$device->name},\n{$device->location},\n{$text}";
$user->notify(new SmsNotification($message));
Here is the method on my User class:
/**
* Route notifications for the Vonage channel.
*/
public function routeNotificationForVonage(Notification $notification): array
{
//return $this->phones->toArray()[0]['number']; // this works
return array_map(fn($phone) => $phone['number'], $this->phones->toArray()); // this does not work
}
Here is the stacktrace when I try to return array of phone numbers from the routeNotificationForVonage method on my User class:
TypeError: Vonage\Message\Message::__construct(): Argument #1 ($idOrTo) must be of type string, array given, called in /var/www/iot-center/vendor/vonage/client-core/src/Message/Client.php on line 515 in file /var/www/iot-center/vendor/vonage/client-core/src/Message/Message.php on line 71
#0 /var/www/iot-center/vendor/vonage/client-core/src/Message/Client.php(515): Vonage\Message\Message->__construct()
#1 /var/www/iot-center/vendor/vonage/client-core/src/Message/Client.php(153): Vonage\Message\Client->createMessageFromArray()
#2 /var/www/iot-center/vendor/laravel/vonage-notification-channel/src/Channels/VonageSmsChannel.php(69): Vonage\Message\Client->send()
#3 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php(148): Illuminate\Notifications\Channels\VonageSmsChannel->send()
#4 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php(106): Illuminate\Notifications\NotificationSender->sendToNotifiable()
#5 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Support/Traits/Localizable.php(19): Illuminate\Notifications\NotificationSender->Illuminate\Notifications\{closure}()
#6 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php(109): Illuminate\Notifications\NotificationSender->withLocale()
#7 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Notifications/NotificationSender.php(79): Illuminate\Notifications\NotificationSender->sendNow()
#8 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Notifications/ChannelManager.php(39): Illuminate\Noti
BODY: fications\NotificationSender->send()
#9 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Notifications/RoutesNotifications.php(18): Illuminate\Notifications\ChannelManager->send()
#10 /var/www/iot-center/app/Helpers/Notification.php(67): App\User->notify()
#11 /var/www/iot-center/app/Actions/DeviceMessageProcessor.php(330): App\Helpers\Notification::send_notification()
#12 /var/www/iot-center/app/Actions/DeviceMessageProcessor.php(139): App\Actions\DeviceMessageProcessor->saveSensorDataPlusNotification()
#13 /var/www/iot-center/app/Actions/DeviceMessageProcessor.php(86): App\Actions\DeviceMessageProcessor->processPayload()
#14 /var/www/iot-center/app/Http/Controllers/Receive/MessageController.php(81): App\Actions\DeviceMessageProcessor->process()
#15 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/Controller.php(54): App\Http\Controllers\Receive\MessageController->index()
#16 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/ControllerDispatcher.php(43): Illuminate\Routing\Controller->callAction()
#17 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/Route.php(260): Illuminate\Routing\ControllerDispatcher->dispatch()
#18 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/Route.php(205): Illuminate\Routing\Route->runController()
#19 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/Router.php(727): Illuminate\Routing\Route->run()
#20 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Routing\Router->Illuminate\Routing\{closure}()
#21 /var/www/iot-center/app/Http/Middleware/SetLocale.php(28): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#22 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): App\Http\Middleware\SetLocale->handle()
#23 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/Middleware/SubstituteBindings.php(50): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#24 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\SubstituteBindings->handle()
#25 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(126): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#26 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(102): Illuminate\Routing\Middleware\ThrottleRequests->handleRequest()
#27 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/Middleware/ThrottleRequests.php(54): Illuminate\Routing\Middleware\ThrottleRequests->handleRequestUsingNamedLimiter()
#28 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Routing\Middleware\ThrottleRequests->handle()
#29 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#30 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/Router.php(728): Illuminate\Pipeline\Pipeline->then()
#31 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/Router.php(705): Illuminate\Routing\Router->runRouteWithinStack()
#32 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/Router.php(669): Illuminate\Routing\Router->runRoute()
#33 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Routing/Router.php(658): Illuminate\Routing\Router->dispatchToRoute()
#34 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(190): Illuminate\Routing\Router->dispatch()
#35 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(141): Illuminate\Foundation\Http\Kernel->Illuminate\Foundation\Http\{closure}()
#36 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#37 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ConvertEmptyStringsToNull.php(31): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#38 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ConvertEmptyStringsToNull->handle()
#39 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TransformsRequest.php(21): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#40 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/TrimStrings.php(40): Illuminate\Foundation\Http\Middleware\TransformsRequest->handle()
#41 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\TrimStrings->handle()
#42 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/ValidatePostSize.php(27): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#43 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\ValidatePostSize->handle()
#44 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Foundation/Http/Middleware/PreventRequestsDuringMaintenance.php(86): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#45 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Foundation\Http\Middleware\PreventRequestsDuringMaintenance->handle()
#46 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Http/Middleware/TrustProxies.php(39): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#47 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(180): Illuminate\Http\Middleware\TrustProxies->handle()
#48 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Pipeline/Pipeline.php(116): Illuminate\Pipeline\Pipeline->Illuminate\Pipeline\{closure}()
#49 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(165): Illuminate\Pipeline\Pipeline->then()
#50 /var/www/iot-center/vendor/laravel/framework/src/Illuminate/Foundation/Http/Kernel.php(134): Illuminate\Foundation\Http\Kernel->sendRequestThroughRouter()
#51 /var/www/iot-center/public/index.php(52): Illuminate\Foundation\Http\Kernel->handle()
#52 {main}