PHPackages                             yousefkadah/freepbx-laravel-integrator - 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. [API Development](/categories/api)
4. /
5. yousefkadah/freepbx-laravel-integrator

ActiveLibrary[API Development](/categories/api)

yousefkadah/freepbx-laravel-integrator
======================================

A comprehensive Laravel package for integrating FreePBX telephony features into SaaS CRM applications with full multi-tenant support

21PHP

Since Nov 30Pushed 5mo agoCompare

[ Source](https://github.com/yousefkadah/freepbx-package)[ Packagist](https://packagist.org/packages/yousefkadah/freepbx-laravel-integrator)[ RSS](/packages/yousefkadah-freepbx-laravel-integrator/feed)WikiDiscussions main Synced 1mo ago

READMEChangelogDependenciesVersions (1)Used By (0)

FreePBX Laravel Integrator
==========================

[](#freepbx-laravel-integrator)

[![Latest Version](https://camo.githubusercontent.com/0538b2d6af13df49c86e919ecb4a9579fa7471fa7dbe622ca7834620f96ce4b1/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f796f757365666b616461682f667265657062782d6c61726176656c2d696e7465677261746f722e737667)](https://packagist.org/packages/yousefkadah/freepbx-laravel-integrator)[![License](https://camo.githubusercontent.com/1c1e5716ffd995476336ac75dd768c9ed388453c5fe121700b34b528be799172/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f6c2f796f757365666b616461682f667265657062782d6c61726176656c2d696e7465677261746f722e737667)](https://packagist.org/packages/yousefkadah/freepbx-laravel-integrator)

A comprehensive Laravel package for integrating FreePBX telephony features into SaaS CRM applications with full multi-tenant support.

Features
--------

[](#features)

✅ **FreePBX API Client** - Manage extensions, queues, and agents
✅ **Click-to-Call** - Initiate calls via AMI (Asterisk Manager Interface)
✅ **Incoming Call Popups** - Real-time notifications with contact lookup
✅ **Real-Time Dashboard** - Monitor agents and queues with live updates
✅ **Webhook Dispatcher** - Send events to external systems with retry logic
✅ **CDR Database Sync** - Automatic call detail record synchronization
✅ **Multi-Tenant Support** - Full tenant isolation for SaaS applications

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

[](#requirements)

- PHP 8.1 or higher
- Laravel 10.x, 11.x, or 12.x
- FreePBX 15+ with API enabled
- AMI access to Asterisk
- Laravel Broadcasting configured (Pusher, Redis, etc.)

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

[](#installation)

Install the package via Composer:

```
composer require yousefkadah/freepbx-laravel-integrator
```

Publish the configuration file:

```
php artisan vendor:publish --tag=freepbx-config
```

Publish and run migrations:

```
php artisan vendor:publish --tag=freepbx-migrations
php artisan migrate
```

Publish assets (optional):

```
php artisan vendor:publish --tag=freepbx-assets
php artisan vendor:publish --tag=freepbx-views
```

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

[](#configuration)

Configure your FreePBX connection in `.env`:

```
# FreePBX API
FREEPBX_HOST=https://your-freepbx.com
FREEPBX_USERNAME=admin
FREEPBX_PASSWORD=your-password

# AMI Configuration
FREEPBX_AMI_HOST=your-freepbx.com
FREEPBX_AMI_PORT=5038
FREEPBX_AMI_USERNAME=admin
FREEPBX_AMI_SECRET=your-ami-secret

# Multi-Tenant (optional)
FREEPBX_MULTI_TENANT=true
FREEPBX_TENANT_IDENTIFIER=header
FREEPBX_TENANT_HEADER=X-Tenant-ID

# CDR Sync
FREEPBX_CDR_ENABLED=true
FREEPBX_CDR_DATABASE=asteriskcdrdb
FREEPBX_CDR_USERNAME=cdr_user
FREEPBX_CDR_PASSWORD=cdr_password

# Webhooks
FREEPBX_WEBHOOKS_ENABLED=true
FREEPBX_WEBHOOK_SECRET=your-webhook-secret
```

Quick Start
-----------

[](#quick-start)

### 1. Managing Extensions

[](#1-managing-extensions)

```
use yousefkadah\FreePbx\Facades\FreePbx;

// List all extensions
$extensions = FreePbx::extensions()->list();

// Get a specific extension
$extension = FreePbx::extensions()->get('1001');

// Create a new extension
$newExtension = FreePbx::extensions()->create([
    'extension' => '1005',
    'name' => 'John Doe',
    'secret' => 'password123',
]);

// Update an extension
FreePbx::extensions()->update('1005', [
    'name' => 'Jane Doe',
]);

// Delete an extension
FreePbx::extensions()->delete('1005');
```

### 2. Click-to-Call

[](#2-click-to-call)

```
use yousefkadah\FreePbx\Ami\Actions\OriginateAction;
use yousefkadah\FreePbx\Ami\AmiManager;

$amiManager = app(AmiManager::class);
$connection = $amiManager->getConnection();
$originate = new OriginateAction($connection);

// Initiate a call
$originate->call(
    fromExtension: '1001',
    toNumber: '+1234567890'
);
```

Or via API endpoint:

```
axios.post('/api/freepbx/call/click-to-call', {
    from_extension: '1001',
    to_number: '+1234567890'
});
```

### 3. Incoming Call Popups

[](#3-incoming-call-popups)

Include the JavaScript in your layout:

```

    const callPopup = new CallPopup({
        extension: '{{ auth()->user()->extension }}',
        tenantId: '{{ auth()->user()->tenant_id }}',
        soundEnabled: true,
        autoDismiss: 0, // 0 = manual dismiss
        onIncomingCall: (event) => {
            console.log('Incoming call from:', event.caller_id);
        }
    });

```

### 4. Real-Time Dashboard

[](#4-real-time-dashboard)

Access the dashboard at `/freepbx/dashboard` or fetch data via API:

```
// Get all dashboard metrics
axios.get('/api/freepbx/dashboard')
    .then(response => {
        console.log(response.data);
    });

// Get queue metrics only
axios.get('/api/freepbx/dashboard/queues');

// Get agent metrics only
axios.get('/api/freepbx/dashboard/agents');
```

### 5. CDR Synchronization

[](#5-cdr-synchronization)

Run manual sync:

```
php artisan freepbx:sync-cdr
```

Sync for specific tenant:

```
php artisan freepbx:sync-cdr --tenant=tenant-123
```

Sync since specific date:

```
php artisan freepbx:sync-cdr --since="2024-01-01 00:00:00"
```

Schedule automatic sync in `app/Console/Kernel.php`:

```
protected function schedule(Schedule $schedule)
{
    $schedule->command('freepbx:sync-cdr')->everyFiveMinutes();
}
```

### 6. Webhooks

[](#6-webhooks)

Dispatch webhook events:

```
use yousefkadah\FreePbx\Webhooks\WebhookDispatcher;
use yousefkadah\FreePbx\Webhooks\WebhookEvent;

$dispatcher = app(WebhookDispatcher::class);

$event = new class('call.completed', [
    'call_id' => '12345',
    'duration' => 120,
    'from' => '1001',
    'to' => '+1234567890',
]) extends WebhookEvent {};

$dispatcher->dispatch('https://your-app.com/webhook', $event);
```

Multi-Tenant Usage
------------------

[](#multi-tenant-usage)

### Setting Tenant Context

[](#setting-tenant-context)

```
use yousefkadah\FreePbx\Tenancy\TenantManager;

$tenantManager = app(TenantManager::class);
$tenantManager->setTenant('tenant-123');

// Now all FreePBX operations will use tenant-123's configuration
```

### Storing Tenant Configuration

[](#storing-tenant-configuration)

```
$tenantManager->setConfig('tenant-123', [
    'api' => [
        'host' => 'https://tenant123-freepbx.com',
        'username' => 'admin',
        'password' => 'password',
    ],
    'ami' => [
        'host' => 'tenant123-freepbx.com',
        'username' => 'admin',
        'secret' => 'secret',
    ],
]);
```

AMI Event Listener
------------------

[](#ami-event-listener)

Start the AMI listener to receive real-time events:

```
php artisan freepbx:ami-listen
```

For specific tenant:

```
php artisan freepbx:ami-listen --tenant=tenant-123
```

Run as a daemon with Supervisor:

```
[program:freepbx-ami-listener]
command=php /path/to/artisan freepbx:ami-listen
autostart=true
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/log/freepbx-ami.log
```

Events
------

[](#events)

The package dispatches several Laravel events:

- `yousefkadah\FreePbx\Events\IncomingCallEvent` - When an incoming call is detected
- `yousefkadah\FreePbx\Events\Ami\NewchannelEvent` - When a new channel is created
- `yousefkadah\FreePbx\Events\Ami\QueueMemberStatusEvent` - When queue member status changes
- `yousefkadah\FreePbx\Events\Ami\GenericAmiEvent` - For all other AMI events

Listen to events in your `EventServiceProvider`:

```
protected $listen = [
    \yousefkadah\FreePbx\Events\IncomingCallEvent::class => [
        \App\Listeners\LogIncomingCall::class,
    ],
];
```

Testing
-------

[](#testing)

```
composer test
```

Security
--------

[](#security)

If you discover any security-related issues, please email  instead of using the issue tracker.

Credits
-------

[](#credits)

- [Yousef Kadah](https://github.com/yousefkadah)

License
-------

[](#license)

The MIT License (MIT). Please see [License File](LICENSE.md) for more information.

###  Health Score

19

—

LowBetter than 10% of packages

Maintenance49

Moderate activity, may be stable

Popularity4

Limited adoption so far

Community8

Small or concentrated contributor base

Maturity13

Early-stage or recently created project

 Bus Factor1

Top contributor holds 80% 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.

### Community

Maintainers

![](https://www.gravatar.com/avatar/2104aeba724305b26d85387f776693e3c4c57205fe5aa320b59da59e211bc030?d=identicon)[yousefkadah](/maintainers/yousefkadah)

---

Top Contributors

[![FullnessYousef](https://avatars.githubusercontent.com/u/238999611?v=4)](https://github.com/FullnessYousef "FullnessYousef (4 commits)")[![yousefkadah](https://avatars.githubusercontent.com/u/5706681?v=4)](https://github.com/yousefkadah "yousefkadah (1 commits)")

### Embed Badge

![Health badge](/badges/yousefkadah-freepbx-laravel-integrator/health.svg)

```
[![Health](https://phpackages.com/badges/yousefkadah-freepbx-laravel-integrator/health.svg)](https://phpackages.com/packages/yousefkadah-freepbx-laravel-integrator)
```

###  Alternatives

[stripe/stripe-php

Stripe PHP Library

4.0k143.3M480](/packages/stripe-stripe-php)[twilio/sdk

A PHP wrapper for Twilio's API

1.6k92.9M272](/packages/twilio-sdk)[knplabs/github-api

GitHub API v3 client

2.2k15.8M187](/packages/knplabs-github-api)[facebook/php-business-sdk

PHP SDK for Facebook Business

90121.9M34](/packages/facebook-php-business-sdk)[meilisearch/meilisearch-php

PHP wrapper for the Meilisearch API

73813.7M114](/packages/meilisearch-meilisearch-php)[google/gax

Google API Core for PHP

263103.1M454](/packages/google-gax)

PHPackages © 2026

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