JSONMeet. Slack, Meet i TeamSpeak w jednym, na własnym serwerze.
JSONMeet. Slack, Meet i TeamSpeak
w jednym, na własnym serwerze.
- Zespół rozbity na 4 narzędzia: głos, czat, spotkania, nagrania
- Nagrania rozmów sprzedażowych w cudzej chmurze
- Klient ma wejść z linku, bez konta i instalacji
- AI ma pomagać w trakcie rozmowy, nie po niej
- Kanały głosowe i tekstowe, DM-y, wyszukiwarka
- Spotkania pod linkiem z poczekalnią i nagrywaniem
- Prezenter HQ bez rekompresji na serwerze
- Sufler AI: transkrypcja na żywo i podpowiedzi
- Jeden serwer w Warszawie, ~10 ms pingu z Polski
- Zero abonamentów per użytkownik
- Nagrania i transkrypcje u nas, z retencją
- Aplikacja desktopowa z globalnym push-to-talk
Cztery narzędzia, cztery abonamenty, zero kontroli nad nagraniami.
Nasz zespół pracuje zdalnie, a rozmowy handlowe traktujemy jak dane, których nie oddajemy w cudze ręce. Przez cały dzień siedzieliśmy na kanale głosowym w TeamSpeaku, pisaliśmy na Slacku i Discordzie, a spotkania z klientami umawialiśmy w Google Meet. Każde narzędzie robiło swoją część dobrze. Problem był w sumie.
Cztery loginy, cztery zestawy powiadomień, cztery miejsca, w których ginęły ustalenia. Nagrania rozmów sprzedażowych lądowały w chmurze dostawcy, na jego warunkach i z jego retencją. Chcieliśmy je transkrybować, analizować i uczyć się na nich. Każda taka próba oznaczała eksport, upload do kolejnego narzędzia i kolejną umowę powierzenia.
Największa luka była w samej rozmowie. Handlowiec słyszy obiekcję klienta i ma kilka sekund na odpowiedź. Cała wiedza firmy o tej obiekcji (co zadziałało, czego unikać, jaki jest kontekst leada z CRM) leży w dokumentach, do których w trakcie rozmowy nikt nie sięga. AI podsumowujące spotkanie po fakcie nic tu nie zmienia.
Postawiliśmy wymagania: jedna aplikacja, na naszym serwerze, klient wchodzi z linku bez konta, jakość udostępniania ekranu wystarczająca do prezentacji interfejsów w 4K, nagrywanie z wyraźnym banerem dla wszystkich uczestników. I sufler, który słucha rozmowy i podpowiada handlowcowi na żywo, niewidoczny dla klienta.
Co zbudowaliśmy. Cztery moduły JSONMeet.
Komunikator: kanały, czat, DM-y
Układ jak w Discordzie: workspace’y, kanały tekstowe i głosowe w kategoriach, panel członków ze statusami na żywo. Trwały czat z wzmiankami, plikami, reakcjami i odpowiedziami. Wiadomości prywatne. Pełnotekstowa wyszukiwarka po kanałach i własnych rozmowach. Wszystko po jednym połączeniu WebSocket: wiadomości, obecność, „pisze…”, liczniki nieprzeczytanych.
Spotkania z klientem i nagrywanie
Pokój pod linkiem. Członek zespołu wchodzi od razu, gość klienta trafia do poczekalni i czeka na wpuszczenie jednym kliknięciem. Gość nie dotyka serwera mediów, dopóki gospodarz nie zatwierdzi. Nagrywanie po stronie serwera do MP4 z banerem „Nagrywanie” widocznym dla wszystkich, lista nagrań z retencją i automatycznym kasowaniem.
Prezenter HQ i udostępnianie ekranu do 4K
W przeglądarce presety 1080p60, 1440p60, 1440p30 „ostry tekst” i 4K30, zmieniane w trakcie. Do prezentacji studyjnej osobna aplikacja desktopowa: OBS lub GStreamer koduje obraz sprzętowo i wysyła go protokołem WHIP prosto do serwera mediów, który przekazuje strumień dalej bez rekompresji. Serwer prawie nie zużywa CPU, a odbiorcy widzą to, co wyszło z karty graficznej prezentera.
Sufler AI dla handlowca
Transkrypcja rozmowy na żywo trafia do modelu językowego z playbookiem firmy: macierz 26 obiekcji, zasady negocjacji cenowych, brief o firmie. Sufler pokazuje handlowcowi wykrytą obiekcję, gotową odpowiedź, pytania do zadania i wskaźnik gotowości do domknięcia w skali 0 do 100. Przed rozmową wybierasz leada z CRM i sufler dostaje jego kontekst. Klient tego panelu nigdy nie widzi. Po rozmowie: analiza, scorecard, wyszukiwanie po transkrypcjach.
Pod maską
Frontend w React 18 z Vite i Tailwind CSS 4. Backend w Node.js na Fastify 5 z Prismą 6 i PostgreSQL 17, Redis 7 do sesji, obecności i kolejek. Media obsługuje serwer LiveKit w wersji open source, postawiony samodzielnie: SFU dla dźwięku i wideo, Egress do nagrywania, Ingress do przyjmowania strumienia WHIP z prezentera. Kamera idzie w VP9 z trzema warstwami jakości, ekran w H.264 simulcast, więc słabszy odbiorca dostaje lżejszą warstwę bez pogarszania obrazu innym.
Redukcja szumów (RNNoise) i wirtualne tło (MediaPipe) działają lokalnie w przeglądarce uczestnika. Za firmowymi firewallami ratuje wbudowany TURN po TLS i awaryjny transport po TCP. Aplikacja desktopowa w Electronie łączy się z instancją firmy i sama dostaje każdą aktualizację interfejsu; dodaje tray, globalny skrót push-to-talk, licznik nieprzeczytanych na ikonie i deep-linki do spotkań.
Transkrypcja i model językowy suflera działają na naszych własnych serwerach GPU, połączonych z serwerem aplikacji prywatną siecią. Produkcja to jeden VPS w OVHcloud w Warszawie (8 vCPU, 16 GB RAM) z usługami pod systemd, bez Dockera. Wdrożenie: archiwum z gita, build na serwerze, migracje, restart usług.
Przed i po. Ten sam zespół, jedno narzędzie.
- 4 narzędzia: TeamSpeak, Slack/Discord, Google Meet, osobne nagrywanie
- Nagrania rozmów w chmurze dostawcy, retencja na jego warunkach
- Klient instaluje lub loguje się, żeby wejść na spotkanie
- Wiedza o obiekcjach w dokumentach, poza rozmową
- Ekran udostępniany w jakości, jaką narzędzie uzna za stosowną
- Abonament per użytkownik w każdym z narzędzi
- 1 aplikacja: kanały głosowe, czat, DM-y, spotkania, nagrania
- Nagrania i transkrypcje na własnym serwerze, retencja ustawiana per plan
- Klient wchodzi z linku w przeglądarce, przez poczekalnię
- Sufler podpowiada w trakcie rozmowy, klient go nie widzi
- Presety do 4K30 i 1440p60, prezenter bez rekompresji
- Jeden VPS, koszt stały niezależnie od liczby osób
Liczby projektu.
99 commitów
frontend, backend, desktop, prezenter
test: 10 nadawców < 50% CPU
plus negocjacje cenowe
Do tego: 22 migracje bazy, 26 plików testów backendu, 4 plany z egzekwowanymi limitami (FREE, STARTER, PRO, ENTERPRISE), 2 równoległe nagrania na serwerze, deep-linki jsonmeet://join/<kod> z aplikacji desktopowej.
Nie chodziło o to, żeby mieć własnego Meeta dla zasady. Chodziło o to, że rozmowa sprzedażowa to najcenniejsze dane w firmie, a my oddawaliśmy je komuś innemu. Teraz nagranie, transkrypcja i podpowiedzi są nasze. I działają w trakcie rozmowy, nie po niej.
Jak wyglądała budowa. Osiem tygodni.
1
Projekt i fundament
Dokument projektowy: wymagania, ryzyka, model danych, plan etapów. Fundament: wiele firm w izolacji na jednej instancji, konta i sesje, role z uprawnieniami rozwiązywanymi przy logowaniu, zaproszenia kopiowalnym linkiem. Serwer mediów postawiony na VPS z wbudowanym TURN.
2
Spotkania pod linkiem
Pokój z kodem, poczekalnia dla gości trzymana po stronie serwera, spotlight i siatka, udostępnianie ekranu z presetami. Nagrywanie całej kompozycji pokoju do MP4 z banerem dla uczestników i listą nagrań z retencją.
3
Prezenter HQ
Osobna aplikacja desktopowa dla prezentera: OBS lub GStreamer koduje sprzętowo, strumień idzie protokołem WHIP do Ingress i dalej bez rekompresji. Decyzja: WHIP zamiast RTMP, bo RTMP wymusza ponowne kodowanie na serwerze.
4–5
Komunikator
Stały układ aplikacji: pasek workspace’ów, kanały w kategoriach, treść, panel członków. Trwały czat z wzmiankami, plikami, reakcjami i odpowiedziami, DM-y, wyszukiwarka. Kanały głosowe działające niezależnie od nawigacji: klikasz po aplikacji, rozmowa trwa. Push-to-talk bez renegocjacji połączenia.
6
Aplikacja desktopowa
Electron łączący się z instancją firmy: tray, globalny skrót push-to-talk, licznik nieprzeczytanych, własny wybór okna do udostępnienia, deep-linki do spotkań. Pierwsze uruchomienie to adres serwera i akceptacja certyfikatu; aktualizacje interfejsu przychodzą z serwera.
7
Transkrypcja i sufler
Transkrypcja na żywo na własnym GPU. Sufler z playbookiem 26 obiekcji, briefem firmy i kontekstem leada pobieranym z CRM. Widoczny tylko dla zespołu, konfigurowany per workspace. Jedno wejście do modelu językowego dla wszystkich funkcji AI, więc zmiana modelu to zmiana konfiguracji.
8
Analizy rozmów i produkcja
Analiza rozmowy po fakcie z rozpoznawaniem mówców, scorecard, sygnały i wyszukiwanie po transkrypcjach. Higiena obrazu i dźwięku: redukcja szumów, wirtualne tło, automatyczne obniżenie rozdzielczości, gdy kamera USB spada do kilku klatek. Wdrożenie na jednym VPS w Warszawie pod systemd, bez Dockera.
Komunikator self-hosted dla firmy: kiedy własny serwer ma sens, a kiedy nie
Tekst dla właścicieli firm i szefów sprzedaży, którzy zastanawiają się nad przeniesieniem czatu, rozmów głosowych i spotkań z klientami na własną infrastrukturę. Odpowiadamy, kiedy komunikator self-hosted dla firmy jest rozsądnym wyborem, co trzeba w nim zaprojektować i jakie ryzyka zaplanować od pierwszego dnia.
Czym jest komunikator self-hosted i czym różni się od Slacka czy Meet
Komunikator self-hosted to aplikacja do czatu, rozmów i wideokonferencji uruchomiona na serwerze, którym zarządza firma (własnym albo dzierżawionym VPS). Wiadomości, nagrania i transkrypcje leżą w jej infrastrukturze, a nie w chmurze dostawcy SaaS.
Różnica nie dotyczy tylko miejsca przechowywania danych. Przy własnym wdrożeniu firma decyduje o retencji nagrań, o tym, kto ma do nich dostęp, i o tym, jakie narzędzia (np. modele AI) mogą je przetwarzać. W gotowych usługach te decyzje podejmuje dostawca w regulaminie.
Komunikator self-hosted dla firmy nie musi oznaczać pisania wszystkiego od zera. Rozsądne wdrożenie składa się z dojrzałych komponentów open source (serwer mediów, baza danych, kolejki) i własnej warstwy aplikacji, która odpowiada na konkretne potrzeby zespołu.
Alternatywa dla Slacka i Google Meet: kiedy warto ją rozważyć
Dla większości firm gotowe narzędzia wystarczą. Własne rozwiązanie zaczyna mieć sens w trzech sytuacjach, które często występują razem:
- rozmowy z klientami są danymi, których nie chcesz oddawać (nagrania, transkrypcje, notatki sprzedażowe),
- zespół korzysta równolegle z kilku narzędzi i płaci za każde per użytkownik,
- chcesz, żeby AI pracowało na Twoim playbooku i danych z CRM w trakcie rozmowy, a nie tylko podsumowywało ją po fakcie.
W opisanym wyżej wdrożeniu zespół pracował na czterech narzędziach: TeamSpeak do głosu, Slack i Discord do czatu, Google Meet do spotkań z klientami i osobne nagrywanie. Cztery loginy, cztery zestawy powiadomień, a ustalenia ginęły między nimi. JSONMeet zastąpił je jedną aplikacją.
| Kwestia | Gotowe narzędzia SaaS | Komunikator self-hosted |
|---|---|---|
| Nagrania i transkrypcje | w chmurze dostawcy, retencja na jego warunkach | na serwerze firmy, retencja ustawiana samodzielnie |
| Rozliczenie | abonament per użytkownik w każdym narzędziu | koszt serwera i utrzymania, niezależny od liczby osób |
| AI w trakcie rozmowy | ograniczone do funkcji dostawcy | dowolny model, własny playbook, dane z CRM |
| Utrzymanie | po stronie dostawcy | po stronie firmy lub partnera technicznego |
| Start | od razu | projekt i wdrożenie (tu: 8 tygodni) |
Nagrywanie rozmów na własnym serwerze: wymagania, które warto spisać
Zanim powstanie pierwsza linia kodu, warto spisać wymagania biznesowe. W opisanym projekcie były to: jedna aplikacja, własny serwer, klient wchodzi z linku bez konta i instalacji, udostępnianie ekranu wystarczające do pokazania interfejsu w 4K oraz nagrywanie z wyraźną informacją dla wszystkich uczestników.
Z tego wynikają konkretne funkcje. Gość trafia do poczekalni i nie łączy się z serwerem mediów, dopóki gospodarz go nie wpuści. Nagranie powstaje po stronie serwera do pliku MP4, a baner „Nagrywanie” jest widoczny przez całą rozmowę. Lista nagrań ma retencję z automatycznym kasowaniem, konfigurowaną od 7 dni do bez limitu.
Ten ostatni punkt ma znaczenie przy RODO. Jeśli nagrania leżą u Ciebie, nie potrzebujesz kolejnej umowy powierzenia za każdym razem, gdy chcesz je transkrybować albo analizować innym narzędziem.
Architektura: WebRTC, serwer mediów i firewalle klientów
Rdzeniem każdego komunikatora z wideo jest serwer mediów SFU, który odbiera strumienie od uczestników i rozsyła je dalej. W JSONMeet jest to samodzielnie postawiony LiveKit w wersji open source: SFU dla dźwięku i wideo, Egress do nagrywania, Ingress do przyjmowania strumienia z aplikacji prezentera.
Najczęstsze ryzyko przy self-hostingu WebRTC to firmowy firewall po stronie klienta. Trzeba je zaplanować od początku. Tu serwer ma wbudowany TURN po TLS na porcie 5349 i awaryjny transport po TCP, a na najbardziej restrykcyjne sieci przewidziano drugi adres IP z TURN na porcie 443, który dla firewalla wygląda jak zwykły ruch HTTPS.
Druga decyzja to jakość obrazu. Kamera idzie w VP9 z trzema warstwami jakości, ekran w H.264 simulcast, więc odbiorca ze słabszym łączem dostaje lżejszą warstwę bez pogarszania obrazu innym. Do prezentacji studyjnych osobna aplikacja koduje obraz sprzętowo i wysyła go protokołem WHIP bez rekompresji na serwerze. Presety sięgają 4K30 i 1440p60.
Sufler AI dla handlowca: AI w trakcie rozmowy, nie po niej
Podsumowanie spotkania po fakcie niewiele pomaga handlowcowi, który słyszy obiekcję i ma kilka sekund na odpowiedź. Dlatego w opisanym wdrożeniu transkrypcja rozmowy trafia na żywo do modelu językowego razem z playbookiem firmy: macierzą 26 obiekcji, zasadami negocjacji cenowych i briefem o firmie.
Przed rozmową handlowiec wybiera leada z CRM, a sufler dostaje jego kontekst. W trakcie pokazuje wykrytą obiekcję, propozycję odpowiedzi, pytania do zadania i wskaźnik gotowości do domknięcia w skali 0 do 100. Klient tego panelu nie widzi. Po rozmowie dostępna jest analiza, scorecard i wyszukiwanie po transkrypcjach.
Ważny szczegół: transkrypcja i model działają na własnych serwerach GPU, połączonych z serwerem aplikacji siecią prywatną. Treść rozmów nie trafia do zewnętrznego dostawcy AI. Jedno wejście do modelu dla wszystkich funkcji AI sprawia, że zmiana modelu to zmiana konfiguracji.
Utrzymanie komunikatora self-hosted bez zespołu DevOps
Częste pytanie brzmi: kto będzie to utrzymywał. Odpowiedź zależy od tego, jak prosto zaprojektujesz produkcję. JSONMeet działa na jednym VPS w Warszawie (8 vCPU, 16 GB RAM) z usługami pod systemd, bez Dockera i orkiestratora. Wdrożenie to jeden skrypt: archiwum z gita, build, migracje bazy, restart usług.
Taki serwer w teście obsłużył pokój z około 30 uczestnikami, z czego 10 nadawało obraz, przy obciążeniu CPU poniżej 50%. Ping z Polski wynosi około 10 ms. Aplikacja desktopowa w Electronie pobiera aktualizacje interfejsu z serwera, więc nie trzeba jej ręcznie aktualizować na każdym komputerze.
Dla firm, które nie chcą prowadzić serwera samodzielnie, rozsądną opcją jest instancja utrzymywana przez partnera technicznego. Dane nadal zostają w dedykowanej infrastrukturze, a odpowiedzialność za aktualizacje i bezpieczeństwo jest opisana w umowie.
Przed decyzją warto policzyć trzy rzeczy: ile osób i narzędzi obejmie zmiana, jak cenne są dla Ciebie nagrania rozmów oraz czy AI ma działać na Twoich danych. Jeśli odpowiedzi wskazują na kontrolę nad danymi, komunikator self-hosted dla firmy jest wart rozważenia.
Podobne systemy projektujemy w ramach aplikacji webowych na zamówienie, a funkcje oparte na modelach językowych, takie jak sufler, w ramach wdrożeń AI; połączenie komunikatora z CRM opisujemy przy integracjach ERP i CRM.
Trzy pytania, które słyszymy, gdy pokazujemy JSONMeet.
Po co własny komunikator, skoro Google Meet i Slack są gotowe i tanie?
Dla większości firm gotowe narzędzia wystarczą. Własne ma sens, gdy rozmowy z klientami są danymi, których nie chcesz oddawać (nagrania, transkrypcje, notatki sprzedażowe), gdy płacisz per użytkownik za cztery narzędzia naraz, albo gdy chcesz AI, które działa na Twoim playbooku i Twoim CRM w trakcie rozmowy, nie po niej. JSONMeet powstał z tych trzech powodów jednocześnie.
WebRTC za firmowym firewallem klienta nie zadziała.
To jest realne ryzyko i zaplanowaliśmy je od pierwszego dnia. Serwer mediów ma wbudowany TURN po TLS na porcie 5349 i awaryjny transport po TCP. W scenariuszu najbardziej restrykcyjnej sieci klienta przewidziany jest drugi adres IP z TURN na porcie 443, który wygląda dla firewalla jak zwykły ruch HTTPS. Gość wchodzi z przeglądarki, bez instalacji.
Kto to będzie utrzymywał? Nie mamy zespołu DevOps.
Produkcja to jeden VPS i sześć usług pod systemd: serwer mediów, API, reverse proxy, Redis oraz kontenery do nagrywania i przyjmowania strumienia. Wdrożenie to jeden skrypt: archiwum z gita, build, migracje, restart. Nie ma orkiestratora, nie ma Docker Compose. Aplikacja desktopowa aktualizuje interfejs sama, z serwera. Dla klientów zewnętrznych oferujemy JSONMeet jako instancję utrzymywaną przez nas.
Czy sufler AI działa w trakcie rozmowy czy tylko po niej?
W trakcie. Transkrypcja rozmowy leci na żywo do modelu językowego uruchomionego na naszych GPU, z playbookiem 26 obiekcji i kontekstem leada pobranym z CRM. Sufler wykrywa obiekcje w wypowiedzi klienta, podpowiada gotowe odpowiedzi i pokazuje wskaźnik gotowości do domknięcia w skali 0–100. Klient panelu suflera nie widzi. Analiza po fakcie (scorecard, wyszukiwanie po transkrypcjach) też jest, ale nie zastępuje suflera na żywo.
Czy nagrania rozmów zostają wyłącznie na naszym serwerze?
Tak, o to była cała gra. Nagranie do MP4 trafia na wolumen podpięty do Waszego VPS-a. Retencja jest konfigurowana per plan (od 7 dni do bez limitu). Klient słyszy komunikat o nagrywaniu i widzi banner „Nagrywanie” przez cały czas trwania rozmowy. Ani nagrania, ani transkrypcje nie opuszczają Waszej infrastruktury — nie ma zewnętrznego dostawcy chmurowego.
Ile kosztuje self-hosting JSONMeet w porównaniu z opłatami za Slack + Meet + TeamSpeak?
Zależy od zespołu, ale zwrot z inwestycji w JSONMeet zaczyna się typowo od 8–15 osób, gdy koszty per-user w gotowych narzędziach zaczynają się sumować. Konkretny rachunek zależy od tego, których modułów potrzebujesz — przelicz kalkulatorem poniżej. W ofercie mamy też instancję zarządzaną przez nas, jeśli nie chcecie własnego DevOps.
Czy JSONMeet zastępuje CRM i narzędzia sprzedażowe?
Nie. JSONMeet to warstwa komunikacyjna, która integruje się z Waszym CRM (Pipedrive, HubSpot, Salesforce, własne API). Kontekst leada z CRM zasila suflera przed rozmową, a wynik rozmowy (transkrypcja, scorecard, notatka) wraca do CRM po jej zakończeniu. Rozmowa sprzedażowa jest w JSONMeet, dane o leadzie są w CRM — i te dwa systemy rozmawiają ze sobą po REST.
Policz koszt wdrożenia
Wybierz zakres wdrożenia JSONMeet w firmie. Cena jednorazowa obejmuje instalację na Waszym serwerze, konfigurację modułów i szkolenie zespołu. Subskrypcja miesięczna pokrywa hosting, patche bezpieczeństwa i aktualizacje.
Chcesz rozmowy z klientami na własnym serwerze, z AI po Twojej stronie?
Pokażemy Ci JSONMeet na żywo: wejdziesz jako gość przez poczekalnię, zobaczysz suflera od strony handlowca. 30 minut, bez prezentacji sprzedażowej.
Sprawdź, zanim porozmawiamy
Usługi powiązane z tym wdrożeniem. Zajrzyj do oferty, zobacz jak podchodzimy do podobnych problemów u innych klientów.
Podobał Ci się ten artykuł?
Jeśli po lekturze czujesz, że w Twojej firmie też są procesy warte przebudowy, umów bezpłatną rozmowę. Sprawdzimy razem, gdzie realnie wycieka sprzedaż i co ma sens wdrożyć w pierwszej kolejności.
Umów rozmowę