rocont/laravel-notification-channel-compass

Laravel Notification Channel for Compass Userbot

Maintainers

Package info

github.com/Rocont/laravel-notification-channel-compass

pkg:composer/rocont/laravel-notification-channel-compass

Statistics

Installs: 9

Dependents: 0

Suggesters: 0

Stars: 0

Open Issues: 0

v0.1.0 2026-02-26 17:44 UTC

This package is auto-updated.

Last update: 2026-03-26 18:01:43 UTC


README

Latest Version Tests License

Laravel notification channel for Compass Userbot API. Send messages to users, groups, and threads via standard Laravel notifications.

Installation

composer require rocont/laravel-notification-channel-compass
php artisan vendor:publish --provider="Rocont\CompassChannel\CompassServiceProvider" --tag=config

Add to .env:

COMPASS_BOT_TOKEN=your-bot-token
COMPASS_BASE_URL=https://userbot.getcompass.com/

Configuration

Published config config/compass.php:

return [
    'default' => env('COMPASS_DEFAULT_BOT', 'main'),

    'bots' => [
        'main' => [
            'token' => env('COMPASS_BOT_TOKEN'),
        ],
    ],

    'base_url' => rtrim(env('COMPASS_BASE_URL', 'https://userbot.getcompass.com/'), '/') . '/api/v3/',
    'timeout' => 10,
];

Multiple bots are supported — add more keys under bots and reference them via 'bot' => 'key_name' in your notification.

Usage

Route notification from a model

class User extends Model
{
    use Notifiable;

    // Return user_id (int) to send as DM
    public function routeNotificationForCompass(): ?int
    {
        return $this->compass_user_id;
    }
}

The return value determines the recipient:

  • int — treated as user_id (direct message)
  • string — treated as group_id
  • array — merged into notification data (['user_id' => ..., 'group_id' => ...])

Create a notification

class WelcomeNotification extends Notification
{
    public function via($notifiable): array
    {
        return ['compass'];
    }

    public function toCompass($notifiable): array
    {
        return [
            'type' => 'text',
            'text' => "Welcome, {$notifiable->name}!",
        ];
    }
}

Send to a group (on-demand)

Notification::route('compass', ['group_id' => $groupId])
    ->notify(new WelcomeNotification());

Send a file to a thread

public function toCompass($notifiable): array
{
    return [
        'type' => 'file',
        'file' => '/path/to/document.pdf',
        'message_id' => $this->threadId,
    ];
}

The file is automatically uploaded via file/getUrl and the resulting file_id is sent.

Use a specific bot

public function toCompass($notifiable): array
{
    return [
        'bot' => 'marketing', // key from config('compass.bots')
        'type' => 'text',
        'text' => 'Hello from marketing bot!',
    ];
}

Testing

composer test

License

MIT