Інтеграція Pusher для real-time сповіщень на сайті

Наша компанія займається розробкою, підтримкою та обслуговуванням сайтів будь-якої складності. Від простих односторінкових сайтів до масштабних кластерних систем, побудованих на мікро сервісах. Досвід розробників підтверджено сертифікатами від вендорів.
Розробка та обслуговування будь-яких видів сайтів:
Інформаційні сайти або веб-програми
Сайти візитки, landing page, корпоративні сайти, онлайн каталоги, квіз, промо-сайти, блоги, ресурси новин, інформаційні портали, форуми, агрегатори
Сайти або веб-програми електронної комерції
Інтернет-магазини, B2B-портали, маркетплейси, онлайн-обмінники, кешбек-сайти, біржі, дропшиппінг-платформи, парсери товарів
Веб-програми для управління бізнес-процесами
CRM-системи, ERP-системи, корпоративні портали, системи управління виробництвом, парсери інформації
Сайти або веб-програми електронних послуг
Дошки оголошень, онлайн-школи, онлайн-кінотеатри, конструктори сайтів, портали надання електронних послуг, відеохостинги, тематичні портали

Це лише деякі з технічних типів сайтів, з якими ми працюємо, і кожен із них може мати свої специфічні особливості та функціональність, а також бути адаптованим під конкретні потреби та цілі клієнта.

Пропоновані послуги
Показано 1 з 1 послугУсі 2065 послуг
Інтеграція Pusher для real-time сповіщень на сайті
Проста
від 1 робочого дня до 3 робочих днів
Часті питання
Наші компетенції:
Етапи розробки
Останні роботи
  • image_website-b2b-advance_0.png
    Розробка сайту компанії B2B ADVANCE
    1262
  • image_web-applications_feedme_466_0.webp
    Розробка веб-додатків для компанії FEEDME
    1171
  • image_websites_belfingroup_462_0.webp
    Розробка веб-сайту для компанії БЕЛФІНГРУП
    874
  • image_ecommerce_furnoro_435_0.webp
    Розробка інтернет магазину для компанії FURNORO
    1094
  • image_crm_enviok_479_0.webp
    Розробка веб-додатків для компанії Enviok
    831
  • image_bitrix-bitrix-24-1c_fixper_448_0.png
    Розробка веб-сайту для компанії ФІКСПЕР
    851

Інтеграція Pusher для real-time повідомлень на сайті

Pusher — managed WebSocket-сервіс. Клієнт підписується на канали, сервер публікує події через HTTP API. Без управління WebSocket-інфраструктурою — тільки логіка повідомлень.

Встановлення

npm install pusher        # серверна бібліотека
npm install pusher-js     # клієнтська

Сервер

import Pusher from 'pusher';

const pusher = new Pusher({
  appId: process.env.PUSHER_APP_ID,
  key: process.env.PUSHER_KEY,
  secret: process.env.PUSHER_SECRET,
  cluster: process.env.PUSHER_CLUSTER,
  useTLS: true
});

// Публікація події при зміні статусу замовлення
async function notifyOrderUpdate(orderId: string, status: string, userId: string) {
  await pusher.trigger(`private-user-${userId}`, 'order-updated', {
    orderId,
    status,
    timestamp: new Date().toISOString()
  });
}

// Авторизація private-каналів
app.post('/pusher/auth', authenticate, (req, res) => {
  const { socket_id, channel_name } = req.body;
  const userId = req.user.id;

  // Перевіряємо, що користувач може підписатися на цей канал
  if (channel_name !== `private-user-${userId}`) {
    return res.status(403).json({ error: 'Forbidden' });
  }

  const auth = pusher.authorizeChannel(socket_id, channel_name);
  res.json(auth);
});

Клієнт (React)

import Pusher from 'pusher-js';
import { useEffect, useState } from 'react';

function useOrderNotifications(userId: string) {
  const [notifications, setNotifications] = useState([]);

  useEffect(() => {
    const pusher = new Pusher(process.env.NEXT_PUBLIC_PUSHER_KEY, {
      cluster: process.env.NEXT_PUBLIC_PUSHER_CLUSTER,
      authEndpoint: '/pusher/auth',
      auth: {
        headers: { Authorization: `Bearer ${getToken()}` }
      }
    });

    const channel = pusher.subscribe(`private-user-${userId}`);

    channel.bind('order-updated', (data) => {
      setNotifications(prev => [data, ...prev]);
      showToast(`Замовлення #${data.orderId}: ${data.status}`);
    });

    return () => {
      channel.unbind_all();
      pusher.unsubscribe(`private-user-${userId}`);
      pusher.disconnect();
    };
  }, [userId]);

  return notifications;
}

Presence Channel — статуси онлайну

// Хто сейчас онлайн в кімнаті
const channel = pusher.subscribe(`presence-room-${roomId}`, {
  userAuthentication: {
    params: { userId, userName: user.name }
  }
});

channel.bind('pusher:member_added', (member) => {
  console.log(`${member.info.userName} вошел`);
});

channel.bind('pusher:member_removed', (member) => {
  console.log(`${member.info.userName} вышел`);
});

// Поточні учасники
const members = channel.members;

Обмеження та ліміти

Pusher Channels: безплатний план — 100 одночасних підключень, 200k сообщень/день. Платні плани починаються від $49/місяць.

Альтернативи для self-hosted: Soketi (open-source сумісний з Pusher API).

Часові рамки

Базова інтеграція повідомлень через Pusher: 1–2 дні.