PHPackages                             driade/queuebeam-laravel - PHPackages - PHPackages  [Skip to content](#main-content)[PHPackages](/)[Directory](/)[Categories](/categories)[Trending](/trending)[Leaderboard](/leaderboard)[Changelog](/changelog)[Analyze](/analyze)[Collections](/collections)[Log in](/login)[Sign up](/register)

1. [Directory](/)
2. /
3. [Mail &amp; Notifications](/categories/mail)
4. /
5. driade/queuebeam-laravel

ActiveLibrary[Mail &amp; Notifications](/categories/mail)

driade/queuebeam-laravel
========================

Laravel SDK for Queuebeam durable outbound operations.

v0.4.2(1mo ago)032MITPHPPHP ^8.2CI passing

Since Jul 12Pushed 1mo agoCompare

[ Source](https://github.com/driade/queuebeam-laravel)[ Packagist](https://packagist.org/packages/driade/queuebeam-laravel)[ Docs](https://queuebeam.cloud)[ RSS](/packages/driade-queuebeam-laravel/feed)WikiDiscussions main Synced 1w ago

READMEChangelog (2)Dependencies (6)Versions (10)Used By (0)

Queuebeam for Laravel
=====================

[](#queuebeam-for-laravel)

The official Laravel SDK for sending durable HTTP calls, webhooks, callbacks, email, Slack, Discord, Microsoft Teams and Google Chat operations through Queuebeam.

Requirements
------------

[](#requirements)

- PHP 8.2 or newer
- Laravel 10, 11, 12 or 13. Laravel 10 and 11 compatibility is provided on a best-effort basis because those framework versions no longer receive security fixes.

Installation
------------

[](#installation)

```
composer require driade/queuebeam-laravel
php artisan vendor:publish --tag=queuebeam-config
```

```
QUEUEBEAM_URL=https://api.queuebeam.cloud
QUEUEBEAM_API_KEY=qb_live_your_key
QUEUEBEAM_THROWS=true
QUEUEBEAM_TIMEOUT_MS=3000
QUEUEBEAM_ATTEMPTS=3
```

Laravel discovers `QueuebeamServiceProvider` and the `Queuebeam` facade automatically.

Usage
-----

[](#usage)

```
use Driade\Queuebeam\Facades\Queuebeam;

$result = Queuebeam::http()
    ->post('https://example.com/orders', ['order_id' => 8472])
    ->metas(['order_id' => 8472])
    ->idempotencyKey('order-8472')
    ->dispatch();

$result = Queuebeam::email()
    ->to('customer@example.com')
    ->to('second-customer@example.com')
    ->cc('audit@example.com')
    ->cc(['operations@example.com', 'legal@example.com'])
    ->bcc('archive@example.com')
    ->subject('Order sent')
    ->html('Your order is on its way.')
    ->dispatch(throws: false);

$result = Queuebeam::slack()
    ->destination('operations')
    ->message('Order blocked')
    ->dispatch();

$result = Queuebeam::discord()
    ->destination('engineering')
    ->message('Deployment failed')
    ->dispatch();

$result = Queuebeam::teams()
    ->destination('operations')
    ->message('Queue backlog exceeded 1,000 jobs')
    ->delay(new DateInterval('PT5M'))
    ->dispatch();

$result = Queuebeam::googleChat()
    ->destination('incidents')
    ->message('Payment provider is degraded')
    ->retries(5)
    ->dispatch();
```

Create named destinations in the Queuebeam dashboard so credentials stay out of application code. When needed, every message channel also accepts a direct incoming webhook URL:

```
Queuebeam::discord()
    ->webhookUrl('https://discord.com/api/webhooks/...')
    ->message('Hello from Queuebeam')
    ->dispatch();

Queuebeam::webhook('smoke.test')
    ->destination('webhook')
    ->payload(['source' => 'queuebeam-demo'])
    ->dispatch();
```

Direct webhook URLs are credentials. Keep them in secrets or environment variables, never commit them, and prefer named destinations in production.

Every builder supports scheduling, delays, retries, idempotency and metadata. `DispatchResult` exposes the acceptance state, operation ID, HTTP error information and quota headers returned by Queuebeam, including whether the tenant has unlimited quota.

Operation status and smoke tests
--------------------------------

[](#operation-status-and-smoke-tests)

Use the returned operation ID to inspect delivery without accessing the dashboard:

```
use Driade\Queuebeam\Facades\Queuebeam;
use Illuminate\Support\Str;
use RuntimeException;

$result = Queuebeam::slack()
    ->destination('smoke-slack')
    ->message('Queuebeam smoke test')
    ->metas(['suite' => 'providers', 'run_id' => (string) Str::uuid()])
    ->dispatch();

$operation = Queuebeam::waitForOperation(
    $result->operation_id,
    timeout_ms: 30_000,
    poll_interval_ms: 500,
);

if ($operation->status !== 'succeeded') {
    throw new RuntimeException("Delivery ended as {$operation->status}");
}
```

`operation()` returns the latest state and safe attempt history. It never returns payloads, provider credentials or remote response bodies. `operations()` lists project-scoped operations with status, type, date and cursor filters:

```
$page = Queuebeam::operations(status: 'dead_letter', type: 'email', limit: 50);

foreach ($page->operations as $operation) {
    // $operation->operation_id, status, response_status and attempt_history
}

$next_page = $page->next_cursor === null
    ? null
    : Queuebeam::operations(status: 'dead_letter', type: 'email', limit: 50, cursor: $page->next_cursor);
```

For email, `succeeded` means the configured provider accepted the message. Confirming final inbox delivery additionally requires provider delivery events.

Configuration
-------------

[](#configuration)

Per-call `dispatch(throws: false)` overrides the global `QUEUEBEAM_THROWS` setting. Programming errors such as invalid PHP types are never swallowed.

`QUEUEBEAM_TIMEOUT_MS` is the total timeout for each request from your Laravel application to Queuebeam, expressed in milliseconds. `QUEUEBEAM_ATTEMPTS` is the maximum number of calls, including the initial call; its default of `3` therefore means one initial call and up to two retries.

The SDK retries connection errors, timeouts, HTTP `408`, `425`, `429` and `5xx` responses. Authentication, quota and validation failures are returned immediately. Every dispatch without an explicit idempotency key receives a generated key that remains stable across its attempts, preventing a lost `202` response from creating duplicate operations.

`QueuebeamException` exposes the failed `DispatchResult` through its `$result` property, so applications using exception mode can still inspect the HTTP status, error and retryability. Responses with `Retry-After` are respected up to 30 seconds.

The published configuration can also be edited directly:

```
return [
    'base_url' => env('QUEUEBEAM_URL', 'https://api.queuebeam.cloud'),
    'api_key' => env('QUEUEBEAM_API_KEY'),
    'throws' => env('QUEUEBEAM_THROWS', true),
    'timeout_ms' => (int) env('QUEUEBEAM_TIMEOUT_MS', 3000),
    'attempts' => (int) env('QUEUEBEAM_ATTEMPTS', 3),
];
```

Runtime configuration is also supported:

```
Queuebeam::configure(timeout_ms: 5000, attempts: 5);
```

Testing
-------

[](#testing)

```
bash format.sh
composer analyse
composer test
```

License
-------

[](#license)

Queuebeam for Laravel is open-source software licensed under the MIT license.

###  Health Score

38

—

LowBetter than 83% of packages

Maintenance90

Actively maintained with recent releases

Popularity7

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity42

Maturing project, gaining track record

 Bus Factor1

Top contributor holds 100% of commits — single point of failure

How is this calculated?**Maintenance (25%)** — Last commit recency, latest release date, and issue-to-star ratio. Uses a 2-year decay window.

**Popularity (30%)** — Total and monthly downloads, GitHub stars, and forks. Logarithmic scaling prevents top-heavy scores.

**Community (15%)** — Contributors, dependents, forks, watchers, and maintainers. Measures real ecosystem engagement.

**Maturity (30%)** — Project age, version count, PHP version support, and release stability.

###  Release Activity

Cadence

Every ~0 days

Total

9

Last Release

49d ago

### Community

Maintainers

![](https://www.gravatar.com/avatar/bee87b1178721a08c5b5a4bf1734792fc8330106b01a6370e36b416696bfba18?d=identicon)[driade](/maintainers/driade)

---

Top Contributors

[![driade](https://avatars.githubusercontent.com/u/5692232?v=4)](https://github.com/driade "driade (13 commits)")

---

Tags

laravelemailslackwebhooksqueuesdiscordmicrosoft-teamsGoogle-Chatretries

###  Code Quality

TestsPHPUnit

Static AnalysisPHPStan

Code StyleLaravel Pint

Type Coverage Yes

### Embed Badge

![Health badge](/badges/driade-queuebeam-laravel/health.svg)

```
[![Health](https://phpackages.com/badges/driade-queuebeam-laravel/health.svg)](https://phpackages.com/packages/driade-queuebeam-laravel)
```

###  Alternatives

[laravel/socialite

Laravel wrapper around OAuth 1 &amp; OAuth 2 libraries.

5.7k118.2M1.0k](/packages/laravel-socialite)[craftcms/cms

Craft CMS

3.6k3.7M3.5k](/packages/craftcms-cms)[laravel/boost

Laravel Boost accelerates AI-assisted development by providing the essential context and structure that AI needs to generate high-quality, Laravel-specific code.

3.6k31.1M880](/packages/laravel-boost)[spatie/laravel-health

Monitor the health of a Laravel application

89313.5M195](/packages/spatie-laravel-health)[propaganistas/laravel-disposable-email

Disposable email validator

6093.4M9](/packages/propaganistas-laravel-disposable-email)[illuminate/http

The Illuminate Http package.

13239.1M8.7k](/packages/illuminate-http)

PHPackages © 2026

[Directory](/)[Categories](/categories)[Trending](/trending)[Changelog](/changelog)[Analyze](/analyze)
