SDK PHP oficial do notifica.dev — envio de notificações push, e-mail e web a partir do seu backend PHP.
- PHP 8.1 ou superior
- Composer
composer require notifica-dev/sdkInstancie o NotificaClient com o seu access token e a URL base da API:
use Notifica\NotificaClient;
$notifica = new NotificaClient(
accessToken: env('NOTIFICA_ACCESS_TOKEN'),
baseUrl: env('NOTIFICA_API_URL'),
);O
baseUrlé opcional. Se omitido, aponta parahttps://api.notifica.dev.
O SDK usa uma abordagem baseada em classes para envio de notificações. Cada evento do seu sistema vira uma classe que declara os canais e o conteúdo da mensagem.
use Notifica\Notification;
use Notifica\Target;
use Notifica\Messages\PushMessage;
use Notifica\Messages\EmailMessage;
use Notifica\Messages\WebMessage;
class PedidoEnviadoNotification extends Notification
{
public function __construct(private Pedido $pedido) {}
// Canais que serão utilizados
public function via(): array
{
return ['push', 'email'];
}
// Destinatários (opcional — pode ser sobrescrito no send())
public function targets(): array
{
return [
Target::customer("users:{$this->pedido->userId}"),
];
}
// Agendamento (opcional)
public function scheduledAt(): ?\DateTimeInterface
{
return null; // envio imediato
}
// Chave de idempotência (opcional)
// O SDK sufixará o canal automaticamente: "pedido-123-push", "pedido-123-email"
public function code(): ?string
{
return "pedido-enviado-{$this->pedido->id}";
}
public function toPush(): PushMessage
{
return PushMessage::make()
->title('Seu pedido foi enviado!')
->body("Pedido #{$this->pedido->id} está a caminho.");
}
public function toEmail(): EmailMessage
{
return EmailMessage::make()
->subject("Pedido #{$this->pedido->id} enviado!")
->body('Seu pedido está a caminho. Acompanhe a entrega pelo link abaixo.')
->to($this->pedido->emailCliente)
->from('pedidos@minhaapp.com.br', 'Minha App');
}
public function toWeb(): WebMessage
{
return WebMessage::make()
->title('Pedido enviado!')
->body("Pedido #{$this->pedido->id} está a caminho.")
->data(['pedido_id' => $this->pedido->id]);
}
}// Destinatários definidos na própria classe
$notifica->send(new PedidoEnviadoNotification($pedido));
// Destinatários sobrescritos na chamada
$notifica->send(
new PedidoEnviadoNotification($pedido),
Target::customer("users:{$user->id}"),
);O método send() retorna um array com a resposta da API para cada canal:
$resultados = $notifica->send(new PedidoEnviadoNotification($pedido));
$resultados['push']['id']; // ID do intent de push
$resultados['email']['id']; // ID do intent de e-mailUse a classe Target para definir para quem a notificação será enviada:
use Notifica\Target;
Target::customer('users:123') // cliente pelo ID externo
Target::allDevices() // todos os dispositivos do app
Target::device('installation-id') // dispositivo específico
Target::emailAddress('user@email.com') // endereço de e-mail direto
Target::code('usuarios-premium') // dispositivos com este código
Target::tag('premium', 'beta') // dispositivos com estas tags$notifica->devices->registerWeb(
installationKey: $installationKey,
customerExternalId: "users:{$user->id}",
name: $user->name,
email: $user->email,
);Idempotente — conflitos 409 são ignorados silenciosamente.
$notifica->devices->registerMobile(
platform: 'android', // 'android' ou 'ios'
pushProvider: 'expo',
pushToken: $expoPushToken,
customerExternalId: "users:{$user->id}",
customerName: $user->name,
tags: ['premium'],
);Necessário para autenticar conexões WebSocket e requisições de inbox no frontend:
$token = $notifica->customerTokens->mint("users:{$user->id}");
$token['token']; // token de sessão
$token['expiresAt']; // data de expiração (ISO 8601)$inbox = $notifica->inbox->list(
customerExternalId: "users:{$user->id}",
page: 1,
perPage: 20,
readStatus: 'unread', // 'all', 'read' ou 'unread'
);$notifica->inbox->markAsRead($notificationId, "users:{$user->id}");
$notifica->inbox->markAsUnread($notificationId, "users:{$user->id}");Todas as chamadas à API lançam Notifica\Exceptions\NotificaException em caso de erro HTTP:
use Notifica\Exceptions\NotificaException;
try {
$notifica->send(new PedidoEnviadoNotification($pedido));
} catch (NotificaException $e) {
$e->statusCode; // código HTTP (ex: 422, 503)
$e->response; // corpo da resposta como array
$e->getMessage();
}MIT