PHPackages                             druidvav/badapush-client - 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. druidvav/badapush-client

ActiveLibrary

druidvav/badapush-client
========================

v1.2.3(4y ago)01.9k—0%MITPHPPHP &gt;=7.1.0

Since Jun 30Pushed 4y ago1 watchersCompare

[ Source](https://github.com/druidvav/badapush-client)[ Packagist](https://packagist.org/packages/druidvav/badapush-client)[ RSS](/packages/druidvav-badapush-client/feed)WikiDiscussions master Synced 1mo ago

READMEChangelogDependenciesVersions (7)Used By (0)

Клиент BadaPush
===============

[](#клиент-badapush)

Использование клиента
---------------------

[](#использование-клиента)

Клиент используется для отправки push-уведомлений, sms и постановки задач на обзвон, а также получения результатов отправки и обзвона.

Установка стандартная:

```
composer require druidvav/badapush-client

```

Для каждого из действий нужно создать сервис на сайте badapush.ru и получить API-ключ.

Для работы используются два основных класса

1. `Druidvav\BadapushClient\BadapushQueueClient` — Используется для отправки сообщений через очередь (только push и sms)
2. `Druidvav\BadapushClient\BadapushClient` — Используется для отправки сообщений сразу

### Инициализация клиента

[](#инициализация-клиента)

Для симфони выглядит так:

```
queue_client:
  class: Druidvav\BadapushClient\BadapushQueueClient
  arguments: [ "API_KEY" ]
client:
  class: Druidvav\BadapushClient\BadapushClient
  arguments: [ "API_KEY" ]
```

Либо напрямую:

```
$queueClient = new Druidvav\BadapushClient\BadapushQueueClient("API_KEY");
$client = new Druidvav\BadapushClient\BadapushClient("API_KEY");
```

### Отправка SMS

[](#отправка-sms)

Отправку SMS рекоммендуем делать через очередь.

```
use Druidvav\BadapushClient\Payload\Payload;
// Symfony
$this->get('queue_client')->sendPayload(Payload::create($phoneNumber, $message));
// PHP
$queueClient->sendPayload(Payload::create($phoneNumber, $message));
```

### Push-уведомления (APNS, FCM)

[](#push-уведомления-apns-fcm)

#### Отправка уведомлений

[](#отправка-уведомлений)

Отправку push-уведомлений рекоммендуем делать через очередь.

```
$payload = new Payload($identifier); // Идентификатор устройства
$payload->setIsDevelopment($bool); // Только для APNS, true или false, можно не использовать вообще
$payload->setPayload([ 'key' => 'value', 'key' => 'value' ]); // Информация которая будет передана в приложение
$payload->setPayloadAps([
    'message' => 'asd123',
    'sound' => 'default',
    'content-available' => 1,
    'priority' => 5,
    'badge' => 3,
]); // Только для APNS, информация из объекта aps.
$this->get('queue_client')->sendPayload($payload);
```

#### Сбор информации об ошибках

[](#сбор-информации-об-ошибках)

Если вы отправляли уведомления через очередь, то ошибки доставки можно получить с помощью специального метода. Фактически, требует обработки только ошибка с неправильным идентификатором устройства:

```
$fromId = 0;
do {
    $list = $this->get('queue_client')->retrieveMessages($fromId);
    foreach ($list as $row) {
        $fromId = $row->getId();
        if ($row->isInvalidId()) {
            // Обрабатываем ошибку идентификатора устройства.
            // Сам идентификатор можно получить так:
            // $row->getDeviceId()
        }
    }
} while (sizeof($list) > 0);
```

### Задачи на обзвон «Badapush Caller»

[](#задачи-на-обзвон-badapush-caller)

#### Отправка задач на обзвон

[](#отправка-задач-на-обзвон)

Отправка задач на обзвон работает только без очереди.

```
use Druidvav\BadapushClient\Payload\CallerPayload;

$payload = CallerPayload::create($phoneNumber); // Указываем номер телефона, по которому звонить
$payload->setExternalId($externalId); // ID в вашей системе, чтобы вы могли опознать результат обзвона. Например, номер посылки.
$payload->setTimezone($timezone); // Необязательно, часовой пояс клиента в том виде, в каком его отдает dadata.
$payload->setGroup($groupName); // Строка с названием очереди обзвона для разбиения задач на группы. Если разбивка не нужна — укажите одну строку для всех задач.
$payload->setResultOptions([
    'ok' => 'Готово',
    'received' => 'Уже забрал посылку'
]); // Не обязательно, варианты ответа доступные для выбора обзвонщику. Если не указать — будет только ok. Нужно указывать только если вы потом будете обрабатывать результаты обзвона.
$payload->setDataFields([
    'key' => $value,
    'key' => $value
]); // Не обязательно, значения дополнительных полей передаваемых задаче обзвона, подробнее смотри в разделе "Настройка сервисов". Если не указывать доступно только решение "ok" => "Готово!"
$this->get('client')->sendPayload($payload);
```

#### Отмена задач на обзвон

[](#отмена-задач-на-обзвон)

Допустим, вы поставили задачу на уведомление клиента о том, что он не забрал посылку, а он посылку уже забрал. Или на сбор информации, которую вы уже получили. Чтобы обзвонщики не звонили просто так — желательно отменить задачу. Задачи отменяются по `externalID` , если с переданным `externalId` нет задач — ничего страшного. Следить за тем, что задача реально была создана, необязательно.

```
$this->get('client')->cancelCallsByExternalId($externalId, 'Причина отмены');
```

#### Сбор результатов выполнения задач

[](#сбор-результатов-выполнения-задач)

Привожу пример кода по сбору информации о выполненных задачах на обзвон.

```
$fromId = 0;
do {
    $results = $this->get('client')->retrieveMessages($fromId); // Получаем пачку сообщений для обработки. $maxId, если не равен нулю помечает все сообщения с id до fromId включительно как прочитанные и больше не возвращает их в следующих запросах. По аналогии с API Telegram.
    foreach ($results as $result) {
        $fromId = $result->getId();
        if (!$result->getExternalId()) { // Если мы забыли передать externalId, то обработать не сможем :)
            continue;
        }
        $response = $result->getResponse();
        switch ($response['result']) {
            case 'invalid_job':
                // Обзвонщик нажал кнопку, что задачу невозможно выполнить
                break;
            case 'invalid_device_id':
                // Обзвонщик нажал кнопку, что мобильный телефон неправильный
                break;
            case 'cancel':
                // Задача была отменена по API
                break;
            case 'delay':
                // Звонок отложен обзвонщиком (недозвон, либо просьба перезвонить)
                break;
            case 'ok':
            case 'received': // Или любой из вариантов переданных в setDataFields
                // Обзвонщик выполнил задачу, выбрав один из вариантов
                break;
            default: throw new Exception('Unknown code: ' . $response['result']);
        }
    }
} while (sizeof($results) > 0); // Выполняем пока не обработаем все результаты
```

Настройка сервисов в badapush
-----------------------------

[](#настройка-сервисов-в-badapush)

### Сервис «Badapush Caller»

[](#сервис-badapush-caller)

Сервис для обзвонов — готов к использованию сразу после создания. Если вы хотите добавить дополнительные поля в интерфейс обзвона или добавить ссылку на вашу админку — потребуется настроить поле «Конфигурация полей». Поле должно содержать правильный JSON определенного формата.

Пример:

```
[
  { "field": "name", "title": "Клиент" },
  { "field": "package_id", "title": "Посылка", "url_field": "package_url" }
]
```

Как видим, здесь указывается массив объектов с определенными полями:

- `field` — значение `key` из примера вызова `setDataFields` вышe.
- `title` — название поля отображаемое обзвонщику в интерфейсе
- `url_field` — значение `key` в котором указывается ссылка, которая будет отображена на значении отображаемом в этом поле. **Внимание!** Первая переданная в задаче ссылка будет отображаться как iframe на странице обзвонщика, чтобы он мог увидеть необходимую информацию из проекта не уходя со страницы обзвона.

Полей может быть сколько угодно, но лучше ограничиться разумным количеством и передать ссылку на админку проекта.

### Сервис Apple Push Notification Service

[](#сервис-apple-push-notification-service)

Для работы нужно указать Bundle ID вашего приложения, а также приложить сертификат, либо (что проще) приложить файл p12.

Сгенерировать файл можно, например, по [этой инструкции](https://help.attendify.com/en/articles/613466-how-to-export-a-push-notification-apns-certificate-in-a-p12-file). Если вы указали при экспорте пароль — укажите его при загрузке файла в badapush. Обратите внимание, что сертификат должен быть обязательно **Production**.

Для работы мы используем протокол http/2.

### Сервис Google Cloud Messaging

[](#сервис-google-cloud-messaging)

Он же Firebase Cloud Messaging. Для работы требуется ключ «Firebase Server Key», который можно получить в админке Firebase вашего проекта.

Инструкция:

На данном этапе мы используем Legacy-протокол.

### Сервис SmsTraffic

[](#сервис-smstraffic)

Для работы нужно обязательно указать логин и пароль от учетной записи [SmsTraffic](https://www.smstraffic.ru), а также название отправителя, которое должно быть согласовано в сервисе smstraffic.

###  Health Score

28

—

LowBetter than 54% of packages

Maintenance20

Infrequent updates — may be unmaintained

Popularity20

Limited adoption so far

Community7

Small or concentrated contributor base

Maturity54

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

Recently: every ~45 days

Total

6

Last Release

1621d ago

### Community

Maintainers

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

---

Top Contributors

[![druidvav](https://avatars.githubusercontent.com/u/1116122?v=4)](https://github.com/druidvav "druidvav (12 commits)")

### Embed Badge

![Health badge](/badges/druidvav-badapush-client/health.svg)

```
[![Health](https://phpackages.com/badges/druidvav-badapush-client/health.svg)](https://phpackages.com/packages/druidvav-badapush-client)
```

PHPackages © 2026

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