PHPackages                             bitdreamit/laravel-mikopbx - 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. bitdreamit/laravel-mikopbx

ActiveLibrary[API Development](/categories/api)

bitdreamit/laravel-mikopbx
==========================

The most complete, professional &amp; premium open-source Laravel package for MikoPBX &amp; Asterisk — REST API, AMI, ARI, Auto Dialer, Campaign Manager, IVR Builder, Conference, Recording, Agent Panel, Real-time Events, Analytics &amp; more.

v1.0.0(yesterday)00MITPHPPHP ^8.2

Since Jun 19Pushed yesterdayCompare

[ Source](https://github.com/bitdreamit/laravel-mikopbx)[ Packagist](https://packagist.org/packages/bitdreamit/laravel-mikopbx)[ Docs](https://github.com/bitdreamit/laravel-mikopbx)[ RSS](/packages/bitdreamit-laravel-mikopbx/feed)WikiDiscussions main Synced today

READMEChangelog (1)Dependencies (7)Versions (2)Used By (0)

bitdreamit/laravel-mikopbx
==========================

[](#bitdreamitlaravel-mikopbx)

> The most complete, professional and premium open-source Laravel package for MikoPBX &amp; Asterisk. Built for Laravel 12 · PHP 8.2+ · Zero external dependencies.

[![Latest Version](https://camo.githubusercontent.com/b091cc0831b536f8f28a90196a0f1cb45be5f3044f01c276b776bac8f62b0dfc/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f626974647265616d69742f6c61726176656c2d6d696b6f7062782e737667)](https://packagist.org/packages/bitdreamit/laravel-mikopbx)[![Laravel 12](https://camo.githubusercontent.com/99523389690eaafdb995a8fdfcf38089c62b3f160c30483bb7ccc6ca246312ef/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c61726176656c2d31322e782d6f72616e67652e737667)](https://laravel.com)[![PHP 8.2+](https://camo.githubusercontent.com/5fe05c705bf034839bda7651781e4d0a9d42f4a840478ca5e343873a0361bb89/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f5048502d382e322b2d626c75652e737667)](https://php.net)[![License MIT](https://camo.githubusercontent.com/784362b26e4b3546254f1893e778ba64616e362bd6ac791991d2c9e880a3a64e/68747470733a2f2f696d672e736869656c64732e696f2f62616467652f4c6963656e73652d4d49542d677265656e2e737667)](LICENSE)

---

Features at a Glance
--------------------

[](#features-at-a-glance)

CategoryFeatures**Call Control**Originate, Transfer (blind + attended), Hangup, Hold, Mute, Park**Queue Management**Add/remove agents, pause/unpause, queue status, summary**Auto Dialer**Voice broadcast, IVR survey, predictive, campaign scheduling**Conference**Create bridge, dial-in, mute/kick participant, record**IVR Builder**Fluent API, multi-level, preset templates**Recording**List, download, live start/stop/pause, stats**Analytics**Dashboard KPIs, SLA compliance, peak hours, agent performance, CDR export**Blacklist**Block/unblock numbers, expiry, auto-reject**Callbacks**Auto-schedule missed call callbacks, retry queue**Notifications**Email, Slack, database for missed calls, voicemail, campaigns**SMS Alerts**Twilio, Vonage, SSL Wireless BD, custom gateway**Real-time Events**AMI listener, Laravel broadcasting, Laravel Echo ready**ARI**Channels, bridges, recordings, sounds, endpoints, playbacks**AMI**Full Asterisk AMI — all actions, queue, voicemail, parking, confbridge, AstDB**REST API**40+ endpoints, form request validation, JSON resources**Testing**MikoPBXFake, simulate events, assert helpers**Health Check**REST + AMI + extensions + active calls check**Traits**HasCallLogs, FormatsCallDuration, ValidatesPhoneNumber**DTOs**CallDTO, OriginateDTO, CampaignDTO, AgentDTO**Contracts**All services behind interfaces for easy mocking---

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

[](#installation)

```
composer require bitdreamit/laravel-mikopbx
```

```
php artisan mikopbx:install
```

---

Environment Variables
---------------------

[](#environment-variables)

```
# REST API
MIKOPBX_URL=https://YOUR-MIKOPBX-VPS-IP
MIKOPBX_API_KEY=your-64-char-api-key
MIKOPBX_VERIFY_SSL=false

# AMI (Asterisk Manager Interface)
MIKOPBX_AMI_HOST=YOUR-MIKOPBX-VPS-IP
MIKOPBX_AMI_PORT=5038
MIKOPBX_AMI_USER=laravelapp
MIKOPBX_AMI_SECRET=StrongSecret123

# ARI (Asterisk REST Interface) — optional
MIKOPBX_ARI_URL=http://YOUR-MIKOPBX-VPS-IP:8088
MIKOPBX_ARI_USER=ari_admin
MIKOPBX_ARI_SECRET=ari_secret

# Webhook
MIKOPBX_WEBHOOK_SECRET=your-hmac-secret

# SMS
MIKOPBX_SMS_DRIVER=custom   # twilio|vonage|ssl_bd|custom
```

---

Enable AMI in MikoPBX
---------------------

[](#enable-ami-in-mikopbx)

```
Admin Panel → System → Asterisk Managers → Add
Username    : laravelapp
Secret      : StrongSecret123
Allowed IP  : YOUR-LARAVEL-VPS-IP
Permissions : all

```

---

Usage
-----

[](#usage)

### Facade Import

[](#facade-import)

```
use BitDreamIT\MikoPBX\Facades\MikoPBX;
```

---

### Call Control

[](#call-control)

```
// Click-to-call: agent 101 calls customer
MikoPBX::call()->originate('101', '01711XXXXXX');

// Blind transfer
MikoPBX::ami()->blindTransfer('PJSIP/101-00000001', '102');

// Attended transfer (merge two calls)
MikoPBX::ami()->attendedTransfer('PJSIP/101-00000001', 'PJSIP/102-00000002');

// Mute / unmute
MikoPBX::ami()->mute('PJSIP/101-00000001', 'in');
MikoPBX::ami()->unmute('PJSIP/101-00000001', 'in');

// Hold / unhold via ARI
MikoPBX::ari()->holdChannel($channelId);
MikoPBX::ari()->unholdChannel($channelId);

// Park a call
MikoPBX::ami()->parkCall('PJSIP/101-00000001', 'PJSIP/101-00000001');
MikoPBX::ami()->getParkedCalls();

// Hangup
MikoPBX::ami()->hangup('PJSIP/101-00000001');

// Active calls
MikoPBX::call()->getActiveCalls();

// Send DTMF
MikoPBX::ami()->sendDTMF('PJSIP/101-00000001', '1');
```

---

### Queue Management

[](#queue-management)

```
MikoPBX::ami()->queueAdd('support', 'PJSIP/101', 'Rahim');
MikoPBX::ami()->queueRemove('support', 'PJSIP/101');
MikoPBX::ami()->queuePause('support', 'PJSIP/101', 'Lunch break');
MikoPBX::ami()->queueUnpause('support', 'PJSIP/101');
MikoPBX::ami()->queueStatus('support');
MikoPBX::ami()->queueSummary();
```

---

### Auto Dialer Campaigns

[](#auto-dialer-campaigns)

```
// Simple voice broadcast
$campaign = MikoPBX::campaign()->broadcast(
    name: 'June Promo',
    numbers: ['01711XXXXXX', '01811XXXXXX'],
    audioFile: storage_path('app/promo.wav'),
    maxChannels: 5
);
MikoPBX::campaign()->start($campaign);
MikoPBX::campaign()->status($campaign);
MikoPBX::campaign()->stop($campaign);

// IVR Campaign (Press 1 = agent, Press 2 = unsubscribe)
$campaign = MikoPBX::campaign()->withIVR(
    name: 'Survey Campaign',
    numbers: $numbers,
    audioFile: storage_path('app/survey.wav'),
    keypressActions: [
        '1' => ['action' => 'transfer', 'value' => '101'],
        '2' => ['action' => 'hangup',   'value' => ''],
    ]
);
```

---

### IVR Builder

[](#ivr-builder)

```
$ivr = MikoPBX::ivr('Main Menu')
    ->greeting('welcome.wav')
    ->timeout(10)
    ->pressToTransfer(1, '101')
    ->pressToTransfer(2, '102')
    ->pressToQueue(3, '200')
    ->pressToVoicemail(9)
    ->pressToHangup(0)
    ->onTimeout('repeat')
    ->build();

// Preset templates
$ivr = IVRBuilder::salesSupportTemplate('101', '102', '104');
$ivr = IVRBuilder::surveyTemplate('103');
```

---

### Conference Calls

[](#conference-calls)

```
$bridge = MikoPBX::conference()->create('Team Meeting');
MikoPBX::conference()->addParticipant($bridge['id'], $channelId);
MikoPBX::conference()->dialIn($bridge['id'], 'PJSIP/01711XXXXXX');
MikoPBX::conference()->muteParticipant($channelId);
MikoPBX::conference()->startRecording($bridge['id']);
MikoPBX::conference()->end($bridge['id']);
```

---

### Recording

[](#recording)

```
MikoPBX::recording()->getAll('2026-06-01', '2026-06-30');
MikoPBX::recording()->getToday('101');
MikoPBX::recording()->getStats('2026-06-01', '2026-06-30');
MikoPBX::recording()->startLiveRecording($channelId, 'call-name');
MikoPBX::recording()->stopLiveRecording('call-name');
```

---

### Analytics

[](#analytics)

```
MikoPBX::analytics()->dashboard('2026-06-01', '2026-06-30');
MikoPBX::analytics()->peakHours('2026-06-01', '2026-06-30');
MikoPBX::analytics()->dailyTrend('2026-06-01', '2026-06-30');
MikoPBX::analytics()->agentPerformance('2026-06-01', '2026-06-30');
MikoPBX::analytics()->slaCompliance('2026-06-01', '2026-06-30', 20); // 20s SLA
MikoPBX::analytics()->abandonedCalls('2026-06-01', '2026-06-30');
MikoPBX::analytics()->topCallers('2026-06-01', '2026-06-30', 10);
MikoPBX::analytics()->weeklyComparison();
$csv = MikoPBX::analytics()->exportCsv('2026-06-01', '2026-06-30');
```

---

### Blacklist

[](#blacklist)

```
MikoPBX::blacklist()->block('01711XXXXXX', 'Spam caller');
MikoPBX::blacklist()->block('01811XXXXXX', 'Fraud', '2026-12-31'); // expires
MikoPBX::blacklist()->isBlocked('01711XXXXXX'); // true
MikoPBX::blacklist()->unblock('01711XXXXXX');
MikoPBX::blacklist()->getAll();
MikoPBX::blacklist()->cleanExpired();
```

---

### Callbacks

[](#callbacks)

```
// Schedule auto-callback for missed caller
MikoPBX::callback()->schedule('01711XXXXXX', '101', 5); // 5 min delay

// Get pending
MikoPBX::callback()->getPending();

// Cancel
MikoPBX::callback()->cancel($id);
```

---

### SMS Notifications

[](#sms-notifications)

```
use BitDreamIT\MikoPBX\Services\SmsNotificationService;

$sms = app(SmsNotificationService::class);
$sms->missedCallAlert('+8801711XXXXXX', '01811XXXXXX', '101');
$sms->voicemailAlert('+8801711XXXXXX', '01811XXXXXX');
$sms->campaignCompleted('+8801711XXXXXX', 'June Promo', 450, 500);
$sms->callbackReminder('+8801711XXXXXX', '01811XXXXXX');
```

---

### Laravel Notifications

[](#laravel-notifications)

```
use BitDreamIT\MikoPBX\Notifications\MissedCallNotification;
use BitDreamIT\MikoPBX\Notifications\VoicemailNotification;
use BitDreamIT\MikoPBX\Notifications\CampaignCompletedNotification;

$agent->notify(new MissedCallNotification('01711XXXXXX', '101'));
$agent->notify(new VoicemailNotification('01711XXXXXX', '101', 45, 'rec.wav'));
$manager->notify(new CampaignCompletedNotification('June Promo', 500, 450, 50));
```

---

### HasCallLogs Trait (CRM integration)

[](#hascalllogs-trait-crm-integration)

```
// In your Customer / Lead / Contact model:
use BitDreamIT\MikoPBX\Traits\HasCallLogs;

class Customer extends Model {
    use HasCallLogs;
    protected string $phoneColumn = 'mobile'; // column name
}

// Usage:
$customer->callLogs()->get();
$customer->missedCalls()->count();
$customer->lastCall();
$customer->totalCallDuration();
$customer->callNow('101'); // agent 101 calls this customer
$customer->hasMissedCalls();
```

---

### Voicemail

[](#voicemail)

```
MikoPBX::ami()->getVoicemailCount('101@default');
MikoPBX::ami()->mailboxStatus('101@default');
MikoPBX::ami()->listVoicemailUsers();
```

---

### AstDB

[](#astdb)

```
MikoPBX::ami()->dbPut('CRM', 'customer_01711', 'VIP');
MikoPBX::ami()->dbGet('CRM', 'customer_01711');
MikoPBX::ami()->dbDelete('CRM', 'customer_01711');
```

---

### Call Monitoring (Supervisor Spy)

[](#call-monitoring-supervisor-spy)

```
MikoPBX::ami()->monitorStart('PJSIP/101-00000001', '/tmp/supervisor_rec');
MikoPBX::ami()->monitorPause('PJSIP/101-00000001');
MikoPBX::ami()->monitorResume('PJSIP/101-00000001');
MikoPBX::ami()->monitorStop('PJSIP/101-00000001');
```

---

### Health Check

[](#health-check)

```
MikoPBX::health()->check();   // full check
MikoPBX::health()->ping();    // quick bool
MikoPBX::health()->systemInfo();
```

---

### System Commands

[](#system-commands)

```
MikoPBX::ami()->reloadDialplan();
MikoPBX::ami()->moduleReload('chan_pjsip.so');
MikoPBX::ami()->command('core show channels');
MikoPBX::ami()->getUptime();
MikoPBX::ami()->ping();
MikoPBX::call()->getVersion();
```

---

Artisan Commands
----------------

[](#artisan-commands)

```
php artisan mikopbx:install              # Install package
php artisan mikopbx:listen               # Start AMI event listener
php artisan mikopbx:listen --verbose     # With raw event output
php artisan mikopbx:health               # Health check
php artisan mikopbx:sync-extensions      # Sync extension statuses
php artisan mikopbx:cdr-sync             # Sync CDR for today
php artisan mikopbx:cdr-sync --from=2026-06-01 --to=2026-06-30
php artisan mikopbx:campaign start 1    # Start campaign ID 1
php artisan mikopbx:campaign stop  1    # Stop campaign
php artisan mikopbx:campaign status 1   # Show status
```

---

REST API Endpoints (40+)
------------------------

[](#rest-api-endpoints-40)

MethodEndpointDescriptionGET/mikopbx/calls/activeLive active callsPOST/mikopbx/calls/originateMake outbound callPOST/mikopbx/calls/transferTransfer call (blind/attended)POST/mikopbx/calls/hangupHangup a channelPOST/mikopbx/calls/muteMute channelPOST/mikopbx/calls/parkPark a callGET/mikopbx/calls/parkedGet parked callsGET/mikopbx/calls/logsCall log history (paginated, filterable)GET/mikopbx/calls/statsCall statistics summaryGET/mikopbx/campaignsList campaignsPOST/mikopbx/campaignsCreate campaignPOST/mikopbx/campaigns/{id}/startStart campaignPOST/mikopbx/campaigns/{id}/stopStop campaignGET/mikopbx/campaigns/{id}/statusCampaign statusGET/mikopbx/agentsAll agents with statusGET/mikopbx/agents/onlineOnline agents onlyPOST/mikopbx/agents/{ext}/callAgent calls a numberPOST/mikopbx/agents/{ext}/queue/pausePause agent in queueGET/mikopbx/recordingsList recordingsGET/mikopbx/recordings/{file}/downloadDownload recordingPOST/mikopbx/conferencesCreate conferencePOST/mikopbx/conferences/{id}/participantsAdd participantPOST/mikopbx/ivr/buildBuild IVR menuGET/mikopbx/ivr/templatesGet preset IVR templatesGET/mikopbx/analytics/dashboardKPI dashboardGET/mikopbx/analytics/peak-hoursPeak call hoursGET/mikopbx/analytics/agent-performanceAgent statsGET/mikopbx/analytics/slaSLA compliance reportGET/mikopbx/analytics/exportDownload CDR as CSVGET/mikopbx/blacklistGet blacklisted numbersPOST/mikopbx/blacklistBlock a numberDELETE/mikopbx/blacklist/{number}Unblock a numberGET/mikopbx/blacklist/check/{number}Check if blockedPOST/mikopbx/callbacksSchedule callbackGET/mikopbx/callbacks/pendingPending callbacksGET/mikopbx/healthFull health checkGET/mikopbx/health/pingQuick pingGET/mikopbx/system/statusSystem infoPOST/mikopbx/system/reloadReload dialplanPOST/mikopbx/webhookReceive MikoPBX events---

Real-time Events (AMI Listener)
-------------------------------

[](#real-time-events-ami-listener)

Run via Supervisor (see `docs/supervisor-mikopbx-ami.conf`):

```
php artisan mikopbx:listen
```

Subscribe in EventServiceProvider:

```
use BitDreamIT\MikoPBX\Events\IncomingCallEvent;
use BitDreamIT\MikoPBX\Events\CallEndedEvent;

protected $listen = [
    IncomingCallEvent::class => [
        \App\Listeners\ShowCallPopupToAgent::class,
        \App\Listeners\LookupCustomerInCRM::class,
    ],
    CallEndedEvent::class => [
        \App\Listeners\SaveCallToCRM::class,
        \App\Listeners\SendSummaryEmail::class,
    ],
];
```

---

Testing
-------

[](#testing)

```
use BitDreamIT\MikoPBX\Testing\MikoPBXFake;

class CallTest extends TestCase
{
    public function test_incoming_call_creates_log(): void
    {
        MikoPBXFake::fake();

        MikoPBXFake::simulateIncomingCall('01711XXXXXX', '101');

        MikoPBXFake::assertIncomingCallFired('01711XXXXXX', '101');
        $this->assertDatabaseHas('mikopbx_call_logs', ['caller' => '01711XXXXXX', 'extension' => '101']);
    }

    public function test_missed_call_schedules_callback(): void
    {
        MikoPBXFake::fake();
        Queue::fake();

        MikoPBXFake::simulateMissedCall('01711XXXXXX', '101');

        Queue::assertPushed(\BitDreamIT\MikoPBX\Jobs\ProcessCallbackJob::class);
    }
}
```

---

Supervisor Setup (Production)
-----------------------------

[](#supervisor-setup-production)

```
; /etc/supervisor/conf.d/mikopbx-ami.conf
[program:mikopbx-ami]
command=php /var/www/your-app/artisan mikopbx:listen
directory=/var/www/your-app
autostart=true
autorestart=true
user=www-data
stderr_logfile=/var/log/supervisor/mikopbx-ami.err.log
stdout_logfile=/var/log/supervisor/mikopbx-ami.out.log
```

```
supervisorctl reread
supervisorctl update
supervisorctl start mikopbx-ami
supervisorctl status mikopbx-ami
```

---

Author
------

[](#author)

**BitDreamIT** — Built in Bangladesh. Open source forever. MIT License.

---

License
-------

[](#license)

MIT — Free to use, modify, and distribute.

###  Health Score

39

—

LowBetter than 85% of packages

Maintenance100

Actively maintained with recent releases

Popularity0

Limited adoption so far

Community6

Small or concentrated contributor base

Maturity45

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

Unknown

Total

1

Last Release

1d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/13940491?v=4)[MD. SIRAJ UD DOULLA](/maintainers/SirajCse)[@SirajCse](https://github.com/SirajCse)

---

Top Contributors

[![SirajCse](https://avatars.githubusercontent.com/u/13940491?v=4)](https://github.com/SirajCse "SirajCse (2 commits)")

---

Tags

laravelcampaignasteriskamiivrvoipsippbxrecordingmikopbxcall centerConferenceARIcdrautodialer

###  Code Quality

TestsPest

Code StyleLaravel Pint

### Embed Badge

![Health badge](/badges/bitdreamit-laravel-mikopbx/health.svg)

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

###  Alternatives

[statamic/cms

The Statamic CMS Core Package

4.8k3.5M914](/packages/statamic-cms)[unopim/unopim

UnoPim Laravel PIM

10.3k2.2k](/packages/unopim-unopim)[mikopbx/core

Free PBX system for SMB based on Asterisk

5501.4k](/packages/mikopbx-core)[tencentcloud/tencentcloud-sdk-php

TencentCloudApi php sdk

3661.2M46](/packages/tencentcloud-tencentcloud-sdk-php)[mozex/anthropic-laravel

Laravel integration for the Anthropic API: facade, config publishing, install command, testing fakes, messages, streaming, tool use, thinking, and batches.

72287.1k1](/packages/mozex-anthropic-laravel)[scriptdevelop/whatsapp-manager

Paquete para manejo de WhatsApp Business API en Laravel

783.5k](/packages/scriptdevelop-whatsapp-manager)

PHPackages © 2026

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