PD Документация ← На главную

Интеграции

Готовые пакеты для популярных CMS и фреймворков: ключи в настройках, отправка одной строкой, вебхуки с проверкой подписи. Все они построены на серверных SDK и одном REST API. Ключи берутся в дашборде: Приложения → ваше приложение → Настройки → API-ключи (публичный pk_… — для страниц и приложений, секретный pd_… — только для сервера).

Пакеты публикуются. Пока плагины и обвязки не появились в каталогах (wordpress.org, Bitrix Marketplace, npm, PyPI, Packagist, RubyGems, Maven Central), берите их из каталога integrations/<название> репозитория PushData: плагин WordPress и модуль Битрикс ставятся архивом каталога, пакеты фреймворков — локальной зависимостью. Настройка ниже та же.
ПлатформаПакетЧто даёт
WordPress 6+плагин pushdataкнопка подписки на Web Push, push всем подписчикам при публикации записи
1С-Битриксмодуль pushdataподписка в публичной части, push при добавлении элемента инфоблока
Tildaвебхук формызаявка → контакт (+ запуск сценария), без кода
Laravel 10–13pushdata/laravelканал уведомлений pushdata, фасад, middleware вебхуков
Symfony 6.4 / 7pushdata/symfony-notifierтранспорт Notifier pushdata://
Django 4.2+django-pushdataклиент из settings, send_notification(), view вебхуков + сигнал
Rails 6.1+pushdata-railsconfig.pushdata, PushData::Rails.send_notification, concern вебхуков
Spring Boot 3ru.pushdata:pushdata-spring-boot-starterбин PushData из pushdata.*, PushDataWebhooks
NestJS 10+@pushdata/nestjsPushDataModule, PushDataService, PushDataWebhookGuard
ASP.NET Coreпакет PushData (NuGet)services.AddPushData(apiKey)

WordPress

  1. В дашборде: Провайдеры Push → Web Push → Сгенерировать ключи VAPID.
  2. Загрузите папку плагина pushdata в wp-content/plugins/ и активируйте.
  3. Настройки → PushData: ID приложения, публичный ключ pk_…, секретный ключ pd_… (для отправки при публикации), при включённой проверке идентичности — секрет идентичности.
  4. Вставьте шорткод [pushdata_subscribe] в виджет или шаблон (или включите «Предлагать подписку автоматически»). Сайт должен работать по HTTPS.
  5. Откройте сайт, подпишитесь — устройство появится в Устройства. Опубликуйте запись — push с заголовком, анонсом и ссылкой уйдёт всем подписчикам (один раз на запись; фильтр pushdata_publish_notification меняет или отменяет отправку).

Эталонный service worker плагин отдаёт с корня сайта (/pushdata-sw.js), вошедшие пользователи регистрируются как wp-<id> — им можно отправлять адресно: target: { user_ids: ['wp-42'] }.

1С-Битрикс

  1. Скопируйте модуль в /bitrix/modules/pushdata/ и установите его в Marketplace → Установленные решения (при установке /pushdata-sw.js и /pushdata.js копируются в корень сайта, pushdata_identity.php — в /bitrix/tools/).
  2. Настройки → Настройки продукта → Настройки модулей → PushData: ключи, автоподписка, ID инфоблоков, о новых элементах которых слать push.
  3. В шаблоне сайта — любой элемент с атрибутом data-pushdata-subscribe (кнопка подписки).
  4. Авторизованные пользователи регистрируются как bx-<id>; новый активный элемент выбранного инфоблока → push всем подписчикам (заголовок = название, текст = анонс, ссылка = детальная страница).

Tilda

  1. Приложения → Настройки → API-ключи: секретный ключ pd_….
  2. В Tilda: Настройки сайта → Формы → Webhook, URL https://api.pushdata.ru/api/v1/integrations/tilda?key=pd_… (добавьте &workflow=<id сценария>, чтобы запускать сценарий для каждой заявки). При сохранении Tilda шлёт проверочный запрос — PushData отвечает { "ok": true }.
  3. В блоке формы: Контент → Приём данных → Webhook. Поля назовите Name, Email, Phone (или Имя, Почта, Телефон).
  4. Отправьте заявку: контакт появится в Контакты (e-mail или телефон — внешний id, остальные поля — в metadata), запуск — в сценарии.

Ключ в URL — потому что Tilda не умеет ставить заголовки; URL хранится только в настройках Tilda, при утечке ключ перевыпускается в настройках приложения. Интеграции, которые умеют заголовки, используют Authorization: ApiKey pd_… или X-Api-Key на том же эндпоинте (receiveTildaForm в OpenAPI).

Laravel

bash
composer require pushdata/laravel && php artisan vendor:publish --tag=pushdata-config

.env: PUSHDATA_API_KEY=pd_… (PUSHDATA_IDENTITY_SECRET, PUSHDATA_WEBHOOK_SECRET — по необходимости).

php
class OrderShipped extends Notification
{
    public function via(object $notifiable): array { return ['pushdata']; }

    public function toPushData(object $notifiable): PushDataMessage
    {
        return PushDataMessage::create('Заказ отправлен', "Заказ №{$this->order->id} уже в пути.")
            ->data(['orderId' => (string) $this->order->id])
            ->clickAction(route('orders.show', $this->order));
    }
}

$user->notify(new OrderShipped($order));                 // на устройства пользователя (routeNotificationForPushData() или ключ модели)
PushData::sendNotification(['title' => 'Скидка', 'body' => 'Только сегодня.', 'target' => ['tags' => ['beta']]]);

Вебхуки: Route::post('/webhooks/pushdata', …)->middleware(VerifyPushDataWebhook::class)->withoutMiddleware(VerifyCsrfToken::class).

Symfony

bash
composer require pushdata/symfony-notifier

.env: PUSHDATA_DSN=pushdata://pd_…@default; в notifier.yamltexter_transports: { pushdata: '%env(PUSHDATA_DSN)%' }; фабрика PushData\Symfony\Notifier\PushDataTransportFactory с тегом texter.transport_factory.

php
$texter->send((new PushMessage('Заказ отправлен', 'Заказ №123 уже в пути.'))
    ->options(PushDataOptions::toUser((string) $user->getId())->data(['orderId' => '123'])));

Django

bash
pip install django-pushdata

settings.py: INSTALLED_APPS += ["django_pushdata"], PUSHDATA = {"API_KEY": os.environ["PUSHDATA_API_KEY"]}.

python
from django_pushdata import client, send_notification

send_notification("Заказ отправлен", "Заказ №123 уже в пути.", user_ids=[str(order.user_id)], data={"orderId": "123"})
client().upsert_contact(str(user.pk), email=user.email)

Вебхуки: path("webhooks/pushdata/", PushDataWebhookView.as_view()) + сигнал django_pushdata.signals.webhook_received.

Rails

ruby
gem "pushdata-rails"   # bundle install && rails g pushdata:install

config/initializers/pushdata.rb: config.pushdata.api_key = ENV["PUSHDATA_API_KEY"].

ruby
PushData::Rails.send_notification("Заказ отправлен", "Заказ №#{order.id} уже в пути.", user_ids: [order.user_id], data: { orderId: order.id.to_s })
PushData::Rails.client.upsert_contact(external_id: user.id.to_s, email: user.email)

Вебхуки: include PushData::Rails::Webhook в контроллере.

Spring Boot

xml
<dependency><groupId>ru.pushdata</groupId><artifactId>pushdata-spring-boot-starter</artifactId><version>0.1.0</version></dependency>

application.yml: pushdata.api-key: ${PUSHDATA_API_KEY} (identity-secret, webhook-secret — по необходимости).

java
@Autowired PushData pushdata;
pushdata.sendNotification(Map.of("title", "Заказ отправлен", "body", "Заказ №123 уже в пути.", "target", Map.of("user_ids", List.of("user-123"))));

Вебхуки: бин PushDataWebhooksverify(body, signature); identityHash(userId) — для клиентских SDK.

NestJS

bash
npm install @pushdata/nestjs @pushdata/node
ts
// app.module.ts
PushDataModule.forRoot({ apiKey: process.env.PUSHDATA_API_KEY!, webhookSecret: process.env.PUSHDATA_WEBHOOK_SECRET })

// любой сервис
@Injectable()
export class OrdersService {
  constructor(private readonly pushdata: PushDataService) {}

  async shipped(order: Order) {
    await this.pushdata.sendNotification({ title: 'Заказ отправлен', body: `Заказ №${order.id} уже в пути.`, target: { user_ids: [String(order.userId)] } })
  }
}

Вебхуки: @UseGuards(PushDataWebhookGuard) (приложение создаётся с rawBody: true).

ASP.NET Core

bash
dotnet add package PushData
csharp
builder.Services.AddPushData(builder.Configuration["PushData:ApiKey"]!);

await pushdata.SendNotificationAsync(new JsonObject { ["title"] = "Заказ отправлен", ["body"] = "Заказ №123 уже в пути.", ["target"] = new JsonObject { ["user_ids"] = new JsonArray("user-123") } });

Вебхуки: PushDataClient.VerifyWebhookSignature(rawBody, Request.Headers["X-PushData-Signature"], secret).

Своя интеграция

Всё, что делают пакеты, — вызовы REST API по спецификации OpenAPI: отправка, контакты, сценарии, вебхуки. Примеры на одиннадцати языках — в Серверных SDK; контракт устройств и событий — в Уведомлениях.