agrodata/teams-notification-channel

Package to use microsoft teams with laravel channel

0.5 2024-10-04 19:11 UTC

This package is auto-updated.

Last update: 2024-11-04 20:35:21 UTC


README

teams-notification-channel

Biblioteca usada para enviar mensagem via microsoft Teams de usuários logados no sistema via AD/EntraID para outros usuários do AD/EntraId

Exemplo

Será utilizado um campo dentro da tabela de usuário para armazenar os ID's do EntraID/AD dos usuários.

usuário autenticado ($user->external_id) -> envia notificação -> outro usuário ($user->external_id)

Instalação

Instale a versão mais atual do pacote com o composer:

$ composer require agrodata/teams-notification-channel

ou você pode adicionar a seguinte linha diretamente no arquivo composer.json:

{
    "require": {
        "nairanomura/notificationapi-laravel": "1.0"
    }
}

Config

Após a instalação, registre o provider diretamente no arquivo: config/app.php:

'providers' => [
	// ...
	
	Agrodata\TeamsNotificationChannel\TeamsNotificationChannelServiceProvider::class,
]

O seguinte nó será adicionado no arquivo config/services.php pelo provider (caso não seja adicionar, deverá ser inserido manualmente).

return [
   
    //...
    'teams-notification-channel' => [
        'user-field-id'    => env('TEAM_NOTIFICATION_CHANNEL_USER_FIELD_ID', 'external_id'),
        'user-field-token' => env('TEAM_NOTIFICATION_CHANNEL_USER_FIELD_TOKEN'),
        'token-cache-key'  => env('MICROSOFT_GRAPH_TOKEN_KEY', 'graph-token'),
    ]
];
  • user-field-id: Nome do campo na tabela de usuário que será armazenado o ID do usuário EntraID/AD
  • token-cache-keyIndica o nome da chave de cache que está armazenado o accessToken da Microsoft
    • ! IMPORTANTE ! É necessario que, ao realizar login para solicitar o accessToken no Microsoft EntraID/AD os seguintes escopos sejam solicitados:
      • Chat.Create
      • Chat.ReadWrite
  • user-field-token: Indica qual campo da tabela de usuário estará armazenado o accessToken do usuário microsoft. Só será utilizado caso o accessToken não esteja em cache
#.env
TEAM_NOTIFICATION_CHANNEL_USER_FIELD_ID=external_id
TEAM_NOTIFICATION_CHANNEL_USER_FIELD_TOKEN=microsoft-user-id
MICROSOFT_GRAPH_TOKEN_KEY=cache-key

Using

Use o comando Artisan para criar uma notificação:

php artisan make:notification SomeNotification

Returne [microsoft-teams] no método public function via($notifiable) do arquivo de notificação:

public function via($notifiable)
{
    return ['microsoft-teams'];
}

Adicione o método public function toMicrosoftTeams($notifiable) em sua notificação:

//...

public function toMicrosoftTeams($notifiable) 
{
    return "Mensagem automatica enviada via microsoftTeams";
}

exemplo de envio de notificação

*Atenção: Para enviar uma notificação a model de usuário deve possuir a Trait "Notifiable"

    class User extends Authenticatable
    {
        use Notifiable;
        //...
#notify one user
$user->notify((new SomeNotification(..)));

#notify multiple users
Notification::send($users, new SomeNotification(..);

Extra: Helpers

Após a instalação e configuração poderá ser usada a helper notification_api ou a classe NotificationApiService para enviar mensagem via Microsoft Teams

Example:

//microsoft_teams(string $receiverId, string $message, string|null $graphToken = null): bool;
$result = microsoft_teams($receiverId, $message, $graphToken);
#or
$result = return (new MicrosoftGraphService($graphToken))->sendChatMessage($receiverId, $message);