PHPackages                             simotel/simotel-laravel-connect - 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. simotel/simotel-laravel-connect

ActiveLibrary[API Development](/categories/api)

simotel/simotel-laravel-connect
===============================

4.2.0(2y ago)1242MITPHP

Since Nov 26Pushed 1y ago1 watchersCompare

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

READMEChangelog (3)Dependencies (2)Versions (5)Used By (0)

simotel-laravel-connect
=======================

[](#simotel-laravel-connect)

> ### PHP Package
>
> [](#php-package)
>
> connect to simotel with simotel-php-connect: [simotel/simotel-php-connect](https://github.com/simotel/simotel-php-connect)

Keep connected with Simotel by Laravel. Simotel is a wonderful call center software with huge abilities. visit **[simotel](https://simotel.com/)** documents here: [wiki.simotel.com](https://wiki.simotel.com/)

With this package you can easly connect to **[simotel](https://simotel.com/)** server by laravel and do somethings amazing.

- [Install](#install)
- [How to use](#how-to-use)
    - [Simotel API](#simotel-api)
    - [Simotel Event API](#simotel-event-api)
    - [Simotel Smart API](#simotel-smart-api)
    - [Simotel Trunk API](#simotel-trunk-api)
    - [Simotel Extension API](#simotel-extension-api)
    - [Simotel Ivr API](#simotel-ivr-api)
- [Change log](#change-log)
- [Contributing](#contributing)
- [Security](#security)
- [Credits](#credits)
- [License](#license)

Install
-------

[](#install)

Use composer to install and autoload the package:

```
composer require simotel/simotel-laravel-connect

```

#### Publish config

[](#publish-config)

Use artisan command to publish simotel connect config file in laravel config folder:

```
php artisan vendor:publish --provider="NasimTelecom\Simotel\Laravel\SimotelLaravelServiceProvider"

```

```
// config/laravel-simotel.php

[
    'smartApi' => [
        'apps' => [
            '*' => "\YourApp\SmartApiAppClass",
        ],
    ],
    'ivrApi' => [
        'apps' => [
            '*' => "\YourApp\IvrApiAppClass",
        ],
    ],
    'trunkApi' => [
        'apps' => [
            '*' => "\YourApp\TrunkApiApp",
        ],
    ],
    'extensionApi' => [
        'apps' => [
            '*' => "\YourApp\ExtensionApiAppClass",
        ],
    ],
    'simotelApi' => [
        'server_address' => 'http://yourSimotelServer/api/v4',
        'api_auth' => 'basic',  // simotel api authentication: basic,token,both
        'api_user' => 'apiUser',
        'api_pass' => 'apiPass',
        'api_key' => 'apiToken',
    ],
];
```

How to use
----------

[](#how-to-use)

### Simotel API

[](#simotel-api)

Simotel API helps you to connect to simotel server and manage simotel users, queues, trunks, announcements, get reports, send faxes [and more](https://doc.mysup.ir/docs/api/v4/callcenter_api/SimoTelAPI/settings).

#### Connect to Simotel API

[](#connect-to-simotel-api)

```
use Simotel\Laravel\Facade\Simotel;

// The data will be sent to Simotel server as request body
$data = [
    "alike"=>false,
    "conditions"=>["name"=>"200"],
];

try{
    // Sending request to simotel server
    $res = Simotel::connect("pbx/users/search",$data);
}
catch(\Exception $e){
    die($e->getMessage());
}

// Determines whether the transaction was successful or not
// In other words if the response status code is
// between 200~299 then isOk() will return true
if(!$res->isOk())
    die("There is a problem");

// Or you can get response status code
$statusCode = $res->getStatusCode();

// Simotel will return a json response,
// to cast it to array use toArray() method
// it will be an array like this:
// [
//      "success" => true/false,
//      "message" => "Simotel Error Message"
//      "data"    =>  [response data array]
// ]
// success: determine wether transaction by simotel is ok or not
// message: this is simotel response message
// that tell us why transactoion did not completed
$res->toArray();

// Simotel Success is true or false
if(!$res->isSuccess())
    // Get Simotel message if isSuccess()==false
    die($res->getMessage());

// Get Simotel response data array
$users = $res->getData();
```

### Simotel Event Api

[](#simotel-event-api)

You can use our predefined SimotelEvents in EventServiceProvider to associate with listeners.

Here is the list of Simotel Event classes that you can use:

Event NameSimotel Event ClassCdrNasim\\Simotel\\Laravel\\Events\\SimotelEventCdr::classCdrQueueNasim\\Simotel\\Laravel\\Events\\SimotelEventCdrQueue::classExtenAddedNasim\\Simotel\\Laravel\\Events\\SimotelEventExtenAdded::classExtenRemovedNasim\\Simotel\\Laravel\\Events\\SimotelEventExtenRemoved::classIncomingCallNasim\\Simotel\\Laravel\\Events\\SimotelEventIncomingCall::classIncomingFaxNasim\\Simotel\\Laravel\\Events\\SimotelEventIncomingFax::classNewStateNasim\\Simotel\\Laravel\\Events\\SimotelEventNewState::classOutgoingCallNasim\\Simotel\\Laravel\\Events\\SimotelEventOutgoingCall::classSurveyNasim\\Simotel\\Laravel\\Events\\SimotelEventSurvey::classTransferNasim\\Simotel\\Laravel\\Events\\SimotelEventTransfer::classVoiceMailNasim\\Simotel\\Laravel\\Events\\SimotelEventVoiceMail::classVoiceMailEmailNasim\\Simotel\\Laravel\\Events\\SimotelEventVoiceMailEmail::classNow, you must dispatch Simotel events in router:

```
// routes/api.php

Route::get("/eventApi",function(){
    Simotel::eventApi()->dispatch(request()->all());
})
```

### Simotel Smart API

[](#simotel-smart-api)

> We recommend you to study [Simotel SmartApi documents](https://doc.mysup.ir/docs/api/callcenter_api/APIComponents/smart_api) first.

#### 1. create smartApp classes and methods that called by smart api apps

[](#1-create-smartapp-classes-and-methods-that-called-by-smart-api-apps)

```
namespace \App\SimotelSmartApps;

use Simotel\SmartApi\Commands;

class PlayWelcomeAnnounce
{
    use Commands;

    public function playAnnounceApp($appData)
    {
        $this->cmdPlayAnnouncement("announcement file name");
        return $this->okResponse();
        // return: {'ok':1,'commands':'PlayAnnouncement('announcement file name')'}
    }
}
```

```
namespace \App\SimotelSmartApps;

class RestOfApps
{
    use SmartApiCommands;

    public function sayClock($appData)
    {
        $this->cmdSayClock("14:00");
        return $this->makeOkResponse();
        // return: {'ok':1,'commands':'SayClock("14:00")'}
    }

    public function interactiveApp($appData)
    {
        if($appData["data"]=="1")
            return $this->makeOkResponse();
            // return: {'ok':1}

        if($appData["data"]=="2")
            return $this->makeNokResponse();
            // return: {'ok':0}
    }
}
```

> Don't forget to `use` [ Simotel\\SmartApi\\Commands](https://github.com/nasimtelecom/simotel-php-connect/blob/main/src/SmartApi/Commands.php) trait in your class.

### 2. customize simotel config

[](#2-customize-simotel-config)

```
// config/laravel-simotel.php

 'smartApi' => [
        'apps' => [
            'playAnnounce' => \App\SimotelSmartApps\PlayWelcomeAnnounce::class,
            '*' => \App\SimotelSmartApps\RestOfApps::class,
        ],
    ],
```

#### 3. handle received request from simotel smart api

[](#3-handle-received-request-from-simotel-smart-api)

```
Route::get("smartApi",function(){
    Simotel::smartApi()->call(request()->all());
})
$config = Simotel::getDefaultConfig();
$config["smartApi"]["apps"] = [
  'playWelcomeMessage' => PlayWelcomeMessage::class,
  '*' => RestOfApps::class,
];

// place this codes where you want grab income requests
// from simotel smartApi calls
$simotel = new Simotel($config);
$appData = $_POST["app_data"];
$jsonResponse = $simotel->smartApi($appData)->toJson();

header('Content-Type: application/json; charset=utf-8');
echo $jsonResponse;

/*
 if app_name='playAnnounceApp'
	 jsonResponse = {'ok':1,'commands':'PlayAnnouncement('announcement file name')'}

 if app_name='sayClock'
	 jsonResponse = {'ok':1,'commands':'SayClock("14:00")'}

 if app_name='interactiveApp'
	 if data=1
		 jsonResponse = {'ok':1}
	 if data=2
		 jsonResponse = {'ok':0}
*/
```

there are commands that you can use in your SmartApp classes:

```
cmdPlayAnnouncement($announceFilename);
cmdPlayback($announceFilename);
cmdExit($exit);
cmdGetData($announceFilename, $timeout, $digitsCount);
cmdSayDigit($number);
cmdSayNumber($number);
cmdSayClock($clock);
cmdSayDate($date,$calender);
cmdSayDuration($duration);
cmdSetExten($exten, $clearUserData = true);
cmdSetLimitOnCall($seconds);
cmdClearUserData();
cmdMusicOnHold();
```

### Simotel Trunk API

[](#simotel-trunk-api)

> We recommend you to study [Simotel Trunk API documents](https://doc.mysup.ir/docs/api/callcenter_api/APIComponents/trunk_api) first.

#### 1. create TrunkApp classe and methods

[](#1-create-trunkapp-classe-and-methods)

```
class SelectTrunk
{
    public function selectTrunk($appData)
    {
        if(/* some conditions */)
            return [
                "trunk" => "trunk1",
                "extension" => "extension1",
                "call_limit" => "300"
            ];

        //else
        return [
            "trunk" => "trunk2",
            "extension" => "extension2",
            "call_limit" => "400"
        ];
    }
}
```

#### 2. handle received request from Simotel Trunk API

[](#2-handle-received-request-from-simotel-trunk-api)

```
$config = Simotel::getDefaultConfig();
$config["trunkApi"]["apps"] = [
  'selectTrunk' => SelectTrunk::class,
];

// place this codes where you want grab income requests
// from simotel smartApi calls
$simotel = new Simotel($config);
$appData = $_POST["app_data"];
$jsonResponse = $simotel->trunkApi($appData)->toJson();

header('Content-Type: application/json; charset=utf-8');
echo $jsonResponse;

/*
    if some conditions then
		 jsonResponse = {
            "ok": "1",
            "trunk": "trunk1",
            "extension": "extension1",
            "call_limit": "300"
        }
	 else
		jsonResponse = {
            "ok": "1",
            "trunk": "trunk2",
            "extension": "extension2",
            "call_limit": "400"
        }
*/
```

### Simotel Extension API

[](#simotel-extension-api)

> We recommend you to study [Simotel Extension API documents](https://doc.mysup.ir/docs/api/callcenter_api/APIComponents/exten_api) first.

#### 1. create Extension API class and methods

[](#1-create-extension-api-class-and-methods)

```
class SelectExtension
{
    public function selectExtension($appData)
    {
        if(/* some conditions */)
            return "ext1";

        //else
            return "ext2";
    }
}
```

#### 2. handle received request from Simotel Extension API

[](#2-handle-received-request-from-simotel-extension-api)

```
$config = Simotel::getDefaultConfig();
$config["extensionApi"]["apps"] = [
  'selectExtension' => SelectExtension::class,
];

// place this codes where you want grab income requests
// from simotel extensionApi calls
$simotel = new Simotel($config);
$appData = $_POST["app_data"];
$jsonResponse = $simotel->extensionApi($appData)->toJson();

header('Content-Type: application/json; charset=utf-8');
echo $jsonResponse;

/*
    if some conditions then
		 jsonResponse = {"ok": "1", "extension": "ext1"}
	 else
		 jsonResponse = {"ok": "1", "extension": "ext2"}
*/
```

### Simotel Ivr API

[](#simotel-ivr-api)

> We recommend you to study [Simotel Ivr API documents](https://doc.mysup.ir/docs/api/callcenter_api/APIComponents/ivr_api) first.

#### 1. create Ivr API class and methods

[](#1-create-ivr-api-class-and-methods)

```
class SelectIvrCase
{
    public function selectCase($appData)
    {
        if(/* some conditions */)
            return "1";

        //else
            return "2";
    }
}
```

#### 2. handle received request from Simotel Ivr API

[](#2-handle-received-request-from-simotel-ivr-api)

```
$config = Simotel::getDefaultConfig();
$config["ivrApi"]["apps"] = [
  'selectCase' => SelectIvrCase::class,
];

// place this codes where you want grab income requests
// from simotel ivrApi calls
$simotel = new Simotel($config);
$appData = $_POST["app_data"];
$jsonResponse = $simotel->ivrApi($appData)->toJson();

header('Content-Type: application/json; charset=utf-8');
echo $jsonResponse;

/*
    if some conditions then
		 jsonResponse = {"ok": "1", "case": "1"}
	 else
		 jsonResponse = {"ok": "1", "case": "2"}
*/
```

Change log
----------

[](#change-log)

Please see [CHANGELOG](CHANGELOG.md) for more information on what has been changed recently.

Contributing
------------

[](#contributing)

Please see [CONTRIBUTING](CONTRIBUTING.md) and [CONDUCT](CONDUCT.md) for details.

Security
--------

[](#security)

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

Credits
-------

[](#credits)

- [Simotel](https://simotel.com/)

License
-------

[](#license)

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

###  Health Score

27

—

LowBetter than 49% of packages

Maintenance29

Infrequent updates — may be unmaintained

Popularity13

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity49

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 ~174 days

Total

3

Last Release

915d ago

### Community

Maintainers

![](https://avatars.githubusercontent.com/u/3897547?v=4)[Hossein Yaghmaee](/maintainers/hsyir)[@hsyir](https://github.com/hsyir)

---

Top Contributors

[![hsyir](https://avatars.githubusercontent.com/u/3897547?v=4)](https://github.com/hsyir "hsyir (22 commits)")

### Embed Badge

![Health badge](/badges/simotel-simotel-laravel-connect/health.svg)

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

###  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)
