Przejdź do treści
megapromotingPorozmawiajmy

Ekspertyza · Integracje i automatyzacje

Wasze systemy mają ze sobą rozmawiać, bez ponownego wpisywania tych samych danych przez kogoś.

Łączymy system planowania, sklep, CRM, arkusze kalkulacyjne i kanały komunikacji, tak aby agent lub zaplanowana reguła mogły je czytać i zapisywać w czasie rzeczywistym. Klucze pozostają na serwerze, narzędzia mają zapisane limity, a każda integracja jest testowana także dla przypadku, w którym drugi system przestaje działać.

Już zbudowaneWłasne integracje, napisane i uruchomione, mierzone dziś w kodzie: konektor dla systemu rezerwacji Altegio (946 linii, z sześcioma narzędziami udostępnionymi agentowi), konektor CRM amoCRM (2.888 linii w platformie wiadomości, plus 12 funkcji serwerowych w platformie głosowej), Bitrix24 (903 linie, plus 4 funkcje), Google Sheets (615 linii, plus 10 funkcji i dedykowane konto usługi), żywy katalog nad sklepem (usługa platformowa, 318 linii), powiadomienia o leadach na Telegramie (1.776 linii), SMS przez Infobip z limitami antynadużyciowymi, automatyzacje zaplanowane (1.088 linii) oraz kanał czatu lokalnej platformy ogłoszeń (2.459 linii). W działaniu agent może wywołać 15 typów wewnętrznych narzędzi, oprócz narzędzi przez webhook i narzędzi z własnym kodem uruchamianym w izolacji.

Integracja to nie logo na stronie. To odpowiedź na bardzo konkretne pytanie: czy ten system można czytać i zapisywać w czasie rzeczywistym, przez kogo, z jakimi uprawnieniami i co się dzieje, gdy nie odpowiada? Dlatego nasze pierwsze pytanie przy każdej integracji nie brzmi „z jakim API”, tylko „jaka ma publiczną bramę”. Czasem odpowiedź całkowicie zmienia koszt pracy: sklepy na WooCommerce na przykład publicznie wystawiają sklepowe API, które nie wymaga żadnego klucza konsumenta, więc nowy klient łączy się tylko z adresem swojego serwisu — nie z poświadczeniami, które trzeba wygenerować, wysłać, a potem rotować.

Na naszej platformie wiadomości narzędzie, które agent może wywołać podczas rozmowy, ma jeden z trzech typów: wywołanie do webhooka, własny kod uruchamiany w izolacji albo wewnętrzne narzędzie platformy. Narzędzia wewnętrzne są tymi, które preferujemy, bo trzymają klucze poza bazą danych: dziś jest ich piętnaście, od odczytu strony i zapisu do arkusza kalkulacyjnego, po dostępność i tworzenie terminów, wysyłkę SMS i odpytywanie katalogu produktów.

Różnica między integracją, która działa, a tą, która się rozpada, prawie zawsze leży w drobnych rzeczach, ujawniających się na miejscu. System rezerwacji nie zwraca nic, jeśli pytacie o godziny specjalisty dla usługi, której nie wykonuje — usługa i specjalista zawsze podróżują razem. Ten sam system odrzuca żądanie, jeśli przychodzi z domyślnym nagłówkiem biblioteki HTTP, więc każde żądanie musi się jawnie identyfikować. Sklep może raportować cenę zero dla produktów z wariantami, a wyszukiwanie po pustych słowach zwraca cały katalog. To dziesięć takich szczegółów na jedną integrację i żaden nie jest w dokumentacji.

Powyżej integracji stoją automatyzacje: reguły, które wykonują się w czasie, a nie na czyjąś prośbę. U nas są planowane przez harmonogram w procesie — wznowienie rozmów bez odpowiedzi, pierwszy komunikat do nowego kontaktu, wstrzymanie i ponowne uruchomienie agenta po godzinach pracy — każda z własnymi licznikami, żeby było widać, ile było uruchomień, ile wiadomości wyszło, ile zostało pominiętych i dlaczego. Automatyzacja bez licznika to automatyzacja, o której nie można powiedzieć, czy działa.

Transparentna automatyzacja — integracje, które można zweryfikować · wideo po rumuńsku, z napisami i transkrypcją po polsku

Pełna transkrypcja

Wejdźmy od razu w temat. Dzisiaj rozłożymy na czynniki techniczne i, szczerze mówiąc, często ignorowane realia automatyzacji przez asystentów opartych na sztucznej inteligencji. Skupimy się na bardzo pragmatycznym podejściu do platformy iCat.md opracowanej przez Mega Promoting. Dzisiaj nie ma obietnic marketingowych i, na pewno, nie ma mglistych koncepcji. Mówimy o platformie działającej bezpośrednio w produkcji, z funkcjami wyjaśnionymi prosto z architektury bazy danych. Więc zobaczmy, jak naprawdę wygląda całkowicie transparentna automatyzacja. Agenda tej analizy jest prosta i konkretna. Przechodzimy przez problem czasu, mechanikę technologii, rzeczywisty przypadek, jasne ograniczenia systemu, zarządzanie danymi i kolejne kroki. Zaczynamy od pierwszej sekcji, problemu czasu. Wszyscy znacie to ekstremalnie frustrujące pytanie? Dlaczego cały zespół wsparcia traci sporo godzin, dzień po dniu, ręcznie wpisując odpowiedzi na dokładnie te same pięć pytań?

Informacja już istnieje na stronie firmy, ale mimo to klienci nadal proszą o te szczegóły raz po raz. I właśnie to jest sedno naszego problemu. Bez odpowiedniego rozwiązania technicznego wszystkie te powtarzalne prośby po prostu zapychają skrzynkę bezpośrednich wiadomości, nie ma znaczenia, czy to Instagram, czy Messenger. W konsekwencji odpowiedzi opóźniają się mocno dla klientów, którzy naprawdę mają złożony problem, zgłoszenia gubią się w morzu wiadomości, a cały proces wsparcia staje się praktycznie czarną skrzynką, której nie da się ani sprawdzić, ani zmierzyć. Część druga. Jak właściwie działa technologia pod maską? Oto jak to wygląda. Konfiguracja platformy opiera się na czterech bardzo logicznych krokach. Najpierw łączymy kanały komunikacji, używając własnego kodu. Potem indeksowana jest cała baza wiedzy. Następnie dochodzi do podłączenia narzędzi, które mogą wykonywać działania w waszych istniejących systemach.

A na końcu, i ten detal jest kluczowy, konfiguruje się jasną trasę zapisaną bezpośrednio w bazie danych, przez którą bot przekazuje rozmowę ludzkiemu operatorowi. Wszystko to jest widocznym i w pełni konfigurowalnym systemem. Teraz coś absolutnie fascynującego. Nie mówimy tu z lotu ptaka. To są ustawienia wyciągnięte bezpośrednio ze schematu bazy danych. Gdy asystent potrzebuje odpowiedzi, korzysta z tak zwanego wyszukiwania hybrydowego. Domyślnie algorytm pobiera 5 fragmentów tekstu, stosuje surowy próg podobieństwa 0-70 i przypisuje 30% wagi dokładnemu dopasowaniu słów. Całość jest przetwarzana przez model Text Embedding 3 Small. W praktyce system zamienia słowa w pojęcia matematyczne, żeby uchwycić dokładny kontekst. Odpowiedzi nie są wróżbą, tylko czystą matematyką. Zapamiętajcie tę liczbę. 15. To absolutny limit techniczny w systemie. Oznacza maksymalny czas, w sekundach, przydzielony na uruchomienie dowolnego narzędzia lub wyszukiwania.

Jeśli zewnętrzna integracja trwa dłużej, powiedzmy, że potrzebuje 40 sekund, nie możemy zostawić jej w live’owym przebiegu rozmowy. Musi zostać przetworzona asynchronicznie, inaczej całkowicie załamałby się naturalny rytm dialogu. I jeszcze jedno. Ludzie piszą na czacie seriami, prawda? 2, 3, 4 krótkie wiadomości wysłane jedna po drugiej. Żeby nie doprowadzić systemu do szaleństwa, istnieje bufor konkatenacji 15 sekund. Wszystko, co wpada w to okno, skleja się i staje się jedną jasną prośbą. Poza tym na platformach takich jak Meta, gdzie czasem trafiają się duplikaty wiadomości wysłane przez pomyłkę, system stosuje filtr pamięci 120 sekund na ID wiadomości. Dzięki temu klient dostaje jedną spójną odpowiedź, a nie 3 fałszywe alarmy. Sekcja trzecia. Zobaczmy rzeczywisty przypadek. Mamy ten klasyczny scenariusz e-commerce. Mamy sklep online z nienagannym katalogiem na stronie, ale który dostaje lawinę prywatnych wiadomości na Instagramie i Messengerze?

Czy jest jeszcze na stanie? Jaka jest cena? Tutaj integracja została zrobiona elegancko, łącząc asystenta bezpośrednio z publicznym interfejsem Store API od WooCommerce. Bez komplikacji związanych z bezpieczeństwem, żywy katalog sklepu został po prostu oddany w ręce asystenta. Tyle że tutaj wchodzi techniczna rzeczywistość każdej platformy, nawet pod parasolem tej samej firmy, jak Meta. Na Messengerze asystent może pokazywać wam świetne karuzele produktów. Na Instagramie bot odpowie wam tylko tekstem i najwyżej prostym obrazem. Dlaczego? Po prostu dlatego, że Meta nie obsługuje tych ogólnych szablonów na Instagramie. Asystent musi grać dokładnie według zasad kanału, w którym się znajduje. Tu jest punkt krytyczny. Co się dzieje, gdy bot zostaje przerośnięty przez sytuację? Cóż, w bazie danych rozmowa ma wyraźne stany. Gdy pytanie wychodzi poza strefę komfortu katalogu, wątek rozmowy natychmiast przechodzi ze stanu bota do stanu człowieka.

A genialna część jest taka, że system mierzy czas odpowiedzi ludzkiego operatora, oznaczając wszystko jasno: status OK, ostrzeżenie albo termin przekroczony. Cały kontekst jest przekazywany człowiekowi, bez utraty absolutnie czegokolwiek po drodze. Sekcja A4 Ograniczenia systemu Bo transparentność oznacza, że wiemy, czego nie potrafi zrobić. Jest kilka twardych ograniczeń, które trzeba zaakceptować. Nie możecie wysyłać wiadomości proaktywnych na WhatsApp, jeśli minęło więcej niż 24 godziny od wiadomości klienta. Meta wyświetli błąd, a dokładniej błąd 131047, i akcja się nie powiedzie. System nie robi plików RPDF, nie czyta załączników. Jeśli chodzi o języki obce, tłumaczenia działają tylko w jedną stronę. Klient dostaje przetłumaczoną odpowiedź, ale operator widzi oryginał. I chociaż integracja z 999.md działa, jest nieoficjalna i opiera się na plikach cookie z przeglądarki.

Jeśli platforma zmieni swoje mechanizmy, połączenie padnie i będzie wymagało naprawy. I koniecznie to zapamiętajcie. Asystent jest lustrem waszych danych. Błędna cena na stronie stanie się gwarantowanie błędną ceną w rozmowie. Działa jak czytnik, nie jak menedżer sklepu. Nie poprawi z własnej inicjatywy ludzkich błędów w katalogach. Infrastruktura techniczna tutaj to nie zabawa. Wszystko jest utrzymywane na prywatnym serwerze Microsoft Azure. Omówiamy bardzo uporządkowaną bazę danych MySQL, z ponad 80 tabelami jasno modelowanymi tak, aby oddzielać kanały i zapewnić audyt. Klucze dostępu do WhatsApp, które są superwrażliwe, korzystają z szyfrowania fernet. Poza tym, na poziomie web, domeny dla widgetu czatu są dodawane ręcznie do białej listy. Nikt nie łączy się bez wyraźnej zgody. Trzeba jednak odnieść się do oczywistej rzeczywistości.

Ludzie będą wpisywać wszelkiego rodzaju dane osobowe w te okna czatu, numery telefonów, adresy. Technicznie nie da się zablokować wolnego pola tekstowego. Więc rozwiązanie jest administracyjne. Gdy wdrażacie taki system, od samej sekundy 1 potrzebujecie jasnych polityk retencji, które dokładnie określą, kto może widzieć te dane i jak długo są przechowywane. I doszliśmy do punktu 6. Pośpiesznie i metodycznie. Centralna filozofia całego systemu może zostać podsumowana tym cytatem. Doskonały asystent nie jest tym, który układa poezję albo pisze ładnie, lecz tym, który jest podłączony do rzeczywistych informacji i, co bardzo ważne, dokładnie wie, gdzie trzeba się zatrzymać. Skuteczna automatyzacja w biznesie oznacza poprawne przejęcie danych i pewność, z jaką przekazujecie kontrolę operatorowi ludzkiemu we właściwym momencie. Dlatego następny krok nie polega na kupieniu oprogramowania, tylko na dokładnej analizie obecnych procesów.

Oceniajcie, które przepływy pracy naprawdę warto budować i automatyzować, jak można je bezpiecznie łączyć i, co najważniejsze, ustalcie, jak będziecie mierzyć wyniki za pomocą realnych danych, a nie marketingowych iluzji. I zostawiam was z tą myślą. Spośród wszystkich procesów komunikacji w firmie, które z nich naprawdę wymagają empatii i taktu człowieka, a które są w rzeczywistości tylko powtarzalnymi zadaniami, czekającymi po prostu na precyzyjne połączenie z właściwą bazą danych? Każdy plan automatyzacji powinien wychodzić od tego pytania. Dziękujemy, że byliście z nami w tej analizie!

Co obejmuje

Praca, komponent po komponencie

Najpierw sprawdzamy, jaka publiczna brama ma system

Dla sklepów na WooCommerce używamy publicznego API sklepu, które nie wymaga klucza konsumenta: klient łączy się tylko z adresem witryny. To wybór, który ma realne konsekwencje, nie tylko estetyczne — zastąpiliśmy nim ręcznie napisane narzędzia, które trzymały klucze sklepu jawnie w bazie danych. Gdy system nie ma publicznej bramy, przechodzimy do uwierzytelniania, ale wtedy klucz staje się elementem do zarządzania, a nie czymś, co leży w wierszu bazy danych.

Klucze pozostają na serwerze, nie w narzędziu i nie na stronie

Narzędzie SMS jest wewnętrzne dla platformy właśnie dlatego, że środowisko, w którym uruchamia się własny kod narzędzia, nie ma dostępu do zmiennych środowiskowych — jeśli wysyłka odbywałaby się z kodu narzędzia, klucz trzeba byłoby zapisać w bazie danych, a ten klucz może wysyłać wiadomości na koszt wszystkich. Tak samo w systemie rezerwacji: token partnera jest jeden, przechowywany w środowisku serwera, podczas gdy klient podaje tylko identyfikator swojej firmy.

Agent wywołuje narzędzie w trakcie rozmowy, z parametrami i terminem

Każde narzędzie ma opis napisany dla modelu, typizowane parametry z informacją, co jest obowiązkowe, a co nie, oraz własny termin wykonania — od 15 sekund dla listy usług do 30 dla wyszukiwania dostępności. Termin dla każdego narzędzia nie jest detalem: bez niego wolna integracja blokuje rozmowę, a osoba po drugiej stronie słyszy ciszę.

Prawdziwe rezerwacje w systemie salonu lub kliniki

Sześć narzędzi nad Altegio: lista usług z rzeczywistymi cenami, specjaliści, pełna dostępność, tworzenie rezerwacji, anulowanie i modyfikacja. Dostępność nie zwraca tylko „wolne/zajęte”: zwraca, którzy specjaliści wykonują żądaną usługę i pierwsze wolne godziny dla każdej osoby, posortowane od najwcześniejszej, właśnie po to, aby agent mógł zaproponować konkretną alternatywę zamiast mówić „brak dostępności”.

Katalog sklepu, czytany na żywo

Cena i dostępność są odczytywane ze sklepu w momencie pytania, a nie z przestarzałej kopii. Katalog jest ładowany stronicowo, do 30 stron po 100 produktów, przechowywany w tymczasowej pamięci przez dziesięć minut na witrynę i normalizowany do jednej formy, odczytywanej bez zmian przez wszystkich konsumentów — w tym przez karuzelę produktów w komunikatorze, która potrzebuje ceny numerycznej, oraz przez widżet na stronie, który potrzebuje tytułu.

CRM-y, arkusze kalkulacyjne i kanały wiadomości

amoCRM i Bitrix24 z pełnym OAuth, odświeżaniem tokenu i sprawdzaniem stanu. Google Sheets przez dedykowane konto usługi, oddzielone od pozostałych poświadczeń, z zapisem wyzwalanym przez agenta. Telegram do powiadomień o leadach. SMS przez Infobip. Plus kanał czatu lokalnej platformy ogłoszeniowej, połączony z własnym tokenem odświeżania — rodzaj integracji, którego nie ma w żadnym międzynarodowym katalogu i który lokalnie ma bardzo duże znaczenie.

Automatyzacje działające w czasie, z licznikami

Wznowienie rozmów bez odpowiedzi, pierwszy komunikat do nowego kontaktu, wstrzymanie i ponowne uruchomienie agenta po godzinach. Każde uruchomienie zwiększa widoczne liczniki: ile uruchomień, ile wysłanych wiadomości, ile pominiętych, bo agent był wyłączony, ile z braku konfiguracji, ile błędów. Bez nich jedynym sposobem, by dowiedzieć się, że automatyzacja padła, jest skarga klienta.

Limity antynadużyć, bo decyzję podejmuje model

Narzędzie wywoływane przez model językowy potrzebuje granic, których model nie może przekroczyć. Dla SMS: w trybie „do firmy” odbiorca pochodzi z konfiguracji, nigdy od modelu; w trybie „do klienta” numer jest normalizowany i weryfikowany. Do tego dzienny limit na agenta, minuta przerwy do tego samego numeru i limit długości wiadomości. To są ogrodzenia zapisane w kodzie, a nie instrukcje w promptcie — prompt można obejść, ogrodzenia nie.

Filtry na wyjściu, dla danych, które nie mogą wyjść

Kiedy integracja zwraca więcej, niż klient powinien wiedzieć, filtrujemy na wyjściu, a nie liczymy, że agent się powstrzyma. Prawdziwy przykład: dla klienta z branży transportowej polityka zabrania, by agent podawał numer telefonu kierowcy, ale API zwracało te numery w odpowiedzi. Napisałam filtr, który rekurencyjnie przechodzi przez wynik narzędzia i usuwa pola kontaktowe kierowcy, zachowując numery dyspozytorni. Filtr jest stosowany dokładnie tam, gdzie trzeba, nie globalnie, żeby przez pomyłkę nie ukryć czegoś innego.

Jak to wygląda

Trasa, krok po kroku.

01

Inwentaryzacja: jakie systemy, jakie bramy, jakie uprawnienia

Jakie systemy wchodzą w grę, co każdy z nich ujawnia, kto ma prawo tworzyć poświadczenia i kto je rotuje. Przy każdym podstawowe pytanie: czy da się odczytać bez uwierzytelnienia? Jeśli tak, integracja staje się znacznie tańsza i dużo łatwiejsza do powtórzenia u drugiego klienta.

02

Konektor: zadeklarowane narzędzia, klucze na serwerze, terminy

Każda akcja staje się narzędziem z nazwą, opisem napisanym dla modelu, typowanymi parametrami i własnym terminem. Klucze pozostają w środowisku serwera. Na końcu agent nie „wie, jak coś zrobić” w sposób mglisty: ma skończony zestaw działań, każde z własnymi granicami.

03

Test na przypadku, który się nie udaje, a nie tylko na tym, który działa

Konektor testuje się na poprawnym żądaniu, na żądaniu niepełnym, na systemie odpowiadającym wolno i na systemie, który nie odpowiada wcale. To, co agent mówi, gdy integracja się wywala, jest decyzją projektową, a nie błędem, który odkrywa klient: wolimy uczciwy komunikat i przekazanie do człowieka niż wiarygodną improwizację.

04

Odporność na niestabilność drugiego systemu

Ponawianie z rosnącymi przerwami, ale tylko przy błędach, które mają sens ponawiać — limit szybkości albo błąd serwera, nie błędne żądanie, które będzie błędne także po raz drugi. A gdy problem jest na poziomie sieci drugiego systemu, traktowanie jest inne; poniższy przykład to dokładnie taki przypadek.

05

Przekazanie: co się zmienia, gdy zmienia się dostawca

Notujemy, co się psuje, jeśli drugi system zmieni swoje API, jakie poświadczenia wygasają i kiedy, co trzeba odnowić ręcznie. Integracja bez tej listy to ukryty dług: działa idealnie aż do dnia, w którym przestaje działać i nikt nie wie dlaczego.

Jeden centralny punkt. Wokół niego — to, co do niego trafia, osobnymi trasami.CENTRUM OPIERA SIĘ NA TYM, CO JE OTACZA
Systemy zewnętrzne wokół rozmowy: rezerwacje, katalog sklepu, CRM, arkusze kalkulacyjne, SMS i kanały wiadomości — każdy czytany na żądanie, z kluczami pozostającymi na serwerze.

Dane

Czego dotykamy, gdzie to leży i jak długo zostaje

Pytania, które zadaje każdy, kto ma inspektora ochrony danych — postawione tutaj, zanim on je zada.

Gdzie są przechowywane poświadczenia
Klucze dostawcy platformy znajdują się w środowisku serwera, nie w bazie danych i nigdy na stronie klienta. Własne poświadczenia klienta — tam, gdzie integracja ich wymaga — są przechowywane w formie zaszyfrowanej. Różnica ma znaczenie: skompromitowany klucz platformy dotyczy wszystkich, poświadczenie klienta dotyczy jednego konta; traktujemy je inaczej, bo ryzyko jest inne.
Co jest przechowywane z systemów zewnętrznych, a co nie
Katalog produktów nie jest kopiowany: jest odczytywany na żądanie i trzymany w pamięci tymczasowej przez dziesięć minut, aby dziesięć kolejnych pytań o ten sam sklep nie oznaczało dziesięciu pełnych odczytów. Rezerwacje nie są u nas dublowane — źródłem prawdy pozostaje system salonu. Zachowujemy ślad rozmowy i wynik działania, a nie kopię bazy drugiego systemu.
Co trafia do modelu językowego
Wynik narzędzia trafia do rozmowy, a więc trafia też do kontekstu modelu. Dlatego filtrowanie odbywa się na wyniku, zanim trafi do modelu, a nie w instrukcjach. Pola, których klient nie ma prawa usłyszeć, są usuwane u źródła; to, co zostało usunięte, nie może zostać podyktowane, niezależnie od tego, jak agent jest pytany.
Czasownik do integracji
Podłączenie integracji jest operacją uwierzytelnioną, powiązaną z kontem firmy, a wynikowe narzędzia są przypisywane do konkretnego agenta — nie do wszystkich. Agent ma dokładnie te narzędzia, których potrzebuje do swojej roli. To ta sama logika co przy dostępie pracownika: nie dostaje wszystkich kluczy tylko dlatego, że tak jest prościej.
Co zostało do naprawy, powiedziane wprost
Nie wszystkie moduły integracji w naszej platformie są na tym samym poziomie. Te wymienione tutaj są napisane i uruchomione. Są też rozpoczęte moduły, po kilkadziesiąt linii, które jeszcze niczego użytecznego nie robią — nie prezentujemy ich jako dostępnych i nie umieszczamy ich w żadnej ofercie. Jeśli potrzebujesz systemu, który u nas jest na takim etapie, traktujemy go jako pracę do zbudowania, z wcześniejszą weryfikacją zgodności, a nie jako pole do zaznaczenia.

Przykład

Integracja przerywała działanie co jakiś czas, i to nie była nasza wina

Sytuacja

Jeden konektor CRM działał czasami, a czasami nie, bez widocznego na pierwszy rzut oka wzorca. Żądania wisiały aż do przekroczenia limitu wykonania środowiska serwera, więc w logach pojawiał się timeout — znak, który błędnie kieruje do szukania wolnego działania we własnym kodzie.

Co zbudowaliśmy

Przyczyna była w sieci, po drugiej stronie. Nazwa domeny konta CRM rozwiązuje się na kilka adresów IP, a część węzłów klastra była niesprawna. Zwykłe żądanie HTTP wybiera jeden adres i jeśli ten nie odpowiada, nie próbuje pozostałych adresów zwróconych przez DNS — nie ma automatycznego przejścia do następnej odpowiedzi. Naprawą było zaprzestanie używania domyślnego klienta HTTP dla tej domeny: sami rozwiązujemy nazwę, otwieramy zaszyfrowane połączenia bezpośrednio do każdego adresu równolegle, z krótkim limitem czasu dla każdego, i używamy pierwszego, który odpowie; jeśli wszystkie są zimne w jednej rundzie, proces powtarza się.

Co z tego wyszło

Przerywania przestały być loterią. Co ważniejsze dla klienta: diagnostykę da się teraz ująć w jednym zdaniu — „węzły dostawcy są okresowo niedostępne, a my je omijamy” — zamiast „czasem nie działa”.

Czego nie mówi ten przypadek

To naprawa, która kompensuje cudzy problem, i trzeba to powiedzieć. Dodaje złożoność w naszym kodzie za defekt w infrastrukturze dostawcy; jeśli ten naprawi swój klaster, złożoność pozostanie u nas. Dokumentujemy to tak, aby można to było usunąć, gdy nie będzie już potrzebne.

Pytania

O co pytają ludzie, zanim zadzwonią

Jakie systemy faktycznie połączyliście, a nie teoretycznie?

System rezerwacji Altegio, z sześcioma akcjami wywoływanymi przez agenta. amoCRM i Bitrix24, z pełnym OAuth i odświeżaniem tokenu. Google Sheets, z dedykowanym kontem usługi. Sklepy WooCommerce, przez publiczne API sklepu. Telegram, do powiadomień. Infobip, do SMS. Kanał czatu lokalnej platformy ogłoszeniowej. Plus kanały wiadomości Meta i Telegram do rozmów. Dla każdego innego systemu — w tym platform sklepowych, których nie doprowadziliśmy do końca — uczciwa odpowiedź brzmi: na żądanie, po sprawdzeniu zgodności, traktowane jako praca do wykonania, a nie jako ustawienie.

Czy mój sklep musi generować dla mnie klucze API?

W przypadku WooCommerce, nie. Korzystamy z publicznego API sklepu, które nie wymaga klucza konsumenta — łączysz się za pomocą adresu strony. To też bezpieczniejsze, nie tylko prostsze: tym podejściem zastąpiliśmy starsze narzędzia, które trzymały klucze sklepu zapisane jawnie w bazie danych. W przypadku innych platform zależy to od tego, co udostępniają; sprawdzamy przed złożeniem obietnicy.

Czy agent może wykonać prawdziwą rezerwację, a nie tylko powiedzieć, że to robi?

Tak, jeśli system rezerwacji na to pozwala. Może utworzyć rezerwację, anulować ją i zmienić oraz sprawdzić dostępność przed wykonaniem. Jeden szczegół, którego uczy się tylko w praktyce: w tym systemie usługa i specjalistka działają razem — jeśli poprosisz o wolne godziny specjalistki dla usługi, której ona nie wykonuje, dostajesz zero wyników, a nie błąd. Dlatego narzędzie dostępności zwraca wszystkie specjalistki, które wykonują usługę, oraz pierwsze wolne godziny dla każdej z nich, aby agent mógł zaproponować konkretną alternatywę.

Gdzie trafiają moje klucze?

Klucze platformy pozostają w środowisku serwera, nigdy w bazie danych i nigdy na Twojej stronie. Dane uwierzytelniające, które są Twoje, są przechowywane w formie zaszyfrowanej. Zasada, którą stosujemy: jeśli klucz może wydawać pieniądze albo czytać dane wszystkich klientów, nie ma prawa znaleźć się nigdzie tam, gdzie trafia kod uruchamiany na żądanie modelu językowego.

Czy agent może wysyłać SMS-y do kogo chce?

Nie, i to jest celowa restrykcja. W trybie powiadamiania firmy odbiorca pochodzi z konfiguracji — model nie może go wybrać. W trybie do klienta numer jest normalizowany i walidowany. Ponad tym istnieje dzienny limit na agenta, minuta przerwy do tego samego numeru oraz limit długości wiadomości. To są bariery w kodzie, nie instrukcje w promptcie; prompt można obejść rozmową, bariery nie.

Co się dzieje, gdy system drugiej strony pada albo odpowiada wolno?

Każde narzędzie ma własny limit czasu wykonania, tak aby wolny system nie blokował rozmowy. Ponawiamy z rosnącymi przerwami, ale tylko przy błędach, które warto ponawiać — limit rate lub błąd serwera, nie błędne żądanie. A zachowanie agenta przy awarii zapisuje się w scenariuszu: mówi, że nie może teraz sprawdzić, i przekazuje rozmowę dalej, zamiast wymyślać prawdopodobną odpowiedź.

Co się dzieje, jeśli dostawca zmieni swoje API?

Coś się psuje, i dlatego wolimy oficjalne bramy zamiast czytania stron. Narzędzia, które wyciągają informację z HTML strony, psują się przy każdej zmianie motywu — celowo zastąpiliśmy je jedną implementacją nad oficjalnym API, właśnie po to, by nie utrzymywać dziesiątek kruchych wariantów. Gdy nie ma alternatywy, mówimy, że to kruche rozwiązanie, i traktujemy je tak właśnie.

Czy można zrobić automatyzacje bez agenta, tylko z zaprogramowanymi regułami?

Tak. Ponawianie rozmów bez odpowiedzi, pierwsza wiadomość do nowego kontaktu, zatrzymanie i ponowne uruchomienie agenta po godzinach pracy — to zaplanowane zadania, które działają samodzielnie. Każde ma własne liczniki uruchomień, wysłanych wiadomości, pominiętych wiadomości i błędów, aby dało się odpowiedzieć na pytanie „czy się uruchomiło?” liczbą, a nie przypuszczeniem.

Jak upewniacie się, że agent nie powie czegoś, czego nie powinien, z integracji?

Filtrujemy wynik zanim trafi do modelu, nie po fakcie. Konkretna sprawa, którą rozwiązaliśmy: polityka klienta zabraniała, by agent dyktował numer telefonu kierowcy, ale API zwracało te numery. Napisaliśmy filtr, który rekurencyjnie przechodzi przez odpowiedź narzędzia i usuwa pola kontaktowe kierowcy, zachowując numery dyspozytorni, zastosowany dokładnie do tego narzędzia. To, co nie trafia do modelu, nie może zostać wypowiedziane, niezależnie od tego, jak zapytany jest agent.

Na czym opierają się powyższe stwierdzenia (18 źródeł)

18 z nich to kod i pliki z naszych repozytoriów. Nie publikujemy ich nazw ani numerów linii: razem, na jednej stronie, opisałoby to zbyt dokładnie, jak zbudowane są systemy, które nie należą tylko do nas. Przechodzimy je razem z Tobą, w repozytorium, na życzenie — weryfikacja pozostaje możliwa, tylko odbywa się w rozmowie.

Co chcesz, żeby działało lepiej?

Opowiedz nam o swoim procesie. Wspólnie ustalimy, co warto zbudować, co da się połączyć i jak sprawdzimy wynik.

Porozmawiajmy