PHPackages                             cldt/laravel-aircall - 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. cldt/laravel-aircall

ActiveLibrary[API Development](/categories/api)

cldt/laravel-aircall
====================

API Wrapper for the Aircall API

1.1.6(6mo ago)14.5k↓31.8%MITPHPPHP ^8.0CI failing

Since Oct 16Pushed 6mo ago1 watchersCompare

[ Source](https://github.com/cldt-fr/laravel-aircall)[ Packagist](https://packagist.org/packages/cldt/laravel-aircall)[ Docs](https://github.com/cdelouvencourt/laravel-aircall)[ RSS](/packages/cldt-laravel-aircall/feed)WikiDiscussions master Synced 1mo ago

READMEChangelog (10)Dependencies (8)Versions (18)Used By (0)

Aircall API for Laravel
=======================

[](#aircall-api-for-laravel)

[![Latest Version on Packagist](https://camo.githubusercontent.com/9f1ae301cd3180341c841a5ce44712445a05d8286530e32596cc839f0d3ea894/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f762f6364656c6f7576656e636f7572742f6c61726176656c2d61697263616c6c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/cdelouvencourt/laravel-aircall)[![Total Downloads](https://camo.githubusercontent.com/5e13c69160df52f9f08d70f36327c216c550493213e91167bf2a0ac264cf396a/68747470733a2f2f696d672e736869656c64732e696f2f7061636b61676973742f64742f6364656c6f7576656e636f7572742f6c61726176656c2d61697263616c6c2e7376673f7374796c653d666c61742d737175617265)](https://packagist.org/packages/cdelouvencourt/laravel-aircall)[![GitHub Actions](https://github.com/cdelouvencourt/laravel-aircall/actions/workflows/main.yml/badge.svg)](https://github.com/cdelouvencourt/laravel-aircall/actions/workflows/main.yml/badge.svg)

This package provides a simple way to interact with the Aircall API in your Laravel application.

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

[](#installation)

You can install the package via composer:

```
composer require cldt/laravel-aircall
```

You can publish the config file with:

```
php artisan vendor:publish --provider="CLDT\Aircall\AircallServiceProvider" --tag="aircall-config"
```

Configure the package with your Aircall API credentials in the `config/aircall.php` file. Follow the instructions in the file to get your API credentials.

Next, you can publish the migration with:

```
php artisan vendor:publish --provider="CLDT\Aircall\AircallServiceProvider" --tag="aircall-migrations"
```

After the migration has been published you can create the `aircall_calls` table by running the migrations:

```
php artisan migrate
```

Next you can work with the Aircall API using the `Aircall` facade or the `Aircall` webhook processor.

Usage
=====

[](#usage)

API
---

[](#api)

You can consume the Aircall API using the `Aircall` facade. All methods available in the Aircall API are available in this package.

```
use CLDT\Aircall\Facades\Aircall;

// Get all calls
$allCalls = Aircall::calls()->all();

// Get a teams by id
$call = Aircall::teams()->find($id);

// Get all users
$allContacts = Aircall::users([
    "from" => "1729028410",
])->all();
```

Webhook
-------

[](#webhook)

Aircall will send out webhooks for several event types. You can find the [full list of events types](https://developer.aircall.io/api-references/#webhook-usage)in the Aircall documentation.

Aircall will sign all requests hitting the webhook url of your app with a token. This package will automatically verify if the token is valid. If it is not, the request was probably not sent by Aircall and will be refused.

Unless something goes terribly wrong, this package will always respond with a `200` to webhook requests. Sending a `200`will prevent Aircall from resending the same event over and over again. All webhook requests with a valid signature will be logged in the `aircall_webhook_calls` table (table name is configurable in the config file). The table has a `payload` column where the entire payload of the incoming webhook is saved.

If the signature is not valid, the request will not be logged in the `aircall_webhook_calls` table but a `Spatie\GitHubWebhooks\WebhookFailed` exception will be thrown. If something goes wrong during the webhook request the thrown exception will be saved in the `exception` column. In that case the controller will send a `500` instead of `200`.

There are two ways this package enables you to handle webhook requests: you can opt to queue a job or listen to the events the package will fire.

### Handling webhook requests using jobs

[](#handling-webhook-requests-using-jobs)

If you want to do something when a specific event type comes in you can define a job that does the work. Here's an example of such a job:

```
namespace App\Jobs\AircallWebhooks;

use Illuminate\Bus\Queueable;
use Illuminate\Queue\SerializesModels;
use Illuminate\Queue\InteractsWithQueue;
use Illuminate\Contracts\Queue\ShouldQueue;
use CLDT\Aircall\Models\AircallWebhookCall;

class HandleUserCreatedWebhookJob implements ShouldQueue
{
    use InteractsWithQueue, Queueable, SerializesModels;

    public AircallWebhookCall $aircallWebhookCall;

    public function __construct(
        public AircallWebhookCall $webhookCall
    ) {}

    public function handle()
    {
        // do your work here

        // you can access the payload of the webhook call with `$this->webhookCall->payload`
    }
}
```

We highly recommend that you make this job queueable, because this will minimize the response time of the webhook requests. This allows you to handle more Aircall webhook requests and avoid timeouts.

After having created your job you must register it at the `webhook_jobs` array in the `aircall.php` config file. The key should be the name of [the Aircall event type](https://developer.aircall.io/api-references/#payload). Optionally, you can let it follow with a dot and the value that is in the action key of the payload of a event.

```
// config/aircall.php

'webhook_jobs' => [
   'user.created' => \App\Jobs\Aircall\HandleAircallUserCreatedJob::class, // will be called when user are created
   '*' => \App\Jobs\Aircall\HandleAllWebhooks::class // will be called when any event/action comes in
],
```

### Working with a `AircallWebhookCall` model

[](#working-with-a-aircallwebhookcall-model)

The `CLDT\Aircall\Models\AircallWebhookCall` model contains some handy methods:

- `eventName()`: returns the event name and action name of a webhooks, for example `user.created`
- `payload($key = null)`: returns the payload of the webhook as an array. Optionally, you can pass a key in the payload which value you needed. For deeply nested values you can use dot notation (example: `$githubWebhookCall->payload('issue.user.login');`).

### Handling webhook requests using events

[](#handling-webhook-requests-using-events)

Instead of queueing jobs to perform some work when a webhook request comes in, you can opt to listen to the events this package will fire. Whenever a valid request hits your app, the package will fire a `aircall::` event.

The payload of the events will be the instance of `AircallWebhookCall` that was created for the incoming request.

Let's take a look at how you can listen for such an event. In the `EventServiceProvider` you can register listeners.

```
/**
 * The event listener mappings for the application.
 *
 * @var array
 */
protected $listen = [
    'aircall::user.created' => [
        App\Listeners\UserCreated::class,
    ],
];
```

Here's an example of such a listener:

```
