Dokumentacja OpsIQ

Budowanie, obsługa i rozszerzyć OpsIQ.

Jest to kompletna dokumentacja dla OpsIQ. Konfiguracja produktu, uruchomić wsparcie, skonfigurować AI, zarządzać CRM, zainstalować widget, budować złącza, zadzwonić REST API, otrzymywać webhaki, aplikacje na rynku pakietów, i działać samodzielnie-hostowane wdrożeń.

Przewodnik dla klientówPrzewodnik po administracjachPrzewodnik dla programistówOdniesienie do CRMZłącze SDKRESY APISelf- host
Zakres

Zakres niniejszego podręcznika

Wszystko OpsIQ robi, w jednym miejscu: jak działa każdy ekran, jak połączyć własne systemy i jak budować na nim. Zacznij gdziekolwiek, sekcje postępują zgodnie z tą samą kolejnością co pasku bocznego admin.

Zakres
Mapa dokumentacjiPodręcznik jest zorganizowany wokół produktu OpsIQ, zgodnie z tym samym porządkiem co paska bocznego admin.Mapa dokumentacjiProdukt OpsIQAUDIENCEPodmioty gospodarczeBUDYNKProgramiściRUNAdministratorzyWIDOK PRACY ŻYWEJUżyj OpsIQEkrany produktów i przepływy pracyZawarteRozszerzenie OpsIQZłącza, APIs i widgetZawarteObsługa OpsIQBezpieczeństwo, koron i rozmieszczenieZawarteOdniesieniePakiet, umowy API i umowy na haki webhookZawarte1CHOOSE AUDIENCEOperator lub programista2FOLLOW THE UILustro sekcyjne OpsIQ3USE SOURCE TRUTHStan pochodzi z budowy
Podręcznik jest zorganizowany wokół produktu OpsIQ, zgodnie z tym samym porządkiem co paska bocznego admin.
Portal Studio przewodnik po polu

Użyj dedykowanego przewodnika administratora i dewelopera dla architektury portalu, stron, komponentów, podglądu, Centrum Pomocy, tożsamości, SCIM, zarządzanych wydawnictw, rozszerzeń, migracji i certyfikacji.

Otwórz przewodnik Portal Studio

Co tu jest?

Uruchom produkt

Każdy ekran w admin: analityka, czat na żywo, bilety, CRM, baza wiedzy, Inteligencja witryny, promocje i portal konta klienta. Co każda strona robi, co oznacza liczba, a co zrobić, gdy wyglądają źle.

Połącz swoje systemy

Widżet strony internetowej, skrzynki pocztowe, przychodzące i wychodzące haki internetowe oraz biblioteka złączy dla platform takich jak Shopify, WooCommerce, WHMCS Zendesk, Stripe, Slack i Gmail.

Zbuduj własne

Złącze Builder dla złączy no- kodowych, Akcje & Triggers jeśli wolicie nie używać złączy w ogóle, a REST API z każdym działaniem, zakresem i kodem błędu.

Uruchom go

Role i uprawnienia, bezpieczeństwo, cron, diagnostyka, kopie zapasowe, a także zarówno hostowane i samodzielnie hostował rozmieszczenia.

Gdzie zacząć

1
Jeśli uruchomisz OpsIQ dzień do dnia

Przeczytaj sekcje ekranu w kolejności bocznej. Każdy otwiera się z tym, do czego jest strona, więc można zatrzymać się jak tylko masz to, co trzeba.

2
Jeśli pacjent go zaaplikuje

Dodaj Ustawienia, Bezpieczeństwo, Diagnostyka, Cron i Production. Są to sekcje, które decydują, czy wszystko inne nadal działa.

3
Jeśli budujesz integrację

Zacznij od Connectors, potem Connector Builder, a następnie REST API i haki webhacks. Przeczytaj je w kolejności, a będziesz widział każdy sposób OpsIQ może rozmawiać z innym systemem.

💡
Dwie rzeczy zmieniają to, co widzisz. Uprawnienia ukrywają strony, których nie możesz otworzyć, więc sekcja opisana tutaj może być brakująca z paska bocznego. Poproś administratora, aby sprawdził twoją rolę. A złącza posiadają etykietę dojrzałości produkcji, Beta, Podglądu lub Szablon; uruchomiona budowa i jej manifest łącznika są autorytetem, na którym masz jedną stronę, a nie tą stronę.
Zacznij tutaj.

Co OpsIQ robi dla Twojej firmy

OpsIQ jest kompletną platformą operacyjną AI- first business. Zastępuje ona analitykę, czat na żywo, helpdesk, CRM, SEO zestaw narzędzi, middleware integration i platformę deweloperską z jednym jednolitym administratorem, gdzie każde narzędzie dzieli ten sam kontekst klienta. 8-12 oddzielne produkty SaaS, można zainstalować OpsIQ raz i obsługiwać wszystko z jednego ekranu.

Platforma
Platforma OpsIQ ujednoliconaCentralny mózg AI połączony z czatem na żywo, CRM, bilety, Wywiad witryny, promocje i analityki.Czat na żywoPromocjeAI CRMInformacje o witrynieBiletyAnalizaOpsIQAI Brain1ONE WORKSPACEKażde narzędzie w jednym adminie2SHARED BRAINKontekst jednego klienta3ANYWHEREChmura lub samodzielne hostowanie
OpsIQ jest jedną platformą z jednym wspólnym kontekstem klienta, każdy narzędzie karmi i jest zasilany przez, ten sam mózg AI.

Wszystko OpsIQ robi · szczegółowo

Analiza stron internetowych i wywiad odwiedzających

Real- time śledzenie odwiedzających

Każda strona wczytywanie, kliknięcie, przewijanie i nawigacja zdarzenia jest rejestrowana w czasie rzeczywistym. Zobacz kto jest na swojej stronie teraz, jakie strony oglądają, jak długo spędzają, i skąd pochodzą, wszystko bez plików cookie trzeciej partii.

Dziennik i sesje odwiedzających

Pełna historia każdego gościa z urządzeniem, przeglądarka, system operacyjny, kraj, miasto, referrer, parametry UTM, strona docelowa i rozdzielczość tożsamości. Sesje strony grupy wyświetla w podróż, dzięki czemu można zobaczyć całą ścieżkę odwiedzający bierze.

Odtwarzanie sesji

Rozdrabnianie w stylu czasu przechwyconych sesji odwiedzających. Zobacz dokładnie co zrobili użytkownicy: ruchy myszy, kliknięcia, przewijanie, przejścia stron i interakcje form. Użyj go do zdiagnozowania problemów UX, zrozumienia punktów odcięcia i weryfikacji przepływów konwersji.

Żywa pasza

Rzeczywisty strumień czasu aktywności odwiedzających, jak to się dzieje. Zobacz widoki strony, czat rozpoczyna, formy zgłoszeń i sygnały intencyjne aktualizuje co kilka sekund. Filtruj według kraju, urządzenia lub referer, aby skupić się na konkretnych segmentach ruchu.

Górne strony

Strony uszeregowane według wizyt, czasu zaangażowania, szybkości odbijania, konwersji i działania wsparcia. Zidentyfikuj swoje najwyższej wydajności treści i stron, które wymagają poprawy.

Geo Intelligence

Podziały krajów, miast i regionów z mapami. Dystrybucja urządzeń i przeglądarek, analiza źródeł ruchu, śledzenie wyszukiwania wyszukiwarek oraz wnikliwość rynku.

Lejek intencyjny

Ścieżka sygnały intencji odwiedzających (wizyty cenowe strony, powtarzające się zwroty, schematy przeglądania dokumentacji i interakcje wsparcia) w celu identyfikacji gości, którzy mogą kupić, crun lub potrzebują pomocy.

Eksperymenty A / B

Uruchom testy podzielone na swojej stronie internetowej bezpośrednio z OpsIQ. Tworzenie wariantów, ustawić przydział ruchu, zdefiniować cele konwersji i zmierzyć znaczenie statystyczne.

Śledzenie błędów JavaScript

Przechwytywanie błędów klienta po stronie JavaScript z Twojej strony internetowej. Zobacz komunikaty o błędach, ślady stosu, dotknięte przeglądarkami, numery częstotliwości i które strony je uruchamiają. Debugowanie problemów bez oddzielnego monitorowania błędów.

Dziennik zdarzeń

Każde śledzone zdarzenie (widoki na strony, niestandardowe zdarzenia, interakcje czatu, zgłoszenia formularzy, zakupy) w wyszukiwalnym, filtrowalnym dzienniku z pełną metadanych.

Sprzedaż i przemiana

Nakazy utworów, dochody, zwroty, prenumeraty i przypisywanie konwersje do źródeł ruchu, kampanie i podróży odwiedzających. Deski rozdzielcze dochodów z porównania okresu i analizy trendów.

Liście

Wysokointencyjni odwiedzający zidentyfikowane przez wzorce zachowań. Punktacja prowadzi na podstawie wizyt stron, czas na stronie, częstotliwość powrotu, interakcje wsparcia i niestandardowe sygnały.CRM rurociąg.

Wywiad terenu (SEO i analiza treści)

Miejsce pełzania

Automatyczne czołganie się całej witryny, aby odkryć strony, wykryć uszkodzone linki, znaleźć brakujące metatagi, sprawdzić obraz alt tekst, potwierdzić Canonical URLs i mapę struktury witryny. Harmonogram pełza uruchomić codziennie, co tydzień lub na żądanie.

Techniczny audyt SEO

Kompleksowa analiza techniczna: wyniki szybkości stron, odpowiedź na telefony komórkowe, podstawowe wartości sieciowe, status certyfikatu SSL, łańcuchy przekierowania, duplikat wykrywania treści, analiza głębokości pełzania i ustrukturyzowana walidacja danych.

Audyt treści

Oceniaj każdą stronę pod kątem jakości treści, liczby słów, odczytywalności, gęstości słowa kluczowego, struktury nagłówków, wewnętrznego / zewnętrznego stosunku linka i świeżości. Identyfikacja cienkiej zawartości, duplikatów stron i luk w treści.

Wyszukiwarka z napędem AI- Name

Semantyczne wyszukiwanie całej zawartości witryny. Zadawaj pytania w języku naturalnym o treści i uzyskaj odpowiedzi z syntezą AI- z referencjami strony źródłowej.

Śledzenie rankingu SERP

Monitoruj rankingi wyszukiwarek dla docelowych słów kluczowych w Google i innych silnikach. Ustawić pozycję utworu zmienia się z czasem, porównywać z konkurentami, i zobaczyć, które strony rangi na jakich warunkach.

Badania słów kluczowych

Odkryj możliwości słowa kluczowego w oparciu o treść, analizę konkurencyjną i dane wolumenu wyszukiwania. Zdobądź propozycje nowych tematów treści, wariacje długogonowe oraz cele optymalizacji zawartości.

Analiza backlink

Monitoruj swój profil przychodzącego łącza. Sprawdź, które strony łączą się z Tobą, śledź nowe i utracone linki, analizować dystrybucję tekstu kotwicy, a także określić możliwości tworzenia linków.

Lokalna sieć SEO

Dla firm z lokalizacjami fizycznymi: wizualizować swoją lokalną widoczność wyszukiwania w obrębie sieci geograficznej. Zobacz, jak Twoje rankingi różnią się według lokalizacji, odległości od swojej firmy i intencji wyszukiwania.

Synchronizacja profilu Google Business

Podłącz profil biznesowy Google do OpsIQ. Synchronizacja opinii, postów, Q & A, zdjęcia i informacje biznesowe. Zarządzaj listą GBP od wewnątrz OpsIQ. Respond do recenzji, publikować posty i monitorować spostrzeżenia.

Raporty zaplanowane

Automatyczne raporty SEO i analityki generowane w harmonogramie (codziennie, co tydzień, miesięcznie). Raporty obejmują zmiany rankingowe, trendy ruchu, problemy techniczne znaleziono, a wydajność treści.

Wsparcie z napędem AI- motorName

Czat AI dla klienta

AI odpowiada na pytania klientów na swojej stronie internetowej 24/7 Korzystanie z bazy wiedzy, podłączonych danych platformy (zamówień, kont, subskrypcji) i niestandardowych podpowiedzi szkolenia.Anthropic), GPT- 4o (OpenAI), Gemini (Google) i Grok (xAI).

Admin AI asystent

Kopiot AI wewnątrz panelu administracyjnego, który pomaga Ci pisać odpowiedzi na bilety, projektować komunikację z klientami, analizować trendy wsparcia, przeglądać dane klientów na platformach podłączonych i wykonywać działania poprzez system złącza.

Uziemienie wiedzy o ptasiej grypie

AI jest uziemiony w Państwa artykułach bazy wiedzy, wpisów FAQ, dokumentacji produktu i podłączonych danych platformy. Nie halucynacje. Odpowiada na podstawie rzeczywistych informacji biznesowych lub eskalacji, gdy niepewne.

Automatyczne przekazywanie danych ludziom

Kiedy AI nie może rozwiązać pytania, wykrywa frustrację lub klient prosi o człowieka, automatycznie przekazuje go do zespołu z pełnym kontekstem rozmowy. Konfigurowalny spadek / timeout auto- powrót do AI.

Promby szkoleniowe w zakresie ptasiej grypy

Napisz oddzielną instrukcję dla użytkownika - zwrócona AI i admin- zwrócony AI. Kontrola tonu, granic, zasad eskalacji, zakazanych tematów i zachowań specyficznych dla biznesu. Konfiguracja Per- workspace obsługiwana.

Historia i audyt ptasiej grypy

Każda rozmowa w ramach AI jest rejestrowana z pełną prośbą / szczegółami odpowiedzi, użyciem symboli, śledzeniem kosztów, używanym dostawcą i wersją modelu.

Uwagi dotyczące ptasiej grypy

Automatyczna analiza wzorców rozmów AI. Zobacz wspólne pytania, wskaźniki rozdzielczości, częstotliwość przekazania, zadowolenie klienta według tematu i obszary, gdzie AI potrzebuje lepszego szkolenia.

Per- workspace AI config

Każda połączona strona / przestrzeń robocza może korzystać z własnego dostawcy AI, model, temperatura, token budżet i podpowiedzi. Firma SaaS może używać Claude do głównego produktu i GPT- 4o dla marki wtórnej.

Zarządzanie ptasią grypą ptaków i BYOK

Dwa tryby AI: Zarządzanie AI (zawarte w planie, nie API potrzebny klucz) lub Bring Your Own Key (użyj własnego klucza OpenAI/Anthropic/ Google / xAI API klucz do pełnej kontroli nad wyborem modelu i kosztami). Oba są pierwszorzędne, każda funkcja działa w obu trybach.

Budżety na cele symboli ptasiej grypy i kontrola kosztów

Ustaw miesięczne budżety tokena, limity przedyskutowania i alarmy o niskiej równowadze. Wydatki na utwór na dostawcę, na miejsce pracy i na rozmowę. Zapobiegaj uciekającym kosztom z twardym sufitem.

Bilety i helpdesk

System biletów krajowych

Pełna pomoc z wydziałami, priorytetami (niski / średni / wysoki / pilny), statusami, śledzeniem SLA, notatkami wewnętrznymi, odpowiedziami klientów, załącznikami do plików i konwersacjami gwintowanymi. Nie jest potrzebne zewnętrzne wsparcie.

Test na obecność ptasiej grypy i auto- odpowiedź

AI automatycznie testuje przychodzące bilety według departamentu i priorytetu. Włącz auto- odpowiedź dla bezpiecznych działów. AI projektuje i wysyła odpowiedź po konfigurowalnym opóźnieniu (domyślnie: 2 minut), aby ludzie mogli interweniować najpierw.

Zażywanie poczty elektronicznej

Podłącz skrzynkę pocztową (Gmail, IMAP lub provider- specific), aby automatycznie tworzyć bilety z przychodzących e-maili. Odpowiedzi na powiadomienia o bilecie e-maile aktualizują wątki biletów.

Portal biletów zamocowany

Zamieść portal z biletami zwróconymi do klienta na Twojej stronie internetowej. Klienci mogą złożyć bilety, obejrzeć swoją historię, odpowiedzieć na otwarcie biletów i sprawdzić status, wszystkie oznaczone na swój projekt.

Połączenie biletu

Połączenie duplikatu biletów w jedną nitkę. Połączenie biletów pokazuje [Połączone] na linii tematycznej. Cała historia rozmowy jest zachowana w ocalałym bilecie.

Powrót do AI

Po tym jak ludzki agent przejmuje bilet, użyj "Powrót do AI", aby pozwolić AI wznowić auto- odpowiedź na ten bilet. Przydatne, gdy część wymagana przez człowieka jest rozwiązywana, ale klient ma pytania następcze, które może obsłużyć AI.

Kopiot do skrzynki odbiorczej

AI- Assistant Bilet Management z widoku skrzynki odbiorczej. Kopilot sugeruje odpowiedzi, podsumowuje historię rozmów, zaleca przydziały priorytetowe / departament i może wykonywać działania na platformach podłączonych.

Obsługa czatu i czasu rzeczywistego

Skrzynka odbiorcza

Czat klienta w czasie rzeczywistym zarządzany ze ujednoliconej skrzynki odbiorczej. Zobacz wszystkie aktywne rozmowy, tożsamość klienta, historię rozmów i sugestie AI. Wielu agentów może współpracować na rozmowie.

Zasady proaktywnego czatu

Komunikaty na czacie w oparciu o zachowanie gości: czas na stronie, konkretne URL odwiedzane, przewijanie głębokości, liczba wizyt zwracanych, zamiar wyjścia lub niestandardowe zdarzenia. Przykład: wyświetlić komunikat pomocy po 60 Sekundy na stronie cenowej.

Widget czatu

Konfigurowalny widget czatu osadzony na Twojej stronie internetowej. Obsługuje czat AI, na żywo agent chat, złożenie biletów, wyszukiwania bazy wiedzy i tożsamości odwiedzających. Odpowiedzialny, dostępny i marginalne.

Badania CSAT

Zbieraj oceny satysfakcji klienta po interakcji czatu i biletów. Projektowanie ankiet z własnych pytań, wagi ratingowe i śledzenie promowań. Wyniki dostarczają do wydajności zespołu i spostrzeżenia AI.

Post- chat email ankieta

Po zakończeniu czatu, odwiedzający z znanym e-mailem mogą otrzymać jedną markę mail z podsumowaniem AI tego, co zostało obsługiwane i jednokrotnym kliknięciem "Czy to było łatwe?" Tak / Nie. Raz na nitkę, podpisane linki do jednego użytku, każdy wysłany zalogowany, a wynik ląduje na stronie Feedback jako własny sygnał obok gwiazd in- chat.

Pętla identyfikacji zwrotnej

Każdy element sprzężenia zwrotnego, który niesie osobę pokazuje je: nazwa, e-mail, klik-przez ich pełną podróż klienta i kontakt CRM, a jeden-kliknij odpowiedzi e-maila lub AI- Draft ugruntowane w swojej rzeczywistej historii.

Pisanie AI

Oddzielny asystent do pisania AI dla komponowania projektów e-mail, odpowiedzi na bilety, ogłoszenia i komunikacji z klientami. Używa własnego trybu (nie czatu mózgu) do profesjonalnego pisania biznesowego.

A- First CRM

Centrum dowodzenia CRM

Pojedynczy ekran pokazujący cały stan CRM: wartość rurociągu, prędkość transakcji, nadchodzące zadania, umowy o ryzyko, aktywność agenta i zalecenia AI. Strona główna CRm jest Twoim codziennym punktem wyjścia.

Kontakty i przedsiębiorstwa

Zarządzanie kontaktami z klientami z pełnym profilem: nazwa, e-mail, telefon, firma, tagi, cykl życia sceny, historia rozmów, historia biletów, historia zakupu i niestandardowe pola.

Sprzedaż i deska rurociągowa

Visual Kanban- styl deal planszy z dostosowalnymi etapami. Przeciągnij rozdaje między etapami, ustawia wartości, przydziela właścicieli, śledzić daty zamknięcia i zobaczyć wartość rurociągu na każdym etapie. Wiele rurociągi obsługiwane.

Coaching w zakresie transakcji na rynku sztucznym

AI analizuje każdą transakcję i zapewnia coaching: sygnały ryzyka (po cichu, konkurent wspomniany, obawy budżetowe), zalecenia działania w trybie następnym, prawdopodobieństwo wygrania, a także zasugerował dalsze terminy.

Prognozy i sprawozdania

Prognozy dochodów oparte na danych dotyczących rurociągu, historycznych stawek zamknięcia i prędkości transakcji. Raporty obejmują gazociąg według etapu, przez właściciela, źródła, kursy wymiany, średniej wielkości transakcji, a długość cyklu sprzedaży.

Środek prospekcyjny (SDR)

Poszukiwanie z napędem AI- powered, które identyfikuje potencjalnych klientów z danych odwiedzających, sygnałów wiodących i podłączonej aktywności platformy. Sugeruje cele informacyjne, opracowuje początkowe wiadomości, a wyniki jakości głównej.

Sekwencje follow- up

Automatyczne sekwencje wieloetapowe: e-mail, czekaj, e-maila, odpowiedzi na pytania, eskalacja. Określ sekwencje nowych tropów, nieaktualne oferty, po zakupie check- ins i ponownie angażowania kampanii.

Cykl życia i zatrzymanie

Ścieżka cyklu życia klienta (ołów, perspektywa, klient, cruned) z automatycznymi przejściami. Agent retencyjny monitoruje sygnały rzemieślnicze i sugeruje interwencje.

Agent zarządzający danymi

Środek AI, który stale czyści i wzbogaca dane CRM: deduplikuje kontakty, wypełnia brakujące pola, waliduje maile, standaryzuje nazwy firm i flagi nieaktualne rekordy.

Zbuduj mój CRM

Naturalna konfiguracja CRM w języku: powiedz AI jak wygląda proces sprzedaży i buduje etapy rurociągu, pola niestandardowe, szablony transakcji i zasady automatyzacji.

Kontrola funkcjonowania CRM

Automatyczne badanie jakości danych CRM: duplikaty kontaktów, umowy bez kolejnych kroków, nieregularne rurociągi, brak informacji kontaktowych oraz kompletność danych.

Wybierz opcję zaufania

Kontrola autonomii trzech poziomów dla każdego agenta CRM AI: Autopilot (AI działa niezależnie), Copilot (IG sugeruje, człowiek zatwierdza) oraz Podręcznik (AJ obserwuje tylko). Ustaw numer na agenta, na typ działania i na próg wartości transakcji.

Czterech agentów AI

CRM prowadzi cztery specjalistyczne agentów AI: Steward (jakość danych), SDR (poszukiwanie), Retention (zapobieganie brurnowi) i Analyst (raportowanie i spostrzeżenia). Każdy agent ma własne ustawienia Trust Dial.

Złącza i integracje

Złącza wstępnie zbudowane

Złącza do ponownego użycia Shopify, WooCommerce, BigCommerce, Magento 2, PrestaShop, OpenCart, osCommerce, WordPress, WHMCS, Zendesk, Stripe, Amazon SES, Poczta, Resend, SendGrid, Mailgun, Gmail, IMAP, Slack, i Google Business Profil. Każde złącze przynosi platformów- specyficzne działania AI, wiedza i synchronizacja danych.

Kreator Łączników

Zbuduj niestandardowe złącza dla dowolnej platformy, bez kodu, AI- assistant lub pełnego kodu.APIs, OAuthPrzepływ kodu autoryzacji, rejestracja autohaka zStripei proste schematy podpisu, pagination (offset, strona, kursor i nagłówek link- header), lista / błąd transformacje, kontekst multiaction i opakowania rynkowe.

Autoryzacja złącza wspomaganego AI-

ConnectorBuilderaI pomaga budować złącza: opisuje to, czego chcesz i sugeruje działania, pisze obsługi żądania i mapuje odpowiedzi API. Utrzymuje uwierzytelnianie, paginację i obsługę błędów automatycznie.

OAuth przepływ dla każdego złącza

Generic in- app OAuth Przepływ autoryzacji, który działa z dowolnym złączem. Obsługa PKCE, zarządzanie stanem w skali sitescoped, automatyczne odświeżanie symboli.OAuth parametry i OpsIQ Zajmuje się przepływem.

Busy do zdolności (rozbudowa platformowa)

Złącza nie tylko dodają działania platformy. Mogą zasilać funkcje rdzeń poprzez zdolność "autobusy". Złącze deklaruje zdolność (kalendarz, wzbogacenie, esign in CRM; local_listing, rank_data w Wywiadzie Lokalnym; web_analytics w zakresie analityki; payment_provider płatności; email_sync w skrzynce pocztowej; video_meeting w komunikatach) i wdraża jego mały zestaw metod; OpsIQ odkrywa go poprzez CapabilityRegistry i podłącza do interfejsu użytkownika, Klienta 360 Licznik czasu i działania AI. Kilka złączy może zaoferować tę samą zdolność bez blokady. Zobacz złącza /PLATFORM_CONNECTORS.mdd.

Zainstalowane wcześniej w porównaniu z rynkiem

Złącza żyją w jednym z dwóch poziomów. Zainstalowane wcześniej złącza (złączki /) są aktywne z pola rejestrującego, utrzymywane w pozycji przyłożonej tylko do bezklawiszowego odniesienia i najczęściej używanego dostawcy na zdolność (np. Google Calendar, Gmail, Google Business Profile) Złącza do rynku (marketplace_connectors/) mogą być odkrywalne, ale obojętne aż do zainstalowania, np. Microsoft 365 Kalendarz, Outlook, Document Sign, Stripe, GA4, SerpApi, Zoom. Każdy most jest na powierzchni listy rynkowej, tak aby UI i AI mogą wywołać "zainstalować z rynku" (notify- to- install), gdy zdolność nie ma gotowego dostawcy, nigdy zepsuty przycisk.

Rynek złącza

Publikuj swoje złącza do OpsIQ rynek. Złącza pakietowe z profile.json, knowledge.json, workflow_recipes.json, i podpisane archiwa. Marketplace obsługuje bezpłatne i płatne złącza z wieloźródłowych rozliczeń.

Podpisanie połączenia

Wszystkie złącza są kryptograficznie podpisane do weryfikacji integralności. Podpisanie jest sprawdzane w czasie instalacji. Użyj narzędzia resign_all_connectors, aby ponownie podpisać po aktualizacjach.

SmartLookup

Deklaracyjny system dopasowywania fuzzy- dla działań łączników OpsIQ dopasowania zapytań użytkowników do podmiotów platformy za pomocą algorytmów fuzzyScore i smartRank. Przykład: find_country("zarazki") mecze Niemcy z 88.9% Pewność siebie.

Umowy o działania

GenerałOpsIQ APIpublikuje każdy zarejestrowanyJSONdziałanie jako odkrywalne działanie o nazwie. Użyj meta.actions dla live total i dokładne wpisane kontrakty; pakiety złączy deklarują swoje własne działania sprzedawcy za pośrednictwem ujednoliconego ActionExecutor.

Przepisy dotyczące podłączania

Prebudowana receptura workflow łącząca wiele działań złącza z wspólnymi przepływami pracy. Przykład: "Kiedy pojawi się nowe zamówienie na Shopify, utwórz bilet, uaktualnij CRM i wyślij powiadomienie Slack".

Synchronizacja wiedzy

Złącza deklarują tematy wiedzy, które synchronizują się z bazą wiedzy o sztucznej inteligencji. Platformów- specyficzne artykuły pomocowe, przewodniki konfiguracji i kroki rozwiązywania problemów są automatycznie dostępne dla tej samej grypy bez ręcznego wprowadzania wiedzy.

Platforma programistów

RESY API

Nazwa JSON API obejmuje każdego zarejestrowanego administratora JSON działanie,API-klucz uwierzytelnianie, izolacja przestrzeni roboczej, skoki, ograniczenie prędkości, idemstrong pisze, OpenAPI i wygenerowana kolekcja Postman.

Webhooki

Wychodzące haki webowe dla wszystkich najważniejszych wydarzeń: zamówienia, faktury, prenumeraty, bilety, rozmowy, tropy, rejestracje użytkowników i porzucenie koszyka. Dostawa synchronizacji poprzez kolejkę zadań, ponowny odwrót wykładniczy, ochrona SSRF i autowyłączenie po kolejnych niepowodzeniach 15.

Podpisanie haka internetowego

Każdy wychodzący haczyk jest podpisany HMAC-SHA256. Sprawdź podpisy na końcówce odbiornika, aby zapewnić autentyczność haka webowego. Stabilny event_id do przetwarzania idemstrong.

Widget SDK

JavaScript SDK do śledzenia widżetu z rozdzielczością tożsamości, śledzenie zdarzeń niestandardowych, programowe sterowanie czatem i konfiguracja specyficzna dla konkursów. Zainstaluj przepisy dla React, Vue, Next.js, WordPress, Shopify oraz statyczne HTML.

Wtyczki i SDK

Serwerowe SDK i wtyczki do wspólnych ram. WordPress wtyczka, WHMCS moduł oraz biblioteki integracyjne PHP / Node.js.

Wydarzenia API

Wciśnij niestandardowe zdarzenia do OpsIQ z tyłu: zakupy, podpisy, wykorzystanie funkcji, błędy lub jakiekolwiek wydarzenie biznesowe. Wydarzenia pojawiają się w osi czasu odwiedzających i przekazują do analizy i kontekstu AI.

Podajniki do gotowania

Zbuduj automatyczne przepływy pracy wywołane zdarzeniami: nowy bilet, rozpoczęty czat, zidentyfikowany odwiedzający, zmieniony etap transakcji lub niestandardowe zdarzenie. Przyciągacze wykonują działania łączników, wysyłają haki, uaktualniają rekordy lub informują zespół.

API budowniczy

Wizualne API i webhook builder wewnątrz admin. Konfiguracja punktów końcowych, żądań testów, kontroli odpowiedzi i debug integracje bez opuszczania OpsIQ.

Zespół i administracja

Kontrola dostępu oparta na roletach

Trzy role: Właściciel (pełny dostęp, fakturowanie, strefa zagrożenia), Pełni administrator (wszystkie operacje z wyjątkiem rozliczeń i strefy niebezpieczeństwa) oraz Agent (tylko przypisane działy, brak dostępu do ustawień). Wszystkie wrażliwe strony są twardej pod względem roli.

Deska rozdzielcza do wykonania zespołu

Właściciele i pełne administracja - tylko deska rozdzielcza pokazuje czas trwania rozdzielczości, rozkład obciążenia pracą, głębokość obsługi, rozpad kanału, analiza trendów, zgodność SLA, CSAT przez agenta, ponownie otworzyć stawki, zespół podsuwania i najbardziej ruchliwe godziny.

Obecność admin i śledzenie online

Real- time, który-is-online widget w nawigacji admin. Heartbeat- based detection obecności (60- drugi ping, 300-second extension, auto- prune after 120 dni). Sprawdź, które administratorzy są obecnie aktywne i na jakich stronach.

Ustawienia przestrzeni roboczej

Każde podłączone miejsce (przestrzeń robocza) może mieć własną konfigurację AI, ustawienia połączeń, działy biletów, markę i zasady operacyjne. Globalne domyślne kaskady do pomieszczeń roboczych, które nie nadążają za nimi.

Zarządzanie wielostronicowe

Zarządzaj wieloma stronami z jednego admin OpsIQ. Każda strona ma swój własny snippet śledzenia, dane odwiedzających i konfigurację. Przełącz między witrynami z nawigacji administratora.

System szablonu e- mail

Szablony e-mail z napędem do rejestru dla wszystkich automatycznych komunikatów: powiadomienia o biletach, transkrypcje czatu, emaile powitalne, resety haseł i alarmy systemowe. Edycja HTML szablony z podglądem na żywo, żetony zmienne ({{customer_name}}, {{ticket_id}}), i globalnej kontroli układu.

Przywóz i wywóz

Import kontaktów, biletów i artykułów wiedzy z CSV/JSON Eksportuj dane odwiedzających, raporty analityczne i zapisy CRM. Przenośność danych dla migracji między systemami.

Bezpieczeństwo, zgodność i operacje

Przedsiębiorstwo SSO

OIDC (OpenID Connect) pojedyncze sign- on z pełnym runtime: odkrycie, autoryzacja, wywołanie, weryfikacja podpisu JWKS, userinfo, domen allow- listning, JIT rezerw i ochrony statusu. SAML obsługa konfiguracji.

GDPR i zgodność danych

Built- in DSAR (Data Temat Access Prośba) obsługi: eksport i usuwanie danych klientów we wszystkich systemach. Kontakt- poziom usunięcia danych obejmujących sesje, bilety, rozmowy, rekordy CRM i dzienniki e-mail. Polityka zarządzania zgodnością i retencji.

IP blokujący i chroniony przed siłami brutalnymi

Wyszczególniony blok IPs lub różni się od dostępu do witryny lub admin. Automatyczne blokowanie po skonfigurowanych nieudanych próbach logowania.IP, znacznik czasu i agent użytkownika.

HSTS i nagłówki zabezpieczające

HTTP Strict Transport Security, Nagłówki Permissions- Policy i bezpieczna konfiguracja plików cookie. Samolubne zainstalowanie może dodawać nagłówki CSP poprzez konfigurację serwera.

Hardowanie wychodzących haków

SSRF blokuje haki internetowe na prywatne / metadane IP rangi. Dostawa Async zapobiega blokowaniu aplikacji przez powolne punkty końcowe. Automatycznie wyłączyć po 15 kolejne awarie zapobiegają marnotrawieniu zasobów w martwych punktach końcowych.

Izolacja w miejscu pracy

Ścisłą izolację danych pomiędzy miejscami pracy. Odwiedzający, bilety, rozmowy, nagrania CRM i rozmowy AI są analizowane do ich miejsca pracy.

Zarządzanie cyklem rozliczania

Wsparcie dla miesięcznych, kwartalnych, półrocznych, rocznych, dwuletnich i życiowych cykli rozliczeniowych. Normalizacja walut dla wielowalutowych bramek. FX konwersji na płatności kwitu do dokładnej sprawozdawczości przychodów.

Automatyzacja na wrotkach i planowych

System budowy w koron do zadań zaplanowanych: generowanie raportów, czyszczenie danych, wznowienie subskrypcji, aktualizacje szkoleń AI, synchronizacja złączy i ponowne próby haków webowych. Diagnostyka zdrowia ze wskaźnikami ostrzegawczymi.

Polityka zatrzymywania danych

Konfiguracja jak długo przechowywane są sesje odwiedzających, transkrypcje czatu, historia rozmów AI oraz dzienniki zdarzeń. Automatyczne czyszczenie danych w wieku w celu zarządzania przechowywaniem i przestrzegania zasad zachowania.

Diagnostyka i zdrowie

System zdrowia deska rozdzielcza pokazuje status cron, łączność z bazą danych, status dostawcy AI, zdrowie złącza, stawki dostawy haka webowego i wykorzystanie pamięci. Ostrzeżenia na problemy konfiguracji i wąskie gardła wydajności.

Dla kogo OpsIQ jest

Sklepy handlowe

Zapasy

Śledź każdego gościa od lądowania do zakupu. Niech AI odpowiedzieć "Gdzie jest moje zamówienie?" za pomocą na żywo Shopify/WooCommerce/ BigCommerce dane. Zarządzanie biletami wsparcia z AI auto- Response. Uruchom gazociąg transakcji dla hurtowych i B2B prowadzi. Przychody atrybutu do źródeł ruchu i kampanii. Monitoruj porzucenie koszyka z powrotem przepływów pracy.

SaaS i firmy zajmujące się oprogramowaniem

SaaS

Monitoruj podpisy próbne i adopcja funkcji z powtórką sesji. Śledź, które strony dokumentacji konwertować. Automatyzuj wsparcie z AI uziemione w API Docs. Zarządzaj dochodami z subskrypcji i ofertami ekspansji w CRM. Połącz swoją platformę rozliczeniową (Stripe, WHMCS) do śledzenia MRR w czasie rzeczywistym. Użyj czynnika cyklu życia CRM, aby wykryć i zapobiec churn.

Agencje i wolne strzelce

Agencja

Oferujemy analizę etykiet białych i portale wsparcia dla klientów. Ścieżka prowadzi przez wiele stron klienta z jednego admin. Użyj rurociągu CRM do zarządzania perspektywami i wiodącymi projektami. Buduj niestandardowe złącza dla platform klientów za pomocą Connector Builder. Generuj markowe raporty SEO z Site Intelligence. Wyszukaj złącza rynkowe jako usługi value-add.

Hosting i infrastruktura

Hosting

Głębokie WHMCS integracja z 80+ działania AI w zakresie wyszukiwania zleceń, zarządzania usługami, DNS Auto- odpowiedź na wspólne pytania hostingowe za pomocą artykułów opartych na wiedzy. Zaangażowanie serwera śledzenia statusu strony. Zarządzaj bilety wsparcia technicznego z AI triage. Użyj drabiny cyklu rozliczeń miesięcznie poprzez życiowych planów hostingu.

Wsparcie dla przedsiębiorstw ciężkich

Wsparcie

Deflekt 40-70% powtarzających się pytań z czatem AI uziemiony w swojej bazie wiedzy. Bilety na trasa do odpowiedniego działu z AI triage. Track zespół wydajność z czasem rozdzielczości, SLA zgodności i CSAT przez agenta. Użyj pisania AI dla profesjonalnego redagowania odpowiedzi. Monitoruj trendy wsparcia z Ai spostrzeżeń.

Zespoły marketingu i SEO

Marketing

Full Site Intelligence suite: czołgi, audyty techniczne SEO, analiza treści, śledzenie rankingu SERP, badania słów kluczowych, monitorowanie back link i lokalnej sieci SEO. Zarządzanie profilami Google Business. Zaplanowane raporty na etykiecie white- dla klientów. A / B testing wbudowany w widget śledzenia. Kampania przypisywanie wszystkich kanałów.

Założyciele indywidualni i małe zespoły

Starentage

Zacznij od śledzenia i czatu, bezpłatnie dodać. Następnie dodaj bilety po uzyskaniu głośności wsparcia. Włącz CRM kiedy zaczniesz sprzedawać. Połącz platformy jak je zaadoptujesz. OpsIQ wagi od jednej osoby robi wszystko do 50- zespół operacyjny z RBAC, wydziałami i peragent śledzenia wydajności.

Przedsiębiorczość i wielomarka

Przedsiębiorstwo

Przedsiębiorstwo SSO z OIDC do centralnego uwierzytelniania. Izolacja wielofunkcyjna dla oddzielnych marek lub podziałów. Per- workspace AI konfiguracja z różnymi dostawcami i modelami. Własny rozwój złącza z dystrybucją rynku. GDPR narzędzia służące zapewnieniu zgodności i polityki zatrzymywania danych.

Co zastępuje OpsIQ

Google Analytics + Hotjar + Możliwe

Pełna analityka strony internetowej z śledzeniem odwiedzających, powtórka sesji, rankingi stron, inteligencja geo, jądra intencji, przypisanie konwersji, zdarzenia, eksperymenty A / B i śledzenia błędów JS, wszystkie prywatne, wszystko w jednej platformie.

Intercom + Drift + Tidio

Zasilanie AI- czat klienta z wiedzy uziemienia, wielodostawczy wsparcie AI, auto- przekazanie do ludzi, proaktywne zasady czatu, historia rozmowy, badania CSAT i tworzenie biletów z czatu.

Zendesk + Freshdesk & Pomoc Scout

Native system biletów z wydziałami, priorytety, SLA, AI triage, auto- odpowiedź z konfigurowalnym opóźnieniem, e-mail połknięcie, zagnieżdżony bilet, połączenie biletu, kopiarka skrzynek odbiorczych i powrót do możliwości AI.

HubSpot + Pipedrive + Salesforce

AI- first CRM z czterema specjalistycznymi agentami AI (Steward, SDR, Retention, Analyst), Kontrola autonomii wybierania zaufania, Płyta rurociągowa, Coaching umowy, prognozowanie, sekwencje, zarządzanie cyklem życia i konfiguracja języka naturalnego CRm.

Ahrefs + SEMrush + Moz

Wywiad z zautomatyzowanymi pełzaniami, audyty techniczne SEO, analiza treści, wyszukiwanie AI, śledzenie rank SERP, badania słów kluczowych, analiza backlink, lokalna sieć SEO i regularne raporty na etykiecie white.

Zapier + Make + niestandardowe zastawy middleware

Złącze SDK z 25+ wstępnie zbudowane złącza, Złącze Builder (nie- kod / AI- assisted / full- code), OAuth przepływ, autorejestracja haka webowego, duży katalog definicji działań łączników, które stają się wykonalne tylko wtedy, gdy odpowiednie złącze jest zainstalowane, włączone, skonfigurowane i zatwierdzone, SmartLookup, Market i podpisane pakiety.

Kierownik profilu biznesowego Google

Złącze z pełną GBP: zarządzanie przeglądem, publikacja pocztowa, zarządzanie Q & A, przesyłanie zdjęć, synchronizacja informacji biznesowych, śledzenie spostrzeżeń i AI- zasilanego recenzji odpowiedzi, wszystko od wewnątrz OpsIQ.

Oddzielne narzędzia szablonu poczty elektronicznej

Szablony email z edytorem wizualnym, podglądem na żywo, zmiennymi chipami, globalną kontrolą układu i modyfikacją zdarzeń dla wszystkich automatycznych komunikatów.

Deski rozdzielcze do zarządzania zespołami

Budowa-w wydajności zespołu: czas rozdzielczości, obciążenie pracą, zgodność SLA, CSAT przez agenta, stawki ponownego otwarcia, najbardziej ruchliwe godziny, śledzenia obecności w czasie rzeczywistym i podział na działy.

Narzędzia zgodności GDPR

Native DSAR obsługi, usuwanie danych we wszystkich systemach, zarządzanie zgodą, polityki retencji i ścieżki audytu, wbudowane w platformę, nie przymocowane.

Dwie edycje

Przewidywane wdrożenie

OpsIQ działa na zarządzanej infrastrukturze. Operacja produktu jest taka sama; infrastruktura, aktualizacje i kopie zapasowe są obsługiwane przez operatora hostingowego.OpsIQ w czasie pracy zamiast przepływów na rachunkach handlowych lub marketingowych.

Moduł self-host

Instaluj OpsIQ na własnym serwerze dla pełnej kontroli nad danymi, marką, aktualizacjami i integracjami. Wymaga PHP 8.4+, MySQL 5.7+ lub MariaDB 10.3+, HTTPS i OpsIQ zjednoczony cron. WHMCS integracja jako moduł addonu. Pełna suwerenność danych.

Zalecane polecenie odczytu

1
Szybki start

Postępuj zgodnie z 30-minute przewodnik konfiguracji, aby uzyskać śledzenia, czatu i podstawowej SI pracy na swojej stronie internetowej.

2
Deska rozdzielcza i analityka

Dowiedz się, jak odczytywać dane odwiedzających, skonfigurować powtórkę sesji, zidentyfikować tropy i zrozumieć wzorce ruchu.

3
Wywiad terenu

Uruchom swój pierwszy SEO crawl, sprawdź swoje zdrowie techniczne i skonfigurować SERP rank śledzenia dla docelowych słów kluczowych.

4
Bilety i wsparcie

Utwórz działy, skonfiguruj auto- odpowiedź z AI, podłącz e-mail połknięcie i wyszkolić swoją AI do obsługi wspólnych pytań.

5
CRM

Zorganizować kontakty, zbudować rurociąg, skonfigurować agentów AI, ustawić poziomy Trust Dial i niech AI trenuje swoje umowy.

6
Złącza i narzędzia do deweloperów

Podłącz platformę e-commerce / fakturowanie, zbuduj niestandardowe złącza, skonfiguruj haki i integruj się za pośrednictwem REST API.

💡
Nowy OpsIQ? Zacznij od przewodnika Quick Start poniżej. Możesz mieć śledzenia i podstawowe rozmowy AI uruchomiony w 30 minuty.
Zacznij tutaj.

Szybki start w minutach 30

Postępuj zgodnie z tymi krokami, aby OpsIQ uruchomiony. Każdy krok opiera się na poprzednim. Do końca będziesz miał śledzenie odwiedzających, czat AI i podstawowe wsparcie biletów.

Ustawienia
Szybka lista kontrolna startowaWyświetlana lista kontrolna konfiguracji pokazująca instalację widget, połączenie platformy, szkolenie AI, zaproszenie zespołu i go- live, z paskiem postępu procent 60.Zaczynajcie.setupZainstaluj widżet OpsIQDONPodłącz platformę (WHMCS, Shopify...)DONTrenuj swoją sztuczną inteligencję na swojej treściDONZaproś swój zespółSprawdź i idź na żywo.Ustawienie postępów3 z 5 · 60%1STEP 1Zainstaluj widżet2STEP 2Połącz i trenuj AI3STEP 3Zaproś i idź na żywo
W 30-minute ścieżka: zainstalować widget, połączyć platformę, trenować AI, zaprosić zespół, a następnie przejść na żywo.

W 30- Ustawienie minuty

1
Aktywuj swoją licencję

Wprowadź swój klucz licencyjny w admin OpsIQ. Przejdź do Ustawień, wprowadź klucz licencji dostarczony dla tej instalacji i kliknij przycisk Aktywacja. Powinieneś zobaczyć zieloną odznakę "Aktywny".

2
Ustaw swoją tożsamość biznesową

Przejdź do Ustawienia i wypełnij swoją nazwę firmy, przemysł, strefa czasowa, domyślna waluta i godziny wsparcia. Informacje te są wykorzystywane przez AI podczas odpowiedzi na pytania klientów i analityki dla raportów Timezoneaware.

3
Wybierz dostawcę AI

Przejdź do konfiguracji AI i wybierz dostawcę. Opcje: Claude (Anthropic), GPT- 4o (OpenAI), Gemini (Google), lub Grok (xAI). API klawisz jeśli używasz własnego klucza, lub użyj zarządzanej SI jeśli jest dostępny w Twoim planie. Kliknij przycisk "Test connection" aby zweryfikować.

4
Zainstaluj widżet śledzenia

Go to Connected Sites, copy the tracking snippet, and paste it before the closing </body> tag on your website. Visit your site in a private browser, then check the Live Feed in OpsIQ. You should see yourself as a visitor within 15 seconds.

5
Podłącz platformę

Zastosowanie Shopify, WooCommerce, WHMCS, lub innej obsługiwanej platformy, przejdź do Connectors, znaleźć swoją platformę, wprowadzić referencje i kliknij Test Connection. Daje to dostęp AI do danych zamówienia, profili klientów i kontekstu wsparcia.

6
Zaproś swój zespół

Idź do Team, kliknij Zaproś, wprowadź ich e-mail i rolę (Właściciel, Pełnego Administratora lub Agent). Agenci mogą tylko dostęp do działów, które im przypisać. Właściciele i Pełni Administratorzy zobaczyć wszystko.

Najszybsza możliwa ścieżka (5 minut)

Krok 1: Zainstaluj widżet

Kopiuj fragment z Connected Sites i wklej go na swojej stronie internetowej. To daje śledzenie natychmiast.

Krok 2: Włącz AI

Przejdź do konfiguracji AI, wybierz dostawcę, wprowadź swój klucz i zapisz.

Gotowe

Teraz masz śledzenie odwiedzających i czat AI. Możesz dodać bilety, CRM i złącza później.

Dzień 2: Zrób to przydatny

Dodaj wiedzę

Przejdź do bazy wiedzy i dodaj 5-10 artykuły o najczęściej zadawanych pytaniach. AI używa ich do dokładnej odpowiedzi na pytania klientów.

Tworzenie działów

Idź do Biletów i utworzyć co najmniej działy 2 (np. "Sprzedaż" i "Wsparcie"). Przydziel członków zespołu każdemu z nich.

Napisz swój sygnał AI

Przejdź do AI Training i napisz Poświadczenie AI klienta, które opisuje swoje zasady biznesowe, ton i eskalacji.

Przetestować rozmowę

Otwórz stronę internetową w prywatnej przeglądarce i czatuj z AI jako klient. Sprawdź, czy odpowiedzi są dokładne i ton jest odpowiedni.

Tydzień 1: Zbuduj swoje operacje

Połącz e- mail

Ustawia skrzynkę pocztową (Gmail, IMAP lub złącze dostawcy), aby e-maile klientów automatycznie tworzyć bilety.

Utwórz auto- odpowiedź

Włącz auto- odpowiedź biletu dla bezpiecznych działów. 2-minute opóźnienia, żeby ludzie mogli interweniować pierwsi.

Analiza przeglądowa

Sprawdź Dashboard codziennie. Spójrz na liczbę odwiedzających, szybkość odbijania, najlepsze strony i sprzedaży, jeśli śledzenie jest połączone.

Uruchom CRM

Otwórz AI CRM i pozwól OpsIQ importować kontakty z połączonych platform.

Miesiąc 1: Optymalizacja

Przegląd historii AI

Sprawdź AI Historia tygodnik. Szukaj złych odpowiedzi, nieodebrane pytania i możliwości dodania wiedzy.

Dodaj zasady proaktywne

Utwórz regułę: jeśli gość jest na stronie cenowej 60+ sekund, pokaż wiadomość czatu z pytaniem, czy potrzebują pomocy.

Zbudowanie złącza

Jeśli używasz platformy, która nie ma wbudowanego złącza, użyj Connector Builder do stworzenia takiego.

Ustawia haki

Podłącz OpsIQ do wewnętrznych narzędzi za pomocą wychodzących haków internetowych na bilety, czat i imprezy sprzedaży.

Mogę pominąć sztuczną inteligencję i użyć śledzenia?+

Tak. Dostawca AI jest opcjonalny. OpsIQ pracuje jako czysta platforma analityczna i biletowa bez AI. Możesz włączyć AI później, gdy jesteś gotowy.

Mogę pominąć złącza i dodać je później?+

Tak. Złącza wzbogacają AI danymi specyficznymi dla platformy, ale OpsIQ działa bez nich. Zacznij od śledzenia i czatu, a następnie podłącz platformy w razie potrzeby.

Co jeśli nie mam jeszcze strony internetowej?+

Możesz nadal używać OpsIQ na bilety, CRM i współpracy zespołowej. Widget śledzenia jest opcjonalny. Dodaj go, gdy Twoja strona internetowa jest gotowa.

Skąd mam wiedzieć, czy widżet jest poprawnie zainstalowany?+

Odwiedź swoją stronę internetową w prywatnej / incognito przeglądarki. Następnie sprawdź OpsIQ Na żywo. Powinieneś zobaczyć swoją wizytę pojawiają się w 15 sekund. Jeśli nie, sprawdź: (1) jest zaciśnięty prawidłowo, (2) jest poprawny klucz strony, (3) są adrenolitykami lub nagłówkami CSP blokującymi skrypt.

Zacznij tutaj.

Pełna mapa produktu

OpsIQ nie jest jedną z funkcji. Jest to administrator operatora, widget strony internetowej, warstwa wsparcia AI, bilet / helpdesk systemu, pełny CRM z czterema agentami AI; pakiet Inteligentny Strona, platforma złącza z rynkiem i powierzchni deweloperskiej. Oto każdy składnik zawiera.

Administrator operatora

Dashboard, live feed, visitors log, sessions, sesja replay, top pages, geo intelligence, intention level, events logue, A / B experiments, JS error tracking, sales and conversion, leaders, AI CRM (centrum dowodzenia, kontakty, firmy, umowy, deal board), deask coaching, prognoza, prospecting, sekwencje, cykl życia, dane steward, Build my CRMRM, CRMM config, CrM health, CR.M heatment, CRN API), bilety, chat inbox, proaktywne zasady, badania CSAT, e-maile projekty, skrzynki pocztowe, konfiguracja AI, szkolenie AI w historii, wgląd AI do bazy wiedzy, złącza, Connector Builder, rynek, połączone strony, zarządzanie zespołami, wydajność zespołu, ustawienia, diagnostyka i licencja.

Powierzchnia skierowana na użytkownika

Widget śledzenia stron internetowych (analityka + czat + bilet embed + wiedza bazowy wyszukiwania), klienta AI chat, portal składania biletów, obsługi identyfikatora odwiedzających, pliki do pobrania, przeglądy CSAT widget, i centrum pomocy dla klientów.

A- First CRM

Centrum dowodzenia, kontakty, firmy, transakcje, tablica pipeline z funkcją przeciągania i upuszczania, coaching transakcji AI (sygnały ryzyka, następne najlepsze działania, prawdopodobieństwo wygranej), prognozowanie przychodów, agent poszukiwań (SDR), automatyczne sekwencje kontynuacyjne, zarządzanie cyklem życia i retencją, steward danych (dedup, enrich, validate), Build my CRM (konfiguracja języka naturalnego), konfiguracja CRM, kontrola kondycji CRM, Trust Dial (Autopilot / Copilot / Manual na agenta), czterech specjalistycznych agentów (Steward, SDR, Retention, Analyst) oraz CRM API z webhookami.

Strona Wywiad apartament

Automatyczne pełzanie strony, audyt techniczny SEO (prędkość, mobile, Core Web Vitals, SSL, przekierowanie, dane ustrukturyzowane), audyt treści (ilość słów, czytelność, gęstość słowa kluczowego, struktura nagłówków), wyszukiwanie semantyczne napędzane przez AIA, śledzenie rankingów SERP na wszystkich silnikach, badania słowne z punktacji losowej, analiza i monitoring połączeń wstecznych, lokalna wizualizacja sieci SEO, synchronizacja profilu biznesowego Google (przeglądy, posty, Q & A, zdjęcia, spostrzeżenia), regularne raporty (codziennie / co tydzień / miesiąc) oraz etykieta White- label PDF wyniki dla agencji.

AI i automatyzacja

Czat AI klienta (wielodostawca: Claude, GPT- 4o, Gemini, Grok), asystent admin AI, uziemienie wiedzy o sztucznej inteligencji, automatyczne przekazanie z konfigurowalnym zwrotem, konfiguracja w przestrzeni pracy AI i zarządzane AI oraz BYOK tryby, budżety tokena i kontrola kosztów, ścieżka audytu historii AI, analiza spostrzeżeń AII, Bilet triage AI-response z opóźnieniem, pisanie AI (odrębny sygnał) i admin inbox copilot.

Złącza i integracje

25+ wcześniej zbudowane złącza (Shopify, WooCommerce, BigCommerce, Magento2, PrestaShop, OpenCart, osCommerce, WordPress, WHMCS, Zendesk, Stripe, Amazon SES, Poczta, Resend, SendGrid, Mailgun, Gmail, IMAP, Slack, Google Business Profil), Connector Builder (kod nie- / AI- assistant / full- code), ogólny OAuth przepływ z PKCE, rynek złączy z płatną dystrybucją, podpisanie i weryfikacja połączeń, SmartLookup fuzzy dopasowanie, duży katalog definicji działania HTTP, których dostępność zależy od instalacji łączników, enablement, konfiguracja i walidacja, synchronizacja wiedzy i przepisy dotyczące przepływu pracy.

Platforma programistów

RESTAPI(odwiedzający, wydarzenia, bilety, kontakty, ustawienia, połączenia), openAPI spec,API zarządzanie kluczami, wychodzące haki (async, podpisane, ponownie testowane, strzeżone SSRF-, autowyłączenie), ZdarzeniaAPI dla niestandardowego przyjmowania zdarzeń, widget SDKz rozdzielczością tożsamości, uruchamia książki kucharskie, kontrakty akcji, złącze SDK, backpackaging, server- side SDK (PHP, Node.js), WordPress plugin, oraz WHMCS moduł.

Ustawienia i operacje

Tożsamość biznesowa, konfiguracja AI na miejsce pracy, ustawienia śledzenia, bezpieczeństwo (HSTS, Permissions- Policy, IP blokowanie, ochrona przed brutalną siłą), RBAC (Właściciel / Pełnomocnik / Agent), zarządzanie zespołami i zaproszeniami, tablica rozdzielcza wyników zespołu, śledzenie obecności admin, system szablonów email (rejestry-, edytor wizualny, żetony zmienne), projektant badań, wiedza o domenie, charakterystyka biletów, polityka retencji danych, zarządzanie cyklem rozliczeniowym (miesięcznie przez całe życie), normalizacja waluty, import / export, diagnostyka, cron automatyzacja i strefa zagrożenia.

Bezpieczeństwo i zgodność

Przedsiębiorstwo SSO (OIDC z weryfikacji JWKS, JIT), SAML konfiguracja, GDPR/DSAR obsługa (eksport i usuwanie we wszystkich systemach), usuwanie danych na kontakt, zarządzanie zezwoleniami, izolacja przestrzeni roboczej (dokładne badanie warstwy kriogenicznej), ścieżki audytu, nieudany śledzenie logowania, IP blokowanie, wychodzące obudowy SSRF oraz zasady zatrzymywania danych.

Most dostawcy

Zarządzanie AI proxy poprzez OpsIQ dostawca URL, Site Intelligence połączeń, walidacji licencji, raportów zdrowotnych, PDF renderowanie i eksport danych, wszystkie kierowane przez skonfigurowanego punktu końcowego dostawcy, a nie bezpośredniego sprzedawcy API połączenia z serwera.

Każda strona administracyjna

Deska rozdzielcza

Bazowa

Codzienne centrum dowodzenia: przegląd ruchu, liczenie gości na żywo, podsumowanie sprzedaży, głębokość kolejki wsparcia, alarmy aktywności AI i skróty szybkiego działania.

Żywa pasza

Analiza

Strumień odwiedzin w czasie rzeczywistym: widoki na stronę, czat rozpoczyna się, tworzy zgłoszenia i sygnały intencyjne aktualizujące co kilka sekund filtry kraju, urządzenia i referera.

Dziennik odwiedzających

Analiza

Kompletne zapisy odwiedzin: urządzenie, przeglądarka, OS, kraj, miasto, referrer, UTM params, strona docelowa, tożsamość i pełna historia oglądania.

Sesje

Analiza

Widok pogrupowany w podręcznikach: przepływ strony, czas na stronie, głębokość przewijania, ścieżka konwersji i strona wyjścia dla każdej sesji odwiedzających.

Odtwarzanie sesji

Analiza

Odtwarzanie czasu przechwyconych zdarzeń: ruch myszy, kliknięcia, przewijanie, przejścia na stronę i interakcje w postaci diagnozy UX.

Górne strony

Analiza

Ranking wydajności strony: wizyty, czas zaangażowania, szybkość odbijania, konwersje, interakcje wsparcia i kierunek trendu.

Geo Intelligence

Analiza

Raporty geograficzne: podział na kraje / miasta z mapami, dystrybucja urządzeń, udział w przeglądarce, źródła ruchu i penetrację rynku.

Lejek intencyjny

Analiza

Śledzenie intencji behawioralnych: wizyty cenowe, częstotliwość powrotu, przeglądanie doków, interakcje wspomagające oraz sygnały niestandardowe z prawdopodobieństwem konwersji.

Dziennik zdarzeń

Analiza

Historia zdarzeń: przeglądy stron, niestandardowe wydarzenia, rozmowy, zakupy, formularze zgłoszeń z pełną metadanych i filtrowanie.

Eksperymenty A / B

Analiza

Testy podzielone: tworzyć warianty, przydzielać ruch, określić cele, znaczenie pomiaru i deklarować zwycięzców, wszystko z wewnątrz OpsIQ.

Błędy JS

Analiza

Granica przechwytywania błędów: wiadomości, ślady stosu, dotknięte przeglądarki, częstotliwość, dotknione strony i śledzenia trendów.

Sprzedaż

Sprzedaż

Deska rozdzielcza dochodów: zamówienia, wznowienie działalności, zwroty, przypisanie według źródła, wyniki kampanii, porównanie okresu i analiza trendów.

Liście

Sprzedaż

Zarządzanie wiodące: punktacja, przypisanie źródła, status CRM, dane kontaktowe, sygnały behawioralne i trajektoria rurociągów.

AI CRM

CRM

Full CRM: centrum dowodzenia, kontakty, firmy, oferty, deska rurociągowa, coaching, prognoza, poszukiwanie, sekwencje, cykl życia, zarządzanie danymi i zdrowie.

Bilety

Wsparcie

Skrzynka odbiorcza: działy, priorytety, śledzenie SLA, testy na obecność AI, auto- odpowiedź, notatki wewnętrzne, załączniki do plików, łączenie się i zarządzanie statusem.

Skrzynka odbiorcza

Wsparcie

Na żywo: AI i czat człowieka, przekazanie, współpraca, historia rozmowy, tożsamość klienta, i kolekcja CSAT.

Wersje robocze wiadomości e-mail

Wsparcie

Zarządzanie e-mailem: przychodząca poczta do biletów, zawartość odpowiedzi wspomaganej przez AI-, wybór szablonu i konfiguracja skrzynki pocztowej.

Konfiguracja AI

AI

Konfiguracja dostawcy: wybrać Claude / GPT- 4o /Gemini/ Grok, enter API klucz lub włączyć zarządzane AI, ustawiony model, temperatura i token budżetów na przestrzeń roboczą.

Szkolenie w zakresie ptasiej grypy

AI

Szybkie wpisywanie: podpowiedzi skierowane do klienta i ustawione na admingację, zasady eskalacji, wytyczne dotyczące tonu, zabronione tematy oraz konfiguracja granic.

Historia ptasiej grypy

AI

Audyt rozmów: pełne logi zapytań / odpowiedzi, wykorzystanie symboli, koszt na rozmowę, dostawca, wersja modelu i wynik rozdzielczości.

Uwagi dotyczące ptasiej grypy

AI

Analiza wzorca: wspólne pytania, wskaźniki rozdzielczości, częstotliwość przekazywania danych, zadowolenie według tematu i identyfikacja luk szkoleniowych.

Podstawa wiedzy

AI

Zawartość treningu AI: artykuły, wpisy FAQ, dokumenty produktu, wiedza o złączach i niestandardowe wpisy. Semantyczne i słowa kluczowe wyszukiwanie Uziemienia AI.

Łączniki

Integracje

Gąsienica integracji: zainstalowane złącza, stan zdrowia, inwentaryzacja działań, zarządzanie kredytami, przeglądarka rynku i Connector Builder.

Połączone strony

Ustawienia

Zarządzanie stroną: śledzenie fragmentów, klucz strony, konfiguracja widżetu, ustawienia domen i izolacja przestrzeni roboczej.

Zespół

Ustawienia

Zarządzanie użytkownikami: zaproszeni członkowie, przydzielanie ról (właściciel / pełny administrator / agent), ustawienie dostępu do działu oraz zarządzanie uprawnieniami.

Wykonanie zespołu

Ustawienia

Wskaźniki operacyjne: czas rozdzielczości, obciążenie pracą, zgodność SLA, CSAT według agenta, wskaźnik ponownego otwarcia, najbardziej pracowite godziny i analiza trendów.

Ustawienia

Ustawienia

Konfiguracja: tożsamość biznesowa, konfiguracja AI, śledzenie, bezpieczeństwo, marka, retencja, szablony e-mail, fakturowanie, import / eksport, diagnostyka i strefa zagrożenia.

Licencja

Ustawienia

Zarządzanie planem: status licencji, funkcje planu, wskaźniki użytkowania, data odnowienia oraz opcje aktualizacji / obniżenia.

Zacznij tutaj.

Wjazd z przewodnikiem

Podróż na pokład zmienia nową instalację w pracującą przestrzeń roboczą OpsIQ i może zostać pozostawiona i wznowiona bez utraty postępu.

Ekran produktu
Wsiadanie na pokładNa pokładzie pokazuje każdy obszar konfiguracji, jego stan i kolejne działania do zakończenia.Wsiadanie na pokładprzestrzeń roboczaPROGRESS60%COMPLETED6NASTĘPNYWidgetWIDOK PRACY ŻYWEJLicencjaPotwierdzenie pozwolenia na produktGotowePodmiot świadczący usługi w zakresie zwalczania grypy ptakówWybierz dostawcę i klucz testowyGotoweMarkaTożsamość i ton przedsiębiorstwaGotoweStrona internetowaDodaj stronę i zainstalować widżetNastępny1COMPLETE BASICSLicencja, marka, AI2CONNECT DATAStrona i złącze3VERIFY LAUNCHZespół, e-mail, czeki
Na pokładzie pokazuje każdy obszar konfiguracji, jego stan i kolejne działania do zakończenia.

Zalecany ciąg

  1. Licencja: Potwierdzenie licencji i potwierdzenie aktywności miejsca pracy.
  2. Podmiot odpowiedzialny za dostarczanie informacji o ptasiej grypy: wybrać dostawcę / model, wprowadzić referencje i uruchomić test połączenia. AI może być pominięty, jeśli przestrzeń robocza będzie początkowo korzystać z analizy i biletów tylko.
  3. Tożsamość biznesowa: ustawić nazwę, przemysł, opis, użytkownika - zwrócony ton i szczegóły marki używane przez widget i AI.
  4. Złącze: umożliwiają co najmniej jedną zewnętrzną platformę, jeżeli OpsIQ potrzebuje zamówień, klientów, biletów, e-maili lub innego kontekstu platformy.
  5. Strona i widżet: utworzyć stronę / miejsce pracy, skopiować klucz witryny i zweryfikować prywatną wizytę przeglądarki w Live Feed.
  6. Zespół i routing: Zaproszenie admin / agentów, tworzenie działów, ustawienie routingu e-mail i potwierdzić preferencje powiadomień.
  7. Kontrole na żywo: czat testowy, bilet, synchronizacja złączy, cron, email wychodzący, haki webhacks i nagłówki bezpieczeństwa.

W trakcie podróży można wykonać wszystkie czynności. Powrót do Onboarding powinien być bardziej kompletny niż zmuszanie do ponownego uruchomienia.

Zacznij tutaj.

Administracja nawigacji i uprawnień

Pasek boczny OpsIQ jest zdatny do użytku. Mapa ta wyjaśnia, gdzie mieszka każdy obszar operacyjny i dlaczego strona może nie być widoczna dla każdego administratora.

Ekran produktu
Nawigacja OpsIQGrupy boczne OpsIQ według obszaru pracy; indywidualne linki pojawiają się tylko wtedy, gdy obecna rola może ich używać.Nawigacja OpsIQprzestrzeń roboczaGROUPS8StronyZezwolenieSEARCHDostępneWIDOK PRACY ŻYWEJWsparcieBilety, e-mail, CSAT, wiedzaOtwórzCRMKontakty, rurociągi, oferty, poszukiwaniaOtwórzAutomatyzacjaWorkflow, rules, goalsOtwórzBezpieczeństwo i prywatnośćPrzegląd, audyt, zgoda, blokiAdmin1PICK A GROUPDopasuj pasek boczny2CHECK ROLEUkryte środki ograniczone3USE PAGE HELPOtwórz pasującą sekcję
Grupy boczne OpsIQ według obszaru pracy; indywidualne linki pojawiają się tylko wtedy, gdy obecna rola może ich używać.
Wsparcie

Bilety, email zespołu platformy, CSAT, Centrum Pomocy i przepływów czatbot.

CRM

Dzienne powierzchnie sprzedaży: CRM Home, Centrum dowodzenia, kontakty, rurociąg, prognoza, cykl życia, poszukiwanie, segmenty, liderów, zatwierdzenia transakcji, zarządzanie danymi, narzędzia wzrostu i strumień aktywności.

Automatyzacja

Event-defaulted workflow, lifecycle rules and conversion goals.

Marketing

Połączenia, proaktywne wiadomości, ogłoszenia, Promocja Studio, Badanie Studio, kampanii push i wycieczki z przewodnikiem.

Analiza

Najpierw zgłoś powierzchnie - Analiza Hub, spostrzeżenia AI, sprzedaż, klienci, prowadzenie, lejki, testy A / B, powtórka sesji, niestandardowe tablice rozdzielcze i raporty planowe - z surowym gościem, sesją, stroną, geografią i dziennikami zdarzeń w podsekcji Surowych Danych.

Strona standardowa

Wywiad, zespół i wsparcie siedzą poza grupami jako bezpośrednie wpisy.

Integracje

Połączenia, działania i wyzwalacze, skrzynki pocztowe, szkice, ustawienia poczty elektronicznej, punkty końcowe przychodzące, wychodzące haki internetowe orazAPIKlucze.

Bezpieczeństwo i prywatność

Przegląd bezpieczeństwa, prywatność i zgodność, zgoda na pliki cookie, działania audytowe, błędne logowanie, zablokowaneIPsorazJavaScriptbłędy.

Ustawienia

Podstawy przestrzeni roboczej (ogólne, zespół, strony, języki), następnie składalne podsekcje: AI Brain (instrukcje, konfiguracja, ocena, historia), CRM Setup (budowniczy, niestandardowe pola, punktacja ołowiu, zdrowie), Data & Health (diagnostyka, eksport) i Getting Started (pokładowy, pomoc).

Strony nie mogą otworzyć się są ukryte z paska bocznego. Strony obecnego planu nie zawiera pobyt widoczny z Ulepszenie tag i otworzyć ekran aktualizacji w aplikacji.

Bezpośrednie trasy są nadal sprawdzane po stronie serwera. Ukrywanie łącza bocznego nie jest granicą bezpieczeństwa: każde działanie chronione musi przejść przez jego pozwolenie i sprawdzenie miejsca pracy.

Analiza

Gąsienica analityczna

Gąsienica Analytics przynosi wsparcie, czat, AI, odwiedzający i agent raportujące w jednym miejscu pracy filtrowanym datami z wynikami eksportowymi.

Ekran produktu
Gąsienica analitycznaW programie Analytics Hub wyświetlany jest zakres dat, karty metryczne i zakładki do obsługi technicznej, czatu, AI, odwiedzającego i agenta.Gąsienica analitycznaprzestrzeń roboczaKARY184AI RESOLVE63%CSAT4.7WIDOK PRACY ŻYWEJWsparcieStworzony, zamknięty, oczekujący, SLATabRozmowaAI / wyniki dla człowieka i czas obsługiTabAIZaufanie, opinie zwrotne, użycie symboluTabAgentObjętość, szybkość i zadowolenieTab1CHOOSE DATESPreset lub niestandardowe2CHANGE TABWsparcie dla agenta3EXPORTPobierz CSV
W programie Analytics Hub wyświetlany jest zakres dat, karty metryczne i zakładki do obsługi technicznej, czatu, AI, odwiedzającego i agenta.

Filtry i urządzenia sterujące

  • Użyj presetu lub niestandardowych od / do Zakres, następnie Odśwież odbudować każdą kartę i wykres na ten sam okres.
  • Eksport CSV eksportuje aktywny obraz analityczny zamiast zrzutu ekranu.
  • Przeszukiwanie przestrzeni roboczej jest automatyczne; zmiana stron zmienia podstawowy zbiór danych.

Co każda karta mierzy

  • Wsparcie: bilety utworzone / zamknięte / oczekujące, pierwsza odpowiedź, rozdzielczość, pierwsze-kontakt rezolucji, SLA, i priorytetu / departament / stan podziałów.
  • Rozmowa: sesje rozpoczęły się, rezolucje AI, eskalacje, porzucenie, obsługa czasu, wiadomości na sesji, i AI / człowiek / wszystkie CSAT.
  • AI: średnia pewność, niski poziom zaufania, dokładność triage, informacje zwrotne, odchylenie wiedzy, użycie tokena / pamięci podręcznej, oraz elementy, które wymagają przeglądu.
  • Odwiedzający: trendy ruchu i zaangażowania w wybranym okresie.
  • Agent: obciążenie pracą, prędkość, zamknięcie i środki satysfakcji.

Użyj programu Analytics Hub do przeglądu zespołu; użyj dedykowanych stron: Odwiedzający, Bilety, CSAT, Historia AI i Wydajność Zespołu, jeśli potrzebujesz badania poziomu rekordów.

Analiza

Deska rozdzielcza

Deska rozdzielcza jest Twoim codziennym centrum dowodzenia. Pokazuje ruch, sprzedaż, obciążenie wsparcia, aktywność AI i wskaźniki konwersji w jednym widoku. Otwórz ją każdego ranka, aby zrozumieć, co stało się w nocy i co wymaga uwagi dzisiaj.

Deska rozdzielcza
Przegląd deski rozdzielczejEkran przeglądowy prowadzony przez panel OpsIQ Intelligence AI (z dziennym krótkim, Smart alerts, Prognoza), płytki widżetowe KPI i siedmiodniowy widget ruchu, plus kontrola układu reset.Przeglądprzestrzeń roboczaINTELLIGENCJA OPSIQWybierz analizę i OpsIQ Pisze to.Codzienne streszczenieInteligentne wpisyPrognozaZmień układWIZYTORY DZIŚ2,481+12%DOCHODY$8. 2k+5%TKEKTY OTWARTE143 SLARuch - ostatni 7 dni1AI-FIRSTPanel wywiadu OpsIQ2WIDGETSKPI płytki, które organizujesz3MŁODZIEŻZmień układ w każdej chwili
Prawdziwy ekran przeglądania: panel wywiadu OpsIQ na górze (wybierz analizę i to pisze) powyżej widżetów KPI, które sam zorganizujesz.

Karty deski rozdzielczej wyjaśnione

Wizytujący na żywo

Liczba osób na swojej stronie internetowej w tej chwili. To aktualizuje co 15 secondable (konfigurowalny). Odwiedzający jest "aktywny", jeśli załadował stronę w ramach aktywnego progu (domyślnie: 90 Sekundy).

Unikalne odwiedzające

Ile różnych osób odwiedziło Twoją stronę internetową w wybranym zakresie dat. OpsIQ identyfikuje odwiedzających poprzez połączenie odcisków palców przeglądarki, plików cookie i (jeśli są dostępne) uwierzytelnionej tożsamości.

Nowy vs powrót

Nowi goście po raz pierwszy widzą Twoją stronę. Powracający odwiedzający byli już wcześniej widziani. Wysoki wskaźnik zwrotu oznacza, że Twoja zawartość przywraca ludzi. Bardzo niski współczynnik zwrotny może oznaczać, że nie zachowasz zainteresowania.

Stawka odbicia

Odsetek odwiedzających, którzy wyszli po obejrzeniu tylko jednej strony. Wskaźnik odbicia powyżej 70% na stronach lądowania zazwyczaj oznacza, że strona nie spełnia oczekiwań gości, zła zawartość, powolny załadunek lub słabe doświadczenie mobilne.

Średni czas na stronie

Jak długo odwiedzający spędzają na każdej stronie średnio. Bardzo krótkie czasy (w ramach 10 sekund) na stronach treści sugerują, że zawartość nie jest angażująca. Bardzo długie czasy na stronach zameldowania mogą wskazywać na zamieszanie.

Zagrożenia zablokowane

IPadres, który OpsIQ zidentyfikowane jako potencjalnie złośliwe na podstawie punktów zagrożenia, próby brutalnej siły lub bloki ręczne. Kliknij, aby zobaczyć zablokowane IPs lista.

Sprzedaż dzisiaj / w tym tygodniu / w miesiącu

Dochody ze sprzedaży powiązanej (Shopify, WooCommerce, Stripe, itp.). Jeśli sprzedaż pokazuje zero, sprawdź, czy złącze platformy jest podłączone i synchronizacji.

Tabela trendów

Graf linii pokazujący liczbę odwiedzających w wybranym przedziale dat. Szukaj wzorców: kolce ruchu (kampanie, wzmianki prasowe), nurkowania (weekendy, wakacje) i utrzymujące się trendy.

Główne źródła

Tam skąd pochodzisz: bezpośredni, Google, media społecznościowe, kampanie e-mail, strony adresowe. Użyj tego, aby zrozumieć, które kanały marketingowe działają.

Przeglądarki górne

Chrome, Safari, Firefox, Edge i inne. Jeśli przeglądarka ma niezwykle wysoki wskaźnik odbicia, można mieć CSS lub JavaScript problem zgodności.

Mapa godzinowa

Siatka pokazująca aktywność odwiedzających przez godzinę dnia i dnia tygodnia. Użyj tego, aby zdecydować, kiedy zaplanować zmiany wsparcia, kiedy wysłać ogłoszenia, a kiedy uruchomić promocje.

Najnowsi goście

Ostatnie kilka odwiedzających z kraju, strony, urządzenia i źródła. Przydatne do szybkich kontroli spot-check w czasie kampanii.

Korzystanie z filtra zakresu daty

Kliknij na datę picker w prawym górnym rogu deski rozdzielczej. 7 days, Last 30 dni, W tym miesiącu, Ostatni miesiąc, Zakres Własny. Wszystkie karty i wykresy aktualizacji po zmianie zakresu. Zakres daty jest w skonfigurowanej strefie czasu (ustawione w Ustawienia).

Przykłady robocze

Badanie dotyczące wzrostu stopy odbicia

Scenariusz:
Twoje odbicie skoczyło z 45% do 78% Co się stało?
Co robić:

Sprawdź: (1) Czy określona zmiana strony docelowej? Przejdź do Top Strony i sortować przez szybkość odbijania. (2) Czy kampania wysłała ruch na złą stronę? Sprawdź Top Sources dla nowych odbiorców. (3) Czy strona przerwana na komórce? Sprawdź awarię przeglądarki na szybkość odbijania mobilnego. (4) Czy to bot ruchu? Sprawdź licznik zagrożeń i szczegóły odwiedzających podejrzane wzorce.

Zero odwiedzających na desce rozdzielczej

Scenariusz:
Deska rozdzielcza pokazuje 0 na żywo odwiedzających, nawet jeśli Twoja strona internetowa jest coraz ruchu.
Co robić:

Sprawdź: (1) Czy jest zainstalowany widget śledzenia? Zobacz swój kod źródłowy strony internetowej i wyszukaj OpsIQ Scenariusz.2) Czy klawisz witryny jest poprawny? Porównaj klucz data- site- w skrypcie z kluczem w Witrynach Połączonych. (3) Czy CDN lub cache obsługujące nieświeżą stronę bez skryptu? Wyczyść pamięć podręczną CDN. (4) Czy bloker reklamowy lub nagłówek CSP blokuje skrypt? Sprawdź w konsoli przeglądarki, czy nie ma zablokowanych żądań.

Czytanie godzinnej mapy upałów

Scenariusz:
Twoja mapa pokazuje ciężką aktywność między 22: 00 a 21: 00 w dni powszednie, ale nic w weekendy.
Co robić:

Jest to wzorzec ruchu B2B. Użytkownicy pracują profesjonalistów przeglądając w godzinach pracy. Implications: (1) Harmonogram personelu wsparcia na dni powszednie godzin pracy. (2) Wyślij e-mail kampanie wtorek - czwartek rano. (3Weekendowe okna serwisowe są bezpieczne. (4) Rozważ oferowanie czatu na żywo tylko w godzinach szczytu.

Skok ruchu z nieznanego źródła

Scenariusz:
/ Widzimy nagły wzrost liczby gości / 500 / w ciągu godziny od nieznanego odbiorcy.
Co robić:

Przejdź do Odwiedzających i filtrować przez okno czasu. Sprawdź: (1) Czy są prawdziwymi gośćmi czy robotami? Spójrz na czas trwania sesji, strony oglądane i różnorodność przeglądarki. (2) Jeśli są prawdziwe, na jakiej stronie lądują? (3) Sprawdź odbierającego URL Ktoś mógł się z tobą połączyć z Reddit, Hacker News lub popularnym blogiem.4) Jeśli jest to bot ruchu, sprawdź zagrożenia i rozważyć blokowanie IP zakres.

Dlaczego moja liczba gości różni się od Google Analytics?+

OpsIQ Liczby odwiedzających inaczej. Korzysta z pobierania odcisków palców przeglądarki i plików cookie, podczas gdy GA używa innego modelu cookies. Filtrowanie botów, stawki ad bloker, a także skrypt ładowania zamówienia może również powodować różnice. 10-20% wariancja jest w normie.

Mogę wstawić deskę rozdzielczą do innego narzędzia?+

Deska rozdzielcza jest przeznaczona do OpsIQ admin. Do celów sprawozdawczości zewnętrznej, należy użyć REST API aby pobrać dane analityczne i wyświetlić je w swoim własnym desce rozdzielczej lub narzędzia BI.

Co oznacza "groźby"?+

To się liczy. IP adres, który OpsIQ ma oznaczone lub zablokowane na podstawie punktów zagrożenia, powtarzające się nieudane loginy lub bloki ręczne. Kliknij licznik zobaczyć szczegóły i zarządzać bloków.

Analiza

Dziennik odwiedzających

Dziennik Odwiedzających pokazuje każdą wizytę na swoich wyśledzonych stronach internetowych. Każdy rząd jest jedną stronę obciążenia od jednego gościa. Użyj go do zbadania indywidualnych zachowań odwiedzających, znaleźć ruch kampanii i zdiagnozować problemy śledzenia.

Dziennik odwiedzających
Dziennik odwiedzającychTabela odwiedzających z paskiem filtrującym (data, wyszukiwanie IP/ email / city, source, device) i kolumny dla IP/ e-mail, lokalizacja, źródło, urządzenie i czas, z oznaczonym wierszem zagrożenia.Dziennik odwiedzającychyoursite.comDni7Szukaj IP, e-mail, miasto...Źródło: ▾Urządzenie ▾IP / EMAILLOKACJAŹRÓDŁOURZĄDZENIEKiedy[email protected]USA · Nowy JorkgoogleKomputer stacjonarny2m41.62.10.4Wielka Brytania · LondyndirectMobilny6m[email protected]DE · Berlinutm: reklamaMobilny14m203.0.113.9NG · LagosreferralKomputer stacjonarnythreat1–25 z 3,402Sesja →1FILTERData · wyszukiwanie · źródło · urządzenie2REAL COLUMNSIP/ email · lokalizacja · urządzenie · zagrożenie3DRILL INOtwórz pełną sesję
Prawdziwy dziennik odwiedzających: filtrować według daty, wyszukiwania i urządzenia, a następnie przeczytać każdą wizytę przez IP/ e-mail, lokalizacja, źródło, urządzenie i czas, zagrożenia oznaczone na czerwono.

Co pokazuje każdy wiersz

Adres IP

Przybysze IP adres. Anonimowany, jeśli IP anonimizacja jest włączona w ustawieniach. Kliknij, aby zobaczyć wszystkie wizyty z tego IP.

Kraj i miasto

Wykryte zIP Adres z wykorzystaniem danych GeoIP. Wymaga bazy danych MaxMind GeoLite2 lub Cloudflare nagłówki geo. Pokazuje "Unknown" jeśli GeoIP nie jest skonfigurowany.

Strona URL

Strona załadowana przez odwiedzającego. Kliknij, aby zobaczyć pełną URLDługi. URLs są obcinane w widoku tabeli.

Odnoszący się

Gdzie gość przyszedł przed lądowaniem na swojej stronie. "Direct" oznacza nie referrer (zakładki, wpisane URLs, niektóre linki do aplikacji).

Urządzenie i przeglądarka

Typ urządzenia odwiedzającego (pulpit, telefon komórkowy, tablet) i przeglądarka (Chrome, Safari, Firefox itp.).

Data i godzina

Kiedy strona została załadowana, w skonfigurowanej strefie czasowej.

Identyfikacja klienta

Jeśli użytkownik jest zidentyfikowany (za pomocą symbolu tożsamości lub logowania), pojawia się jego nazwa lub e-mail. W przeciwnym razie pokazuje jako anonimowy.

Filtry

Zakres daty

Wizyty filtrów w określonym okresie czasu. Domyślnie: ostatnie dni 7.

Szukaj

Szukaj IP adres, strona URL, odsyłacz, kraj, lub e-mail klienta.

Źródło

Filtr wg źródła ruchu: Bezpośrednie, Organiczne, Społeczne, Odsyłanie, Płatne, E-mail.

Urządzenie

Filtr przez pulpit, mobilny lub tablet.

Tylko nowy

Pokaż tylko pierwszy raz odwiedzających, których nigdy wcześniej nie widziano.

Przykłady robocze

Znajdź odwiedzających z konkretnej kampanii

Scenariusz:
Uruchomiłeś kampanię Google Ads z parametrem UTM utm_source=google&utm_medium=cpc&utn_campaign=summer-sale. Jak znajdziesz tych użytkowników?
Co robić:

W dzienniku odwiedzin, użyj pola wyszukiwania i wpisz "Summer- sale".URLs i strona URLs, więc parametry UTM będą pasować. Możesz również filtrować przez Źródło = Płatne do zawężenia dalej.

Znajdź klienta, który zgłosił problem

Scenariusz:
Klient napisał, że "Twoja strona z kasą została wczoraj złamana około 15: 00". Jak znaleźć ich sesję?
Co robić:

Szukaj pod adresem e-mail w dzienniku odwiedzających. Jeśli zostały zalogowane, pojawi się ich tożsamość. Ustaw zakres daty na wczoraj. Sprawdź wizyty do zameldowania strony około godziny 15.00. Kliknij ich sesję, aby zobaczyć pełny przepływ strony i wszelkie błędy JavaScript.

Wykrywanie hakera lub drapacza pętli

Scenariusz:
Zauważyłeś IP adres ma 500+ wizyty w ciągu jednej godziny, wszystko na tej samej stronie.
Co robić:

Jest to prawdopodobnie bot, scraper lub uszkodzony skrypt. Przejdź do dziennika odwiedzających i przeszukaj przez to IP Sprawdź: (1) Czy wszystkie wizyty na tej samej stronie? (2) Czy agent użytkownika jest znanym botem? (3) Czy czas trwania sesji jest zawsze 0 Jeśli potwierdzi się jako bot, przejdź do ochrony i zablokować IP.

Dziennik odwiedzających vs Sessions vs Żywa pasza

Dziennik odwiedzających

Surowe obciążenia stron. Jeden wiersz na widok strony. Najlepiej dla: badania konkretnych stron, znalezienie ruchu z określonych źródeł, diagnozowanie problemów śledzenia.

Sesje

Grupy przeglądają strony w przejazdy. Jeden wiersz na sesję odwiedzin. Najlepiej dla: zrozumienia przepływu użytkownika, czasu trwania sesji pomiarowej, identyfikacji ścieżek konwersji.

Żywa pasza

Real- time aktywności. Pokazuje odwiedzających obecnie na swojej stronie. Najlepiej: monitorowanie kampanii w toku, obserwowanie wysoko-intentnych gości, oglądanie możliwości wsparcia.

Dlaczego widzę własne wizyty w dzienniku?+

OpsIQ śledzi wszystkie wizyty domyślnie. Aby wykluczyć własny ruch, dodaj IPAdres wyłączonego IPs lista w Ustawienia > Śledzenie.

Dlaczego odwiedzający pokazują "Nieznany" kraj?+

GeoIP wymaga albo Cloudflare nagłówek geo (automatyczny, jeśli używa Cloudflare) lub plik bazy danych MaxMind GeoLite2. Sprawdź ustawienia > Ścieżka GeoIP, aby zapewnić istnienie i czytelność pliku bazy danych.

Jak długo przechowywane są dane dotyczące odwiedzających?+

Dane odwiedzających są przechowywane przez okres retencji skonfigurowany w Ustawieniach (domyślnie: 90 dni). Po tym, stare rekordy są automatycznie czyszczone przez zadanie retencja cron.

Analiza

Sesje

Sesje grupy wielu przeglądów stron z tej samej osoby w jedną podróż. Podczas gdy Visitor Log pokazuje poszczególne obciążenia strony, Sessions pokazać jak ludzie przenoszą się przez stronę od lądowania do wyjścia.

Sesje
SesjeTabela dziennika sesji z kolumnami IP, kraju, urządzenia, źródła, czasu trwania i stron oraz oznaczonym wierszem zagrożenia.Sesjeyoursite.comKraj (NG)Dziennik sesjiIP (S)PAŃSTWOURZĄDZENIEŹRÓDŁOCZAS TRWANIAStrony41.62.10.4Wielka BrytaniaKomputer stacjonarnygoogle3m 12s6102.89.6.2NGMobilnydirect1m 05s388.21.4.9DEKomputer stacjonarnyutm: reklama7m 48s11203.0.113.9USMobilnyreferral0m 42s21SESSION LOGPrzejazdy grupowe2COLUMNSKraj · urządzenie · źródło · czas trwania3THREATRyzykowne sesje oznaczone
Prawdziwy dziennik sesji: każda podróż odwiedzających jako rząd (IP, kraj, urządzenie, źródło, czas trwania i strony) z ryzykownymi sesjami oznaczonymi na czerwono.

Jak działają sesje

Sesja rozpoczyna się, gdy gość ładuje swoją pierwszą stronę. Kontynuuje ją, gdy przechodzi do większej liczby stron. Sesja kończy się, kiedy odwiedzający jest nieaktywny w okresie timeout sesji (domyślnie: 30 minut) lub zamyka przeglądarkę. Ta sama osoba wracająca po przerwie tworzy nową sesję.

Co pokazuje każda sesja

Pierwsza strona

Strona docelowa, gdzie odwiedzający wszedł na stronę. To mówi, która zawartość jest przyciągająca ludzi.

Ostatnia strona

Strona wyjścia, gdzie gość odszedł. Jeśli strona wyjścia jest często stronie cenowej, odwiedzający mogą porównywać Cię z konkurentami.

Liczba stron

Ile stron odwiedzający oglądał w tej sesji. Więcej stron zwykle oznacza więcej zaangażowania, ale może również oznaczać, że gość jest utracony.

Czas trwania

Całkowity czas od pierwszego obciążenia strony do ostatniej aktywności. Sesje z 0 sekundy są odbicia (widok jednej strony, nie ma dalszej interakcji).

Źródło

Źródło ruchu dla tej sesji (Bezpośrednie, Google, społeczne, skierowanie itp.).

Kraj

Wykryto kraj z adresu gościa IP.

Odbić

Czy odwiedzający opuścił tylko jedną stronę. Sesje bounded mają czerwony wskaźnik.

Konwersja

Czy odwiedzający zakończył śledzone zdarzenie konwersji (zakup, zapisanie, złożenie formularza) podczas tej sesji.

Filtry

Szukaj

Szukaj IP, email, strona URL lub odsyłacz w trakcie sesji.

Typ

Filtruj przez Nowych odwiedzających (pierwsza sesja w historii) lub Zwracanie odwiedzających.

Źródło

Filtruje się przez źródło ruchu.

Kraj

Filtruj według kraju, aby zobaczyć sesje z określonego regionu.

Zagrożenia / Wywrócone

Filtr wyświetla tylko odbite sesje lub sesje oznaczone jako zagrożenia.

Przykłady robocze

Profil klienta o wysokiej wartości

Scenariusz:
Klient dokonał dużego zakupu. Chcesz zrozumieć ich podróż przed zakupem.
Co robić:

Szukaj ich e-mail w Sessions. Spójrz na wszystkie sesje: (1) Ile razy odwiedzili przed zakupem? (2Jakie strony oglądali?3Używali czatu czy otworzyli bilet? (4) Jaki był całkowity czas od pierwszej wizyty do zakupu? To mówi typowy zakup podróży dla klientów wysokiej wartości.

Wykryj logowanie z nowej lokalizacji

Scenariusz:
Klient zwykle loguje się z Nigerii, ale widać sesję z Rosji.
Co robić:

Szukaj poczty e-mail klienta w Sessions. Porównaj kraj ostatnich sesji. Jeśli sesja nagle pojawia się z nietypowego kraju, może to być legalna podróż lub konto naruszone. Sprawdź: (1) Czy przed udaną próbą logowania była nieudana próba? (2) IP Zmień się w tej samej sesji?

Jaka jest różnica między sesją a gościem?+

Odwiedzający jest osobą (lub przeglądarką). Sesja jest jedną wizytą od tej osoby. Ten sam gość może mieć wiele sesji w czasie. Sesje wygasają po okresie timeout.

Jak OpsIQ identyfikuje powracających gości?+

OpsIQ używa kombinacji plików cookie, pobierania odcisków palców przeglądarki i uwierzytelnionych symboli tożsamości. Jeśli użytkownik oczyszcza swoje pliki cookies i nie jest zalogowany, będą one pojawiać się jako nowy gość.

Analiza

Żywa pasza

Live Feed pokazuje odwiedzających aktualnie na Twojej stronie internetowej w czasie rzeczywistym. Aktualizuje automatycznie każdą sekundę 15 (konfigurowalne). Użyj jej podczas kampanii, wprowadzania produktu i okresów wsparcia, aby zobaczyć, co się dzieje teraz.

Żywa pasza
Żywa paszaStrumień aktywności w czasie rzeczywistym pokazujący liczenie osób odwiedzających na żywo oraz zestaw ostatnich działań odwiedzających według kraju.Żywa paszayoursite.com37odwiedzających onlineDziałalność na żywoTeraz.US · przeglądanie /pricing2sWielka Brytania · rozpoczęła rozmowę5sDE · dodany do koszyka9sCA · zakończone podpisanie1RIGHT NOWZobacz, kto jest na miejscu2AUTO-REFRESHAktualizuje wszystkie 15s3DZIAŁAJPrzejdź do czatu na żywo
Zobacz, kto jest na swojej stronie w tej sekundzie i co robią, odświeżając automatycznie każdy 15 sekund.

Jak to działa?

Live Feed sonduje serwer w skonfigurowanym przedziale odświeżania. Każdy wiersz pokazuje odwiedzającego aktualnie na swojej stronie: ich bieżącą stronę, kraj, urządzenie, źródło, czas trwania sesji i ilość stron. Zielone podświetlenia wskazują nową aktywność od ostatniego odświeżenia. Kliknij dowolny rząd odwiedzających, aby zobaczyć swoje pełne szczegóły sesji.

Ustawienia

Odśwież przedział

Jak często aktualizacje na żywo. Domyślnie: 15 sekundy. Niższe wartości (5-10s) dać szybsze aktualizacje, ale użyć więcej zasobów serwera.30-60s) są łatwiejsze na serwerze, ale mniej czasu rzeczywistego.

Próg aktywny

Jak długo odwiedzający jest uważany za "aktywny" po ostatnim załadowaniu strony. Domyślnie: 90 sekund. Jeśli gość ładuje stronę i czyta ją dla 2 minuty bez kliknięcia, znikają z żywej paszy po progu.

Przycisk Pause

Kliknij Pause, aby zatrzymać autoodświeżanie. Przydatne, gdy chcesz przeczytać szczegóły bez aktualizacji listy. Kliknij ponownie, aby uruchomić ponownie.

Przykłady robocze

Spot gorący trop podczas kampanii

Scenariusz:
Użytkownik właśnie obejrzał stronę główną, a następnie funkcje, a potem ceny, i jest teraz na stronie wymeldowania.
Co robić:

Jest to zachowanie wysokiej intencji. W Żywej paszy: (1) Kliknij na odwiedzającego, aby zobaczyć ich sesję. (2) Jeśli zaczną rozmawiać, AI będzie miał pełen kontekst podróży. (3) Jeśli wyjdą bez kupowania, staną się liderem na stronie Leads. (4) Rozważyć stworzenie proaktywnej zasady, aby pokazać wiadomość czatu, gdy odwiedzający dotrzeć do checkout.

Zbyt wielu gości z tego samego IP

Scenariusz:
Widzisz? 20 odwiedzających z tego samego IP adres, wszystkie na różnych stronach.
Co robić:

Może to być: (1) Biuro z udostępnionym internetem. Sprawdź, czy wizyty wyglądają jak prawdziwi ludzie (różne strony, rozsądny czas trwania sesji). (2) Bot lub scraper. Sprawdź, czy sesje są bardzo krótkie (0-1sekund) lub systematycznie uderzanie stron. (3) Test obciążenia. Jeśli wykonujesz automatyczne testy, wykluczyć IP od śledzenia.

Dlaczego na żywo paszy pokazać 0 odwiedzających, gdy moja strona ma ruch?+

Sprawdź: (1) Czy skrypt widget jest zainstalowany na Twojej stronie? (2) Czy klucz do strony jest poprawny? (3) Czy próg aktywności przekroczył? (4) Czy odwiedzający używają agresywnych blokerów reklamowych, które blokują skrypt śledzenia?

Czy mogę filtrować transmisję na żywo według kraju lub urządzenia?+

Na żywo wyświetlane są wszystkie aktywne odwiedzające. Dla filtrowanych widoków, należy korzystać z stron dziennika odwiedzin lub sesji z opcjami filtrów.

Analiza

Górne strony

Najlepsze strony pokazują, które strony na Twojej stronie internetowej uzyskać najwięcej ruchu. To ranking stron przez wizyty, zaangażowanie, konwersje i działania wsparcia. Użyj go do identyfikacji najlepszych treści, znaleźć nieskuteczne strony i odkryć strony, które generują pytania o wsparcie.

Górne strony
Górne stronyLista najczęściej odwiedzanych stron z poziomymi paskami odwiedzin i liczeniem.Górne stronyyoursite.comNajczęściej odwiedzane strony/pricing3,402/2,910/docs1,740/blog/seo-guide980/signup6401RANKEDNajczęściej odwiedzane strony2SIGNALSWizyty i konwersje3FINDStrony, które jeżdżą biletami
Twoje strony uszeregowane przez ruch i zaangażowanie, więc można dostrzec top zawartość i stron generujących wsparcie.

Co pokazuje każda strona

Strona URL

Pełna ścieżka URL. Podobne strony (np. warianty produktów) są grupowane, jeśli jest włączona grupowanie.

Widoki

Całkowita liczba razy ta strona została załadowana w wybranym przedziale daty.

Unikalne odwiedzające

Ile różnych osób oglądało tę stronę (osoba przeglądając tą samą stronę dwukrotnie liczy się jako 1 unikalny).

Stawka odbicia

Odsetek odwiedzających, którzy opuścili witrynę po obejrzeniu tylko tej strony. Wysoka odbicie na stronach lądowania = problem. Wysokie odbicie w "dziękuję" stron = normalne.

Średni czas

Jak długo odwiedzający wydają na tej stronie średnio. Bardzo krótki = nie czytanie. Bardzo długi na stronie formularza = dezorientacja.

Rozpoczynamy rozmowy

Ile rozmów na czacie rozpoczęto z tej strony. Wysokie rozmowy zaczynają się na stronie produktu oznacza, że opis produktu może być niejasny.

Bilety na wsparcie

Ile biletów wsparcia zostało stworzonych przez odwiedzających, którzy byli na tej stronie. Wysoka liczba biletów = potencjalny problem UX lub zawartość.

Przykłady robocze

Znajdź strony, które napędzają pytania wspierające

Scenariusz:
Twoja ekipa wsparcia ciągle dostaje pytania o wysyłkę.
Co robić:

Sortuj najlepsze strony przez "Bilety wsparcia" lub "Rozpoczyna się czat" malejąco. Szukaj produktów lub stron wysyłki z wysokimi liczbami. Strona z najbardziej support pytania prawdopodobnie ma niejasne informacje. Napraw zawartość strony i monitoruj, czy pytania wsparcia maleje.

Znajdź strony z wysoką stopą wyjścia

Scenariusz:
Chcesz wiedzieć, gdzie ludzie opuszczają stronę najczęściej.
Co robić:

Sortuj przez bounce rate malejącą. Ignoruj strony, które są naturalnie punkty wyjścia (dziękuję strony, stron potwierdzenia). Skup się na stronach, które powinny utrzymać gości zaangażowanych: strony produktu, ceny, funkcje. Te potrzebują lepsze połączenia do -działania lub jaśniejsze treści.

Dlaczego strona pokazuje 0 widoki, chociaż wiem, że to dostaje ruchu?+

Sprawdź: (1) Czy widżet śledzenia zainstalowany jest na tej konkretnej stronie? Aplikacje single- strony mogą nie wyświetlać widoków stron o zmianach trasy. (2) Czy strona jest wyłączona w ustawieniach śledzenia? (3) Czy CDN serwuje wersję cached bez skryptu śledzenia?

Analiza

Geo Intelligence

Geo Intelligence pokazuje, skąd odwiedzający pochodzą z kraju, miasta, urządzenia i źródła. Użyj go do zrozumienia rynków geograficznych, zdecydować na wsparcie językowe, zaplanować marketing regionalny i wykryć podejrzane wzorce ruchu.

Geo
Geo IntelligenceMapa lokalizacji odwiedzających obok rankingu barów percountry.Geo Intelligenceyoursite.comOdwiedzający według lokalizacjiUSWielka BrytaniaDECANG1MARKETSKraj, miasto, urządzenie2PLANJęzyk i regiony3WATCHSpot dziwne ruchu
Tam, skąd przyjeżdżają odwiedzający (według kraju, miasta i urządzenia) do rynków wielkości i dostrzec niezwykły ruch.

Co widzisz

Najlepsza mapa krajów

Najlepsze kraje w rankingu według liczby odwiedzających. Kliknij kraj, aby wiercić do poziomu miasta danych.

Pączek krajowy

Wizualny podział ruchu według kraju.

Pełny stół krajowy

Każdy kraj z odwiedzającymi w wybranym okresie, pokazując liczbę gości, ilość sesji, szybkość odbijania i kurs konwersji.

Wiertło w mieście

Kliknij kraj, aby zobaczyć, które miasta w tym kraju mają najwięcej gości.

Jak działa wykrywanie GeoIP

OpsIQ wykrywa lokalizację odwiedzających na dwa sposoby: (1) Cloudflare nagłówki geo. Jeśli Twoja strona jest za Cloudflare, wykrywanie kraju jest automatyczne i dokładne. (2) Baza danych MaxMind GeoLite2. Pobierz darmową bazę danych i skonfiguruj ścieżkę w Ustawieniach. Wykrywanie poziomu City- wymaga bazy danych GeoLete2-City, nie tylko bazy danych kraju.

VPN i ruch proxy

Użytkownicy korzystający z VPN wydają się pochodzić z lokalizacji serwera VPN, a nie z ich prawdziwej lokalizacji. OpsIQ nie może i nie powinien próbować obejść VPN. Jeśli widzisz nietypowe wzorce kraju, należy rozważyć, że 10-20% odwiedzający mogą korzystać z VPN.

Przykłady robocze

Niespodziewany ruch w kraju

Scenariusz:
Prowadzisz tylko biznes, ale 30% ruchu jest z Indii.
Co robić:

Sprawdź: (1) Czy są to prawdziwi goście? Spójrz na czas trwania sesji i strony oglądane. Bardzo krótkie sesje z wysokim odbiciem = prawdopodobne botów. (2) Czy znajdują Cię przez Google? Sprawdź zwrotnika. (3) Czy mogą być potencjalnymi klientami na nowym rynku? Jeśli ruch jest prawdziwy i zaangażowany, rozważyć dodanie indyjskich konkretnych cen lub treści.

Decyzja w sprawie wsparcia językowego

Scenariusz:
Chcesz wiedzieć, czy należy przetłumaczyć swoją stronę na hiszpański.
Co robić:

Jeśli kraje hiszpańsko-mówiące (Hiszpania, Meksyk, Kolumbia, Argentyna itp.) razem reprezentują więcej niż 10% ruchu z niskim wskaźnikiem odbicia, tłumaczenie warto rozważyć. Sprawdź również: czy odwiedzający z tych krajów przeliczają się na podobne stawki na rynek podstawowy?

Planowanie przesunięć w ramach wsparcia regionalnego

Scenariusz:
Musisz zdecydować o godzinach wsparcia dla różnych stref czasowych.
Co robić:

Użyj godzinowej mapy ciepła (na desce rozdzielczej) połączonej z Geo Intelligence. 40% Państwa ruch jest z Europy i 35% z USA, potrzebujesz pokrycia dla obu stref czasowych. Mapa heatmap pokazuje dokładnie, kiedy każdy region jest najbardziej aktywny.

Kraj z wizytami, ale bez zamówień

Scenariusz:
Niemcy pokazują 500 odwiedzających w tym miesiącu, ale zero sprzedaży.
Co robić:

Badanie: (1) Czy odbijają się one na stronie cenowej? Może twoje ceny nie są konkurencyjne dla tego rynku. (2) Czy wysyłasz do Niemiec? Sprawdź, czy strona wysyłki wspomina Niemcy. (3) Czy Twoje wymeldowanie jest dostępne w EUR? Niedopasowanie walut powoduje porzucone wymeldowania. (4) Czy ci goście z jednego źródła, które może być niskie intencji ruchu?

Dlaczego odwiedzający pokazują "Nieznany" kraj?+

GeoIP nie jest skonfigurowany. Albo skonfigurować Cloudflare (który automatycznie dodaje nagłówki geo), albo pobrać bazę danych MaxMind GeoLite2 i ustawić ścieżkę pliku w Ustawieniach > Ścieżka GeoIP.

Czy mogę zablokować ruch z konkretnych krajów?+

OpsIQ nie blokuje według kraju. Użyj swojego serwera WWW lub Cloudflare Zapory bezpieczeństwa dla blokowania na terenie kraju.OpsIQ koncentruje się na widoczności, a nie kontroli dostępu na poziomie sieci.

Analiza

Lejek intencyjny

Intent Funnel klasyfikuje sesje odwiedzających według tego, co wydają się próbować zrobić: przeglądać, badać, porównywać, kupić, uzyskać wsparcie lub opuścić. Użyj go do zrozumienia równowagi intencji na swojej stronie i zidentyfikować gdzie goście podnoszą.

Lejek intencyjny
Lejek intencyjnyLejek z Przeglądaj do badań do porównania kupić z liczbami, plus wsparcie i pozostawiając żetony.Lejek intencyjnyyoursite.comPrzeglądaj · 8,200Badania naukowe · 4,100Porównaj · 1,650Kup · 520Wsparcie dla 6%Opuszczanie 11%1CLASSIFYCzego chcą goście2STAGESPrzeglądaj kupić3NAPRAWZnajdź drop- off
Sesje klasyfikowane według intencji (przeglądanie, badania, porównywanie, zakup), dzięki czemu można zobaczyć dokładnie gdzie ludzie podrzucają.

Kategorie docelowe

Przeglądanie

Krótkie sesje, kilka stron, nie wykryto konkretnego celu.

Badania

Odwiedzający czytający strony produktu / funkcji, docs lub treści bloga. Dłuższy czas na stronie, wiele stron zawartości.

Porównanie

Odwiedzający przeglądają ceny, porównanie planów lub tabele funkcji. Często powracających gości.

Kupno

Goście na wymeldowaniu, koszyku lub strony do rejestracji. Wysokie intencje. Są to możliwości konwersji.

Poszukiwanie wsparcia

Odwiedzający na stronach pomocy, stronach kontaktowych lub czacie.

Odbijanie

Goście, którzy wyszli po jednej stronie.

Jak odczytać lejek

Tłumaczenie lejek

Scenariusz:
1,000 odwiedzający oglądali Pricing. 270 otwarty czat. 92 Zaczęło się od kasy. 64 Zapłaciłem. 18 otworzyły bilety na wsparcie.
Co robić:

Strona cenowa jest wystarczająco silna, aby stworzyć intencję: 27% ceny odwiedzających angażują się z czatu przed zakupem. Bilety wsparcia po wymeldowaniu mogą wskazywać na aktywację lub nieporozumienia płatności. (1) Upewnij się, że czat AI odpowiada na pytania cenowe dobrze. (2) Badanie 18 po-checkout bilety wsparcia dla wspólnych problemów.

Filtry czasu

Użyj filtru zakresu daty do porównania wzorców intencji w różnych okresach. Na przykład, porównać Czarny piątek tygodnia do normalnego tygodnia. Powinieneś zobaczyć wzrost "Kupowanie" zamiar i ewentualnie "Wsparcie-poszukiwanie", jeśli promocje stworzył zamieszanie.

Jak OpsIQ klasyfikuje zamiar?+

OpsIQ wyświetla stronę URLs, zachowanie sesji i wzorce czasowe. Cenowanie stron celu porównania sygnału. Wyszukaj strony zamiar zakupu sygnału. Pomoc / kontakt strony sygnał wsparcia intencji. Klasyfikacja jest heuristics-based, nie AI- napędzane.

Czy mogę dostosować kategorie intencji?+

Obecnie nie. Kategorie są wbudowane w oparciu o wspólne wzorce zachowania web. Niestandardowa klasyfikacja intencji jest na mapie drogowej.

Analiza

Jądra, zatrzymywanie i ścieżki

Zbuduj niestandardowe podróże ze strony lub etapów zdarzeń, zmierz retencję kohorty i odkryj ścieżki odwiedzających najczęściej przejść przez stronę.

Ekran produktu
JałówkiNiestandardowy lejek wyświetla każdą stronę / krok zdarzenia, pozostałych odwiedzających i procent konwersji.Jałówkiprzestrzeń roboczaSTEPS4CONVERSION28.4%WINDOW72hWIDOK PRACY ŻYWEJCenyOdwiedzający 1,420100%Wybrany planOdwiedzający 78054.9%Rozpoczęto wymeldowanieOdwiedzający 53037.3%Zamówienie zakończoneOdwiedzający 40328.4%1DEFINEWybierz 2–8 kroki2ŚrodekUstaw okno konwersji3IMPROVEZnajdź największą kroplę
Niestandardowy lejek wyświetla każdą stronę / krok zdarzenia, pozostałych odwiedzających i procent konwersji.

Jałówki

Utwórz lejek 2 do 8 krok strony lub zdarzenia. Ustaw okno konwersji w godzinach; odwiedzający liczy tylko wtedy, gdy zamówione kroki pojawiają się wewnątrz tego okna. Użyj kropli między krokami, aby wybrać gdzie należy sprawdzić powtórkę, błędy, szybkość strony lub wiadomości.

Zatrzymanie

Retencja grupowa odwiedzających w cotygodniowych kohortach i pokazuje, ile powrotów. 6, 8 lub 12 horyzont tygodnia. Przy porównywaniu wydań lub kampanii definicja kohorty jest stabilna.

Ścieżki

Ścieżka zawiera listę najczęstszych sekwencji stron. Wybierz długość ścieżki z 2 do 5 strony, aby wynik był czytelny. Użyj go, aby znaleźć niespodziewane objazdy, wspólne wyjścia i treści, które wielokrotnie poprzedza konwersję.

Własne lejki to definicje analityczne, a nie automatyzacja. Aby reagować na zakończony krok, należy utworzyć cel konwersji, segment, spustoszenie lub przepływ pracy.

Analiza

Odtwarzanie sesji

Sesja Replay pozwala na oglądanie osi czasu, co odwiedzający zrobił na swojej stronie: które elementy kliknęli, jak scrolled, gdzie unosili, i co wpisali (z wrażliwych pól zamaskowanych). Użyj go do diagnozowania problemów UX, zweryfikowania raportów błędów i zrozumienia dezorientacji klienta.

Odtwarzanie sesji
Odtwarzanie sesjiOdtwarzacz odtwarzający wyświetlający widok strony z kursorem, panelem informacji sesji i deska rozdzielcza.Odtwarzanie sesjiyoursite.comKup terazSESJACzas trwania 3m 12s14 kliknięciaUS · Komputer stacjonarnyChrome 1241WATCHKliki, przewijanie, typ2MASKEDWrażliwe pola ukryte3DIAGNOSEWeryfikacja raportów o błędach
Powtórz dokładnie to, co zrobił gość: kliknięcia, przewijanie, pisanie (wrażliwe pola zamaskowane), na linii czasu szorowania.

Znalezienie właściwej sesji

Ze strony Sesje, szukać sesji z zgłoszonych problemów, Wysoka strona liczy bez konwersji, lub sesje od klientów, którzy złożyli bilety wsparcia. Kliknij ikonę powtórki, aby otworzyć widok linii czasu.

Co to za powtórka?

Terminy

Poziomowy pasek pokazujący wydarzenia w czasie. Kliknij gdziekolwiek na linii czasu, aby przejść do tego momentu.

Nawigacja strony

Każdy załadunek strony pojawia się jako segment w linii czasu. Możesz zobaczyć dokładną ścieżkę, którą użytkownik wziął.

Kliki

Kliknij zdarzenia są pokazane jako kropki na osi czasu i jako punkty odniesienia na stronie rekonstrukcji.

Przewijanie

Głębokość przewijania jest śledzona, więc można zobaczyć jak głęboko w dół odwiedzający czytać.

Interakcje z innymi postaciami

Zdarzenia ostrości pola i pisania są rejestrowane. Domyślnie tekst wprowadzany jest do haseł i wrażliwych pól.

Prywatność i maskowanie

Sesja replay maskuje pola wrażliwe domyślnie. Hasło, dane wejściowe kart kredytowych i pola oznaczone data-opsiq-maska nie są nigdy rejestrowane. Możesz skonfigurować dodatkowe zasady maskowania w Ustawieniach > Śledzenie. Jeśli Twoja polityka zgodności wymaga tego, możesz całkowicie wyłączyć odtwarzanie.

Diagnozowanie pękniętego wymeldowania

Scenariusz:
Klient mówi: "Próbowałem kupić, ale guzik nic nie zrobił".
Co robić:

Znajdź ich sesję na stronie Sessions (wyszukaj przez e-mail). Otwórz powtórkę. Obejrzyj segment strony checkout. Szukaj: (1) Czy kliknęli prawy przycisk? (2) Czy JavaScript wystąpił błąd? (Sprawdź stronę błędów JS dla tego czasu.) (3) Czy strona przeładowała się lub pokazała komunikat błędu? (4) Czy wymagane pole było puste? Odtwarzacz pokazuje dokładnie, co się stało.

Ile pamięci masowej używa powtórka sesji?+

W przypadku stron o dużym natężeniu ruchu należy rozważyć krótszy okres retencji (np. 30 dni) w celu zarządzania przechowywaniem.

Czy odwiedzający mogą zrezygnować z powtórki?+

Jeśli w Ustawieniach jest włączona opcja "Respect Do Not Track", nie są rejestrowane osoby z nagłówkami DNT. Możesz również wyłączyć konkretne strony z powtórki w ustawieniach śledzenia.

Analiza

Dziennik zdarzeń

Dziennik zdarzeń pokazuje każde zdarzenie, które OpsIQ zarejestrował: widoki na stronę, kliknięcia, początek czatu, kreacje biletów, sprzedaż i niestandardowe zdarzenia. Użyj go do debugowania integracji, zweryfikowania dostawy haka webowego i zrozumienia sekwencji działań.

Dziennik zdarzeń
Dziennik zdarzeńChronologiczny dziennik zdarzeń z kolorowymi odznakami typu: pageview, chat, sale, webhook i niestandardowe.Dziennik zdarzeńyoursite.compageviewUS · /pricing12:04:01chat.startWielka Brytania - otwarte widget12:04:09sprzedaż$49.00· order #104212:05:22hakpayment.succeeded12:05:23customdemo_booked12:06:101EVERYTHINGKażde zarejestrowane zdarzenie2DEBUGSprawdzić dostawę haka3ORDERPatrz dokładny ciąg
Licznik wszystkiego OpsIQ rekordy (strony, czaty, sprzedaży, haki, niestandardowe zdarzenia) do debugowania i audytu.

Wbudowane w zdarzeniach (automatyczne)

⚠️
Są to: events-log nazwy - co OpsIQ zapisuje na osi czasu odwiedzających dla analityki, debugowania i audytu. Są one innym słownikiem niż wychodzący hak internetowy zdarzenia, na które subskrybujesz punkt końcowy. Jeśli budujesz odbiornik haka webowego, skorzystaj z listy w sekcji Haki webowe lub zadzwoń webhooks.events.list; subskrybowanie nazwy z tej tabeli niczego nie przyniesie.

Każdy rząd pokazuje nazwę ciebie wysyłaj oraz nazwa kanoniczna OpsIQ sklepy to jak. Oba są rejestrowane: surowa nazwa, którą wysłałeś, i kanoniczny do którego mapuje, więc raport napisany przeciwko Canonical taksonomia nadal działa niezależnie od aliasa użytego nadajnika.

pageview page.viewed

Śladowe ładunki strony. Zawiera URL, tytuł, zwrotnica i znacznik czasu. page_view oraz view są akceptowane jako to samo.

chat_open support.chat_opened

Gość otwiera widżet czatu.

chat_send support.chat_message_sent

Odwiedzający wysyła wiadomość na czacie. Strona odpowiedzi jest zapisywana jako support.chat_message_received.

ticket_open support.ticket_created

Wytworzy się bilet wsparcia. ticket_create jest akceptowane jako to samo; odpowiedzi i zamknięcia są przechowywane jako support.ticket_replied oraz support.ticket_closed.

form_submit form.submitted

Zgłaszany jest sledzony formularz. submit jest akceptowany jako to samo.

purchase commerce.purchase_completed

Zakup się kończy. purchase_success, i pseudonimy sprzedaży order.completed, sale.completed, payment.completed oraz invoice.paid, wszystkie są akceptowane z podłączonej platformy.

Wymeldowanie commerce.checkout_started

Rozpoczyna się wymeldowanie. cart_view, checkout_view, checkout_intent, checkout_abandon, add_to_cart.

login_success identity.signed_in

/ Wizyta się wpisuje. login_failed, przechowywane jako identity.login_failed; blokowanie jest login_lockout_created.

zaznaczenie conversion.signup

Odwiedzający kończy podpisanie. lead, przechowywane jako conversion.lead.

js_error error.js

Błąd JavaScript jest rejestrowany na stronie śledzonej.

💡
Nazwa zdarzenia, które wysyłasz, która nie jest jednym z tych pseudonimów jest nadal rejestrowana w języku werbatyckim - nic nie zostaje upuszczone. Po prostu nie ma mapowania kanonicznego, więc nie będzie się ona pojawiać w raportach opartych na taksonomii.

Zdarzenia niestandardowe

Możesz wysłać niestandardowe wydarzenia ze swojej strony internetowej lub serwera do OpsIQ. Niestandardowe zdarzenia są przydatne do śledzenia działań specyficznych dla Twojej firmy: kliknięcia przycisku, wykorzystanie funkcji, odtwarzanie wideo, pobieranie itp.

JavaScript · niestandardowe zdarzenie z przeglądarki
// Send a custom event from the browser
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "plan_selected", {
  plan: "pro",
  billing: "annual",
  value: 99
}]);
PHP · zapis aktywności kontaktowej z serwera
// Record a server-side activity for a contact (PHP)
$ch = curl_init("https://your-opsiq-domain.com/api/v1.php");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer opq_your_key",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "action" => "crm.activities.record",
        "site_key" => "site_abc123",
        "email" => "[email protected]",
        "event" => "subscription.upgraded",
        "value" => 50,
        "currency" => "USD",
    ]),
]);
$response = curl_exec($ch);
curl_close($ch);

Filtrowanie zdarzeń

Typ zdarzenia

Filtruj według nazw konkretnych zdarzeń: pageview, chat. started, ticket. created, itp.

Zakres daty

Pokaż wydarzenia z określonego okresu czasu.

Szukaj

Wyszukaj dane zdarzeń za pomocą słowa kluczowego (URL, email, wartości właściwości zdarzenia).

Jak długo trwa ta impreza?+

Zdarzenia są zgodne z polityką retencji ustawioną w Ustawieniach. Domyślnie: Dni 90. Zdarzenia o wysokiej wartości (zakupy, zdarzenia bezpieczeństwa) mogą być skonfigurowane z dłuższym zatrzymywaniem.

Czy mogę wykorzystać zdarzenia w eksperymentach A / B?+

Tak. Podczas tworzenia eksperymentu, wybierasz zdarzenie konwersji. Każdy built- in lub niestandardowe wydarzenie może być użyty jako cel konwersji.

Analiza

Eksperymenty A / B

Eksperymenty pozwalają na przetestowanie dwóch wersji strony lub funkcji i miary, które jeden działa lepiej. OpsIQ śledzi wrażenia, konwersje i znaczenie statystyczne.

Eksperymenty A / B
Eksperymenty A / BDwie karty wariantowe porównujące kursy wymiany, z odznaką zwycięzcy i znaczenie na wiodącym wariancie.Eksperymenty A / Byoursite.comWariant A4.2%konwersja · 1,020 widokiWariant BWINER6.8%konwersja · 1,005 widoki+62% podnośnik · 96% znaczące1BADANIEDwa warianty head- to- head2ŚrodekKonwersja & znaczenie3DECYZJADeclare zwycięzca
Uruchom dwa warianty, obejrzyj konwersje i znaczenie statystyczne, i zadeklaruj zwycięzcę.

Jak działają eksperymenty

1
Utwórz eksperyment

Podaj nazwę, zdefiniuj swój podstawowy metryczny (zdarzenie konwersji) i ustaw warianty (kontrola i test).

2
Uruchom

OpsIQ losowo przydziela odwiedzającym warianty i śledzi ich zachowanie. Nie zmieniaj eksperymentu podczas jego pracy.

3
Przeczytaj wyniki

Po zebraniu wystarczającej ilości danych, sprawdź poziom pewności siebie.95% pewność siebie oznacza, że możesz być 95% Różnica jest prawdziwa, a nie przypadkowa.

Państwa doświadczalne

Projekt

Utworzony, ale jeszcze nie uruchomiony. Możesz nadal edytować warianty i metryki.

Uruchomienie

Aktywnie przydziela odwiedzającym warianty. Nie edytuj podczas uruchamiania.

Zakończono

Osiągnięto znaczenie statystyczne lub ręcznie przerwano. Wyniki są ostateczne.

Archiwizacja

Wyniki zostały poddane przeglądowi, a eksperyment nie jest już potrzebny na aktywnej liście.

Najlepsze praktyki

Zdefiniuj swój metryczny przed startem

Decyduj, co mierzysz przed rozpoczęciem. Wybór metryki po zobaczeniu wyników wprowadza uprzedzenia.

Wyłączenie ruchu wewnętrznego

Dodaj adresy IP do listy wykluczeń, aby wizyty personelu nie przekreśliły wyników.

Biegnij wystarczająco długo.

Nie należy przerywać eksperymentu po wizycie 100. Do uzyskania wiarygodnych wyników potrzebne są setki lub tysiące odwiedzających na jeden wariant.

Przetestować jedną zmianę na raz

Jeśli zmienisz nagłówek I kolor przycisku, nie będziesz wiedział, która zmiana spowodowała poprawę.

Nagrywaj swoją decyzję

Po zakończeniu eksperymentu, zapamiętaj który wariant wygrał i dlaczego wybrałeś jego wdrożenie.

Ilu gości potrzebuję do ważnego eksperymentu?+

To zależy od podstawowego współczynnika konwersji i rozmiaru efektu, który chcesz wykryć. 500 odwiedzających na jeden wariant dla 20% wielkość efektu. Dla mniejszych efektów, potrzebujesz tysięcy.

Czy mogę przeprowadzić wiele eksperymentów jednocześnie?+

Tak, ale uważaj. Jeśli dwa eksperymenty wpływają na tę samą stronę, ich wyniki mogą oddziaływać. Bezpieczniej jest przeprowadzać eksperymenty na różnych stronach lub funkcjach jednocześnie.

Analiza

Błędy JavaScript

JavaScript Błędy zbierają błędy po stronie klienta z odwiedzających stronę. API wywołanie, lub brak zasobów pojawia się tutaj. Użyj go, aby znaleźć i naprawić błędy, które wpływają na prawdziwych klientów.

Błędy JS
Błędy JavaScriptLista przechwyconych błędów z początkowymi punktami ciężkości, pliku źródłowego, przeglądarki i liczby zdarzeń.Błędy JavaScriptyoursite.comBłędy ostatnioTypeError: nie można odczytać x niezdefiniowanegocheckout. js:42 · Chrome×214404 załadunek /assets/app.cssindeks · Safari×88Niezłapana (w obiecanej) NetworkErrorapi.js:17· Firefox×51Ostrzeżenie o degregacji: zdarzenie rozładunkuvendor. js · Krawędź×331CAPTUREBłędy po stronie klienta2IMPACTLiczy & przeglądarki3NAPRAWSquash prawdziwe błędy
Prawdziwi odwiedzający uderzają tutaj o złamaną powierzchnię kodu (wiadomość, źródło, przeglądarka i jak często), aby można było naprawić to, co ważne.

Co pokazuje każdy błąd

Komunikat o błędzie

Tekst błędu JavaScript (np. "TypeError: Nie można odczytać właściwości niezdefiniowanych").

Strona URL

Na której stronie wystąpił błąd.

Przeglądarka i urządzenie

Która przeglądarka i typ urządzenia widzieli błąd. Niektóre błędy są specyficzne dla przeglądarki.

Ślad stosu

Lokalizacja kodu, w którym wystąpił błąd. Kliknij, aby rozszerzyć pełny ślad stosu.

Pierwszy raz

Kiedy pojawił się ten błąd.

Ostatnio widziana

Kiedy ten błąd ostatnio się pojawił.

Licz

Ile razy ten błąd został zarejestrowany.

Sesje

Jak wiele różnych sesji odwiedzających doświadczyło tego błędu.

Błędy w zakresie ustalania priorytetów

Nie wszystkie JavaScript błędy wymagają natychmiastowej uwagi. Priorytet: (1) błędy na stronach krytycznych (zameldowanie, logowanie, login), (2) błędy z wysokimi liczbami sesji, (3) błędy, które pojawiły się niedawno (możliwe regresja ze zmiany kodu), (4) błędy na własnym kodzie (nie skrypty stron trzecich).

Nastawianie zepsutego przycisku wypisywania

Scenariusz:
Strona błędów JS pokazuje "TypeError: Nie można odczytać właściwości nieokreślone (czytanie submit)" na /checkout, wpływające 45 Sesje w tym tygodniu.
Co robić:

Oznacza to, że 45 prawdziwi klienci nie mogli ukończyć wymeldowania. (1) Otwórz stronę w tej samej kombinacji przeglądarki / urządzenia. (2) Otwórz konsolę przeglądarki i odtwórz błąd. (3) Sprawdź ślad stosu, aby znaleźć dokładną linię kodu. (4) Napraw błąd, uruchom i monitoruj liczbę błędów idącą do zera.

Czy OpsIQ rejestruje błędy ze skryptów trzeciej partii?+

Tak. OpsIQ przechwytuje wszystkie JavaScript błędy na stronie, w tym błędy ze skryptów analitycznych, widżety czatu i skrypty reklamowe. URL w stosie ślad, aby skupić się na własnym kodzie.

Jak wykluczyć nieszkodliwe błędy?+

Nie można zahamować określonych błędów w OpsIQ, ale można filtrować listę po stronie URL lub komunikat błędu. Naprawiać lub ignorować błędy z rozszerzeń przeglądarki (często wyświetlane jako błędy z nieznanych źródeł).

Sprzedaż

Sprzedaż i przemiana

Śledzenie sprzedaży łączy sklep lub platformę rozliczeniową do OpsIQ, dzięki czemu można zobaczyć przychody obok zachowania odwiedzających. Każdy zakup jest przypisywany podróży odwiedzających, więc wiesz, które strony, kampanie i kanały napęd przychodów.

Sprzedaż
SprzedażEkran sprzedaży: suma przychodów z kontrolą All- time, wyszukiwanie i tabela Ostatnie zakupy (data, klient, platforma, kwota, źródło).Sprzedażyoursite.comDOCHODY$42,180+18%All time ▾Szukaj e-mail, IP, ID zamówienia...Ostatnie zakupyDATAKLIENTPLATFORMULARZKWOTAŹRÓDŁOJun 3[email protected]Shopify$49googleJun 3[email protected]WooCommerce$129directJun 2[email protected]Stripe$480reklamy1DOCHODYZamówienia i wznowienie2RECENT PURCHASESData · klient · kwota3ATTRIBUTEDDo źródła ruchu
Prawdziwy ekran sprzedaży, przychody w górę, a następnie Ostatnie zakupy (data, klient, platforma, kwota), każdy przypisany do źródła ruchu.

Deska rozdzielcza sprzedaży

Dzisiejsza sprzedaż

Przychody z zamówień wykonanych dzisiaj. Odświeża się z każdym nowym wydarzeniem zamówienia z podłączonej platformy.

W tym tygodniu / w tym miesiącu / ogółem

Dochody zagregowane w danym okresie. Wysokość refundacji odejmuje się od tych kwot ogółem.

Tabela trendów

Graf linii pokazujący dzienne przychody w wybranym przedziale dat. Szukaj kolców (promocje, kampanie) i dipów (problemy, sezonowe).

Górne źródła konwersji

Które źródła ruchu prowadzą do większości zakupów. "Bezpośrednie" nabywców często zakładek witryny. "Google" nabywcy znaleźli Cię poprzez wyszukiwanie.

Ostatnie zakupy

Najnowsze zamówienia z e-mail klienta, kwota, waluta i zakupione przedmioty.

Niepotwierdzone zakupy (podróż klienta)

Kiedy tracker widzi odwiedzającego dotrzeć do potwierdzenia zakupu w przeglądarce, ale nie podłączona platforma zgłosiła, że sprzedaż jeszcze, podróż klienta pokazuje wiersz Zakup (niepotwierdzone) z odznaką bursztynową. To nigdy nie liczy się jako dochód. Kiedy platforma potwierdza sprzedaży, potwierdzony zakup zastępuje go.

Pojednanie

Złącza sprzedaży nie zależą od jednego haka. Każdy sygnał płatniczy, który platforma wysyła może otworzyć sprzedaż, a kontrakt Connector 2.3 ponownie odczytuje własną listę zakończonej sprzedaży platformy w harmonogramie (domyślnie godzinowa na miejsce pracy), tak aby haczyk sieciowy, którego nigdy nie dostarczono, nie mógł stracić sprzedaży. Operatorzy mogą go uruchomić na żądanie z linii poleceń za pomocą narzędzi /sales_reconcile.php.

Przewodniki konfiguracji platformy

Shopify

Przejdź do Connectors > Shopify. Utwórz własną aplikację w swoim Shopify admin (Ustawienia > Aplikacje i kanały sprzedaży > Tworzenie aplikacji): read_orders, read_customers, read_productsKopiuj admin API token dostępu OpsIQ, wprowadzić domenę sklepu (np., your-store.myshopify.com) oraz token dostępu. Kliknij Test Connection. Jeśli powiodło się, włącz synchronizację haka webowego dla powiadomień o zamówieniach w czasie rzeczywistym.

WooCommerce

Przejdź do Connectors >WooCommerce W twoim... WordPress admin, przejdź do WooCommerce> Ustawienia > Zaawansowane > REST API. Tworzenie klucza za pomocą prawa do odczytu / zapisu. Kopiuj klucz konsumenta i tajemnicę konsumenta. OpsIQ, wejdź na swoją stronę URL, klucz konsumencki i tajemnica konsumenta. Kliknij Test Connection.

BigCommerce

Przejdź do Connectors > BigCommerce. W swoim administratorze Bigcommerce przejdź do ustawień zaawansowanych >API Konta. Utwórz V2 / V3 API Konto z zakresem odczytu Zamówienia, Klienci i Produkty. Kopiuj token dostępu, ID klienta i API Wprowadź ich OpsIQ i test.

Magento 2

Przejdź do Connectors > Magento. W admin Magenta przejdź do systemu > Integracje. Utwórz nową integrację z API dostęp do zasobów do sprzedaży, Klientów i Katalog. Aktywuj integrację i kopiuj token dostępu. Wpisz go w OpsIQ z bazą Magento URL.

PrestaShop

Przejdź do Connectors > PrestaShop. W swoim admin Prestashop, przejdź do Zaawansowanych Parametrów > Serwis internetowy. Włącz serwis webservice i utworzyć nowy klucz. OpsIQ ze swoim sklepem URL.

OpenCart

Przejdź do Connectors > OpenCart. Generuj API referencje z panelu administratora OpenCart. Wprowadź API URL, nazwa użytkownika i klucz w OpsIQ. Złącze wykorzystuje OpenCart 's REST API dla zamówień i danych klientów.

osCommerce

Przejdź do Connectors > osCommerce. Konfiguracja dostępu do bazy danych lub API legitymacje udokumentowane w ustawieniach złącza.API moduł.

Stripe

Przejdź do Connectors > Stripe. Kopiuj pasek zastrzeżony API klucz z paska na desce rozdzielczej (Deweloperzy >API Klucze). Klucz wymaga odczytu dostępu do Klientów, Opłaty, Faktury i Subskrypcje. Wpisz go w OpsIQ. Skonfiguruj punkt końcowy haka webhook dla real- time zdarzeń.

Niestandardowe / inne platformy

Użyj REST API lub haki do wysyłania wydarzeń sprzedaży z dowolnej platformy. Wyślij order.completed zdarzenia z e-mail klienta, kwotę, walutę i przedmioty. Zobacz Wydarzenia API sekcja dla formatu ładunku.

Zrozumienie swojego lejka

Górne źródła konwersji

Pokazuje, które kanały przynoszą płatnych klientów. Jeśli Google przynosi 1000 odwiedzających i 50 sprzedaży, to jest5% kurs przeliczeniowy. Jeśli email przynosi 200 odwiedzających i 30 sprzedaży, to jest 15%. E-mail jest bardziej skuteczne dla każdego gościa.

Wysokość refundacji

Refundowane zamówienia są śledzone oddzielnie. Zmniejszają one sumę przychodów netto. Jeśli stawki refundacji są wysokie z określonego źródła, ruch może być niskiej jakości.

Obsługa waluty

OpsIQ przechowuje oryginalną walutę transakcyjną i kwotę. Przedsiębiorstwa wielowalutowe widzą przychody w każdej walucie. Znormalizowane raportowanie wykorzystuje skonfigurowany kurs wymiany walut.

Przykłady robocze

100 odwiedzający, sprzedaż zerowa

Scenariusz:
Twoja strona cenowa dostaje 100 odwiedzających dziennie, ale zero konwersji.
Co robić:

Badanie: (1) Użyj Session Replay na stronie cenowej odwiedzających. Patrz, jak oddziałują z tabeli cenowej. (2) Sprawdź najlepsze strony na stronie cenowej bounce rate and time- on- page. (3) Sprawdź rozmowy na czacie od odwiedzających stronę cenową. Jakie pytania zadają? (4) Porównaj swoją stronę cenową z konkurentami. (5) Spróbuj eksperymentu A / B z różnych układów cenowych.

Przynależność do kampanii marketingowej

Scenariusz:
Wysłałeś e-mail z identyfikatorami UTM. Jak zmierzyć wpływ jego dochodów?
Co robić:

Przejdź do sprzedaży i filtrować przez źródło. Szukaj parametru UTM kampanii. Zobaczysz: (1) Ile odwiedzających przyszło z e-maila. (2) Jak wielu przestawiło się na sprzedaż. (3) Całkowite dochody przypisywane kampanii. (4) Porównaj do tego samego okresu przed kampanią.

Dlaczego sprzedaż pokazuje zero, mimo że mój sklep ma rozkazy?+

Sprawdź: (1) Czy złącze platformy jest połączone i zdrowe? Idź do Connectors i sprawdź status. (2) Czy synchronizacja haka webowego jest włączona? Jeśli używasz sondażu, czy praca cron działa? (3) Czy złącze ma prawo API - Za teleskopy? Shopify, potrzebujesz read_orders.

Jak OpsIQ przypisuje sprzedaż odwiedzającemu?+

Kiedy zamówienie jest dostępne za pośrednictwem złącza, OpsIQ pasuje do poczty e-mail klienta znanego odwiedzającego. Jeśli gość został śledzony przed zakupem, sprzedaż jest przypisywana ich podróży odwiedzających, w tym źródła ruchu, strony lądowania i historii sesji.

Czy mogę ręcznie dodawać sprzedaż?+

Możesz wysłać wydarzenia sprzedaży za pośrednictwem REST API lub haki z dowolnego systemu. Format zdarzenia jest udokumentowany w zdarzeniach API sekcja.

Handel

Budowanie, uruchamianie i obsługa natywnego Storefront

W magazynie znajduje się sklep OpsIQ dla produktów, stron, lookbooków, paneli promocyjnych, checkout, konta klientów i sprzedaży AI- assisted w Chat Klienta i obsługiwane kanały społecznościowe.

Start w marketingu → Storefront

1
Wybierz przestrzeń roboczą

Potwierdź konfigurację strony. Produkty, ustawienia, strony, zamówienia i analityki są izolowane do tej przestrzeni roboczej.

2
Włącz handel elektroniczny i magazyn

Ogólne Ustawienia → Ecommerce jest organem dominującym. Publikacja w sklepach, tworzenie zamówień i płatności pozostają oddzielone, dzięki czemu można bezpiecznie przeglądać katalog.

3
Publikuj kompletne produkty

Ustaw typ produktu, cenę, walutę, inwentaryzację, warianty / opcje, media i spełnienie. Podgląd produktu i wybór zameldowania przed publikacją.

4
Konfiguracja płatności i realizacji

Podłącz bramkę lub dodaj przelew bankowy, gotówkę lub płatność. Towary fizyczne potrzebują stref dostawy lub zbierania; towary cyfrowe potrzebują chronionych plików lub kodów.

5
Uruchom czyszczenie

Napraw każdy bloker i przejrzeć każde ostrzeżenie, a następnie wypełnić zamówienie piaskownicy ze sklepu publicznego.

Rozpoczynamy o treści i polityki

Nowe i zmodernizowane sklepy otrzymują edytowalny tekst startowy dla O nas, Warunki, Prywatność, oraz Refundacje i zwroty Istniejąca kopia nie jest nigdy nadpisana.

  • Zastąp każdy [Add …] w TEMPLAT STARTERA Uwaga przed startem.
  • Używać prawdziwej nazwy prawnej, trasy kontaktowej, obietnic spełnienia, zasad zwrotu, praktyk w zakresie danych, okresów zatrzymywania i rynków obsługiwanych.
  • Uzyskaj porady odpowiednie do produktów i krajów, którym służysz. Rozpoczynamy od wskazówek operacyjnych, a nie porad prawnych.

Projektowanie, strony i promocje

Projektowanie motywów i stron

Wybierz polecany motyw kolorystyczny i kompozycję, a następnie tuningować typografię, wypełniać / gradienty, kształty, szerokość, ruch, unosić i światło / ciemne zachowanie. Podgląd pulpitu i telefonu przed zapisaniem.

O, Kontakt, Showcase / Lookbook i konto

Zbuduj każdą stronę z bloków, które można ponownie zamówić. Każdy blok posiada warianty wzornictwa premium. Zachowaj bloki powodowania, takie jak statystyki, zespół, nagrody lub cytaty wyłączone do czasu ich zawartości jest prawdziwa.

Własne strony

Ustaw tytuł, ślimak, bohater, SEO i zamówione bloki; podgląd podczas szkicu, a następnie opublikuj. Rezerwacja trasy sklepowe, takie jak koszyk, checkout, konto i polityki nie mogą być ponownie wykorzystane.

Promocyjne wyskakiwania i panele boczne

Utwórz stronę modalną z co najmniej jednym blokiem. Wybierz premium design, centrum / lewa / prawa / dolna pozycja, obciążenie / opóźnienie / wyjście / kliknięcie wyzwalacz, tło, ruch, szerokość, kupon i once- per- zachowanie odwiedzającego. Sprawdź blisko, klawiatura i układ telefonu.

Menu i stopka

Link do stron, produktów, kolekcji, zasad, konta / pomocy / koszyka działań, modal na żywo lub bezpieczne zewnętrzne URLs. Nagłówek pozycji obsługuje jeden poziom rozwijanej / mega- menu.

Klient Czatu i zleceń społecznych

Włącz sprzedaż czatu klienta, a następnie wybierz gdzie klienci mogą kupić. Asystent przeszukuje katalog i prosi serwer o autorytatywny cytat; serwer - nie model - tworzy podpisaną kartę zamówienia. Potwierdzenie odbywa się tylko za pośrednictwem tej karty w sieci lub zweryfikowanej interakcji na kanale społecznym.

WhatsAppPosłańcu!Instagram, Telegram, LINE, SMS i X używać provider- zweryfikowane konto kanałowe jako tożsamość kanału. E-mail jest nadal zbierane dla wpływów. Zamawianie Connector zachowuje podpisaną umowę uniwersalną i merchant- autorytatywny ogółem; Konfiguracja Storefront nie zmienia tego kontraktu.

Analiza informacji w sklepie

Przegląd unikalnych odwiedzających, widoki produktów, dodatki do koszyka, początek / koniec rezerwacji / zakończenia, konwersję, potwierdzone zamówienia, przychody według waluty, nabycie, urządzenia, kraje / miasta, najlepsze produkty, odzysk i ostrzeżenie o jakości danych. Konwersja wykorzystuje wyraźnie oznaczone imprezy publiczno- Sklepy; sumy walut nigdy nie są cicho połączone. Dash oznacza, że wybrany zakres nie może odpowiedzieć na pytanie konwersji - nie zero procent.

OgólneOpsIQ API

Użyj klucza na okaziciela commerce.read; analytics.read Ponadto pozwala na analizę migawki. Przestrzeń robocza klucza jest autorytatywna.

Wpisany Strefront czyta
{ "action": "commerce.storefront.get" }
{ "action": "commerce.storefront.catalog.get" }
{ "action": "commerce.pages.list", "kind": "modal", "status": "live" }
{ "action": "commerce.analytics.snapshot", "range_days": 30 }
{ "action": "commerce.readiness.get" }
{ "action": "commerce.products.list", "filters": { "active": true } }

Storefront uzyskać zwroty - konfiguracja publicznobezpieczna, URL, menu i stan przeglądu starter- recenzja. Katalog magazynowy zwraca każdy motyw, projekt strony, typ bloku, skład bloku i powłoki promocyjnej premium tak zdalni budowniczowie nigdy nie twardej kodowanie wyborów. Lista stron zwraca niestandardowe strony i modele premium. Analityka zwraca agregaty bez tożsamości klienta. Readiness zwraca aktywalne kontrole uruchamiania. OpenAPI i Postman korzystać z tych samych kontraktów.

Ostateczny prestart-drive-through

  1. Desktop i telefon: dom, wyszukiwanie, produkt / wariant, koszyk, sprawdzanie walidacji, konto, śledzenie, pobieranie, O, Kontakt, polityki, lookbook, strony, menu i każdy live promotion.
  2. Wypełnij jedną płatność piaskownicy i zweryfikuj status zamówienia, odbiór, zapas i spełnienie.
  3. Umieść jedno zamówienie czatu klienta i jeden provider- piaskownica na każdym aktywowanym kanale społecznym.
  4. Potwierdź, że wydarzenia pojawiają się pod właściwą powierzchnią i walutą w Wywiadzie Sklepu.
⚠️
Tekst polityki startowej sprawia, że sklep nie jest pusty, ale nie dokonuje kopii prawnej zrewidowanej. Uruchom Readiness zachowuje ostrzeżenie do czasu wymiany każdego polecenia.
Sprzedaż

Liście

Prowadzą do tego odwiedzający lub klienci, którzy wykazują zamiar zakupu lub wsparcia. OpsIQ automatycznie wykrywa wiodące punkty w oparciu o zachowanie: wizyty cenowe, wizyty zwrotne, interakcje czatu, rozpoczyna się i wysokie zaangażowanie. Użyj strony Leads, aby priorytetowo śledzić i karmić swój rurociąg CRM.

Liście
LiścieEkran wiodący: tabela do przeszukania z IP/ e-mail, lokalizacja, urządzenie, źródło i czasochłonne kolumny oraz górne źródła i kraj.Liścieyoursite.comSzukaj IP, miasto, kraj...Top source: Google · Top country: USIP / EMAILLOKACJAURZĄDZENIEŹRÓDŁOCZAS41.62.10.4Wielka Brytania · LondynMobilnygoogle4m 12s[email protected]USA · Nowy JorkKomputer stacjonarnydirect7m 02s[email protected]DE · BerlinMobilnyutm: reklama5m 40s203.0.113.9CA · Nowy JorkKomputer stacjonarnygoogle3m 28s1DETECTEDWysokointencyjni goście2TOPŹródła wiodące i kraje3ENRICHEDIP, lokalizacja, urządzenie, czas
Prawdziwy ekran Leads, wysokiej intencji odwiedzających jako tabeli wyszukiwania (IP/ e-mail, lokalizacja, urządzenie, źródło, czas na miejscu) z najlepszych źródeł i krajów.

Co czyni z tego trop?

Wizyty na stronach cenowych

Goście, którzy przeglądają Państwa cenę lub stronę planów aktywnie rozważają zakup.

Wizyty powrotne

Odwiedzający, którzy wracają wielokrotnie są zaangażowani, ale jeszcze nie nawróceni.

Interakcje z czatami

Goście, którzy rozpoczynają czat aktywnie szukają pomocy, albo przedzakupem lub po zakupie.

Rozpoczęcie odprawy

Goście, którzy osiągną stronę wymeldowania, ale nie ukończą zakupu.

Formularze wniosków

Goście, którzy składają formularz kontaktowy, demo lub formularz rejestracyjny.

Zaangażowanie na wysokiej stronie

Odwiedzający, którzy oglądają wiele stron z długim czasem trwania sesji są głęboko badane.

Panel szczegółów ołowiu

Kliknij dowolny trop, aby zobaczyć ich pełny profil:

Tożsamość

Nazwa, e-mail, firma, jeśli jest znana. Anonimowe tropy pokazują IP i lokalizacji.

Sesje

Wszystkie sesje z tego punktu wiodącego z przepływem strony, czasem trwania i źródłem.

Przeglądane strony

Każda strona, którą odwiedzili, zamówiona przez regencję.

Źródło

Jak cię znaleźli: organiczny, płatny, społeczny, skierowanie, bezpośredni.

Punkt wiodący

A0-100 wynik w oparciu o intensywność zachowania, recesji i intencji strony.

Status CRM

Czy ten trop został dodany do CRM jako kontakt czy umowa.

Podwyższenie sprzedaży

Wygenerowana przez AI- sugestia co dalej (np. "Odwiedzana cena 3 razy · rozważ proaktywne wsparcie").

Odznaka wiodąca o wysokiej wartości

Prowadzi z wynikiem powyżej 80 uzyskać "High Value" odznakę. Są to twoje najgorętsze perspektywy. Preordityzuj je do zasięgu, proaktywny czat lub wejście na rurociąg CRM.

Przykłady robocze

/ Roboty w gorącej wodzie

Scenariusz:
A lead przeglądał twoją stronę cenową 3 times in 2 dni, rozpoczął czat pytając o plany przedsiębiorstwa, ale nie kupił.
Co robić:

Jest to bardzo ambitny trop. (1) Sprawdź ich główne szczegóły dotyczące informacji o firmie i roli. (2) Przegląd zapisu czatu pod kątem konkretnych potrzeb i zastrzeżeń. (3) Stwórz umowę w CRM z zebranych informacji. (4) Przydziel dalsze zadanie dla członka zespołu sprzedaży. (5) Jeśli powrócą na stronę cenową, proaktywna zasada czatu może wywołać spersonalizowaną wiadomość.

Konwersja anonimowych prowadzi do kontaktów CRM

Scenariusz:
Masz 50 anonimowe tropy z wysoką wynikami, ale nie ma adresów e-mail.
Co robić:

Opcje: (1) Stwórz proaktywną zasadę, która oferuje zniżki lub zasobów do pobrania w zamian za e-mail na stronach high-intent. (2) Użyj widget czatu, aby poprosić o e-mail, gdy anonimowi goście rozpocząć rozmowę. (3) Dodawanie symbolu tożsamości do stron logowania / rejestracji, tak aby zwracający się goście byli automatycznie identyfikowani.

Jak oblicza się wynik?+

Wynik uwzględnia: powtarzalność wizyt (niedawne = wyższe), częstotliwość wizyt (więcej = wyższe strony), przeglądane strony (ceny / checkout = wyższe ceny), czas trwania sesji (dłuższe = wyższe rozmowy), interakcje czatu (zaangażowane = wyższe osoby) oraz wizyty powrotne (wielokrotne sesje = wyższe grupy).

Czy mogę dostosować zasady zdobywania punktów?+

Tak. W konfiguracji CRM można dodać zasady lead- scoring, które zwiększają wynik w oparciu o konkretne słowa kluczowe, zdarzenia, źródła lub wzory stron.

CRM

Twój CRM · zacznij tutaj

OpsIQ statki pełne AI-first CRM, które rejestruje prawdę klienta, czyści dane, prowadzi wyniki, oferty trenerów, prognozowana przychód i działa, z inteligencją strony internetowej, wsparcie, bilety, produkty i płatności jako jeden wykres na żywo. Każda akcja AI jest pozyskiwana, wyjaśnialna, odwracalna i autoryzacyjna.

AI CRM
Przegląd AI CRMWybór Trust Dial do Copilot obok czterech kart agenta AI: Steward, Prospector, Retention i Analyst.AI CRMprzestrzeń roboczaWybierz opcję zaufaniaPodręcznikKopilotAutopilotIle AI robi samaDSPrzewodniczącyDedupe, bogacz,walidacja danychSDRProspektorZnajdź & wyniknowe przedsiębiorstwaRTZatrzymanieSpot churn,wznowienie napęduANAnalitykPrognoza &objaśnienia liczb1AI-FIRSTCzterech specjalistów2YOU DECIDEAutonomia wyboru zaufania3TRUSTEDZagorzałe i odwracalne
AI-first CRM prowadzone przez czterech specjalistów, i Trust Dial, który decyduje, jak dużo robią samodzielnie.

Przegląd stron CRM

AI CRM (Centrum Dowodzenia)

Zacznij tutaj.

Twój dzienny ekran: impuls dochodowy, to co AI znalazł, co zrobił, kolejka aprobaty, kolejne ruchy, agent zdrowia i ROI.

Kontakty

Bazowa

Ludzie i firmy w CRM. Szukaj, filtruj, zdobądź wynik i zarządzaj profilami.

Rurociąg

Bazowa

Wizualna tablica z drag- i-drop etapy, wygrana prawdopodobieństwo, i AI coaching.

Prognozy i sprawozdania

Bazowa

Prognozowanie klasy zaszeregowania: zaangażowane, prawdopodobne, najlepsze przypadku, z przedziałem ufności i śledzeniem dokładności.

Cykl życia

Bazowa

W miejscu, w którym stoi każdy klient: aktywny, zagrożony, gotowy do rozwoju, odnawiany lub żłobki.

Zbuduj mój CRM

Konfiguracja

Opisz konfigurację CRM w prostym języku angielskim. OpsIQ generuje odwracalny plan i stosuje go po zatwierdzeniu.

CRM Zdrowie

Operacje

Self- check strona: schematy, agentów, trasy, działania AI i licz dane na żywo.

Jak OpsIQ zapewnia bezpieczeństwo

Zapytaj przed działaniem

Propozycje AI idą do kolejki aprobaty. Zatwierdzasz, edytujesz lub odrzucasz każdy z nich. Nic się nie dzieje bez twojego powiedzenia.

Nigdy nie nadpisz

Kiedy AI sugeruje zmianę, pokazuje bieżącą wartość i proponowaną wartość. Dane wprowadzone przez człowieka mają ochronę przed powstawaniem.

Wszystko jest odwracalne.

Każda akcja AI jest zapisywana w dzienniku. Możesz cofnąć każdą zmianę jednym kliknięciem.

Wytłumaczalne

Każda rekomendacja AI pokazuje swoje rozumowanie i źródła danych, których użyła.

Nowiutki?

1
Otwórz AI CRM

Kliknij AI CRM w lewej nawigacji. Centrum dowodzenia pokazuje aktualny stan.

2
Sprawdź CRM Health

Otwórz CRM Health, aby sprawdzić schematy, agentów i trasy są gotowe.

3
Importuj kontakty

Jeżeli złącze jest aktywne (Shopify, WHMCS, itp.), kontakty są importowane automatycznie. CSV lub tworzyć ręcznie.

4
Utwórz rurociąg

Idź do Pipeline i stworzyć swój pierwszy rurociąg z fazami (np., Ołów, Kwalifikowane, Wniosek, Negocjacje, Wygrał, Zagubiony).

5
Dodaj swoją pierwszą ofertę

Utwórz umowę z kontaktem, ustaw kwotę i scenę, a następnie niech Deal Coach Cię prowadzi.

Muszę używać CRM?+

Nie. CRM jest opcjonalne. OpsIQ działa doskonale jako tracking + wsparcie + AI platformy bez CRM-. Włącz go, gdy jesteś gotowy do zarządzania sprzedaży i relacji z klientami.

Czy CRM może działać bez złączy?+

Tak. Można tworzyć kontakty i transakcje ręcznie. Złącza wzbogacają CRM danymi platformy (zamówienia, prenumeraty, bilety), ale nie są wymagane.

Czym jest warstwa zaufania?+

Warstwa zaufania jest systemem bezpieczeństwa, który kontroluje to, co AI może zrobić. Tryb kopiowania (domyślnie): AI proponuje, człowiek zatwierdza. Tryby autopilota (opt- in): Al działa automatycznie na niskie ryzyko, odwracalne operacje.

CRM

Ekran domowy AI CRM

Centrum dowodzenia jest codziennie odprawa. Otwórz go każdego ranka, aby zobaczyć, co się stało, co trzeba zwrócić uwagę i co zrobić dalej.

Centrum dowodzenia
Centrum dowodzenia CRMDom CRM z parametrami / Win- rate / Pipeline, ważony-prognoza KPI i kolejka propozycji AI z Approve i Remiss w każdym wierszu.Centrum dowodzenia CRMprzestrzeń roboczaPrognozaStawka wygranejRurociągFORENAST · THE Q74k dolarów87%Propozycje AI · zatwierdzaj kolejkęUtwórz transakcję · Acme $24kod rozmowy z kupującymZatwierdzenieOdmaszerowaćPrzesuń Nimbus → Wniosekwykryto pozytywną odpowiedźZatwierdzenieOdmaszerowaćZadanie logowania · kontynuuj szczytbrak aktywności w dniach 7ZatwierdzenieOdmaszerować1TOGGLEPrognoza · Szybkość wygranej · Pipeline2AI PROPOSESTransakcje, etapy, zadania3YOU DECIDEZatwierdzenie lub odrzucenie
Prawdziwe Centrum dowodzenia: przełączanie pomiędzy prognozą, szybkością wygranej i pipeline oraz praca w kolejce propozycji AI, zatwierdzanie lub odrzucenie transakcji, ruchów scenicznych i zadań, które sugeruje.

Co pokazuje Centrum Dowodzenia

Dzisiejsze numery

Wartość pipeline, oferty wygrane / utracone, nowe tropy, aktywne umowy i trend przychodów, migawka obecnego stanu.

Co znalazł OpsIQ

AI-odkryte spostrzeżenia: nieaktualne transakcje, konta ryzyka, nowe możliwości, problemy z jakością danych i sygnały rynkowe.

Co zrobił OpsIQ

Działania, które AI podjęła (w autopilocie) lub zaproponowała (w kopilocie): zaliczki na etapie, aktualizacje wyników, wzbogacenie kontaktów i tworzenie zadań.

Zatwierdzenie zapotrzebowania

Kolejka propozycji AI czeka na decyzję. Każdy pokazuje proponowane działania, rozumowanie i dowody. Zatwierdzenie, edycja lub odrzucić.

Następny ruch

Lista rankingowa AI- ranking 10 najważniejszych rzeczy do zrobienia dzisiaj: kontynuacja gorącej transakcji, sprawdzić konto ryzyka, badania nowego ołowiu, itp.

Status pomocnika

Zdrowie agentów AI: Capture, Data Steward, Deal Intelligence, Deak Coach, SDR, Retention. Green = running, Amber = potrzebuje uwagi, czerwony = błąd.

Wyniki

ROI tracking: transakcje na które wpływa AI, czas zaoszczędzony, dokładność prognoz i porównanie do ręcznej pracy CRM.

Poranne odprawa pracy

1
Czytaj dzisiejsze numery

Sprawdź rozwój zdrowia i dochodów rurociągu. Czy jesteś na torze w tym miesiącu?

2
Wyczyść kolejkę homologacji

Przegląd każdej propozycji dotyczącej ptasiej grypy. Zatwierdzenie bezpiecznych działań, edycja w razie potrzeby, odrzucenie złych sugestii.

3
Sprawdź co znalazł OpsIQ

Czy są jakieś oferty na ryzyko? Czy istnieją nowe możliwości?

4
Przepracuj listę kolejnych ruchów

Zacznij od najwyższego priorytetu. AI rankingu tych przez pilny i potencjalny wpływ.

Łapanie po przerwie

Scenariusz:
Co się stało, gdy cię nie było?
Co robić:

Otwórz centrum dowodzenia i sprawdź: (1) "Co OpsIQ"pokazuje wszystkie działania AI podczas twojej nieobecności. (2) "Potrzeba zatwierdzenia" pokazuje propozycje czekające na Państwa przegląd. (3) "Co OpsIQ znaleźć "podkreśla pilne przedmioty. (4) Ustaw zakres daty deski rozdzielczej na okres nieobecności, aby zobaczyć trend.

CRM

Kontakty, firmy i transakcje

CRM organizuje relacje biznesowe w cztery obiekty: Kontakty (ludzie), Firmy (organizacje), Umowy (możliwości dochodów) i Zadania (działania następcze).

Obiekty CRM
Obiekty CRMRekord kontaktowy związany z obiektami firmy, Deal i Task na wykresie podłączonym.Obiekty CRMprzestrzeń roboczaKontaktosoba · e-mail · telefonPrzedsiębiorstwoaccountsZgodamożliwość przybyciaZadanieDziałania następcze1OBJECTSKontakty, firmy, umowy2LINKEDJeden połączony wykres3TASKSPrzyłączone follow- upsComment
Cztery główne obiekty (kontakty, firmy, umowy i zadania) połączone z jednym wykresem klienta.

Kontakty

Co to jest kontakt

Osoba w CRM. Mogą być one klientem, perspektywą, partnerem lub liderem. Kontakty mają e-mail, nazwisko, firmę, znaczniki, etap cyklu życia i punktów gorącej.

Znalezienie kontaktów

Użyj paska wyszukiwania, aby znaleźć po imieniu, e-mail, firma lub tagi. Użyj filtrów: etap cyklu życia, wynik wiodący, źródło, kraj, ostatni termin aktywności, przypisany właściciel.

Profil kontaktowy

Kliknij kontakt, aby zobaczyć ich pełny profil: dane osobowe, firma, oferty, działania, bilety, czaty, wizyty na stronie internetowej, wynik wiodący i spostrzeżenia AI.

Punktacja w skali gorącej

A0-100 wynik obliczony na podstawie sygnałów zachowania: wizyty na stronie internetowej, zaangażowanie e-mail, interakcje czatu, historia zakupu, i recesji. Wyższy = gorętsze.

Przedsiębiorstwa

... więcej biletów...
Kontakt- firma łącząca

Kontakty są połączone z firmami poprzez domenę e-mail lub ręcznie przypisywane.

Transakcje

Co to za układ?

Możliwość przybycia. Transakcje mają tytuł, kwotę, rurociąg, etap, prawdopodobieństwo wygranej, data zamknięcia, przydzielony właściciel i powiązane kontakty / firma.

Prawdopodobieństwo wygrania

Procentowa szansa wygrania transakcji. Ustawienie ręcznie lub obliczone przez AI na podstawie historycznych danych o zwycięstwie.

Zdrowie transakcji

Zielony (zdrowy), bursztynowy (zagrożony) lub czerwony (zatrzymany). W oparciu o powtarzalność aktywności, czas trwania sceny i sygnały zaangażowania.

Zadania

Co to jest zadanie

Działania następcze przypisane osobie. Zadania mają tytuł, termin wymagalności, priorytet, typ (połączenie, e-mail, spotkanie, inne) oraz powiązane kontakty / umowy.

Zadania generowane przez AI-

AI tworzy zadania automatycznie, gdy wykrywa coś wymaga uwagi: kontynuacja na opóźniony umowy, odpowiedź na konto ryzyka, badania nowego ołowiu.

Znalezienie gorących śladów

Scenariusz:
Chcesz zobaczyć wszystkie kontakty high-score w Wielkiej Brytanii, którzy nie zostali skontaktowani niedawno.
Co robić:

Przejdź do Kontaktów. Filtruj według: Wynik wiodący > 80, Country = United Kingdom, Last activity > 7 To są twoje najseksowniejsze zaniedbywane tropy, priorytetowe działania.

Tworzenie umowy z kontaktem

Scenariusz:
Kontakt właśnie wyraził zainteresowanie planem przedsiębiorstwa podczas rozmowy.
Co robić:

Otwórz profil kontaktowy. Kliknij przycisk "Utwórz umowę". Wpisz tytuł umowy (np. "Acme Corp - Enterprise Plan"), kwotę, rurociąg i scenę (np., "Kwalifikowany"). Ustaw datę zamknięcia i przypisz ją sobie. Trener Rozdania rozpocznie śledzenie tej okazji.

CRM

Gazociąg (plansza transakcji)

Pipeline jest wizualną tablicą, gdzie rozdaje przejść przez etapy z lewej do prawej. Przeciągnij i upuść karty do góry oferty. Każda karta pokazuje kwotę transakcji, wygraj prawdopodobieństwo, i stan zdrowia.

Rurociąg
Rurociąg CRMEkran rurociągów z Open- deals, Open- value, Ważony - prognoza i Attributed- deal statystyki, przycisk New- default, kolejka AI Approve, a także Lead / Qualified / Won planszy.Rurociągprzestrzeń roboczaOtwarte oferty23Wartość otwarta128k dolarówPrognoza ważona74k dolarówAtrakcyjne oferty12+ Nowa umowaZaznacz kolejkę2 do przegląduOŁOWIVolt Inc.4 tys. dolarówLumeCity in Germany6k dolarówKWALIFIKOWANENimbus30k dolarówSzczyt9 tys. dolarówWINOrbita48 tysięcy dolarów1LIVE STATSWartość otwarta i prognoza ważona2AI QUEUEZatwierdzenie proponowanych transakcji3BOARDPrzeciągnij oferty według etapu
Prawdziwy ekran rurociągów: statystyki na żywo (wartość otwarta, prognoza ważona), kolejka AI Approve dla proponowanych ofert oraz plansza drag- and- drop.

Korzystanie z płyty rurociągowej

1
Zobacz swoje oferty

Gazociąg pokazuje wszystkie aktywne oferty w postaci kart ułożonych w kolumnach (etapach). Każdy nagłówek kolumny pokazuje całkowitą wartość transakcji na tym etapie.

2
Przeciągnij do przodu

Przeciągnij kartę do następnego etapu. Prawdopodobieństwo wygranej i liczy aktualizację natychmiast. Jeśli ruch nie powiodło się (błąd walidacji), karta zatrzaska się z powrotem do swojej pierwotnej pozycji.

3
Sprawdź karty identyfikacyjne

Zielona odznaka = zdrowe (niedawne działanie, na torze). Amber = zagrożone (spowolnienie, wymaga uwagi). Czerwony = zablokowany (brak aktywności zbyt długo).

4
Kliknij aby uzyskać szczegóły

Kliknij kartę, aby otworzyć panel szczegółów transakcji z kontaktami, działaniami, Deal Coach krótkie i szybkie działania.

Kolejka homologacji

Propozycje dotyczące AI pojawiają się w kolejce aprobaty na szczycie strony dotyczącej rurociągu. Każda propozycja pokazuje, co chce zrobić, dlaczego i jakie są dowody. Możesz:

Zatwierdzenie

Akceptuj propozycję jako - jest. Działanie przebiega przez Warstwę zaufania i jest zapisywane w dzienniku.

Edycja

Zmień wniosek przed zatwierdzeniem. Na przykład, zmienić proponowany etap lub dostosować kwotę.

Odrzuć

Odrzucenie propozycji. AI uczy się od odrzuceń, aby w przyszłości przedstawić lepsze propozycje.

Wyjaśnione prawdopodobieństwo wygranej

Prawdopodobieństwo wygranej może być ustawione ręcznie lub obliczane przez AI. Kiedy AI oblicza go, używa modelu wyszkolonego na własnych zamkniętych transakcjach (wygrał i stracił). Jeśli nie masz wystarczająco dużo danych historycznych, AI wykorzystuje domyślne prawdopodobieństwo etapu. Prawdopodobieństwa napędza ważoną prognozę: a $10,000 umowa w 30% prawdopodobieństwo przyczynia się $3,000 do prognozy "prawdopodobnego".

Przeniesienie umowy do Won

Scenariusz:
Klient podpisał kontrakt i zapłacił.
Co robić:

Przeciągnij kartę do sceny "Won". OpsIQ będzie: (1Zaznacz umowę jako zamkniętą wygraną. (2) Aktualizacja prognozy. (3) Dodać "Won" do osi czasu. (4) Jeśli skonfigurowano, uruchom zdarzenie webhook (crm.deal.won). (5) Aktualizuj etap cyklu życia kontaktu do "Klienta".

Zakłócenia w systemie

Scenariusz:
Chcesz znaleźć umowy, które były w tym samym stadium zbyt długo.
Co robić:

Szukaj czerwonych (zablokowanych) tablic na tablicy rurociągów. Te oferty nie miały aktywności dłużej niż skonfigurowany próg gnicia (ustawiony w konfiguracji CRM > Pipelines). Kliknij każdy zatrzymany układ, aby zobaczyć rekomendację Deal Coach do reaktywacji.

Mogę mieć kilka rurociągów?+

Tak. Przejdź do konfiguracji CRM > Rurociągi, aby utworzyć dodatkowe rurociągi. Przypadki wspólnego użytku: oddzielne rurociąty dla nowych firm vs odnowy lub różnych produktów / usług.

Co się stanie, gdy zawrę umowę z "Zagubionym"?+

Umowa jest oznaczona jako closed-lost. Będziesz proszony o powód straty. Umowa jest usuwana z aktywnej tablicy, ale można znaleźć w filtrze zamkniętych transakcji. Kontakt pozostaje w CRM.

CRM

Coaching w ramach umowy

Trener Deal analizuje każdą transakcję i daje krótki opis stanu zdrowia, sygnałów ryzyka, kluczowych osób, lista kwalifikacji, przygotowanie do spotkania i zasugerowane kolejne działania. Wszystko jest pozyskiwane. Trener pokazuje, który bilet, czat, lub aktywność każde roszczenia pochodzi.

Trener umowy
Trener umowyKarta transakcji z wykazem sygnałów ryzyka wykrytych przez AI- ze źródłami dowodów, obok rekomendacji AI i przycisku Draft- email.Trener umowyprzestrzeń roboczaAcme Corp ·$24,000Etap: Wniosek · 60% wygrajSYGNAŁY RYZYKABrak odpowiedzi w dniach 10Mistrz poszedł cichoKonkurent wymieniony w czacieŹródła: bilet #482 · czat 6/12 · wątek e-mailAI zalecaPonowne zaangażowanie gospodarkikupujący z podsumowaniem ROIi 7- dzień zamknięcia planu.Projekt e-maila1SIGNALSDlaczego umowa może się poślizgnąć?2SOURCEDKażde roszczenie zawiera dowody.3DZIAŁANIEKliknij jeden krok
Trener flagi dlaczego umowa może się poślizgnąć (każdy sygnał cytuje swoje źródło) i daje Ci następny ruch do podjęcia.

Co trener ci mówi?

Wyjaśnienie zdrowotne

Dlaczego umowa jest zdrowa, zagrożona lub zablokowana. Sygnały szczegółowe: dni na scenie, data ostatniego kontaktu, częstotliwość aktywności, wymienione przez konkurenta, wzory sprzeciwu.

Sygnały

Sklasyfikowany do: zgłoszonych zastrzeżeń, wymienia konkurenta, rozmów cenowych, wskaźników ryzyka wsparcia, sygnałów odnowy / rozszerzenia. Każdy sygnał łączy się ze swoim źródłem (zapis czatu, bilet, e-mail, aktywność).

Mapa i blokada

Kto pomaga w transakcji (mistrz) i kto opiera się (bloker). W oparciu o analizę interakcji i role kontaktu.

Lista kontrolna kwalifikacji

MEDDICC lub BANT lista kontrolna (konfigurowalna) pokazująca, które kryteria kwalifikacji są spełnione i których brakuje.

Przygotowanie do spotkania

Przed planowanym spotkaniem trener tworzy krótki program działań, kluczowe punkty do omówienia, pytania do zapytania, zagrożenia związane z zajęciem się nimi oraz materiały do przygotowania.

Odpowiedzi i plany połączeń

Sugerowane kolejne wiadomości lub skrypt wywołania w oparciu o aktualny stan umowy i ostatnie interakcje.

Terminy dowodowe

Każde zastrzeżenie, że trener dokonuje linków do źródła: numer biletu, identyfikator zapisu czatu, data aktywności lub wizyta na stronie internetowej.

Jak korzystać z trenera

1
Przeczytaj streszczenie

Otwórz każdą transakcję i przewiń do sekcji Deal Coach. Przeczytaj stan zdrowia i kluczowe sygnały.

2
Zamknięcie braków w kwalifikacjach

Sprawdź listę kwalifikacji. Jeśli brakuje "Kupującego Gospodarczego", planuj identyfikację i zaangażowanie posiadacza budżetu.

3
Ustawa o sugestiach

Trener proponuje konkretne działania. Kliknij, aby utworzyć zadanie, sporządzić e-mail lub zaplanować spotkanie, wszystkie kierowane przez kolejkę zatwierdzenia.

Przygotowywanie się do wielkiego spotkania

Scenariusz:
Jutro masz spotkanie z perspektywą dotyczącą umowy $50,000.
Co robić:

Otwarcie umowy i przeczytanie sekcji Meeting Prep. Pokazuje: (1) Kluczowe punkty rozmów oparte na ostatnich interakcjach. (2Sprzeciwy, które wygłaszali w zeszłym tygodniu. (3) Konkurent, o którym wspominali w bilecie na wsparcie. (4) Pytania o ich linię czasową. (5) Czynniki ryzyka, które mogą być aktywne. Wykorzystaj ten krótki dokument do przygotowania ukierunkowanego programu opartego na dowodach.

Zrozumienie, dlaczego umowa jest zagrożona

Scenariusz:
Rurociąg pokazuje czerwoną odznakę na umowie, którą według ciebie idzie dobrze.
Co robić:

Kliknij transakcję i przeczytać wyjaśnienie Deal Coach zdrowia. Może powiedzieć: "Ta umowa została w fazie Proposal dla 22 dni (próg: 14). Ostatni kontakt był 11 dni temu. Główny kontakt otworzył bilet wsparcia na temat kwestii migracji danych 5 dni temu (bilet # T -892). Sugestia: zająć się problemem migracji i zaplanować kolejne połączenie. "Teraz wiesz dokładnie, co naprawić.

CRM

Prognozy i sprawozdania

Prognozowanie klasy dealerskiej z zakresu obronnego, wyjaśnienia poziomu deal- zmiany i śledzenia dokładności, dzięki czemu można udowodnić i wyjaśnić swoje numery.

Prognoza
Prognozakwartalny numer prognozy z pasmami Commit, Best- case i Pipeline oraz notatka dokładności.Prognozaprzestrzeń roboczaFORRAST · TO KWARTER312k dolarów87% do bramkiZgłoś sięNajlepszy przypadekRurociągAI- ważony przez transakcję zdrowia i historii · dokładność śledzona w czasie1KATEGORIAWykazanie się do rurociągu2AI-WEIGHTEDPoprzez handel zdrowiem3PROVABLEDokładność śledzona
Wypowiedź, najlepszy przypadek i rurociąg na rzut oka, AI- ważony przez handel zdrowia, z dokładnością śledzone, aby można było go bronić.

Kategorie prognostyczne

Zaangażowany

Zajmuje się 80% lub wyższe prawdopodobieństwo wygranej. Są to najbardziej prawdopodobne wygrane. To powinno być minimalne spodziewane przychody.

Prawdopodobieństwo ważone przez AI-

Wszystkie otwarte transakcje ważone przez ich prawdopodobieństwo wygranej obliczonej przez AI. jest to najbardziej realistyczna prognoza tego, co zamkniesz.

Najlepszy przypadek

Wszystkie otwarte oferty o pełnej wartości. Jest to maksymalny możliwy dochód, jeśli wszystko idzie doskonale (rzadko).

Przedział ufności

An 80% pasmo prawdopodobieństwa pokazujące zakres realistyczny. Przykład: "Prawdopodobnie zamkniesz między $45,000 oraz $72,000 Ten kwartał ".

Co się zmieniło i dlaczego

Prognoza zawiera tygodniowe-ponad-tygodniowe zmiany przypisywania. $15,000, raport wyjaśnia dokładnie, które transakcje spowodowały zmianę: "Deal A poślizgnął się do następnego kwartału ($8,000), Deal B lost ($5,000), Deal C reducted in value ($2,000)."

Dokładne śledzenie

POSTANOWIENIA DOTYCZĄCE POŁOWÓW

Średnia bezwzględna wartość procentowa błędu: jak daleko od prognoz były historycznie. Niższa jest lepsza 15% oznacza, że prognozy są zazwyczaj w 15% faktycznych wyników.

Kalibracja prawdopodobieństwa wygranej

Brier wynik pomiaru jak dobrze wygrać prawdopodobieństwa dopasować rzeczywiste wyniki.70% prawdopodobieństwo faktycznie wygrać 70% w tym czasie, kalibracja jest dobra.

Tygodniowe migawki

OpsIQ rejestruje migawkę prognozy każdego tygodnia (poprzez cron). Z czasem można zobaczyć, jak dokładność prognozowania poprawia.

Rolupy i ostrzeżenia

Przekształcanie międzystopniowe

Ile transakcji przejść z każdego etapu do następnego. 80% przejść z Kwalifikowanych do wniosku, ale tylko 20% przejść od wniosku do negocjacji, Twoje propozycje mogą wymagać pracy.

Współczynnik wygranej dla źródła

Które źródła wiodące produkują najwięcej zwycięstw. Zainwestuj więcej w wysokiej jakości źródeł winowych.

Wydajność właściciela

Jak każdy członek zespołu sprzedaży wykonuje: oferty wygrane, wartość rurociągu, średni rozmiar transakcji, stawka wygranej.

Ostrzeżenia

Sandbaging (nierealistycznie niskie prawdopodobieństwo), nadmierne zaangażowanie (nierealnie wysokie) i zobowiązanie - ryzyko (wysokie prawdopodobieństwo transakcji pokazujące sygnały stojak).

Zrozumienie spadku prognozy

Scenariusz:
Twoja kwartalna prognoza spadła z $180,000 do $155,000 od zeszłego tygodnia.
Co robić:

Otwórz stronę Prognoza i sprawdź "Co się zmieniło". Raport pokazuje: "Acme Corp deal ($15,000) przeniesiony do Lost, wybrany konkurent. Beta Inc deal ($8,000) data zamknięcia przesunięta do następnego kwartału. Nowa umowa z Gamma LLC ($3,000) dodany w tym tygodniu. "Zmiana netto jest -$20,000 + $3,000 = -$17,000, wyjaśniając spadek z $180K do $163K (z pozostałych 8K $wyjaśnione przez korekty prawdopodobieństwa na innych transakcjach).

CRM

Znalezienie nowej firmy

Agent Prospecting pomaga znaleźć i badania potencjalnych klientów. Opisz swojego idealnego klienta, dodać firmy docelowe, a niech badania AI, wynik, i projekt pierwszy-dotykowy outreach.

Perspektywy
PerspektywyLista firm z perspektywą AI- znaleźć dopasowane notatki, wyniki i przycisk Draft- outreach każdy.Perspektywyprzestrzeń roboczaPerspektywy znalezione przez agenta SDRNorthwind Ltd.SaaS · 50 personel · pomoc przy zatrudnianiu88Projekt pomocy technicznejCobalt MfgProdukcja · 200 personel74Projekt pomocy technicznejMesa Retaile-commerce · 30 pracownicy69Projekt pomocy technicznejVega HealthOpieka zdrowotna · pracownicy 8063Projekt pomocy technicznej1FINDRachunki docelowe źródeł ptasiej grypy2ZAKRESDopasowanie & intencja ranking3DRAFTPierwszy dotyk napisany dla Ciebie
Agent SDR znajduje firmy docelowe, zdobywa je na dopasowanie i przygotowuje pierwszy-dotykowy outreach dla Twojej recenzji.

Ustawienie czasu jednego

1
Opisz swojego idealnego klienta

Przejdź do konfiguracji CRM > Prospecting. Opisz swój idealny profil klienta (ICP): branże docelowe, rozmiary firmy, tytuły pracy, skupienie geograficzne, warunki produkcji i minimalny wynik dopasowania. Przykład: "B2B SaaS firm z 50-500 pracownicy w USA / UK, sprzedający narzędzia deweloperskie, z wiceprezesem ds. sprzedaży lub szefem wzrostu jako głównym kontaktem ".

2
Dodać przedsiębiorstwa docelowe

Wprowadź domeny lub nazwy firm, które chcesz badać. Możesz również pozwolić AI zaproponować firmy oparte na ICP.

3
Przegląd wyników badań

AI wzbogaca każdą firmę o dostępne dane: rozmiar, przemysł, stos technologii, najnowsze wiadomości i dopasowanie wynik z wyjaśnieniem.

4
Zatwierdzanie działań informacyjnych

Dla firm dobrze dopasowanych, AI projektuje spersonalizowany pierwszy-dotykowy komunikat. Przegląd i zatwierdzenie w kolejce.

Dopasowanie

Każda perspektywa dostaje0-100 wynik dopasowania na podstawie pięciu czynników:

Zużycie ICP

Jak dobrze firma pasuje do twojego idealnego profilu klienta (przemysł, wielkość, lokalizacja).

Sygnały ostrzegawcze

Czy są dowody, że potrzebują teraz twojego produktu?

Proxy budżetowe

Wielkość przedsiębiorstwa, etap finansowania i wskaźniki dochodów wskazują na dostępność budżetu.

Zgodność produktu

Jak istotny jest dla nich produkt oparty na przemyśle i technologii.

Zadanie wsparcia

Czy można skutecznie służyć temu klientowi (strefa czasowa, język, złożoność).

Badanie firmy docelowej

Scenariusz:
Chcesz ocenić, czy warto kontynuować acme.com.
Co robić:

Dodaj acme.com do listy poszukiwań. AI powraca: Wynik dopasowania 78/100 (dobre dopasowanie). Powody: B2B SaaS, 120 pracownicy, US- based, niedawno zatrudniony wiceprezes sprzedaży (sygnał pilny), wykorzystuje konkurenta X (mecz produktów). Sygnały zakupu: odwiedził stronę cenową dwa razy w zeszłym miesiącu (z śledzenia strony internetowej). Najlepszy kontakt: [email protected] (Wiceprezes ds. Sprzedaży). Skreślono odniesienia do otwierającego ich ostatnich wizyt na stronach dotyczących zatrudnienia i ustalania cen.

CRM

Automatyczne sekwencje follow- up

Sekwencje automatyzacji wielostopniowej follow- up: połączenie poczty e-mail, czekać, zadanie, wywołanie i webhook kroków, które działają automatycznie po zatwierdzeniu początkowego wysłania.

Sekwencje
Sekwencje follow- upPrzepływ sekwencyjny poziomy: e-mail, czekać trzy dni, e-maila, a następnie zadanie, z wykrywaniem odpowiedzi.Sekwencje follow- upprzestrzeń roboczaPo zatwierdzeniu pierwszego wysłać →E-mailIntroCzekaj.Dni3E-mailPodsumowanieZadanieZawołajKroki mogą być e-mail, czekać, zadanie lub haczyk webhook. Automatyczne odpowiedzi zatrzymują sekwencję.1AUTOMATEWieloetapowe monitorowanie2STEPSE-mail · oczekiwanie · zadanie · webhook3YOU APPROVEPierwszy wyślij jest obstawiony
Zainstalowane multi- step follow- up (e-mail, czekać, e-maile, zadanie), które zatwierdzasz najpierw i odpowiedź zatrzymuje się automatycznie.

Jak działają sekwencje

1
Utwórz sekwencję

Zdefiniuj kroki: e-mail, czekaj 3 dni, e-mail, czekaj 5 dni, zadanie (wywołaj jeśli nie odpowiesz), e-mail. Każdy krok email ma szablon można dostosować.

2
Zapisuj kontakty

Dodaj kontakty do sekwencji. AI może również zaproponować zapisanie się z wyników wyszukiwania.

3
Automatyczne wykonanie

Kroki są automatycznie uruchamiane zgodnie z harmonogramem. Jeśli kontakt w którymś momencie odpowie, sekwencja zatrzyma się automatycznie.

4
Wyniki toru

Patrz stawki otwarte, odpowiedzi, kursy konwersji i unsubskrybowane na krok. Użyj tego do optymalizacji sekwencji.

Odpowiedź na pytanie

W przypadku odpowiedzi na pytania zawarte w kwestionariuszu, AI klasyfikuje odpowiedź:

Pozytywny

Zainteresowany, chce rozmawiać. Sekwencja wstrzymuje się, zadanie stworzone do kontynuacji.

Sprzeciw

Ma obawy, ale nie odrzuca. Sekwencja wstrzymuje się, zadanie stworzone ze szczegółami sprzeciwu.

Wysubskrybuj

Chce przestać odbierać wiadomości. Kontakt jest tłumiony na stałe.

Nie teraz.

Zainteresowany, ale czas jest zły. Sekwencja pauzy, zadania snooze stworzony.

Nie ta osoba.

Sekwencja zatrzymuje się, kontakt jest oznaczony do przeglądu.

Wsparcie

Pytanie o wsparcie, a nie odpowiedź na sprzedaż.

Ochrona przed spamem

Postępowanie z opt- out

Prośby o rezygnację z subskrypcji są natychmiast honorowane, a kontakt jest tłumiony ze wszystkich przyszłych sekwencji.

Codzienne wysyłanie czapki

Domyślny limit dziennego poziomu pracy (domyślnie: e-maile 1,000). Zapobiega masowi wysyłania, które wyzwalają filtry spamu.

Granica kontaktu

Maksymalna wiadomość 1 na kontakt dziennie. Zapobiega przytłaczającym osobom.

Obchodzenie się z zawiązanymi nasadkami

Kroki, które przekraczają dzienne czapki są przesunięte na następny dzień. Nigdy nie są upuszczane lub pomijane.

Co się stanie, jeśli kontakt otworzy bilet wsparcia podczas sekwencji?+

Sekwencja automatycznie się przerywa. Wsparcie ma pierwszeństwo przed zasięgiem. Sekwencję można ręcznie wznowić po rozwiązaniu problemu wsparcia.

Czy można wykonać sekwencję testów A / B?+

Nie bezpośrednio w ramach sekwencji, ale można stworzyć dwie sekwencje z różnych wiadomości i porównać ich wyniki.

CRM

Narzędzia wzrostu

Jedna strona pod CRM, która posiada silnik wzrostu: powtarzające się przychody (MRR / ARR), katalog produktów, formularze lead- capture, linki rezerwacji i routing ołowiu. Wszystko tutaj pisze prosto do CRM-, więc złożenie formularza lub zarezerwowane połączenie jest kontakt z historią, a nie wiersz w arkuszu kalkulacyjnym.

Co żyje na stronie

Przychody z tytułu odroczenia

Dochody

MRR i ARR prognozowane z prawdziwego rejestru rozliczeń. Prenumerata są grupowane z płatności na platformie, cykl naliczania opłat jest wywnioskowany z luk płatniczych, a subskrypcja wygasa, gdy płatność jest zaległe przeszłości 1.5 razy jej cyklu. Klienci link do kontaktów CRM automatycznie, gdy rejestr niesie swój e-mail.

Katalog produktów

Katalog

Jedno źródło prawdy dla tego, co sprzedajecie. Cytaty wyciągają nazwę i cenę listy z katalogu, a przyjęte cytaty podnoszą się do przychodów według produktu. Archiwum produktów, nigdy nie usuwają.

Formularze do wychwytywania wiodącego

Uchwyt

Każdy formularz otrzymuje stronę hostingową plus iframe osadzony kod dla własnej witryny. Zgłoszenia stają się kontaktami, właściciel dostaje powiadomienie, a zasady routingu przypisać prowadzenie.

Linki księgowe

Harmonogram

Podziel się linkiem, niech perspektywy wybrać wolne miejsce. Sloty szanują godziny pracy organizatora, strefy czasu i istniejących spotkań. Rezerwacja tworzy spotkanie, e-mail perspektywa potwierdzenie i powiadamia organizatora.

Routing ołowiu

Przebieg

Terytorium działa najpierw, a następnie reguły pola (dopasować pole takie jak kraj lub źródło), a potem rund- robin w całej puli rep. Przeprowadza ContacTS i ZAMÓWIENIA tak samo, niezależnie od statusu transakcji: wygrana umowa nadal potrzebuje właściciela do przypisania prowizji, odpowiedzialności za konto i follow- up, a w trybie właściciel lub zespół widoczność jest niewidoczny dla wszystkich oprócz menedżera. Zapisy utworzone przez automatyzację (sprzedaż złączy, czat, import) nie mają interaktywnego twórcy, więc są one kierowane tymi samymi zasadami na tworzenie raczej niż pozostawione własności.

Utwórz swój pierwszy formularz

1
Narzędzia otwartego wzrostu

Idź do CRM, potem do Growth Tools, a następnie do sekcji "Lead-capture".

2
Wymień i wybierz pola

Wpisz nazwę i listę pól oddzielonych od comma-, na przykład nazwę, e-mail, telefon, wiadomość.

3
Udział lub osadzenie

Kopiuj hostowany link, aby udostępnić go gdziekolwiek, lub skopiuj kod embed i wklej go na dowolnej stronie swojej strony internetowej.

4
Patrz na prowadzenie.

Każdy wniosek jest kontaktem CRM z format. subject działalności, powiadomienie właściciela i automatyczne routing.

💡
Publiczne przechwytywanie stron używa własnego adresu Twojej przestrzeni roboczej. Przestrzenie robocze w chmurze używają przypisanej im poddomeny (firmy.opsiq.help), więc link zawsze rozwiązuje właściwe dane.

Budowa - w ochronie

/ Bots widzi sukces, / ty nic nie widzisz.

Ukryte pole miodu po cichu odrzuca zgłoszenia botów.

Ograniczona stawka

Dziesięć zgłoszeń na godzinę na adres IP w różnych formularzach i rezerwacjach.

Zgoda pozostaje uczciwa

Złożenie formularza nie udziela zgody na dopuszczenie do obrotu. Tylko wyraźna zgoda jest dostępna w polu wyboru.

Brak podwójnej rezerwacji

Slot jest ponownie potwierdzany w stosunku do świeżej kontroli dostępności w momencie rezerwacji.

Skąd pochodzą dane o powtarzających się dochodach?+

Z tego samego rejestru handlowego, którego używa Twoja strona sprzedaży, zasilana złączkami rozliczeniowymi. Użyj Resynchronizacji z rozliczeń po podłączeniu nowej platformy.

Czy mogę korzystać z formularzy bez strony internetowej?+

Tak. Każdy formularz posiada stronę hostingową na własnym adresie, która działa samodzielnie, z JavaScript lub bez.

CRM

Komunikacja w Hubie (SMS i WhatsApp)

Jedno złącze, do dwudziestu bramek. Podłącz dostawców SMS i WhatsApp, których rzeczywiście używasz, oznacz jako domyślnie i wybierz którekolwiek z nich podczas wysyłania wiadomości kontaktowej. Zgoda jest sprawdzana przez CRM przed skontaktowaniem się z jakąkolwiek bramą.

Ustaw to

1
Włącz złącze

Na stronie Connectors otwórz menu wiadomości (SMS i WhatsApp) i włącz go.

2
Dodaj dostawcę

W tej samej szufladzie, lub w CRM Growth Tools, wybierz bramkę z rozwijanego (Twilio, Vonage, Termi, Meta WhatsApp Cloud, Infobip i więcej), wklej swoje API referencje i połączyć. Możesz dodać kilka, w tym tę samą bramę dwa razy z różnych kont.

3
Przewód haka

Każdy wpis dostawcy pokazuje swój własny haczyk URL z przyciskiem kopiującym. Wklej go do ustawień programu dostawy i wiadomości podręcznej, aby uzyskać status dostawy i odpowiedzi z powrotem do OpsIQ.

4
Wyślij z kontaktu

Otwórz kontakt i użyj przycisku SMS lub WhatsApp. Jeśli więcej niż jeden dostawca obsługuje kanał, to wybrany zostanie selektor; w przeciwnym razie używana jest domyślna opcja.

Zgoda jest najważniejsza.

Wyłącznie zgoda

Nieznana zgoda nie jest zgodą. Wysyłanie odmowy, chyba że zgoda SMS jest wyraźnie udzielana. WhatsApp jeździ tą samą zgodą.

Do- not-contact zawsze wygrywa

Flaga do- not-contact blokuje każdy kanał, bez względu na to, co jeszcze jest ustawione.

Uhonorowana stłumiona

Kontakty z listy tłumienia nie są nigdy wysyłane.

Odmowa, podaj powód.

Zablokowany wys mówi dokładnie dlaczego, więc można naprawić dane zamiast zgadywać.

Dla deweloperów: kontrakt na haczyk

Kształt URL

https://your-address/opsiq/cron/messaging_webhook.php?sk=SITE_KEY&e=ENTRY_ID&t=TOKEN. Symbol przechodzący jest wybijany, gdy dostawca jest podłączony i nigdy nie obraca się po edycji.

Formaty zrozumiane

Twilio form posts (MessageStatus/MessageSid for delivery, Body/From for inbound), Meta WhatsApp Cloud JSON (statuses and messages, including the hub.challenge subscription handshake), and a generic JSON shape: {"type":"delivery","message_id":"...","status":"delivered"} or {"type":"inbound","from":"+234...","body":"..."}.

Skutki

Dostawa raportów stemplować rząd rejestru informacji, który niesie id wiadomość dostawcy jako dostarczony lub odskoczniony. Przychodzące wiadomości dopasować kontakt przez numer telefonu wewnątrz obszaru roboczego, ziemi jako message. received działalności i zaznaczyć rozmowę odpowiedział.

Tryb awarii

Zła lub brak odpowiedzi token 403. Nieznane ładunki są liczone i ignorowane, nigdy nie zakończone śmiercią, więc źle skonfigurowana brama nie może złamać punktu końcowego.

Które bramy są obsługiwane?+

Twilio, Vonage, Plivo, MessageBird, Sinch, Infobip, Telnyx, ClickSend, Termi, Africa 's Talking, BulkSMS, Textlocal, Meta WhatsApp Cloud, 360dialog, SMSAPI, Gupshup, Kaleyra, D7 Networks, Hubtel i niestandardowy haczyk HTTPS dla wszystkiego innego.

Czy referencje są bezpieczne?+

Funkcje są przechowywane w ustawieniach złącza i nigdy nie są echoowane z powrotem do przeglądarki. Edycja wpisu o pustym sekrecie zachowuje zapisany jeden.

Czy AI może wysyłać wiadomości?+

Tak, poprzez zarejestrowane działania, które wymagają potwierdzenia i uruchomić tę samą bramkę zgody. AI może również wykaz podłączonych dostawców w celu wyjaśnienia, co jest dostępne.

CRM

Utrzymywanie i rozwój klientów

Zarządzanie cyklem życia pomaga chronić istniejące dochody. Każde konto otrzymuje wynik ryzyka, ocena zdrowia, wynik ekspansji i zalecany poradnik sukcesu.

Cykl życia
Płyta do cyklu życiaTablica cyklu życia klienta (Onboarding, Active, At- Risk, Revoral) z paskami zdrowia na każdej karcie konta.Cykl życiaprzestrzeń roboczaPOŁOWÓWAcmezdrowie 40CZYNNEGlobexzdrowie 88Initechzdrowie 76AT- RYZYKOSoylentzdrowie 28DATA PRZEDŁUŻENIAUmbrarenews w 12drozszerzenie + 8k1STAGESWsiadanie na pokład do odnowienia2SCOREDZdrowie i ekspansja3PLAYBOOKZalecane następny ruch
Klienci przechodzą przez onboarding, aktywny, na ryzyko i odnowienie, każdy z punktów dla zdrowia i rozwoju z podręcznika.

Płyta cyklu życia

Mapa etapu

Wizualna tablica pokazująca, gdzie stoi każde konto: Ołów, Prospekt, Szansa, Klient, Rozszerzenie, Odnowa, Ryzykiem, Kościół.

Rachunki ryzyka związanego z aktywami

Konta oznaczone wysokim ryzykiem crn. Każdy pokazuje górny sterownik (skok wsparcia, nieaktywność, awaria płatności) i zalecane gry zapisać.

Możliwości rozszerzenia

Konta, które pokazują sygnały gotowości do zakupu więcej: wysokie wykorzystanie, żądania funkcji, zapytania o plan.

Odnowienie terminu

Konta z nadchodzącymi datami odnowienia. Sortowane według poziomu ryzyka i wartości przychodów.

Jak OpsIQ wykrywa ryzyko ścierne

Ryzyko związane z kościołem oblicza się na podstawie wielu połączonych ze sobą sygnałów:

Sygnały CRM

Utrzymuje się zdrowie, brak aktywności, niedawne straty, maleje zaangażowanie.

Sygnały wsparcia

Liczba otwartych biletów, wzrost wolumenu biletów, negatywne odczucia, eskalacje.

Zaangażowanie produktu

Częstotliwość logowania, wykorzystanie funkcji, wizyty na stronach, połączenia API.

Sygnały do rozliczania

Nieudane płatności, zaległe faktury, wnioski o obniżenie cen, wizyty na stronie anulowania.

Podręczniki

Zapisz grę

W przypadku rachunków ryzyka: sięgnąć proaktywnie, zająć się problemem, zaoferować wsparcie, eskalacja w razie potrzeby.

Odnowienie gry

W przypadku przyszłych wznowienia: potwierdzenie satysfakcji, ponowne wykorzystanie, wartość bieżąca, oferowanie zachęt, jeśli to stosowne.

Rozbudowa gry

Dla kont typu ready- to- grown: obecne opcje uaktualniania, dzielenie się sukcesem, pokaz ROI.

Gra w adopcji

W przypadku niewykorzystanych kont: oferuj szkolenia, udostępniaj najlepsze praktyki, uaktywniaj funkcje, których nie używają.

/ Spotting churn before it happens

Scenariusz:
Klient, który zwykle loguje się codziennie nie zalogował się 2 tygodniami, i otworzyły się 3 w tym miesiącu, bilety na wsparcie.
Co robić:

Tablica Lifecycle oznacza to konto jako "At Risk" z kierowcami: brak aktywności (14 dni od ostatniego logowania) i wsparcie (3x Normalny wolumen biletów). Zalecana gra: proaktywne połączenie informacyjne, aby zrozumieć, co się dzieje. Czy istnieje problem z produktem? Czy oceniają konkurentów? Wczesna interwencja może zapisać konto.

CRM

Utrzymywanie danych w czystości

Agent Data Steward automatycznie odnajduje i naprawia problemy dotyczące jakości danych: powielanie, brakujące pola, niespójności oraz nieregularne rekordy.

Data steward
Data stewardLista problemów związanych z jakością danych (duplikat, brak, nieświeży, format), każdy z jednym kliknięciem naprawić działanie.Data stewardprzestrzeń roboczaDane są na temat znalezionego agenta StewardaDuplikaty[email protected] oraz [email protected]PołączenieBrakKontakty 12 nie mają firmyUbogaćNieśmiały38 oferty nietknięte dla 90+ dniPrzeglądFormatnumery telefonów w formatach 4Napraw wszystko1CATCHESDupy, luki, nieświeży2EXPLAINSDlaczego każdy z nich oznaczał3FIXESZa twoją zgodą.
Agent Steward utrzymuje CRM czyste, znajdując duplikaty, luki, nieświeże rekordy i złe formaty, ustalając na zatwierdzenie.

Co to łapie

Kontakty powtarzalne

Wielokrotne rekordy dla tej samej osoby (np.: [email protected] oraz [email protected]). Kierownik proponuje połączenie ich.

Brak danych

Kontakty bez e-maila, transakcje bez kwot, firmy bez domen. Sugeruje wypełnienie z dostępnych źródeł.

Niepowiązane rejestry

Oferty bez powiązanych kontaktów, kontakty bez firm. Proponuje łączenie w oparciu o domenę e-mail i kontekst.

Niespójności

Umowa na etapie "Won" z prawdopodobieństwem 20%, kontakt oznaczony "Klient" bez umów, firma z niedopasowanym przemysłem.

Złe etapy

Transakcje, które były w tym samym stadium zbyt długo lub kontakty, których etap cyklu życia nie odpowiada ich działalności.

Jak stosować lek

1
Otwórz listę zarządców

Idź do CRM i znajdź sekcję Data Steward (lub otwórz ją z CRm Health).

2
Zatwierdzenie bezpiecznych poprawek

Zielone przedmioty są bezpieczne: jasne powielanie, oczywiste brakujące dane. Zatwierdzić je luzem.

3
Przejrzyj resztę.

Ostrobok wymaga twojej oceny: możliwe powielanie z niewielkimi różnicami, proponowane zmiany na etapie, firmy linking.

Czyszczenie podwójnych kontaktów

Scenariusz:
Steward znalazł "John Smith ([email protected]) "oraz" J. Smith ([email protected]) ": ten sam e-mail, różne nazwy wyświetlania.
Co robić:

Kierownik proponuje połączenie: zachować rekord z większą aktywnością, połączyć inne oferty rekordu i działania. Przejrzyj propozycję, dostosować ocalałą nazwę wyświetlacza w razie potrzeby i zatwierdzić. Historia obu rekordów jest zachowana w połączeniu kontaktu.

CRM

Zbuduj mój CRM

Build My CRM pozwala na opisanie konfiguracji CRM- w prostym języku angielskim. OpsIQ generuje zatwierdzony, odwracalny plan i stosuje go po zatwierdzeniu. Brak kodowania, brak ręcznego klikania konfiguracyjnego.

Zbuduj mój CRM
Zbuduj mój CRMOpis języka naturalnego po lewej, zawierający wygenerowany plan CRM etapów, pól i segmentów po prawej stronie.Zbuduj mój CRMprzestrzeń roboczaOpisz swój biznesJesteśmy agencją projektową sieci websprzedaży miesięcznych retainerów iprojekty jednorazowe do małychprzedsiębiorstw.Zbuduj mój CRMPlan generowanyEtapy: Ołów → RetainerRodzaje transakcji: zaliczka, projektPole: wartość miesięcznaSegmenty: SMB, agencjaSekwencja: na pokładzieZatwierdzenie i zastosowanie1DESCRIBEZwykły angielski w2AI PLANSEtapy, pola, segmenty3APPROVEStosowane · bez kodowania
Opisz swoją działalność w języku angielskim; OpsIQ projektuje cały CRM (etapy, pola, segmenty) i stosuje go na zatwierdzenie.

Jak to działa?

1
Opisz, czego chcesz

Wpisz prosty - angielski opis konfiguracji CRM. Przykład: "Utwórz rurociąg odnowy ze stopniami: Nadchodzące, Kontaktowane, Negocjacje, Odnowione, Zagubione. Wynik prowadzi wyżej, gdy oglądają ceny dwa razy".

2
Przegląd planu

OpsIQ pokazuje podgląd tego, co będzie tworzyć: rurociąg, etapy, prawdopodobieństwa na etapie, zasady punktacji, zasady cyklu życia.

3
Zastosuj

Kliknij Zastosuj, aby wykonać plan. Każda zmiana jest zapisywana jako pakiet można cofnąć jednym kliknięciem.

4
W razie potrzeby odwróć

Jeśli coś nie jest w porządku, kliknij Cofnij, aby odwrócić cały pakiet. CRM powraca do poprzedniego stanu.

Co można zbudować

Rurociągi i etapy

Tworzenie nazwanych rurociągów z niestandardowych etapów, domyślne prawdopodobieństwa i progi gnijące.

Zasady punktowania

Boost prowadzi wyniki oparte na zachowaniu: "Wynik wyższy, gdy widzą ceny", "Punkty niższe, kiedy odwiedzają strony kariery".

Zasady dotyczące cyklu życia

Automatycznie wyprzedzaj etapy cyklu życia: "Przenieś się do SQL, gdy zażądają demo", "Przesuń do klienta, kiedy wygrana transakcji".

Pola własne

Dodaj pola do kontaktów, ofert lub firm: tekst, numer, data, wybór, pole wyboru, URL, e-mail.

Lista kontrolna kwalifikacji

Zdefiniuj listę kontrolną MEDDICC lub BANT, przeciwko której jest oceniony Deal Coach.

Ustanowienie rurociągu odnawiającego

Scenariusz:
Zarządzasz subskrypcjami SaaS i potrzebujesz rurociągu na odnowienie.
Co robić:

Typ: "Tworzenie rurociągu odnowy. Etapy: 90 Days Out (10%), 60 Days Out (25%), Kontaktowane (40%), negocjacje (60%), Renewed (100%), Churned (0%). Ustaw próg gnicia 14 dni ". OpsIQ generuje plan, przeglądasz go i kliknij przycisk Zastosuj. Rurociąg pojawia się na stronie Pipeline natychmiast.

A jeśli opiszę coś, co nie jest możliwe?+

Budowniczy generuje tylko działania, które potrafi potwierdzić. Jeśli poprosisz o coś poza jego możliwościami (np. "Integrate with my wonderly API"), odrzuci on wniosek i wyjaśni, co może zrobić zamiast niego.

Mogę cofnąć zmiany?+

Tak. Każda Build My CRM akcja jest przechwytywana jako odwracalny pakiet. Przejdź do CRm Health > Zmiana historii, aby zobaczyć wszystkie pakiety i cofnąć którykolwiek z nich.

CRM

Ustawianie CRM na swój sposób

Ręczna konfiguracja CRM dla zespołów, które wolą klikać nad maszynopisania. Wszystkie ustawienia, które Build My CRm może tworzyć są również dostępne jako tradycyjne pola formularzy.

Rurociągi i etapy

Utwórz, przemień nazwę, zamów i usuń rurociągi i etapy. Ustaw domyślne prawdopodobieństwo wygranej na etapie. Ustal próg gnicia (dni bez aktywności przed zawarciem transakcji jest oznaczona "zablokowana").

Pola własne

Dodawanie pól do ofert, kontaktów lub firm. Typy pól: tekst, numer, data, wybór (spadek z wcześniej zdefiniowanymi opcjami), pole wyboru, URL, e-mail. Niestandardowe pola pojawiają się na profilu obiektu i w filtrach.

Lista kontrolna kwalifikacji

Określa listę kontrolną, którą Coach Deal wykorzystuje do oceny transakcji. Wybierz MEDDICC, BANT lub niestandardowy zestaw kryteriów. Każdy element może być zaznaczony wymagane lub opcjonalne.

Zasady etapu cyklu życia

Określić automatyczne przejścia: gdy kontakt spełnia warunek (widoki cen, przedstawia formularz, dokonuje zakupu), ich cykl życia faz rozwija się automatycznie.

Zasady oceny wiodącej

Zwiększ lub zredukuj wyniki w oparciu o zachowanie. Przykłady: "Przeglądana strona cenowa = +15 punkty "," Ściągnięty whitepaper = +10 punkty "," Wizyty karier strona = -5punkty. "Minimalne liczenie można ustawić (np.", musi zobaczyć ceny co najmniej 2 times ").

Zapisane widoki

Utwórz nazwane kombinacje filtrów + sortowania dla kontaktów, transakcji lub firm. Podziel się widokami z zespołem. Ustaw domyślny widok na typ obiektu.

Dodawanie zasady punktacji wiodącej

Scenariusz:
Aby uzyskać wyższy wynik, potrzebujesz kontaktów, które oglądają stronę cenową dwa razy lub więcej.
Co robić:

Przejdź do konfiguracji CRM > Reguły punktowania wiodącego. Kliknij przycisk Dodaj regułę. Ustaw: Event = "pageview", URL zawiera = "/pricing", Minimalna liczba =2, Wynik boost = +20. Zapisz. Następnym razem, gdy skoroszyt będzie uruchomiony, kontakty pasujące do tej zasady otrzymają +20 do ich wiodącego wyniku.

CRM

CRM Kontrola zdrowia - up

CRM Health jest stroną samodiagnostyczną, która weryfikuje swoje CRm jest ustawione prawidłowo i działa płynnie.

Kontrola funkcjonowania
Kontrola funkcjonowania CRMPierścień oceny zdrowia w 92 obok listy kontrolnej kontroli konfiguracji przejazdu i ostrzeżenia.Kontrola funkcjonowania CRMprzestrzeń robocza92ZDROWIEKonfigurowane etapy rurociągówPołączenie powiązane i importowanieWłączony czynnik ptasiej grypy!Brak aktywnej sekwencji follow- up!12 kontaktuje się z zaginioną firmą1KONTROLAWeryfikuje konfigurację2FLAGSCo to jest?3ZAKRESJedna całkowita liczba
Jednostronicowy audyt CRM: ogólny wynik w zakresie zdrowia oraz lista kontrolna tego, co jest ustawione prawidłowo i co nadal wymaga uwagi.

Co sprawdza

Schemat

Tablice baz danych istnieją i mają prawidłowe kolumny. Jeśli migracja została pominięta, CRM Health będzie ją oznaczyć.

Środki na nioski

Wszystkie agentów CRM (Capture, Data Steward, Deal Intelligence, itp.) są zarejestrowane i zdrowe. Zielony = uruchomiony, bursztyn = potrzebuje uwagi, czerwony = błąd.

Trasy

CRM API trasy i punkty końcowe AJAX są rejestrowane i do wywołania.

Działania w zakresie ptasiej grypy

Katalog działań CRM jest zarejestrowany w Rejestrze Działania. Jeśli działania nie są dostępne, CRm Health samoleczy się poprzez ponowną rejestrację.

Liczne liczby danych

Łączne kontakty, firmy, transakcje, zadania, działania i wydarzenia. Przydatne do weryfikacji importu i bieżącej rejestracji danych.

Po sprawdzeniu ustawień

Po pierwszym CRM konfiguracji, otworzyć CRm zdrowia i sprawdzić wszystkie kontrole są zielone. Jeśli jakiekolwiek są bursztynowe lub czerwone, kliknij element dla wyjaśnienia diagnostycznego i zasugerowane naprawić.

Jak często należy sprawdzać CRM Health?+

Sprawdź po początkowym ustawieniu, po większych aktualizacjach i za każdym razem, gdy zachowanie CRM wydaje się błędne. CRm Health samoleczy wiele problemów (jak brakujące rejestracje akcji) tylko przez otwarcie strony.

CRM

Połączenia CRM dla deweloperów

CRM ujawnia kompletny publiczny REST API i wychodzące haki webhousy, tak aby pasowały do każdego stosu bez ręcznego eksportu.

Punkty końcowe API

Uwierzytelnienie

API klucz (Autoryzacja: Posiadacz opq _...) z zakresem crm.read lub crm.write. POST do /api/v1.php z działaniem oraz site_key.

Kontakty

crm. contacts. list (search + filter), crm. contakts. detail (ID), Crm. Contacts. upsert (create or update), chrm. kontact. save. cracts. save.

Transakcje

crm. deals. list, crm. deals. etal, crrm. deuls. create, cRm. deils. update, Crm. doals. aprop (wszystko za pośrednictwem warstwy zaufania).

Działania

crm. activities. list (linia czasu dla kontaktu / transakcji), crm. activties. record (log nowej aktywności).

Wydarzenia

crm.events.list (trwałe przeróbki paszy z since_id kursor), crm.events.catalog (lista dostępnych typów zdarzeń).

Utwórz umowę przez API
POST /api/v1.php
Authorization: Bearer opq_live_xxx
Content-Type: application/json

{
  "action": "crm.deals.create",
  "site_key": "<workspace>",
  "title": "Acme renewal",
  "amount": 12000,
  "pipeline_id": 1,
  "stage_id": 2
}

Zdarzenia z hakiem internetowym

opsiq.contact.upsert

Wypalony, gdy kontakt jest tworzony lub aktualizowany. Jest to zdarzenie kontaktowe do subskrypcji; nie ma oddzielnego utworzonego zdarzenia.

contact.lifecycle_changed

Zwolniony, gdy kontakt przenosi się do innego etapu cyklu życia.

contact.status_changed

Zwolniony, gdy zmienia się status kontaktu.

contact.conversion

Wystrzelony, gdy konwersję zarejestrowano przeciwko kontaktowi.

contact.tag_added

Wypalony, gdy znacznik jest dodawany do kontaktu.

contact.erased

Wyłączony, gdy kontakt jest usuwany dla prośby o prywatność.

crm.deal.created

Zwolniony, gdy zostanie zawarta umowa.

crm.deal.stage_changed

Zwolniony, gdy umowa przechodzi na inny etap.

crm.deal.won

Zwolniony, gdy umowa zostanie zamknięta.

crm.deal.lost

Zwolniony, gdy umowa jest zamknięta.

crm.company.created

Zwolniony, gdy firma jest tworzona.

crm.task.created

Wyłączone, gdy zostanie utworzone nowe zadanie (ręcznie lub AI- generowane).

email.replied

Zwolniony, gdy kontakt odpowiada na e-mail.

email.bounced

Zwolniony, gdy poczta e-mail z zasięgu wzroku odbija.

💡
Zawołaj webhooks.events.list dla autorytatywnego zestawu na instalacji, z ładunkiem każdego zdarzenia. Jest generowany z samego kodu dostawy, więc nigdy nie może się nie zgodzić z tym, co faktycznie przybywa. Pełna lista pojawia się również w sekcji Webhacks.

Wszystkie zdarzenia webhook są HMAC- Podpisano i ponownie wypróbowano niepowodzenie URL w Ustawienia > Haki internetowe lub ankiety crm.events.list z since_id dla trwałego pokarmu na zmianę.

Synchronizacja kontaktów CRM z Arkuszami Google

Scenariusz:
Każdy nowy kontakt CRM ma pojawić się w karcie Google dla Twojego zespołu marketingowego.
Co robić:

Konfiguracja abonenta haka dlaopsiq.contact.upsert. Wskaż na aplikację Google Apps Script lub webhook ZapieraURL. Ładunek zawiera nazwę kontaktową, e-mail, firmę, wiodący wynik i źródło. Twój skrypt dodaje wiersz do karty Google dla każdego nowego kontaktu.

CRM

Segmenty

Segmenty oszczędzają filtry kontaktowe wielokrotnego użytku do wyświetlania CRM, widoków, promocji i innych narzędzi słyszących.

Ekran produktu
SegmentyEdytor Segment łączy warunki, pokazuje liczenie meczów na żywo i pozwala operatorowi wybrać filtr na żywo lub przypiąć migawkę.Segmentyprzestrzeń roboczaWZÓRŻyweLOGICWSZYSTKIEMATCHES1,248WIDOK PRACY ŻYWEJEtap klientarówna się aktywnemu klientowiArtykułOstatnia aktywnośćw ciągu dni 30ArtykułKrajrówna się Zjednoczone KrólestwoArtykułWysokie intencjewynik co najmniej 70Artykuł1CHOOSE MODEŻywe lub migawki2ADD RULESWSZYSTKIE lub JAKOŚNE3REUSEKampanie i CRM
Edytor Segment łączy warunki, pokazuje liczenie meczów na żywo i pozwala operatorowi wybrać filtr na żywo lub przypiąć migawkę.

A segment żywy przelicza się z bieżących danych w każdym przypadku, gdy jest używane. przymocowane migawki zamrożenie aktualnej listy członków, co jest przydatne, gdy publiczność z zewnątrz nie może się zmienić po zatwierdzeniu.

Wybierz WSZYSTKIE gdy każdy warunek musi się zgadzać lub ANALIZA gdy jeden warunek jest wystarczający. Przegląd licz na żywo przed zapisem. Segmenty systemu mogą być widoczne, ale chronione przed zwykłą edycją.

CRM

Punktacja ołowiu

Zasady oceny wiodącej zmieniają zachowanie i sygnały profilowe w konsekwentny wynik, który może być używany przez sprzedaż i automatyzację.

Ekran produktu
Punktacja ołowiuWynik lidera pokazuje aktywne zasady, toczenie okna i pozytywna lub negatywna zmiana wyniku każda zasada ma zastosowanie.Punktacja ołowiuprzestrzeń roboczaZASADY12SCORED8,412HOT LEADS286WIDOK PRACY ŻYWEJDziałalność cenowa3+ wizyty w 14 dni+20Kupowanie słowa kluczowegozawiera migrację lub przedsiębiorstwo+15Ryzyko związane z udzielaniem wsparciazdarzenie reklamacyjne w dniach 30-10Zaufane źródłowniosek partnerski+121DESCRIBE RULEUżyj zwykłego angielskiego2REVIEW FIELDSSygnał, okno, punkty3RESCOREZastosuj do obszaru roboczego
Wynik lidera pokazuje aktywne zasady, toczenie okna i pozytywna lub negatywna zmiana wyniku każda zasada ma zastosowanie.

Budowniczy zasad AI może zmienić instrukcję po prostu-angielski w ustrukturyzowaną regułę. Każda zasada powinna być jeszcze zweryfikowana przed aktywacją: potwierdzić aktywność lub słowo kluczowe, minimalną liczbę, toczenie okna i zmianę wyniku.

Pozytywne i negatywne zasady mogą współistnieć. Odtworzenie przestrzeni roboczej po zmianach w regułach materiałowych, tak aby istniejące kontakty były oceniane w ramach nowego modelu. Wyniki mogą karmić segmenty, routing, poszukiwanie i warunki przepływu pracy.

CRM

Sprzedaż liderów

Liderów porównuje przedstawicieli przy wykorzystaniu kwot, wygranych przychodów, prowizji i otwartych rurociągów w wybranym miesiącu.

Ekran produktu
Sprzedaż liderówMiesięczny liderów rangi przedstawicieli sprzedaży przy zachowaniu wygranych przychodów, prowizji i otwartego rurociągu widoczne.Sprzedaż liderówprzestrzeń roboczaPERIODLipiecTEAM QUOTA82%WIN184kWIDOK PRACY ŻYWEJAmina104% kwota · £62k wygrał1stBen88% kwota · £51k wygrał2ndRita76% kwota · £43k wygrał3rdGazociąg otwarty312k funtów w całym zespolePrzegląd1CHOOSE MONTHPorównaj jeden okres2CHECK QUOTADostosowanie według rep3COACHKontekst rurociągu
Miesięczny liderów rangi przedstawicieli sprzedaży przy zachowaniu wygranych przychodów, prowizji i otwartego rurociągu widoczne.

Osiągnięcie kwoty jest znaczące tylko wtedy, gdy każdy przedstawiciel ma obecną kwotę i transakcje mają właściwego właściciela, kwotę, walutę i stan zamknięcia. Użyj tablicy liderów do coachingu i uznania, nie jako jedyny środek jakości; sparuj ją z czynienia zdrowia, działalności i prognozowania dokładności.

CRM

Zatwierdzanie transakcji

Zatwierdzanie transakcji wymaga zgody menedżera, zanim można zaznaczyć wygrane oferty wysokiej wartości.

Ekran produktu
Zatwierdzanie transakcjiPolityka zatwierdzania określa dwa progi wartości, a kolejka pokazuje oczekujące, zatwierdzone i odrzucone decyzje.Zatwierdzanie transakcjiprzestrzeń roboczaPOLICYWłączoneWAITING6OLDEST3hWIDOK PRACY ŻYWEJPoziom 1Oferty z lokalizacji £10,000KierownikPoziom 2Oferty z lokalizacji £50,000SeniorzyOdnowienie przedsiębiorstwa£72,000 - wniosek BenW oczekiwaniuProjekt dotyczący migracji£18,500 - wniosek RityZatwierdzone1SET THRESHOLDS0 wyłącza poziom dokładności2REQUESTRep przedstawia umowę3DECYZJAZatwierdzenie lub odrzucenie
Polityka zatwierdzania określa dwa progi wartości, a kolejka pokazuje oczekujące, zatwierdzone i odrzucone decyzje.

Włącz politykę i ustaw poziom 1 i poziom 2 progi. Próg 0 wyłącza ten poziom. Kiedy nie-manager próbuje wygrać transakcję na poziomie lub powyżej progu, OpsIQ tworzy wniosek o zatwierdzenie zamiast cichej zmiany sceny.

Kierownicy i administratorzy nie są blokowani przez politykę. Każda decyzja powinna zachować wniosek, autoryzator, czas i powód do kontroli.

CRM

Zasady dotyczące cyklu życia

Zasady cyklu życia automatycznie przenoszą kontakty między etapami, gdy ich aktualne dane odpowiadają zapisanemu stanowi.

Ekran produktu
Zasady dotyczące cyklu życiaZasady cyklu życia są oceniane według priorytetów; pierwsza zasada dopasowania zmienia etap kontaktowy.Zasady dotyczące cyklu życiaprzestrzeń roboczaCZYNNE7RUNSNightlyPRIORITYNajwyżej pierwszyWIDOK PRACY ŻYWEJProwadź → Kwalifikowanewynik ≥ 60 i ostatnia aktywnośćPriorytet 100Kwalifikowany → Klientzdarzenie zakupu istniejePriorytet 90Klient → W zagrożeniubrak aktywności 60 dniPriorytet 70Na ryzyko → Klientnowy zakup lub odpowiedźPriorytet 601PICK STAGESOd i do2DEFINE FILTERSegment- style JSON3ORDER RULESWygrane z pierwszego meczu
Zasady cyklu życia są oceniane według priorytetów; pierwsza zasada dopasowania zmienia etap kontaktowy.

Każda zasada ma etap źródłowy, etap docelowy, aktywny flaga, priorytet i filtr stylu segmentowego. Planowane zadania cyklu życia ocenia wyższe priorytety najpierw i zatrzymuje się po pierwszym meczu dla kontaktu.

Zasady powinny być wzajemnie zrozumiałe. Unikaj dwóch aktywnych zasad, które mogą poruszać się w przeciwnych kierunkach podczas tego samego biegu. Przed uruchomieniem filtra należy sprawdzić filtr.

CRM

Strumień aktywności CRM

Strumień aktywności w przestrzeni roboczej łączy zdarzenia klientów i operacyjne, dzięki czemu zespoły mogą badać to, co się stało bez otwierania każdego modułu.

Ekran produktu
Działanie CRMStrumień aktywności łączy czat, bilet, e-mail, haczyk, konwersję i anomalie z filtrami i paginacją.Działanie CRMprzestrzeń roboczaWYDARZENIA2,804CUSTOMERS1,126ANOMALIES14WIDOK PRACY ŻYWEJRozmowa rozwiązana[email protected] AITerazBilet odpowiedziałT- 1048 · Billing4mZdarzenie przychodzącesubscription.upgraded12mKonwersjaSpokój!7788 · £14919m1FILTERWydarzenie i klient2OPEN CONTEXTSkocz do rekordu3PAGE RESULTSProwadzenie dochodzeń ograniczonych
Strumień aktywności łączy czat, bilet, e-mail, haczyk, konwersję i anomalie z filtrami i paginacją.

Filtruj według rodzaju zdarzenia, daty, stanu kontaktu lub klienta (w tym klientów płatniczych). Pasza jest odczytywanym modelem zarejestrowanej aktywności; nie zastępuje biletu źródłowego, rozmowy, transakcji lub rekordu złącza. Otwórz powiązaną rekord przed podjęciem działania wrażliwego.

CRM

Przepływy pracy

Przepływy pracy reagują na zdarzenie i uruchamiają uporządkowaną serię działań, w tym opóźnione kroki wznowione przez cron.

Ekran produktu
Przepływy pracyPrzebieg pracy pokazuje swój wyzwalacz, zakończone działania, opóźnienie oczekiwania i następny krok.Przepływy pracyprzestrzeń roboczaCZYNNE9RUNNING42NIEPEŁNIONE1WIDOK PRACY ŻYWEJWyciągaczcontact.createdStartEtap 1Wyślij powitalny e-mailGotoweOpóźnieniePoczekaj 2 dniCzekam.Etap 2Tworzenie zadania sprzedażyNastępny1CHOOSE TRIGGERZdarzenie rozpoczyna bieg2ORDER STEPSDziałania i opóźnienia3MONITORWznowienie przez cron
Przebieg pracy pokazuje swój wyzwalacz, zakończone działania, opóźnienie oczekiwania i następny krok.

Utwórz przepływ pracy wybierając wyzwalacz, dodając kroki w kolejności i umożliwiając go. Opóźnienia są przechowywane, nie jest przechowywany przez żądanie przeglądarki; ujednolicony cron ponownie due workflow działa.

Wbudowane szablony startowe obejmują powitanie po rejestracji, post-zakup dziękczynienie i potwierdzenie demo. Klonować szablon, zastąpić jego odbiorców / zawartość, a następnie przetestować kontrolowaną rekordem przed szeroką aktywacją.

Działania projektowe, które mają być idempotentami. Ponowne próby nie mogą wysyłać duplikatów żądań przesuwających pieniądze ani tworzyć duplikowanych rekordów.

Wsparcie

Bilety

Bilety są oficjalnym kanałem wsparcia. Mają departamenty, priorytety, cele SLA, załączniki, notatki wewnętrzne i pełne rozmowy gwintowanie. Bilety mogą przyjechać z OpsIQ admin, formularz biletu / embed, e-mail połknięcie, eskalacja czatu, złącze, lub API.

Bilety
Szczegóły dotyczące biletuBilet z metabolem bocznym (priorytet, dział, SLA, status), wątku rozmowy, i AI projekt i zwrotu działań.Biletprzestrzeń roboczaT- 12345PriorytetWysokiDziałRachunekSLA3h 12 m lewoStanOtwórzDwa razy mnie oskarżyli o...subskrypcja na czerwiec 3.AIPotwierdzono duplikatOpłata, zwrot kosztów.Projekt odpowiedzi w sprawie ptasiej grypyWysokość refundacji1THREADEDPełna rozmowa + notatki2SLA & ROUTINGPriorytet, departament, timers3AI DRAFTOdpowiedź dla ciebie
Każdy bilet niesie swój priorytet, dział, zegar SLA i pełny gwint, a AI może sporządzić odpowiedź dla Ciebie.

Jak bilet płynie

1
Bilet przybędzie

Klient wysyła wiadomość przez e-mail, eskalację czatu, zagnieżdżony bilet lub tworzy go admin. Bilet otrzymuje unikalny identyfikator (np. T-12345).

2
Przewóz

AI czyta temat i ciało, przypisuje priorytet (Low / Normal / High / Pilny), sugeruje dział i wykrywa sentyment. Dzieje się to automatycznie, jeśli jest włączone triage.

3
Odpowiedź

Agent otwiera bilet, czyta kontekst (profil klienta, dane platformy ze złączy, poprzednie bilety) i pisze odpowiedź. AI może sporządzić odpowiedź, a agent edytuje przed wysłaniem.

4
Zamknij

Po rozwiązaniu problemu agent zamyka bilet. Klient jest powiadamiany. Jeśli klient odpowie po zamknięciu, bilet ponownie otwiera się automatycznie.

Działania związane z biletami

Dział Zmian

Przenieś bilet do innego działu (np. z General na Billing). Przydatne, gdy początkowe routing był zły.

Przypisz agentowi

Przydziel bilet do określonego członka zespołu. Przypisany agent widzi bilet w widoku "Moje bilety".

Dodaj notatkę wewnętrzną

Napisz notatkę widoczną tylko dla personelu. Użyj do: ustaleń dochodzenia, powodów zwrotu kosztów, kontekstu inżynieryjnego, wcześniejszych zobowiązań. Noty wewnętrzne nigdy nie pojawiają się klientom.

Bilety na połączenie

Połącz dwa bilety od tego samego klienta. Złączony obiekt biletu otrzymuje [MERGED] tag. Wszystkie wiadomości z obu biletów są zachowane w ocalałym bilecie.

Odpowiedź w puszce

Wstaw wcześniej napisany szablon odpowiedzi. Zmienne jak {{customer_name}} oraz {{ticket_id}} są automatycznie wymieniane.

Płeć przepisana

Niech AI poprawić swój projekt odpowiedzi: dostosować ton, skrócić / przedłużyć, naprawić gramatykę lub przetłumaczyć.

Zmień priorytet

Ustawienie na niskie, normalne, wysokie lub pilne. Priorytet wpływa na zegary SLA i sortowanie porządku.

Zmień status

Ustawienie na Open, Waiting, Waying on Customer, Resoluted lub Zamknięte.

Przykład roboczy: obsługa nieszczęśliwego klienta

E-mail klienta: "Byłem dwukrotnie obciążony za subskrypcję"

Scenariusz:
Subject: Double charge on my account Body: Hi, I just checked my bank statement and I see two charges of $49.99 from your company dated June 3. I only have one subscription. Can you please refund the duplicate charge? This is really frustrating.
Co robić:

Step 1: AI triage assigns Priority: High, Department: Billing, Sentiment: Frustrated. Step 2: Agent opens the ticket. The connector panel shows the customer's Stripe charges, confirmed two charges on June 3. Step 3: Agent adds an internal note: "Confirmed duplicate charge in Stripe. Transaction IDs: ch_xxx and ch_yyy." Step 4: Agent drafts a reply: "Hi [Name], I can see the duplicate charge and I'm processing a refund for the second transaction right now. You should see $49.99 back in your account within 3-5 business days. I'm sorry for the inconvenience." Step 5: Agent triggers the refund action through the Stripe connector (with confirmation). Step 6: Agent sends the reply and sets status to Resolved.

Wydziały

Tworzenie działów w Ustawienia > Bilety > Wydziały. Wspólne działy: Ogólne, Billing, Techniczne, Sprzedaż, Nadużycia, Na pokładzie. Każdy dział może mieć różne zasady auto- odpowiedzi, wiedzy AI i zadań zespołu.

Odpowiedzi w trybie Canned

Utwórz szablony odpowiedzi wielokrotnego użytku w Ustawienia > Bilety > Odpowiedzi z puszki. Dobre odpowiedzi w puszce obejmują:

Przykład szablonu odpowiedzi w puszce
Hi {{customer_name}},

Thanks for reaching out. I checked the details and here is what I found:

{{response_details}}

If you need anything else, just reply to this ticket and I will be happy to help.

Best regards,
{{agent_name}}
{{department_signature}}

Bilety na łączenie

Gdy klient wysyła to samo pytanie wielokrotnie (za pośrednictwem poczty elektronicznej i czatu lub dwóch oddzielnych e-maili), można połączyć duplikaty. Przejdź do biletu, kliknij przycisk Połączenie, wybierz inny bilet do połączenia. Bilet ocalały dostaje wszystkie wiadomości z obu biletów. Obiekt kuponu połączonego otrzymuje [MERGED] tag, aby wskazać, że został połączony.

Połączone platformy podążają za połączeniem. Kiedy bilety są również na platformie podłączonej (WHMCS, Zendesk, SaaS portal klienta), połączenie odbywa się tam również: platforma łączy swoje kopie, więc bilet, który trzymasz pokazuje pierwszą wiadomość i odpowiedzi połączonego biletu. Połączenie biletu, który nigdy nie był na tej platformie ma swoją rozmowę dodany do zachowanego biletu platformy jako prywatny list personelu, nigdy jako odpowiedź klient jest email. Połączenie wykonane wewnątrz platformy (na przykład w WHMCS) łączy OpsIQ Bilety w ten sam sposób.

Priorytet i SLA

Niski

Pytania niepilne, prośby o funkcje, ogólne informacje zwrotne. Pierwsza odpowiedź: 24 godzin.

Normalny

Standardowe pytania o wsparcie. Cel pierwsza odpowiedź: 8 godzin.

Wysoki

Zmierzenie firmy klienta. Cel pierwsza odpowiedź: 4 godzin.

Pilny

/ Pierwsza odpowiedź: 1 godzina.

Timery SLA zaczynają się po utworzeniu biletu i zatrzymują się, gdy status "Czekają na Klienta". Jeżeli cel SLA jest pominięty, bilet zostaje zaznaczony i opcjonalnie zwiększony.

Czy klienci widzą wewnętrzne notatki?+

Nigdy. Notatki wewnętrzne są ściśle tylko dla personelu. Nie pojawiają się w portalu klienta, powiadomień e-mail lub jakiejkolwiek powierzchni zwracanej do użytkownika.

Co się dzieje, gdy na zamknięty bilet jest odpowiedzana?+

Bilet automatycznie otwiera się i powraca do aktywnej kolejki. Zespół jest informowany o nowej odpowiedzi.

Czy mogę zablokować bilet, aby zapobiec dalszym odpowiedziom?+

Tak. Użyj opcji Zablokuj gwint, aby zapobiec dodawaniu nowych odpowiedzi zarówno klientowi, jak i AI. Przydatne do rozstrzygniętych sporów lub zamkniętych dochodzeń.

Wsparcie

Studio serwisowe: SLA, przepływ statusu i jakość

Pokój kontrolny dla zachowania Twojej operacji wsparcia: Polityka SLA z drabinkami eskalacji, kalendarze godzin pracy, wymuszony przepływ statusu, ustawienia CSAT i przełączniki funkcji przedsiębiorstwa. Otwórz go ze strony Bilety (przycisk Service Studio w pasku operacji).

Polityka SLA

Każdy nowy bilet otrzymuje pierwszą odpowiedź i termin na rozwiązanie z najbardziej konkretnej aktywnej polityki: dział + priorytet bije dział, uderza priorytetu, przebija domyślną. Terminy zatrzymują się automatycznie, podczas gdy bilet siedzi w oczekujących lub Na holu.

Drabiny eskalowania

Instead of one breach action, a policy can define up to six steps: for example warn the assignee at 75% of the window, alert managers at 100%, reassign to a named agent at 150%. Each step fires exactly once per ticket.

Godziny pracy i kalendarze

Z godzin pracy, zegary SLA palić tylko w czasie pracy, więc bilet otwarty piątek wieczorem nie jest naruszony do soboty. Nazwa kalendarzy (strefy czasu, dni, godziny, wakacje) mogą być dołączone do indywidualnych zasad dla zespołów w różnych regionach.

Przepływ stanu

A od / do macierzy ograniczającej status, który administratorzy mogą zmieniać ze względu na ustawiony styl Zendesk- style. Automatyzacja, przychodząca poczta e-mail i odpowiedzi klientów na bilety są zawsze wyłączone, więc ścisła matryca nigdy nie może zagłuszyć rurociągu. Opcjonalnie wymagają zatwierdzenia sygnału przed zamknięciem.

Zatwierdzenia

Agenci żądają zapisania biletu (zwroty przekraczające próg, wyjątki od zasad). Aprobata lub dowolny Pełnoadministrator decyduje z notatką; requesters nie może zatwierdzić własnego wniosku. Do czasu zatwierdzenia powierzchni jako baner na skrzynce odbiorczej.

Stosunki z biletami

Łączenie biletów w zależności od ich pochodzenia, duplikatu, rodzica / dziecka lub blokady; podział odpowiedzi na nowy kupon powiązany (odwrotny łącznik bez wysyłania wiadomości e-mail do klienta); śledzenie biletów na powiadomienia o aplikacji oraz opcjonalnie adresy e-maili dla użytkowników CC na wychodzących odpowiedziach.

Skrzynka odbiorcza i kolizje na żywo

Dzięki włączonej skrzynce na czas real-time, nowe bilety i odpowiedzi pojawiają się dla agentów w ciągu kilku sekund przez istniejący strumień powiadomień. Na bilecie agenci widzą, kto jeszcze ogląda i otrzymują baner ostrzegawczy, kiedy kolega z drużyny już pisze odpowiedź. Przycisk "Claim" przypisuje bilet do siebie.

Routing z wiedzą o AI-

Zasady dotyczące przechodzenia na orbitę mogą być dopasowane do sygnałów testowych AI: priorytet, kategoria, uczucie i ryzyko eskalacji, plus wpisane wartości pola użytkownika z formularza wniosku o portal. Zasady korzystania z tych warunków pozostają nieaktywne aż do momentu włączenia funkcji.

💡
Każde przedsiębiorstwo wyłącza statki. Włączanie jednego w Studio Service → Jakość i Automatyzacja jest opt- in; pozostawiając je poza utrzymuje zachowanie identyczne do przed aktualizacją.
Dlaczego klient może jeszcze raz otworzyć zamknięty bilet, gdy moja macierz zabrania zamknięte → otwarte?+

Matryca reguluje tylko działania ADMIN. Odpowiedzi na zamówienie, odpowiedzi e-mail i automatyzacja są celowo wyłączone, więc rygorystyczna polityka nie może zablokować klientów lub przerwać rurociąg.

Czy drabiny SLA zastępują stare działania naruszające?+

Nie. Polityka zachowana przy jednym działaniu naruszającym nie zmienia się. Drabina zastępuje pojedyncze działanie tylko w zakresie polityki, gdzie zdefiniujesz kroki.

Wsparcie

Automatyczne odpowiedzi i eskalacja biletów

Auto- response pozwala AI reagować na nowe bilety automatycznie. Escalation przenosi bilety do innego działu, gdy AI wykrywa wyspecjalizowane potrzeby. Obie funkcje pracy w obrębie rodzimych biletów i email- tworzone bilety.

Auto- odpowiedź
Automatyczna odpowiedź na zgłoszeniePrzepływ: nowy bilet, dwuminutowe opóźnienie, odpowiedź AI z wiedzy i kontekstu, a następnie wysłane lub zapisane jako projekt.Auto- odpowiedźprzestrzeń roboczaKiedy przybywa nowy biletNowy biletdowolne źródłoOpóźnienie2 minOdpowiedzi na pytania zawarte w kwestionariuszuKontekst KB +Wysłanylub projektJeśli człowiek odpowie podczas opóźnienia, auto- odpowiedź zostanie anulowana. Intent może przejść do innego działu najpierw.1DELAYLudzie dostają pierwszą szansę.2AI REPLIESZ kontekstu KB +3OR ESCALATETrasa według zamiaru
Nowe bilety otrzymują krótkie opóźnienie (więc ludzie mogą wskoczyć), a następnie odpowiedź AI z wiedzy, wysłany lub w kolejce jako projekt.

Jak działa auto- odpowiedź

1
Bilet się pojawia

Nowy bilet jest tworzony z dowolnego źródła (e-mail, czat, portal, API).

2
Odpowiedź na harmonogram

OpsIQ czeka na skonfigurowane opóźnienie (domyślnie: 2 minuty). Daje to agentom szansę na pierwszą odpowiedź.

3
Pierwsza odpowiedź wygrywa

Jeśli agent ludzki odpowie podczas opóźnienia, auto- response zostanie anulowane. Jeśli nie, AI generuje odpowiedź.

4
Generuj i wysyłaj

SI odczytuje bilet, sprawdza bazę wiedzy, kontekst łącznika i historię klientów, a następnie pisze odpowiedź. Odpowiedż jest wysyłana (lub w kolejce jako wersja robocza do przejrzenia, w zależności od ustawień).

Jak działa eskalacja

1
Konfiguracja działów

Ustawienie, które działy mogą otrzymywać eskalacje (np., Billing może być eskalated z General, Techniczne może być również eskalacja z General).

2
Utajnienie biletu

Przed udzieleniem autoodpowiedzi, AI klasyfikuje zamiar biletu: rozliczenie, techniczne, zwrot kosztów, nadużycia itp.

3
Przesuń, jeśli jest to konieczne

Jeśli intencja biletu pasuje do działu eskalacji, bilet jest przenoszony. Wewnętrzna notatka wyjaśnia dlaczego.

4
Generuj w nowym głosie

Odpowiedź jest generowana z wykorzystaniem wiedzy departamentu przeznaczenia i szkolenia AI.

Ustawienia odniesienia

Auto- odpowiedź włączona

Włącz automatyczne odpowiedzi AI na bilety.

Dozwolone działy

Które działy mogą otrzymywać odpowiedzi auto-. Zacznij od działów niskiego ryzyka (Ogólne, Sprzedaż) przed zezwoleniem na rozliczanie.

Opóźnienie

Jak długo należy czekać, zanim odpowiedź AI (w sekundach). Domyślnie: 120 sekundy (2minut).0w przypadku natychmiastowych odpowiedzi.

Harmonogram opóźniania

Opcjonalnie ustalamy różne opóźnienia w godzinach pracy a po godzinach.

Zatrzymaj na odpowiedzi admin

Jeśli czynnik ludzki odpowie najpierw, anuluj auto- odpowiedź. Domyślnie: włączone.

Eskalacja włączona

Włącz automatyczne routing departamentu w oparciu o zamiar biletu.

Dział eskalacji

Do których działów można się dostać.

Status eskalacji

Jaki status należy ustawić podczas eskalacji (np. Open, Waiting).

Uwaga do eskalacji

Czy dodać wewnętrzną notę wyjaśniającą przyczynę eskalacji.

Bilety utworzone przez email- created

Bilety utworzone z poczty elektronicznej (poprzez sondaże skrzynek pocztowych lub MX- piped dostawy) postępują zgodnie z tymi samymi zasadami auto- odpowiedzi i eskalacji. Odpowiedź AI jest wysyłana jako odpowiedź e-mail do klienta.

Czy AI auto- odpowiedź na pytania fakturowania?+

Tylko wtedy, gdy włączysz auto- odpowiedź dla działu Billing. Zalecamy rozpoczęcie auto- response off do rozliczeń i umożliwienie jej tylko po przeszkoleniu AI z kompleksową wiedzą o naliczaniu opłat i dokładnie przetestowane.

A jeśli AI da złą odpowiedź?+

Jeśli klient odpowiada twierdząc, że odpowiedź była zła, agent ludzki powinien interweniować. Przeglądaj historię AI, aby zrozumieć, dlaczego AI dał złą odpowiedź, a następnie uaktualnić bazę wiedzy lub szkolenia AI zapobiec temu ponownie.

Czy mogę przejrzeć odpowiedzi auto- przed ich wysłaniem?+

Tak. Ustaw tryb dostawy na "Draft" zamiast "Auto- send". Auto- response drafts pojawi się w kolejce Drafts dla ludzkiej recenzji przed wysłaniem.

Wsparcie

Portal biletów zamocowany

Portal z biletami pozwala na dodanie interfejsu zarządzania biletami do dowolnej strony internetowej. Klienci mogą przeglądać swoje bilety, tworzyć nowe i odpowiadać, wszystko bez wprowadzania admin OpsIQ.

Jak to działa?
Portal biletów zamocowanyPortal wsparcia osadzony w witrynie internetowej pokazującej klientowi własne bilety i przycisk new- bilet.yoursite.com/supportCentrum wsparciaNowy biletTRYBUNAŁ#1042 · Pytanie o zwrotOtwórz#1038 · Pomoc w ustawianiuRozwiązane#1031 · FakturaW oczekiwaniu1EMBEDDodaj do dowolnej strony2SELF-SERVEKlienci widzą swoje bilety3NO LOGINTożsamość prowadzona bezpiecznie
Portal biletów zamocowany

Trzy przygniecione smaki

Wnętrze osadzone

Wynajmuje portal biletu wewnątrz div na swojej stronie. Portal ma pełną szerokość swojego pojemnika.

Widget zmienny

Pokazuje zmienny przycisk otwierający portal biletu w panelu. Podobne do widżetu czatu.

Uwierzytelnione

Klienci widzą tylko swoje bilety.

Instalacja

Bilet i czat zagnieżdżone
<!-- Signed-in customer: your server adds a fresh identity_token -->
<script async src="https://your-opsiq-domain.com/widget.php?site_key=SITE_KEY&identity_token=SERVER_GENERATED_TOKEN"
        data-opsiq-widget="client-chat"></script>

<!-- Guest: the same tag without identity_token -->
<script async src="https://your-opsiq-domain.com/widget.php?site_key=SITE_KEY" data-opsiq-widget="client-chat"></script>
💡
Remote Sites → your site → Codes → C. Signed-in customers generates the complete code for your platform (PHP, WordPress, Laravel, Node.js, Python, Django, .NET, Rails, Java, Go), including the refresh handler that keeps a long visit signed in. The WHMCS hook and the Botble connector bridge already do this.

Wytwarzanie symboli tożsamości

Dla uwierzytelnionego trybu, serwer podpisuje krótki-żywy token z tajemnicą strony. Ten token mówi OpsIQ, kim jest klient, więc widzą tylko swoje własne bilety. Jest to standard HS256 JWT: każda biblioteka JWT. sekret nigdy nie idzie na stronę.

PHP · generuj symbol tożsamości
<?php
// Generate identity token (PHP, no dependencies)
$secret = getenv("OPSIQ_SITE_SECRET");          // the site secret, server-side only
$b64 = fn($v) => rtrim(strtr(base64_encode(json_encode($v, JSON_UNESCAPED_SLASHES)), "+/", "-_"), "=");
$now = time();
$signing = $b64(["alg" => "HS256", "typ" => "JWT"]) . "." . $b64([
    "site_key"      => "SITE_KEY",
    "iat"           => $now,
    "exp"           => $now + 3600,
    "authenticated" => true,                        // required
    "platform"      => "php",
    "customer"      => [
        "id"          => $user["id"],               // required
        "email"       => $user["email"],            // required
        "name"        => $user["name"],
        "external_id" => (string) $user["id"],
    ],
]);
$token = $signing . "." . rtrim(strtr(base64_encode(hash_hmac("sha256", $signing, $secret, true)), "+/", "-_"), "=");
// Put $token on the widget URL as &identity_token=
Node. js, generuj symbol tożsamości
// Node.js — npm i jsonwebtoken
const jwt = require("jsonwebtoken");

function generateOpsIQToken(customer) {
  return jwt.sign({
    site_key: "SITE_KEY",
    authenticated: true,                            // required
    platform: "node",
    customer: { id: customer.id, email: customer.email, name: customer.name, external_id: String(customer.id) },
  }, process.env.OPSIQ_SITE_SECRET, { algorithm: "HS256", expiresIn: 3600 });
}

Właściwości widżetu

Lista biletów

Wyszukiwarka, lista filtrowana statusów. "Czekam na ciebie" podświetlić flagi bilety, na które zespół odpowiedział.

Rozmowa gwintowana

Pełny widok na rozmowy z bogatym tekstem, załącznikami i znacznikami czasu.

Projekt autooszczędności

Odpowiedzi na projekt klienta są automatycznie zapisywane, więc nie tracą pracy, jeśli nawigować.

Żywe sondaże

Sondaże widżetu dla nowych odpowiedzi co ~12 sekund.

Rozdzielczość / ponowne otwarcie

Klienci mogą rozwiązać lub ponownie otworzyć własne bilety jednym kliknięciem.

Notatki personelu wewnętrznego NIGDY nie są pokazywane klientom w zagnieżdżonym bilecie. Jest to trudna granica bezpieczeństwa.
Wsparcie

Skrzynka odbiorcza

Kabina dyskusyjna jest miejscem, w którym Twój zespół zarządza rozmowami na żywo z klientami. Pokazuje aktywne rozmowy, konwersacje przypisane do zadań, rozmowy obsługiwane przez AI- i archiwizowaną historię.

Skrzynka odbiorcza
Skrzynka odbiorczaTrójkącik z agentem czatu: lista rozmów, rozmowa na żywo z chipem AI i panel kontekstowy odwiedzający / CRM.Skrzynka odbiorczaprzestrzeń roboczaJDJaneGdzie jest mój rozkaz?MOMensahCity in New Jersey USApytanie dotyczące naliczania opłatRTRitaAI obsługiwaneGdzie jest mój rozkaz?Shipped today · UPSAI projekt gotowyOdpowiedz...WIZYTORJane DoeUS · Złoto3 zlecenia przeszłeLTV $480CRMEtap: Klient1UNIFIEDKażdy czat na żywo2CONTEXTPanel odwiedzający + CRM3AI ASSISTProjekt i przeredagowanie
Jedna skrzynka na każdy czat na żywo, lista rozmów, wątek z AI draft na tap i pełny użytkownik + kontekst CRM.

Zarządzanie rozmowami

Aktywne rozmowy

Konwersacje w toku. Zielona kropka = klient pisze lub ostatnio aktywny.

A- obsługiwane

Rozmowy, w których AI odpowiada. Możesz przejąć kontrolę w każdej chwili klikając przycisk Dołącz.

Przydzielony do mnie

Konwersacje przypisane specjalnie do ciebie.

Czekam.

Rozmowy, w których klient czeka na odpowiedź.

Archiwum

Wykonane rozmowy. Przeszukiwanie według słów kluczowych, daty i klienta.

Przekazywanie z AI do człowieka

Kiedy przejmiesz rozmowę od AI, przestrzegaj tych trzech zasad:

1
Pozdrówcie się osobiście

"Cześć, tu Sarah z zespołu wsparcia".

2
Kontekst odniesienia

"Widzę, że pytałeś o status zamówienia".

3
Ustaw oczekiwania

Powiedz klientowi, co będzie dalej. "Zajrzę do tego teraz i za kilka minut będę miał dla ciebie odpowiedź".

Włączanie / wyłączanie SI na rozmowę

Kiedy jest na górze, AI generuje odpowiedzi. Gdy wyłącza się, tylko ludzie mogą odpowiedzieć. AI pamięta kontekst rozmowy nawet gdy jest wyłączony i z powrotem włączony.

Tryb wyłączenia / poza godzinami

Konfiguracja godzin pracy w Ustawieniach. Poza godzinami pracy, AI może: (1) Dalsze reagowanie na klientów, (2) Pokaż wiadomość "away" i utwórz bilet do follow- up, lub (3) Wyłącz całkowicie czat i pokaż formularz biletu. Wybierz zachowanie, które pasuje do Twojego modelu wsparcia.

Prowadzenie trudnych rozmów

1
Spokojnie.

Nie dopasowuj emocjonalnej intensywności klienta. Potwierdź ich frustrację bez bycia obronnym.

2
Zbieranie faktów

Przed udzieleniem odpowiedzi należy zgromadzić odpowiednie informacje: szczegóły zamówienia, status konta, poprzednie bilety.

3
Wcześnie się wychylić

Jeśli sytuacja wiąże się z zwrotami, zagrożeniami prawnymi, nadużyciami lub bezpieczeństwem, to raczej narasta na starszego członka zespołu niż próbuje poradzić sobie z tym sam.

Czy mogę porozmawiać z zespołem (agent do agenta)?+

Tak. Użyj wewnętrznych notatek w ramach rozmowy do komunikacji z innymi agentami. Te notatki nigdy nie są widoczne dla klienta.

Co się stanie, gdy zamknę rozmowę?+

Rozmowa przenosi się do Archiwum. Jeśli klient wysyła nową wiadomość później, powstaje nowa rozmowa.

Wsparcie

Kanały komunikacyjne

Połącz WhatsApp, Facebook Messenger, Instagram DM, Telegram i LINE tak wiadomości klienci już wysłać w tym samym skrzynce odbiorczej jak czat na stronie internetowej, odpowiedział ten sam asystent AI.

Każdy kanał zachowuje się identycznie, gdy jest podłączony: wiadomość klienta staje się rozmową w Kat Inbox, asystent AI odpowiada na nią przy użyciu tej samej wiedzy i instrukcji jak czat strony internetowej, a każdy agent może przejąć. Nic o swojej AI potrzebuje konfiguracji na kanał.

Jak wygląda połączenie

Facebook Messenger &Instagram

Otwórz połączenia → Facebook Messenger & Instagram DM, kliknij Połącz, zaloguj się z kontem na Facebooku, które zarządza Twoją Stroną i wybierz stronę. Instagram jest z nią połączony, gdy Twoja Strona posiada profesjonalne konto Instagram połączone.

WhatsApp

Jedno kliknięcie, gdzie oferuje go dostawca: otwórz złącze Messaging Hub i użyj Connect WhatsApp, a następnie postępuj zgodnie z kierunkiem obsługi Meta aby wybrać lub utworzyć swój numer firmy WhatssApp. W przeciwnym razie wklej referencje z dowolnego z bram 20.

Telegram

Dwie minuty. Wiadomość @ BotFather w Telegram, wysłać/newbot,wybierz nazwę i nazwę użytkownika kończącą się na "bot", a następnie wklej symbol, który daje Ci do złącza Telegram.OpsIQZarejestruje dla ciebie haczyk.

LINE

Utwórz wiadomość API kanał na developers.line.biz, wklej sekretny kanał i token dostępu, a następnie skopiuj haczyk URL do OpsIQ do LINE i wyłączyć własne auto- odpowiedzi.

SMS

Dodać dostawcę (Twilio, Vonage, Termii i innych) w Messaging Hub z jego referencjami i numerem nadawcy.

Każde złącze pokazuje własne instrukcje krok-by-krok wewnątrz szuflady, w tym dokładnie co skopiować i gdzie. Nigdy nie trzeba referencje dewelopera dla opcji jednego kliknięcia.

Włączanie kanału

Połączenie kanału nie uruchamia go. Ustawienia → Rozmowa z klientem → Zaawansowane → Przesyłanie kanałów, włączyć główny przełączanie i następnie indywidualny kanał. Każdy kanał ma swój własny auto- odpowiedź AI przełącznik, więc można pilotować na jednym przed otwarciem reszty.

1
Podłącz kanał

W Connectorach, używając instrukcji w szufladzie tego złącza.

2
Przetestować połączenie

Kliknij Test. To sprawia, że prawdziwe połączenie do dostawcy i mówi, co jest nie tak, jeśli coś jest.

3
Włącz kanały wiadomości

Ustawienia→Rozmowa z klientem→Zaawansowane. Włącz główny przełącznik, a następnie kanał.

4
Wyślij sobie wiadomość.

Z innego konta, wysłać wiadomość na stronie, numer lub bot. Powinien pojawić się w Inboxie Czatu w ciągu kilku sekund i uzyskać odpowiedź AI.

Odpowiedz na okno

Platformy komunikacyjne ograniczają czas, w jakim firma może odpowiadać po napisaniu przez klienta. OpsIQ pokazuje pozostały czas na każdej rozmowie i wymusza regułę dla Ciebie.

WhatsApp

24 godziny od ostatniej wiadomości klienta. Po tym można wysłać tylko zatwierdzony szablon, który skonfigurować w tej samej karcie Zaawansowane.

& Instagram wysyłającego

24godziny dla normalnych odpowiedzi; agenci mogą odpowiadać do7dni później, pod zasileniem agenta Mety.

Telegram, LINE, SMS

Nie ma okna z platformem.

⚠️
Jeśli odpowiedź nie powiodła się, ponieważ okno zostało zamknięte, rozmowa pokazuje dlaczego. Jest to zasada platformy, a nie limit OpsIQ.

Wspólne pytania

Czy klienci widzą, że AI odpowiedziała?+

Odpowiedź pochodzi z Twojej strony, numer lub bot dokładnie tak jak ludzka odpowiedź. Twoje instrukcje AI kontrolować ton i czy identyfikuje się.

Czy agent może przejąć pośrednią rozmowę?+

Tak. Otwórz rozmowę w skrzynce na rozmowy i kliknij Dołącz. AI zatrzymuje się, wpisz, a klient widzi ciągły gwint po ich stronie.

A jeśli odłączę kanał?+

Użyj Rozłącz na złączu. Historia wiadomości jest zachowana; nowe wiadomości po prostu przestać przybywać, a platforma jest kazana, aby przestać je wysyłać.

Czy dwa miejsca pracy mogą korzystać z tej samej strony Facebook?+

Nie. Strona należy do jednego miejsca pracy na raz. Podłączenie jej w innym miejscu przenosi ją, a pierwsza przestrzeń robocza przestaje odbierać wiadomości, więc rozłącz się celowo zamiast ponownie połączyć gdzie indziej.

Wsparcie

Prawdziwe rozmowy czatu

Przykłady te pokazują, jak dobrze wyszkolona AI klienta powinna obsługiwać wspólne scenariusze. Użyj ich do przetestowania treningu AI i identyfikowania luk.

Przykłady rozmów 10

1. Zwracający się klient pytający o zamówienie

Scenariusz:
Klient: Cześć, złożyłem zamówienie3dni temu i nie otrzymał jeszcze żadnego powiadomienia wysyłki. Order # ORD -5523.
Co robić:

AI powinna: (1) Look up order # ORD -5523 przez złącze. (2) Zgłoś aktualny stan i śledzenie informacji, jeśli jest dostępny. (3) Jeżeli zamówienie jest opóźnione, proszę potwierdzić opóźnienie i podać szacunkowy harmonogram (4) NIE wymyślać statusu wysyłki, jeśli złącze nie ma takiego.

2. Prospekt pytania o ceny

Scenariusz:
Klient: Ile kosztuje Twój Pro plan? Czy oferujesz roczną fakturę?
Co robić:

AI powinna: (1) Odpowiedzi z bazy wiedzy z obecnych cen. (2) Wyjaśnij różnicę między rozliczeniami miesięcznymi a rocznymi (3) Jeśli odpowiedź nie znajduje się w bazie wiedzy, powiedz to i zaoferuj połączenie ich ze sprzedażą. (4) NIE wymyślać cen, które nie znajdują się w bazie wiedzy.

3. Zły klient żądający zwrotu

Scenariusz:
Klient: To jest śmieszne! Twój produkt nie działa i chcę moje pieniądze z powrotem teraz.
Co robić:

AI powinna: (1) Bądź spokojny w tej frustracji. (2) Poproś o numer zamówienia lub email konta. (3) Wyjaśnij proces zwrotu kosztów (4) Stwórz bilet wsparcia lub eskalacji do ludzkiego agenta. (5) NIE obiecuj refundacji, która wymaga zgody człowieka.

4. Podwójna skrzynia na krawędź rozliczeniową

Scenariusz:
Klient: W tym miesiącu byłem dwukrotnie oskarżony. Mój bank przedstawia dwa zarzuty $29.99.
Co robić:

AI powinna: (1) Potwierdzić obawy. (2) Zbierz odpowiednie szczegóły (e-mail, daty opłat). (3) Wyjaśnij, że kwestie rozliczeń wymagają przeglądu przez człowieka. (4) Utwórz bilet na oddział Billing wraz ze szczegółami. (5Ustaw priorytet na High.

5. Klient wielojęzyczny

Scenariusz:
Klient: Bonjour, je voudrais savoir si vous livrez en France?
Co robić:

AI powinna: (1) Odpowiedź w języku klienta, jeśli język ten jest obsługiwany. (2) Odpowiedź na pytanie dotyczące dostawy do Francji z bazy wiedzy. (3) Jeśli język nie jest obsługiwany, odpowiedz w języku domyślnym i podaj, które języki są dostępne.

6. Rozmowa po godzinach

Scenariusz:
Klient: Halo, jest tam ktoś? Potrzebuję pomocy z moim kontem.
Co robić:

AI powinna: (1) Jeśli skonfigurowana jest po godzinach AI, odpowiedz i asystuj. (2) Jeśli po godzinach pracy tworzy bilety, powiedz: "Nasz zespół jest obecnie offline. Stworzyłem bilet wsparcia dla Ciebie i ktoś będzie śledzić w godzinach pracy". (3) Podaj numer biletu.

7. Przedzakupowy sklep porównawczy

Scenariusz:
Klient: Jak porównuje Twój produkt do [Konkurentor X]?
Co robić:

AI powinna: (1) Opisz swoje mocne strony produktu. (2) NIE NAGRODZAĆ konkurenta. (3) Jeśli w bazie wiedzy znajduje się strona porównawcza, link do niej. (4) Jeśli klient zapyta o funkcje, których nie masz, bądź szczery.

8. Klient chce rekomendacji

Scenariusz:
Klient: Prowadzę mały sklep internetowy z o zamówienia 100 miesięcznie. Który plan jest dla mnie odpowiedni?
Co robić:

AI powinna: (1) W razie potrzeby zadaj pytania wyjaśniające (np. jakie funkcje są najważniejsze). (2) Zalecić plan oparty na bazie wiedzy. (3) Wyjaśnij, dlaczego ten plan odpowiada ich potrzebom (4) Należy wspomnieć, że mogą one rozpocząć od mniejszego planu i uaktualnić później.

9. Klient próbuje uzyskać nieautoryzowaną zniżkę

Scenariusz:
Klient: Widziałem online, że dajesz 50% zniżki. Czy mogę dostać jeden?
Co robić:

AI powinna: (1) Proste wyjaśnienie aktualnych promocji, jeśli istnieją. (2) NIE tworzyć lub obiecuje zniżki, które nie są w bazie wiedzy. (3) Jeśli klient utrzymuje się, oferta połączyć je z zespołem sprzedaży.

10. Klient potrzebuje pomocy z funkcji

Scenariusz:
Klient: Jak eksportować dane? Nie mogę znaleźć przycisku eksportu.
Co robić:

AI powinna: (1) Dostarcz instrukcje krok po kroku z bazy wiedzy. (2) Dołącz dokładną ścieżkę strony i lokalizację przycisku. (3) Jeśli funkcja wymaga określonego planu, należy o tym wspomnieć. (4) Jeśli funkcja nie istnieje, bądź szczery i sugeruj alternatywy.

Wsparcie

Routing czatu i eskalacja

Kiedy czat na żywo potrzebuje prawdziwej osoby, AI odpowiada na dwa pytania: który zespół jest właścicielem tej rozmowy i kto powinien być poinformowany. Oba są skonfigurowane w Ustawienia, Chat klienta, Wsparcie Flow, w dziale tras SI.

Wybór działów, z których może korzystać AI

Dwa pola na tym panelu są whitelister. Wydziały przeniesione w prawo są jedynymi tymi, które AI może trasy do lub otworzyć bilety w. Wszystko lewo po lewej jest niewidoczne do niego, nawet jeśli departament istnieje i jest zatrudniony. Zacznij wąskie i dodać działy jak ich personel.

💡
Jeśli żaden dział nie jest włączony, OpsIQ wraca do dziedzicznego routingu na każdym dziale, który może znaleźć. Traktuj to jako siatkę bezpieczeństwa, a nie wybór konfiguracji.

Kto otrzymuje eskalację

Jest to część, której większość ludzi oczekuje od konfiguracji i nie musi. Kiedy AI eskalacji czatu, OpsIQ e-mail osób dołączonych do tego działu. Zarządzasz tą listą raz, na stronie Team i Departments, a zarówno eskalacja biletów i chat escation śledzić go.

Członkowie zespołu departamentu

Każdy aktywny administrator dołączony do działu otrzymuje swoją kopię. Zawieszone i wyłączone konta są pomijane.

Główny administrator

Używany, gdy nie ma członków zespołu, więc eskalacja nadal dociera do kogoś.

Nikt nie jest dołączony

Dostawa nie jest możliwa. Panel routingu oznacza, że dział w kolorze czerwonym i AI nie mówi odwiedzającemu, że człowiek został powiadomiony.

⚠️
Adres e-mail departamentu nie jest celowo używany jako odbiorca. Adres ten jest przychodzącą skrzynką na bilety, jedna poczta przychodząca jest dopasowana do otwartych biletów. Eskalacja wysłana tam będzie przerzucona z powrotem jako nowy bilet zamiast dotrzeć do osoby.

Cały wydział łapania

Dokładnie jeden dział nosi znak chwytacz-wszystko. Otrzyma czaty AI nie mógł z pewnością miejsce, i jest to ostateczność zamiast normalnej ścieżki.

1
Wygrywaj wyraźne sygnały

Wypłata należności idzie do działu rozliczeń, hosting i błędów sformułowania do technicznego, kupując słowa sprzedaży.

2
Klasjer AI próbuje dalej

Jeśli słowa kluczowe nie są jednoznaczne, model odczytuje rozmowę i wybiera z włączonych działów.

3
Wtedy chwyt - wszystko

Tylko gdy oba pojawiają się puste, łapie - cały dział otrzymuje czat.

4
Gwardia sprzedaży

Jeśli chwyt - wszystko jest działem sprzedaży i odwiedzający nie pokazał sygnału zakupu, OpsIQ szuka działu wsparcia lub technicznego zamiast tego, więc zwykłe pytania o wsparcie nie gromadzą się w Sprzedaży.

Co mówi gość

Jeśli eskalacja e-mail wyjdzie, AI mówi odwiedzającemu, że zespół został powiadomiony. Jeśli nie może wyjść, Al mówi coś uczciwego i zachęca ich do pozostawienia wiadomości w czacie zamiast. Nie będzie twierdził, że człowiek został poinformowany, gdy żaden e-maila nie został wysłany.

Panel mówi "Nikt nie może powiadomić" dla wydziału+

Nikt nie jest do niego dołączony. Otwórz zespół i departamenty, załącz co najmniej jeden aktywny admin, a następnie przeładuj stronę ustawień. Panel odczytuje na żywo.

Czy czat może pójść w inne miejsce niż drużyna?+

Tak. Niestandardowy adres wcześniej zapisany dla wydziału nadal nadjeżdża listę zespołów. Nowe ustawienia powinny przywiązywać ludzi do działu, więc jest jedno miejsce do utrzymania.

Dlaczego mój chwyt - wszystko pominięto?+

Sprawdź, czy jest to dział sprzedaży. Jeśli tak, a odwiedzający nie pokazał sygnału zakupu, OpsIQ trasy do działu wsparcia lub technicznego na celu.

Wsparcie

Skrzynki pocztowe e-mail i projekty

OpsIQ może połączyć się z skrzynkami pocztowymi, aby automatycznie tworzyć bilety od przychodzącego e-maila i wysyłać odpowiedzi jako e-mail. Zapewnia również odpowiedzi na AI- opracowane do ludzkiej recenzji.

E-mail
E-mail do biletuSkrzynka pocztowa IMAP po lewej stronie, która karmi przychodzące wiadomości e-mail do gwintowanego biletu z odpowiedzią przygotowaną przez AI- po prawej.E-mailprzestrzeń robocza[email protected] · IMAPWniosek o zwrot[email protected]Nie można się zalogować[email protected]Kopia faktury[email protected]Bilet #1042od e-mail · BillingChciałbym zwrot pieniędzy za...duplikat...Projekt AIPrzegląd i wysyłanie odpowiedzi1INGESTIMAP & spedycja w2TO TICKETSAutomatyczne gwintowanie3AI DRAFTSOdpowiedzi na przegląd
Wyciągnij e-mail nad IMAP (lub spedycja), przekształcić każdy w bilet gwintowany, i niech AI projekt odpowiedzi do przeglądu.

Podłączenie skrzynki pocztowej

Protokół

IMAP (większość dostawców), Gmail API (Google Workspace) lub Microsoft Graph (Outlook 365).

Wymagane ustawienia

Host, port, szyfrowanie (SSL/TLS), nazwa użytkownika, hasło lub hasło aplikacji, folder (zazwyczaj INBOX).

Mapowanie departamentu

Mapowanie skrzynki pocztowej do działu biletów. Emaile do [email protected] tworzyć bilety w dziale "Wsparcie".

Konfiguracja Gmail a (krok po kroku)

1
Włącz weryfikację etapu 2

Przejdź do konta Google > Bezpieczeństwo > 2- Weryfikacja kroków i włączyć.

2
Utwórz hasło aplikacji

Przejdź do konta Google > Bezpieczeństwo > Hasła aplikacji. Wybierz "Mail" i "Inne (OpsIQ). "Kopiuj 16- Hasło.

3
Wpisz OpsIQ

Przejdź do wiadomości e-mail > Skrzynki pocztowe > Dodaj. Ustaw hosta: imap.gmail.com, port: 993, szyfrowanie: SSL, nazwa użytkownika: [email protected], haslo: hasło aplikacji.

4
Badanie

Kliknij Test Connection. Jeśli powiodło się, OpsIQ rozpocznie sondaż dla nowych wiadomości e-mail w skonfigurowanym przedziale czasu.

Konfiguracja programu Outlook 365

1
Sprawdź IMAP jest włączona

W ustawieniach Outlook > Poczta > Sync e-mail, upewnij się, że IMAP jest włączona.

2
Użyj hasła aplikacji lub nowoczesnego auth

Jeśli MFA jest włączona, to stwórz hasło aplikacji. W przeciwnym razie użyj swojego zwykłego hasła.

3
Wpisz OpsIQ

Host: outlook.office365.com, port: 993, szyfrowanie: SSL, nazwa użytkownika: [email protected].

Ustawia cPanel na pocztę internetową

1
Znajdź ustawienia IMAP

W cPanel > Konta e-mail, kliknij konto email dla IMAP ustawienia.

2
Wpisz OpsIQ

Host: zazwyczaj mail.yourdomain.com lub nazwa hosta serwera, port: 993 (SSL) lub 143 (STARTTLS), nazwa użytkownika: pełny adres e-mail.

AI e-maile projekty

Kiedy auto- response jest ustawiony na tryb "Draft", AI generuje projekty odpowiedzi pojawiające się w kolejce Drafts. Możesz:

Przegląd

Przeczytaj szkic i sprawdź czy jest dokładny.

Edycja

Zmień tekst, ton lub zawartość przed wysłaniem.

Wyślij

Zatwierdzenie projektu i wysłanie go w formie odpowiedzi e-mail.

Wyrzucić

Skreślić projekt, jeśli nie jest to właściwe.

Auto- send

Jeśli pewność siebie jest wystarczająco wysoka i auto- send jest włączona, projekty są wysyłane automatycznie po konfigurowalnym opóźnieniu.

Dlaczego maile nie są przestawiane na bilety?+

Sprawdź: (1) Czy skrzynka pocztowa jest połączona i zdrowa? Poszukaj zielonego statusu w e- mailu > Skrzynki pocztowe. (2) Czy praca cron działa? E-mail ankietowanie wymaga cron. (3) Czy wiadomość e-mail jest filtrowana lub przenoszona do folderu innego niż INBOX?

Czy mogę użyć wielu skrzynek pocztowych?+

Tak, każda skrzynka może być odwzorowana na inny dział. [email protected] idzie do Support, [email protected] idzie do Billing.

Wsparcie

Zadowolenie klienta (CSAT)

CSAT mierzy zadowolenie z biletów i czatu, wymienia nieszczęśliwe odpowiedzi i porównuje AI i wyniki człowieka.

Ekran produktu
Zadowolenie klientaStrona CSAT łączy w sobie karty wyników, śledzenie detraktora, komentarze, podział departamentu i agenta oraz informacje zwrotne na czacie.Zadowolenie klientaprzestrzeń roboczaODPOWIEDZI386AVERAGE4.6POSITIVE91%WIDOK PRACY ŻYWEJKontynuacja detraktora12 odpowiedzi, które zostały ocenione1–2PrzeglądBadania biletówWysłany 24h po zamknięciuAutomatyczneInformacje zwrotne na temat rozmowyAI 4.5 · Człowiek 4.7PorównajWidok agentaWynik i liczba odpowiedziTrenerze1WATCH AVERAGETrend wykorzystania, nie jeden wynik2FOLLOW DETRACTORSPrzeczytaj komentarz3COMPARE FAIRLYAI i człowiek
Strona CSAT łączy w sobie karty wyników, śledzenie detraktora, komentarze, podział departamentu i agenta oraz informacje zwrotne na czacie.

Badania biletów są planowane po zamknięciu (zwykle 24 godzin później). Pozytywna odpowiedź jest punktacja4lub 5. Użyj kolejki detractor dla wyników 1 lub2i przeczytać bilet / rozmowę przed skontaktowaniem się z klientem.

Informacje zwrotne z rozmowy są zgłaszane oddzielnie dla rozmów zakończonych przez AI- i obsługiwanych przez człowieka. Niskie rozmiary próbek nie powinny być wykorzystywane do rankingu agentów lub modeli.

Wsparcie

Telefoniczne transmisje zespołowe

Strona Platforma e-mail pozwala upoważnionemu operatorowi wysłać jednokrotną wiadomość do wszystkich aktywnych agentów, wybranych agentów lub działu i przegląd wysłać historię.

Ekran produktu
Platforma e-mailZespół email kompozytor pokazuje publiczność, temat, wiadomość i przeszłość dostawy historii.Platforma e-mailprzestrzeń roboczaRECIOL12DELIVERED11NIEPEŁNIONE1WIDOK PRACY ŻYWEJPublicznośćWszystkie aktywne środkiWybranePrzedmiotLipiec wsparcia rotaGotoweWiadomośćUwagi dotyczące harmonogramu i eskalacjiGotoweHistoriaPoprzednie transmisje i wynikiWidok1CHOOSE PEOPLEWszystkie, wybrane lub zespół2WRITE CLEARLYPrzedmiot i wiadomość3REVIEW HISTORYPotwierdź wynik
Zespół email kompozytor pokazuje publiczność, temat, wiadomość i przeszłość dostawy historii.

Ta strona jest dla wewnętrznych komunikatów operacyjnych, a nie marketingu klienta. Wybierz najmniejszą poprawną publiczność, nazwy podglądów i adresy, a następnie wysłać. Dostawa wykorzystuje skonfigurowaną ścieżkę email i zapisuje wynik.

Wsparcie

Skrzynki pocztowe, dostawa i przychodząca wiadomość e-mail

Konfiguracja sposobu wysyłania e-maili przez OpsIQ, zamienia wiadomości przychodzące w bilety i udowadnia, że domena wysyłająca jest gotowa.

Ekran produktu
Ustawienia e- mailUstawienia e-mail łączą w sobie wychodzące routing, od tożsamości, spożycia poczty elektronicznej, kontroli doręczania i email testowy.Ustawienia e- mailprzestrzeń roboczaWYBUCHOWESMTPMAILBOXES3DomenaPrzejdźWIDOK PRACY ŻYWEJZłącze preferowaneZłącze SMTP / dostawcaSkonfigurowanyZ tożsamościSupport <[email protected]>GotoweSkrzynka pocztowa IMAP[email protected] · Skrzynka odbiorczaBadanieWydajnośćSPF · DKIM · DMARCPrzejdź1CHOOSE OUTBOUNDZłącze lub SMTP2CONNECT INBOXIMAP lub rura3BADANIEWyślij i zweryfikuj
Ustawienia e-mail łączą w sobie wychodzące routing, od tożsamości, spożycia poczty elektronicznej, kontroli doręczania i email testowy.

Wychodzący email

Pełni administratorzy mogą wybrać preferowane złącze pocztowe; OpsIQ powraca do skonfigurowanego SMTP/ dostawy poczty, gdy jest to właściwe. Ustaw rozpoznawalny z nazwy / adresu, wyślij test i sprawdź 24- Godziny oceny sukcesu / porażki.

Skrzynki pocztowe

Skrzynka IMAP potrzebuje nazwy, adresu e-mail, działu docelowego, hosta, portu, trybu bezpieczeństwa, nazwy użytkownika, hasła, folderu, stanu ankietowego i wyboru uwierzytelniania. Teraz sondaż aby sprawdzić spożycie przed czekaniem na cron.

Przewody rurowe

Na tym samym serwerze rura pocztowa może bezpośrednio przekazać wiadomość RFC822. Zdalny serwer pocztowy może wysłać wiadomość do chronionego punktu końcowego przychodzącego za pomocą symbolu. Obie ścieżki wchodzą w ten sam gazociąg odduplikowania, gwintowania i ticket- routingu.

Wydajność

Sprawdzenie SPF / DKIM / DMARC jest doradczym dowodem skonfigurowanej z domeny. Zielony sprawdzanie nie gwarantuje umieszczenia skrzynki odbiorczej, ale przed wysłaniem wiadomości produkcyjnych należy naprawić błąd.

Wsparcie

Portal wsparcia Studio

Wsparcie Portal Studio projektuje i publikuje doświadczenie obsługi klienta bez konieczności zewnętrznych zasobów obrazu.

Ekran produktu
Portal wsparcia StudioPortal Studio prezentuje responsywny podgląd obok tematu, nawigacja, wiedza, bilet, asystent, formularz, stopka i kontroli CSS.Portal wsparcia Studioprzestrzeń roboczaTEMPLATENowoczesnePRZEGLĄDKomputer stacjonarnyPAŃSTWOProjektWIDOK PRACY ŻYWEJMotywBarwy markowe i typografiaEdycjaNawigacjaWiedza, bilety, asystentEdycjaFormularz biletuPola, routing i kopiowanieEdycjaPublikujPotwierdź i przeżyjPrzegląd1CHOOSE TEMPLATEPoczątek od struktury2PREVIEW SIZESKomputer stacjonarny do mobilnego3PUBLISH SAFELYPrzegląd następnie zwolnić
Portal Studio prezentuje responsywny podgląd obok tematu, nawigacja, wiedza, bilet, asystent, formularz, stopka i kontroli CSS.

Użyj szablonu jako punktu wyjścia, a następnie skonfiguruj motyw, układ, nawigację, wyszukiwanie wiedzy, formularz biletu, asystent, stopka, marka, zachowanie biletów, niestandardowe CSS i ogólne ustawienia. Podglądaj pulpit, tablet i mobilne przed publikacją.

Wsparcie

Niedobory wiedzy

Kolejka wiedzy-luk zbiera pytania klientów, na które AI nie mogła odpowiedzieć w sposób pewny, aby zespół mógł poprawić zasięg.

Ekran produktu
Niedobory wiedzyKolejka przerw nie trafiła w sedno lub wątpliwości o niskim zaufaniu i śledzi, czy zespół je rozwiązał.Niedobory wiedzyprzestrzeń roboczaOPEN GAPS28REPEATED9RESOLVED116WIDOK PRACY ŻYWEJLimity migracjiPytany 14 razyWysokiWsparcie weekendowePytany 8 razyŚredniTerminy zwrotuPytany 6 razyŚredniRegion APIPytany 3 razyNiski1REVIEW QUESTIONZobacz kontekst rozmowy2CHOOSE FIXArtykuł lub szybkie3RESOLVEWeryfikacja następnej odpowiedzi
Kolejka przerw nie trafiła w sedno lub wątpliwości o niskim zaufaniu i śledzi, czy zespół je rozwiązał.

Otwórz lukę, aby przeczytać oryginalne pytanie i rozmowy w pobliżu, a następnie wybierz odpowiednią fix: uaktualnić istniejący artykuł, utworzyć nowy artykuł wiedzy, dodać fakt biznesowy, poprawny dane złącza lub zmienić instrukcje eskalacji. Zaznacz to rozwiązane dopiero po ocenie lub rzeczywistym teście zwraca akceptowalną odpowiedź.

Wsparcie

Administracja strony statusu

Strona administracyjna dotycząca statusu komunikuje się ze zdrowiem i incydentami usług, wykorzystując komponenty, stany bieżące i aktualizacje.

Ekran produktu
Podawanie stanuAdministracja stanu wymienia elementy i incydenty, tak aby operatorzy mogli publikować jasne, oznaczone czasem informacje o usługach.Podawanie stanuprzestrzeń roboczaOVERALLOperacyjneSKŁADKI7INCIDENTS1WIDOK PRACY ŻYWEJStrona internetowaOperacyjneZielonyAPIPoniżona wydajnośćPatrzZażywanie poczty elektronicznejOperacyjneZielonyObecny incydentDochodzenie w sprawie opóźnień w APIOtwórz1UPDATE COMPONENTWybierz stan jasny2POST INCIDENTAktualizacje oznaczane czasem3RESOLVEZamknij podsumowanie
Administracja stanu wymienia elementy i incydenty, tak aby operatorzy mogli publikować jasne, oznaczone czasem informacje o usługach.

Jeśli incydent wpływa na klientów, publikuj wstępne zawiadomienie, dodaj time- stemplowane aktualizacje w miarę zmiany faktów i zamknij zwięzłe podsumowanie rozdzielczości. Nie używaj strony statusu jako wewnętrznego dziennika debugowania; delikatna diagnostyka należy do OpsIQ i logów serwerów.

AI

Utwórz swoją SI

Konfiguracja AI jest miejscem, w którym wybierasz swojego dostawcę AI, model i kontrolę kosztów. OpsIQ wspiera wielu dostawców: Claude (Anthropic), GPT- 4o (OpenAI), Gemini (Google), i Grok (xAI). Możesz użyć własnego API klucz (BYOK) lub zarządzane sztuczną inteligencją, jeśli są dostępne w Twoim planie.

Utwórz AI
Konfiguracja AIPanel ustawień AI: przełączanie dostawcy Managed-AI / BYOK, wybieranie modelu oraz miesięczny licznik budżetu.Konfiguracja AIprzestrzeń roboczaKonfiguracja AIDostawcaZarządzana AITwój klucz (BYOK)Wzórclaude · balansowanyMiesięczny budżet na badania naukowe i innowacje62%1TWO MODESZarządzanie ptasią grypą lub BYOK2PICK A MODELPrędkość vs głębokość3BUDGETSZaczepy i kontrola kosztów
Wybierz zarządzane AI lub swój własny klucz, wybierz model dla prędkości vs głębokości i cap miesięczne wydatki z tokenami budżetu.

Wybór dostawcy

Claude (Anthropic)

Mocne rozumowanie, ostrożne z faktami, dobre w wykonywaniu złożonych instrukcji. Modele: claude- sonnet4-20250514 Claude...3.5-sonet. Najlepiej dla: rozmowy wsparcia, pytania techniczne, szczegółowa analiza.

GPT- 4o (OpenAI)

Szybkie, twórcze, dobra wiedza ogólna. Modele: gpt- 4o, gpt- 4o- mini. Najlepiej dla: szybkie odpowiedzi, kreatywne pisanie, szerokie pytania na temat wiedzy.

Gemini (Google)

Dobre w faktycznych pytaniach, wsparcie dla wielu języków. Modele:gemini-2.0-flash,gemini-1.5-pro. Najlepiej dla: wielojęzyczne wsparcie, faktyczne przeglądy.

Grok (xAI)

Szybkie, zwięzłe odpowiedzi. Modele: grok-3-mini- szybki. Najlepiej dla: szybkie odpowiedzi, dorywczy ton.

BYOK vs zarządzana AI

BYOK (Przynieś własny klucz)

Zapewniasz własny klucz API od dostawcy. Płacisz usługodawcy bezpośrednio. Pełna kontrola nad wyborem modelu i jego wykorzystaniem.

Zarządzana AI

AI jest dostarczany w ramach OpsIQ Nie. API Użytkowanie jest mierzone w stosunku do salda AI.

Konfiguracja kroku-by- krok

1
Przejdź do konfiguracji AI

W admin OpsIQ przejdź do Ustawienia > Konfiguracja AI.

2
Wybierz dostawcę

Wybierz dostawcę SI z rozwijanego.

3
Wprowadź klucz API

W przypadku stosowania BYOK, enter your API klucz. Dla zarządzanej SI, jest to obsługiwane automatycznie.

4
Wybierz model

Wybierz konkretny model do użycia. Mniejsze modele są szybsze i tańsze. Większe modele dają lepsze odpowiedzi jakości.

5
Przyłącze testowe

Kliknij przycisk "Test connection", aby zweryfikować klucz i model API. Zielony znak kontrolny oznacza sukces.

6
Zapisz

Kliknij Zapisz, aby aktywować konfigurację AI.

Kontrola kosztów

Budżet miesięczny

Ustaw maksymalny miesięczny wydatek na żetony AI. Po osiągnięciu budżetu, AI oferuje wdzięcznie degradacji (krótsze odpowiedzi, brak auto- odpowiedzi) zamiast całkowicie zatrzymać.

Limit symbolu per- conversation

Maksymalne żetony na jedną rozmowę. Zapobiega uciekającym rozmowach z zużyciem nadmiernych kredytów.

Alarm niskiego salda

Kiedy stan Twojego salda kredytowego AI spadnie poniżej progu (domyślnie: żetony 50,000), w admin pojawia się ostrzeżenie. Ustaw to w konfiguracji AI.

Konfiguracja obszaru pracy

Konfiguracja AI to per- workspace. Jeśli zarządzasz wieloma miejscami, każde miejsce pracy może korzystać z innego dostawcy, modelu i budżetu. Przestrzeń robocza dziedziczy globalne domyślne wartości chyba że jest przeładowana. Aby skonfigurować na przestrzeni roboczej: przełącz na przestrzeń roboczą, a następnie przejdź do konfiguracji AI i zapisz tam ustawienia.

Uzyskanie kluczy API

Anthropic (Claude)

Idź do console.anthropic.com > API Klucze > Tworzenie klucza. Kopiuj klucz zaczynając od "sk- ant-".

OpenAI (GPT)

Idź do platform.openai.com > API Klucze > Tworzenie nowego klucza tajnego. Kopiuj klucz zaczynający się od "sk-".

Google (Gemini)

Idź do aistudio.google.com > Get API Klucz. Utwórz klucz do projektu. Kopiuj klucz.

xAI (Grecja)

Idź do console.x.ai > API Klucze. Tworzenie i kopiowanie klucza.

Testowanie konfiguracji AI

Scenariusz:
Po wejściu do klucza API kliknij przycisk "Test connection". Należy zobaczyć zielony znak kontrolny i próbkę odpowiedzi z AI.
Co robić:

Jeżeli badanie nie powiodło się: (1) Sprawdzić, czy API klucz jest poprawny (brak dodatkowych spacji). (2) Sprawdź, czy Twoje konto ma ustawione rachunki u dostawcy. (3) Sprawdź, czy nazwa modelu jest poprawna. (4) W przypadku korzystania z zarządzanego AI, sprawdzić swoją licencję jest aktywny.

Który dostawca jest najlepszy?+

Nie ma jednego najlepszego dostawcy. Claude jest doskonały do rozmów wsparcia. GPT- 4o jest szybki i wszechstronny. Gemini obsługuje wiele języków dobrze. Wypróbuj każdy z nich i zobacz, który daje najlepsze wyniki dla konkretnego przypadku zastosowania.

Czy mogę zmienić dostawcę później?+

Tak. Zmień dostawcę i klucz API w dowolnym momencie. Istniejąca historia rozmowy jest zachowana. AI będzie używać nowego dostawcy do wszystkich przyszłych rozmów.

Co się stanie, gdy skończą mi się kredyty?+

AI degraduje wdzięcznie: odpowiedzi stają się krótsze, auto- odpowiedzi pauzy, a administrator pokazuje niskie ostrzeżenie równowagi. Śledzenie rdzenia, bilety i CRM nadal działa bez SI.

AI

Inteligentniejszy i tańszy czat z klientem

Zestaw kontrolek opt- in, które sprawiają, że klient czatuje albo mądrzejszy (to uzasadnia na koncie klienta jak człowiek agenta) lub tańszy (wysyła AI mniej, lub odpowiedzi w mniejszej ilości kroków). Każda kontrola jest wyłączona domyślnie i niezależna, włączając jeden na nigdy nie zmienia żadnego innego zachowania. Większość żyć w Ustawienia > Klient Chat > Zachowanie; kilka są na Ustawienie AI i Tren swoją AI.

Inteligentniejsze odpowiedzi (tryb agenta)

Zwykły czatbot odpowiada na jedno pytanie z jednego spojrzenia. Tryb agenta na, asystent może dokonać kilku kontroli tylko raz na konto i odsyłać je do klienta, np. "mam otwarte bilety, i jest mój stan równowagi wystarczająco dla mojej następnej odnowy?" jest odpowiedzią w jednej odpowiedzi z matematyki wykonane. Zaangażowuje się tylko dla zweryfikowanych klientów na rachunek lub refundacji pytania; wszystko inne działa normalną ścieżkę single- odpowiedź.

Tryb agenta

Do kilku przeglądów tylko do odczytu na zakręt, krzyżowo odniesiony przed odpowiedzią. Włącz, gdy masz podłączoną platformę (WHMCS, Shopify, Stripe, Zendesk, itp.). Wyłączony = dzisiejsze jednoosobowe zachowanie, bez zmian.

Głębokość myślenia dla odpowiedzi agenta

Jak trudne są przyczyny modelu na złożonych zakrętach (niskie / średnie / wysokie). Zacznij na Niskie; Większość pytań wsparcia są dobrze tam obsługiwane.

Model agenta

Przypina silniejszy model tylko dla złożonych agentów skręca, więc codziennie czat pozostaje na lekkim, tanim modelu i tylko twarde zakręty płacić za głębokość. Blank = normalny Customer- chat model.

Plan przed siebie · odpowiedzi jednogłośne (beta)

Mały krok planowania decyduje, które spojrzenia do ciągnięcia i czy baza wiedzy jest potrzebna, a następnie odpowiada w jednym głównym wywołaniu zamiast kilku kroków. Podłączenie pod tryb Agent. Nie może być włączone, jeśli nie jest włączony tryb Agent 'a. Ta sama jakość odpowiedzi, mniej połączeń na pytania wieloczęściowe.

Rozmowa i zrozumienie

Pamięć długokonwersacyjna (beta)

Trzyma krótkie, bieżące podsumowanie starszych wiadomości (nazwiska, numery biletów / faktur, kwoty, decyzje), tak aby asystent pozostaje konsekwentny w bardzo długich czatach bez zwracania całego transkryptu. Najlepiej dla support- ciężkie, długie wątki; pary z trybem Agent.

Tolerancja typologiczna

Czyta małe literówki ("moje otwarte ticketts", "nieopłacone faktury") jako zamierzone słowa tak, że zamiast pominięcia znajduje się właściwa informacja. Działa z każdą podłączoną platformą. Domyślnie; przydatne dla mobilnego - ciężki czat.

Kontekst konta typu "lean"

Tylko przyłącza migawki konta klienta, gdy pytanie dotyczy ich konta (balans, faktury, bilety, usługi), pomijając go na ogólnych pytań. Cięcia kosztów bez utraty jakości. Asystent może nadal pobrać konto na żywo, kiedy skręt potrzebuje go.

Oszczędność kosztów

Pomiń poszukiwanie wiedzy na pozdrowienia (beta)

"Cześć", "dzięki" i "ok" nie uruchamiają wyszukiwania bazy wiedzy, odpowiedzi te nigdy go nie używają. Wszelkie wiadomości z prawdziwą treścią nadal wyszukują jako normalne.

Najdłuższa odpowiedź jest dozwolona (żetony)

Ogranicza długość pojedynczej odpowiedzi. Długość odpowiedzi jest najdroższą częścią rozmowy, więc rozsądny limit (około 500 dla pomocy technicznej) to najbardziej efektywna kontrola kosztów czatu. Obniża tylko globalny limit, nigdy go nie zwiększa.

Na Ustaw swoją SI

Głębokość myślenia (klient i administrator czatu)

Jak dużo myśli model przed odpowiedzią (minimalne do wysokich). Keep klienta czat na minimum / niskie dla prędkości; zarezerwować wyższe ustawienia do analizy i admin copilot.

Model Per- AI (na zlecenie)

Każda powierzchnia AI (czat na żywo, szkice biletów, podsumowania, analizy, drugi pilot admin, promocje, Inteligencja witryny i więcej) może działać na swoim modelu. Światło, gdzie szybkość ma znaczenie, silne, gdzie jakość ma znaczenie. Pustka na powierzchni = dostawca domyślnego dla tej pracy.

Admin kontroli kosztów czatu

Kopilot admin może zachować ograniczoną pamięć roboczą i załadować tylko narzędzia pytanie potrzebuje (chudych narzędzi) zamiast każdego narzędzia każdy skręt.

Na pociągu twoja SI

Instrukcje kompresji

Twoje instrukcje są wysyłane na każdym zakręcie, więc ich długość jest powtarzającym się kosztem. Przycisk Compress przepisze miejsce, aby powiedzieć to samo w mniejszej liczbie słów. Odmawia przepisania, jeśli upuściłby jakiekolwiek {variable} lub reguła, i informuje, co chronił, tak że nigdy nie zmienia po cichu znaczenia.

"Co jest już w mózgu" (Hamilton)

Pokazuje, co OpsIQ już wie o Twojej działalności na szczelinę, więc można usunąć wszystko, co powtarzałeś w swoich własnych instrukcji.

💡
Gdzie idą pieniądze? Dla krótkiego wsparcia czatu wejście (instrukcje + dane konta + historia, wysłane każdy obrót) zwykle kosztuje więcej niż krótka odpowiedź, buforowanie i chudego kontekstu pomóc większość tam. Dla długo generowane treści dominuje wyjście. Replikacyjna - długość cap i niższa głębokość myślenia płacić się tam. Zobacz Ustaw swoją SI, aby utrzymać szybkie buforowanie na, co sprawia, że duża powtarzająca się część każdego zakrętu tanie.
Czy to zmienia odpowiedź czatu?+

Nie. Każda kontrola jest wyłączona domyślnie i niezależnie. Włączenie jednego tylko dodaje jego zachowanie; wyłączenie go zwraca czat dokładnie tak jak to działało wcześniej.

Jaki rozkaz mam je włączyć?+

Uruchom codziennie czat na modelu światła i przypiąć silniejszy model agenta. Następnie, jeśli masz podłączoną platformę, włączyć tryb Agent, następnie zaplanować przed sobą, a następnie pamięci Long- rozmowy. Następnie chudego kontekstu, skip- KB- for- pozdrowienia i cap odpowiedzi. Wreszcie kompresować swoje instrukcje. Oglądaj kilka prawdziwych rozmów po każdej zmianie.

Zestaw agentów administracyjnych: wyszukiwanie stron internetowych, książki startowe, misje, transfer plików

Czat AI Admin jest pracującym inżynierem, nie tylko oknem na pytania. Może on badać poprawki w sieci, przechowywać bibliotekę swoich procedur operacyjnych, patrolować swoje serwery na harmonogramie i przenieść pliki. Większość z nich jest napędzana przez proszenie o to w czacie; jedną rzeczą, którą skonfiguruje się z góry jest to, którego dostawcy wyszukiwarek internetowych używa, na Ustawieniu strony AI.

Wyszukiwarka stron internetowych

Wbudowany

Agent przeszukuje sieć w poszukiwaniu dokumentów, komunikatów błędów i aktualnych informacji podczas pracy. Z pola korzysta z programu DuckDuckGo, który nie wymaga klucza i konfiguracji.

Podręczniki

W czacie

Zapisany biblioteka procedur ("jak robimy X tutaj"). Agent pisze jeden po przybiciu trudną pracę i śledzi go następnym razem, więc wiedz - jak przetrwać koniec czatu.

Misje

Zaplanowany

"Każdego ranka, sprawdź miejsce na dysku i logi błędów i powiedz mi".

Przesyłanie pliku

W czacie

Poproś o plik logowania i uzyskaj prywatny link do pobierania lub mieć jeden plik skopiowany z jednego podłączonego serwera do innego. Oba są w pułapce 5 MB.

Admin Agent wyszukiwarka internetowa (na Konfiguracja AI)

Usługodawca wyszukiwania

Co wykorzystuje wyszukiwarka web agenta. Domyślnie jest DuckDuckGo: bez klucza, za darmo, działa na każdej instalacji. Serper.dev (Wyniki Google) zwykle zwracać lepsze wyniki, ale każdy potrzebuje API klucz od tego dostawcy. Jeśli dostawca Keyed zawiedzie z jakiegokolwiek powodu (zły klucz, kwota zużyta, problemy sieciowe), że wyszukiwanie spada z powrotem do DuckDuckGo automatycznie, więc wyszukiwanie nigdy nie idzie ciemno.

Szukaj klucza API

Klucz dla wybranego dostawcy, potrzebny tylko do Brave, Tavily lub Serper. Po zapisaniu jest zamaskowany i nigdy nie pokazany na stronie ponownie; wklej nowy, aby go zastąpić. Okiennikowy dostawca staje się aktywny tylko wtedy, gdy zarówno dostawca i jego klucz są zapisywane.

Podręczniki

Kiedy agent po prostu pracował przez pracę będziesz chciał zrobić to samo ponownie, powiedz "zapisać to jako książki biegun o nazwie nocny-cleanup". Od tego czasu widzi ona książkę biegaczy po imieniu w każdej sesji, a kiedy poprosić o pracę po imieniu (lub opisać go) to podciąga kroki i następuje je. Możesz poprosić go do listy, aktualizacji lub usunąć Runbooks kiedykolwiek.

💡
Runbook to poradnik, a nie darmowa przepustka. Kiedy agent podąża za jednym, każdy krok, który zmieniłby serwer, nadal przechodzi przez bieżący tryb autoryzacji i pokazuje zwykłe karty aprobaty. Runbooki nigdy nie mogą obejść zatwierdzenia.

Misje

Misja jest powtarzającą się pracą, która agent działa na własną rękę: co godzinę, codziennie o określonej godzinie lub co tydzień w ustalonym dniu. Misje są read- tylko przez projekt. Mogą one czytać serwery, dane i sieć, ale nigdy nie mogą zmienić niczego; sprawdzają i raportują. Kiedy misja kończy się, ustalenia lądują jako powiadomienie na dzwonku administratora. Powiedz "uruchomić patrol rano teraz", aby uruchomić jeden na żądanie, lub poprosić agenta do listy, zatrzymać lub usunąć misje.

⚠️
Misje uruchomić OpsIQ cron, więc trzeba go skonfigurować (patrz Cron i automatyzacja). Jednorazowe "uruchomić go teraz" z czatu działa nawet między cron działa na większości serwerów.

Przenoszenie plików

Poproś o plik ("get me today 's error log from the web server"), a agent stopniowo go i odpowiedzi z prywatnym linkiem do pobierania. Link działa tylko dla signed- in admins i wygasa po około dniu. Pliki są ograniczone w 5 MB; dla czegoś większego, poproś agenta, aby skompresował lub przycinał go najpierw na serwerze.

Agent może również skopiować jeden plik pomiędzy dwoma podłączonymi serwerami, ponownie do 5 MB. Zapis na miejscu jest traktowany jak każda inna zmiana, jaką wprowadza: w trybie zapytań najpierw otrzymasz kartę aprobaty, istniejący plik jest kopii zapasowej, a kopia jest odwracalna. Dla bezpieczeństwa zawartość pliku jest ponownie odczytywana ze źródła w momencie zastosowania kopii, nie pobierana z czatu.

AI

Trenuj swoją sztuczną inteligencję

AI Szkolenie jest, gdzie uczysz OpsIQ jak się zachowywać. Piszesz podpowiedzi, które określają osobowość, granice, koncentrację wiedzy i zasady eskalacji. Pomyśl o tym, jak pisanie podręcznika szkolenia dla nowego agenta wsparcia.

Pociąg AI
Trenuj swoją sztuczną inteligencjęEdytor instrukcji AI z zakładkami Klienta / Administratora i zwykłym angielskim tonem, zawsze i nigdy nie rządzi.Trenuj swoją sztuczną inteligencjęprzestrzeń roboczaAI klientaAdmin AITone PrzewodniczącyPrzyjacielska, zwięzła, nigdy nie nachalna.ZawszeZaoferuj ludzkie przekazanie za rachunki.NigdyObiecaj zwrot pieniędzy bez sprawdzania konta.1TWO MANUALSKlient i administrator AI2PLAIN ENGLISHTone, zawsze, nigdy3GROUNDEDPlus baza wiedzy
Trenuj SI jak nowy wynajem, Podręczniki Klienta i Admin napisane w języku angielskim (ton, zawsze, nigdy), uziemiony w KB.

Dwa obszary szkoleniowe

Plik AI klienta

Kontroluje jak AI rozmawia z klientami w widżecie czatu. Jest to najważniejszy sygnał, aby uzyskać prawo.

Admin AI short

Kontroluje, jak AI pomaga zespołowi administracyjnemu w pulpicie operatora. To obsługuje wewnętrzne zapytania i wykonanie działania.

Pisanie wielkiego klienta AI prompt

Twój klient AI short powinien obejmować następujące obszary:

1
Tożsamość

Kto jest AI? Podaj mu nazwę, rolę i osobowość. Przykład: "Jesteś Luna, przyjazny i kompetentny asystent obsługi klienta dla Acme Store".

2
Tone i styl

W jaki sposób powinien się komunikować? Przykład: "Bądź profesjonalny, ale ciepłe. Użyj prostego języka. Unikaj żargonu. Zachować odpowiedzi zwięzłe (2-3 ust. max) ".

3
Granice wiedzy

Co powinien wiedzieć, a czego nie? Przykład: "Wiesz o naszych produktach, cenach, wysyłki i polityki powrotów. Nie wiesz o konkurencyjnych produktów lub wewnętrznych decyzjach firmy".

4
Zasady eskalacji

Kiedy powinien przekazać je człowiekowi? Przykład: "Eskalacja do człowieka, kiedy: klient prosi o zwrot kosztów, wspomina o działaniach prawnych, zgłasza problem bezpieczeństwa lub zadaje to samo pytanie trzy razy".

5
Rzeczy, których nigdy nie robić

Trudne granice. Przykład: "Nigdy nie obiecaj refundacji. Nigdy nie udostępniaj wewnętrznych formuł cenowych. Nigdy się nie rób funkcji produktu, które nie istnieją. Nigdy daj porad medycznych, prawnych lub finansowych".

Przykład prompts

Przykład klienta AI short · sklep internetowy
You are Aria, a friendly customer support assistant for TechGear.

PERSONALITY:
- Warm and professional
- Concise (2-3 paragraphs max per response)
- Use simple language, no jargon
- If unsure, say so honestly

KNOWLEDGE:
- Our products: laptops, accessories, software subscriptions
- Pricing: as listed in the knowledge base
- Shipping: free over $50, 3-5 business days standard, 1-2 days express ($12)
- Returns: 30-day money-back guarantee, must be in original condition

ESCALATION (hand off to human):
- Refund requests over $100
- Account security concerns
- Legal threats or complaints
- Customer explicitly asks for a human

NEVER DO:
- Promise specific delivery dates (say "estimated")
- Share discount codes not in the knowledge base
- Make up product specifications
- Give financial or legal advice
Przykład klienta AI short · hosting firmy
You are Atlas, an AI assistant for CloudHost web hosting.

TONE: Technical but accessible. Assume the customer has basic web knowledge.

KNOWLEDGE:
- Shared hosting, VPS, dedicated servers
- cPanel, DNS, SSL, email configuration
- WordPress, Joomla, Drupal installation
- Common error codes and troubleshooting

ESCALATION:
- Server outages affecting multiple customers
- Data loss or security breach reports
- Billing disputes over $50
- Complex migration requests

BOUNDARIES:
- Do NOT access customer servers or databases
- Do NOT change DNS records or passwords
- Always recommend the customer makes changes themselves
- For code issues, suggest steps but clarify you cannot debug their application

Rafinowanie swojego czasu

1
Uruchom z podstawowymi

Zacznij od tożsamości, tonu i kluczowych granic. Nie próbuj wszystko zakrywać pierwszego dnia.

2
Przegląd historii AI tygodnik

Czytać rozmowy, gdzie AI dał złe lub nieoptymalne odpowiedzi.

3
Aktualizuj sygnał

Dodaj szczegółowe zasady powtarzających się problemów. Przykład: jeśli AI nadal obiecuje zwroty, dodaj "Nigdy nie obiecaj zwrotu. Powiedz, że eskalacji do zespołu rozliczeń".

4
Dodaj wiedzę

Jeśli AI nie może odpowiedzieć na pytanie, dodaj odpowiedź do bazy wiedzy zamiast próbować dopasować wszystko w trybie błyskawicznym.

⚠️
Zachowaj swój popęd pod słowami 2,000. Nadmiernie długie impulsy mogą mylić AI i zwiększyć koszty żetonów. Umieść szczegółowe informacje w Bazie Wiedzy zamiast.
Jaka jest różnica między punktem a bazą wiedzy?+

Prophet definiuje osobowość, granice i zasady. Baza wiedzy dostarcza informacji faktycznych (szczegóły produktu, ceny, polityki). AI czyta zarówno, ale szybkie kształtuje zachowanie podczas gdy KB zapewnia odpowiedzi.

Czy mogę mieć inne sugestie dla różnych działów?+

Promownik jest per- workspace. Jeśli potrzebujesz innego zachowania AI dla różnych działów, użyj bazy wiedzy do dostarczania informacji specyficznych departament- i wspomnieć kontekst działu w swoim postu.

AI

Historia ptasiej grypy

Historia AI pokazuje każdą rozmowę, jaką miała AI z klientami i administratorami. Użyj jej do audytu wyników AI, znalezienia złych odpowiedzi i identyfikacji luk szkoleniowych.

Historia ptasiej grypy
Historia ptasiej grypyLogarytm AI obraca się z oznaczeniami typu, pytaniem i odpowiedzią, czasem odpowiedzi i rezultatem.Historia ptasiej grypyprzestrzeń roboczaKażdy obrót SI, nagranyczatP: gdzie jest moje zamówienie?A: wysłany dzisiaj, śledzenie UPS...0.9sOdpowiedźbiletProjekt odpowiedzi na T-12345sporządzony wniosek o zwrot1.4sdraftedadministratorPodsumujcie bilety na ten tydzień.Zwrócone podsumowanie linii 122.1sgotoweczatQ: anulować mój planprzekazanego człowiekowi0.7sescalated1EVERY TURNSzybkość, odpowiedź, działanie2SEARCHABLEFiltruj & eksport3OWNER-ONLYPełna ścieżka audytu
Każdy zwrot AI (czat, szkic biletów, akcja admin) zalogowany z dokładnym pozorem, odpowiedź, czas trwania i wynik.

Co każda rozmowa pokazuje

Data i godzina

Kiedy doszło do rozmowy.

Identyfikacja klienta

Nazwa i adres e-mail, jeśli jest znany, w przeciwnym razie IP i kraj.

Kanał

Widget czatu, auto- odpowiedź biletu, projekt e-mail lub admin AI.

Wiadomości

Pełny zapis rozmowy: wiadomości dla klientów i odpowiedzi AI.

Wykorzystanie tokena

Jak wiele żetonów rozmowa zużyta. Wysokie użycie symbolu może wskazywać, że AI daje zbyt verbose odpowiedzi lub rozmowy poszedł w kółko.

Podjęte działania

Wszelkie działania AI wykonane podczas rozmowy (sprawdzone zamówienie, utworzono bilet itp.).

Ocena

Jeśli CSAT jest włączone, ocena satysfakcji klienta dla tej rozmowy.

Znalezienie problemów

Szukaj za pomocą słowa kluczowego

Szukaj konkretnych tematów, aby zobaczyć, jak AI radzi sobie z nimi. Przykład: wyszukaj "zwrot", aby sprawdzić, czy AI jest zgodny z polityką refundacji.

Filtr według ratingu

Pokaż tylko nisko ocenioną rozmowę, aby skupić się na niezadowolonych klientów.

Filtruj według kanału

Pokaż tylko auto- odpowiedzi biletów do audytu automatycznych odpowiedzi oddzielnie od czatu.

Sortuj według użycia symbolu

Wysokosymboliczne rozmowy mogą wskazywać na problemy: sztuczna inteligencja krąży w kółko lub nie odpowiada na pytanie.

Tygodniowa procedura audytu

1
Sprawdź rozmowy o niskiej ocenie

Czy to była luka w wiedzy, kwestia tonu czy zła odpowiedź?

2
Sprawdź rozmowy z wysokiej-token

Czy to może oznaczać zamieszanie?

3
Aktualizacja szkolenia

Dla luk w wiedzy, dodawać artykuły do bazy wiedzy. Dla problemów z zachowaniem, uaktualniać AI shadow. Dla powtarzających się złych odpowiedzi, dodać wyraźne zasady korekty.

Znalezienie braków w wiedzy

Scenariusz:
Wyszukujesz historię AI dla "instalacji" i znajdziesz rozmowy 15 gdzie AI powiedział "Nie mam szczegółowych instrukcji montażu tego produktu".
Co robić:

Oznacza to, że Twoja baza wiedzy nie posiada przewodników instalacyjnych. Tworzenie artykułów opartych na wiedzy dla każdego produktu etapów instalacji. Po ich dodaniu, test poprzez zadawanie pytań instalacji AI.

AI

Uwagi dotyczące ptasiej grypy

AI Insights automatycznie analizuje wzory rozmów i powierzchnie, które można wykorzystać do celów rozpoznania: wspólne pytania, trendy satysfakcji, luki w wiedzy oraz wzorce eskalacji.

Uwagi dotyczące ptasiej grypy
Uwagi dotyczące ptasiej grypy (Intelligence Hub)The Intelligence Hub: AI Today 's Brief, Smart Alerts, a Score- Lead / Analyse- a- Page tool oraz 14- Day Traffic Pattern Schemat.Uwagi dotyczące ptasiej grypyprzestrzeń roboczaDZIŚ BRIEFRuch w górę 12%; 3 ogniwa gorące;2Transakcje muszą być kontynuowane.Inteligentne alarmyBłędy w wypisach skoczyłyWyskakuj na /pricingNowy gorący ołów z USADochody przed ubiegłym tygodniemWynik wiodącej / Analizuj stronęIP lub URL…Biegnij14-Dzień Wzorzec ruchu1DZIŚ BRIEFAI pisze poranne podsumowanie2SMART ALERTSAnomalie wynurzone3ON DEMANDWynik ołowiu · analizować stronę
Prawdziwe centrum wywiadowcze: AI-napisane dziś krótkie, inteligentne alarmy dla anomalii, na żądanie wiodące punktacji i analizy strony, a 14- wzór dnia ruchu.

Co za spostrzeżenia

Najważniejsze pytania

Najczęściej zadawane pytania. Jeśli "Jak zresetować moje hasło?" to #1, baza wiedzy potrzebuje wybitnego przewodnika resetowania hasła.

Tendencje w zakresie zadowolenia

CSAT zdobywa punkty w czasie. Czy satysfakcja z AI poprawia się lub zmniejsza? Nagłe krople mogą wskazywać na zmianę bazy wiedzy, która coś zepsuła.

Stopa restrukturyzacji i uporządkowanej likwidacji

Jaki procent rozmów AI rozwiązuje bez interwencji człowieka? 70% jest dobry. Poniżej 50% oznacza, że AI potrzebuje więcej szkoleń.

Powody eskalacji

Dlaczego rozmowy są przekazywane ludziom. Powszechne powody: klient poprosił człowieka, AI nie mógł odpowiedzieć, temat wrażliwy, problem rozliczeń.

Niedobory wiedzy

Tematy, gdzie AI często mówi "Nie wiem" lub daje niskie zaufanie odpowiedzi.

Średnia długość rozmowy

Ile wiadomości na rozmowę. Bardzo długie rozmowy (10+ wiadomości) mogą wskazywać, że AI nie rozumie pytania.

Wykorzystanie spostrzeżeń w celu poprawy

Scenariusz:
Inwigilacja AI pokazuje, że 23% eskalacji są "Klient zapytany o gwarancję" i AI nie mógł odpowiedzieć.
Co robić:

Jest to wyraźna luka w wiedzy. (1) Napisz obszerny artykuł gwarancyjny w Bazie Wiedzy obejmujący wszystkie warunki gwarancji, proces roszczenia i wyłączenia. (2) Aktualizacja polecenia AI do informacji o gwarancji referencyjnej. (3) Monitor AI Insights w przyszłym tygodniu, aby zobaczyć, czy eskalacja gwarancji maleje.

AI

Podręcznik AI dla admin

Admin AI (Zapytaj OpsIQ) pomaga zespołowi zarządzać OpsIQ od wewnątrz deski rozdzielczej admin. Możesz poprosić o sprawdzenie danych, wyjaśnienie funkcji, podsumowanie biletów i wykonanie działań platformy.

Admin AI
Podręcznik AI dla adminPole poleceń Ask-OpsIQ z kartą działania proponowaną przez AI- platformową, pokazującą parametry i potwierdzającą / anulującą.Zapytaj OpsIQprzestrzeń roboczaZapytaj OpsIQZawieś usługę dla zaległego konta #4821AIProponowane działania: suspend_servicekonto: #4821 (zaległe $120)platforma: WHMCS · odwracalna · skontrolowanaPotwierdźAnuluj1ASK ANYTHINGPolecenia po angielsku2PROPOSE FIRSTDziałanie pokazane przed uruchomieniem3YOU CONFIRMScaped & skontrolowane
Powiedz admin AI, co chcesz w zwykłym języku angielskim; proponuje dokładne działanie (skalowane, odwracalne, kontrolowane) i czeka na potwierdzenie.

Co może zrobić admin AI

Sprawdź dane

Zapytaj: "Pokaż mi wszystkie bilety z [email protected]"or" What is the status of order # ORD 5523?"

Podsumowanie

Zapytaj: "Summaryze ostatnie bilety 10" lub "Jakie są najważniejsze kwestie wsparcia w tym tygodniu?"

Wyjaśnij funkcje

Zapytaj: "Jak skonfigurować auto- odpowiedź?" lub "Co oznacza karta bounce rate?"

Wykonanie działań

Zapytaj: "Utwórz bilet dla [email protected] o fakturowaniu "lub" Bliski bilet T-12345"

Zapytania platformy

Zapytaj: "Ilu gości dostaliśmy wczoraj?" lub "Jakie są nasze dochody w tym miesiącu?"

Przykładowe rozmowy

Szukanie klienta

Scenariusz:
Admin pyta: "Znajdź klienta [email protected] i pokaż mi ich ostatnią działalność"
Co robić:

AI sprawdza klienta we wszystkich połączonych źródłach danych: sesjach odwiedzających, biletach, rozmowach na czacie, zamówieniach i kontaktach CRM. Zwraca podsumowanie ostatnich działań z linkami do każdego elementu.

Uzyskanie podsumowania dziennego

Scenariusz:
Admin pyta: "Co się dzisiaj stało?"
Co robić:

AI podsumowuje: "Dzisiaj miałeś 245 odwiedzający (w górę 12%), 8nowe bilety (3 rozwiązane przez AI),2nowe zamówienia ogółem $198, oraz1czat eskalacji o opóźnieniu wysyłki ".

Wykonanie działania

Scenariusz:
Admin pyta: "Zmień bilet T-5523 priorytet pilny "
Co robić:

AI potwierdza: "Zmienię bilet T-5523 priorytet z Normalnego na Pilny. To wpłynie na zegar SLA. Potwierdź?" Potwierdzasz, i akcja jest wykonywana.

💡
Admin AI wykonuje tylko działania zarejestrowane w Rejestrze Działania. Nie może wynaleźć działań ani systemów dostępu poza OpsIQ.
AI

Scenariusze AI dla klienta

Sekcja ta obejmuje wspólne scenariusze AI dla klientów z oczekiwanymi wskazówkami zachowania i szkolenia.

AI klienta
Scenariusze AI dla klientaBiblioteka pytań klientów połączona z oczekiwanym zachowaniem AI i znacznikiem wyniku dla każdego.Scenariusze AI dla klientaprzestrzeń roboczaBiblioteka scenariuszy · oczekiwane zachowanie AI"Gdzie jest mój rozkaz?"Sprawdź kolejność za pomocą złącza, daj śledzenieRozwiązanie"Chcę zwrotu pieniędzy"Przyznaj się, nigdy nie obiecaj · ręki do człowiekaPrzekazywanie"Czy obsługa jest w dół?"Sprawdź status, zgłoś stan bieżącyStan"Anuluj moje konto"Potwierdź zamiar, a następnie droga do człowiekaPotwierdź1SCENARIOSWspólne pytania2EXPECTEDJak AI powinna odpowiedzieć3BADANIEZnajdź luki w szkoleniach
Biblioteka prawdziwych pytań klientów i dokładnie jak AI powinny obsługiwać każdy, aby przetestować swój trening i znaleźć luki.

Biblioteka scenariuszy

Zamówienie

Scenariusz:
Klient: "Gdzie jest moje zamówienie #12345?"
Co robić:

Oczekiwane zachowanie AI: (1) Sprawdź kolejność przez złącze platformy. (2) Zgłoś aktualny status (przetwarzanie, przesyłanie, dostarczanie). (3) Włączyć numer śledzenia, jeśli jest dostępny. (4) Jeżeli zamówienie jest opóźnione, należy potwierdzić i podać szacunkową linię czasową (5) Nigdy nie wymyślaj informacji o śledzeniu.

Żądanie resetowania hasłem

Scenariusz:
Klient: "Zapomniałem hasła i nie mogę się zalogować"
Co robić:

Oczekiwane zachowanie AI: (1) Dostarcz hasło zresetować kroki z bazy wiedzy. (2) Włączyć link do resetowania lub ścieżkę strony. (3) Wspomnij, że resetowanie e-maila może zająć kilka minut. (4) Sugeruje sprawdzenie folderu spamu. (5) Jeśli klient nadal nie może zresetować, eskalować do człowieka.

Prośba o wykonanie

Scenariusz:
Klient: "Czy można dodać tryb ciemności do aplikacji mobilnej?"
Co robić:

Oczekiwane zachowanie AI: (1) Podziękuj im za sugestię. (2) Wyjaśnij, w jaki sposób są obsługiwane żądania funkcji (logowane, przeglądane, traktowane priorytetowo). (3) NIE obiecuj, że funkcja zostanie zbudowana. (4) Jeśli istnieje podobna funkcja, proszę o niej wspomnieć.

Rozstrzyganie sporów

Scenariusz:
Klient: "Zostałem oskarżony, ale mój serwis nie działa"
Co robić:

Oczekiwane zachowanie AI: (1/ Potwierdź frustrację.2) Sprawdź status usługi, jeśli to możliwe. (3) Escalate do działu rozliczeń ze wszystkimi szczegółami. (4Nie obiecaj zwrotu pieniędzy. (5) Ustaw priorytet biletu na High.

Pytanie off- topic

Scenariusz:
Klient: "Jaka jest pogoda w Londynie?"
Co robić:

Oczekiwane zachowanie AI: (1) Politycznie przekierować. "Jestem asystentem wsparcia [Firma] i może pomóc w pytaniach o nasze produkty i usługi. Dla informacji pogodowych, spróbuj usług pogodowych". (2) Zapytaj, czy mają pytania dotyczące produktu.

Jak przetestować zachowanie AI klienta?+

Otwórz swoją stronę internetową w prywatnej / incognito przeglądarki i czatuj z AI jako klient. Spróbuj wspólnych pytań, edge cases i scenariusze kontradyktoryjne. Sprawdź, że AI postępuje zgodnie z twoimi zasadami i używa wiedzy bazy treści poprawnie.

AI

Baza wiedzy na temat ptasiej grypy

Baza wiedzy jest biblioteką artykułów, których AI używa do odpowiedzi na pytania. Kiedy klient o coś pyta, AI przeszukuje bazę wiedzy dla odpowiednich artykułów i wykorzystuje je do generowania dokładnej, uziemionej odpowiedzi.

Podstawa wiedzy
Podstawa wiedzyŹródła, które dostarczają do sklepu wiedzy, a potem SI generujące uziemioną, cytowaną odpowiedź.Podstawa wiedzyprzestrzeń roboczaŹródłaWpełzanie strony internetowejArtykuły pomocyFAQImportowane dokumentyWiedzasemantyczne + słowo kluczoweAIOdpowiedź uziemionaz przytoczonym źródłem."Przyjmowanie refundacji 3–5dni robocze ".1INGESTCzołg, FAQ, import2RETRIEVESemantyczne + słowo kluczowe3GROUNDEDOdpowiedzi z treści
Wpełznij na swoją stronę i zaimportuj doki do bazy wiedzy; AI pobiera odpowiednie kawałki i odpowiedzi, ugruntowane i cytowane.

Jak to działa?

1
Klient zadaje pytanie

"Jaka jest twoja polityka powrotu?"

2
AI przeszukuje bazę wiedzy

OpsIQ znajduje artykuł "Return Policy" poprzez dopasowanie słów kluczowych i znaczenie semantyczne.

3
AI generuje odpowiedź

AI czyta artykuł i pisze naturalną odpowiedź językową w oparciu o zawartość artykułu.

4
Klient otrzymuje dokładną odpowiedź

Odpowiedź jest ugruntowana w twojej polityce, a nie ogólnych danych z szkolenia AI.

Tworzenie dobrych artykułów

Jeden temat na artykuł

Napisz oddzielny artykuł dla każdego tematu: polityka zwrotu, stawki wysyłki, konfiguracja konta, reset hasła. Nie łączyć niepowiązanych tematów.

Pisz jak FAQ

Zacznij od pytania, które zada klient, a następnie udziel odpowiedzi. To pomaga AI dopasować pytania do artykułów.

Bądź dokładny

"Zwroty muszą być zainicjowane w ciągu 30 dni dostawy" jest lepsze niż "Mamy politykę powrotu".

Włączcie przypadki krawędzi

Co z międzynarodowymi zwrotami? A co z produktami cyfrowymi? Co z przedmiotami zakupionymi na sprzedaż?

Utrzymuj go na bieżąco

Przeglądaj artykuły kwartalne. Usuń przestarzałe informacje. Aktualizuj ceny, polityki i procedury, gdy się zmieniają.

Rozpocznij pisanie artykułów

Dostawa i dostawa

Koszty wysyłki, czas dostawy, tracking, międzynarodowy transport i opóźnienia w obsłudze.

Zwroty i zwroty

Okno zwrotne, warunki, proces, harmonogram zwrotu kosztów i wyjątki.

Zarządzanie rachunkami

Hasło reset, zmiana poczty elektronicznej, usunięcie konta i eksport danych.

Wycena i fakturowanie

Opisy planów, cykl rozliczeń, metody płatności, faktury i waluta.

Przewodniki po produktach

Jak używać każdego produktu lub funkcji. Instrukcje krok po kroku z zrzutami ekranu.

Rozwiązywanie problemów

Wspólne problemy i rozwiązania. Komunikaty o błędach i ich poprawki.

Informacje kontaktowe

Godziny pracy, kanały wsparcia, czas reakcji i ścieżki eskalacji.

Prawne i zgodne z przepisami

Podsumowanie polityki prywatności, podsumowanie warunków świadczenia usług, żądania danych GDPR.

Wiedza o połączeniach

Każde złącze może przyczynić się do wiedzy o SI. Kiedy jest włączone, jego wbudowane artykuły (katalog produktów, wspólne pytania, rozwiązywanie problemów specyficznych dla platformy) są automatycznie dostępne dla AI. Możesz przełączać wiedzę o złączu na każde złącze w ustawieniach połączenia.

Budżet Token

Baza wiedzy posiada konfigurowalny pułap tokena (domyślnie: żetony 32,000), który kontroluje ilość kontekstu wiedzy wysyłanego do AI na rozmowę. Jeśli baza wiedzy jest bardzo duża, to AI wybiera najbardziej odpowiednie artykuły w ramach tego budżetu. Podwyższ pułap, jeśli AI nie znajduje odpowiednich artykułów; zmniejsz go, jeśli chcesz zmniejszyć koszty symbolu.

Ile artykułów powinienem mieć?+

Zacznij od5-10 artykuły obejmujące najczęściej zadawane pytania. Dodaj więcej, gdy identyfikujesz luki poprzez historię i inwigilację AI. Większość firm potrzebuje 20-50 artykuły do kompleksowego pokrycia.

Czy mogę importować artykuły z innego systemu?+

Obecnie wiadomości są tworzone ręcznie w OpsIQ. Możesz wkleić zawartość copy- pasty z istniejących FAQ, centrów pomocy lub dokumentów.

W jakim formacie powinny być artykuły?+

Tekst prosty działa najlepiej. AI rozumie język naturalny lepiej niż ustrukturyzowany HTML lub markdown. Napisz, jak można wyjaśnić klientowi.

AI

Ocena ptasiej grypy i Strażnica

Ustawy oceny przekształcają krytyczne pytania klientów w powtarzalne testy jakości odpowiedzi, cytaty, eskalacje i bezpieczeństwo działania.

Ekran produktu
Ocena AIAI Evaluation zawiera listę złotych przypadków testowych, wymaganych zachowań, najnowszych wyników i planowanych operacji Watchtower.Ocena AIprzestrzeń roboczaSETS6CASES84PASS RATE96%WIDOK PRACY ŻYWEJPolityka transportowaWymagane podaniePrzejdźWniosek o zwrotWymagane jest potwierdzenie przez człowiekaPrzejdźNiepoparte roszczeniaZakazane działaniePrzejdźKwestia migracjiOczekiwane brakujące źródłoNiepowodzenie1CREATE CASESZłoty wkład i zasady2RUN SAFELYSuche bieganie lub ewaluacja na żywo3WATCHHarmonogram raz na dobę lub raz w tygodniu
AI Evaluation zawiera listę złotych przypadków testowych, wymaganych zachowań, najnowszych wyników i planowanych operacji Watchtower.

Pełni administratorzy mogą tworzyć zestawy ewaluacji z szybkimi, oczekiwanymi etykietami źródłowymi, wymaganymi cytacjami, zasadami potwierdzania ludzkości, oczekiwaniami eskalacji i zakazanymi działaniami. Uruchom zestaw bezpośrednio, uruchom go na sucho lub powtórz wybraną historię.

Strażnica Przeglądanie błędów obok dostawcy/modelu, wersji prośby, wercji wiedzy, proponowanych działań i kosztów przed zmianą zachowania produkcyjnego. Przeglądaj awarie obok modelu dostawców/model, pozycji prośb, części wiedzy oraz proponowanych akcji i kosztu przed zmianami w zachowaniu produkcyjnym.

AI

Języki i tłumaczenia

Języki zarządzają tłumaczonym tekstem zwracającym się do klienta i zachowaniem używanym w przypadku, gdy OpsIQ postępuje zgodnie z językiem klienta.

Ekran produktu
JęzykiStrona Języki pokazuje język źródłowy, języki przetłumaczone, projekt / stan na żywo i zachowanie języka użytkownika.Językiprzestrzeń roboczaŹRÓDŁOAngielskiLANGUAGES4ŻYCIE3WIDOK PRACY ŻYWEJFrancuskiInterfejs i treśćŻyweNiemieckiInterfejs i treśćŻyweHiszpańskiProjekt tłumaczeniaProjektŚledź klientaOdpowiedź w wykrytym językuWłączone1SET SOURCEOryginalny język operatora2ADD LANGUAGEPrzetłumacz w tle3PUBLISHProjekt lub projekt żywy
Strona Języki pokazuje język źródłowy, języki przetłumaczone, projekt / stan na żywo i zachowanie języka użytkownika.

OpsIQ tłumaczy tekst użytkownika, który został wprowadzony do obsługi. Ustaw język źródłowy poprawnie przed tworzeniem tłumaczeń, dodaj języki docelowe, a następnie przeglądaj projekty przed publikacją. "Podążaj za językiem klienta" kontroluje język odpowiedzi; tłumaczenie interfejsu widget kontroluje jego przyciski, etykiety i tekst systemowy.

Zakres tłumaczenia może być tylko draft- lub na żywo. Nie polegać na tłumaczeniu maszynowym dla prawnych, zwrotu, bezpieczeństwa lub tekstu bezpieczeństwa bez ludzkiej recenzji.

Każde miejsce, które zawiera własne sformułowanie jest wymienione z liczbą wiadomości: komunikaty czatu klienta, promocje, proaktywne wiadomośći, przepływy czatów, wycieczki z przewodnikiem, ogłoszenia, teaserowe pęcherzyki i Badania i formularzePowierzchnia badania obejmuje wszystkie opublikowane ankiety: tytuł, każde pytanie, każdą opcję odpowiedzi, przyciski, powitanie i podziękowania-można skopiować, strona chrom i strony wyników. Klucze są powiązane z ID pytania i wartość opcji, więc przekierowanie pytań lub opcji nigdy nie traci tłumaczenia, a przeredagowanie jednej wiadomości przetłumacza tylko tę wiadomość. Opublikowane na żywo ankiety są oferowane domyślnie; projekty dołączyć, gdy rozszerzenie zakresu.

Badanie postchat email jest zgodne z językiem, w którym gość faktycznie rozmawia, pod warunkiem że język jest jednym z nich, który tu oferujesz; w przeciwnym razie używa on języka systemowego. Sześciu edytowalnych pól jest tłumaczonych na tej stronie, a zachowanie ma swój własny przełącznik w ustawieniach Klienta Czatu.

Bilet i wiadomości portalowe obejmuje stałe typu operatorów tekstowych raz i każdy klient otrzymuje następnie w tym jednym języku: potwierdzenie biletu, otwarte, zamknięte i potwierdzenia sprzężenia zwrotnego, przekierowanie i portal powitanie linii. (Auto- odpowiedź AI nie potrzebuje tego, już odpowiada w języku klienta.) Klienci e-mail w ich własnym języku włączone w OpsIQ Pisanie, e-mail biletowy rozwiązuje język odbiorcy w tej kolejności: język wybrany na portalu lub Centrum Pomocy (przeniesiony na bilet), lokal na ich rekordzie kontaktowym, a następnie język wpisany, wykryty lokalnie przez zakres skryptów i słów markerowych, bez wywołania zewnętrznego. Używane są tylko języki wybrane na stronie Języki, więc funkcja jest obojętna aż do dodania języków. Globalny HTML zawijacz e-mail nie jest celowo przetłumaczony: to markup, a nie proza. Staff- facing email (powiadomienia, alarmy departamentu, raporty analityków, regularne raporty, tygodniowy strawnik) zawsze używa języka systemowego.

PeopleOS HR

PeopleOS: system operacyjny regulowanej siły roboczej

Uruchom cykl życia pracowników od requisition do offboarding z mobilnym samoobsługą, udokumentowane przepływy pracy, wpisane integracje i kontroli człowieka nad delikatnymi decyzjami.

Interaktywna mapa systemu
Centrum dowodzenia PeopleOSTrójwymiarowa deska rozdzielcza PeopleOS łącząca rekrutację, pracowników, pensje, uczenie się i zarządzanie sztuczną inteligencją.Centrum dowodzenia PeopleOSŻYCIE ZDOLNOŚCILUDZIE248ROLY OTWARTE12GATY KONTROLI15 / 15LIFEKTYKLERekrutWynajemRosnąćNagrodaPrzejścieJEDEN REJESTRTożsamość + dowody zatrudnieniaKONTROLA LUDZIOdwołanie, korekta, przejęciePROVE ITWynik i ujawnienie dowodów
PeopleOS utrzymuje cykl życia, kontrolę i dowód na jednym z rekordów.

Administratorzy

Uruchom

Zarządzanie ludźmi, organizacja, rekrutacja, pokłady, dokumenty, urlop, pojednanie płac, korzyści, wydajność, nauka, relacje pracowników, analityka i zarządzanie.

Pracownicy i menedżerowie

Self-service

Korzystanie z mobilnego pierwszego portalu do prywatnych rejestrów, wniosków, dokumentów, onboarding, czasu, wyjaśnienia płatności, uczenia się, informacji o firmie i praw.

Programiści

Rozszerzenie

Użyj polerowanego hr.* działania i przegląd platform.hr.* operacje za pośrednictwem jednego kontraktu, plus klasy wpisywanych złączy. Wygenerowany indeks w sekcji API PeopleOS zawiera listę wszystkich z ich zakresem.

⚠️
PeopleOS nie jest księgowym płac, doradcą prawnym, biurem kontroli naziemnej lub dostawcą tożsamości. Certyfikowane systemy zewnętrzne zachowują te obowiązki. Zielony czek techniczny nigdy nie tworzy legalnej zgody ani dowodów dostawcy.

Uzyskanie PeopleOS HR

PeopleOS HR jest zawarty w planie Enterprise. Na każdym innym płatnym planie jest add- on: właściciel konta otwiera Konto → Add- ons & Token, wybiera PeopleOS HR poziom i albo rozpoczyna darmową próbę lub dodaje go bezpośrednio. Poziomy różnią się w ilości osób i ile rekrutacji, wywiadu i działalności AI są przewożone. Ceny i limity są ustalane na koncie, nie wpisane do produktu, więc zobacz aktualne poziomy na Strona cenowa. Co moduł robi, powierzchnia po powierzchni, jest na Strona produktów PeopleOS HR.

Kto może to dodać?

Darmowy plan nie może go dodać, a płatny plan, który jest nadal w jego własnym planie rozprawy musi poczekać do zakończenia tego procesu.

Wolny proces

Proces przebiega na poziomie, który wybierasz. Gdy kończy się bez zakupu uprawnienie jest usunięte i nic nie jest naładowane. Nic nie jest usuwane: rekordy są tam ponownie w momencie add- on jest dodawany.

Kiedy nie jest własnością

PeopleOS HR nie pojawia się w palecie bocznym, palecie poleceń, Ustawienia lub pomocy in- app. Bezpośredni link do strony HR oferuje add- on zamiast strony.

Osiągnięcie poziomu

Po osiągnięciu limitu poziomu strona oferuje następny poziom. Edycja lub usunięcie tego, co już istnieje, nigdy nie jest zablokowane.

Instalacje w trybie self-hostingu

Uprawnienia podróżują na licencji. Dodaj add- on na koncie OpsIQ i zainstalować odbiera go przy jego następnej kontroli licencyjnej.

Konfiguracja pierwszego tygodnia

Wszystko poniżej jest prawdziwym ekranem; nic tutaj nie potrzebuje dewelopera.

1
Włącz moduł

Otwórz PeopleOS → HR Home. Płyta flagi zaczyna się od głównego przełącznika, PeopleOS HR: z wyłączeniem strony HR lub powierzchni pracownika jest osiągalny. Włączenie przełącznika jest dwukliknięciem potwierdzenia; wyłączenie jednego jest jednym kliknięciem. AI włącza się poniżej (pomoc redakcyjna, przegląd aplikacji, asystenci autonomiczni, wywiady AI, automatyczne wysyłanie oferty, weryfikacja tożsamości) zatrzymać do czasu podjęcia decyzji.

2
Niech Kopilot konfiguracji zrobi konfigurację

Otwórz PeopleOS → Setup Copilot i powiedzieć, co chcesz w języku zwykłym: polityka urlopu z jego dni i wypowiedzenia, święta publiczne dla kraju, kategorii przypadku z jej SLA, ograniczenie kosztów, szablon pokładowy, miesięczny puls. Otrzymasz plan z powrotem z tego, co zrozumiał i co zakładał. Nic nie działa, dopóki nie potwierdzisz; krok średniego ryzyka potrzebuje drugiej osoby; każdy bieg pozostawia paragon.

3
Nazwa portalu pracownika

Otwórz PeopleOS→Frontline→Sygnał w projekcieNa self-host zainstalować portal mieszka w /hr/<address>; Adres portalu zmienia nazwę natychmiast i stare sign- w linki nadal działa, ponieważ stary adres do przodu. /hr na komputerze w miejscu pracy i nie potrzebuje adresu.

4
Publikuj swoją stronę kariery

Otwórz PeopleOS → Rekrutacja. Każde ogłoszenie opublikowane z zatwierdzonej rekwizycji pojawia się na stronie kariery publicznej; link Otwórz stronę karier publicznych na szczycie Rekrutacji pokazuje dokładnie to, co widzi kandydat.

5
Zarejestruj kiosku dla urządzeń współdzielonych

Otwórz PeopleOS→Frontline→Kiosky i wybrać Zarejestruj kiosku. Token urządzenia jest wyświetlany raz; otworzyć stronę kiosku na tablecie lub PC (to jest /kiosk na portalu host) i wkleić go. Ludzie zegarują z ich e-mail pracy i PIN, lub z krótkim żywym kodem odznaki z ich portalu.

6
Decyduj, co pracownicy mogą zrobić dla siebie

Otwórz Ustawienia → HRKażda siła samoobsługi (rejestry, prośby, dokumenty, urlop, wyjaśnienia płatnicze itp.) jest ustawiana dla każdego pracownika, kierownika lub tylko dla jednego zespołu i zespołów pod nim. Każda zmiana rekordów, którzy to zrobili i dlaczego, a moc wyłączona jest wyjaśniana pracownikowi, a nie po cichu brakuje.

7
Dodaj ludzi i daj im dostęp

Włączone PeopleOS → Ludzie stworzyć osobę, ich zatrudnienie i ich menedżera. Udostępnianie portalu dostępu tylko po osobie ma ważną wiadomość e-mail i zamierzony stosunek pracy; zaproszenie wychodzi z tego samego ekranu i na pokładzie zaczyna się od podróży skonfigurowanej.

Cykl życia

Plan i rekrutacja

Tworzenie zatwierdzonych wymagań, publikowanie miejsc pracy, przyjmowanie aplikacji poprzez ponowne-query- bezpieczne haki webhacks, przeglądy struktury, wywiady harmonogramowe, rekordowe decyzje, oferty emisji i wynajem.

Przyłącz się i dostarcz

Budowanie udokumentowanych podróży na pokładzie, zbieranie poprawnej wersji dokumentu, sprzęt do składania wniosków, przyznawanie zatwierdzonych szablonów dostępu i dostęp bez miejsca.

Praca i wzrost

Operacji urlopu, harmonogramów, wyjaśnień wynagrodzenia, świadczeń, wydatków, celów, opinii, recenzji, uczenia się, umiejętności, możliwości wewnętrznych, sukcesji i analizy siły roboczej.

Wsparcie i ochrona

Zapewnienie prywatnego wsparcia w zakresie HR, regulowanie spraw dotyczących stosunków pracy, prawnych grup interesu, wniosków o dane, korekt, wyjaśnień, odwołań i niezależnego przeglądu sytuacji u ludzi.

Zmiana i odejście

Stosowanie skutecznych zmian w zatrudnieniu, cofnięcie dostępu, odzyskanie sprzętu, pogodzenie usługodawców zewnętrznych, stosowanie zatrzymywania i zachowywanie wymaganych dowodów.

Dostęp i tożsamość

Osoba kanoniczna posiada zapisy zatrudnienia i zweryfikowane zewnętrzne aspekty tożsamości. Email jest zmutowalne dane kontaktowe, nigdy stały klucz tożsamości. Portal odczyty są samoskalowe; widoki menedżera i administratora wymagają wyraźnych uprawnień. API skoops warstwa na szczycie praw trasowych i nigdy ich nie omijać.

Dodaj nowego pracownika

Scenariusz:
Stwórz osobę, przydziel zatrudnienie i kierownika, udostępnij dostęp do portalu, a następnie otwórz podróż pokładową.
Co robić:

Użyj suchy-run i idepotencji dla API pisze. Potwierdź, że osoba ma poprawny e-mail i zamierzony stosunek pracy przed wysłaniem dostępu.

Uporządkuj podwójną tożsamość

Scenariusz:
Dwa systemy zewnętrzne w różny sposób identyfikują tego samego pracownika.
Co robić:

Połącz obie zweryfikowane aspekty z osobą kanoniczną i wyraźnie rozwiązać konflikt. Nie łączyć rekordów tylko dlatego, że dwie zmutowane wartości e-mail pasują.

PeopleOS HR

Przepływy pracy w zakresie HR i portal dla pracowników

Jak każdy duży obszar PeopleOS jest obsługiwany i co pracownicy widzą po logowaniu.

Ludzie i organizacja

Utrzymanie osoby kanonicznej, zatrudnienia, rodzaju pracownika, kierownika, zespołu, lokalizacji, umiejętności, dokumentów i efektywnej struktury organizacyjnej.

Rekrutacja i oferty

Przesunięcie z zatwierdzonej rekwizycji na delegowanie, aplikację, ustrukturyzowane dowody, wywiad, decyzję, ofertę i wynajem z noclegów i tras odwoławczych.

Wsiadanie na pokład i dokumenty

Przypisz uporządkowane kroki właściwe dla danego właściciela; zbieraj, przeglądaj, podpisuj, wygasaj, trzymaj i usuwaj dokumenty z wersją i dowodami dostępu.

Czas, urlop i harmonogram

Określ rodzaje urlopów, sald, wniosków, zatwierdzeń, wakacji, dostępności, wydarzeń kalendarzowych i pojednania.

Wynagrodzenie, świadczenia i koszty

Wyjaśnienie kwestii wynagrodzenia, ręcznie zatwierdzanych zdarzeń pracowniczych na potrzeby wynagrodzeń, pogodzenie wyjątków, zarządzanie świadczeniami kwalifikującymi się i regulowanie zwrotów kosztów.

Wydajność i wzrost

Operacja celów, check- ins, opinie, recenzje, kalibracja, nauka, umiejętności, mentoring, możliwości wewnętrzne i sukcesja.

Usługi HR i stosunki z nimi

Zapewnić pracownikom prywatne wsparcie przy jednoczesnym utrzymaniu skarg, dyscypliny, informatora i zapieczętowanych dowodów w specjalnych granicach pozwolenia.

Analiza i planowanie

Wykorzystanie środków siły roboczej, planów zatrudnienia, wskaźników odniesienia i doświadczenia uzyskanych z dokumentacji; nigdy nie uznaje brakujących wyników za sukces.

Mapa portalu dla pracowników

Przegląd

Potrzebuje uwagi, zmian od ostatniej wizyty, otwartych żądań, nadchodzących wydarzeń, postępów na pokładzie i ogłoszeń.

Profil i rejestry

Zatrudnienie, zweryfikowane zapisy, dokumenty, zezwolenia, wnioski o prywatność i wnioski o korektę.

Wsparcie i zadania HR

Prywatne rozmowy, prośby, działania, które wymagają zadań pracowników i firm pokazane oddzielnie.

Twoje pierwsze dni

Oparty na pokładzie z właścicielem, stan, ukończenie i zablokowane pracy.

Czas i wyjazd

Środki, wnioski o urlop, dostępność, harmonogramy i konsekwencje kalendarza.

Umiejętności i wzrost gospodarczy

Nauka, umiejętności, cele, opinie, mentoring i możliwości wewnętrzne.

Moja wypłata, wyjaśniła

Prosta rekompensata językowa i informacje dotyczące godzenia wynagrodzeń, które pracownik może zobaczyć.

Przedsiębiorstwo

Katalog i schemat organizacyjny ograniczony do informacji, które wybrali koledzy lub polityka pozwala im dzielić.

Prawa i decyzje

Wystąpienia o wyjaśnienia, odwołania, zgodę, korektę, dostęp i usunięcie.

💡
Portal jest mobilny- pierwszy. Karta kont pozostaje dostępna, nawigacja i zawartość przewija się niezależnie na szerokich ekranach, a ruchome nakłady nawigacji zamiast naciskać lub pokrywać stronę. Długa kopia wyjaśniająca należy do dostępnych podpowiedzi lub elementów informacyjnych.

Bezpieczna sekwencja działania

1
Konfiguracja polityki i uprawnień

Ustaw jurysdykcję, role, ścieżki zatwierdzania, utrzymanie, zgodę i funkcje kontroli przed załadowaniem na żywo rekordów.

2
Połącz zewnętrznych dostawców

Zainstaluj odpowiedni podpisany pakiet, wprowadź poświadczenia o najmniejszych prawach oraz przepuść testy połączeń i zgodności.

3
Uruchom w piaskownicy lub cieniu

Ćwiczenie pełnych przepływów pracy z danymi determinacyjnymi i porównanie oczekiwanych dowodów przed umożliwieniem realizacji real- provider.

4
Zwolnienie pod podwójną kontrolą

Inny upoważniony recenzent bada dostawców, bezpieczeństwo, prywatność, prawne, uczciwość i dostępność dowodów.

PeopleOS HR

SAI, uczciwość, wideo i kontrole prawne

PeopleOS traktuje automatyzację jako zarządzaną ścieżkę narzędzi: pozwolenie na politykę, próba wykonania, wynik dostawcy i dowód są osobnymi faktami.

Kontrole grypy ptaków i czynnika

Każdy agent używa zarejestrowanych narzędzi wpisanych w celu, jurysdykcji, klasy ryzyka i maksymalnej autonomii. Przejęcie człowieka, wyłączniki obwodów, incydenty i zmiany jurysdykcji zatrzymać wykonanie. Korekty mogą stanowić proponowany zestaw danych, ale trenować nic dopóki inna upoważniona osoba nie zakończy weryfikacji prywatności.

Sprawiedliwość

Określ kohorty, minimalne zasady pobierania próbek, wskaźniki, tożsamość oceniającego i prawnie zwolnioną ocenę. Brak danych pozostaje brakujący; nigdy nie jest przekształcony w przepustkę.

Wyjaśnienia i odwołania

Zbuduj wyjaśnienia z zapieczętowanych decyzji i politycznych dowodów. Wyślij odwołania do niezależnego człowieka i zachować dowody wyniku.

Jurysdykcje

Wydanie polityki kraju pakuje się tylko z nazwiskiem odpowiedzialnego właściciela prawnego, cytowane źródła prawne i przechodzenia testów.

Unijna ustawa o ptasiej grypie

Utrzymanie inwentaryzacji systemu, klasy ryzyka, oceny wpływu na prawa podstawowe, zawiadomień, nadzorców, pomiarów i dowodów.

Granica przesiewowa obrazu

Przepis nie jest udziałem

hr.interview.room.provision tworzy miejsce spotkania. hr.interview.room.connect może udowodnić, że media dotarły do pracownika.

Specjalna zgoda dla celów handlowych

Rejestrowanie, transkrypcja i biometryczność są odrębnymi wyborami. Wycofanie dotyczy wybranego celu.

Brak analizy wyglądu

Kontrakt wideo nie ma pola ani metody na emocje, uwagę, atrakcyjność, wyścig, niepełnosprawność lub wygląd.

Trasy ludzi i teksty

Recenzent może przejąć na stałe sesję, a także dostępna jest ścieżka zakwaterowania tekstowego.

Zatrzymanie i usunięcie

Złącze informuje o zaszyfrowanym transporcie, polityce aktywnego zatrzymywania oraz referencjach medialnych dostawcy i musi wspierać weryfikowalne usuwanie.

Stworzony pokój, brak SI

Scenariusz:
Pomieszczenie zoom URL istnieje, ale most medialny nie dostarczył dźwięku / wideo do pracownika wywiadu.
Co robić:

Pokaż spotkanie jako zapasowe, a uczestnictwo w sztucznej inteligencji jako fałszywe. Zachowaj wywiad z ludźmi i ścieżek tekstowych zakwaterowania dostępne.

Callback mówi, że czek przeszedł.

Scenariusz:
Podpisane podpiski sprawdzają, czy haczyk jest gotowy.
Co robić:

Zapisuj wywołanie jako podpowiedź, a następnie zapytaj dostawcę. Tylko uwierzytelniona odpowiedź stanu może zaktualizować kontrolę.

🚫
Ocena dostępności technicznej może być odnotowana przez oceniającego, ale zaświadczenie WCAG wymaga osobnej osoby. Dowód dostawcy, zwolnienie prawne i dowód sprawiedliwości wymagają również ich prawdziwych właścicieli.
PeopleOS HR

PeopleOS API i rozwój złączy

Użyj General API do zarządzania operacjami HR i umów na wpisywanie złączy dla autorytatywnych systemów zewnętrznych.

Ogólne źródła prawdy API

Wyślij JSON do POST /api/v1.phpOdkryj powierzchnię bieżącą przez meta.actions, OpenAPI at /api/v1/openapi.php, i listonosz w /api/v1/postman.php. Generowany indeks poniżej posiada dokładną liczbę polerowanych hr.* działania i poddane przeglądowi platform.hr.* operacje w tej budowie, więc nic na tej stronie nie jest wpisywane ręcznie.

Lista osób
curl -sS https://your-opsiq.example/api/v1.php \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"action":"hr.people.list","page":1,"per_page":50}'
Dry- uruchom zapis
curl -sS https://your-opsiq.example/api/v1.php \
  -H 'Authorization: Bearer YOUR_API_KEY' \
  -H 'Content-Type: application/json' \
  -d '{"action":"hr.people.create","display_name":"Ada Reaudit","primary_email":"[email protected]","worker_type":"employee","idempotency_key":"hire-2026-0042","dry_run":true}'

Stosowanie hr.read lub hr.write Tylko w razie potrzeby. Trasa docelowa administratora nadal sprawdza swoje własne pozwolenie. Pisze wymagają stabilnego klucza idepotencji; high-risk pisze wymaga potwierdzenia. Retry przejściowe błędy z tym samym kluczem i stan odzyskiwania zapytania po niepewnym czasie.

Każdy kuratowany HR. * akcja

48 curated hr.* actions (22 reads, 26 writes) and 484 reviewed platform.hr.* operations, out of 2418 named actions in this build. Generated from the action registry, the same source as meta.actions, OpenAPI and Postman.

Ludzie, organizacja i tożsamość (9)

hr.employee.provision

Write. Scope: hr.write. Provision seatless employee access and send the invitation. Required: person_uuid.

hr.employee.restore

Write. Scope: hr.write. Lift an employee access suspension (written reason required) and provision again. Required: person_uuid, reason.

hr.identity.facets

Read. Scope: hr.read. List a person's identity facets and open conflicts. Required: person_uuid.

hr.identity.link

Write. Scope: hr.write. Link an identity facet to a person. Required: person_uuid, facet_type, facet_key.

hr.org.tree

Read. Scope: hr.read. Read the organisation tree.

hr.people.create

Write. Scope: hr.write. Create an HR person. Required: display_name.

hr.people.get

Read. Scope: hr.read. Get one HR person. Required: person_uuid.

hr.people.list

Read. Scope: hr.read. List HR people.

hr.people.update

Write. Scope: hr.write. Update an HR person. Required: person_uuid, display_name, primary_email.

Wnioski i oddelegowania (3)

hr.postings.list

Read. Scope: hr.read. List job postings.

hr.requisitions.create

Write. Scope: hr.write. Create a requisition. Required: title, openings, justification.

hr.requisitions.list

Read. Scope: hr.read. List requisitions.

Leave, learning and the connect market (3)

hr.learning.overview

Read. Scope: hr.read. Read courses, paths and enrolments.

hr.leave.overview

Read. Scope: hr.read. Read leave types and requests.

hr.marketplace.overview

Read. Scope: hr.read. Read HR connector accounts, conflicts and deliveries.

Certyfikacja i zdrowie połączeń (2)

hr.connectors.certify

Write. Scope: hr.write. Certify an HR connector (scope sandbox|production; production demands provider-side proof under dual control). Required: connector_class, connector_key, scope, evidence, submitted_by.

hr.connectors.health

Read. Scope: hr.read. One connector account's health: certification level and scope, last reconciliation verdict, failures and webhook backlog. Required: account_uuid.

Pokoje wyjazdowe (7)

hr.booking.slots_reconcile

Write. Scope: hr.write. Release booking slots whose claim never became a booked meeting.

hr.interview.room.connect

Write. Scope: hr.write. Connect the AI to interview media; refuses unless media really reaches the worker. Required: media_uuid.

hr.interview.room.consent

Write. Scope: hr.write. Record or withdraw consent for ONE interview purpose (recording, biometric_liveness, transcription). Required: media_uuid, purpose, state.

hr.interview.room.pause

Write. Scope: hr.write. Pause a live interview. Required: media_uuid.

hr.interview.room.provision

Write. Scope: hr.write. Provision an interview room (a place to meet — NOT AI participation). Required: session_uuid, transport, accommodation_route.

hr.interview.room.state

Read. Scope: hr.read. Read an interview room, including whether the AI is actually participating. Required: media_uuid.

hr.interview.room.takeover

Write. Scope: hr.write. A human takes the interview; the AI cannot speak in it again. Required: media_uuid, reason.

Agenci i pasy ruchu w cyklu życia (7)

hr.agent.incident.close

Write. Scope: hr.write. Close an agent incident — the same act that lifts the suspension it caused. Required: incident_uuid, resolution.

hr.agent.step

Write. Scope: hr.write. Run one agent step: gate verdict, execution and outcome reported separately. Required: run_uuid, agent_key, tool_key, jurisdiction, purpose.

hr.agent.step.status

Read. Scope: hr.read. What actually happened at a step (permitted, executed, proven, failed, compensated). Required: run_uuid, seq.

hr.agent.takeover

Write. Scope: hr.write. A human takes an agent run; no further agent steps are accepted. Required: run_uuid.

hr.agent.tool.grant

Write. Scope: hr.write. Grant an agent a tool for one jurisdiction and purpose, up to a risk ceiling. Required: agent_key, tool_key, jurisdiction, max_risk, purpose.

hr.agent.tools

Read. Scope: hr.read. List the registered typed tools an agent may use, and open agent incidents.

hr.lifecycle.lanes

Read. Scope: hr.read. Every lifecycle lane with its mode, KPIs and whether a live tool path really exists behind it.

Jurysdykcja (5)

hr.jurisdiction.capabilities

Read. Scope: hr.read. What this product may do in one country, per feature, with the law behind each answer. Required: code.

hr.jurisdiction.change.raise

Write. Scope: hr.write. Report a change in the law; a high or critical one suspends every lane in that jurisdiction at once. Required: pack_key, summary, severity.

hr.jurisdiction.coverage

Read. Scope: hr.read. Computed coverage for every market: released pack, named counsel owner, cited sources, passing tests.

hr.jurisdiction.explain

Read. Scope: hr.read. Why an action about one person is allowed, reduced or blocked, with the rule and citation. Required: person_uuid, feature.

hr.jurisdiction.pack.release

Write. Scope: hr.write. Put a drafted policy pack into effect; refused without a named counsel owner and a cited law. Required: release_uuid.

Decyzje i odwołania (2)

hr.decisions.appeals

Write. Scope: hr.write. File an appeal against an AI decision on a person's behalf; it must be heard by an independent human. Required: decision_uuid, subject_type, subject_id, grounds.

hr.decisions.explanation

Read. Scope: hr.read. Plain-language explanation of one AI decision: what was looked at, which policy, and how to appeal. Required: decision_uuid, audience.

Jakość ptasiej grypy (2)

hr.ai.corrections

Write. Scope: hr.write. Bundle recent reviewer corrections into a dataset; it is pending privacy review and trains nothing.

hr.ai.quality.overview

Read. Scope: hr.read. The AI quality board: sampled defect rate, override pressure per workflow, coaching reception.

Rozmowy i retencja siły roboczej (4)

hr.thread.delete

Write. Scope: hr.write. Delete a workforce conversation; refused while it is under legal hold. Required: thread_uuid, reason.

hr.thread.legal_hold

Write. Scope: hr.write. Place or lift a legal hold on a workforce conversation. Required: thread_uuid, on, reason.

hr.thread.retention

Write. Scope: hr.write. Set a conversation's retention class (standard|extended|permanent). Required: thread_uuid, retention_class.

hr.threads.retention_sweep

Write. Scope: hr.write. Run the conversation retention sweep; legal holds are never swept.

Gotowość i zwolnienie (4)

hr.experience.metrics

Read. Scope: hr.read. Measured persona experience metrics (self-service rate, decision cycle, coaching usefulness, quality) from live journeys.

hr.global.readiness

Read. Scope: hr.read. The whole launch picture: 15-gate leadership score, release readiness checks and jurisdiction coverage.

hr.readiness.read

Read. Scope: hr.read. Run the HR release readiness report.

hr.release.verify

Write. Scope: hr.write. Run the four HR release gates (schema, manifest, probe, readiness).

Klasy złącza

Rekrutacja

hr_job_board, hr_background_check, hr_identity_verification, hr_assessment oraz hr_tax_right_to_work.

Wynajem i wsiadanie na pokład

hr_esignature, hr_calendar, hr_video oraz hr_equipment_it.

Operacje siły roboczej

hr_payroll, hr_benefits, hr_learning, hr_expense_payment, hr_directory oraz hr_data_warehouse.

Komunikacja

hr_messaging jest tylko send- only. Umowa nie zawiera metody odczytu wiadomości o zatrudnieniu.

Punkty końcowe Bramy Dostawcy

PeopleOS HR Provider Gateway1.0
GET    /v1/hr/health
POST   /v1/hr/job-postings
PATCH  /v1/hr/job-postings/{provider_ref}
POST   /v1/hr/job-postings/{provider_ref}/close
GET    /v1/hr/job-postings/{provider_ref}
POST   /v1/hr/background-checks
GET    /v1/hr/background-checks/{provider_ref}
POST   /v1/hr/identity-verifications
GET    /v1/hr/identity-verifications/{provider_ref}
DELETE /v1/hr/identity-subjects/{subject_ref}
POST   /v1/hr/payroll/worker-events
GET    /v1/hr/payroll/state?cursor=...
GET    /v1/hr/payroll/exceptions
POST   /v1/hr/equipment/requests
POST   /v1/hr/access/requests
GET    /v1/hr/provisioning/requests/{request_ref}
POST   /v1/hr/provisioning/requests/{request_ref}/revoke

Brama wymaga HTTPS, bloki niebezpieczne / prywatne cele, szpilki zatwierdzone DNS wyniki, następuje bez przekierowania, ogranicza rozmiar odpowiedzi, wymaga JSON, posiada determistic idepotency, i obsługuje timestempled HMAC w obu kierunkach. Haki internetowe są zawsze podpowiedzi, po których następuje ponowne zapytanie dostawcy.

Drzwi przychodzące do haka webowego

Trzy drzwi publiczne otrzymują odgłosy zwrotne od dostawcy: POST /opsiq/ajax_api.php?ajax=hr_connector_webhook (pola connector_class, connector_key, topic), ?ajax=hr_esign_webhook (connector_key, offer_uuid, provider_ref) oraz ?ajax=hr_check_webhook (check_uuid). Każdy weryfikuje ciało przez certyfikowane złącze, spala dostawę tak powtórka umiera, i rejestruje tylko oczekujące ponowne zapytanie; własna odpowiedź dostawcy zmienia rekord. Każda odmowa jest tą samą ogólną odpowiedzią na celu. PeopleOS nie dostarcza żadnych wydarzeń z wychodzących hakiem webhook dzisiaj: webhooks.events.list jest autorytetem i nazwy w hr rodziny, więc ankietować hr.* odczyty lub wykorzystanie hr.connectors.health.

Szczegółowe odniesienia

Kompletny poradnik PeopleOS

Czytaj doc/contracts/PEOPLEOS_HR.md w samodzielnej instalacji dla każdego operatora, API, złącze, haczyk i reguła wydania.

Kontrakt deweloperski Gateway

Pakiet Marketplace zawiera README.md, DEVELOPER.md, connector_contract.json, hr_profile.json i podpisany manifest.

PeopleOS HR

Badania i gotowość do produkcji

Wniosek o uruchomienie jest obliczany na podstawie dowodów. Gotowość pakietu, certyfikat dostawcy, zatwierdzenie prawne, ocena sprawiedliwości i zaświadczenie dostępności są celowo oddzielone.

1
Kod zatwierdzenia i umowy

Uruchom składnię PHP, HR PHPUnit, trasa /APIparzystość, sprawdzanie OpenAPI / Postman, manifest pakietów iJSONWalidacja schematu.

2
Ćwiczenie pełnych przepływów pracy

Rekrutacja testowa, przegląd AI, wywiad / wideo, pokłady, podpisy, urlop, wypłaty, portal, powiadomienia, modele i ścieżki awarii połączeń.

3
Test reagujący i dostępny dla użytkownika

Dysk pulpit, tablet i układ telefonu; klawiatura, focus, etykiety, kontrast, refleks, podpowiedzi, dialogi, przewijanie powiadomień i niezależna nawigacja.

4
Zbieranie dowodów zewnętrznych

Użyj prawdziwych wycieczek i usuwania, uwolnień z polityki prawnej, reprezentatywnych danych o sprawiedliwości oraz niezależnego zaświadczenia WCAG.

5
Zwolnienie pod podwójną kontrolą

Recenzent inny niż składający zatwierdza złącze i wydaje dowody. Revoke lub kill- przełącz złącze, jeśli jego dowód wygasa.

Co oznacza każdy wynik

Podpisano pakiet

Pliki nie uległy zmianie od czasu autoryzowanego podpisu pakietu. Nie udowadnia to, że działa konto trzeciej strony.

Piaskowiec przeszedł

Deterministyczne zachowanie i zmiany stanu są zgodne. Nie dowodzi prawdziwego dostawcy, termin zamieszkania lub usunięcia.

Złącze produkcyjne certyfikowane

Konto w miejscu pracy zostało przejęte przez pięć obowiązków po stronie dostawcy pod podwójną kontrolą.

Sprawozdanie techniczne WCAG

Istnieją dowody zamienne i rzeczowe dla określonych powierzchni. Nie jest to świadectwo drugiej osoby.

Start gotowy

Wszystkie wymagane bramy są zielone w tym samym czasie i nie ma dowodów wygasających, cofniętych, brakujących lub zaprzeczających żywym zdrowiu.

⚠️
Nigdy nie tworzyć przechodzącej legalności, sprawiedliwości, dostawcy lub niezale ¿ne zaświadczenie tylko oczyścić bramę. Nagrać bloker i właściciel zamiast. Widok gotowości jest cenny właśnie dlatego, że odmawia niepopieranych roszczeń.
Dlaczego jest zainstalowany złącze, ale nadal niedostępny?+

Instalacja udowadnia obecność pakietu. Włącz go, oszczędź prawdziwe referencje uprzywilejowania, zdaj test połączenia, a następnie przyznaj pasujący zakres produkcji konta PeopleOS przy użyciu autentycznych dowodów dostawcy i innego recenzenta.

Dlaczego haczyk nie zmienił rekordu?+

Odwołanie może być ważne, ale tylko podpowiedź. Sprawdź skrzynkę odbiorczą haka, punkt końcowy statusu dostawcy i wynik pojednania. PeopleOS zmienia stan autorytatywny dopiero po ponownym zapytania.

Gdzie jest kompletny czytnik do maszyn HR API?+

Wywołaj meta.actions i filtr dla hr. i platform.hr; lub użyj/api/v1/openapi.phporaz/api/v1/postman.php.Są one generowane z tego samego rejestru runtime.

Wsparcie

Centrum pomocy

Twój Ośrodek Pomocy jest samoobsługą strony pomocy zbudowany z artykułów, które publikuje. Klienci mogą przeczytać i przeszukać go na swojej stronie publicznej, a w prawo wewnątrz widget czatu, więc mogą znaleźć odpowiedzi na własne zanim kiedykolwiek otworzyć rozmowę. Wszystko w nim pochodzi z bazy wiedzy, tak samo ta sama zawartość, która uzasadnia swoją AI również daje Ci pomoc publiczną.

Gdzie widzą to twoi klienci

Jego własna strona publiczna

Czysta, przeszukująca strona pomocy w /help.php. Klienci przeglądają według kategorii, wyszukiwania i otwierają każdy artykuł. Możesz dać mu swoje własne imię i styl.

Wnętrze widget czatu

Pomoc link w widget czatu, aby klienci mogli przeszukiwać artykuły bez opuszczania czatu. Jeśli nadal potrzebują osoby, są one jednym dotknięciem od rozpoczęcia rozmowy.

Włącz to.

1
Otwórz stronę Centrum pomocy

Idź do Config, then Help Center w admin i włączyć Włącz publiczne centrum pomocy.

2
Daj mu imię i spojrzenie

Ustaw nazwę Centrum Pomocy, która pokazuje się w nagłówku i zakładce przeglądarki, i wybierz styl wizualny. Możesz wyłączyć górną nawigację dla czystej strony bez menu.

3
Opublikuj kilka artykułów

Nic nie widać, dopóki nie opublikujesz artykułów.

Publikuj artykuły do Centrum Pomocy

Artykuły mieszkają w bazie wiedzy. Artykuł pojawia się w Centrum Pomocy po jego opublikowaniu i oznakowaniu publicznym. Istnieje kilka sposobów, aby to zrobić:

Opublikuj jeden artykuł

Otwórz artykuł, oznacz go opublikowanym i włącz opcję wyświetlania go w Centrum Pomocy.

Opublikuj wszystko naraz

Użyj Opublikuj wszystkie przycisk, aby wcisnąć cały opublikowany zestaw do Centrum Pomocy za jednym kliknięciem, zamiast robić je jeden na raz.

Przekształcić FAQ w artykuły

Masz już pytania? Opublikuj wszystko, aby pomóc Aby zamienić je w artykuły pomocnicze, by siedziały obok wszystkiego innego.

Importuj istniejącą bazę wiedzy

- Przeniesienie z innego biura pomocy? Importuj KB przycisk w zakładce Artykuły wprowadza istniejącą bazę wiedzy dla Ciebie. Masz trzy sposoby, aby wskazać ją na treści:

Wklej URL

Jeśli rozpoznaje platformę (na przykład Zendesk), odczytuje dokładną kategorię drzewa z tej platformy. W przeciwnym razie przeczołga się ona po stronie i odbuduje strukturę ze stron, importując tylko prawdziwe artykuły i pomijając login, ceny i strony kontaktowe.

Wybierz podłączoną aplikację

Jeśli platforma jest już podłączona do tego obszaru roboczego i posiada bazę wiedzy, pojawia się w dół pod Importuj z podłączonej aplikacji. Wybierz go i import, nie URL potrzebne lub hasło. Aplikacja jest wyświetlona tylko po podłączeniu i konfiguracji.

Wyślij CSV

Nie ma strony na żywo do wskazania? Wyślij arkusz kalkulacyjny z title, category, oraz body kolumny. Umieść Parent / Child w kolumnie kategorii do budowy zagnieżdżonych kategorii.

Jak tylko wybierzesz, dostaniesz podgląd pierwszy: artykuły, które znalazł, pogrupowane według kategorii, każdy z pola wyboru, dzięki czemu można upuścić wszystko, czego nie chcesz. Nic nie jest zapisane dopóki nie klikniesz Importuj. Następnie możesz Cofnij cały import za jednym kliknięciem, lub Resynchronizacja URL lub importowane z aplikacją podłączoną, aby później wyciągnąć nowe i zmienione artykuły.

💡
Deweloperzy: każde złącze może reklamować swoją bazę wiedzy do tego zrzutu poprzez ogłoszenie kb_capabilities blok w jego settings.json (typ kb_source, z adapter oraz base_template) Patrz sekcja Złącza i odniesienie do złącza platformowego.

Organizacja z SI

Czyste centrum pomocy jest łatwy do przeglądania i łatwiejsze do wyszukiwania. Organizacja z SI przycisk czyści dla Ciebie. Za jednym kliknięciem odczytuje Twoje opublikowane artykuły, sortuje je na rozsądne kategorie i dodaje tagi. Tworzy kategorię, kiedy jej potrzebuje, ponownie używa kategorii, która już pasuje, i pomija wszystko, co już zorganizowałeś, więc możesz uruchomić ją ponownie w każdej chwili, gdy dodasz nowe artykuły. Włącz Niech AI zorganizuje się w podkategoriach w ustawieniach Help Center i może również tworzyć wiadomości pod zagnieżdżonym Parent / Child kategorie, które są przydatne tuż po przywozie bazy wiedzy, która miała podsekcje.

💡
Kategorie dają klientom sposób przeglądania, a tagi wyostrzyć wyszukiwania na stronie publicznej i w widżecie. Możesz zmienić nazwę lub przenieść rzeczy po. AI daje silny punkt wyjścia, a nie ustawienie utknąłeś z.

Centrum pomocy wewnątrz widżetu czatu

Możesz pokazać Centrum Pomocy w obrębie widżetu czatu, aby ludzie wyszukali odpowiedzi przed wysłaniem wiadomości. W ustawieniach widgetu czatów wybierz gdzie pojawi się link pomocy:

W nagłówku

Mała ikona pomocy na szczycie widżetu.

Na dole

Link tekstowy pod pole wiadomości, na przykład "Przeglądaj centrum pomocy". Możesz zmienić brzmienie.

Oba miejsca

Pokaż go w nagłówku i na dole, aby uzyskać największą widoczność.

Link pomocy posiada własną kontrolę kolorów pod ustawieniami widget Wygląd. Brak dopasować kolor wyrzutni, lub wybrać Stałe kolor lub Gradient. Całe doświadczenie pomocy następuje twój motyw widget, więc zawsze wygląda jak część marki.

Umieść swoje centrum pomocy na swoim własnym adresie internetowym

Z pola Twoje centrum pomocy ma już czysty, dostępny adres własny (na przykład /help/your-help-center). Możesz przejść o krok dalej i służyć go pod własna domena, więc klienci i wyszukiwarki widzą to jako część marki, na przykład yourdomain.com/help lub help.yourdomain.com. Wszystko działa na domenę: linki, obrazy, wyszukiwanie i oceny artykułów.

Pod głównym adresem

W Konfiguracja, następnie Centrum pomocy, otworzyć Zaszyte tab i znaleźć "Pokaż swoje centrum pomocy na swoim własnym adresie internetowym". Wybierz konfigurację (Cloudflare, Nginx lub Apache), skopiuj gotowy blok i wklej go na swojej stronie. Każda opcja ma Przewodnik konfiguracji przycisk obok niego z dokładnymi krokami.

Na poddomenie

Prefer help.yourdomain.com? Ten sam panel ma opcję poddomen. Na Cloudflare subdomena jest najbardziej niezawodną drogą, i daje czysty adres bez niczego po nim.

💡
Stosowanie Cloudflare To działa tylko na adres, który jest proxied przez Cloudflare(pomarańczowa chmura). Twoja główna domena często wskazuje prosto na swojej stronie internetowej, więc reguła umieszczona na głównej domenie nie może po cichu nic nie robić. help.yourdomain.com. Przewodnik Setup prowadzi przez jeden rekord DNS i trasy.
Dobrze dla SEO. Gdy twoje centrum pomocy jest na własnej domeny, wyszukiwarki indeksują artykuły pod marką. Każda strona deklaruje swój poprawny adres i lista stron zawiera je, więc ten sam artykuł nigdy nie jest dwukrotnie zindeksowany.
💡
Korzystanie z linka pomocy in- widget? W ustawieniach widget czatu "Otwórz w centrum pomocy", ustawić Gdzie jest link do Twoja własna domena centrum pomocy i wprowadzić ten sam adres. Następnie te linki wiadomości otwarte na domenę, jak również nie na adres OpsIQ.

Zobacz, jak radzi sobie twój cały ośrodek pomocy.

Poza głosowaniem w jednym artykule, Centrum Pomocy ma swoje własne analityka. Włącz go w ustawieniach Help Center i po cichu zapisuje jak ludzie korzystają z Twojej pomocy: najczęściej oglądane wiadomości, czego szukają, i wyszukiwanie które wróciły puste (lista gotowych do zapisu), pracując na kraj odwiedzających i urządzenie samodzielnie, więc nie potrzebuje widget czatu zainstalowany do zgłoszenia. oba miejsca, gdzie pojawia się pomoc, strona publiczna i in- widget pomocy, jak również połączone, więc można zobaczyć, jak bardzo każdy z nich jest rzeczywiście używany.

💡
Analitycy pozostają wyłączeni do czasu, aż włączysz go i będziesz mógł mieć anonimowe adresy gości IP. Nic nie jest rejestrowane przed optem.

Wybierz to, co pojawia się na każdej części strony

Każda sekcja Centrum Pomocy (kategorie na stronie głównej, popularne artykuły, lista artykułów na stronie kategorii i więcej) ma swoją prostą zasadę. Dla każdego z nich możesz pokazać lub ukryć go, i pokazać wszystkie przedmioty, a ustawiona liczba, the najnowszylub tylko te, które ty funkcja z gwiazdą. Kiedy zasada zamyka listę, klienci nadal otrzymują link "Pokaż wszystko", więc nic nie jest naprawdę poza zasięgiem.

Decydujesz również, jak pomocne głosy wyglądają: ukryte, przyjazny stosunek jak "12 z 14 Znalazłem to pomocne, "lub proste kciuki się liczy. Minimalne ustawienie głosów zatrzymuje brand- nowy artykuł pokazujący niezręczny"0z0".

Zobacz, które artykuły działają

Każdy artykuł pokazuje Czy to było pomocne? prompl. Każde tak lub nie jest liczone na artykuł, więc można zobaczyć w skrócie, które artykuły odpowiadają na pytania dobrze i które z nich wymagają przepisania. Powtarzane głosy od tego samego gościa są ignorowane, więc liczniki pozostają uczciwe.

Tekst i etykiety

Możesz zmienić nagłówki i etykiety w Centrum Pomocy, aby dopasować swój głos. Zostaw puste pole i wraca do rozsądnego domyślnego, więc tylko edytować sformułowania chcesz zmienić.

Centrum Pomocy dzieli jedną bibliotekę z twoją AI. Każdy artykuł, który tutaj opublikujesz, jest tą samą treścią, którą AI używa do odpowiedzi na rozmowy i bilety, więc ulepszanie jednej poprawia drugą.

Wspólne pytania

Czy muszę pisać osobne treści dla Centrum Pomocy?+

Nie. Jest zbudowany z tych samych artykułów opartych na wiedzy, których już używa AI. Opublikuj artykuł raz i może służyć obu.

Mogę zachować jakieś artykuły w środku?+

Tak, tylko artykuły, które publikujesz i oznaczasz są w Centrum Pomocy.

Czy klienci będą nadal w stanie dotrzeć do osoby?+

Tak, połączenie pomocy widżetu nie pozwala na rozpoczęcie rozmowy, więc samoobsługa nigdy nikogo nie usidliła.

Wzrost i SEO

Wywiad terenu (apartament SEO)

Wywiad jest OpsIQ built- w SEO i search- widoczność apartament. Przepełza się na Twojej stronie jak wyszukiwarka, utwory gdzie rangi, badania słów kluczowych, zegarki wstecznych linków i konkurentów, skanuje swoją obecność lokalnej mapy, sprawdza szybkość strony, i zmienia to wszystko w raporty dla klientów gotowych, z analitykiem AI, który wyjaśnia co naprawić i może przygotować poprawki. Jest to cechą premium; gdy włączone pojawia się jako Intelligence Site w sidebar. Każda domena danych pozostaje oddzielna, czołga się, Ranking i raportów nigdy nie mieszać między domeny.

Wywiad terenu
Deska rozdzielcza Wywiadu StronyDeska rozdzielcza SEO pokazująca wynik w zakresie zdrowia, śledzenia rankingu słów kluczowych i trendu ruchu.Wywiad terenuyoursite.com86ZDROWIE SITE3 kwestie krytyczneŚledzenie rankingu słów kluczowychii helpdesk#3Czat na żywo#7crm dla agencji#12Kliknięcia organiczne1CRAWLWybiera kwestie techniczne2ŚcieżkaRankingi, słowa kluczowe, backlinki3ANALIST AIWyjaśnia i szkicuje poprawki
Przegląd wywiadu: wynik z najnowszego czołgu, śledzenia na żywo słowo kluczowe rank, tendencja organiczny kliknięcia i pętla trzech kroków: crawl, śledzić, niech AI szkic poprawek.

Uzyskanie wywiadu terenu

Wywiad jest częścią planów, które go niosą. Na planie, który nie działa, działa dokładnie jak PeopleOS HR: właściciel konta otwiera Konto → Add- ons & Token, wybiera poziom wywiadu witryny i rozpoczyna się wolny proces lub dodaje go bezpośrednio. Wolny plan, lub płatny plan nadal wewnątrz własnego planu procesu, nie może go dodać. Dopóki jest własnością pakiet jest ukryty z bocznej tablicy i bezpośredni link oferuje add- on; kiedy czapka poziomu jest osiągnięta strona oferuje następny poziom; gdy próba kończy bez zakupu uprawnienia jest usunięty i nic nie jest opłata. Strona cenowa.

Uruchom czołganie · start tutaj

Lower jest OpsIQ odwiedzając strony w sposób wyszukiwarka będzie, aby znaleźć problemy techniczne: złamane linki, brakujące tytuły, cienkie treści, wolne strony, indeksowanie problemów.

1
Zacznij się czołgać.

Na stronie Przegląd, kliknij, aby rozpocząć czołganie. OpsIQ kolejki to i działa przez strony w tle; wskaźnik stanu pokazuje postęp.

2
Przeczytaj raporty

Po zakończeniu, otwórz problemy i listę stron. Każdy problem jest zgrupowany według dotkliwości, więc najpierw trzeba zmierzyć się z największymi wygranymi.

3
Niech AI pomoże.

Analityk AI produkuje zwykłe informacje o tym, co jest złe i dlaczego to ma znaczenie, i może wygenerować sugerowane poprawki przeglądać przed zastosowaniem.

Co śledzi Wywiad witryny

Raki i zdrowie na miejscu

Skanuje strony do technicznych problemów SEO i wymienia każdą stronę z jej problemami. Uruchom ponownie w każdej chwili, lub zaplanować go.

Namierzanie rankingów

Dodaj słowa kluczowe, na których Ci zależy; OpsIQ sprawdza gdzie Twoja strona rangi i śledzenia ruchu w czasie.

Badania słów kluczowych

Odkryj nowe pomysły na słowa kluczowe, aby wycelować, z autokarem słów kluczowych AI pomóc priorytetowo.

Backlinki

Zobacz, kto łączy się z Tobą, odśwież listę i wyparcie linki nie chcesz związane z witryny.

Konkurenci

Dodaj domeny rywali i porównaj swoją widoczność z ich, z analizą konkurenta SI.

Lokalna (mapa) siatka

Skanuj widoczność na mapie, aby zobaczyć gdzie się pojawisz, plus narzędzia profilu biznesowego Google.

Prędkość strony

Uruchom speed check, aby naprawić wolne strony, które krzywdzą rankingi i konwersje.

Zawartość ptasiej grypy

Generuj treści i szkice ukierunkowane na słowa kluczowe, które są celem.

Sprawozdania

Buduj wydrukowane, gotowe do obsługi raporty o wszystkim powyżej.

Połącz Google dla dokładnych danych

Dwa złącza Google zmieniają szacunki w liczby rzeczywiste:

Konsola wyszukiwania Google

Szukaj

Wyciągnij dokładne pytania, kliknięcia i wrażenia Raporty Google dla witryny, mapy swojej nieruchomości i możliwości rankingu powierzchni bezpośrednio z własnych danych Google.

Google Analytics 4

Ruch

Wprowadź dane dotyczące ruchu i zaangażowania obok danych SEO, tak aby raporty wykazywały widoczność i zachowanie razem.

Raporty o planowanych odświeżeniach i etykietach białych

Nie trzeba uruchomić wszystko ręcznie. Zaplanowane odświeżenia ponownie uruchomić crawls, kontrole rangi, kontroli słów kluczowych, Backlink odświeżenia, skanowanie sieci lokalnej i raportowania generacji na kadencji (codziennie lub co tydzień w zależności od planu i objętości). Przechodzą one przez OpsIQ cron, patrz sekcja Cron i automatyzacji. Generowane raporty eksportowe jako wydrukowane, Klient-gotowe dokumenty: agencje wysyłają każdemu klientowi regularną aktualizację SEO, a ponieważ dane każdej domeny są oddzielone, każdy klient tylko widzi swoje własne.

Niektóre funkcje Wywiadu witryny wywołaj zewnętrznych dostawców danych i AI poprzez OpsIQ jest skonfigurowanym dostawcą. Pracują one z pola, gdy apartament jest włączony dla Twojego planu. Jeśli odświeżanie nie działa, potwierdzić OpsIQ cron działa (patrz Cron i automatyzacja).
Czy muszę coś dodać do mojej strony SEO śledzenia?+

Crawls, śledzenia rangi, badań słów kluczowych i back linków działa bez dotykania witryny. Dla ruchu i dokładne dane wyszukiwania, połączyć Google Search Console i GA4.

Czy mogę wyśledzić więcej niż jedną domenę?+

Tak. Dodawać każdą domenę oddzielnie; ich czołgi, rankingi i raporty pozostają całkowicie odizolowane od siebie.

Jak często mam się czołgać?+

Tygodniowy jest dużo dla większości stron; czołgać się na żądanie po dużej zawartości lub zmiany struktury. Ustaw harmonogram, aby nigdy nie zapomnieć.

Wzrost i SEO

Autoimplementacja (agent SEO)

Auto- Wdrożenie jest częścią Site Intelligence, która faktycznie stosuje poprawki crawl i AI analityk poleca, zamiast tylko doradzać. Agent działa ściśle z tego, co już znaleziono Site Intelligence (nigdy nie może wymyślić zmiany) i chodzi każdy fix przez tę samą bezpieczną pętlę: podgląd suchy-run, Per- step aprobatę, na żywo napisz, automatyczny migawka, i ponowny rałbuś, który dowodzi, że liczba open- issue spadła. Jest to funkcja Managed- AI- only; wydaje się jak działanie Autoimplementation (rakieta) wewnątrz sekcji Site intelligency, i jest wyłączona dopóki go włączyć.

Autoimplementacja
Automatycznie wdrażać SEOPrzepływ pokazujący zalecane SEO poprawki poruszające się przez podgląd, aprobata i zapis na żywo, z prowe- to recrawl.Autoimplementacjayoursite.comZalecane poprawkiAdd missing <title>zatwierdzonoPoprawia robot. txtzatwierdzonoPrześlij sitemap.xmlprzeglądPRZEGLĄD DRY- RUN (DIFF)+ <title>AI Helpdesk - OpsIQ</title>+ <meta name=description ...>- <title>Home</title>ZatwierdzeniePomińPROVE IT - RE- CRAWLEmisje otwarte 124Zapisane migawki1PRZEGLĄDZróżnicowanie przebiegu suszenia każdej poprawki2APROVE & WRITESSH lub host API3PROVE & ROLLBACKPonowne wypełnienie + migawka
Jak przebiega sesja: agent zawiera listę poprawek, które już zalecono w Wywiadzie Strony, pokazuje diff suchy z każdego, stosuje te, które zatwierdzasz SSH lub host API, migawki przed każdym napisaniem, i ponownie-pełza, aby udowodnić spadek liczby open- wydania.

Co to może zmienić?

Agent stosuje tylko poprawki, które już rekomendowano dla tej domeny w ramach obsługiwanych platform, obejmujące:

Konfiguracja serwera

sitemap.xml, robots. txt i przekierowanie, kanoniczne i nagłówek w języku accordance (Apache / LiteSpeed) lub konfig nginx.

Łańcuchy przekierowane

Zapada wielopoziomowy łańcuch przekierowywany do jednego hop prosto do finału URL, wewnątrz tego samego zarządzanego bloku dostępu, więc prędkość i wartość łącza przestają przeciekać przez dodatkowy chmiel.

Page <head>

Brak lub słabe tytuły stron, opisy meta, znaczniki kanoniczne i bloki structured- data (schemat).

WordPress SEO

Yoast, Rank Matematyka i SEOPress tytuły & meta, i obraz alt tekst, stosowane przez WP- CLI na SSH ścieżka lub REST API na ścieżce hostingu.

WordPress dane strukturyzowane

Dodaje JSON-LD (schemat) do stron, które go brakuje. SSH ścieżka mały zarządzany helper (plugin must-use) drukuje markup tak, że działa z lub bez wtyczki SEO; na hostowanej ścieżce Twój wtyczka SEO niesie go.

Wewnętrzne powiązania

Dodaje jeden odnośny wewnętrzny link wewnątrz istniejącej zawartości WordPress, aby uratować strony osierocone i połączyć powiązane posty. Jeden link na stronę, nigdy w nagłówku, istniejący link lub skrócony kod, i zawsze zatwierdzony przez Ciebie pierwszy.

Thyn- page content rewrits

Projekt zawiera pełną zawartość zastępczą dla cienkich stron (włączoną przez opcję pełzania, patrz poniżej). Każdy projekt jest przeglądany i zatwierdzany przez Ciebie przed publikacją, a stara treść jest przechowywana, aby można było ją przywrócić.

Pamięć podręczna strony (WordPress)

Włącza buforowanie strony W3 Total Cache, gdy czołg znajdzie problemy z prędkością i wtyczka jest zainstalowana, więc strony służą szybciej.

Shopify SEO

Produkty i kolekcja tytuły i opisy SEO, strony i blog- artykuł SEO plus 301 przekierowuje, poprzez Shopify Admin API.

Webflow SEO

Per- strona SEO tytuł i opis meta poprzez Webflow Dane API v2.

Automatyczne przygotowanie poprawek (dwie opcje czołgania)

Panel Inteligentny Strona Konfiguracja domeny (jego ustawienia pełzania) ma dwie opcje, które decydują, jak wiele agent linii dla Ciebie przed czasem. Oba są domyślnie wyłączone i oba używać AI kredytu, więc można je włączyć tylko wtedy, gdy chcesz, aby praca wykonana dla Ciebie.

Auto- przygotować poprawki AI po każdym pełzaniu

Każdy czołg pisze również zawartość betonu fix (tytuły, metaopisy, alt tekst, schemat, przekierowanie) dla tego, co znalazł, więc poprawki są gotowe do przeglądu i zastosowania chwili pełzania kończy się zamiast być generowane później na żądanie. Używa AI kredyt na każdym crawl.

Zawartość SI przepisywana (cienkie strony)

Agent może sporządzić pełne zastępcze treści dla cienkich stron. Nic nigdy nie jest publikowane na własną rękę: każdy projekt pojawia się jako zmiana przeglądasz obok siebie i zatwierdzasz lub odrzucasz, poprzednia zawartość jest przechowywana więc jest odwracalna, i jest ograniczona do kilku stron za przełęcz. Używa AI kredyt za szkic.

💡
Obie opcje tylko przygotować i projekt pracy. Każda zmiana nadal przechodzi przez tę samą aprobatę perostep, migawki i rollback jak każdy inny fix, więc włączanie ich nigdy nie stawia coś na żywo sam.

Dwa sposoby, że łączy

SSH / SFTP ścieżka

Self- managed

Dla stron na własnym serwerze, agent łączy się przez SSH/SFTP za pomocą referencji, które przechowujesz, edytuje bezpośrednio pliki konfiguracyjne serwera i strony oraz uruchamia WP- CLI dla WordPress. Najlepiej, gdy masz dostęp powłoki i chcesz pełną kontrolę nad plikami.

Hosted-API ścieżka (nie SSH)

Brak skorupy

Dla platform, które nie pozwalają SSH, agent działa całkowicie przez urzędnika API złącze, WordPress (REST + Password aplikacji), Webflow (Dane API v2) oraz Shopify (Admin API). Nic nie jest zainstalowane na gospodarzu.

💡
Wix i Squarespace nie mają publicznego SEO-write API, więc na tych platformach Autoimplementation działa w trybie doradczym: pokazuje dokładną zmianę do wykonania (dokładny tytuł, meta lub ustawienie) dla Ciebie do stosowania ręcznie. Wszystko inne jest tylko read- i bezpieczne.

Włącz złącza

Środek dociera do każdej platformy poprzez złącze:

Wbudowany

Shopify oraz WordPress złącza statku z OpsIQ, po prostu włączyć je pod Connectors i dodać referencje sklepu / witryny.

Z Marketplace

Webflow, Wix i Squarespace zainstalować od Connectors → Marketplace, a następnie połączyć w ten sam sposób.

Jak przebiega sesja

1
Wybierz poprawki

Otwórz Autoimplementację (rakieta) z sekcji Wywiadu Strony. Wymienia on problemy Wywiad Strony już odkrył, że może naprawić na tej dziedzinie.

2
Podgląd każdej zmiany

Dla każdej poprawki agent pokazuje diff suchy (dokładnie co będzie pisać) zanim cokolwiek dotknie strony na żywo.

3
Zatwierdzenie krok po kroku

Zaakceptujesz (lub pomiń) każdą zmianę indywidualnie. Nic nie jest stosowane bez wyraźnego go- przodu na tym etapie.

4
Pisze, a potem migawki

Po zatwierdzeniu agent dokonuje zmiany na żywo SSH lub host API i zapisuje najpierw migawkę, więc każda zmiana może być cofnięta.

5
Udowodnij to, na żywo.

Jak stosuje się każdą zmianę agent natychmiast ponownie sprawdza, że dokładna strona i pokazuje perostep "stałe live" werdykt, więc można oglądać każdy naprawić ziemię na stronie na żywo, jak to się dzieje. Na koniec ponownie przeczołga się całą stronę i potwierdza open- numer emisji spadła.

Bezpieczeństwo i rozliczanie

Tylko SEO-

Agent może robić tylko to, co w tej dziedzinie zaleca wywiad witryny. Nie może dokonywać arbitralnych zmian na swojej stronie lub serwerze.

Homologacja typu "Per- step"

Każdy zapis jest postrzegany jako różnica i stosowany dopiero po zatwierdzeniu tego konkretnego kroku.

& Rollback do mycia

Przed każdym zapisem zapisywane jest migawka, więc każda zmiana może być odwrócona.

Żywe zabezpieczenie przed krokami

Każda zmieniona strona jest ponownie sprawdzona w momencie, gdy zostanie napisana i otrzymuje "stały werdykt na żywo", więc fix jest potwierdzony przeciwko stronie na żywo od razu, nie tylko w zamknięciu recrawl.

Zawartość nigdy nie jest autopublikowana

Wewnętrzne linki i przepisywania zawartości cienkowarstwowych stron są bardziej efektowne- efekt, więc zawsze są one wyświetlane do zatwierdzenia i nigdy nie są stosowane automatycznie, w dowolnym trybie uruchomiony.

Tylko zarządzanie- AI

Autoimplementacja działa na zarządzanej AI; jest zablokowana, gdy przestrzeń robocza używa własnych kluczy (BYOK).

Rachunek

AI tokens Bill normalnie, jak ich używać, plus jedna płaska opłata za korzystanie z sesji Autoimplementation, oba pobrane z tego samego Managed-AI kredytu.

Autoimplementacja domyślnie wyłączona. Włącz ją na stronie konfiguracji AI (Karta Autoimprementowania) i upewnij się, że złącze dla platformy jest najpierw podłączone.
Czy to coś zmienia bez pytania?+

Nie. Każda zmiana jest postrzegana jako diff suchy i stosowana tylko po zatwierdzeniu tego dokładnego kroku. Zrzut ekranu jest zapisywany przed każdym zapisem, więc można się cofnąć.

Czy potrzebuję dostępu do SSH?+

Nie WordPress, Shopify lub Webflow To działa przez ich oficjalny APIs bez dostępu do skorupy. SSH jest tylko jedną z dwóch ścieżek, używanych, gdy chcesz aby agent edytował konfigurację serwera i pliki bezpośrednio na swoim własnym serwerze.

Skąd mam wiedzieć, że zadziałało?+

Po zastosowaniu zatwierdzonych poprawek agent ponownie-czołga się na stronie i pokazuje open- numer emisji przed i po, więc można potwierdzić poprawki zmniejszyła problemy.

Czy będzie on samodzielnie przepisywał lub publikował zawartość strony?+

Nie. Zawartość SI przepisywania są wyłączone, dopóki nie włączysz ich w opcji pełzania, są one ograniczone do kilku cienkich stron na przepuście, a każdy projekt jest wyświetlany dla aprobaty bocznej-by- side zanim cokolwiek opublikuje. Poprzednia zawartość jest przechowywana, więc można zawsze zmienić.

Mogę go użyć z moimi własnymi kluczami do sztucznej inteligencji?+

Nie. Autoimplementacja jest zarządzana - tylko AI i jest zablokowana pod BYOK. To rachunki AI żetony normalnie plus jedna płaska opłata za przeróbkę na sesję, z tego samego Managed-AI kredytu.

Wzrost i zaangażowanie

Studio ankietowe

Survey Studio to przestrzeń robocza do tworzenia edytowalnych ankiet, które mogą być dostarczone jako bogata strona samodzielna, widget strony internetowej lub inline embed. Aktualny produkt zapewnia również linki hostingowe, podpisane projekty previews, prywatne zaproszenia, QR udostępniania, przeglądanie odpowiedzi i analizy geodezyjnej. Widget stronie jest jednym wyborem dostawy; nie jest to definicja badania.

⚠️
Granica celownika- versus-target: premium tworzenia i podglądu doświadczenia, Connector Builder survey możliwość, i Surveyown-owned rejestru / granic zdrowia dostawcy są dostępne teraz. Survey Studio nadal potrzebuje niezależnej architektury wielofunkcyjnej, signed- token Survey Identity Gateway, celownik / zmienny okablowanie, CRM Outreach wysłać przepływ i wpisane surveys.* API.

Utwórz ankietę

1
Wybierz jak ludzie to przyjmą

Obecny asystent oferuje stronę & link Standalone, Widget strony i Inline embed. Zatwierdzony przepływ docelowy rozpoczyna się od typu badania, a następnie dodaje e-mail CRM, private- link i QR wdrożeń jako wybór pierwszej klasy.

2
Wybierz cel

Wybierz NPS, CSAT, CES, produkt sprzężenia zwrotnego, post-zakup, anulowanie, onboarding, strona internetowa, wydarzenie, webinar, wsparcie, prowadzenie / demo, próby, świadectwa, badania, pracownik, przyjmowanie lub ogólne informacje zwrotne.

3
Użyj pełnego szablonu lub zacznij puste

Bieżący katalog ma gotowy edytowalny start pogrupowany według celu. Wybór szablonu tworzy skopiowany projekt: zmiana ankiety nie zmienia startera lub innego badania.

4
Dostosuj lub Szybka recenzja

Dostosuj otwiera każde pytanie, projekt, zachowanie i kontrolę dostawy. Szybka recenzja otwiera ten sam szkic na ostatecznym sprawdzanie widoku klienta. Nic nie publikuje lub wysyła automatycznie.

Wybór dostawy i obecne zachowanie

& Linka do strony standualoneName

Responsywna strona markowa z własnym URL. Korzystaj z prywatnych zaproszeń i wygaśnięcia, gdy każdy odbiorca potrzebuje kontrolowanego łącza.

Widget strony internetowej

Migrował kanał spuścizny. Może on korzystać z strony, geografii, urządzenia, odwiedzający, data, pobieranie próbek, ochłodzenie, odwiedziny i zasady kwot. Jest nadal wspierany przez dotychczasowy aktywistyczny most widget podczas budowy architektury rozmieszczenia.

Wnętrze osadzone

Responsyjna ankieta umieszczona wewnątrz strony, portalu, produktu lub centrum pomocy. Nie wymaga to Studio Promocji.

E-mail

Studio może dziś wygenerować zaproszenie HTML i prywatne linki. End- to- end wysyłanie z kontaktów / segmentów CRM, za zgodą, tłumienie, harmonogramowanie, ponowna próba i korelacja odpowiedzi, jest zatwierdzonym celem integracji zasięgu CRM- do- endu.

Projektowanie i podgląd przedsiębiorstwa

Strony ankietowe posiadają motywy i rodziny z parasolem, sterowane responsywnie, kopię powitalną i uzupełniającą oraz podpisany podgląd projektu. Podgląd projektantów jest pełnometrażowy poniżej edytora, a nie wąska szyna boczna. Wykorzystuje on prawdziwy hostingowy runtime w ramce z piaskownicą i obsługuje pulpit, tablet i szerokości telefonu; ruch podglądu nie pisze odpowiedzi ani analizy.

💡
Studio badawcze jest niezależne od studia promocyjnego. Cel, tożsamość, aktywa, renderowanie i analityka muszą być własnością Survey. Zawartość promocji może być ponownie wykorzystana tylko poprzez jednokrotną kopię / import, która tworzy dane z badania oddzielnego; późniejsze edycje promocyjne nie mogą mieć żadnego wpływu.

Produkt w pełnej postaci

Niezależne wdrażanie

Żywe

Jedno badanie może mieć odrębną wersję strony, widget, embed, CRM e-mail, private- link i QR wdrożeń, każdy z własnym stanem, projektowanie, publiczność i analityka. Każde badanie może być wstrzymane, wyłączone lub usunięte.

Działania i kampanie CRM

Żywe

Zbuduj zweryfikowaną publiczność z segmentów CRM i złącza do badań, zamrozić ją w niezmienną wersję, wydać jedno podpisane zaproszenie każdy, i wysłać przez przymocowane wychodzące złącze e-mail z per- zaproszenia dowód dostawy.

Zestaw i walidacja pola

Żywe

Suwaki, wybór obrazu, wysyłanie plików, podpis, adres, telefon, nagłówki i tekst bogaty, z min / max długości, e-mail /URL/ zakładki numeryczne, niestandardowy tekst błędu i przedpełnienie pytań URL parametry.

Logika, formuły, wyniki

Żywe

I / OR grupy stanu, zasady oddziału, bezpieczny silnik formuły nad odpowiedziami i zespoły punktów, które noszą własną stronę wyniku: wynik quizu ląduje na jego werdykt.

Język, kiosku, prefill

Żywe

Język odwiedzający wyświetla tylko języki z prawdziwymi tłumaczeniami, tryb kiosku dla tabletów wspólnych (większe cele, auto- reset, bez przekierowań), builder łącza prefill, a edytowalne świeckiejodznaki i tekst stopki.

Badanie A / B w wersji

Żywe

Publikować wersję rywala na każdym wdrożeniu z rozdziałem ruchu. Odwiedzający są przypisani stickily, odpowiedzi są stemplowane z wersji rzeczywiście obsługiwane, a tabela porównawcza pokazuje odpowiedzi, ukończenie i średni wynik na jedną wersję. Promować zwycięzcę w jednym kliknięciu.

Tygodniowa diesta

Żywe

Cotygodniowy e-mail z ostatnich dni 7 badania KPI, najbardziej ruchliwe ankiety, Puls zwrotny i najnowszy raport AI, wysłany przez przymocowane do zewnątrz złącze. Konfiguracja go w Centrum Dostawy, Automatyzacja.

Zarządzanie

Żywe

Lista dostępu do badań Per- ankiety ogranicza, kto może edytować, publikować lub usuwać ankietę. Publikacja zatwierdzenia (cztery oczy) wymaga drugiego admina, aby wydać dokładny projekt; edycja resetuje zatwierdzenie. Draft łączy współdzielonych pozwala recenzentowi zobaczyć prawdziwy szkic bez logowania się.

Platforma programistów

Żywe

Umowa o podłączeniu 2.2, wpisane ankiety. * i opinie. * Działania na temat api/ v1, ankieta kanoniczna. * wydarzenia, trwałe podpisy haczyków z formatami przekaźnikowymi Slack i Google Sheets oraz jednokierunkowa odpowiedź PDF wywóz.

Wzrost i zaangażowanie

Analizy ankietowe i zwroty są różne produkty

Analiza badania wyjaśnia, jak badanie dociera do ludzi i działa. Informacje zwrotne wyjaśnia, co klienci mówili we wszystkich dozwolonych źródłach i co firma powinna zrobić z tym. Dwa produkty łączą się ze sobą, ale nie dzielić lub nadpisać prawdy analitycznej.

Analiza ankietowa

Wchodzi z indywidualnego badania w Survey Studio, a nie z globalnej nawigacji bocznej. Mierzy kwalifikowalność, narażenie, zachowanie wyzwalające, rozpoczyna się, kończy, porzucenie, tarcie pytania i gałęzi, czas trwania, wdrożenie / kampania / wersja wyników i niezawodność runtime.

Informacje zwrotne Przegląd & Skrzynka odbiorcza

Jeden permission- świadomy chronologiczny pasza dla zakończonych odpowiedzi Survey, odziedziczone informacje zwrotne widget, czat i bilet CSAT, odpowiedź na bilety, oceny klienta AI- odpowiedzi, wiedzy-podstawy pomocnych głosów i zatwierdzone źródła zewnętrzne / niestandardowe.

Analiza zwrotna

Analizuje znaczenie klienta: oryginalne trendy metryczne, tematy / motywy, sentymenty, emocje, intencje, pilność, prośby, skargi, pochwały, podróże / produkt / usługa / segmenty zespołu, detraktory i efekty w pętli zamkniętej.

Własność danych

Odpowiedzi na ankiety pozostają autorytatywne w pamięci Survey. Feedback przechowuje rebuildable źródła odniesienia i sygnałów pochodnych, a następnie ładunki dozwolone dowody na żądanie. Jedna zakończona odpowiedź Survey staje się co najwyżej jeden element Feedback.

⚠️
Obecna strona Feedback nadal ma przeglądarkę odpowiedzi Survey i oddzielny legality widget inbox, a jej sumy AI nie wykorzystują jeszcze pełnego znormalizowanego modelu źródłowego. Jednolity przegląd / Inbox / Analytics / Źródła i projekt zdrowia jest celem wdrożenia.

NPS, CSAT, CES, gwiazdy, kciuki i pomocność muszą zawsze zachować swoją oryginalną metodę, skalę, próbkę, okno daty i mianownik. Nigdy nie można łączyć ich w jedną niewyjaśnioną średnią.

Wzrost i SEO

Studio Promocji

Studio Promocji zmienia Twoją stronę w silnik konwersji. Projektowanie pop-up, banery, slide- ins, paski górne / dolne, pełne przejęcia ekranu, bloki inline, a nawet krajowe przekierowanie, następnie pokazać właściwą wiadomość do odpowiedniego gościa w odpowiednim momencie. Wszystko jest dostarczane przez OpsIQ widget już na swojej stronie, więc nie ma nic dodatkowego do instalacji. Projektujesz i oszczędzasz kampanie w dowolnym czasie; pokazują tylko raz je opublikować i studio jest włączone do Twojej pracy.

Studio Promocji
Projektant studia promocyjnegoProjektant kampanii wizualnej z paletą bloków, podnośnikiem na płótnie i panelem celowniczym.Studio Promocyjne - ProjektantBLOKSxWitamy, {first_name}!Pobierz 15% z pierwszego zamówieniaSAVE15Zażądaj mojego kuponuUPRAWNIENIEKrajUS, CAWyciągaczWycofanie się z planuPodział A / B50 / 50Publikuj1PROJEKTPrzeciągnij bloki na płótno2DOCELOWEKraj, strona, publiczność3ŚrodekA / B zwycięzca + wnikliwość AI
Projektant wizualny: paleta bloków po lewej stronie, kampania na płótnie (tutaj zindywidualizowany kupon wyskakuje za pomocą symbolu {first_name}), a panel docelowy + publikuje po prawej.

Duży obraz

Kampania

Co?

Jeden awans: pop-up, baner, bar, slide-in, pełny ekran, inline block lub geo- redirect. Każdy ma cel: sprzedaż, ołów, sign- up, czat, ankieta, ogłoszenie.

Projekt i wersje

Jak

Każdy zapis tworzy nową wersję, więc zawsze możesz się cofnąć. Nic nie jest nigdy stracone.

Ukierunkowanie

Kto?

Kto widzi to: kraj, strona, urządzenie, źródło ruchu, zwracając vs nowy, harmonogram, i (ze złączem) swoich klientów zablokowanych.

Wyzwalacze

Kiedy

Kiedy pojawia się: natychmiast, w opóźnieniu, na przewijaniu, na wyjściu-intencji, gdy bezczynności, na kliknięciu, po N stronach lub z działalności chat / bilet.

Analiza

Wyniki

Odciski na żywo, klikanie, konwersje, lejek odlotowy, podział kraju / strony / urządzenia, zwycięzcy A / B i wgląd w sztuczną inteligencję.

Uruchom swój pierwszy awans w 5 kroki

1
Rozpocznij od szablonu lub pustego

Otwórz Studio Promocyjne i kliknij Nowy kampanii, lub wybrać gotowy projekt z galerii Szablonów. Projekt otwiera się w projektancie.

2
Zaprojektuj go

Przeciągnij w bloki, nagłówki, tekst, przyciski, obrazy, odznaki, statystyki, liczniki, formy, kupony, filmy wideo, oceny, spin- kółka. Kolory stylu, gradienty i efekty 3D ze sliderkami. Podglądaj Desktop / Tablet / Mobile, i korzystać z bezpłatnego ruchu, aby umieścić cokolwiek gdziekolwiek.

3
Uosobienie go

Takiety typu {first_name}, {country} lub {company} w każdym tekście. W momencie pokazowym stają się prawdziwymi wartościami odwiedzających.

4
Cel i wyzwalacz

Wybierz, kto widzi (kraj, strona, urządzenie, publiczność) i kiedy to strzela (opóźnienie, przewijanie, exit- intention).

5
Sprawdź, a następnie opublikuj

Kliknij Sprawdź na szybki skanowanie przed uruchomieniem, a następnie Publish. To idzie na żywo w ciągu kilku sekund i zaczyna zbierać analityki.

Bloki można zbudować

Zawartość

Bazowa

Nagłówek, ustęp, lista, cytat, obraz, ikona, odznaka, stat, dzielnik i spacja, elementy budulcowe każdej wiadomości.

Zaproszenie do działania

Bazowa

Przyciski z prawdziwymi działaniami: otworzyć link, rozpocząć czat, utworzyć bilet, skopiować kupon lub przejść do strony.

Pilny i przechwytywanie

Premia

Terminatory odliczania, formularze (e-mail / telefon / tekst), ukazania kuponu i umieszczanie wideo.

Uzyskane i informacje zwrotne

Premia

Koła Spin- to- win, karty do rysowania, oceny NPS / gwiazda i wielostopniowych lejków.

Układ & efekty

Premia

Kolumny, pręty postępu, udział społeczny, łaskotki społeczne, tak / nie dwustopniowy, quizy i efekty 3D, przechylenie, blask, paralaksa, glassmorphism.

Kody personalizacji

Wpisz dowolny z tych nagłówków, akapitów, przycisków, odznaki, statystyki, listy lub cytaty. Są one zastąpione przez szczegóły na żywo odwiedzającego w momencie promocji pokazuje (zawsze czyszczone dla bezpieczeństwa):

Dostępne żetony
From the visit:   {country} {city} {device} {page_path} {utm_source} {referrer}
From your CRM:    {first_name} {last_name} {email} {company} {segment} {lifecycle_stage}
From a connector: {balance_due} {unpaid_invoices}   (logged-in customers only)

Odniesienie do celów

Kraj i lokalizacja

Pokaż tylko w (lub ukryć się przed) wybranych krajów, miast lub stref czasowych przez GeoIP. Doskonałe dla konkretnych regionów oferty lub geo- przekierowanie.

Strony i URLs

Ogranicz do niektórych stron używając równości / starts- with / contains / regex i także wyłączcie strony.

Urządzenie

Komputer stacjonarny, tablet lub mobilny, np. cienki pasek na mobilnym, modalny na pulpicie.

Typ odwiedzającego

Nowe, powracające, znane (w CRM) lub anonimowe; segmenty CRm, etap cyklu życia, wynik wiodący lub język przeglądarki.

Źródło ruchu

Przez UTM (utm_source, utm_campaign) lub strona odsyłająca, np. tylko odwiedzający z określonej reklamy.

Harmonogram i częstotliwość

Daty rozpoczęcia / zakończenia, okna time- of- day i jak często osoba może to zobaczyć (na sesję, dziennie, po zamknięciu / kliknięciu / konwersji).

Podział ruchu A / B

Pokaż procentowo odwiedzających i uruchom warianty head- to- head; ta sama osoba zawsze widzi ten sam wariant.

Publiczność (zablokowana)

Z włączonym złączem, docelowy stan konta na żywo, np. klienci z niezapłaconymi fakturami lub aktywni abonenci.

Wyzwalacze

Wybierz sposób, w jaki pojawia się promocja: Natychmiast, po opóźnieniu, na głębokości przewijania, na exit- intent, gdy bezczynny, na kliknięciu elementu, po wielu stronach oglądanych, na format- porzucenie lub z działalności chat / bilet. Deweloperzy mogą strzelać jeden z własnego kodu window.OpsIQPromo.fire('event').

Zablokowane docelowe klientów (złącza)

To jest to, co sprawia, OpsIQ promocje specjalne: podłączyć platformę jak WHMCS (lub każde połączenie, które wspiera publiczność) i studio może celować w odwiedzających poprzez ich stan konta na żywo.

1
Włącz złącze dla publiczności

W ramach Connectors, umożliwić taki, który ujawnia fakty publiczność (WHMCS nie z pudełka). Klienci są bezpiecznie rozpoznawane podczas logowania na tej platformie, OpsIQ Nigdy nie ufaj e-mailom.

2
Dodaj zasadę publiczności

W kampanii Targeting > Publiczność, wymagają zablokowania i dodać zasady takie jak niezapłacone faktury > = 1, subskrypcja jest past- due, lub kredyt na konto > 0.

3
Personalizacja z ich danymi

Użyj żetonów, takich jak {first_name} lub {balance_due}. A "Masz zaległe faktury" przypomnienie pisze się.

Namierzanie publiczności jest bezpieczne: jeśli złącze nie może potwierdzić faktu (lub użytkownik nie jest zalogowany), promocja po prostu się nie pokazuje, więc billing- targeted oferta nigdy nie dociera do niewłaściwej osoby. Budowa własnego złącza? Zobacz "Promocja publiczność celująca" poniżej.

Handel połączony (superpower studio)

Karty produktów z Twojego sklepu

Dane na żywo

Blok produktu ciągnie prawdziwe przedmioty (nazwa, cena, cena sprzedaży, obraz, link) prosto z WHMCS, WooCommerce, Shopify lub OpsIQ fakturowanie. Tick "Keep fresh" i karta aktualizuje swoją cenę z platformy co godzinę, gdy publikowane.

Kupony zapasowe

Kupony

Blok kuponowy może utworzyć prawdziwy kod rabatowy w sklepie w momencie opublikowania, więc kod odwiedzający ujawnia zawsze działa przy kasie.

Przychody z zamówień na prawdę

Przynależność

Prawdziwe zamówienia z platform są dopasowane do kampanii godzinowo (według kodu kuponu lub przez e-mail ołowiu), więc dochód widzisz jest od rzeczywistej sprzedaży, nie szacunki.

Prawdziwe dowody społeczne

Zaufanie

Socjalno- dowód ticker może prowadzić z oryginalnych ostatnich zamówień ("Ada zamówić Starter Plan · 2h ago"), imię i przedmiot tylko, nigdy e-mail lub kwoty.

Eksperymenty i podróże

Warianty A / B i autozwycięzca

Podziel ruch na warianty projektowe; niech studio promować statystycznego zwycięzcę automatycznie, lub ręcznie ruchu do optymalizatora bandytów, który przesuwa odwiedzających w kierunku tego, co konwertuje jako dowód przychodzi.

Uniesienie Holdout

Zarezerwuj kawałek gości, którzy nic nie widzą, więc możesz udowodnić, że kampania sama powoduje windę.

Warianty segmentów

Różne treści na publiczność w kampanii SAME (odwiedzających mobilne, duże wózki, powracający klienci), każdy segment otrzymuje własną wersję.

Eksperymenty w zakresie tryggerów

Warianty mogą również testować, kiedy się pojawić: natychmiastowe vs opóźnione vs zamiar wyjścia, mierzone głowy-to- głowę.

Podróże (łańcuchy)

Cel przez to, co ktoś zrobił z inną kampanią ("widział kampanię A, ale nie przerobił"), aby zbudować wieloetapowe sekwencje promocji.

Teasery

Mała pigułka odwiedzający mogą ponownie otworzyć po zakończeniu kampanii, więc zamknięte wyskakuje nigdy nie odszedł na dobre.

Wiesz co się stało?

Kliknij mapę cieplną

Projektant

W projektancie, przełącz mapę cieplną, aby malować prawdziwe kliknięcia odwiedzających nad każdym bloku swojego projektu.

Lejek stopniowy

Jałówki

Kampanie wieloetapowe pokazują dokładnie, gdzie ludzie spadają, ekran po ekranie.

Porównaj kampanie

Studio

Złożenie czterech kampanii obok siebie (wrażenia, kliknięcia, konwersje), najlepiej zaznaczone wartości.

Cotygodniowa historia & trawienie

AI

W każdy poniedziałek w powiadomieniach znajduje się najmniejszy obszar; przycisk 📖 Cotygodniowy artykuł pisze streszczenie z języka zwykłego, przy czym kolejne kroki są dostępne, kiedy tylko chcesz.

Praca komfortowo

Kopilot i pomysły AI

Czat z kopilot projektu do edycji płótna ("zrobić nagłówek pilne, dodać odliczanie"), uzyskać pomysły kampanii z własnych danych ruchu, przetłumaczyć kampanię na kraj, lub auto- naprawić niski wynik projektowania.

Import zestawu marki

Jedno polecenie czyta Twoją stronę internetową i proponuje Twoje prawdziwe kolory marki i czcionki; Save i każdy zbieracz prowadzi z nimi.

Wieloekranowe lejki

Bloki kroków otrzymują prawdziwą edycję ekranu per-: zakładki dla każdego ekranu, dodać lub ponownie zamówić ekrany, a podgląd następuje.

Nazwany wersje i obecność

Wymień ważne wersje ("Kandydat na start"), przywróć którekolwiek z nich i zobacz ostrzeżenie, kiedy kolega z drużyny edytuje tę samą kampanię.

Urządzenie taśma & władcy

Zobacz pulpit, tablet i mobilne ramię obok siebie w jednym widoku; przełącz władców pikseli dla precyzyjnego umieszczenia.

Strony & kanały hostowana

Każda kampania może być również samodzielną stroną hostingową dla bio i kodów QR, sekwencją email kroplówki dla przechwyconych tropów lub jednym kliknięciem web- push draft.

Bezpieczeństwo przedsiębiorstw

Publikuj okna zamrażania (okresy zamiany-zamrożenia), awaryjne pause- wszystkie przełączniki, aprobaty, ścieżki audytu i wprowadzania wersji.

Czy muszę dodać kod do mojej strony?+

Nie. Promocje są dostarczane przez ten sam widżet OpsIQ, który już zainstalowałeś.

Czy goście będą oglądać to samo w kółko?+

Nie. Ustaw częstotliwość (na sesję / dzień, lub zatrzymaj się po zamknięciu, kliknięciu lub konwersji). Sensible domyślne są stosowane.

Kto może to opublikować?+

Publikowanie, pauza, archiwizacja i przetaczanie są ograniczone do właścicieli przestrzeni roboczej i administratorów. Każdy członek zespołu może tworzyć i projektować projekty.

Wzrost i SEO

Projektant promocji

Promotion Designer jest responsywnym edytorem bloków do budowania, przeglądania, modyfikowania i publikowania doświadczeń kampanii.

Ekran produktu
Projektant promocjiProjektant łączy w sobie płótno na żywo, przedmioty urządzeń, bloki, zmienne personalizacji, komentarze i historię wersji.Projektant promocjiprzestrzeń roboczaVIEWPORTKomputer stacjonarnyWERSJAv12PAŃSTWOProjektWIDOK PRACY ŻYWEJBlok bohateraNagłówek, media i CTAEdycjaBlok ofertowyRabat i terminEdycjaPersonalizacjaZmienne kontaktów i kampaniiGotoweKontrola uruchamianiaUwagi i zatwierdzeniePrzegląd1BUILD BLOCKSEdytuj układ na żywo2PRZEGLĄDDesktop, tablet, mobilne3PUBLISHWypuszczanie pionowe
Projektant łączy w sobie płótno na żywo, przedmioty urządzeń, bloki, zmienne personalizacji, komentarze i historię wersji.

Użyj bloków do komponowania doświadczenia, podgląd każdego obsługiwanego widoku i wprowadzić zatwierdzone zmienne personalizacji. Przeglądaj komentarze i AI- media prinence przed uruchomieniem. Zapisywanie tworzy wersje, dzięki czemu poprzedni projekt może być sprawdzony lub przywrócony.

Wzrost i SEO

Wzory formularzy promocyjnych

Szablony zapewniają możliwość przeszukania, kategoryzowaną galerię startową dla kampanii promocyjnych Studio.

Ekran produktu
Wzory formularzy promocyjnychGaleria szablonów filtruje układy premium i stosuje kolory marki w miejscu pracy, gdy szablon staje się szkicem.Wzory formularzy promocyjnychprzestrzeń roboczaKATEGORIAKonwersjaRESULTS24BRANDStosowaneWIDOK PRACY ŻYWEJOferta wyjściaModal z pilną potrzebą i CTAPodglądPowitanie nowego gościaLista banerów i świadczeńPodglądWprowadzenie produktuBohater, dowód i odliczaniePodglądWniosek o zwrot informacjiSzybki przeglądPodgląd1FILTERKategoria i wyszukiwanie2PRZEGLĄDSprawdź pełną konstrukcję3USEUtwórz markowy szkic
Galeria szablonów filtruje układy premium i stosuje kolory marki w miejscu pracy, gdy szablon staje się szkicem.

Szukaj lub filtruj według kategorii, ładuj dodatkowe wyniki, podglądaj pełne doświadczenie, a następnie wybierz Użyj szablonu. Nowa kampania pozostaje projektem i może zostać zmieniona w Projektancie Promocji przed publikacją.

Wzrost i SEO

Analiza promocyjna

Analiza promocji łączy wrażenia i kliknięcia z konwersjami, kontekstem odbiorców, złączeniem efektów działania i uczeniem się kampanii.

Ekran produktu
Analiza promocyjnaAnaliza promocji pokazuje główne wyniki, publiczność i awarie wyzwalaczy, prowadzi eksport i złącza działania.Analiza promocyjnaprzestrzeń roboczaIMPRESSIONS42.8kCTR6.4%CONVERSIONS814WIDOK PRACY ŻYWEJKrajWielka Brytania · 31%PodziałStrona/pricing · 22%PodziałWyciągaczCel wyjścia · 44%PodziałDziałanie połączeniaUtworzony kupon · 97% sukcesWynik1ŚrodekImpresje do konwersji2SLICEStrona, kraj, urządzenie3LEARNZastosuj wgląd
Analiza promocji pokazuje główne wyniki, publiczność i awarie wyzwalaczy, prowadzi eksport i złącza działania.

Odczyt wrażeń, klik-przez szybkość i konwersje razem. Przerwa wyników według kraju, strony, wyzwalacz i urządzenie; eksport przechwytywane wiodące w razie potrzeby. Złącze wyniki działania pokazać, czy promocja obiecane follow- up faktycznie uruchomiony. AI wgląd i podsumowania uczenia się powinny być traktowane jako hipotezy do zatwierdzenia, a nie automatyczne dowód.

Wzrost i SEO

Ogłoszenia

Ogłoszenia publikują komunikat w obszarze powiadomienia widget z opcjonalnym ukierunkowaniem, harmonogramem i wywołaniem działania.

Ekran produktu
OgłoszeniaEdytor ogłoszeń zawiera treść, CTA, publiczność, segment, regułę strony, daty aktywne i styl wizualny.Ogłoszeniaprzestrzeń roboczaCZYNNE3AUDIENCESegmentSYSTEMLipiec 22–29WIDOK PRACY ŻYWEJTytułPlanowana konserwacjaGotoweZawartośćKomunikat o markdownGotoweCTAPrzeczytaj aktualizacjęOpcjonalnieArtykułStrony cenowe · aktywni klienciCel1WRITETytuł i markdown2DOCELOWEPubliczność, segment, strona3SYSTEMAktywne okno
Edytor ogłoszeń zawiera treść, CTA, publiczność, segment, regułę strony, daty aktywne i styl wizualny.

Wybierz wszystkich odwiedzających, signed- in gości lub nowych odwiedzających; opcjonalnie zawęzić odbiorców z segmentu kontaktowego i reguła strony. Ustaw active- od / activive- do dat i aktywnej flagi. Premia premium presets i kolory zmienić prezentację, ale nie zastąpić wyraźną zawartość.

Wzrost i SEO

Kampanie na rzecz wsparcia

Kampanie push wysyłają powiadomienia do użytkowników subskrybowanych po opuszczeniu strony.

Ekran produktu
Kampanie na rzecz wsparciaKompozytor push pokazuje zasięg subskrypcji, treści, media, działania, zasady docelowe i stan rozkładu.Kampanie na rzecz wsparciaprzestrzeń roboczaSUBSCRIBERS8,214WYSTĄPIENIE31.6kCLICK RATE5.8%WIDOK PRACY ŻYWEJTytułTwój wózek czeka.GotoweCiałoWróć dzisiaj do darmowej dostawyGotoweCTAOtwórz koszykGotoweHarmonogramWyślij teraz lub planowanyProjekt1PREPARE PUSHTytuł, ciało, ikona2DOCELOWEPubliczność, segment, strona3SENDTeraz, harmonogram lub szkic
Kompozytor push pokazuje zasięg subskrypcji, treści, media, działania, zasady docelowe i stan rozkładu.

Konfiguracja klawiszy Push Web najpierw pod ustawieniami Push Web. Kampania może obejmować tytuł, ciało, ikonę, wizerunek bohatera, odznakę, CTA i do dwóch przycisków działania; stałe powiadomienie pozostaje do czasu interakcji odwiedzającego.

Cel przez publiczność, opcjonalny segment kontaktowy i reguła strony. Zapisz projekt, zaplanować go lub wysłać natychmiast. Użyj subskrypcji i kliknij metryki do oceny dotrzeć. HTTPS i prawidłowo hostowane pracownik usług są wymagane na osadzonych stron trzeciej partii; patrz Web Push na stronach trzeciej partii.

Wzrost i SEO

Proaktywne wiadomości

Proaktywne wiadomości docierają automatycznie w momencie, gdy zachowanie odwiedzającego odpowiada regule, zanim zapyta. Budujesz każdy z reguły z trzema częściami: co powinno się stać, kiedy powinien strzelać i jak często. Wszystko jest dostarczane przez widget OpsIQ już na swojej stronie.

Proaktywna
Proaktywne wiadomościKompozytor proactive-rule w trzech częściach: wybrać akcję (czat, baner, trasa, push, email), dodać warunki i ustawić częstotliwość ochłodzenia.Proaktywne wiadomościprzestrzeń robocza1 · AkcjaWiadomość z rozmowyBannerWycieczkaPchajE-mail2 · Warunkipage = /pricingCzas na stronie > 20spowrót3 · CzęstotliwośćRaz na sesjęStan1DZIAŁANIECzat, baner, e-mail, pchaj...2CONDITIONSStrona, czas, wynik, powrót3FREFEKTYWNOŚĆChłodzenie na gościa
Każda proaktywna zasada to trzy opcje: co się dzieje (czat, baner, trasa, push, e-mail, webhook), kiedy (warunki) i jak często (ochłodzenie).

Trzy części zasady

1
Co powinno się stać (działanie)

Pokaż bańkę czatu lub baner na stronie, uruchom wycieczkę z przewodnikiem, wyślij popchnięcie strony internetowej lub e-mail, przypisz do działu, lub odpal webhook. {{visitor_name}} oraz {{page_title}} stają się wartościami rzeczywistymi.

2
Kiedy powinien strzelać (warunki)

Wąskie, kto uruchamia go: strona /URL, czas na stronie, przewijanie głębokości, wynik ołowiu, powrót vs nowy, bezczynny. Bez żadnych warunków, zasada dla każdego gościa jest wywołane. Dodaj co najmniej jeden do celu. Warunki łączą się z AND.

3
Jak często (częstość)

Ustaw ochłodzenie, aby ta sama osoba nie była zadręczona, np. raz na sesję lub raz na dobę. Każda zasada ma status włączenia / wyłączenia.

⚠️
Przestrzeń robocza przełączanie "Run time / bezczynności zasady godzinowo" pozwala server- side akcji (e-mail, push, webhook, przypisz) ogień na harmonogramie dla znanych kontaktów, które nie są obecnie na stronie, więc można "email nieczynny hot leads" automatycznie. Potrzebuje OpsIQ cron działa. Zostaw to, jeśli tylko chcesz na żywo na stronie naciska.
Czy to będzie ogień dla wszystkich?+

Tylko jeśli dodasz nie warunki. Dodaj co najmniej jeden warunek (strona, wynik wiodący, powrót...), aby wybrać odpowiednich odwiedzających.

Jak to się odnosi do przepływów i wycieczek?+

Pracują razem: proaktywna zasada może rozpocząć zwiedzanie z przewodnikiem, a Chatbot Flow może być uruchamiany przez aktywną zasadę. Zacznij od jednej reguły chat- message, a następnie połóż na innych.

Wzrost i SEO

Chatbot płynie

Chatbot Przepływa skrypt rozgałęziający rozmowy wewnątrz widget czatu (pozdrowienia, odpowiedzi na słowa kluczowe, ścieżki przewodnie) bez kodu. Przepływ jest zbiorem połączonych kroków (węzły): zadajesz pytanie, odwiedzający wybiera opcję, a przepływ wysyła je w dół pasującej gałęzi. Tylko aktywne przepływy działają na swojej stronie.

Jak to działa?
Chatbot płyniePłótno przepływu: węzeł powitalny rozgałęziony na trzy przyciski opcji, każdy prowadzący do następnego kroku, spojrzeć w górę porządku, lub przekazać do człowieka.PowitanieJak mogę pomóc?Namierz mój rozkazPytanie o rozliczeniePogadaj z człowiekiem.Sprawdź kolejność.→ Czynnik ludzkiPrzyciągi: Pozdrowienia · Słowo kluczowe · Podręcznik · Szczegóły po ¶ wiêcone
Chatbot płynie

Flow vs AI · kiedy używać, które

Użyj przepływu

Kiedy ścieżka jest przewidywalna i chcesz, aby była identyczna za każdym razem: kroki rezerwacji, kreatora zwrotów, "który plan?" wybierając, zbierając e-mail przed przekazaniem. Flows nigdy nie improwizować.

Użyj AI

Kiedy pytania są otwarte, "Czy to działa z moim ustawieniem?" Klient Chat AI odpowiada na swoje wyszkolone wiedzy. Przepływ może przekazać się do SI (lub człowieka) w dowolnym stopniu.

Wyzwalacze

Powitanie

Działa jako wiadomość otwierająca, gdy gość pierwszy otwiera czat.

Słowo kluczowe

Biega, gdy użytkownik wpisuje słowo, które wymieniłeś (np. zwrot kosztów, ceny, anulowanie).

Po szczegółach / Po opóźnieniu

Zaczyna się od wymiany danych kontaktowych lub czasu na rozmowę.

Na czacie / Proactive

Działa jak czat owija się (np. rating), lub jest uruchamiany przez Proactive Message rule.

Zbuduj jeden w czterech etapach

1
Utwórz przepływ

Kliknij przycisk Nowy Flow, podaj nazwę, wybierz typ wyzwalacza (i słowa kluczowe jeśli słowo kluczowe), zapisz.

2
Otwórz płótno

Kliknij Edytuj Canvas. Wizualny budowniczy, w którym dodajesz kroki (wiadomości, pytania z przyciskami, gałęzie) i podłącz je.

3
Dodaj gałęzie i hand- off

Dla każdego wyboru, narysować gałąź do następnego kroku. Końcowe ścieżki poprzez rozwiązanie, przekazanie do SI, lub przeniesienie do człowieka.

4
Włącz

Kliknij Włącz. Przepływ idzie żyć w widżecie natychmiast. Wyłącz dowolny czas bez utraty projektu.

Czy przepływ zastępuje SI?+

Nie. Przechodzą obok siebie. Używają przepływów do przewidywalnych ścieżek i SI do pytań zakończonych otwarciem; przepływ zawsze może się do nich przenosić.

Wzrost i SEO

Wycieczki z przewodnikiem

Wycieczki z przewodnikiem to krok po kroku przełom, który wskazuje na części strony z bąbelkami mowy i reflektorem, prowadząc odwiedzającego przez pokładowe lub nową funkcję. Są one w pełni tematyczne i zbudowany w wizualnym projektanta z podglądem na żywo. Wycieczka przebiega tylko wtedy, gdy jest oznakowana Aktywny.

Jak to działa?
Wycieczki z przewodnikiemPrzyciemniona strona z pierścieniem reflektorów wokół przycisku Add- deal i tematyczne czytania bańki mowy Step 1 z 4 z następnym przyciskiem.+ Dodaj umowęKROK 1 Z 4Utwórz swój pierwszy układKliknij tutaj, aby dodać umowę do rurociągu.Następny →
Wycieczki z przewodnikiem

Jak budować wycieczkę

Kroki

Każdy krok ma na celu element i pokazuje bańkę z tekstem. Dodaj tyle przystanków jak potrzeby przejścia i zamówić je.

Ustawienia i motyw

Zacznij od góry lub zaprojektuj własną bańkę (kolory, gradienty, reflektory) z podglądem na żywo po prawej stronie.

Wyciągacz

Opcjonalnie link Proactive Rule, więc wycieczka auto- rozpoczyna się, gdy ta zasada wypali (np. pierwsza wizyta na desce rozdzielczej powracającego gościa).

Aktywne przełączanie

Wycieczka jest kwalifikowana do prowadzenia tylko podczas gdy Active jest zaznaczony. Untick, aby zdjąć go bez usuwania go.

Zbuduj jeden w czterech etapach

1
Nowa trasa

Kliknij przycisk Nowa Wycieczka z przewodnikiem, podaj nazwę i opcjonalnie odnoście Proactive Rule, aby rozpocząć automatycznie.

2
Dodaj kroki

Dodaj każdy przystanek: wybierz element, do którego wskazuje i napisz tekst bąbelkowy. Zamów, aż ścieżka płynie.

3
Zaprojektuj go

Wybierz preset lub styl bańki siebie. podgląd na żywo pokazuje dokładnie to, co odwiedzający widzą.

4
Aktywuj

Tick Active i zapisać. Trasa może teraz działać, na swoim własnym spustu, lub rozpoczęty przez Proactive Message rule.

Jak się zaczyna wycieczka?+

Na ich własnym wyzwalaczu, lub za pośrednictwem Proactive Message zasady "Wycieczka z przewodnikiem" działania, więc zdecydować, którzy goście zobaczyć, które trasy i kiedy.

Wzrost i SEO

Cele konwersji

Cele konwersji przekształcają działalność, na której Ci zależy (przychodzące wydarzenie z hakiem webowym, wiadomość czatu, rozdzielczość biletów) w zarejestrowaną konwersję z pełnym przypisem. Kiedy aktywność się pali, OpsIQ loguje konwersja przeciwko kontaktowi i łączy ją z powrotem do kampanii, segmentów i źródeł, które tam doprowadziły.

Jak to działa?
Cele konwersjiPrzepływ celu: payment. hack event staje się zapisaną "zakupu" konwersji o wartości $49, przypisane do źródła i kampanii, z szybkostartowymi żetonów preset powyżej.Szybki startZakup StripeZamówienie demoZapisy w biuletyniepayment.succeededhak wjazdowyKonwersja"zakup" · $49Atrybutźródło · kampania
Cele konwersji

Zdefiniuj cel w trzech etapach

1
Wybierz aktywność wyzwalacza

Kliknij Nowy cel konwersji. Wybierz typ działalności, który liczy się jako konwersję, lub użyj Quick- start preset, Stripe zakup, Demo zarezerwowane, Podpisanie biuletynu lub Subskrypcja rozpoczęła.

2
Podaj i ustaw wartość

Podaj nazwę konwersji (zakup, demo_booked, signup) i opcjonalnie stałą wartość i okno przypisania.

3
Zapisz

Zapisz i aktywuj. Od tego czasu, kiedy aktywność się pali, OpsIQ rejestruje konwersję z kontaktem z przypisaniem do poprzedniego dotyku.

Cele są już podłączone do przychodzących haczyków: każdy cel, którego wyzwalacz pasuje do typu przychodzącego zdarzenia, automatycznie odpala w momencie lądowania zdarzenia. Użyj strony Przychodzące haki internetowe do podłączenia Stripe, Calendly lub jakiegokolwiek systemu, który może POST JSON.
Co może być nawróceniem?+

Wszelkie zarejestrowane działania: przychodzące zdarzenie haka (payment. succed), przechwytywanie poczty czatowej, rozdzielczość biletów, wszystko w linii czasowej kontaktu.

Analiza

Deski rozdzielcze niestandardowe

Niestandardowe tablice rozdzielcze pozwalają na tworzenie własnego widoku wskaźników, które mają znaczenie, zamiast polegać tylko na standardowym przeglądzie. Dodaj widżety, przeciągnij i przeskaluj je w układ, który lubisz, zapisać je i podzielić się nimi z zespołem.

Deski rozdzielcze niestandardowe
Deski rozdzielcze niestandardoweBudowniczy desek rozdzielczych z płytkami KPI i mapy widget, strefa zrzutu zrywanego oraz przycisk Add- widget.Deski rozdzielcze niestandardoweprzestrzeń roboczaMoja deska rozdzielcza+ Dodaj widżetWIZYTORY2,481DOCHODY$8. 2kRuch drogowyPrzeciągnij widget tutajPAGES TOP/pricing/docs/signup1ADD WIDGETSWybierz metrics i wykresy2ARRANGEPrzeciągnij i przerost3SHAREZ twoją drużyną
Zbuduj własną planszę: dodaj widżety KPI, wykresu i listy, przeciągnij je i przełóż na układ jaki chcesz, a następnie podziel się nimi z zespołem.

Zbuduj jeden w trzech etapach

1
Dodaj widżety

Kliknij Dodaj widget i wybierz metrykę lub wykres, który chcesz śledzić. Powtórz dla wszystkiego, co chcesz na pokładzie.

2
Ustaw układ

Przeciągnij widżety do zmiany pozycji i przeciągnij ich krawędzie do zmiany rozmiaru. KPI na górze, wykresy poniżej. Cokolwiek czyta najlepiej.

3
Zapisz & udostępnianie

Zapisz deskę rozdzielczą i podziel się nią z zespołem, aby każdy oglądał te same numery.

Zachowaj oddzielne deski do oddzielnych zadań ("codziennie spojrzenie" tablica z licznymi liczbami na żywo, i "miesięczny przegląd" tablice z wykresami trendów) tak każdy pozostaje skoncentrowany.
Wzrost i SEO

Kampanie informacyjne

W celu uzyskania dalszych informacji należy: OpsIQ jest1:1i masowy silnik e-mail: skomponować spersonalizowaną wiadomość lub uruchomić kampanię do segmentu CRM, z wykrywaniem odpowiedzi, send- time kontroli, śledzenie otwarte / kliknięcie, śledzenia pikseli i jeden-kliknij bez subskrypcji. Jest zgodna - falisty i CAN- SPAM / CASL zgodne.

Połączenia
Kampanie informacyjneEkran Outreach z zakładkami Composer / Campaigns / templates / Replies oraz tabelą kampanii pokazującą wysyłany, open- rate i repliyrate.Połączeniaprzestrzeń roboczaKampanieKompozytorSzablonyOdpowiedziKAMPAIGNWYSTĄPIENIEOPENODPOWIEDZIBiuletyn informacyjny w czerwcu1,20048%7%Dalsze badania34062%14%Win- back82039%5%Odpowiadaj auto- stopki wykrywania follow- up · jedno kliknięcie usuwa subskrypcję przy każdym wysłaniu11:1 & BULKKompozycja lub kampania2TRACKEDOtwiera, klika, odpowiada3COMPLIANTWysubskrypcja wbudowany
Silnik do docierania: wyślij1:1lub uruchomić kampanie do segmentu, tor otwiera i odpowiedzi, i pozostają zgodne z built- in desubscribe i wykrywania odpowiedzi.

Cztery karty

Kompozytor

Napisz spersonalizowany1:1e-mail z {tokens} od kontaktu i CRM.

Kampanie

Wyślij do segmentu CRM, zaplanowanego lub teraz, z zamknięciami i kontrolą czasu send-.

Szablony

Szablony wiadomości wielokrotnego użytku do powtarzania zasięgu.

Odpowiedzi

Odpowiedzi na wykrywanie i auto- zatrzymuje działania następcze dla każdego, kto odpowiedział.

Jak kampania działa

1
Wybierz publiczność

Wybierz segment CRM (lub wpisz listę). Wyłączenie i zgoda są stosowane automatycznie.

2
Skład

Napisz wiadomość z symbolami personalizacji; podgląd przed prawdziwym kontaktem.

3
& & Harmonogram wysyłania

Wyślij teraz lub w najlepszym czasie. Otwiera się śledzenie rekordów pikseli; kliknięcia i odpowiedzi są przypisane.

Pomoc jest zgodna- i supression- flanted, zawiera jednokliknięcie wysubskrybować na każdym wysłaniu, a następnie CAN- SPAM / CASL. Odpowiedzi automatycznie zatrzymać dalsze działania następcze.
Analiza

Raporty zaplanowane

Planowane Raporty e-mail wybrany zestaw metryczny do wybranych odbiorców na harmonogramie (codziennie, co tydzień lub miesięcznie) jako drukowalny, biały - etykieta PDF. Ustaw go raz i raport ląduje w skrzynkach odbiorczych automatycznie przez OpsIQ Cron.

Raporty zaplanowane
Raporty zaplanowaneEkran raportów planowych: tabela raportów z ich harmonogramem, odbiorcami i ostatnim czasem wysłania, plus przycisk Raportu Save-.Raporty zaplanowaneprzestrzeń roboczaRaporty zaplanowane+ Zapisz raportSPRAWOZDANIESYSTEMRECIOLOSTATNI SENTTygodniowy ruchMon9:00[email protected]2d temuRaport klienta SEOMiesięcznie[email protected]Jun 1Podsumowanie sprzedażyCodziennie[email protected]todayDostarczana jako etykieta typu white PDF przez OpsIQ koniak1AUTOMATEDCodziennie · tygodniowy · miesięczny2ETYKIETA When-ETYKAPDF dla klientów3RECIOLEmail w harmonogramie
Ustaw raz raport (zestaw metryczny, zakres, harmonogram, odbiorcy) oraz OpsIQ e-maile z etykietą White- label PDF automatycznie na swojej kadencji.

Utworzenie raportu

1
Wybierz co wysłać

Wybierz zestaw metryczny (ruch, SEO, sprzedaż, wsparcie...) i zakres daty.

2
Ustaw harmonogram i odbiorców

Codziennie, co tydzień lub miesięcznie, w wybranym przez siebie czasie, do jednego lub więcej odbiorców poczty elektronicznej.

3
Zapisz

Zapisz i aktywuj. Raport generuje i email się na harmonogram, bez ręcznego kroku.

💡
Planowane raporty prowadzone przez Cron OpsIQ, jeśli raport nie dotrze, potwierdzić, że cron jest uruchomiony (patrz Cron i automatyzacja).
Prywatność

Prywatność i zgodność

Strona Prywatność i zgodność jest jedynym miejscem, gdzie można pokazać audytorowi, że za odpowiedzialną obsługę danych osobowych odpowiada: rejestr zgody, dziennik dostępu administratora, politykę pobytu i retencji danych oraz czytelny wydruk DPA w jednym widoku tabbed.

Prywatność i zgodność
Prywatność i zgodnośćEkran Prywatności i zgodności: zakładki do rejestru zezwoleń, dziennika dostępu, rezydencji i DPA, z tabelą zgody dotacji i cofa się przez kanał.Prywatność i zgodnośćprzestrzeń roboczaRejestr zgodyDziennik dostępuRezydencjaDPAKONTAKTKANAŁUDZIAŁANIEDATA[email protected]e-mailUdzieloneJun 12[email protected]pushOdwołanyJun 10[email protected]marketingUdzieloneJun 9Wyszukiwarka dowodów każdej zgody udzielanej i cofniętej, według kanału1UZGODNIENIE Z DŁUGĄ KONSUMENTÓWDowód każdej dotacji2ACCESS LOGKto dotknął danych3DPAWzór do wydrukowania
Jeden ekran gotowy do audycji: rejestr zezwoleń przeszukiwalnych (granty / revokes by channel), dziennik dostępu osób, które dotknęły danych, ustawienia rezydencji / retencji oraz wydrukowany DPA.

Cztery karty

Rejestr zgody

Przeszukiwanie rekordu każdej zgody udziela i cofa, poprzez kontakt, kanał (e-mail, push, SMS, in- widget), działanie, źródło i datę. Twój dowód kontakt zgodził się (lub wycofał).

Dziennik dostępu

Kto w swoim zespole oglądał, edytował, eksportował, kasował lub wysłał dane kontaktu, z administratorem, kontaktem, działaniem, oświadczył powód i IP. Dokładnie to, o co prosi regulator.

Rezydencja i retencja

Określ, gdzie znajdują się dane w tym miejscu pracy, ustaw liczbę wierszy aktywności (0 = na zawsze) i napisz swój kontroler danych i DPO.

Wzór DPA

Drukowalny dodatek do przetwarzania danych, który wypełnia Twój kontroler, adres, DPO, rezydencję i retencję. Drukuj lub zapisz jako PDF.

Pary prywatności i zgodności ze studiem zgody Cookie (który zbiera zgodę) oraz stroną Export (która tworzy kopię danych dla DSAR). Zobacz także Cron i automatykę nocnego czyszczenia retencji.
Łączniki

Połącz swoje platformy

Powiązanie złączy OpsIQ do platform zewnętrznych: sklepy e-commerce, systemy rozliczeń, podmioty przetwarzające płatności, dostawcy poczty elektronicznej i niestandardowe APIs. Po połączeniu, AI może sprawdzić zamówienia, dane klientów, subskrypcje i więcej, i podjąć działania za zgodą.

Jak to działa?
Głowica złączyOpsIQ rdzeń podłączony do WHMCS, Shopify, Stripe, WooCommerce, SendGrid i Google Business Profile, każdy pokazuje podłączony status.WHMCSShopifyStripeWooCommerceSendGridGoogle BPOpsIQCORE1PLUG IN25+ wstępnie zbudowane złącza2AI CONTEXTRzeczywiste dane platformy3ACTIONSSporządzono za zgodą
Łączniki

Statki z OpsIQ

Są one obecne w momencie zainstalowania i potrzebują tylko ich referencji.

WHMCS

Rachunek

Rachunki za hosting: klienci, usługi, bilety, faktury, domeny, serwery.

Shopify

Handel elektroniczny

Handel elektroniczny: zamówienia, klienci, produkty, inwentaryzacja, płatności, haki webhaki.

WooCommerce

Handel elektroniczny

WordPress e-commerce: zamówienia, klienci, produkty, kupony, wysyłki.

WordPress

CMS

Zawartość i użytkownicy na stronie WordPress.

Kwadrat

Płatności

Płatności i punkt sprzedaży: zamówienia, klienci, katalog.

osCommerce

Handel elektroniczny

Legacy e-commerce: zamówienia, klienci, produkty.

Hotel Botble

Most

Butelka CMS stronie hotelu poprzez podpisaneOpsIQmostek. Referencyjna realizacja platformy zAPI.

Zendesk

Wsparcie

Helpdesk: bilety, użytkownicy, organizacje, komentarze.

Profil biznesowy Google

Marketing

Lokalne: opinie, posty, Q & A, spostrzeżenia. Używa OAuth.

Kalendarz Google

Wydajność

Kalendarze i wydarzenia. Wykorzystuje OAuth.

GmailorazIMAP

E-mail

Skrzynki pocztowe: przychodząca i wychodząca poczta, synchronizacja książki adresowej.

SendGrid

E-mail

Dostawa e-mail: wysyłaj e-maile i zarządzaj szablami.

Mailgun

E-mail

Dostawa e-mail: wysyłaj e-maile przez Mailgun.

Slack, Telegram, LINE, X DM

Komunikacja

Przekazywanie kanałów rozmów przychodzących i wychodzących.

Kanały metatonowe

Komunikacja

Facebook Messenger, Instagram DM i WhatsApp.

Wywiad stron (GA4, Konsola wyszukiwania)

Analiza

Dane analityczne i wyszukiwania dla pakietu SEO.

wzbogacanie stron internetowych oraz CRM import

CRM

Ubogacanie firmy i import hurtowy klientów.

Dostępne na rynku

Są to opublikowane pakiety, a nie część instalacji. Zainstaluj jeden z Connectors, Marketplace i jest kopiowany do folderu live złączy, po którym zachowuje się dokładnie tak jak te powyżej.

Stripe

Rynek

Płatności: opłaty, klienci, faktury, prenumeraty, wypłaty, spory.

BigCommerce

Rynek

Handel elektroniczny: zamówienia, klienci, produkty, kategorie, marki.

Magento 2

Rynek

Handel elektroniczny: zamówienia, klienci, produkty, kategorie, inwentaryzacja.

PrestaShop

Rynek

Handel elektroniczny: zamówienia, klienci, produkty, zasady koszyka, przewoźnicy.

OpenCart

Rynek

Handel elektroniczny: zamówienia, klienci, produkty, kategorie.

Amazon SES, Znacznik pocztowy, Przywrócenie

Rynek

Transactional mail dostawy.

Jira Linear

Rynek

Wydanie i śledzenie projektu.

Zoom, Microsoft Calendar, Outlook Mail

Rynek

Spotkania, kalendarze i listy.

Dokument: Apollo, SerpApi, Google Analytics

Rynek

Podpis, poszukiwanie, wyszukiwanie i analiza danych.

Webflow, Wix, Squarespace

Rynek

Platformy internetowe.

💡
Lista łączników porusza się w miarę publikowania pakietów. Autorytatywną listą dla instalacji jest strona Connectors: co jest wymienione tam jest to, co odkrył runtime, a karta Marketplace pokazuje, co można dodać.

Instalowanie złącza

1
Przejdź do podłączeniaComment

Przejdź do Connectors w pasku bocznym admin.

2
Znajdź złącze

Przeglądaj listę lub wyszukaj. Złącza są pogrupowane według kategorii.

3
Włącz

Kliknij na złącze i przełącz Włącz.

4
Wpisz dane uwierzytelniające

Wypełnij wymagane pola: API klucz, URL, żetony, itp. Każde złącze posiada szczegółowe wymagania udokumentowane w panelu ustawień.

5
Przyłącze testowe

Kliknij przycisk "Test Connection". Zielony wynik oznacza, że złącze może dotrzeć do zewnętrznej platformy. Czerwony wynik pokazuje błąd.

6
Konfiguracja funkcji

Wybierz funkcje, które mają być włączone: synchronizacja wiedzy, synchronizacja haka webowego, działania AI. Nie wszystkie złącza obsługują wszystkie funkcje.

Co ci daje złącza

Kontekst AI

AI może przeglądać dane klientów, zamówienia, subskrypcje i więcej przez złącze. Kiedy klient czaty, AI ma prawdziwe dane platformy do odniesienia.

Kontekst AI (autorzy złączy)

Twój złącze ContextProvider karmi ticket- AI tylko read- konto streszczenie właściciela biletu. customer_id jeżeli jest znany; w przeciwnym wypadku, na autoodpowiadaniach biletu, gdzie znacznik ctx customer_trust_email jest prawdą, sprawdź konto przez customer_email (zweryfikowany nadawca biletów). Platformy zdalne zdemaskować /context/customer-by-email punkt końcowy i złącze nazywa go. To, co sprawia, że AI cytuje prawdziwe saldo / faktura zamiast powiedzieć "proszę zalogować się". Honorowe przełączanie klasy danych operatora (customer_sections, customer_allow_credit) i pozostawać w ścisłym kontakcie, nigdy nie emitować tajemnic.

Katalog klientów (autorzy złączy)

Twój złącze IdentityProvider karmi trzy uniwersalne przeszukiwania biletów: lookupCustomerById() (karta klienta), lookupCustomerServices() (tabela produktu / usługi), oraz listCustomers($query,$limit): "Wyszukaj klienta lub wpisz e-mail" picker na rodzimym Compose- New- Bilet formularz. {id, external_id, name, email, company, phone, platform, platform_label}. Reguła zdalna: Jeśli Twoi klienci mieszkają w innej bazie danych lub usługi, należy je pobrać przez platformę API wewnątrz tych metod, nigdy nie czytać tabel innego systemu bezpośrednio (w OpsIQ DB to puste miejsca, dlatego lokalny odczyt zwraca pusty picker).API URL; zachować odczyt lokalny tylko jako samo-DB fallback.

Bilety na email- piped, wykrywanie i routing (autorzy złączy)

Kiedy przychodzący e-mail staje się rodzimym biletem, OpsIQ wykrywa nadawcę przez wywołanie lookupCustomerById(0, ['email'=>$sender]) w każdym złączu; pierwszy mecz "posiada" klienta i jego platform ślimak jest stemplowany na ticket.created event jako _pipe_owner_platform (Pusty = gość).WHMCS-klient e-mail otwiera bilet w WHMCS (WHMCS numerowanie, odzwierciedlone jako jeden), podczas gdy nieznany nadawca pozostaje rodzimym gościem. Jeśli Twoje złącze lustrzane rodzime bilety na swoją platformę, your ticket.created opiekun musi się tym zająć: if (array_key_exists('_pipe_owner_platform',$payload) && $payload['_pipe_owner_platform'] !== '<your-slug>') return;. Klucz jest nieobecny na biletach nie-piped (chat / manual / AI), więc te lustro jak wcześniej. Per- dział kontroli mieszka pod Team & Departments → Otwórz bilety przez e-mail (Każdy / Klienci tylko / Off).

Działania

AI może wykonywać działania poprzez złącze: tworzyć bilety, uaktualniać zamówienia, anulować subskrypcje, wszystko za zgodą przez Trust Layer.

Wiedza

Złącza przyczyniają się do tworzenia określonych na platformach artykułów z wiedzą do SI. Shopify złącze dodaje problemy związane z handlem elektronicznym; WHMCS złącze dodaje wiedzę hostingową.

Import bazy wiedzy (autorzy złączy)

Jeśli platforma posiada bazę wiedzy, zadeklaruj kb_capabilities blokuj settings.json (typ kb_source) i Twój złącze pojawia się w edytorze Help Center Importuj KB → Import z podłączonej aplikacji rozwijane zawsze, gdy jest włączone i skonfigurowane w miejscu pracy. Jest to deklarujące, nie ma metody do wdrożenia: nazwa built- in adapter (zendesk dla Exact- tree Help Center API, lub crawl dla każdej strony KB) oraz base_template takie jak https://{subdomain}.zendesk.com, które OpsIQ wypełnia z ustawień Twojego złącza. Kredyty nigdy nie opuszczają serwera; przeglądarka wysyła tylko ślimak złącze. Aby wesprzeć nową platformę, należy dodać opsiq_kb_<platform>_manifest() adapter i odniesienie go po nazwie. Pełna referencja: connectors/PLATFORM_CONNECTORS.md §5.

Webhooki

Niektóre złącza rejestrują haki internetowe z zewnętrzną platformą powiadomień o zdarzeniach w czasie rzeczywistym (nowe zamówienia, aktualizacje biletów itp.).

Śledzenie sprzedaży

Złącza e-commerce dostarczają dane o przychodach do tablicy rozdzielczej sprzedaży dla przypisywania i analizy.

💡
Złącza są skalowane w przestrzeni roboczej. Każdy obszar roboczy może mieć różne połączenia włączone z różnymi referencjami.WHMCS workspace wykorzystuje WHMCS złącze; a Shopify workspace wykorzystuje Shopify złącze.
Czy mogę użyć wielu złączy jednocześnie?+

Tak, możesz.Shopifydla zamówień orazStripedla płatności w tym samym miejscu pracy. AI łączy dane ze wszystkich włączonych złączy.

Co jeśli moja platforma nie jest na liście?+

Użyj Connector Builder do tworzenia własnego złącza dla każdej platformy z REST API. Albo sprawdzić Marketplace na wspólne-zbudowany złącza.

Czy złącza działają z samodzielnie hostowanymi OpsIQ?+

Tak, złącza działają identycznie w wersjach zarówno w chmurze jak i w autohostowych.

Łączniki

Umowa sprzedaży i rozliczeniowa złącza

Każdy złącze handlowe używa tego samego platformów- neutralnego kontraktu eventowego. WHMCS jest implementacją referencyjną, ale SaaS Bridge, sklepy, dostawcy płatności, złącza rynkowe i pakiety Connector Builder muszą przestrzegać tych samych zasad.

Co każde złącze handlowe musi opublikować

Jeden autorytatywny rejestr

Publish realised economic events to opsiq_sales_events through CommerceEventRegistry::normalize(). Do not build a connector-specific Sales table or make core analytics query a remote platform directly.

Stabilna tożsamość źródła

platforma jest ślimakiem rejestru złączy, takich jak whmcs, shopify lub opsiq_saas. traffic_source zawiera zweryfikowane przypisanie nabywania, gdy dostarczane; w przeciwnym razie korzystać z tej samej ślimaka, jak awaryjne. OpsIQ rozwiązuje przyjazną nazwę złącza w UI.

Niezdolność do działania

event_id musi być determistyczne. Mapa co najmniej jeden niezmienny order_ref, invoice_ref lub subscription_ref więc webhook ponownie próbuje i backfills uaktualnić to samo zdarzenie zamiast tworzenia duplikatu sprzedaży. service_ref identyfikuje dany produkt lub usługę, jeżeli taki istnieje.

Znacznik czasu źródła

occurred_at to czas płatności lub ekonomicznego zdarzenia, który jest zgłaszany przez platformę źródłową. Nigdy nie zastąp historycznych terminów płatności z czasem importu.

Pieniądze i FX

Wyślij kwotę źródłową i ważną trzyliterową walutę ISO. Jeśli ustawienie złącza umożliwia konwersję OpsIQ FX, raportowanie przelicza się na walutę sprawozdawczą w miejscu pracy; w przeciwnym razie raporty zachowują walutę magazynu lub platformy rozliczeniowej. Kod łącznika nie może być zaostrzony w walucie sprawozdawczej ani w kursie wymiany.

Cykl życia oparty na dowodach

Użyj nowego, odnowy, aktualizacji, zwrotu, kredytu lub nieznanego. Klasyfikacja z powodu faktury, subskrypcji lub relacji serwisowych, typu line- pozycji, lub innego autorytatywnego pola źródłowego. Powtórzenie zakupu przez tego samego klienta nie jest automatycznie odnawianie.

Granica sprzedaży

Tylko pozytywne płatnych nowych, odnowienie, upgrade lub prawnie nieznanych wpływów handlowych należą do sprzedaży & Konwersje. Refundacje są zgłaszane przez refundacji i net- dochody analityki. Kredyt na konto, portfele top-up, token topow- up i Dodaj fundusze pozostają billing- rejestr zdarzeń i nigdy nie liczą się jako sprzedaż, konwersje, wolumen zamówień, lub przychodów ze sprzedaży.

CRM pozostaje oddzielny

Transakcje CRM stanowią działalność rurociągową i deal. Nie są to sprzedaż platformy komercyjnej, chyba że podłączona platforma rozliczeniowa lub sklepowa emituje zrealizowane zlecenie płatne lub fakturę za pośrednictwem tej umowy.

Każdy sygnał płatniczy otwiera wiersz

Nie zależą od nazwy jednego zdarzenia. Kiedy platforma wysyła kilka potwierdzeń jednej płatności (zapłacona faktura, zamówienie wypłacone, transakcja dodana, płatność zakończona), każdy z nich może otworzyć wiersz rejestru po potwierdzeniu sprzedaży; odcisk palca na sprzedaż rozpada rodzeństwo w jednym wierszu.

Planowane uzgodnienie (umowa) 2.3)

A connector whose platform can list completed sales declares sales_reconciliation and implements SalesReconciliationInterface::reconcileSales(). Core re-reads the platform list on a schedule (once per workspace interval, bounded, cursored) through the same idempotent writer, so a dropped webhook cannot lose revenue. Conformance fails a package that can list history but does not reconcile. The Connector Builder derives the capability from the sales backfill action.

Pochodne prognozy

opsiq_conversions i podsumowania desek rozdzielczych są projekcje zgodności przebudowane z rejestru. Złącza nie mogą traktować projekcji jako finansowego źródła prawdy. Korekty umowy mogą ponownie ocenić wiersze pochodne bez usuwania podstawowej historii rozliczeń.

Granica platformy zdalnej

Zdalne złącze odczytuje swoją platformę za pomocą skonfigurowanej uwierzytelnionej APINigdy nie może zależeć od tabel bazy danych serwera. Dokładna uwierzytelniona domena site_key jest dostarczany przez ConnectorRegistry i musi być stosowany do każdego zapisu i backfill rejestru. Workspace lub zakres grupy jest tylko agregacją czasu read-; nie może nigdy poszerzyć przechowywanych własności zdarzenia.

Przykład Canonical paid- event

Znormalizowane wydarzenie handlowe
{
  "event_id": "acme_store:invoice:INV-1042",
  "event_name": "invoice.paid",
  "platform": "acme_store",
  "order_ref": "ORDER-884",
  "invoice_ref": "INV-1042",
  "subscription_ref": "SUB-28",
  "service_ref": "SERVICE-91",
  "status": "paid",
  "lifecycle_type": "renewal",
  "amount": 129.00,
  "currency": "USD",
  "traffic_source": "acme_store",
  "occurred_at": "2026-07-23 08:30:27"
}

Mapowanie budującego złącza

Kiedy sprzedaż i fakturowanie jest włączone w Connector Builder, ilość mapy, waluta, status źródła i data źródła, plus co najmniej jedno zamówienie, faktura lub subskrypcja referencji API Ugenerowany SalesIngest przechodzi każdy rząd przez ten sam standaryzator CommerceEventRegistry używany przez wbudowane i złącza rynkowe.

⚠️
Kredyty i fundusze Dodaj są celowo zatrzymywane dla historii rozliczeń, kontekstu bilansu klienta i analizy księgi rachunkowej. Wyłączenie ich ze sprzedaży nie usuwa ich; tylko zapobiega im to nadmuchiwaniu wyników handlowych.

lifecycle_type decyduje, co staje się CRM umowa

lifecycle_type OpsIQ czyta to, aby zdecydować, czy sprzedaż wchodzi do rurociągu CRM, więc każde złącze sprzedaży podejmuje decyzję o gazociągów, czy zamierza czy nie.

nowy

Otwiera zamkniętą umowę (nowy biznes).

odnowienie, modernizacja

Nie ma transakcji nowej działalności - wznowienie konwersji na innej krzywej prawdopodobieństwa i mieszanie ich niszczy obie prognozy.

zwrot kosztów, kredyt

Nigdy nie otwierają umowy, w żadnym trybie. Pieniądze zwrócone klientowi nie są wygraną.

pominięte / nieznane

Tylko dochody. Sprzedaż jest rejestrowana, ale nigdy nie dociera do rurociągu.

Jedna sprzedaż, jeden wiersz w księdze: tożsamość to SPRZEDAŻ, nie wydarzenie

Nie dopasowuj event_id i wstawić się. event_id is platform:eventName:externalId, która odpowiada "czy już przetworzyliśmy tę dostawę" i nie może odpowiedzieć "czy to już nagraliśmy tę sprzedaż". Platforma, która ogłasza jedną płatność dwa razy - jak invoice.paid i znowu jako payment.completed - mięta dwa razy i ląduje te same pieniądze, bez niczego do zderzenia i nic do ostrzegania.

💡
Znalezione na instalacji referencyjnej: sześć faktur z trzema wierszami w księgach, z trzech ścieżek kodowych przy użyciu trzech różnych event_id schematy. Wszystkie one nosiły 0.00 więc żadna suma nie wyglądała źle, a każdy późniejszy proces przywracania rzeczywistych kwot policzyłby jedną płatność trzy razy.

Zamiast tego należy zadzwonić do współdzielonego zapisu. Bazowa oblicza tożsamość sprzedaży (sale_fingerprint), dopasowuje istniejący wiersz na nim, zachowuje oryginał event_id w sprawie aktualizacji i filtrów do rzeczywistych kolumn:

Jedyny sposób, aby napisać rejestr sprzedaży
\OpsIQ\Commerce\CommerceEventContract::upsertSaleRow('opsiq_sales_events', $row);
Ta sama sprzedaż, wiele wydarzeń

favoice. paid, payment. completed and sale. complefied for one factory share one principe and update one row.

Wysokość refundacji w przypadku oddzielnego pozostania

Pieniądze wychodzące to inny fakt niż pieniądze przychodzące. Zwrot faktury zachowuje swoją tożsamość, więc nigdy nie może nadpisać płatności, którą odwraca.

Brak referencji, brak odcisków palców

Wiersz bez zamówienia, faktury, abonamentu lub odniesienia do usługi nie ma odcisków palców, więc dwa niepowiązane wiersze nigdy się nie zderzają tylko dlatego, że oba nie mają identyfikatora.

Priorytet odniesienia

invoice_ref, then order_ref, then subscription_ref, then service_ref — strongest first, so one sale keeps a stable identity.

Rejestr jest tylko adpend- tylko: nigdy nie przepisywać sprzedaży

Zwrot, anulowanie lub korekta jest nowy wpis datowany. Nigdy nie mutować rząd to koryguje. Przepisanie płatności do refundacji wygląda schludnie i łamie trzy rzeczy na raz:

Niszczy dochody brutto

Stopa sprzedaży brutto i refundacji przestaje być rozdzielna - a stawka zwrotu jest miarą, którą należy podać w przypadku odwrócenia.

To książka odwrócenia w niewłaściwym czasie

Marcowy zwrot ze styczniowej sprzedaży musi zmniejszyć Marsz. Przepisanie wiersza stycznia cicho przywraca zamknięty okres.

To łamie ścieżkę audytu

Wpis do księgi rejestrowej zapisuje to, co wydarzyło się w pewnym momencie. Korekty są przeciwstawnymi wpisami, czyli tak działa księgowość dwuetapowa od pięciu wieków.

Złącze informuje o odwróceniu zamiast jego zastosowaniu: powrót refunded_at oraz refund_amount obok własnego cyklu życia sprzedaży, i niech dzwoniący napisać zwrot jako swój własny rząd datowany w momencie zwrotu. Obie nie mogą się zderzyć, ponieważ sprzedaż odcisku palca oddziela zwrot ze sprzedaży.

💡
Ta sama zasada dotyczy kwot. Nie "napraw" przechowywanej kwoty do bieżącej wartości platformy: faktura rozliczona z kredytu rachunku legalnie zarejestrowanego 0 w czasie płatności, a pieniądze zostały już zarejestrowane, gdy klient się uzupełnił. Przywracanie wartości nominalnej liczy go dwukrotnie.

Umowa o klasyfikacji

OpsIQ decyduje o cyklu życia raz, in \OpsIQ\Commerce\SaleLifecycleClassifierZłącze deklaruje tylko, który z własnej platformy słowa oznaczają co, poprzez wdrożenie \OpsIQ\Connectors\SalesLifecycleConnectorInterface::salesLifecycleVocabulary(), a następnie wzywa wspólny klasyfikator. Nie ponownie wdrożyć rozumowanie.

Declare słownictwo, przekazać decyzję
public static function salesLifecycleVocabulary(): array
{
    return [
        'credit'             => ['addfunds'],                  // adds balance, sells nothing
        'upgrade'            => ['upgrade'],                   // resizes an existing commitment
        'recurring'          => ['hosting', 'domainrenew'],    // continues something owned
        'acquisition'        => ['domainregister'],            // obtains something new
        'recurring_prefixes' => ['domainaddon'],               // families that grow over releases
    ];
}

$lifecycle = \OpsIQ\Commerce\SaleLifecycleClassifier::classify([
    'explicit'    => $platformSaidSo,     // wins outright when present
    'line_types'  => $types,              // your platform's own line/item types
    'vocabulary'  => self::salesLifecycleVocabulary(),
    'is_order'    => $cameFromANewOrder,
    'is_refunded' => $moneyWentBack,
]);
💡
Prewencja jest stała i dzielona: wyraźna, następnie refundowana / anulowana, potem kredyt, a następnie uaktualnienie, potem is_order, a potem powtarzające się, a później nabywanie, a także nieznany. Upgrade znajduje się nad sprawdzaniem zamówienia, ponieważ platformy podnoszą zamówienie na aktualizacje zbyt; powtarzające siada poniżej niego, ponieważ pierwsza faktura nowego subskrypcji nosi typ powtarzającej się linii. Na dwuznaczny non-order sprzedaży klasyfikator zwiększa przychody i z dala od rurociągu.

Oznaczyć cały słownictwo platformy

Jest to awaria, która kosztuje najwięcej i wygląda najmniej źle. Złącze WHMCS dopasowane ['hosting','addon','domain'] - lista, która odczytuje jako kompletna. WHMCS nie emituje goły Domain typ dla linii domeny rzeczywistej; emituje DomainRegister, DomainRenew, DomainTransfer, PromoHosting, PromoDomain, DomainAddon* oraz UpgradeWszystkie przeskoczyły przez listę unknown: Faktury 1,288, trzy lata, bez błędów i bez linii logowania.

Każdy nowy klient importuje swoją historię poprzez backfill złącza, więc błąd klasyfikacji nie wpływa na jedno miejsce pracy - ma wpływ na każdą przestrzeń roboczą, która kiedykolwiek na pokładzie przez to złącze, w chwili, gdy najpierw spojrzeć na swój rurociąg. Weź słownictwo z dokumentacji platformy lub spis danych na żywo, i dopasować rodziny rośnie przez przedrostek Więc rodzeństwo, którego nikt jeszcze nie widział, klasyfikuje się z krewnymi zamiast znikać.

💡
Praktyczne sprawdzenie: policz ile własnych wierszy ląduje na nieznanym. Zdrowe złącze sprzedaży klasyfikuje prawie wszystko. Stały strumień nieznanych jest prawie nigdy danych nie masz - to słownictwo, którego złącze nigdy nie nauczyło się czytać.

Przywrócenie historii importowanej

Każdy dostarczony złącze sprzedaży OpsIQ realizuje to — WHMCS, Shopify, WooCommerce, osCommerce, SaaS Bridge, Stripe, BigCommerce and Magento 2. Treat it as expected, not optional: a customer imports their old records on day one, so a classification fix that cannot reach that history only helps people who signed up afterwards. Implement \OpsIQ\Connectors\SalesLifecycleRepairInterface::reclassifySale() za pomocą jakiegokolwiek per- rekord pobrać złącze już ma. tools/crm_backfill_sales_lifecycle.php Następnie naprawia importowaną historię złącza bez kodu domyślnego: suchy ciąg domyślnie, kopie się i weryfikuje liczbę wierszy przed napisaniem, odwracalne przez rejestr cofania, i nigdy nie pisze nieudanego odczytu jako odpowiedzi.

💡
Jeśli Twój złącze nie może ponownie odczytać przeszłych rekordów - tylko webhook- złącze - nie stub metody. Stub zwracając nieznany jest gorszy niż brak implementacji: backfill przepisze dobre wiersze jako niesklasyfikowany i zgłosić sukces. Wdrożenie interfejsu słownika tylko.
💡
Szczegółowe odniesienia do pakietu pozostają dostępne w złączach /CONNECTOR_EVENTS.md i złącza /PLATFORM_CONNECTORS.md w rozdzielczości źródłowej.
Łączniki

Umowa o świadczenie usług w zakresie transportu drogowego

Journey Intelligence akceptuje jedną kopertę zdarzeń z interfejsu przeglądarki, wbudowanych złączy, mostu SaaS, pakietów rynkowych i wyjściowych Connector Builder. Nazwy specyficzne dla platformy są tłumaczone na krawędzi; lejek, przypisanie i kod Inteligencji Strony zużywa tylko zdarzenia kanoniczne.

Izolacja i granice zaufania

Dokładny klucz domeny peerName

Każde zdarzenie jest związane z uwierzytelnioną domeną site_key. Złącze musi wziąć ten klucz z ConnectorRegistry lub jego autoryzowanego punktu końcowego, nigdy z niezaufanego organu żądania. Domeny prowadzą oddzielne rekordy; grupa domen jest tylko agregatem czasu read- time.

Tożsamość Idempotenta

event_id jest wymagany dla złączy i musi być determinacyjny dla tego samego wydarzenia rodzimego. Wciągi, haki i backfills uaktualniać jedno zdarzenie zamiast duplikować podróż lub sprzedaż.

Nazwa native plus canonical

Zachowaj source_event_name Aby uzyskać dowody i rozwiązywać problemy, następnie mapować go do event_name_canonicalAnaliza rdzenia nigdy nie może rozgałęzić się na ślimaku złączowym.

Wygrane z dowodów serwera

Obserwacja przeglądarki może rozpocząć lub wywnioskować podróż. Uwierzycielskie zdarzenia łączące potwierdzają podpisanie, logowanie, płatność, zakup, odnowienie, zwrot i inne wyniki końcowe. Ważny symbol korelacji związany z miejscem jest najsilniejszym połączeniem; niepoprawny token jest odrzucany i jego wbudowane identyfikatory nie są zaufane.

Prywatność

Wyślij tylko identyfikatory i pola potrzebne do zadeklarowanej podróży. Uszanuj zgodę, maskowanie i ustawienia retencji. Nigdy nie umieszczaj w nieruchomości uwierzytelniania, danych karty, tajemnic uwierzytelnienia lub prywatnych organów wiadomości.

Koperta kanoniczna

Koperta imprez wycieczkowych
{
  "contract_version": 1,
  "event_id": "myshop:order:884:paid",
  "source": "myshop",
  "source_event_name": "order.paid",
  "event_name_canonical": "commerce.purchase.completed",
  "site_key": "exact_domain_site_key",
  "occurred_at": "2026-07-23T08:30:27Z",
  "visitor_id": "optional-browser-visitor",
  "session_id": "optional-browser-session",
  "journey_id": "optional-journey",
  "attempt_id": "optional-attempt",
  "correlation_token": "optional-signed-token",
  "customer_ref": "C-42",
  "user_email": "[email protected]",
  "object_type": "order",
  "object_ref": "884",
  "order_ref": "884",
  "outcome": "succeeded",
  "evidence_level": "server_confirmed",
  "confidence": 1,
  "properties": {"amount": 129, "currency": "USD"}
}

Taksonomia kanoniczna

Używaj wąskiej nazwy prawdomównej. Obsługiwane rodziny to: strona zaręczynowa / wydarzenia CTA; zapisanie konta, login, MFA i reset hasła; etapy ołowiu i formularza; produkt, koszyk, checkout, płatności, zakup, subskrypcja, odnowienie i zwrot; wrażenia promocyjne i konwersje; help- center, czat i imprezy biletowe; zdarzenia bezpieczeństwa; oraz nazwy niestandardowe zdarzeń. Typowe nazwy terminali to account.signup.succeeded, account.login.succeeded, lead.form.succeeded, commerce.payment.succeeded, commerce.purchase.completed, commerce.subscription.renewed oraz commerce.refund.completed.

Zapytanie, potwierdzenie i porzucenie przeglądarki

Widget może działać bez złącza poprzez obserwację struktury strony, tworzenie działań, wyniki DOM i dziennik podróży odwiedzających. Dowody te pozostają wyraźnie klasyfikowane jako obserwowane lub wywnioskowane. Złącze dodaje autorytatywne potwierdzenie serwera i może korelować je z tą samą próbą przeglądarki. Porzucenie jest najpierw przechowywane jako kandydat; zostaje porzucone dopiero po oknie nieaktywności ustawionym w UI i tylko wtedy, gdy nie istnieje późniejszy powrót do stanu zdrowia lub sukces.

Przydział i dochody

Atrybut preferuje poprawny podpisany symbol korelacji, następnie dokładną podróż, próbę, sesję lub odniesienie do handlu, a następnie uzgodniony wykres tożsamości, a w końcu ograniczony mecz behawioralny. Niedopasowana sprzedaż pozostaje nieprzypisany. Wielkodotykowe wagi księgi muszą mieć całkowitą wartość 1. Strona Inteligencja przypisana przychody czyta ten rejestr; kredyty, portfele top-up, token top-ups i Dodaj fundusze nigdy nie są nabywane konwersji.

⚠️
Model atrybutu, okna odblaskowe, obsługa ruchu bezpośredniego, minimalna pewność siebie, czas porzucenia i definicje lejek są policy UI. Kod łącznika nie może ich utrudniać.

manifest i budowniczy łącznika

Deklaracja podróży łącznika
{
  "capabilities": ["sales", "journey_events"],
  "journey_capabilities": {
    "journey_events": true,
    "payments": true,
    "subscriptions": false,
    "correlation_token": false,
    "backfill": true
  },
  "journey_event_mappings": [{
    "source_event_name": "order.paid",
    "event_name_canonical": "commerce.purchase.completed",
    "field_map": {
      "order_ref": "order.id",
      "customer_ref": "order.customer_id",
      "amount": "order.total",
      "currency": "order.currency",
      "occurred_at": "order.paid_at"
    }
  }]
}

Declare tylko funkcje pakiet naprawdę dostarcza. Connector Builder potwierdza mapowanie i generuje ten sam platformów- neutralny adapter używany przez pakiety pierwszej partii. Zażywanie podróży akceptuje jedno zdarzenie lub ograniczoną partię 100 poprzez wygenerowany autoryzowany punkt końcowy integracji.

💡
Rejestr handlowy pozostaje finansowym źródłem prawdy. Przewoźnik-to-travel most publikuje server- potwierdzone wyniki i godzi przypisanie po istniejącym idemstrong rejestr upsert, więc jedna płatność nigdy nie staje się dwie sprzedaży.
Łączniki

Jak działają działania w zakresie ptasiej grypy

Każde złącze deklaruje zbiór działań: rzeczy, które AI może zrobić przez zewnętrzną platformę. Akcje są pomostem pomiędzy "AI mówi" i "Ai robi".

Działania w zakresie ptasiej grypy
Jak działają działania w zakresie ptasiej grypyZapytanie klienta mapowane do karty akcji typu delete-, następnie lista kontrolna: sprawdzone pozwolenie, potwierdź, API dzwonił.Jak działają działania w zakresie ptasiej grypyprzestrzeń robocza"Anuluj moją subskrypcję"klientAIcancel_subscriptiondeletepotwierdzenie wymaganeparamy: subscription_id (z kontekstu)RODZAJE DZIAŁAŃreadpisaćdeleteSprawdzone uprawnienia i rolaPotwierdzasz akcję.API wywołana · wynik zgłoszony1DECLAREDKażde złącze wymienia działania2GATEDZezwolenie + potwierdzenie3THEN RUNAPI, wynik
Żądanie staje się deklarowaną akcją (wpisany odczyt / zapis / usunięcie), która jest zdate- sprawdzone, potwierdzone, następnie wykonane i zgłoszone.

Cykl życia działań

1
Klient o coś prosi.

"Anuluj moją subskrypcję". AI identyfikuje to wymaga działania "cancel_subscription".

2
Zezwolenia na kontrole ptasiej grypy

Czy ta akcja jest dozwolona? Czy jest włączona? Czy obecny użytkownik ma właściwą rolę?

3
Parametry gromadzenia się ptasiej grypy

Akcja wymaga identyfikatora subskrypcji. AI sprawdza to z kontekstu klienta lub pyta klienta.

4
Potwierdzenie

W przypadku działań destrukcyjnych lub o dużym oddziaływaniu, AI prosi o potwierdzenie przed wykonaniem.

5
Wykonanie

W ramach działania wzywa się do stworzenia platformy zewnętrznej API.

6
Wynik

AI informuje klienta o wyniku.

Rodzaj działania

Czytać akcje

Sprawdź dane bez zmiany niczego. Przykłady: list_orders, get_customerBezpieczne, bez potwierdzenia.

Pisz akcje

Tworzenie lub modyfikacja danych. Przykłady: create_ticket, update_orderMoże wymagać potwierdzenia.

Usuń działania

Usuń dane. Przykłady: cancel_subscription. Zawsze wymagają potwierdzenia.

Działania HTTP

Declared in actions.json, generyczny API calls zdefiniowany w sposób zgłoszony.

Znaczniki zdolności

Opcjonalne pole peraction "zdolność" w actions.json, tag klasy neutralnej dla konektorów (np. "bilety" na czytanie / oglądanie biletów ",ticket_create"za otwarcie biletu). OpsIQ bramy całej klasy jednolicie na każdym złączu: bilet odczytuje spadek z SI, gdy operator wyłącza AI Ticket Świadomość, i tworzenie biletów jest zarezerwowane dla OpsIQwłasnego kompozytora (więc narzędzie do tworzenia złącza nie może go powielić). OpsIQ Złącznik Builder ujawnia to jako spadek zdolności na akcję.

Działania w ramach kodeksu

Wdrożony w PHP w klasie złączy. Pełna kontrola nad logiką.

Przykład definicji działania
{
  "lookup_order": {
    "label": "Look up an order",
    "description": "Find an order by ID or email",
    "method": "GET",
    "endpoint": "/admin/api/2024-01/orders.json",
    "params": {
      "order_id": { "type": "string", "label": "Order ID" },
      "email":    { "type": "email",  "label": "Customer email" }
    }
  }
}
Łączniki

Zbudowanie złącza

Złącze Builder pozwala na stworzenie kompletnego złącza dla każdej platformy z REST API. Brak kodowania dla podstawowych złączy.

Zbudowanie złącza
Kreator ŁącznikówZłącze no- kodowe: nazwa, typ auth, podstawa URL, mapowanie akcji, przechodzący test i przycisk publikowania.Kreator Łącznikówprzestrzeń roboczaKreator ŁącznikówNazwaMoja platformaAuthOAuth 2.0(PKCE)Baza URLhttps://api.example.com/v2DziałanieGET/customers → list_customersBadanie zostało przeprowadzoneZłącze do opakowania1NO-CODENazwa, auth, baza URL2ANY APIKey, Lorer, Basic, HMAC, OAuth3PUBLISHInto /connectors/<slug>/
Wyceluj budowniczego w dowolnym REST API Ustaw auth, base URL i działania, przetestować go i opublikować złącze robocze. Nie potrzebny kod.

Kompletny dostawca API pokrycie

Każdy wygenerowany API złącze może odsłaniać osobne rdzenne API Czytać i rdzennych API Napisz działania. Ucenione działania pozostają preferowane; akcje rodzime obejmują punkty końcowe dostawcy dodane później. Runtime obsługuje REST, GraphQL, JSON, forma, XML, surowe i wieloczęściowe ciała, ograniczone paginacje,API-nagłówki wersji i idepotencja przy zachowaniu referencji wewnątrz ustawień złącza workspace.

⚠️
Pakiety na rynku pochodzą z /marketplace_connectors oraz połączone /connectors. Zwiększyć wersję pakietu, zregenerować umowę i dokumentację, uruchomić testy zgodności, a następnie ponownie podpisać i opublikować nową wersję Marketplace.

Asystent budowniczego złącza

Asystent ma sześć kroków, pokazane jako zakładki na górze. Możesz skakać między nimi swobodnie, i Zapisz szkic w stopce trzyma pracę w każdym momencie.

1
Tożsamość i profil

Nazwa, ślimak, opis i ikona, następnie wybierz profil umowy: Standard API, Handel, Helpdesk, Skrzynka pocztowa, Wywiad witryny, Most SaaS, Lokalna platforma PHP, lub Platforma bez API kiedy platforma nie służy do wywołania i OpsIQ musi zainstalować most. Profil wybiera kompletny punkt wyjścia; można nadal dostosować indywidualne możliwości.

2
Auth

Wybierz wzorzec uwierzytelniania, którego używa platforma i wypełnij jej pola. Wprowadź tutaj także prawdziwe dane testowe: są one używane do testu połączenia na następnym kroku i nie są przechowywane po opublikowaniu.

3
Badanie

Wprowadź API podstawa URL i zweryfikować punkt końcowy, a następnie wykonać test połączenia na żywo za pomocą referencji z etapu 2Zrób to przed zdefiniowaniem jakichkolwiek działań, jeśli auth lub podstawa URL To nie tak, że każda akcja, którą potem napiszesz nie powiodła się z tego samego powodu i będziesz debugował złe rzeczy.

4
Działania

Określić każdą operację: nazwę, metodę HTTP, ścieżkę punktową, parametry, mapowanie pola odpowiedzi i ustawienia niezawodności opisane poniżej. Od tego momentu można wykonać każde działanie indywidualnie w stosunku do live API.

5
Wyzwalacze

Mapa zdarzeń webhook platforma wysyła na OpsIQ wydarzenia, tak aby rzeczy, które dzieją się na platformie może rozpocząć pracę w OpsIQ.

6
Przegląd, umowa o świadczenie usług i publikacja

Review every action, trigger and capability. Enterprise profiles expose the generated queue, worker, hook, migration, ticket-mirror, attachment and conflict contract before publishing. Publishing writes the package into /connectors/<slug>/.

⚠️
Publikowanie NIE prowadzi pakietu conformance. Publikuje tylko waliduje formę kreatora i emituje ostrzeżenia, które nie blokują. Pełny pakiet - manifest, pliki funkcji, identity- token umowy i sprawdzenie Bridge- działa po naciśnięciu Dry- run i ponownie w czasie instalacji. Naciśnij Dry-run przed statkiem, za każdym razem.

Co publikacja robi, że formularz nie pokazuje

Pięć zachowań generatora zaskakuje ludzi. Żaden nie jest robakiem; wszystkie z nich będą kosztować popołudnie, jeśli spotkasz ich przez przypadek.

Jedno pytanie decyduje o przejściu: czy platforma obsługuje API?

Odbierz krok po kroku.1poprzez wybranie trybu dostępu do danych (lub "Platforma bezAPI"profil).APItryb deklarowania native_api and emits the <slug>_api_call passthrough. Bridge mode declares platform_bridge zamiast tego i STRIPS native_api nawet jeśli starszy spec go nosił, więc manifest, wygenerowana klasa i ekspertyzy nie może się z tym nie zgodzić. ai_brain_aware dodaje się w obu kierunkach.

SILENCE oznacza "maAPI"

Builder podąża za odpowiedzią; nie wypracowuje prawdy dla siebie, a domyślny kiedy nic nie jest powiedziane jestAPIWięc nie...APIPlatforma musi ACTIVELY tak powiedzieć - wybierz "Platforma z noAPI"profil, ustawić dostęp danych do mostu, lub tick platform_bridge; any one of the three is enough and they cannot contradict each other. Skip the question on a platform with no API and you are back to the old failure: a dead <slug>_api_call the model keeps reaching for. This used to be stamped unconditionally, so the trap is now escapable rather than gone.

Test połączenia domyślnie GET /ping

Jeśli pozostawisz ścieżkę weryfikacji puste, Builder pisze /ping do wygenerowanego złącza i do profilu.jsonprawie żadna prawdziwa platforma nie obsługuje tej trasy, więc Test Connection nie powiodło się z HTTP404na każdej instalacji i odczytuje jak błąd w konfiguracji klienta, a nie wadą pakietu. Ustaw ścieżkę weryfikacji, że platforma rzeczywiście odpowiada. Dla złącza mostowego, wskazać go na swój własny punkt diagnostyczny - to dowodzi całego łańcucha w jednym wywołaniu: most jest uruchomiony, klucz pasuje, a most może dotrzeć do bazy danych.

Republikacja wciąż przepisuje twoje ręcznie edytowane

Możliwości teraz śledzić odpowiedź data- dostępu, więc nie dryfują. Wszystko inne generowane nadal robi: edytuj ContextProvider. php lub inny emitowany plik i następna publikacja zastępuje go. Jednym chronionym wyjątkiem jest plik mostowy - kreatora tylko nadpisuje most z własnym markerem, więc ręcznie napisany jeden zostaje sam.

Republishing usuwa pliki

Un- tick zdolność i następna publikacja usuwa plik dostawcy. Hand- edits do dowolnego wygenerowanego pliku - ContextProvider.php przede wszystkim - są nadpisane bez ostrzeżenia. Kopiuj dostosowania najpierw, lub przejąć własność pakietu przez usunięcie.opsiq- Budowniczy.json(po czym czarodziej nie będzie już nim zarządzał).

release_status jest zawsze podgląd

Czarodziej nie ma dla niego kontroli. Pakiet przeznaczony do wysyłki jako produkcja musi mieć release_status zmieniono ręcznie settings.json — i że edycja łamie podpis, więc ponownie podpisać później.

Podpis dowodzi integralności, nie pochodzenia

Pakiety Builder są podpisane przez ten symetryczny klucz instalacji. Wykrywa to manipulację. Nie dowodzi, kto napisał pakiet, a każda instalacja trzymająca ten sam klucz może stworzyć taki sam podpis.

Kolizje ślimaków są sprawdzane tylko w jednym drzewie

Publikowanie odmawia ślimaka, który już istnieje w/connectors/.Nie patrzy na to./marketplace_connectors/,więc ręcznie autorski pakiet pierwszej partii z tym samym ślimakiem może zakończyć się cieniem.

💡
Asystent nie posiada kroku wiedzy o autoryzacji. Plik wiedzy opisujący platformę jest generowany dla Ciebie z nazwy, opisu, typu auth i działań, które zdefiniowałeś, i jest wczytywany do SI, gdy połączenie jest włączone.

Określenie działania (krok 4)

Każda akcja ma następujące ustawienia. Wymagane są tylko pierwsze cztery; kontrola odpoczynku, który może ją uruchomić i jak ostrożnie.

Klucz działania i etykieta

Klucz jest tym, co nazywa AI; etykieta jest tym co czyta człowiek. Klucze są automatycznie pacespaced z ślimakiem złącza, więc dwa łączniki mogą mieć "list_orders" bez zderzenia.

Metoda HTTP

GET, POST, PUT, PATCH lub DELETE.

Ścieżka URL

Dołączony do podstawy URL Użyj. {name} dla posiadaczy miejsc, na przykład /opportunities/{id}/stage

Parametry

Dla każdego parametru wybierasz również, gdzie on się znajduje: ciało, ścieżka, zapytanie lub nagłówekParametr ścieżki wypełnia {placeholder}; parametr zapytania jest załączony do URL.

Mapowanie odpowiedzi

Powiedz, które pole w odpowiedzi JSON oznacza co, który jest nazwą klienta, który to e-mail, który stanowi sumę zamówień. To jest to, co pozwala AI odczytywać dane platformy zamiast zgadywać na niego.

Kto może go użyć?

Twój zespół (admin AI), signed- in klientów (chat klienta), zarówno, jak i asystent pisarski. Działania Klienta działają tylko dla signed-in klienta, a pola tożsamości są zablokowane do nich automatycznie, więc jeden klient nie może zapytać o innego.

Wymaga potwierdzenia

Człowiek musi to zaakceptować, zanim akcja się rozpocznie.

Destrukcyjny

Zaznacza akcję jako skasowanie lub zmianę stanu. Używane do ostrzegania przed uruchomieniem.

Wymagane zezwolenie

Administrator musi posiadać to zezwolenie na prowadzenie akcji w ich imieniu; wszyscy administratorzy zawsze przechodzą manage_integrations, manage_general, manage_billing, manage_sales_bridge, manage_knowledge, manage_appearance, manage_behavior, manage_permissions, manage_dangerzone, reply_to_chats, escalate_to_ticket, send_agent_emaillub żadnego, co oznacza uwierzytelniony admin.

Opis / podpowiedź dotycząca ptasiej grypy

Opcjonalnie, ale warto pisać. Mówi AI kiedy osiągnąć dla tej akcji, na przykład "Użyj tego, gdy admin prosi o zmianę etapu transakcji". Dobrą wskazówką jest różnica między działaniem AI używa poprawnie a jednym ignoruje.

Zdolność

Opcjonalny znacznik klasy, albo bilety (odczyt biletu lub lookup) lub ticket_create (otwiera bilet) OpsIQ bramka całej klasy naraz, na przykład, ukrywanie biletu odczytuje kiedy operator wyłącza świadomość AI bilet.

Ścieżka listy

Opcjonalnie. Dla punktów końcowych, które zwracają listę, ścieżka kropkowana do tablicy, na przykład dane lub data. items

Ścieżka błędu

Opcjonalnie. Pole ciała, którego obecność oznacza niepowodzenie połączenia, na przykład error.message, przydatne dla APIs które zwracają HTTP 200 w przypadku niepowodzenia.

Uruchom

Każde działanie można uruchomić z tym krokiem przeciwko API na żywo, więc można naprawić złą ścieżkę lub nazwę pola zanim ktoś inny go używa.

⚠️
Domyślnie chronione są akcje zapisu. Każda akcja przy użyciu POST, PUT, PATCH lub DELETE rozpoczyna się wymagając zezwolenia manage_integrations oraz To jest celowe. Nowa akcja pisania nie kończy się, a nie pozwala AI zmieniać dane bez nadzoru. Możesz zmienić obie w działaniu, ale je świadomie.
💡
Aby móc dzwonić z czatu klienta, akcja musi być tylko read-: zostawić zarówno wymagane potwierdzenie i destruktywne bez ticked. Akcja klient może uruchomić, że również zmienia stan nie jest coś, co kreatora pozwoli Ci wysłać przez przypadek.

Haki do sieci (krok 5)

Krok Triggers daje haczyk URL zarejestrować się w swojej platformie, i weryfikuje każde żądanie, które na niej dociera.

Nagłówek podpisu

Nagłówek platformy oznacza, na przykład X- Hub- Signature-256.

Algorytm podpisu

HMAC- SHA1, HMAC-SHA256 lub HMAc- Scha512.

System podpisu

Prosty, prosty heks lub bazowy 64 digest. Albo styl Stripe-, t =..., v1 =... format używany przez Stripe i kilka platform, które go skopiowały.

Podpis przedrostek

Opcjonalnie. Niektóre platformy prefiksują strawę, na przykład sha256 =. Zostaw ją pustą, jeśli twoja nie.

Mappingi zdarzeń

Mapowanie każdego zdarzenia, które platforma wysyła na zdarzenie OpsIQ powinno zostać podniesione.

Automatyczne rejestrowanie haka

Jeśli Twoja platforma ma API do zarządzania własnymi hakami WWW, nie trzeba rejestrować URL Otwórz ręcznie. Auto- rejestrować ten haczyk na włącza i wskazać na dwa działania określone w kroku 4:

Działanie haka WWW

Zawołana, gdy administrator włącza złącze. Podasz nazwę parametru, który nosi URL, opcjonalnie ten, który posiada listę zdarzeń oraz ścieżkę w odpowiedzi, która zawiera identyfikator nowego haka.

Działanie haka internetowego Delete- webhak

Złącze jest wyłączone, używając identyfikatora uchwyconego powyżej, więc wyłączenie złącza zatrzymuje również wysyłanie platformy do martwego punktu końcowego.

Możliwości, które można włączyć

Profile i możliwości są zdefiniowane przez 2.2 Umowy Złącza. Możliwości generowane i deklaratywne są emitowane bezpośrednio; możliwości przedsiębiorstw generować EnterpriseExtension.php rusztowania z przewodem w cyklu życia.

Działania

Operacje AI może działać na platformie: lista zamówień, znaleźć klienta, wydać zwrot kosztów.

Wyzwalacze

Otrzymuj haki z platformy i przekształcaj je w wydarzenia OpsIQ.

Bilety na AI

AI Travel i odpowiedź Copilot na bilety, które pozostają na platformie. Wybierz punkt końcowy, który zwraca jeden bilet z jego odpowiedzi i mapy pól; OpsIQ czyta nić przez niego.

Skrzynka pocztowa i kontakty

Pokaż pocztę klienta w ich osi czasu, wyślij z umowy i zsynchronizuj książkę adresową do OpsIQ CRM.

Import klientów

Strona przez listę klientów i importować każdy z nich jako kontakt OpsIQ. To jest to, co działa przycisk Import.

Kontekst

Wciśnij dane na żywo z platformy do każdej rozmowy o SI.

Tożsamość

Dowiedz się, który z Twoich klientów jest odwiedzającym, i pokazać ich profil i zakupy na bilecie.

Sprzedaż i fakturowanie

Wydarzenia związane z dochodami i dane dotyczące MRR są wprowadzane do tablic rozdzielczych OpsIQ.

Bilety przychodzące

Przekręć bilety i maile na platformie poprzez haczyk w wątki wsparcia OpsIQ.

Odpowiedzi na wniosek

Post OpsIQ personel odpowiada na platformę, na której pochodzi gwint.

Synchronizacja użytkowników

Importuj konta personelu do użytkowników admin OpsIQ.

Synchronizacja

Importuj swoje działy wsparcia do OpsIQ.

Promowanie ukierunkowania i paszy dla produktów

Niech Promocja Studio cel na fakty wiesz o osobie, i renderować swoje prawdziwe produkty wewnątrz promocji.

Dostawca studia ankietowego

Wyświetl sprawdzone przez służby fakty z badania, zbiegłe zmienne i ograniczone strony CRM Outreach odbiorcy poprzez dedykowany SurveyProvider. php. To nie ponownie czas trwania promocji.

Indiańskie blokowanie IP

Kiedy OpsIQ bloki IP, zadzwoń do własnego bloku platformy API Więc blok jest tam również egzekwowany.

Wydarzenia związane z bezpieczeństwem

Otrzymuj blokadę...IP sygnały o zagrożeniu z OpsIQ.

Wiedza o platformie dla ptasiej grypy

Każde złącze, które budujesz, zawiera krótkie odniesienie opisujące czym jest twoja platforma i co jej działania czynią. Administrator OpsIQ AI czyta go za każdym razem, gdy połączenie jest włączone, więc rozumie twoją platformę zamiast tylko zobaczyć listę nazw akcji. Jest to generowane dla Ciebie.

API przepustowość

Złącze zawsze dostaje ogólne-cel wywołania tak, aby AI może osiągnąć punkt końcowy nie zdefiniował działania wpisane do. Użyj działań wpisanych tam, gdzie można; jest to właz ucieczki.

Kontrakt na łączniki kanoniczne 2.2

Wersja umowy: 2.4 · 57 capabilities · 8 profiles.

Profile złączy

standard_api · Standard REST or GraphQL API

Actions, triggers, OAuth/API-key authentication and optional context/identity mappings. Capabilities: actions, triggers, native_api, ai_brain_aware.

commerce · Commerce and billing platform

Customers, orders, sales, subscriptions, billing, promotions and journey events. Capabilities: actions, triggers, journey_events, sales, sales_reconciliation, billing, sync_orders, customer_import, survey, promo_audience, promo_feed, context, identity.

helpdesk · Helpdesk and ticket platform

Inbound tickets, outbound replies/notes, customer roster, AI triage and bidirectional ticket mirroring. Capabilities: actions, triggers, inbound_ticket, outbound_reply, outbound_note, ai_tickets, customer_import, survey, context, identity, ticket_mirror, ticket_merge, attachment_bridge, conflict_resolution.

mailbox · Mailbox and email provider

Inbound/outbound mail, address-book sync, multi-account OAuth and CRM timeline integration. Capabilities: inbound_email, outbound_email, mailbox, email_mailbox, oauth, actions, customer_import, ai_reply.

site_intelligence · Site Intelligence data provider

SEO, analytics, search-console, local-search or monitoring provider with scheduled sync. Capabilities: actions, triggers, site_intelligence, seo, scheduled_workers, durable_queue.

saas_bridge · SaaS bridge

Deep two-way SaaS integration with customers, billing, identity, tickets, webhooks, queues, attachments and workers. Capabilities: actions, triggers, webhook, context, identity, customer_import, survey, journey_events, sales, sales_reconciliation, billing, inbound_ticket, outbound_reply, ticket_mirror, ticket_merge, attachment_bridge, durable_queue, scheduled_workers, database_migrations, conflict_resolution, enterprise_hooks, admin_assets.

no_api_bridge · Platform with no API (OpsIQ installs a bridge)

For a self-hosted PHP application that serves no callable API. The wizard generates a signed bridge file the operator drops into their own site, plus the typed actions that read and write through it. Capabilities: actions, platform_bridge, ai_brain_aware.

local_php_platform · Local PHP platform bridge

WHMCS-style local hooks, database access, two-way tickets, billing/customer sync, queues and migrations. Capabilities: actions, native_data, context, identity, customer_import, survey, journey_events, sales, sales_reconciliation, billing, inbound_ticket, outbound_reply, ticket_mirror, ticket_merge, attachment_bridge, durable_queue, scheduled_workers, database_migrations, conflict_resolution, enterprise_hooks, admin_assets.

Zdolności kanoniczne

działania

Universal actions. Capability version: 1.0. Mode: generated. Runtime methods: registerActions. Package files: actions.json.

wyzwalacze

Inbound event triggers. Capability version: 1.0. Mode: generated. Runtime methods: handleWebhook. Package files: actions.json.

hak

Inbound webhook endpoint. Capability version: 1.0. Mode: generated. Runtime methods: handleWebhook.

journey_events

Universal Journey Event Contract mapping. Capability version: 1.1. Mode: generated. Interfaces: OpsIQ\Connectors\JourneyEventConnectorInterface. Package files: settings.json.

kontekst

AI context providers. Capability version: 1.0. Mode: generated. Runtime methods: contextProviders. Interfaces: OpsIQ\Connectors\ContextConnectorInterface. Package files: ContextProvider.php.

guest_lookup

Guest record lookup without login (reference + proof match). Capability version: 1.0. Mode: generated. Runtime methods: contextProviders. Interfaces: OpsIQ\Connectors\ContextConnectorInterface. Package files: GuestLookupProvider.php.

tożsamość

Admin/customer identity providers. Capability version: 1.0. Mode: generated. Runtime methods: identityProviders, detectAdmin, detectCustomer. Interfaces: OpsIQ\Connectors\IdentityConnectorInterface. Package files: IdentityProvider.php.

sales

Sales and revenue ingestion. Capability version: 1.2. Mode: generated. Interfaces: OpsIQ\Connectors\CommerceConnectorInterface. Package files: SalesIngest.php.

sales_reconciliation

Scheduled sales-ledger reconciliation against the platform. Capability version: 1.0. Mode: generated. Runtime methods: reconcileSales. Interfaces: OpsIQ\Connectors\SalesReconciliationInterface.

rozliczanie

Cross-platform billing snapshot. Capability version: 1.0. Mode: generated. Runtime methods: billingProviders. Interfaces: OpsIQ\Connectors\BillingConnectorInterface. Package files: BillingProvider.php.

payments

Payment-provider capability bus. Capability version: 1.0. Mode: generated. Runtime methods: paymentsCapabilities.

handel

Sell through chat: canonical commerce role map. Capability version: 1.0. Mode: declarative. Package files: commerce_roles.json.

inbound_ticket

External ticket/email to OpsIQ ticket ingestion. Capability version: 1.0. Mode: generated. Runtime methods: handleWebhook. Interfaces: OpsIQ\Connectors\TicketMirrorConnectorInterface.

outbound_reply

Reply mirroring to the external platform. Capability version: 1.0. Mode: generated. Runtime methods: pushReply. Interfaces: OpsIQ\Connectors\TicketMirrorConnectorInterface.

ticket_merge

Ticket merges applied on the platform (native merge or private transcript note). Capability version: 1.0. Mode: generated. Runtime methods: mergeTickets. Interfaces: OpsIQ\Connectors\TicketMergeConnectorInterface.

sync_users

Staff/customer synchronisation. Capability version: 2.0. Mode: generated. Runtime methods: listCustomers. Interfaces: OpsIQ\Connectors\CustomerImportConnectorInterface. Package files: SyncImport.php.

sync_departments

Department/team synchronisation. Capability version: 1.0. Mode: generated. Package files: SyncImport.php.

sync_orders

Order roster and order-event synchronisation. Capability version: 1.0. Mode: declarative. Interfaces: OpsIQ\Connectors\CommerceConnectorInterface.

sync_products

Product, catalog and inventory synchronisation. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

sync_projects

Project, issue and workspace synchronisation. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

customer_import

CRM customer roster import. Capability version: 2.0. Mode: generated. Runtime methods: listCustomers, backfillChunk. Interfaces: OpsIQ\Connectors\CustomerImportConnectorInterface.

security_events

Receive and emit security events. Capability version: 1.1. Mode: generated. Runtime methods: securityCapabilities, syncBlockedIp, removeBlockedIp. Interfaces: OpsIQ\Connectors\SecuritySyncConnectorInterface.

security_native_block

Native remote IP/CIDR blocking. Capability version: 1.0. Mode: generated. Runtime methods: syncBlockedIp, removeBlockedIp. Interfaces: OpsIQ\Connectors\SecuritySyncConnectorInterface.

survey

Survey identity, audiences, recipients and variables. Capability version: 1.0. Mode: generated. Runtime methods: surveyAudienceCatalog, surveyAudienceFacts, surveyVariableCatalog, surveyVariables, surveyRecipientPage. Interfaces: OpsIQ\Connectors\SurveyConnectorInterface. Package files: SurveyProvider.php.

reply_feedback

Ticket reply feedback mirror (platform reply ratings land via the portal write method). Capability version: 1.0. Mode: generated. Runtime methods: replyFeedbackCatalog, pullReplyFeedback. Interfaces: OpsIQ\Connectors\ReplyFeedbackConnectorInterface.

promo_audience

Promotion targeting facts. Capability version: 1.0. Mode: generated. Runtime methods: subscribers. Interfaces: OpsIQ\Connectors\PromotionConnectorInterface.

promo_feed

Promotion product/content feed. Capability version: 1.0. Mode: generated. Interfaces: OpsIQ\Connectors\PromotionConnectorInterface.

email_mailbox

Mailbox bus, outbound mail and address-book sync. Capability version: 1.0. Mode: generated. Runtime methods: emailAccounts. Interfaces: OpsIQ\Connectors\MailboxConnectorInterface.

inbound_email

Receive inbound email. Capability version: 1.0. Mode: declarative. Runtime methods: poll, handleWebhook. Interfaces: OpsIQ\Connectors\MailboxConnectorInterface.

outbound_email

Send outbound email. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions. Interfaces: OpsIQ\Connectors\MailboxConnectorInterface.

mailbox

Mailbox connector. Capability version: 1.0. Mode: declarative. Runtime methods: emailAccounts. Interfaces: OpsIQ\Connectors\MailboxConnectorInterface.

ai_tickets

AI triage and Inbox Copilot for remote tickets. Capability version: 1.0. Mode: generated. Runtime methods: loadTriageContext. Package files: AiOperations.php.

ai_reply

AI-assisted reply drafting. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

ai_brain_aware

Connector expertise supplied to Admin AI. Capability version: 1.0. Mode: generated. Package files: ai_expertise_admin.md, ai_api_reference.md.

native_api

Native API passthrough. Capability version: 1.0. Mode: generated. Runtime methods: registerActions.

platform_bridge

Signed platform bridge (for platforms with no API). Capability version: 1.0. Mode: generated. Runtime methods: registerActions. Package files: bridge/.

native_data

Local database/platform data adapter. Capability version: 1.0. Mode: declarative. Runtime methods: nativeDataProviders. Interfaces: OpsIQ\Connectors\NativeDataConnectorInterface.

crm

CRM capability provider (calendar, enrichment, telephony or customer data). Capability version: 1.0. Mode: declarative. Runtime methods: crmCapabilities. Interfaces: OpsIQ\Connectors\CrmCapabilityConnectorInterface.

block_registry

Remote sender block-registry synchronisation. Capability version: 1.0. Mode: declarative. Runtime methods: blockSender, unblockSender, isSenderBlocked. Interfaces: OpsIQ\Platform\BlockRegistryInterface.

inbound_comment

Inbound comment ingestion. Capability version: 1.0. Mode: declarative. Runtime methods: handleWebhook.

outbound_note

Outbound private note. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

outbound_notification

Outbound notification delivery. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

oauth

OAuth 2.0 authorisation. Capability version: 1.0. Mode: generated.

reviews

Review ingestion and response. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

lokalne

Local search/location data. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

seo

SEO data and actions. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

site_intelligence

Site Intelligence provider. Capability version: 1.0. Mode: declarative. Runtime methods: siteIntelligenceProviders. Interfaces: OpsIQ\Connectors\SiteIntelligenceConnectorInterface.

analityka

Analytics data provider. Capability version: 1.0. Mode: declarative. Runtime methods: analyticsCapabilities.

comms

Communications/video-meeting provider. Capability version: 1.0. Mode: declarative. Runtime methods: commsCapabilities.

admin_assets

Connector-provided admin/account/public browser assets. Capability version: 1.0. Mode: generated. Runtime methods: adminAssets. Interfaces: OpsIQ\Connectors\AdminAssetConnectorInterface.

enterprise_hooks

Platform-native hooks and lifecycle callbacks. Capability version: 1.0. Mode: extension. Package files: EnterpriseExtension.php.

durable_queue

Durable outbox/inbox queue and retry policy. Capability version: 2.0. Mode: extension. Package files: EnterpriseExtension.php.

ticket_mirror

Bidirectional ticket mirror with conflict handling. Capability version: 2.0. Mode: extension. Interfaces: OpsIQ\Connectors\TicketMirrorConnectorInterface. Package files: EnterpriseExtension.php.

attachment_bridge

Attachment upload/download transfer. Capability version: 2.0. Mode: extension. Package files: EnterpriseExtension.php.

database_migrations

Connector-owned schema migrations. Capability version: 1.0. Mode: extension. Package files: EnterpriseExtension.php.

scheduled_workers

Connector-owned scheduled/background workers. Capability version: 1.0. Mode: extension. Package files: EnterpriseExtension.php.

conflict_resolution

Two-way sync conflict strategy. Capability version: 1.0. Mode: extension. Package files: EnterpriseExtension.php.

⚠️
Specyfikacje Builder pozostają autorytatywnym źródłem. Umieść specyficzne zasady biznesowe na platformóww wygenerowanych punktach rozszerzenia; cykl życia pakietu, kolejki, pracownicy, migracje i testy zgodności pozostają zarządzane przez Builder-.

Ustawienia niezawodności na każdym działaniu

Retry

Ile razy próbować ponownie nieudanego połączenia, z backupem, który podwaja każdą próbę. Tylko timeout, błędy 429s i 5xx są ponownie próbowane; 4xx jest błędem twojej prośby i powtarzanie to po prostu spalić limit stawki.

Limit stawki

Perminutowy sufit dla tej akcji, więc zajęty wyzwalacz nie może hamować platformy. Zostaw go w 0 bez ograniczeń.

Czas

Jak długo czekać na platformę, zanim się poddasz.

Potwierdzenie

Trzeba, żeby człowiek zatwierdził działanie.

Typy uwierzytelniania

Krok 2 oferuje siedem wzorów. Wybierz jeden, który pasuje do platformy API dokumentacja, generator emituje odpowiedni klient HTTP dla niego.

API klucz w nagłówku

Klawisz statyczny wysłany jako stały nagłówek, na przykład X-API-Key. Podasz nazwę nagłówka i etykietę, którą powinien wyświetlić formularz admin. To wysyła klucz tylko jako nagłówek; jeśli Twój API oczekuje, że klucz będzie parametrem zapytania, użyj własnych nagłówków lub złącza pełnego kodu.

Symbol użytkownika

Token sent as Authorization: Bearer <token>. Common for modern APIs.

Aut podstawowy

Nazwa użytkownika i hasło, zakodowane na podstawie 64- kodowanego w nagłówku Autoryzacja. Wybierz etykiety wyświetlane w formularzu administracyjnym.

HMAC- signed

Klucz publiczny plus sekret, z podpisanym ciałem zapytania. Podasz nagłówek podpisu, nagłówkę klucza i nagłówka znacznika czasu, którego oczekuje twoja platforma.

OAuth 2.0 (referencje klienta)

Serwery-to- serwer, bez interakcji z użytkownikiem i bez przekierowania. Podasz token URL i opcjonalny zakres; admin dostarcza identyfikator klienta i tajemnicę. Użyj tego, gdy platforma wydaje referencje do aplikacji, a nie osoby.

OAuth 2.0 (Połącz przycisk)

Przepływ autoryzacji- kod z PKCE, dla Stripe, Shopify, Slack i QuickBooks stylu aplikacji. Dajesz autoryzację URL, token URL i zakres. Po publikacji, admin kliknie Połącz się na złączu, autoryzuje na swojej platformie, i OpsIQ przechowuje token odświeżający i mennice dostępu żetonów na żądanie. URI aby zarejestrować się w swojej OAuth aplikacja jest wyświetlana na stronie ustawień złącza.

Własne nagłówki

Forma wolna JSON Mapa nagłówka dla czegokolwiek, czego wzory powyżej nie obejmują, na przykład {"X-API- Klucz ":"{api_key}"," X- Tenant ":"{tenant_id}"}. Każdy posiadacz miejsca staje się polem na formularzu administracyjnym.

💡
PKCE dotyczy tylko przepływu przycisku Connect-. Przepływ uwierzytelniania klienta nie ma przekierowania i nie ma kroku użytkownika, więc PKCE nie stosuje się do niego.

Style paginacji

Offset

Wykorzystuje parametry przesunięcia i ograniczenia. Przykład:? offset =100& limit =50.

Strona

Używa numeru strony. Przykład:? page =3&per_page=50.

Kursor

Używa tokena kursora z poprzedniej odpowiedzi.

Nagłówek odnośnika

Używa nagłówka odpowiedzi Link z relem = "next".

Zaawansowane: niestandardowy kod PHP

connektor. php RETURNS instancji. Nie deklaruje nazwanej klasy, że OpsIQ poluje na. Poniższe nazwy metod są tymi, których wymaga ConnectorInterface; uzyskanie jednego błędu jest śmiertelne przy obciążeniu, a nie ostrzeżenie.

connector. php - realny kontrakt, minimalny i nieprzerwany
<?php
/* connectors/myplatform/connector.php */
declare(strict_types=1);

use OpsIQ\Connectors\AbstractConnector;

require_once __DIR__ . '/Client.php';

return new class extends AbstractConnector {

    /* ── the three identity methods. NOT identifier()/label(). ── */
    public function slug(): string        { return 'myplatform'; }
    public function name(): string        { return 'My Platform'; }
    public function description(): string { return 'Orders and customers from My Platform.'; }

    public function capabilities(): array { return ['actions', 'context']; }

    public function settingsSchema(): array
    {
        $f = __DIR__ . '/settings.json';
        if (!is_file($f)) return [];
        $j = json_decode((string)file_get_contents($f), true);
        return is_array($j['settings'] ?? null) ? $j['settings'] : [];
    }

    /* ── NOTE THE ARGUMENT. testConnection() with no parameter is a fatal. ── */
    public function testConnection(array $settings): array
    {
        try {
            $resp = \OpsIQ\Connectors\MyPlatform\Client::callWithSettings($settings, 'GET', '/me', [], []);
            $code = (int)($resp['http_code'] ?? 0);
            return ($code >= 200 && $code < 300)
                ? ['success' => true,  'info'  => ['message' => 'Connection OK', 'http_code' => $code]]
                : ['success' => false, 'error' => "Verify endpoint returned HTTP $code"];
        } catch (\Throwable $e) {
            return ['success' => false, 'error' => 'Test failed: ' . $e->getMessage()];
        }
    }

    public function onEnable(array $settings): array  { return ['success' => true]; }
    public function onDisable(array $settings): array { return ['success' => true]; }

    public function handleWebhook(array $payload, array $headers, array $settings): array
    {
        return ['success' => true, 'note' => 'No triggers declared.'];
    }

    /* Inherited from AbstractConnector: reads actions.json for you.
     * Override only to ADD actions the manifest cannot express. */
    public function registerActions(array $settings): array
    {
        return parent::registerActions($settings);
    }
};
⚠️
Three things that fatal at class load rather than failing gracefully. The identity methods are slug(), name() and description() — not identifier() and label(). testConnection() TAKES an array of settings; a no-argument version is an incompatible signature. And there is no $this->http() or runAction() on AbstractConnector — HTTP goes through your own Client.php or through an action declared in actions.json.

Bilety lustrzane do rodzimego systemu biletów

Kiedy platforma posiada bilet, należy go porównać z OpsIQ ze złączem przy użyciu biletu, który jest najbardziej pomocny w dziedzictwie (utworzyć nowy bilet, add- response dla follower- ups). Emit i subskrypcji uniwersalnych wydarzeń biletów w swoim złączu subscribers() metoda, ticket.created, ticket.replied, ticket.updated, ticket.deletedAuto- odpowiedź, eskalacja, SLA i CSAT wszystkie hakować te same zdarzenia, więc dziedziczyć je bez dodatkowego kodu.

Jeśli sobie poradzisz ticket.deletedTy też zajmiesz się połączeniami. Kasowanie kuponu połączonego merged_into i nie jest przesyłany do złącza, które deklaruje ticket_merge; połączenie przybędzie raz jako ticket.merged Zamiast tego, możesz się połączyć na swojej platformie zamiast zamknąć tam połączony bilet. Zobacz Możliwość połączenia biletów (umowa) 2.4).

Powiedz kto napisał wiadomość otwierającą

Bilet zawsze jest zamiast klient, ale wiadomość otwarcia może być napisany przez pracownicy: agent otwierający bilet w imieniu klienta lub proaktywnie sięgający po niego. Każdy punkt pomocy wspiera ten projekt, więc jest częścią uniwersalnego ticket.created Zawarcie umowy zamiast czegoś, co każde złącze rozwiązuje prywatnie.

author_type

klient (domyślnie) lub admin. Pomiń go i klienta jest zakładany.

author_id

Identyfikator personelu, kiedy author_type = admin. Nigdy id klienta.

author_name

Agent lub dział wyświetla nazwę.

author_email

Adres agenta. NIGDY klient jeden. Wiadomość pracowników pod e- mail klienta jest błędem w raportowaniu i audycie.

To nie jest kosmetyczne. Konsumenci czytający author_type decydowanie, czyja kolej jest. client pozostawia auto- odpowiedź kwalifikuje się do odpowiedzi na wiadomość, którą napisał twój własny agent, i sprawia, że echo platformy tego otwarcia wygląda jak świeże wiadomości klienta, który następnie ląduje jako duplikat i przerzuca bilet do Odpowiedź. Mapa sygnału platformy na nim w złączu normalizator zdarzeń- nigdy w konsumentach.

Blokowanie scentralizowane

Kiedy agent blokuje nadawcę, to ma zastosowanie w całym co kanał natychmiast (e- mail, czat, portal, widget i każdy łącznik bliźniaczy), ponieważ blok jest egzekwowany centralnie, zanim jakiekolwiek złącze zobaczy wiadomość. Złącze odziedziczy go nie robiąc nic. Nie ma przychodzącej pracy do wdrożenia i nie ma sposobu, aby go źle.

Opcjonalną połową jest: wychodzące: poinformowanie o tym, że klient został zablokowany tutaj. Wdrożenie go tylko wtedy, gdy platforma może wyrazić coś równoważnego.

zdolności ()

Musi zawierać block_registry I klasa musi wdrożyć BlockRegistryInterface. Flaga jest roszczeniem; interfejs jest gwarancją. Rejestr wymaga obu.

blockSender($b)

Rodzaj odbioru (e-mail news124; domena|ip), wartość, powód, admin_id, expires_at, site_keyZwraca [wynik, szczegóły? remote_ref?].

unblockSender($b)

Odblokowanie czegoś, czego nigdy nie zablokowano, to nie błąd.

isSenderBlocked($b)

Dla pojednania, więc dryfowanie jest zgłaszane raczej niż odkryte przez klienta. Zwraca [wynik, zablokowany?].

Wartości rezultatu

OK

Stosowane na swojej platformie. Zawarte są w nim remote_ref, gdy masz id warty nagrania.

noop

Już w stanie wymaganym.

unsupported

Twoja platforma nie ma równoważnego pojęcia.

nie powiodło się

Mogłaś to zrobić i poszło źle. Włączaj szczegóły; ląduje w ścieżce audytu.

Poniżanie to prawidłowa odpowiedź. Wiele platform nie ma pojęcia "blokować tego nadawcy" i oferują tylko zawieszenie RACHUNT, które zatrzymuje fakturowanie, logowania i usług zamiast po prostu poczty wsparcia. Mapowanie "agent zablokował adres spamu" na "zamknąć konto klienta" pozwoliłby jeden niewłaściwie kliknięty blok zakończyć usługi płacącego klienta. Jeśli to jest jedyna dźwignia masz, zwrócić unsupported i zostaw to w spokoju.

Degustacja obejmuje również przypadek, w którym platforma może zrobić, ale nie pozwoli. Sprawdź na API, nie funkcja: dźwignia, która istnieje tylko w systemie zarządzania platformą jest dźwignią złącze nie ma.

Pracowany przykład · Zendesk (implementacja referencyjna)

Czytaj connectors/zendesk/connector.php alongside this. It is short, and every branch below is a decision you will face too.

Wyślij e-mail → ok

PUT /api/v2/users/{id} z zawieszonym = true. Zawieszony użytkownik końcowy ma nowe żądania przekierować się do zawieszeń Bilety zamiast otworzyć jeden, naprawdę ten sam pomysł jak blokowanie nadawcy, i to zatrzymuje nie rozliczanie ponieważ Zendesk użytkownicy końcowi nie mają żadnych. Zwraca id użytkownika jako remote_ref.

domain → nieobsługiwane

Zendesk CAN zawiesić całą domenę, ale tylko poprzez zawieszenie: słowo kluczowe w adresie Centrum blocklist textarea, i żaden API nie pisze tego pola. Funkcja istnieje; dźwignia nie.

ip → nieobsługiwane

Nie istnieje żaden blok IP na poziomie ticket- level.

nieznany adres → noop

Zendesk nie może wcześniej zawiesić adresu, którego nigdy nie widział. Nic do zrobienia nie jest porażką, a lokalny blok nadal zatrzymuje bilet.

agent lub admin → nieobsługiwane

Odmowa. Zawieszenie personelu zablokowałoby kolegę z działu pomocy. Adres personelu, który osiąga blocklist jest o wiele bardziej prawdopodobne, że będzie błędem niż instrukcja, sprawdź rolę przed podjęciem działań na nim.

Ten ostatni wiersz jest wart skopiowania. Kontrakt nie może zatrzymać mapowania bloku na coś destrukcyjnego, więc każde złącze musi sam zdecydować, co będzie odmówić. Odmawiając głośno, z detail operator potrafi czytać, bije posłuszeństwo.

Zgłoś się szczerze. Zauważ, jak mało z tych wierszy jest okTo jest prawidłowy wynik, nie luka: blok domeny nadal działa (jest egzekwowany w rdzeniu w momencie jego zapisu); po prostu nie może być odbity na zewnątrz. ok za coś, czego nie zrobiłeś, powiedziałby operatorowi, że blok dotarł do platformy, kiedy nigdy nie opuścił OpsIQ.

Zasady

Lokalny blok zawsze wygrywa

Jest napisane PRZED jesteś nazywany i stoi cokolwiek zwrócić. Nie można zapobiec operatora blokowania kogoś.

Nigdy nie rzucaj

Rzut jest traktowany jako nieobsługiwany i rejestrowane. Zwrot nie powiódł się z szczegółami, więc powód przetrwa.

Bądź idemstrong

Ten sam blok może być ogłoszony więcej niż raz.

Wracaj szybko.

Fan- out jest synchroniczny z operatorem kliknij. Kolejka wolna praca zamiast trzymanie życzenie otwarte.

Nie dzwoń ponownie.

Nigdy nie blokuj ponownie OpsIQ od swojego opiekuna. Rejestr pomija połączenie pochodzące, ale drugi hop będzie pętla.

Każde ogłoszenie jest napisane do opsiq_block_registry_log (działanie, rodzaj, wartość, powód, admin, pochodzenie, ślimak złącza, wynik, szczegóły i znacznik czasu) tak, aby operator mógł zobaczyć blok przychodzący z platformy zamiast od agenta, i co każde złącze z nim zrobiło.

Wciśnij odpowiednie przyciski

Ręka attachments tablica do tworzenia ()/addReply(). Każdy element posiada plik w jednym z trzech kształtów:

content_b64

Base64 bajtów plików RAW, używać do plików za auth (większość spraw przychodzących). OpsIQ odkoduje go i ponownie-host pliku dla Ciebie. Najbardziej przenośny kształt.

url / source_url

A public https URL (np. a Zendesk content_url). Must be https; passes a SSRF / allowlist check before it is warged.

stored_path

Zapisany przez Ciebie plik referencyjny (co rodzimy kompozytor uploader produkuje).

Items also accept filename, mime_type and size_bytes. Caps: 12 MB/file, ~24 MB total, 10 files per call. Most platform read APIs return attachment Tylko nazwy plików (nie bajty), więc niezawodny wzór przychodzący jest: przeczytaj bajty, gdzie kod już działa (wewnątrz platformy lub z haka webhook ładunku), bazując na nich i wysłać je jako content_b64 na imprezie.

Wyjazd (OpsIQ → Twoja platforma). Kiedy agent dołącza plik, ticket.replied loadload daje pliki odpowiedzi jako stored_path pozycji w ramach OpsIQ sklep plików. Przeczytaj je i wciśnij własny format platformy, i sprawdź dokumenty platformy, kodowanie ma znaczenie: WHMCS chce base64_encode(json_encode([[name,data]])) (JSON, nie serializuje); Zendesk przesyła nieprzetworzone bajty do /uploads.json dla symbolu wtedy ustawia comment.uploads; Gmail wysyła wieloczęściowy / mieszany RFC -822 message base64url- encoded in raw; Amazon SES inbound attachments need the S3 receive action (the SNS path caps at 150 KB).

Platformy zdalne: API + haczyk, nigdy innych tabel aplikacji

Jeśli Twoja platforma jest oddzielna aplikacja lub baza danych (prowadzony przez SaaS, zdalny WHMCS, inny DB na tym samym serwerze), nigdy nie pisz bezpośrednio swoich tabel: krzyżowa baza danych zapisuje ziemie na jakimkolwiek połączeniu jest aktywny i cicho pomija prawdziwe wiersze. Zawsze: wychodzące = wywołanie platformy podpisane REST API (odpowiedzi, status, dział, usuwa); przychodzący = platforma POST podpisany haczyk, Twój handleWebhook() weryfikuje i zwalnia dopasowanie ticket.* event. Aby zatrzymać pętlę lustrzaną, należy oznaczyć to, co naciśniesz znacznikiem początkowym (np. mirror_origin:'opsiq'); platforma echa na haku, a Twój przychodzący opiekun pomija swoje własne echo. Sprawdź OpsIQEvents::isMirroredEvent() na szczycie każdego opiekuna.

Status lustra, priorytet i dział

Odpowiedź automatycznie przenosi status, a agent Odpowiedź → answered, a klient Odpowiedź → customer_reply; lustrzane, że w ten sam sposób. Dla wyraźnych zmian subskrybować ticket.updated i czytać payload['changes'] (np. {status:'closed'}).

Status: OpsIQ jest zestaw kanoniczny open, customer_reply, answered, in_progress, pending, closed. Zachowaj małą mapę dwukierunkową do słownictwa platformy, i upewnij się, że kolumna rzeczywiście akceptuje wartości piszesz ( ENUM brak wartości zostaje po cichu zrzucony do pustki przez niektóre bazy danych). Departament: id departamentu OpsIQ jest bez znaczenia po twojej stronie, Nigdy go nie wyślij.. Wyślij deskryptor (name, email oraz slug) i rozwiązać go przeciwko własnym wydziałom przez e- mail → nazwa → ślimak, więc "Billing Department" ląduje w do Dział rozliczeń zamiast ogólne. Trigger na obu ticket.escalated oraz department_id zmiana ticket.updated.

💡
Status / priorytet / przedmiot / dział / usuwanie lustrzanego obrazu jest chroniony przez przegubowe łączniki (mirror_status_changes, mirror_priority_changes, mirror_subject_changes, mirror_department_changes, mirror_deletes) czytaj przez wspólny OpsIQ\ Pomocnik MirrorOptions. Zamieść ten blok w Twoim settings.json i każde złącze lustrzane łaskotki odczytuje przełączanie identycznie.

Połącz bilet z produktem / usługą

Jeśli klient wybierze określony produkt podczas otwierania biletu, zaznacz podpowiedź, aby agent zobaczył skoncentrowaną kartę serwisową (za pomocą jednego kliknięcia "zobacz inne produkty" modal dla reszty).

related_service_id

Preferred: the service id exactly as it appears in your IdentityProvider::lookupCustomerServices() list (each service's id). Unambiguous match.

related_service_label

Kod usługi platformy, np. WHMCS S396 (usługa396) / D11 (domena11). OpsIQ rozkłada opcjonalną literę typu + id i pasuje do listy usług, z ochroną typu, tak więc kod domeny nigdy nie pasuje do produktu o tym samym identyfikatorze. Wystawić odpowiadający ref na każdej usługi dla dokładnego dopasowania.

related_domain

Nazwa domeny; dopasowana jako podciąg do szczegółów / domen każdej usługi.

💡
Zbuduj listę załączników raz, w powyższym kształcie, oraz OpsIQ zajmuje się resztą: host URLs są przekazywane przez i base64 zawartość jest przechowywana i ponownie hostowane dla Ciebie. Nigdy nie trzeba pisać per- platformy obsługi plików.
⚠️
Klucze akcji są małe litery, cyfry i podkreślenia. Builder akceptuje3do80znaki, a także pozwala kropki; sklep akcji akceptuje2do100znaki bez kropek, więc trzymaj się liter, cyfr i podkreśleń i spełniają oba. Dodawanie działania nie tworzy trasy AJAX, więc nie ma nic do regeneracji - ponownie zapisać złącze i jest synchronizowane.

Niech AI zbuduje to dla ciebie.

Nie musisz wypełniać sześciu kroków ręcznie. Opisz złącze własnymi słowami i OpsIQ 's AI projektuje całą specyfikację, uruchamia ją przez ten sam walidator, którego używa kreator i pokazuje plan zanim cokolwiek zostanie zapisane na dysku. Są dwa miejsca do zrobienia tego, a oni produkują ten sam pakiet.

W czarodzieju

Otwórz Złącza→+ Dodaj złącze→Złącze do budowyNa kroku 1 zobaczysz ✨ Zbuduj to dla mnie. Wpisz co jest złącze - platforma, coOpsIQpowinien przeczytać i co powinien napisać, a kto go używa - dodaćAPIroot jeśli wiesz, i naciśnij go. Asystent wypełnia każdy krok od szkicu, a przeglądasz i edytować dokładnie tak, jak gdybyś miał wpisane.6ten sam panel pojawia się jak ✨ Uzupełnij sztuczną inteligencję, więc można poprosić o zmianę ("również czytać faktury") zamiast edycji pól.

Pytając OpsIQ

Otwórz Zapytaj OpsIQ kopiot gdziekolwiek w admin i powiedzieć, co chcesz. Nigdy nie trzeba nazwać działania lub wiedzieć, że czarodziej istnieje.

1
Poproś o to.

Na przykład: "Zbuduj mi złącze dla Trello. Powinien on zawierać listę moich planszy i list, czytać karty i tworzyć kartę na tablicy. Trello używa klucza API plus token". Projekt tego złącza Karta. Twoja wiadomość jest skrótem, więc umieścić platformę, odczyty i pisma w nim.

2
Potwierdź projekt

Nic jeszcze nie jest napisane. Copilot opracowuje specyfikację, waliduje ją i odpowiada na plan: co robi złącze, działania, które będzie ujawniać (pisze zaznaczone), założenia, na które on się odpowiedział, oraz pytania, na jakie musisz odpowiedzieć - zwykle które referencje do dostarczenia. Projekt jest zaparkowany pod identyfikatorem i pozostaje dostępny dla godzin 24.

3
Powiedz "zbuduj to"

Drugi pilot pokazuje Budowanie card naming the connector and its slug. This one writes: it publishes the package into /connectors/<slug>/. Confirm it and you get the path back, together with the setting you still have to fill.

4
Wprowadź dane uwierzytelniające i włącz

Nowe złącze jest publikowane, ale NIE jest włączone i nie posiada tajemnic. Otwórz jego ustawienia, wprowadź klucz API lub token, naciśnij Badanie- Więc... WłączDopóki tego nie zrobisz, nic nie zrobi.

💡
Obie karty potrzebują kliknięcia. Projekt krok nie pisze nic; etap budowy jest oznaczony destrukcyjny i zawsze pyta. AI nie może opublikować złącza, włączyć jeden lub wprowadzić credilential na własną rękę.

Czym jest i co nie może być AI

Walidator jest ścianą

Skreślona specyfikacja przechodzi przez dokładnie to samo potwierdzenie () przycisk publish asystenta używa. Jeśli nie przejdzie, AI otrzymuje błędy i próbuje ponownie, do trzech razy, a następnie odmawia w własnych słowach walidatora. Projekt, który nie zostanie nigdy pakiet.

Nie pisze żadnych dokumentów.

Projekt określa wzór uwierzytelniania i pola ustawień; nigdy nie zawiera klucza, symbolu ani sekretu. Wypełniasz je później na stronie ustawień złącza.

Odpowiada pytaniami, nie zgadywaniem.

Wszystko, czego nie mógł wiedzieć - identyfikator konta, który region, który z dwóch punktów końcowych planu ujawnia - jest raczej pytaniem o plan niż cichym założeniem.

Wymyślony punkt końcowy zawodzi głośno

AI mówi się, aby nigdy nie wymyślać ścieżek, ale żaden model nie jest doskonały. Zła ścieżka publikuje jako działanie, które nie udaje jej na żywo test na kroku Działania lub po raz pierwszy działa - to nigdy nie jest cichy sukces.

Pakiet jest zwykły.

To co produkuje to normalny pakiet Builder: te same generowane pliki, ten sam kontrakt, ta sama podpis, edytowalny w kreatora, usuwa się ze strony Connectors. Nie ma oddzielnego rodzaju "złącza AI".

Twój model robi szkic

Jakość jest zgodna z modelem skonfigurowanym w ustawieniach → AI. Mały, tani model rysuje poprawne, ale proste złącze i zadaje więcej pytań; silniejszy model dostaje więcej punktów końcowych po raz pierwszy. Zmień go w konfiguracji AI; nic innego nie musi się zmienić.

⚠️
Kopilot może uruchamiać działania, które ta instalacja faktycznie zarejestrowała. Jeśli brakuje działań Connector Builder - plan, który nie zawiera ich lub rola bez manage_connectors - drugi pilot mówi, że to raczej nie jest karta, która by się nie powiodła.
Łączniki

Sprzedam przez czat: mapa roli handlowej

Złącze, które może sprzedać - platforma sklepowa, system rezerwacji, brama płatnicza - oświadcza, która z jego operacji własnych odpowiada OpsIQrole kanoniczne handlu. Zdecyduj się na to, a złącze pojawia się w ustawieniach → Rozmowa z klientem → Sprzedam przez czat automatycznie; przestan deklarowac i znika. Nie ma listy do rejestracji na.

Plik: commerce_roles.json

Deklaracja mieszka we własnym pliku w pakiecie root - istnienie akt jest roszczeniemNie może żyć w connector_contract.json: plik ten jest regenerowany przez narzędzia do pakowania, a jego schemat odrzuca nieznane klucze, więc ręcznie dodany blok nie udałoby się potwierdzić i następnie być nadpisane.

commerce_roles.json
{
  "commerce": {
    "roles": {
      "catalog_search": { "operation": "acme_search_products", "transport": "http" },
      "customer_lookup": { "operation": "acme_customer_lookup", "transport": "http" },
      "quote":          { "operation": "acme_quote_order",     "transport": "http" },
      "payment_methods": { "operation": "acme_payment_methods", "transport": "http" },
      "order_get":      { "operation": "acme_get_order",       "transport": "http" },
      "order_create":   { "operation": "acme_create_order",    "transport": "http",
                          "recovery": "acme_get_order" }
    },
    "customer_ordering": {
      "enabled": true,
      "version": 1,
      "mode": "direct_order",
      "audience": "clients_only",
      "account_flow": "existing_client",
      "payment_flow": "connector_methods",
      "identity_parameter": "external_customer_id",
      "quantity_parameter": "quantity",
      "label": "Acme Store",
      "checkout_hosts": [],

      "transaction_kind": "purchase",
      "decision_mode": "immediate",
      "payment_timing": "on_confirmation",
      "reversibility": "reversible",
      "cancellation_flow": "platform_only",
      "fulfilment_presence": "remote_delivery",
      "notify_flow": "platform_automatic",
      "customer_fields": {"name": "required", "email": "required", "address": "required", "phone": "optional"},
      "client_tools": ["catalog_search", "catalog_get", "quote"],
      "account_timing": "before_quote"
    }
  }
}

Zasady i dlaczego każdy z nich istnieje

Role są zamkniętym słownikiem

OpsIQ nigdy nie wyciąga roli z nazwy działania. Rola, która nie jest zadeklarowana nie istnieje - deklarowanie jest cały kontrakt.

Operacja musi być jedną z twoich akcji.

Każda operacja musi istnieć w Twoim actions.json. Wtyczka deklaruje zdolność, która nie może działać, i jest ona wynurzona do klienta jako "Mogę sprawdzić, że dla Ciebie", a następnie nic.

Czytelna rola nigdy nie wskazuje na destrukcyjną operację.

Przeczytaj role (katalog, dostępność, cytat, kolejność wyszukiwania) musi mapować do operacji, które nic nie zmieniają na swojej platformie.

Rola zapisu nigdy nie mapuje do operacji rekordu ogólnego

Mapowanie order_create do surowej wkładki stołowej - record.create, db.insert, recordCreate, każda pisownia, każdy separator - jest odrzucany strukturalnie. Wiersz napisany bezpośrednio omija ceny platformy, blokady akcji i potwierdzenia poczty, produkując zamówienie własny system nie w pełni wierzy.

Rola w piśmie deklaruje operację odzyskiwania

Idempotent lookup, że odpowiedzi "zrobił mój ziemi pisania?". Najniebezpieczniejszym czasem jest ten po swojej platformie może już stworzył zamówienie; bez regeneracji Lookup jedynymi opcjami są ponowne próby ślepej lub stracić go.

Role płatnicze, wobec których stoi dostawca, wiążą się z trzema dodatkowymi obowiązkami

Pakiet, który rozmawia bezpośrednio z dostawcą płatności musi również zadeklarować payment_profile (waluty, kraje, metody i środowisko - nieokreślone środowisko jest sposobem na to, że integracja testowa wymaga płatności na żywo), webhook_verify (system rzeczywistego podpisu dostawcy; odmówiono ogólnego porównania sekretów) oraz event_map (zdarzenia dostawcy na tych kanonicznych). Złącze handlowe, które tylko wdraża record_payment otrzymuje już zweryfikowane dowody płatności kanonicznej; nie może udawać, że jest bramą.

Zdecyduj, jak klienci mogą zamawiać z podłączonego sklepu

Złącze handlowe i złącze payment- gate są różne kontrakty. Złączony klient zamawiający sklep, wybrać najgłębszy tryb platformy może udowodnić. Wybór jest pakowany wewnątrz podpisanego commerce_roles.json; Sklep i Klient Czatu ponownie przeczytać go w czasie realizacji. Usunięcie roli lub wyłączenie / wyłączanie złącza dlatego unieważnia wcześniej złożone propozycje zamiast pozostawiając niestawne autorytety za.

catalog_only

Mapy catalog_search lub catalog_get. OpsIQ może wyszukać i wyjaśnić produkty, ale nie może pokazać polecenia wykonywalnego lub potwierdzenie checkout. Każdy pakiet pozostaje na tym prawdomównym domyślnym dopóki jego własne wpisane cytaty i zamówienie / zamówienia działania przejść głębszy kontrakt i Certyfikacja Marketplace; nigdy nie informuj wsparcie transakcyjne z nazwy platformy.

platform_checkout

Również mapy quote oraz platform_checkout. Działania handlowe - nie OpsIQ rdzeń - zwraca checkout_url, checkout_reference i cytat kanoniczny. URL musi być HTTPS, jego nazwa hosta musi pasować customer_ordering.checkout_hosts lub hosta HTTPS otrzymanego z checkout_host_setting, i cytat może żyć nie więcej niż15minuty. Produkt permalink, lokalnie zmontowany koszykURLlub powrótURLnie jest to zdolność do dokonywania zakupów.

direct_order

Również mapy quote, order_create oraz order_get, z order_create.recovery. Core odświeża cytat bezpośrednio przed wykonaniem, dostarcza klucz idepotencji i pyta o operację odzyskiwania po każdym nieznanym wyniku przed jakimkolwiek ponownym spróbować. payment_flow=opsiq_gateway, musi dodatkowo mapować record_payment OpsIQ aktywnie weryfikuje transakcję bramki, dopasowuje kwotę, walutę, kupca i referencję zamówienia, pisze odniesienie do dostawcy raz, a następnie czyta fakturę / zamówienie z powrotem. A mark_invoice_paid status przełączania jest odrzucany, ponieważ nie zawiera żadnych dowodów płatności. Działanie tworzenia musi powołać się na własną logikę cenową, giełdową i zamówień biznesowych; surowe bazy danych pisze są odrzucone.

Weryfikacja tożsamości i to, co operator może zmienić

Kiedy OpsIQ jest właścicielem płatności, klient czatu musi dotrzeć email_otp przed utworzeniem zamówienia -OpsIQe-mail6-cyfrowy kod i pyta o niego. To nie jest coś, z czego wystaje złącze; to jest podłoga zapewnienia, którego wymaga jądro wykonania order_create.

Jeden wyjątek i kto go kontroluje

Operator może zaakceptować niezweryfikowany adres tylko wtedy, gdy Twój złącze deklaruje fulfilment_presence: customer_present. Gość hotelowy musi przyjechać, więc zły adres źle kieruje paragon i pokój jest nadal tam. Declare remote_delivery - wysyłany, dostarczany, pobierany - i weryfikacja jest wymagana niezależnie od ustawień operatora, ponieważ wartość pozostawia na sile samego adresu. minimum_assurance lub reversibility: irreversible usuwa również zdolność operatora do pominięcia go.

Jak długo trwa kod

Domyślnie 30 minut, operator- configurable z5minut do24godzin. Klient widzi live odliczanie renderowane w ich własne timezone, nie operator. Przeterminowany kod mówi tak jasno i oferuje nowy zamiast zgłaszania nieprawidłowego kodu - klient wpisujący poprawny-ale-stary kod nie popełnił błędu, i mówiąc im, że mają wysyła je w tej samej pętli.

Co klient musi zapewnić: customer_fields

Nazwa i e-mail są zawsze wymagane i są gromadzone najpierw. Declare address, phone oraz company as required lub optional aby pasować do firmy: sklep, który dostarcza paczki deklaruje wymagany adres; hotel zgłasza wymagane telefony, ponieważ gość, którego nie może zadzwonić nie ma kontaktu z rezerwacją. Asystent prosi o nich w rozmowie przed cytowania, a OpsIQ odmawia złożenia zamówienia, które nie wymaga pola. Budowniczy zapisuje znormalizowaną mapę, w tym bazowy, więc umowa na dysku jest wyraźna.

Kiedy konto zostanie utworzone: account_timing

at_order (domyślnie) pozwala na zapis zlecenia utworzyć konto kupującego po raz pierwszy. before_quote kiedy Twoje ceny platformy na konto -WHMCSpodatki według własnego profilu klienta i kwotowania w walucie klienta - orazOpsIQTworzy konto za pośrednictwem Twojego customer_create działania jak tylko wymagane pola są znane, następnie pyta o ofertę dla tego konta, więc karta potwierdzenia niesie całkowitą będziesz rzeczywiście faktura. account_flow: connector_signup.

Asystent pobiera, nie jest napisane: client_tools

Z Create zamówień, asystent nigdy nie czyta wklejony katalog. commerce_catalog_search (puste zapytanie jest przeglądem rodzin produktów; wyniki powyżej limitu są wymienione przez nazwę), commerce_catalog_get dla jednego elementu w całości, oraz commerce_quote, który wyczuwa podpisany karta potwierdzenia server- bok przez te same ściany ścieżka złącza zawsze miał. Jedno narzędzie na czasownik, Twoje połączenie jako parametr, więc sklep z sześciu łączników dostaje trzy narzędzia zamiast osiemnastu. client_tools ogranicza wartość domyślną; brak oznacza każdy mapowany jeden, a catalog_only potwierdzenie nigdy nie jest narzędziem: przycisk karty w sieci, dokładne CONFIRM komenda na kanale, i nic co mówi model nie wydaje pieniędzy.

Co należy nosić w swoich katalogach

id, name, a customer- safe summary, a category lub rodziny produktów (w ten sposób słowo klienta znajduje element, którego nazwa jest kodem), currency, unit_amount_minor, available, oraz input_schema Nazwanie pól wymaga zamówienia. Wyszukiwanie zdobywa słowa klienta przeciwko nazwie, rodzinie, cyklu i podsumowaniu.

Odmów z powodu, który klient może podjąć na

Powrót {"success":false,"error":"…","missing":["domain"],"retryable":true} gdy wartość jest zła lub brakuje. Odmowa, która nazywa missing lub retryable dociera do klienta werbatem; nagie niepowodzenie pozostaje generyczne, więc nic wewnętrznego przecieku.

waluta Geo i awaryjny przystanek

Kiedy operator włącza walutę Geo (Klient Chat → Behaviour), klient czyta ceny w swojej walucie na każdej powierzchni - czat tekst, karta internetowa, kanałowa karta tekstowa i otwierająca waluta sklepu - używając własnego sklepu FX platformy. Twoja cena nigdy nie jest zastępowana: karta pokazuje postać odwiedzającego obok całości sklepu, a brama przetwarza dokładnie taką kwotę, jaką wyświetla. Wstrzymać sprzedaż (Ustawienia → Commerce) to wyłącznik kill: katalog, cytaty i look- up pozostają otwarte; proponowanie i potwierdzanie zatrzymania na każdym kanale.

Podczas sprzedaży przez czat nie zachowuje się

Kupiec nie mógł dotrzeć

Uszczelnienie pakietu jest zepsute: plik został edytowany po podpisaniu. Ponownie opublikuj pakiet. Zainstalowana kopia rynku nigdy nie zostanie wprowadzona na miejsce; uaktualnij go z panelu rynkowego.

Zamawianie jest teraz wstrzymane w tym sklepie.

Wyłącznik kill jest włączony. Ustawienia→Handel→Wstrzymać sprzedaż.

Zamówienia nie są jeszcze dostępne na tym kanale

Kanał nie jest zaznaczony w Gdzie klienci mogą kupić. Rejestr serwerów nadaje kanał.

Asystent opisuje element, ale nie pojawia się karta

Narzędzie cytatu odmówiło. Każde połączenie jest zalogowane jako [opsiq][commerce][client_tool] z powodu: błędne id elementu, pole, którego nie deklaruje, przejęta domena lub odmowa kupca. Przeczytaj dziennik przed zaufaniem parafrazę asystenta.

Asystent mówi, że nie widzi produktów

Strona należy do innego obszaru roboczego. Każdy widget strony internetowej należy do jednego miejsca pracy, a złącze sklepu musi być włączone tam.

Odpowiedź w puszce zamiast odpowiedzi

"Powiedz mi trochę więcej o tym, czego potrzebujesz" oznacza, że dostawca SI sam się nie powiódł; Historia AI pokazuje dokładny błąd pod tym zakrętem, a narzędzia nigdy nie zostały osiągnięte.

Edycja złącza nie pokazuje się w czacie

Pracownik powtarza na zmiany kodu w ciągu minuty, ale rozmowa powtarza swoją ostatnią kartę. Rozpocznij nową rozmowę do przetestowania.

Nigeryjski gość widzi dolary chociaż waluta Geo jest na

Sprawdź, czy geo-IPBaza danych jest skonfigurowana (Klient Chat→Geo) i że waluta odwiedzającego ma kurs FX; bez stawkiOpsIQpokazuje cenę sklepu, a nie zły numer.

Twoja suma jest jedyną liczbą, która przenosi pieniądze

Cytat niesie unit_amount_minor, quantity oraz total_amount_minor, i kuszące jest traktowanie trzeciej jako pochodnej z dwóch pierwszych. Nie jest, i zakładając, że jest już kosztował klienta prawdziwe pieniądze.

quantity jest to, co wybrał CUSTOMER - jeden pokój, jedna licencja, jedna polityka. Twój mnożnik może być czymśOpsIQnigdy nie widzi: noce, siedzenia, cykle rozliczeniowe, odległość, waga, tiers. Hotel cytuje jeden pokój na trzy noce jako ilość1, jednostka105,000, ogółem315,000. OpsIQpomnożona jednostka przez ilość do ceny karty potwierdzającej, pokazał gość105,000, a następnie obciążył315,000Zgoda na jedną postać, a oskarżenie za inną jest najgorszą rzeczą, jaką może zrobić ten kontrakt.

Zasada

total_amount_minor jest jedyną figurą OpsIQ pokazuje, znaki, ładunki i pojednania z. unit_amount_minor jest wyświetlacz szczegółowo na linii. Jeśli suma nie jest dokładnie to, co chcesz naładować, twój cytat jest zły - OpsIQ nie będzie korygować go, ponieważ całkowita, która została dobrze dostosowana jest taki, który nigdy nie zgodził się uhonorować.

Co to oznacza dla twojej akcji cytatu

Zwróć całkę. Zastosuj swoje noce, poziomy, rabaty i opłaty przed odpowiedzią. Jeśli linia nie godzi się - jednostka razy jakaś liczba całkowita nigdy nie jest równa twojej całkowitej - OpsIQ traktuje całość jak jedną linię w jego rzeczywistej cenie zamiast wymyślać załamanie, które godzi z niczym.

Sześć odpowiedzi, które sprawiają, że ten kontrakt pasuje do każdego przemysłu

Powyższa deklaracja rozpoczęła się od deklaracji sklepu: kupić rzecz, zapłacić teraz, jest twój, można anulować. Każdy z tych czterech jest założenie, że niektóre prawdziwe interesy nie dzielą. Bank przesuwający pieniądze nie może cofnąć go. Ubezpieczyciel nie może powiedzieć "potwierdzone" dopóki nie spojrzy na niego ubezpieczyciel. Faktura handlowiec później. Klinika rachunki ktoś, kto nie jest pacjentem. Nie ma sposobu powiedzieć, te firmy albo błędnie przedstawić swój proces do własnych klientów lub nie mogą w ogóle połączyć.

Więc złącze transakcyjne odpowiada na sześć pytań. Każdy domyślny do ścisłego czytania - mówienie nic nie jest zawsze bezpieczne i nigdy bezmyślne, ponieważ mówienie nic jest tym co robi autor, kiedy nie rozważa pytania.

transaction_kind

purchase, booking, subscription, bill_payment, transfer, application, top_up, renewal. Słownictwo zamiast zachowania: decyduje o słowie, które klient czyta. Wywołanie przelewu "zamówienie" sprawia, że asystent brzmi tak, jakby nie rozumie biznesu, o którym mówi, i nie ma ilości poprawnych hydraulicznych odzyskuje z tego. Domyślnie purchase.

decision_mode

immediate lub deferredWybierz. deferred za wszystko, co idzie do ubezpieczeń, oceny kredytowej, referencje, przyjęcia lub komitet. OpsIQ następnie mówi złożone raczej niż potwierdzone, i przekazuje odniesienie do zapytać o to. Mówienie komuś ich aplikacji jest potwierdzone podczas gdy siedzi z człowiekiem jest najbardziej szkodliwą rzeczą asystent czatu może zrobić dla regulowanego biznesu, i jest domyślnym zachowaniem każdego przepływu w kształcie ratail- kształtowane. Domyślnie immediate.

payment_timing

on_confirmation, deposit_then_balance, invoice_later lub no_paymentDecyduje, czy OpsIQ otwiera stronę płatności w ogóle, więc nie można wywnioskować z payment_flow - to mówi Kto? - To mówi, że bierze pieniądze. czy i kiedy. Praca fakturować później, a aplikacje, które nie kosztują nic do złożenia, kończy się na potwierdzenie zamiast osiągnięcia listy bramki, która jest pusta lub zła.

reversibility

reversible lub irreversible. Najważniejszą rzeczą, która mówi złącze finansowe. Pokój może być zwolniony i paczka może wrócić; kompletny transfer nie może - nie ma cofnięcia, pieniądze są na drugim końcu, a jedynym lekarstwem jest prośba nieznajomego o zwrot go. Deklaracja irreversible siły automatyczne cancellation_flow do none i zabrania każdemu operatorowi, który nie dokonuje weryfikacji tożsamości, cokolwiek jeszcze mówi ta deklaracja. Dwa pola nie zgadzają się nie jest stan rozwiązać w czasie pracy przez który zostanie przeczytany jako pierwszy. Domyślnie reversible.

cancellation_flow

none, platform_only lub connector_cancel. Role anulowania już istniały bez zasady o tym, kto może do nich dotrzeć, a dwa błędne przypuszczenia nie w przeciwnych kierunkach: zgadnij otwarte i wiadomość czat anuluje płatną rezerwację bez żadnej opłaty cytowane; zgaduj zamknięty i klient, który chce anulować jest powiedziany do telefonu. connector_cancel dodatkowo wymaga cancellation_quote oraz order_cancel z odzysku - OpsIQ nigdy nie anuluje przed wypowiedzią, ile kosztuje. none.

fulfilment_presence

customer_present lub remote_delivery. Czy niezweryfikowany adres e-mail może kosztować kogokolwiek cokolwiek. Gość hotelu musi przyjechać, więc zły adres źle kieruje paragon i pokój jest nadal tam; paczka wysłana, zapasowy serwer lub link do pobrania pozostawia na sile tego adresu tylko. To sprawia, że operator "pominąć weryfikacji poczty elektronicznej" ustawienie dostępne w ogóle, i jest deklarowana przez Ciebie raczej niż wybrany przez nich - tak rozumowanie hotelu nigdy nie może być dziedziczone przez złącze, które dostarcza towary. Domyślnie remote_delivery.

minimum_assurance oraz disclosure (nieobowiązkowo)

minimum_assurance pozwala żądać więcej dowód tożsamości niż OpsIQ wymaga, nigdy mniej - bank wymagający stopniowego przeniesienia jest wykonywanie umowy. Ustawienie go również usuwa zdolność operatora do pominięcia weryfikacji dla swojego złącza, ponieważ decyzja kupca ryzyka wyprzedza wygodę operatora. disclosure jest pokazane sformułowanie przed przycisk potwierdzenia, za stawkę, opłatę lub prawo do chłodzenia należy przedstawić; bez niego regulowane firmy przemycają wymagane sformułowania w nazwę produktu.

notify_flow

platform_automatic, platform_triggered lub noneKiedy OpsIQ pobiera płatność własne checkout nigdy nie działa, więc cokolwiek zwykle e-mail nigdy nie wypali. Nagrywanie znaków płatności zamówienie zapłacone; nie zobowiązuje żadnej platformy do powiedzenia nikomu. platform_triggered wymaga order_notify rola z windykacji, a OpsIQ pyta dopiero po płatności readback dowodzi, że pieniądze są rejestrowane. none sprawia, że OpsIQ-strona potwierdzenie obowiązkowe, ponieważ w przeciwnym razie płacący klient nie słyszy nic. Domyślnie none.

Ten sam kontrakt, dziewięć niepowiązanych przedsiębiorstw

Żaden z nich nie został zaprojektowany w okolicy. Każdy jest kontrakt odpowiadający szczerze dla innego przemysłu, OpsIQ nic o żadnym z nich.

Jedna umowa, dziewięć branż
Hotel        booking      immediate  deposit_then_balance  reversible    -> payment page, "confirmed", identity may be waived
Online shop  purchase     immediate  on_confirmation       reversible    -> payment page, "confirmed", identity always verified
Bank         transfer     immediate  on_confirmation       IRREVERSIBLE  -> payment page, no cancel route, never waived
Insurer      application  DEFERRED   no_payment            reversible    -> no payment page, "submitted", never "confirmed"
Utility      bill_payment immediate  on_confirmation       IRREVERSIBLE  -> payment page, nothing to give back
Clinic       booking      immediate  invoice_later         reversible    -> NO payment page, billed afterwards
Tradesman    booking      immediate  invoice_later         reversible    -> NO payment page, invoiced on completion
Telecom      top_up       immediate  on_confirmation       IRREVERSIBLE  -> payment page, final once sent
University   application  DEFERRED   no_payment            reversible    -> no payment page, decision follows
Wydarzenie płatne dostarczane platformom

Po dokonaniu płatności natywnej Storefront jest aktywnie weryfikowany i zaangażowany, OpsIQ emituje payment.completed z order_id, payment_id/provider_ref, gateway, dokładnie amount_minor, ISO currency, klienta, elementy linii, kanał i paid_atZłącze handlowe musi utrzymywać, że dowody poprzez record_payment i przeczytać go z powrotem; hosted- checkout złącze zużywa własne autorytatywne zdarzenie płatne i nie może otrzymywać duplikatu płatności zapisu.

AI jest wnioskodawcą, nie źródłem autoryzacji

Model może wybrać deklarowany produkt i ilość, ale nie może wybrać nazwę operacji, mięta a checkout URL lub utworzyć stan handlowy z tekstu. Klient otrzymuje dokładną podpisaną kartę i musi nacisnąć przycisk potwierdzenia. Potwierdzenie to jest związane z miejscem pracy, złączem, pozycją, ilością, cytatem, walutą, nicią i wygaśnięciem.

Klienci społeczni utrzymują ten sam przepływ bez wysyłania poczty elektronicznej

WhatsAppPosłańcu!Instagram, Telegram, LINE, SMS i X używać provider- zweryfikowane konto kanału jako tożsamość klienta. Wniosek jest podpisany na tym koncie kanałowym i potwierdzenie nadal działa przez ten sam świeży cytat, zapas, idepotencja, płatności i kontroli odzyskiwania. Klient społeczny wykorzystuje dokładne jednokrotnego działania potwierdzenia wykonane w ich rozmowie; zwykła proza taka jak "tak" nigdy nie jest organem zamawiającym.

Historia zamówień jest zgodna z linku tożsamości, nigdy nie zgaduj e-mail

Native orders are indicted by the workspace CRM / client record and implementation authoritative customer / order lookup in the connect. Klienci context providers receive that wared link; they can not choose a account from a display name or an email wpisany do chat. Z jednym dopasowaniem zamówienia odpowiedzi AI bezpośrednio; z kilkoma podsumowuje mecze i pyta, który z nich; z żadnym nie mówi, że historia jest powiązana.

Upowszechnij ładunek: pola wpisane i tożsamość serwerowa

Bazowa nie zawiera WHMCS, hotel, SaaS, sklep, bank, produkt, trasa lub oddział sprzedający. parameters są formą klienta i schemat szczeliny AI. Złącze rezerwacji może deklarować daty i gości; złącze rozliczeniowe może zadeklarować cykl; przyszłe złącze przedsiębiorstwa może zadeklarowania własnych bezpiecznych pól. OpsIQ sanitizes prymitywne kontrole i wysyła zebrane wartości tylko do mapowanego działania złącza.

Wpisany cytat action
{
  "action_id": "acme_customer_quote",
  "scope": "client",
  "is_destructive": false,
  "parameters": [
    {"name":"external_customer_id","type":"string","required":true},
    {"name":"item_id","label":"Product","type":"string","required":true},
    {"name":"quantity","label":"Quantity","type":"integer","required":true,"minimum":1},
    {"name":"cycle","label":"Billing cycle","type":"select","required":false,
     "options":[{"value":"monthly","label":"Monthly"},{"value":"annual","label":"Annual"}]}
  ]
}

Za clients_only, set customer_ordering.identity_parameter do parametru działania, który otrzymuje zewnętrzny identyfikator klienta złącza. To pole nigdy nie jest pokazywane klientowi i usuwana jest jakakolwiek wartość dostarczona przez telefon; OpsIQ wszczepia tylko id ze zweryfikowanego połączenia złączu. Zamówienie gości pozostawia go puste. Poczta e-mail wpisany jest dowodem na deklarowaną listę klientów, a nie logowanie się i nie władza zakupująca.

Zgrupowane domeny: signed- na kontach klienta i konfiguracji złącza należą do grupy-podstawowej portalu workspace. Jednakże, token tożsamości musi być podpisany dla dokładnej strony członka, który osadza widget, używając tego członka haka webhook tajemnicy. OpsIQ weryfikuje tę powierzchnię najpierw i dopiero wtedy rozwiązuje handel i powiązanego klienta poprzez grupę podstawowe. Nigdy nie zastępować klucza stronie użytkownika z kluczem pierwotnym i nigdy nie kopiować pierwotnego sekretu do witryny członka.

Karoniki złącze musi powrócić

Katalog
{
  "success": true,
  "data": {"items":[{
    "id":"42", "name":"Example product", "summary":"Customer-safe summary",
    "currency":"USD", "unit_amount_minor":2500, "available":true,
    "selection":{"item_id":"42"}
  }]}
}
Cytat
{
  "success": true,
  "data": {
    "quote_id":"opaque", "currency":"USD",
    "unit_amount_minor":2500, "total_amount_minor":5000,
    "selection":{"item_id":"42","quantity":2},
    "expires_at":"2026-08-31T14:05:00Z"
  }
}

Odpowiedź platform- checkout powtarza poprawną cytat kanoniczny i dodaje HTTPS checkout_url. Core odświeża ofertę przy potwierdzeniu i porównuje walutę, całkowitą i stabilną wybór dokładnie. Złącze przekłada swoją reakcję platformy na te koperty; rdzeń nigdy nie tłumaczy pól sprzedających lub konstruuje kupca URL.

Utwórz portal operacyjny w rodzimym sklepie i czacie

Sama możliwość płatności nie stawia bramki przed klientami. Włącz Brama płatności dla rodzimych sklepów blokowanie w Connector Builder. Dodaje on wyraźnie zmienioną umowę, mapuje tworzenie i aktywne przeszukiwanie płatności oraz zezwala na domen checkout hostowanych przez provider-. Po zainstalowaniu, włączeniu i wybraniu złącza pod ustawieniami handlowymi, ta sama brama pojawia się w sklepie publicznym, modale, klient- chat checkouting i autonomicznym zameldowaniu.

Umowa o bramie Native Store
{
  "commerce": {
    "roles": {
      "checkout_create": { "operation": "acme_checkout_create", "transport": "http",
                           "recovery": "acme_payment_status" },
      "payment_status":  { "operation": "acme_payment_status", "transport": "http" },
      "payment_profile": { "operation": "acme_payment_profile", "transport": "http" },
      "webhook_verify":  { "operation": "acme_webhook_verify", "transport": "http" },
      "event_map":       { "operation": "acme_event_map", "transport": "http" },
      "payment_refund":  { "operation": "acme_refund", "transport": "http",
                           "recovery": "acme_refund_status" }
    },
    "storefront_gateway": {
      "enabled": true, "version": 1, "label": "Acme Pay",
      "checkout_hosts": ["checkout.acmepay.com", "*.acmepay.com"]
    }
  }
}
Wyjście z wymeldowania kanonicznego

Mapy działań w zakresie zameldowania checkout_url oraz, gdy usługodawca ma jeden z nich, session_id. URL musi być HTTPS, nie zawierają referencji i dopasować do dozwolonego hosta.

Wyjście stanu kanonicznego

Akcja statusu wykonuje świeże dostawca API lookup i mapy paid jako prawdziwy boolean, amount_minor jako liczba całkowita, currency jako trzyliterowy kod ISO, oraz provider_ref. Zwraca URL, łańcuch zapytań, ładowność klienta lub konektor- dostarczone "potwierdzone" instrukcja nigdy nie jest prawdziwe płatności.

Umowa o zwrot nieobowiązkowy

Jeśli brama obsługuje zwroty, mapowanie payment_refund i jego działania odzyskiwania. Zwrot zwrotu tworzenia ściśle accepted oraz completed boolenges plus provider_ref; odzysk wykonuje usługę lookup i zwraca status. Bez obu działań, OpsIQ nie reklamuje zwrotów złączy.

Kto potwierdza rozkaz?

Złącze nigdy nie piszeOpsIQstatus zamówienia.OpsIQporównuje zwróconą kwotę i walutę dokładnie i rejestruje referencje dostawcy; tylko wtedy rdzeń wykonuje provider- zweryfikowane przejście. Ręczny przelew bankowy pozostaje jedynym przepływem, który może zatwierdzić wyznaczony agent.

W budowniczym łączników, tik handel, mapować role i skonfigurować albo Złączony klient zamawiający sklep, Brama płatności dla rodzimych sklepów, lub oba, gdy złącze rzeczywiście zapewnia obu kontraktów. commerce_roles.json. Publikowanie nadal wykorzystuje normalny proces przeglądu i podpisu Marketplace; kontrakt ten nigdy nie pomija weryfikacji pakietu lub sprawia, że złącze nie-niezinstalowalne. php tools/verify_commerce_contracts.php.
💡
Transport http dla zdalnego API lub bridge dla nazwanej operacji na rozmieszczonym moście (patrz wzór NO- API poniżej). Role są transport- agnostic; czas trwania po prostu potrzebuje transportu określone, więc może version- pair most.
Łączniki

Sprzedam przez czat BEZ złącza: Akcje & Podajniki

Kontrakt handlowy powyżej nie wymaga pakietu złącza. Jeśli platforma jest Twój własny - niestandardowe back office, wewnętrzny API, system, dla którego nikt nie wysyła złącze - można dotrzeć do tych samych maszyn sprzedających z dwoma narzędziami, których już używasz do zintegrowania czegokolwiek innego: niestandardowe działania (punkty końcowe HTTP, zdefiniowane na stronie Działania) i Triggers (haki event webhacks). Ten sam kontrakt, ta sama karta, takie samo zabezpieczenie tożsamości, ten sam kernel płatności, te same wpływy. Jedyną rzeczą brakującą jest pakiet, ponieważ nie ma trzeciego kodu strony do podpisania.

Jak to pasuje do siebie

Budujesz jedną akcję na własną rękę - każdy z nich jest prostym punktem końcowym HTTPS po swojej stronie, zdefiniowanym w AI & Automation → Actions z jego URL, nagłówek i parametry. Następnie zapisujesz jedną deklarację, która odwzorowuje role tych działań. Od tego momentu Twój sklep pojawia się w czacie dokładnie jak konektor- backed jeden: AI cudzysłówka z do cytuj akcję, karty potwierdzenia rendery, klient weryfikuje ich e-mail, jądro zamówienia połączeń do działania zamówienia z kluczem idepotencji, OpsIQ pobiera płatności przez bramy przestrzeni roboczej, i do Record-payment action to książka. Nic o doświadczeniu klienta nie mówi "zwyczaj".

Deklaracja

Zapisz ten JSON jako ustawienie przestrzeni roboczej commerce_custom_integration (Ustawienia→zaawansowane ustawienia lub za pomocą ustawień RESTAPI). Jest to ten sam kształt, co pakiet commerce_roles.json węzeł handlowy, action Nazwanie własnych identyfikatorów akcji:

commerce_custom_integration
{
  "enabled": true,
  "roles": {
    "catalog_search":  { "action": "acme_catalog" },
    "quote":           { "action": "acme_quote" },
    "order_get":       { "action": "acme_order_get" },
    "customer_create": { "action": "acme_customer_create",
                         "recovery": "acme_customer_by_email" },
    "order_create":    { "action": "acme_order_create",
                         "recovery": "acme_order_by_key" },
    "record_payment":  { "action": "acme_record_payment",
                         "recovery": "acme_payment_by_key" }
  },
  "customer_ordering": {
    "enabled": true, "version": 1,
    "mode": "direct_order",
    "audience": "guests_and_clients",
    "account_flow": "connector_signup",
    "payment_flow": "opsiq_gateway",
    "label": "Acme Store",
    "identity_parameter": "client_identifier",
    "quantity_parameter": "quantity",
    "transaction_kind": "purchase",
    "fulfilment_presence": "remote_delivery",
    "notify_flow": "platform_automatic"
  }
}

Wreszcie dodaj custom_commerce do złączy włączonych do sprzedaży pod Ustawieniami→Rozmowa z klientem→Sprzedam przez czat. Wstęp jest ponownie sprawdzany co Prośba, a nie z powodów wymienionych zamiast milczeć ukrywanie sklepu: rola w trybie wymaga, że mapuje do niczego, rola pisania bez działania odzyskiwania (§ 15.7 - pismo, którego wynik nie może być ponownie poproszony jest odrzucony), akcja, która została usunięta lub wyłączona od czasu zapisać.

Co każde działanie musi zrobić

Zwróć kopertę złącza

Odpowiedź {"success": true, "data": { ... }} - lub {"success": false, "error": "a sentence a customer may read"}Twoje działanie jest... ścieżka sukcesu odpowiedzi powinien wskazać na kopertę.

Cytat: suma wszystkich jednostek w jednostkach mniejszych

Powrót quote_id, product_name, quantity, unit_amount_minor, total_amount_minor, currency, selection, selection_summary, expires_at. Wszystko w sekcji "suma jest jedyną liczbą, która przenosi pieniądze" powyżej stosuje verbatim: podatki, opłaty i mnożniki idą do sumy, ponieważ twoja całkowita jest to, co jest podpisane, pokazane i pobierane.

Porządek tworzyć: honorować idepotencji klucz

Otrzymujesz idempotency_key, podpisany total_minor oraz currency, zweryfikowane customer_email, i własne parametry cytatu. Zapisz klucz z zamówieniem; jeśli już stworzył zamówienie na niego, zwrócić to zamówienie zamiast drugiego. Sprawdź pieniądze - jeśli system ceny zamówienia inaczej niż podpisanej całości, odmówić niepodważalnie zamiast za niskie opłaty. Zwróć reference Twoja platforma rozpoznaje.

Odzyskanie: odpowiedź na temat jednego zapisu

order_by_key otrzymuje klucz idempotencji i odpowiedzi {"found": true, "order": {...}} lub {"found": false}. znaleziono: false jest obietnicą - OpsIQ może ponownie spróbować zapisu na jego siłę. Pasza statusu lub lista recent- orders nie jest odpowiedzią o jednym piśmie.

Płatność za zapis: Twoja własna ścieżka rozrachunku

Otrzymywa id transakcji bramki jako klucz idepotencji plus referencje zamówienia, po OpsIQ aktywnie zweryfikowane kwoty i waluty z bramą. Zaznacz zamówienie zapłacone za pośrednictwem własnej logiki platformy - odpalić własne maile, zmniejszyć swoje akcje. platform_notified: true jeśli platforma e-mail klienta samego.

Wejścia kart pochodzą z parametrów działania

Każdy parametr deklarowany w akcji QUOTE (poza parametrem tożsamości), że AI nie zebrany jest renderowany na karcie potwierdzenia jako wejście klient wypełnia się - domenę, datę, miejsce. Oznakowanie je dobrze; etykieta jest to, co klient czyta.

Podajniki: słuchać własnej sprzedaży

Dwa wydarzenia odpalają się na autobus, więc haki i automaty słyszą każdą sprzedaż czatu gdziekolwiek to było:

commerce.order.created

W momencie, gdy zamówienie wyląduje po stronie handlowej, przed płatnością - referencja, złącze (lub custom_commerce), kwota, waluta, e-mail klienta, identyfikator nici.

commerce.payment.confirmed

Dokładnie raz na zamówienie, gdy brama aktywnie weryfikuje płatność. Jest to samo twierdzenie, które zapobiega duplikatów wpływów, więc nie może dwukrotnie-ogień haka internetowego.

Kiedy ukończyć do złącza

Integracja na zamówienie to konfiguracja miejsca pracy: służy do obsługi sklepu, w miejscu pracy. W momencie, gdy chcesz rozprowadzić integrację - inne miejsca robocze, rynek, wersja, podpis, płatne instalacje - pakujesz te same działania i tę samą deklarację co złącze. Kontrakt nie zmienia; tylko opakowanie tak.

Łączniki

Podłącz platformę, która nie ma API (wzór mostu)

Mnóstwo prawdziwych platform statek nie RESTAPIw ogóle. Hotel CMS, stary system rozliczeń, bespoke wewnętrzne narzędzie. Możesz jeszcze napisać kompletnyOpsIQzłącze dla jednego: złącza wysyła jeden plik PHP, który operator wrzuca do własnego publicznego webroot, a ten plik jestAPITa strona jest całym wzorem, z zasadami, które sprawiają, że bezpiecznie uruchomić i powód za każdą regułą.

Kształt tego

Normalne złącze nazywa czyjąś inną API. Złącze mostowe przynosi swoje własne. Nic innego się nie zmienia: te same działania, tych samych dostawców kontekstu, ta sama umowa tożsamości, ten sam układ pakietów.

1
Piszesz jeden plik PHP

It lives in your package at bridge/opsiq-<platform>-bridge.php. It talks to the platform's database directly, or boots the platform's framework, or both. It answers JSON.

2
Operator kopiuje go na ich Webroot

Obok własnej platformy index. php. Nie ma kodu platformy jest modyfikowany, nie jest zainstalowana wtyczka, nic do utrzymania przez aktualizacje platformy.

3
Panel łączników daje im plik

Twój settings.json deklaruje webhook_help.snippet_template. Strona złącza sprawia, że jest to plik do naśladowania z ich ustawień na żywo już zastąpiony, więc nie ma nic ręcznie edytować.

4
OpsIQ nazywa to server- to- serwerem

Twój Klient.php wysyła GET wnioski z dzielonym kluczem w X-Opsiq- Nagłówek Bridge- Key.URLustawienie jest root platformy.

Złącze Builder może wygenerować to dla Ciebie teraz. Wybierz "Platforma bezAPI"profil (lub ustawić dostęp danych do mostu) i emituje plik mostowy, pasujący fragment panelu i wpisane działania, które czytają i zapisują przez niego - dla aplikacji Laravel czytanie jej .env, dlaWordPressczytanie wp- config.php, lub z referencjami wkleić w cokolwiek innego.OpsIQprotokół pomostowy: złącze bezpiecznie generuje api_key po włączeniu, wysyła jako X-Opsiq-Bridge-Keyi wiąże tę samą zapisaną wartość w OPSIQ_BRIDGE_KEY w pliku copyable. Hand- author tylko wtedy, gdy platforma nie jest żadna z tych, lub gdy potrzebujesz zachowania, wygenerowany most nie obejmuje. Ręcznie napisany most jest bezpieczny przed kreatora: tylko przepisuje plik mostowy z własnym markerem.
💡
Wszystko na tej stronie jest wyświetlane w PHP przeciwko MySQL, ponieważ jest to implementacja referencyjna i jedyna kombinacja gazociągu opakowaniowego w pełni wspiera. Wzór sam jest języko- agnostyk i agnostic: patrz "Most w innych językach i innych bazach danych" dla bramy w Node, Python, Go, Ruby, .NET i Java, Introspection query for PostgreSQL, SQL Serwer, SQLite Wyrocznia i MongoDB odpowiednik - wraz z ograniczeniem opakowania, które decyduje o tym, jak most nie-PHP dociera do operatora.

Model bezpieczeństwa i dlaczego każda zasada jest tam

Ten plik znajduje się w publicznym webroot za jednym wspólnym kluczem. Ten pojedynczy fakt napędza każdą regułę poniżej. Nie relaksuj żadnego z nich, aby twój most prostszy.

Rozmówca nigdy nie dostarcza SQL

Nie jest to klauzula Where, ani fragment PORZĄDKU, ani parametr "tylko ten jeden raz". Rozmówca nazywa tabelę, kolumnę i wartość; Twój plik buduje oświadczenie. W momencie gdy dzwoniący może wnieść tekst SQL, jeden wspólny klucz staje się arbitralnym wykonywaniem bazy danych.

Nazwy tabel i kolumn są walidowane w odniesieniu do information_schema

Identyfikatory nie mogą być związane jako parametry, więc muszą być sprawdzone zamiast. Przeczytaj prawdziwą tabelę i listę kolumn dla bazy danych THE i nie odmawiaj niczego na niej nie figurować. Identyfikator, który nie jest prawdziwym obiektem tego schematu nie może w ogóle dotrzeć do zapytania - co sprawia, że bezpiecznie jest ujawnić każdą tabelę.

Każda wartość jest parametrem związanym

Bez wyjątku, w tym wartości wewnątrz wyszukiwania. Zwalidowane identyfikatory plus związane wartości to para, która sprawia, że powierzchnia całkowita i powierzchni wtrysku zero.

Odczyty są uniwersalne, pisma są dozwolone

To jest zasada, którą ludzie chcą pominąć.

Tajne kolumny są redagowane na czytanie i odrzucane na piśmie

Dopasuj na kolumnie NAME: hasło, remember_token, tajne, api_key, private_key, sól, token. Zastąp wartość z uchwytem w drodze do wyjścia. Odmów zapisu całkowicie po drodze - pisanie surowego hash hasło nie jest operacją, to jest footgun. Wyślij operatora do własnego przepływu hasła platformy.

Usunięcia są jednorzędowe, według klucza głównego

Nigdy masowy usuń, nigdy nie usuwaj przez filtr. Masowe usunięcie jest sposobem, w jaki umiera baza danych. Jeśli ktoś naprawdę potrzebuje jednego, może to zrobić na platformie.

Odczyty są podświetlane

Zaciśnij parametr limit twardym sufitem. Zbiegłe zapytanie nie może być w stanie wyrzucić bazy danych za pomocą wiadomości czatu.

Zawiódł zamknięty do momentu ustawienia klucza

Nieskonfigurowany most odpowiada na wszystko, co robi 403. Most, który jest pomocny przed jego konfigurowaniem, jest mostem, który był pomocny dla nieznajomego.

Porównanie czasu bieżącego, klucz w nagłówku

hash_equalsKlucz jest w X-Opsiq-Bridge- Key, nie ciąg zapytań, więc pozostaje poza logami dostępu, dziennikami proxy i nagłówkami Referer.

GET tylko

Jedna metoda, jeden kształt, nic do przemytu w ciele. Wszystko co most robi jest ekspresowe jako GET z zwalidowanymi parametrami, a OpsIQ jest jedynym rozmówcą.

Czyta uniwersalne, pisze allow- listne- i dlaczego

Jest to zasada, która się kłóci, więc tutaj jest rozumowanie w całości. Asystent powinien być w stanie widzieć całą platformę: to, co sprawia, że jest przydatne, i czytanie nie może zniszczyć niczego. Pisanie są różne. Ten plik siedzi w publicznym webroot za jednym wspólnym kluczem. Jeśli klucz przecieka, nieograniczona powierzchnia zapisu sprawia, wyciek równoważny pełnej kontroli bazy danych - nowy użytkownik administrator, pusty tabeli rezerwacji. Lista uprawnień oznacza, że wyciek klucza nadal nie może dotrzeć do stołu operator nigdy nie włączone.

⚠️
Karta aprobaty OpsIQ otwiera AI, nie klucz. Klikając na admin Pozwól na destrukcyjną akcję jest kontrola nad asystentem. To nie jest kontrola kto posiada klucz mostowy. Są to dwa różne zagrożenia, a lista uprawnień jest odpowiedzią na drugi.
Kałuża sterująca, z mostu Botble
/* ── WRITE ALLOW-LIST — which tables the assistant may CHANGE here.
 *
 * READS are unrestricted: the assistant can see every table in the platform.
 * WRITES are limited to this list, because this file sits in a PUBLIC webroot
 * behind ONE shared key — an allow-list means that even a leaked key cannot
 * reach a table you never enabled (no new admin users, no emptied bookings).
 *
 * Comma-separated table names. Add tables as you need them — e.g. append
 * ',pages,posts' to let the assistant edit site content. Set it to '*' to
 * allow every table, deliberately. Empty falls back to the hotel defaults. ── */
const OPSIQ_WRITE_TABLES = 'ht_bookings,ht_booking_rooms,ht_booking_addresses,ht_rooms,ht_room_types,ht_customers,customers';

Dwa szczegóły w kontroli poniżej są łatwe do pomylenia. Nazwa tabeli już przybędzie RESOLVED, niosąc przedrostek tabeli instalacji, podczas gdy operator pisze allow- list nieokreślony, ponieważ to jest to, co oni naturalnie typu. Porównaj oba sposoby lub wstępnie zainstalowana instalacja cicho pozwala nic i każdy zapis przerw. A odmowa musi się tłumaczyć, bo osoba czytająca to jest admin w oknie czatu, a nie deweloper z śladem stosu.

Kontrola listy uprawnień, verbatim z marketplace_connectors/botbleMostopsiq-botble-bridge.php
/** Tables a WRITE may touch. Empty = the built-in defaults. */
$writeAllowed = static function (string $table) use ($prefix): bool {
    $raw = trim((string)(defined('OPSIQ_WRITE_TABLES') ? OPSIQ_WRITE_TABLES : ''));
    if ($raw === '') $raw = 'ht_bookings,ht_booking_rooms,ht_rooms,ht_customers,customers';
    if (trim($raw) === '*') return true;                     // explicit opt-in to everything
    $bare = ($prefix !== '' && stripos($table, $prefix) === 0) ? substr($table, strlen($prefix)) : $table;
    foreach (explode(',', $raw) as $t) {
        $t = trim($t);
        if ($t === '') continue;
        if (strcasecmp($t, $table) === 0) return true;
        if (strcasecmp($t, $bare)  === 0) return true;
        if ($prefix !== '' && strcasecmp($prefix . $t, $table) === 0) return true;
    }
    return false;
};

/** One refusal, one explanation — used by every write op. */
$requireWritable = static function (string $table) use ($writeAllowed): void {
    if ($writeAllowed($table)) return;
    opsiq_bridge_out(['success' => false, 'error' =>
        'write_not_allowed: "' . $table . '" is not in this bridge\'s write allow-list. '
        . 'Reads are unrestricted. To permit writes here, add the table to OPSIQ_WRITE_TABLES '
        . 'in opsiq-botble-bridge.php (or set it to "*" to allow every table).'], 403);
};

Brama, w pełni

Cztery kontrole, w tej kolejności, zanim cokolwiek dotknie danych. Kopiuj zamówienie, jak również kontroli.

Cztery kontrole bram, w kolejności
<?php
declare(strict_types=1);

/* ── EDIT THIS: a long random secret (40+ chars). Empty = bridge OFF. ── */
const OPSIQ_BRIDGE_KEY = '';

header('Content-Type: application/json; charset=utf-8');
header('Cache-Control: no-store');

function opsiq_bridge_out(array $payload, int $code = 200): void
{
    http_response_code($code);
    echo json_encode($payload, JSON_UNESCAPED_SLASHES);
    exit;
}

/* 1. Fail closed. An unconfigured bridge answers nothing to anyone. */
if (OPSIQ_BRIDGE_KEY === '' || strlen(OPSIQ_BRIDGE_KEY) < 24) {
    opsiq_bridge_out(['success' => false, 'error' => 'bridge_not_configured'], 403);
}
/* 2. One method. */
if (strtoupper((string)($_SERVER['REQUEST_METHOD'] ?? '')) !== 'GET') {
    opsiq_bridge_out(['success' => false, 'error' => 'method_not_allowed'], 405);
}
/* 3. Constant-time key comparison, key from a header (never the query string). */
$given = (string)($_SERVER['HTTP_X_OPSIQ_BRIDGE_KEY'] ?? '');
if ($given === '' || !hash_equals(OPSIQ_BRIDGE_KEY, $given)) {
    opsiq_bridge_out(['success' => false, 'error' => 'forbidden'], 403);
}
/* 4. Only now read credentials and connect. */

Identyfikatory walidacyjne wobec information_schema

To jest kawałek, który obraca "asystent może dotrzeć do każdego stołu" z lekkomyślnego w bezpieczne. Rozwijaj nazwę tabeli dzwoniącego przeciwko prawdziwemu schemowi, tolerować brakujące lub dodatkowe przedrostek tabeli, i zwrócić null dla czegokolwiek innego. Wszystko poniżej następnie działa z nazwą, która istnieje rzekomo.

Walidacja identyfikatora i redakcja, werbat z mostu w butelce
/** Real tables in THIS database — the allow-list, straight from the DB. */
$allTables = static function () use ($pdo, $db): array {
    static $cache = null;
    if ($cache !== null) return $cache;
    $st = $pdo->prepare('SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ? ORDER BY TABLE_NAME');
    $st->execute([$db]);
    return $cache = array_map('strval', $st->fetchAll(PDO::FETCH_COLUMN));
};

/** Resolve a caller-supplied table name to a REAL one, or null. */
$resolveTable = static function (string $name) use ($allTables, $prefix): ?string {
    $name = trim($name);
    if ($name === '' || !preg_match('/^[A-Za-z0-9_]+$/', $name)) return null;
    $tables = $allTables();
    foreach ($tables as $t) if (strcasecmp($t, $name) === 0) return $t;
    /* Tolerate a missing or extra table prefix. */
    foreach ($tables as $t) {
        if (strcasecmp($t, $prefix . $name) === 0) return $t;
        if ($prefix !== '' && strcasecmp($prefix . $t, $name) === 0) return $t;
    }
    return null;
};

/** Column introspection: table => [column => true]. Cached per request. */
function opsiq_bridge_columns(PDO $pdo, string $db, string $table): array
{
    static $cache = [];
    if (isset($cache[$table])) return $cache[$table];
    $stmt = $pdo->prepare('SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?');
    $stmt->execute([$db, $table]);
    $cols = [];
    foreach ($stmt->fetchAll(PDO::FETCH_COLUMN) as $c) $cols[strtolower((string)$c)] = true;
    return $cache[$table] = $cols;
}

/** Columns whose VALUES must never leave the platform. */
$secretCol = static function (string $c): bool {
    return (bool)preg_match('/(^|_)(password|remember_token|secret|api_key|private_key|salt|token)($|_)/i', $c);
};
/** Columns a write may never touch — auth material. */
$writeBanned = static function (string $c): bool {
    return (bool)preg_match('/(^|_)(password|remember_token)($|_)/i', $c);
};
/** Strip secret values from a row before it leaves the server. */
$redact = static function (array $row) use ($secretCol): array {
    foreach ($row as $k => $v) if ($secretCol((string)$k)) $row[$k] = '[redacted]';
    return $row;
};

Operacja odczytu i operacja zapisu, zakończona

Należy zauważyć, co jest związane i co jest walidowane. Kolumna filtra jest sprawdzana z listą prawdziwych kolumn, a następnie interpolowana jako identyfikator; jej wartość jest związana. Granica jest zaciśnięta. Wiersze są redagowane w drodze wyjścia. Aktualizacja odmawia klucza pierwotnego i każdej kolumny auth, oraz pieczęci updated_at, gdy tabela ma jeden.

Przeczytaj dowolną tabelę - zatwierdzone identyfikatory, wartości związane, wiersze z limitem
case 'query': {
    $t = $resolveTable((string)($_GET['table'] ?? ''));
    if ($t === null) opsiq_bridge_out(['success' => false, 'error' => 'unknown_table'], 404);
    $cols = opsiq_bridge_columns($pdo, $db, $t);
    if (!$cols) opsiq_bridge_out(['success' => false, 'error' => 'unknown_table'], 404);

    $sql = "SELECT * FROM `$t` WHERE 1=1";
    $args = [];

    /* Equality filter: column must be REAL, value is bound. */
    $wc = strtolower(trim((string)($_GET['where_column'] ?? '')));
    if ($wc !== '') {
        if (!isset($cols[$wc])) opsiq_bridge_out(['success' => false, 'error' => 'unknown_column: ' . $wc], 400);
        $sql .= " AND `$wc` = ?";
        $args[] = (string)($_GET['where_value'] ?? '');
    }
    /* Ordering: column validated, direction from a fixed pair. */
    $ob = strtolower(trim((string)($_GET['order_by'] ?? '')));
    if ($ob !== '' && isset($cols[$ob])) {
        $dir = strtoupper(trim((string)($_GET['order'] ?? 'DESC'))) === 'ASC' ? 'ASC' : 'DESC';
        $sql .= " ORDER BY `$ob` $dir";
    } elseif (isset($cols['id'])) {
        $sql .= " ORDER BY `id` DESC";
    }
    /* Hard row cap. */
    $lim = (int)($_GET['limit'] ?? 25);
    if ($lim < 1)   $lim = 25;
    if ($lim > 200) $lim = 200;
    $off = max(0, (int)($_GET['offset'] ?? 0));
    $sql .= " LIMIT $lim OFFSET $off";

    $st = $pdo->prepare($sql);
    $st->execute($args);
    $rows = array_map($redact, $st->fetchAll());
    opsiq_bridge_out(['success' => true, 'data' => [
        'table' => $t, 'returned' => count($rows), 'rows' => $rows,
    ]]);
}
Napisz jeden wiersz - tablica na liście uprawnień, odrzucone kolumny auth, pojedynczy rząd przez klucz podstawowy
case 'record.update': {
    $t = $resolveTable((string)($_GET['table'] ?? ''));
    if ($t === null) opsiq_bridge_out(['success' => false, 'error' => 'unknown_table'], 404);
    $requireWritable($t);                       // the allow-list, before anything else
    $cols = opsiq_bridge_columns($pdo, $db, $t);
    $pk   = $primaryKey($t);
    $id   = (string)($_GET['id'] ?? '');
    if ($id === '') opsiq_bridge_out(['success' => false, 'error' => 'id_required'], 400);

    $set = json_decode((string)($_GET['set'] ?? ''), true);
    if (!is_array($set) || !$set) opsiq_bridge_out(['success' => false, 'error' => 'set_json_required'], 400);

    $frag = []; $args = [];
    foreach ($set as $col => $val) {
        $col = strtolower(trim((string)$col));
        if (!isset($cols[$col]))  opsiq_bridge_out(['success' => false, 'error' => 'unknown_column: ' . $col], 400);
        if ($writeBanned($col))   opsiq_bridge_out(['success' => false, 'error' => 'refused: "' . $col . '" is auth material - change it through the platform own password flow, never by direct write.'], 400);
        if ($col === $pk)         opsiq_bridge_out(['success' => false, 'error' => 'refused: the primary key cannot be rewritten.'], 400);
        if (is_array($val) || is_object($val)) $val = json_encode($val, JSON_UNESCAPED_SLASHES);
        $frag[] = "`$col` = ?";
        $args[] = ($val === null) ? null : (string)$val;
    }
    if (isset($cols['updated_at']) && !isset($set['updated_at'])) $frag[] = '`updated_at` = NOW()';

    $before = $pdo->prepare("SELECT * FROM `$t` WHERE `$pk` = ? LIMIT 1");
    $before->execute([$id]);
    $prev = $before->fetch();
    if (!$prev) opsiq_bridge_out(['success' => false, 'error' => 'not_found'], 404);

    $args[] = $id;
    $up = $pdo->prepare("UPDATE `$t` SET " . implode(', ', $frag) . " WHERE `$pk` = ? LIMIT 1");
    $up->execute($args);
    opsiq_bridge_out(['success' => true, 'data' => [
        'table' => $t, 'id' => $id, 'changed' => $up->rowCount(),
        'before' => $redact(array_intersect_key($prev, $set)),
    ]]);
}

Różnice w schematach przetrwania

Wersje platformy różnią się. Kolumny poruszają się, otrzymują nazwę lub są nieobecne. Most, który zakłada jeden schemat działa na jednej instalacji. Introspekcja i przystosowanie zamiast: wybrać tylko kolumny, które istnieją tutaj, tolerować przedrostek tabeli, i spróbuj wiarygodne pisowni odniesienia.

Tolerancja Schema, z mostu Botble
/* Only ever select columns that exist on THIS install. */
$pick = static function (array $cols, array $wanted, string $alias = 'b'): string {
    $out = [];
    foreach ($wanted as $c) if (isset($cols[$c])) $out[] = "`$alias`.`$c`";
    return $out ? implode(', ', $out) : "`$alias`.*";
};

/* References vary: stored with or without a leading "#", with or without an
 * operator-configured alpha prefix, or only as a numeric id. Try every
 * plausible form — the PROOF match is what actually gates disclosure, so
 * tolerant matching here is safe. */
$refCandidates = [$ref, '#' . $ref];
$digitsOnly = preg_replace('/\D+/', '', $ref);
if ($digitsOnly !== '' && $digitsOnly !== $ref) {
    $refCandidates[] = $digitsOnly;
    $refCandidates[] = '#' . $digitsOnly;
}
$refCandidates = array_values(array_unique($refCandidates));
💡
Daj mostowi op = diag, który zgłasza tylko strukturę - które tabele rozwiązane, które kolumny tabeli głównej ma, i SHAPE najnowszego odniesienia z każdej cyfry zamaskowane. Jest klawiszowo-faliste jak wszystko inne, i to zmienia "lookup nie znajduje niczego" z biletu wsparcia do 10-sekundowej odpowiedzi. Nigdy nie pozwól mu zwrócić prawdziwych rekordów.

Jednolite błędy i pułapka na wyliczenie

Jeden kształt dla wszystkiego

Success is {"success":true,"data":{...}}. Failure is {"success":false,"error":"snake_case_reason"}. Your Client.php and every action then have exactly one response shape to handle.

Nie znaleziono i nie dopasowano musi być identyczny

Na powierzchni wyszukiwania, referencja, która nie istnieje i odniesienie, którego dowód nie pasuje musi produkować odpowiedź SAME. Różne odpowiedzi zmieniają most w wyrocznię, która potwierdza, które odniesienia są prawdziwe, który jest wolnym klientom-list eksportu dla każdego pacjenta.

Nigdy nie wyciekać powód do gościa

Most może być precyzyjny zOpsIQ. Co dociera do odwiedzającego jest decydowana przezOpsIQ, w jednej stałej odmowie.

Plik do naśladowania w panelu złącza

Operator nigdy nie otwiera repozytorium. Otwierają panel złącza wOpsIQi naciśnij Kopiuj. Ta kopia pochodzi z ustawień.json, i to musi być ten sam program co most / * .php.

settings.json - wpis panela dla złącza mostowego
{
  "settings": [
    { "key": "base_url", "label": "API base URL", "type": "text", "required": true },
    { "key": "api_key",  "label": "Bridge key",   "type": "password", "required": true,
      "autogenerate": true,
      "help": "Auto-generated the moment you enable the connector. It must match OPSIQ_BRIDGE_KEY inside the bridge file; the copyable file below already carries this value once saved." }
  ],
  "webhook_help": {
    "title": "One file, three surfaces",
    "body": "This platform has no public REST API, so this ONE file IS the API. Copy it into the site PUBLIC webroot, keeping the filename.",
    "snippet_filename": "opsiq-yourplatform-bridge.php   (drop next to the site index.php)",
    "snippet_template": "<?php\n/* ... the whole bridge file ... */\nconst OPSIQ_BRIDGE_KEY = \u0027{{setting:api_key}}\u0027;\n..."
  },
  "snippet_bindings": [
    { "assignment": "OPSIQ_BRIDGE_KEY", "setting": "api_key" }
  ]
}
{{setting:key}} carries live values

The connector panel substitutes {{setting:<key>}} in the snippet with that connector's saved value, so the copied file already contains the operator's generated bridge key and needs no hand-edit. An empty or unsaved setting leaves the token visible, so the operator can see exactly what is still missing.

snippet_bindings przetrwa regenerację

Declare każdy wygenerowany tajny przydział wyraźnie. Narzędzie synchronizacji rebuduje kopię panelu z wysłanego mostu, a następnie ponownie OPSIQ_BRIDGE_KEY = {{setting:api_key}} bez tego wiązania. Bez niego, upgrade może wiernie skopiować bezklawiszowy plik pakietu i po cichu usunąć rozmieszczalny w operatorze klucz placeholder. Connector Builder emituje to powiązanie automatycznie dla wygenerowanych pakietów mostowych.

Inne uchwyty na miejsce są podstawione po stronie serwera

Niezależnie od tego,{webhook_url}, {webhook_path}, {webhook_secret}, {site_key}, {base_url}oraz{slug}są wypełnione zanim panel kiedykolwiek zobaczy zadrapanie.

webhook_help może być jednym obiektem lub listą

Lista zawiera kilka fragmentów w jednym panelu, np. plik mostowy i oddzielny hak przekaźnika.

🚫
Nie należy utrzymywać fragmentu ręcznie. Plik mostowy i kopia panelu to dwie kopie jednego programu, a ZDROWIE - most został uaktualniony, a jego kopia panelowa nie była, więc każdy, kto ponownie zainstalował i skopiował z panelu zainstalował stary most i po cichu stracił wszystkie nowe możliwości. Nic nie wykryło: konformancja przeszła, podpisy minęły, testy przeszły.
Należy zachować identyczne dwie kopie
# Regenerate every package's panel snippet from its bridge file
php tools/sync_connector_bridge_snippets.php --apply

# Show what would change, without writing
php tools/sync_connector_bridge_snippets.php

Drift is now a failing conformance check, not a support ticket: the verifier compares the two line by line (ignoring the {{setting:...}} placeholders, which are supposed to differ) and names the first line that differs. Run the sync tool as the last step before every release, right before signing.

Co most powinien ujawnić

Kształtowane i uniwersalne operacje, razem. Kształtowane odpowiedzi na pytania, które ludzie zadają, są uporządkowane i skonstruowane celowo; uniwersalne pokrywają wszystko inne, tak aby asystent nigdy nie utknął.

Kształtowane czytanie

statystyki, główna lista obiektów z filtrami, jeden obiekt z powiązanymi wierszami, katalog tego co jest sprzedawane, wyszukiwanie klientów z historią. Daje to AI dobrą odpowiedź w jednym wywołaniu zamiast pięciu.

Writes Shaped

Dwa lub trzy zmiany stanu, które mają znaczenie - ustaw status, anuluj. Zachowaj akceptowane wartości allow- listned.

Handel na maszynie

Dla platformy do sprzedaży ujawnić celowo zbudowany katalog, cytuję, Zamówienie / zamówienie i płatności-dowody operacji, a następnie mapować je w commerce_roles.json z transport: bridge. Nigdy nie mapować komercyjnej roli zapisu do uniwersalnej record. create / update powierzchni.

Odkrycie powszechne

tabele (z liczeniem wierszy) i opisać (kolumny, typy, klucz podstawowy, plus czytelne i zapisywalne flagi na kolumnę). W ten sposób asystent uczy się platformy, której nie przewidziałeś.

Uniwersalny odczyt i zapis

query, record. get, recur. create, recreatis. update, precord. delete. Każdy z nich jest potwierdzony jak pokazano powyżej.

Tożsamość przed bramą klucza

Sondy tożsamości są wywoływane przez ADMIN 's BROWSER, samo-pochodzenie, więc nie mogą wysłać niestandardowy nagłówka. Ich uwierzytelnienie jest samą sesją platformy. Umieść je przed bramą klucza, trzymać je z dala od wszystkich danych rekordowych i nigdy nie pozwól im zwrócić tajemnicy. Zobacz stronę identyfikacyjną złącza.

Diagnostyka

op=diag, structure only, masked.

Mapa roli mostowej handlu
{
  "commerce": {
    "roles": {
      "catalog_search": {"operation":"hotel_catalog_search","transport":"bridge"},
      "quote":          {"operation":"hotel_quote","transport":"bridge"},
      "order_create":   {"operation":"hotel_order_create","transport":"bridge",
                           "recovery":"hotel_order_get"},
      "order_get":      {"operation":"hotel_order_get","transport":"bridge"},
      "record_payment": {"operation":"hotel_record_payment","transport":"bridge",
                           "recovery":"hotel_order_get"}
    },
    "customer_ordering": {
      "enabled":true, "version":1, "mode":"direct_order",
      "audience":"guests_and_clients", "account_flow":"guest_checkout",
      "payment_flow":"opsiq_gateway"
    }
  }
}
💡
Kanoniczna funkcja kontroluje sekwencję i autorytet; operacja mostu utrzymuje własny załadowany ładunek na platformie. Hotel może wymagać przybycia, wyjazdu i gości, WHMCS może wymagać istniejącego klienta lub konektora-owned signup, a platforma SaaS może wymagać cyklu fakturowania. Rdzeń nigdy nie koduje tych pól. Most musi powołać się na usługi biznesowe platformy tak zapasów, podatków, faktury, poczty potwierdzającej i haki wszystkie uruchomić.
⚠️
record_payment nie jest mark- płatny skrót. Akceptuj tylko sprawdzone przez dostawcę dowody: dokładne zamówienie, kupca, kwotę, walutę ISO, referencje dostawcy, świeży zweryfikowany znacznik czasu i idepotencja klucz. Persist to poprzez platformowa płatności / faktury API, a następnie zwrócić autorytatywne zamówienia lub faktura read- back. Nieznany wynik musi uruchomić windykację przed każdym ponownym spróbować.
💡
Złącze tylko read- nie wymaga żadnej listy uprawnień. Jeśli platforma tylko odpowiada na pytania, wysłać most bez operacji zapisu i cała klasa ryzyka pisania znika. Dodaj pisze, gdy ktoś o nie pyta.

Lista kontrolna przed wysłaniem mostu

Most odmawia wszystkiego bez klucza

Sprawdź go. Zmień nazwę stałej, aby opróżnić i potwierdzić każdą odpowiedź Operacyjną 403.

W czasie stałym odmawia się nieodpowiedniego klucza

hash_equals, a klucz przeczytany tylko z nagłówka.

Odmawia się nazwy stołu made-up

A prawdziwa nazwa stołu z niewłaściwym przedrostkiem wciąż się rozwiązuje.

Kolumna hasła nigdy nie pojawia się w odczycie

A pismo, które nazywa się "jeden", nie jest używane z wyjaśnieniem.

Odmawia się zapisu do tabeli poza listą uprawnień

Z komunikatem, który mówi operatorowi jak go rozszerzyć.

Wycinek panelu pasuje do pliku mostka

Narzędzia php /sync_connector_bridge_snippets.php informuje o tym krok.

Ponowne zainstalowanie złącza nie wystarczy

Jeśli pakiet wysyła plik mostowy, operator uaktualniający złącze musi ALSO ponownie umieścić ten plik w ich webroot. Powiedz to w nadwozie panelu i w Twoim CHANGELOG, każde wydanie.

Łączniki

Uruchomienie własnych ram platformy z mostu

Most, który czyta tylko może mówić SQL. Most który CREATES rzeczy na platformie (zamówienie, rezerwacja, płatna faktura) musi przejść przez warstwę aplikacji platformy i uruchamianie tej warstwy bez głowy jest gdzie każda subtelna awaria w tym wzorze żyje. Wszystko poniżej zostało nauczyte trudnym sposobem na żywo integracji, każda zasada przeciwko prawdziwej wady, która nie spowodował żadnego błędu nigdzie.

Wiersz w bazie danych nie jest zamówieniem

Surowe INSERT tworzą cieni rekord

Wiersz pojawia się, admin wymienia go, i to nadal nie jest rekord platformy uważa, że stworzył: nie rodzimy numer referencyjny, brak haczyków modelu, nie ma zdarzeń, nie fakturowanie, nie klient e-mail, nie działa klienta - link. Klient cytuje odniesienie platforma nigdy nie wydany do personelu, który nie może go znaleźć. Stwórz poprzez platformę własnych usług; jeśli tylko eksponuje post-płatności usługi, utworzyć wykres, którego oczekuje i przekazać na szew określa.

Nigdy nie reimplementuj numeracji platformy

Dwie próbki formatu odniesienia sprawiają, że wygląda łatwo się rozmnażać, i powielanie jest tym samym cieni- zapisać jeden poziom w dół: dzień platforma zmienia swój schemat, każdy z twoich rekordów jest zły i nic nie ostrzega. Zadzwoń jego generator (odbicie osiąga niestatyczny), i odczytywać zapisaną wartość z powrotem zamiast ufać to, co wysłałeś.

Kolumny platformy zachować znaczeń platformy

Zanim coś przechowasz w kolumnie platformy, znajdź każdego czytelnika. Kolumna o nazwie darmowy szczelina może być load- łożyskiem: na integracji odniesienia, transaction_id Okazało się, że jest to symbol email klienta "wyświetl swoją rezerwację" link rozwiązuje: idepotencja digest przechowywane tam po cichu złamał każdy link gości. Zachować księgowość w Bridgeown tabeli: UNIQUE (operacja, idempotency_key) jest strażnikiem replay, ograniczenie odmawia równoległego twin, a odtworzenie Lookup czyta tę samą tabelę, którą napisał create. Stwórz tą tabelę przed początkiem Transaction: MySQL DDL dokonuje transakcji otwartej w sposób dorozumiany.

Wydarzenia, słuchacze i pułapka na e-mail

Przeczytaj źródło usługi przed wysłaniem jej wydarzeń

Jeśli usługa platformy, którą nazywasz już wysyła zdarzenie, wysyłając go samodzielnie wysyła klientowi dwa e-maile z potwierdzeniem i generuje dwie faktury. Jeśli nic nie jest słuchanie, wysyłanie nie wysyła żadnego. Ani niepowodzenie nie podnosi błędu. Reflect metody, pokroić jego linie źródłowe, i przeczytać co faktycznie robi: przypuszczenie oparte na nazwie, a nawet regex nad ciałem zarówno dostał to źle zanim źródło osiedliło się.

getListiers () ukrywa prawdę; getRawListeners (-) mówi jej

Laravel owija słuchaczy klasowych w zamknięcia, więc getListiers () raportuje [email protected] dla wszystkich. getRawListenters () nadaje prawdziwe klasy. Nigdy nie wysyłaj zdarzenia, którego słuchacze nie mogą nazwać.

Showd Queue nie znaczy "biegnie później"

Z kolejką = sync (domyślnie na wielu instalacjach produkcyjnych) w kolejce słuchacz uruchamia INLINE na żądanie mostu. Kontekst Twojego startu jest jego kontekst renderowania: każda rejestracja lub URL defekt w butach w skrzynce odbiorczej klienta. Sprawdź konfig ('queue.default') przed rozumowaniem, gdzie wszystko działa i zajrzyj do zadań /failed_jobs przed założeniem, że pracownik był w to zamieszany.

Strażnik ponownie próbuje z własnym państwem platformy

Usługa, która wysyła bezwarunkowo musi być wywołana dokładnie raz. Marker, który nie może dryfować jest własnym rekordowym stanem platformy (tylko wywołanie podczas gdy rekord jest nadal w toku), a nie równoległa "wysłany" flaga, że może się z nim nie zgadzać.

But bez głowy nie jest butem web

Zarejestruj to, co rejestruje Web boot

Template variables, module settings, filter hooks: platform service providers often register them only on a web request. On the reference integration the email handler substitutes only REGISTERED variables: every value was set correctly and the customer's confirmation still rendered with empty name, phone and link, no error anywhere, because registration lives in a runtime registry the headless boot never filled. Find the platform's registration call (for Botble: EmailHandler::addTemplateSettings with the module's email config) and make it in your boot, exactly as the platform's own provider does.

Pin Every URL root, nie tylko router

Pochwycony wniosek wskazuje na skrypt mostu, więc trasa (), url() i aktywa () generują site.com/ publiczne /opsiq-bridge.php / checkout / TOKEN: połączenie klienta przez JSON endpoint. forceRootUrl (config ('app.url")) naprawia generator; dysk pamięci masowej ma swój własny root, więc logo email pozostaje zepsute aż do filesystem.disks.public.url jest również ustawiony (rozwiązuje leniwie, więc ustawienie go w pracy na starcie, i tylko wtedy, gdy pusty lub skrypt-względny: CDN operatora URL nie należy do Ciebie, aby obejść).

Wydaj je zanim je wydasz.

Usługi platformy odczytywane przez własne połączenie i nie mogą zobaczyć otwartej transakcji. Zawołana przed commit, usługa post-płatności nie znajduje pełnej płatności, po cichu pozostawia rekord niezapłacony, a mimo to odpala swoje wydarzenia, więc klient jest email o rekordzie platforma myśli jest niespłacona. Wykaż wykres, następnie zadzwoń.

Zasady uczciwości

Brak usterek cieni

Jeśli ścieżka rodzima jest nieosiągalna, odmów z usuwalnym błędem, zanim jakiekolwiek pieniądze się poruszą. Nigdy nie wymyślaj referencji, nigdy raw- uaktualnij status, aby pół-zintegrowany rekord wyglądał skończony. Zweryfikowana płatność, której natywny przetwarzanie nie powiódł idzie do pojednania jako needs_attention: pieniądze są prawdziwe, stan jest uczciwie "zapłacony, jeszcze nie przetworzony".

Zgłaszaj fakty, nie swoje oświadczenie.

"Usługa uruchomiona" i "klient został poinformowany" są różne fakty: integracja referencyjna wysłał e-mail z pełnym wyglądem każdego pola puste, podczas gdy ran- flag powiedział prawdę. Zwróć je oddzielnie (przetwarzanie zakończone, próby powiadomienia), zachować per- call platform_notified który zmusza OpsIQ potwierdzenie awaryjne, gdy platforma nie przetwarzała i nigdy nie żąda dostawy: skrzynka odbiorcza nie jest obserwowalna z serwera.

Mierz, a następnie pisz

Statek sonda tylko read- możliwości w moście: istnienie klasy, sygnatury metod, plastry źródeł metod, które zamierzasz nazwać, surowych słuchaczy, sterownik kolejki, i (gdy pytanie może być odpowiedzią przez wywołanie nieszkodliwej funkcji) live call się. Pięć teorii o jednym pustym e-mailu zmarł przed pomiarami zanim źródło go osiedliło. Sonda okrągła kosztuje kopię pliku; błędne pisanie na żywo platformy kosztuje klienta.

Łączniki

Most w innych językach i innych bazach danych

Wzór mostu nie jest wzorcem PHP.OpsIQwywołania jest punktem końcowym HTTP, więc plik może być węzeł, Python, Go, Ruby, .NET lub Java, a sklep za nim może być dowolnySQLsilnik lubMongoDBCo jest PHP w kształcie jest rurociąg opakowaniowy, i to ograniczenie decyduje, jak twój most dociera do operatora. Przeczytaj najpierw rozdział dostawy: to część, która zaskakuje ludzi.

Co właściwie wymaga złącze

To cały kontrakt, nic nie nazywa języka.

Transport

HTTPS. Jeden wniosek GET na rozmowę. Brak ciała, nie ma innej metody.

Uwierzytelnienie

Dzielony sekret w X-Opsiq-Bridge-Key nagłówek żądania, w porównaniu ze stałą godziną. Nie parametr zapytania, nie plik cookie, nie Auth Basic.

Parametry

Pytania. op określa powierzchnię, do Nazwiska operacji, reszta to argumenty tej operacji.

Odpowiedź

JSON. {"success":true,"data":{...}} lub {"success":false,"error":"snake_case_reason"}. Content- Typ aplikacji / json, i nie buforowania.

Kody statusu

200w sprawie sukcesu.403nieskonfigurowany lub nieprawidłowy klucz,404nie znaleziono,405błędna metoda,400zły argument,501nieobsługiwane w tym schemacie.

To wszystko.

Brak ram, czasu startowego, biblioteki OpsIQ po twojej stronie. Jeśli to może służyć, może być most.

Dostawa: co może żyć w moście /, a co nie może

Podpisany pakiet obejmuje stałą listę rozszerzeń plików, a plik poza tą listą jest pozostawiony poza ZIP. Most w języku, którego lista nie obejmuje, dlatego też nie może być wysyłany wewnątrz pakietu - ale nie może już zniknąć ani na Ciebie.26Sierpień2026plik w bridge/ że pakkager spadnie jest trudna konformance awaria, więc pakiet odmawia przejścia zamiast instalacji bez mostu w nim.

Jak mostek / folder jest traktowany w czasie budowania
bridge/bridge.php     ->  SHIPPED, and drift-checked against the panel snippet
bridge/server.js      ->  SHIPPED, and drift-checked against the panel snippet
bridge/bridge.py      ->  REFUSED at conformance: "Bridge files are packaged" FAILS
bridge/bridge.rb      ->  REFUSED at conformance
bridge/main.go        ->  REFUSED at conformance
bridge/Bridge.cs      ->  REFUSED at conformance
bridge/Bridge.java    ->  REFUSED at conformance
PHP i JavaScript - w pełni obsługiwane

Statki z podpisanym ZIP, a weryfikator nippet posiada Twoją kopię panelu jest identyczny do niego, niezależnie od tego, który z nich jest. Kontrola dryfowania odczytuje każdy plik w mostku /, nie tylko PHP, więc zmodernizowany most z kopią płyty nie udało się zbudować w każdym języku.

Wszystko inne - dostarczyć tylko przez panel

Snippet panela jest prostym tekstem bez pojęcia jaki język posiada, więc działa dla każdego stosu. Umieść cały program w webhook_help.snippet_template, podać nazwę pliku snippet_filename, i NIE zostawiać kopii w mostku / - konformancja będzie odmówić pakietu zamiast wysłać go pusty webhook_help.body, że operator kopiuje ten plik zamiast go z pakietu.

Jeśli naprawdę potrzebujesz innego języka w pakiecie

Widen PackageSigner::EXTENSIONS deliberately, then re-sign and re-seed. That is a decision about what executable code Nabtech distributes, so make it on purpose — do not discover it from a missing file.

💡
Podaj plik webhook_help.snippet_filename zawsze, gdy pakiet wysyła więcej niż jeden most. W ten sposób weryfikator wie, do którego mostu należy kopia panelu; bez niego niejednoznaczne połączenie jest zgłaszane jako ostrzeżenie o zgodności i że snippet pozostaje niesprawdzony.
⚠️
Celem kontroli dryfującej jest to, że plik mostowy i jego kopia panelu są dwie kopie jednego programu i Will diverge. Regenerate raczej niż hand- edit: php tools/sync_connector_bridge_snippets.php --apply- Podpisz paczkę.

Brama, w sześciu językach

Te same cztery kontrole w tej samej kolejności wszędzie: niepowodzenie zamknięte bez klucza, jedna metoda, porównanie z czasem rozpoczęcia od nagłówka, następnie połączyć. Jedyną prawdziwą pułapką jest porównanie, i to jest inna pułapka w każdym języku.

⚠️
Porównaj Sha-256trawienie dwóch kluczy zamiast samych klawiszy. Jest to poprawne w każdym języku, i to przyciska fakt, że kilka stałych porównaczy czasu albo rzucać lub wyciek na niedopasowanie długości - Node timingSafeEqual podnosi RangeError, gdy bufory różnią się długością, co zmienia zły klucz w500zamiast403.
Node. js - brama
// Node.js — no dependencies
const http = require("http"), crypto = require("crypto"), url = require("url");

const BRIDGE_KEY = process.env.OPSIQ_BRIDGE_KEY || "";   // empty = bridge OFF

const sameKey = (a, b) => {
  const ha = crypto.createHash("sha256").update(String(a)).digest();
  const hb = crypto.createHash("sha256").update(String(b)).digest();
  return crypto.timingSafeEqual(ha, hb);                 // equal lengths, always
};
const out = (res, payload, code = 200) => {
  res.writeHead(code, { "Content-Type": "application/json; charset=utf-8",
                        "Cache-Control": "no-store" });
  res.end(JSON.stringify(payload));
};

http.createServer(async (req, res) => {
  if (BRIDGE_KEY.length < 24)         return out(res, { success: false, error: "bridge_not_configured" }, 403);
  if (req.method !== "GET")           return out(res, { success: false, error: "method_not_allowed" }, 405);
  const given = req.headers["x-opsiq-bridge-key"] || "";
  if (!given || !sameKey(BRIDGE_KEY, given))
                                      return out(res, { success: false, error: "forbidden" }, 403);

  const q = url.parse(req.url, true).query;
  // ... dispatch on q.op / q.do exactly as the PHP bridge does
}).listen(process.env.PORT || 8787);
Python - brama
# Python — Flask
import hashlib, hmac, os
from flask import Flask, request, jsonify

app = Flask(__name__)
BRIDGE_KEY = os.environ.get("OPSIQ_BRIDGE_KEY", "")      # empty = bridge OFF

def same_key(a: str, b: str) -> bool:
    return hmac.compare_digest(
        hashlib.sha256(a.encode()).digest(),
        hashlib.sha256(b.encode()).digest(),
    )

def out(payload, code=200):
    resp = jsonify(payload)
    resp.status_code = code
    resp.headers["Cache-Control"] = "no-store"
    return resp

@app.before_request
def gate():
    if len(BRIDGE_KEY) < 24:
        return out({"success": False, "error": "bridge_not_configured"}, 403)
    if request.method != "GET":
        return out({"success": False, "error": "method_not_allowed"}, 405)
    given = request.headers.get("X-Opsiq-Bridge-Key", "")
    if not given or not same_key(BRIDGE_KEY, given):
        return out({"success": False, "error": "forbidden"}, 403)
Go, Ruby, . NET i Java - to samo porównanie
// Go
func sameKey(a, b string) bool {
    ha := sha256.Sum256([]byte(a))
    hb := sha256.Sum256([]byte(b))
    return subtle.ConstantTimeCompare(ha[:], hb[:]) == 1
}

func gate(next http.HandlerFunc) http.HandlerFunc {
    return func(w http.ResponseWriter, r *http.Request) {
        w.Header().Set("Content-Type", "application/json; charset=utf-8")
        w.Header().Set("Cache-Control", "no-store")
        key := os.Getenv("OPSIQ_BRIDGE_KEY")
        if len(key) < 24 { out(w, 403, "bridge_not_configured"); return }
        if r.Method != http.MethodGet { out(w, 405, "method_not_allowed"); return }
        given := r.Header.Get("X-Opsiq-Bridge-Key")
        if given == "" || !sameKey(key, given) { out(w, 403, "forbidden"); return }
        next(w, r)
    }
}

// Ruby
def same_key?(a, b)
  OpenSSL.secure_compare(Digest::SHA256.digest(a.to_s), Digest::SHA256.digest(b.to_s))
end

// C# / .NET
static bool SameKey(string a, string b) =>
    CryptographicOperations.FixedTimeEquals(
        SHA256.HashData(Encoding.UTF8.GetBytes(a)),
        SHA256.HashData(Encoding.UTF8.GetBytes(b)));

// Java
static boolean sameKey(String a, String b) throws Exception {
    MessageDigest d = MessageDigest.getInstance("SHA-256");
    return MessageDigest.isEqual(d.digest(a.getBytes(UTF_8)), d.digest(b.getBytes(UTF_8)));
}

Identyfikatory walidacji w każdym silniku bazy danych

Właściwość bezpieczeństwa nie zmienia się: nazwa tabeli lub kolumny, którą należy sprawdzić dzwoniącego, musi być sprawdzona w stosunku do rzeczywistego schematu przed jego interpolowaniem, a każda wartość musi być parametrem związanym. Tylko zapytanie introspekcji, znak cytowania i klauzula wzywania różnią się.

MySQLorazMariaDB

Tabele: SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ?Kolumny: to samo przeciwko information_schema.COLUMNS z AND TABLE_NAME = ?Cytuj z tylnymi, podwajając każdy backtick wewnątrz. Strona z LIMIT n OFFSET m.

PostgreSQL

Te same widoki na information_schema, nazwy małych przypadków, WHERE table_schema = $1 (zwykle public). Cytować z podwójnymi cytaty, podwoić każdy podwójny cytat wewnątrz. Strona z LIMIT n OFFSET m. Patrz na regułę składania: niecytowany identyfikator jest składany do dolnej skrzyni, więc porównać case-nieczuły przy rozwiązywaniu nazwy.

Serwer SQL

Te same widoki INFORMATION_SCHEMA. Cytuj z kwadratowymi nawiasami, podwajając każdy wspornik zamykający wewnątrz. ORDER BY [id] DESC OFFSET @o ROWS FETCH NEXT @n ROWS ONLY.

SQLite

Tabele: SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'Kolumny: SELECT name FROM pragma_table_info(?) - użyć tej formy tabeli, ponieważ goły PRAGMA table_info(x) Polecenie nie może wziąć parametru związanego i zapraszając interpolację strun jest dokładnie to, co próbujesz zamknąć. Cytuj podwójnymi cytaty. Strona z LIMIT n OFFSET m.

Wyrocznia

Tabele: SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = :owner; kolumny z ALL_TAB_COLUMNS. Cytować z podwójnymi cytaty, i pamiętaj nienotowane foldy identyfikacyjne do sprawy UPPER, przeciwieństwo PostgreSQL. Strona z OFFSET :o ROWS FETCH NEXT :n ROWS ONLY na 12c i później.

MongoDB

Brak SQL, więc brak interpolacji identyfikacyjnej i parametrów związanych - inna dyscyplina dla tego samego celu. Zobacz poniżej.

Zapytanie introspekcji na silnik
-- MySQL / MariaDB
SELECT TABLE_NAME  FROM information_schema.TABLES  WHERE TABLE_SCHEMA = ?;
SELECT COLUMN_NAME FROM information_schema.COLUMNS WHERE TABLE_SCHEMA = ? AND TABLE_NAME = ?;

-- PostgreSQL
SELECT table_name  FROM information_schema.tables  WHERE table_schema = $1;
SELECT column_name FROM information_schema.columns WHERE table_schema = $1 AND table_name = $2;

-- SQL Server
SELECT TABLE_NAME  FROM INFORMATION_SCHEMA.TABLES  WHERE TABLE_SCHEMA = @schema;
SELECT COLUMN_NAME FROM INFORMATION_SCHEMA.COLUMNS WHERE TABLE_SCHEMA = @schema AND TABLE_NAME = @table;

-- SQLite
SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%';
SELECT name FROM pragma_table_info(?);

-- Oracle
SELECT TABLE_NAME  FROM ALL_TABLES      WHERE OWNER = :owner;
SELECT COLUMN_NAME FROM ALL_TAB_COLUMNS WHERE OWNER = :owner AND TABLE_NAME = :tbl;
💡
Resoluve, następnie użyj nazwy RESOLVED. Nigdy nie przekaż pisowni dzwoniącego do zapytania nawet po sprawdzeniu go - sprawdź prawdziwe imię na liście przeczytanej z schematu i interpolate, że. To nic nie kosztuje i zamyka lukę między "ta nazwa dopasowała coś" i "to jest nazwa, którą mam zamiar uruchomić".

MongoDB: te same zasady, bezSQL

Nie ma łańcucha zapytań do wstrzyknięcia, więc ludzie zakładają, że nie ma nic do ochrony. Istnieje: dokument filtrujący. Przekazywanie JSON dostarczanych przez telefon bezpośrednio do find() pozwala na wysłanie rozmówcy {"$ne": null} lub {"$gt": ""} gdzie oczekiwałeś wartości i po cichu wybierz każdy dokument.

MongoDB - lista zbiorów, filtr wymuszony skalarnie, rzut jako redakcja
// Node + the official driver
const names = (await db.listCollections({}, { nameOnly: true }).toArray()).map(c => c.name);

function resolveCollection(given) {
  if (!/^[A-Za-z0-9_.-]+$/.test(given || "")) return null;
  return names.find(n => n.toLowerCase() === String(given).toLowerCase()) || null;
}

const coll = resolveCollection(q.collection);
if (!coll) return out(res, { success: false, error: "unknown_collection" }, 404);

// Build the filter from a validated field and a SCALAR value. Never spread
// caller JSON into it: {"$ne":null} would match every document.
const filter = {};
if (q.where_field) {
  if (!/^[A-Za-z0-9_.]+$/.test(q.where_field))
    return out(res, { success: false, error: "unknown_field: " + q.where_field }, 400);
  filter[q.where_field] = String(q.where_value ?? "");   // String() is the guard
}

// Projection is the redaction allow-list: drop secrets, never return them.
const projection = { password: 0, remember_token: 0, api_key: 0, secret: 0, token: 0 };

const limit = Math.min(Math.max(parseInt(q.limit ?? "25", 10) || 25, 1), 200);
const rows  = await db.collection(coll)
                      .find(filter, { projection })
                      .limit(limit)
                      .skip(Math.max(0, parseInt(q.offset ?? "0", 10) || 0))
                      .toArray();
Nazwy kolekcji pochodzą z list Collections

To jest Twój schemat informacyjny. Rozwijaj pisownię dzwoniącego przeciwko niemu i używaj rozwiązanej nazwy.

Wymuś każdą wartość filtra na skalar

String () lub numer () wokół niego jest całą obroną przed wtryskiem operatora. Dokument, w którym spodziewasz się wartości jest odpowiednikiem NoSQL 'a dla bezstronnego cytatu.

Projekcja jest zasadą redakcji

Wyłączcie pola w kształcie sekretów, aby nigdy nie opuszczały serwera, zamiast usuwać je z wyniku.

Deletes stay single-document by _id

deleteOne with a resolved _id. Never deleteMany, and never a filter the caller influenced.

Pisarze pozostają na liście

Takie samo rozumowanie jak SQL: nazwa kolekcji, których pisanie może dotknąć, a odmówić reszty z wyjaśnieniem.

Punkt końcowy tożsamości w innych językach

Sonda tożsamości jest drugą połową mostu, i to też HTTP. Blok podpisu jest identyczny w każdym języku: base64url ładunku,HMAC-SHA256 ten ciąg, połączyć z kropką.

Nie pisz tego ręcznie od zera. Ustawienia, Portal Wsparcia posiada gotową trasę na język dla portalu (jeden-czas, dwuminutowy token). Zdalne strony, Twoja strona, kody, C. Rozpoznaj logged- w klientach automatycznie niesie wersję czatu na język (jednogodzinny token plus opiekun odświeżania). Weź sygnalizator z smaku pasującego do stosu.
Co zmienić, gdy ponownie go używasz

Te wyszczerbione miętówki miętowe PORTAL handoff token, który jest celowo bardziej rygorystyczny: to niesie Jti i single_use:prawdziwe i żyje o 120 Sekundy, ponieważ podróżuje w URLMost lub widżetowy symbol tożsamości nie nosi żadnego z tych i używa dłuższego exp, minut do godzin.

Co pozostaje takie samo

site_key, iat, exp i top- poziom uwierzytelniony: prawdziwe, plus admin lub klient z identyfikatorem i nazwą użytkownika lub e-mail. Te same roszczenia, ten sam podpis, ten sama tajemnica.

Oba tokety weryfikują

Trzy części JWT podpisane HS256 działa, tak samo jak dwuczęściowa bazowa 64url ładowność plus hex HMAC, które emituje odniesienie do PHP. Użyj dowolnego języka biblioteki sprawiają naturalne - biblioteka JWt jest zazwyczaj krótszą ścieżką poza PHP.

Nigdy nie zmiętaj w przeglądarce

Podpisanie umowy z klientem oznacza wysłanie sekretu strony do każdego gościa.

Wybieranie, szczerze

Platforma jest PHP

Zapisz most w PHP. Wysyła w pakiecie, jest dryft- sprawdzone i może uruchomić własne ramy platformy do czytania sesji na żywo dla sondy tożsamości. Nic innego nie daje wszystkie trzy.

Platforma to węzeł

Statki mostowe . js, znaki i są sprawdzane dokładnie tak jak PHP. Nic nie jest rezygnowane.

Platforma jest Python, Ruby, Go, . NET lub Java

Dostarcz przez panel zaciskanie i powiedz to w panelu nadwozia; nie zostawiaj pliku w mostku /, gdzie konformancja będzie odmówić pakietu. Złącze jest inaczej całkowicie normalne: działania, dostawców kontekstu, tożsamości i odwiedzających wszystkie działają tak samo, ponieważ nikt z nich nie dba o to, co odpowiada na HTTP call.

Nie można uruchomić procesu na hoście platformy

Wtedy wzór mostu nie jest właściwym narzędziem. Most istnieje, aby dotrzeć do platformy z wewnątrz własnego hosta. Jeśli można tylko dotrzeć z zewnątrz, piszesz zwykłe złącze API przeciwko jakiejkolwiek powierzchni, która to robi naraża.

⚠️
Jeszcze jeden warty planowania warunek: sonda tożsamości musi przeczytać sesję logowania platformy, co zazwyczaj oznacza działanie wewnątrz własnego procesu platformy lub przynajmniej na jej hoście z dostępem do swojego sklepu sesji. Most napisany w innym języku od platformy może służyć wygodnie i może nadal walczyć o odpowiedź op = admin_identity. Jeśli tak jest, wysłać most danych w swoim języku i sonda tożsamość w platformie.
Łączniki

Daj asystentowi obie połowy: działania i kontekst

Jest to najczęstsza rzecz, której brakuje ze złącza, które "działa, ale jest bezużyteczne". Działania pozwalają AI robić rzeczy. Sekcje kontekstowe pozwalają mu wiedzieć rzeczy. Złącze potrzebuje zarówno, jak i większość pytań, na które zwraca się administrator są odpowiedzią w kontekście, nigdy przez działanie. Złącznik z doskonałymi działaniami i nie dostawca kontekstu prawdomównie informuje, że nic nie widzi.

Dwie połówki

Działania - jak AI robi rzeczy

Oskarżono o działania.jsonlub zwrócone przez registerActions (). Model wybiera jeden, wypełnia swoje parametry, orazOpsIQwykonuje go. Działania są dla czasowników: anulować tę rezerwację, otworzyć ten bilet, zmienić ten status.

Sekcje kontekstowe - jak AI wie o rzeczach

Zgromadzony przez ContextProvider przed uruchomieniem modelu. "Ile zamówień w tym miesiącu", "którzy są moimi najnowszymi klientami",, "co sprzedajemy" wszystko rozwiązać poprzez przeglądanie kontekstu, i nigdy nie dotykać działania w ogóle.

⚠️
Symptom brakującego dostawcy: asystent odpowiada "Brak włączonego złącza dostarczonego w tym kontekście sekcji", podczas gdy złącze jest zainstalowane, włączone i przechodzi test połączenia. Nic nie jest logowane, nic nie jest błędne. Ta wiadomość oznacza, że żaden dostawca nie zgłosił tej sekcji.

Słownictwo sekcji uniwersalnych

OpsIQ prosi o sekcje według nazwy rodzajowej. Twoim zadaniem jest zdecydować, co każdy z nich oznacza na swojej platformie i odpowiedzieć na nie. Rezerwacja hotelu jest zamówienie hotelu; pokój jest to, co hotel sprzedaje. Mapa, nie wymyślać.

zlecenia / pending_orders

Niezależnie od transakcji jest na swojej platformie: zamówienia, rezerwacje, rezerwacje i miejsca pracy, przesyłki. pending_orders jest ta sama lista filtrowana do tych niedokończonych.

klienci

Lista klientów.

products

Co sprzedaje platforma: produkty, pokoje, plany, usługi.

rozliczanie

Dochody i pieniądze w kształcie sumy, plus liczy się według stanu.

bilety, usługi, domeny, serwery, aktywność

Użyj ich, gdy platforma naprawdę je posiada. Nie zmuszaj do mapowania - sekcja bez odpowiedzi jest lepsza niż niewłaściwa.

Wszystko inne co masz na platformie

Zdecyduj się na swoją własną. Dostawca, który deklaruje sekcje (): ["licencje", "przesyłki"], ma te połączone z uniwersalną listą losową, więc specyficzne dla platformy lookup stają się dostępne bez żadnych zmian podstawowych.

Błąd, który kosztuje dzień

Dostawca kontekstu MUSI wdrożyć interfejs. Rejestr sprawdza go, więc klasa, która tylko Looks prawo jest pomijany - bez błędu, gdziekolwiek.

ContextProvider. php - kontrakt, z pakietu referencyjnego Botble
use OpsIQ\Platform\ContextProviderInterface;

/* MUST implement ContextProviderInterface: ContextRegistry::collectAll()
 * type-checks it, so a provider that merely LOOKS right is skipped and every
 * section answers "No enabled connector supplied this context section" — the
 * exact symptom, with no error anywhere. */
final class ContextProvider implements ContextProviderInterface
{
    public function slug(): string  { return 'yourplatform_context'; }
    public function label(): string { return 'Your Platform (orders, customers, products)'; }
    public function priority(): int { return 30; }   // lower renders earlier

    /** ADMIN only. The guest surface has its own provider and its own rules. */
    public function surfaces(): array { return ['admin']; }

    /** The universal section names this connector can answer. */
    public function sections(): array
    {
        return ['orders', 'pending_orders', 'clients', 'products', 'billing'];
    }

    public function isAvailable(): bool
    {
        try {
            $s = \OpsIQ\Connectors\ConnectorRegistry::getSettings('yourplatform') ?: [];
            return trim((string)($s['base_url'] ?? '')) !== '' && trim((string)($s['api_key'] ?? '')) !== '';
        } catch (\Throwable $e) {
            return false;
        }
    }

    public function build(array $ctx): string
    {
        $section = strtolower(trim((string)($ctx['section'] ?? '')));
        $limit   = max(3, min(50, (int)($ctx['limit'] ?? 20)));
        $query   = trim((string)($ctx['query'] ?? ''));
        try {
            switch ($section) {
                case 'orders':
                case 'pending_orders': return $this->orders($limit, $query, $section === 'pending_orders');
                case 'clients':        return $this->customers($limit, $query);
                case 'products':       return $this->products($limit);
                case 'billing':        return $this->billing();
            }
        } catch (\Throwable $e) {
            return '';   // a provider must NEVER break prompt assembly
        }
        return '';
    }
}
Zarejestruj go ze złącza

Wdrożenie ContextConnecttorInterface i zwrot dostawców z context Providers (). Klasa złącza może również wdrożyć Contect ProviderInterfac bezpośrednio i być zarejestrowana jako sama.

Zwróć zwykły tekst, a nie JSON

build () zwraca blok tekstowy, który jest złączony do polecenia. Napisz go dla czytelnika: nagłówek, a następnie jedna linia na wiersz.

Powrót "zamiast rzucania

Zbierz swoje własne wyjątki. Dostawca, który rzuca jest zalogowany i pominięty, ale powrót "jest umową.

Budowniczy nie może pisać sekcji () dla Ciebie

Wygenerowane sekcje statków ContextProvider. php: tablica {return [];} i asystent nie ma dla niej pola. Wypełnij ją ręcznie - i pamiętaj, że przepublikowanie z pliku czarodzieja OVERWRITES. Kopiuj najpierw swoje edycje.

⚠️
Podaj prawdziwe RAZEM, nie liczbę wierszy, które wysłałeś. Strona nie jest całością. Dostawca, który list dwadzieścia wierszy bez mówienia tak dostaje asystenta z ufnością odpowiadając "masz20rezerwacje "gdy platforma posiada669. Jeden tani COUNT i jedna wyraźna linia - "OGÓŁEM w pliku:669(ta lista pokazuje najnowsze20Tylko) "- jest to całe rozwiązanie, a niezawodnie błędna liczba jest gorsza niż brak liczby.
Blok sekcji, który nie może być źle policzony
$lines = ['YOUR PLATFORM — ORDERS (live, newest first)'];
$lines[] = 'TOTAL orders on file: ' . (int)$total
         . ' (this list shows the newest ' . count($rows) . ' only — never count these rows to answer "how many")'
         . ' | by status: ' . $byStatus;
foreach ($rows as $r) {
    $lines[] = '#' . (int)$r['id'] . ' ' . $r['reference'] . ' | ' . $r['status']
             . ' | amount ' . $r['amount'] . ' | ' . substr((string)$r['created_at'], 0, 16);
}
$lines[] = 'Use yourplatform_get_order (order_id) for the full record.';
return implode("\n", $lines);

Podaj swoje działania, aby OpsIQ mógł odróżnić odczyty z pism

OpsIQ klasyfikuje działanie przez WORDS w jego action_id, i jest to celowo konserwatywne: wszystko, czego nie może rozpoznać jest traktowane jako pismo i wymaga karty aprobaty.

1
is_destructive lub requires_confirmation wygrane

Jeśli którekolwiek jest ustawione, działanie zawsze wymaga zatwierdzenia. Oświadcz je szczerze - to właśnie odkrywa kartę aprobaty administratora.

2
Słowo zapisu gdziekolwiek w id sprawia, że to pisać

Dodać, tworzyć, otwierać, aktualizować, zmieniać, modyfikować, usuwać, usuwać, anulować, refundować, zawiesić, zakończyć, aktywacja, aprobatować, odrzucić, wysłać, oznaczyć, reset, złapać, pustka, zamknąć, ponownie otworzyć, przypisać, cofnąć, przyznać, ustawić, włączyć, wyłączyć, wydania, wygenerować, zastosować, naładować, zapłacić, zapewnić, odnowić, upgrade, połączyć, przenieść, przenieść się, eskalate, flaga, rejestr, sync, pchnięcie, import, uruchomić, uruchomić wyzwalanie, start, stop, restartuj i kilka innych.

3
Wtedy czytane słowo czyni to czytaniem

get, list, search, find, view, show, aport, count, lookup, opisz, przeczytaj, eksport, podgląd, test, ping, status, streszczenie, szczegóły, niedawne, historia, check, log, stats, metrics, review, revenue, building, reports, analytics, balance, use, quota, migawki, wgląd, paszy, szkic, triage, klasyfikacja, sugerują.

4
Następnie metoda HTTP decyduje

GET, HEAD i OPTIONS są odczytywane.

5
W przeciwnym razie jest to pismo

Nierozpoznane oznacza wymagane zatwierdzenie.

⚠️
Write words are checked PRZED odczytaniem słów, więc mieszane imię jak get_and_sync_orders jest zaklasyfikowany jako WRITE. Wybierz jeden czasownik, umieścić go pierwszy, i zachować go czyste: list_orders, get_customer, search_bookings, cancel_booking, set_order_status.

Zgłoś native_api tylko wtedy, gdy platforma naprawdę ma jeden

The native_api capability registers a generic <slug>_api_call passthrough so the model can reach endpoints your typed actions do not cover. On a platform with no API it is worse than useless: the model keeps reaching for a tool that cannot succeed, instead of using the tools that can.

Builder decyduje o tym z odpowiedzi na dane

Say the platform has an API and it declares native_api and emits the passthrough. Say it has none (bridge mode, or the "Platform with no API" profile) and it declares platform_bridge instead and strips native_api, so the two can never both be true. You no longer hand-edit this.

Ręcznie autorskie pakiety muszą nadal mieć rację

Jeśli sam piszesz manifest, oświadcz, że dokładnie jeden z native_api lub platform_bridge. Pocieszenia conformance platform_bridge jak właz ewakuacyjny ma złącze mostowe, a Builder odmawia spec, który twierdzi, że platform_bridge w sprawie API złącze.

Uczciwie i uczciwie utrzymuj ai_api_reference.md

On a connector that declares native_api the admin brain heads that file with a line naming <slug>_api_call. Without native_api it is headed neutrally instead, so a bridge connector no longer advertises a tool it does not have. Describe your real surface — for a bridge, that is your op and do vocabulary, not a REST endpoint table.

Naucz mózg admin o swojej platformie

Declare ai_brain_aware and ship two Markdown files. They are read from the INSTALLED package directory (opsiq/connectors/<slug>/) for ENABLED connectors only, and injected into the admin agent's system prompt.

ai_expertise_admin.md

Co ta platforma jest, jak jej dane są kształtowane, jak jego obiekty są nazywane, i dziwactwa, które w przeciwnym razie sprawiają, że asystent zgadywać. Napisz go dla kompetentnego kolegi, który nigdy nie widział platformy.

ai_api_reference.md

Powierzchnia wywołalna. Dla złącza mostowego jest to operacja i zrobić słownictwo z ich parametrów, a nie REST tabeli końcowej.

Budżet

Mniej więcej6,000znaki przechowywane na złączu, i około24,000znaki dla całego bloku na każdym włączonym złączu. Przez pokrywę przyłącza per- złącze Twój plik jest obcinany; bądź zwięzły przed tym, jak oprawca jest.

Precyzja wypłaca

Te pliki są różnicą pomiędzy asystentem używającym uniwersalnych narzędzi stołowych a odpowiadającymi z złej sekcji, ponieważ nic nie mówiło mu o istnieniu tych narzędzi.

💡
Oba pliki muszą być w pakiecie INSTALLED, nie tylko w drzewie źródłowym. Są to zwykłe pliki pakietów, więc są one objęte podpisem i wysłane w ZIP - co oznacza również edycję jednego po podpisaniu złamie pieczęć.
Łączniki

Tożsamość poprzez złącze: admin, klient, portal

Jednym z podpisów umowy służy trzy powierzchnie. Złącze ma na celu przekształcenie "kto jest zalogowany na platformie" w podpisany tokenOpsIQmoże sprawdzić, a następnie przedstawić zweryfikowany temat wOpsIQkształt. Złącze nigdy nikogo nie uwierzytelnia - platforma tak, a podpis niesie to stwierdzenie.

Trzy powierzchnie, jeden sygnalizator

Administracja - personel, wewnątrz pleców

Obiekt administracyjny. Ładunki widżetu wewnątrz panelu administracyjnego platformy i każdy pracownik jest dopasowany do własnego agenta OpsIQ. Pełna przechadzka na stronie admin widget.

Klient - klient-signed- w klienta, w czacie klienta

Obiekt klienta. To właśnie pozwala klientowi na zagubienie konta WHOLE zamiast anonimowego wyszukiwania: każde zamówienie, pełny szczegół i wszelkie działania samoobsługowe, które pozwalają.

Portal - głębokie połączenie do portalu wsparcia

Te same roszczenia plus jti i single_use, z 120-drugie życie, ponieważ symbolik podróżuje w URL i musi być wydatkowane raz. Nie należy ręcznie przekręcić tego: Ustawienia, Portal Wsparcia posiada gotowy snippet na język, a platforma mentuje go dla Ciebie, gdy obszar konta działa na tym serwerze.

Umowa o obciążenie użytkowe

To są roszczenia, które sprawdzają weryfikatorzy. Nic tutaj nie jest opcjonalne, cokolwiek może sugerować przykład w innym miejscu.

site_key

Najwyższy poziom. Musi być równy klucz strony wniosku, lub token jest odrzucany.

iat i exp

Najwyższy poziom, unix seconds. Exp musi być w przyszłości i po iat. Token więcej niż około minuty w przyszłości jest odrzucany. Zachować życie krótkie - minut do godzin.

uwierzytelnione: prawdziwe

Najwyższa ranga, obok exp.

platforma

Najwyższy poziom. Krótka kula określająca pochodzenie. Zalecane, i pozwala dostawcy tożsamości złącza powiedzieć swoje własne żetony z innej platformy.

administrator lub klient

Obiekt o nazwie obiektu. Musi mieć niepusty identyfikator oraz nazwę użytkownika lub e-mail - na nich pasuje brama dostępu do peradmin. Zawarte są oba te elementy, gdy masz obie te cechy.

Minting, werbatem z mostu Botble
$payload = [
    'site_key'      => $cfgSiteKey,
    'iat'           => time(),
    'exp'           => time() + 6 * 3600,
    'authenticated' => true,
    'platform'      => 'yourplatform',
    /* 'admin' or 'customer' — OpsIQ stamps the matching session identity
     * from whichever key is present. */
    $opsiqSubject   => $subjectPayload,
];
$payload64     = rtrim(strtr(base64_encode(json_encode($payload, JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
$identityToken = $payload64 . '.' . hash_hmac('sha256', $payload64, $cfgSecret);

Dwóch weryfikatorów i ich porażka.

OpsIQ ma dwa tokee weryfikatorów, i nie były identyczne. Wiedząc, że to oszczędza Ci popołudnie, ponieważ objaw nie wygląda jak przyczyna.

Widget admin ma własnego weryfikatora

opsiq/ osadzone /admin_ajax.php posiada lokalnego weryfikatora, który akceptuje uwierzytelnioną flagę w obu pozycjach. Lista rozmów, historia i nieprzeczytane wszystkie przejść przez nią, więc uwierzytelnienie grzywny.

Współdzielony weryfikator jest bardziej rygorystyczny

opsiq/ w tym /customer_identity_token_verify.php siedzi za strumieniem czatu i rdzeniem AJAX APIHistorycznie wymagał flagi na poziomie TOP.

Objawy

Historia i rozmowy działają. Każdy czat zmienia odpowiedzi "Wymagany logowanie admin". Czyta dokładnie jak błąd sesji, a nie jest: token nie ma flagi najwyższego poziomu.

Co robi obecny rdzeń

Teraz akceptuje flagę na najwyższym poziomie OR wewnątrz tematu, więc umowa jest jednolita. Starsze rdzenie odczytywane są tylko na najwyższym szczeblu. Emit kształt kanoniczny i pakiet działa na każdym wydaniu.

Jest to maszyna-sprawdzone teraz. Każdy plik w pakiecie, który mintuje identyfikatory żetonów jest statycznie skanowane przeciwko umowie, a ładunek platforma odmówiłaby niepowodzenie zgodności z dokładnym pliku i linii. Uruchom go sam: narzędzia php /verify_identity_contracts.php.

Klienci w czacie klienta Signed- in

Rdzeń musi być pieczęcią zweryfikowanego klienta, a twój złącze musi go prezentować.

1
Twój most lub punkt końcowy wygładza żeton klienta

Ten sam sygnatariusz co admin, z podmiotem klienta. Przeczytaj klienta z sesji platformy. Jeśli platforma podpisuje klientów na innej straży od adminsów, przeczytaj strażnika chcesz i nigdy nie wrócić do tematu - tak klient byłby wręczony żeton admin.

2
Bazowa weryfikuje i pieczętuje

Na ważnym tokenie, core pieczętuje zweryfikowany obiekt do sesji. Twój dostawca czyta sprawdzoną tożsamość; nigdy nie uwierzytelniają.

3
Twój IdentityProvider prezentuje go

DetectCustomer () zwracaOpsIQkształt. MUSI wdrożyćOpsIQ\ Platform\ IdentityProviderInterface, lub rejestr po cichu pomija go - ta sama pułapka co dostawca kontekstowy.

4
Twoje działania customerscoped akceptują customer_id

OpsIQ blokuje go przed wykonaniem, ale model nie może go dostarczyć.

IdentityProvider. php - przeczytaj sprawdzoną tożsamość, wyświetl ją w kształcie OpsIQ
use OpsIQ\Platform\IdentityProviderInterface;

final class IdentityProvider implements IdentityProviderInterface
{
    public function slug(): string  { return 'yourplatform_identity'; }
    public function label(): string { return 'Your Platform identity (bridge-signed identity_token)'; }
    public function priority(): int { return 25; }   // ahead of the generic session provider

    public function isAvailable(): bool
    {
        try {
            $s = \OpsIQ\Connectors\ConnectorRegistry::getSettings('yourplatform') ?: [];
            return trim((string)($s['base_url'] ?? '')) !== '';
        } catch (\Throwable $e) { return false; }
    }

    public function detectAdmin(): ?array
    {
        $row = $this->sessionRowFor('_opsiq_admin_identity');
        if (!$row || !$this->isOurs($row)) return null;
        return [
            'id'       => (int)($row['id'] ?? 0),
            'name'     => $this->displayName($row, 'Admin'),
            'email'    => (string)($row['email'] ?? ''),
            'username' => (string)($row['username'] ?? ''),
            'role'     => (string)($row['role'] ?? ''),
            'platform' => 'yourplatform',
            'source'   => 'yourplatform_identity_token',
        ];
    }

    public function detectCustomer(): ?array
    {
        $row = $this->sessionRowFor('_opsiq_customer_identity');
        if (!$row || !$this->isOurs($row)) return null;
        return [
            'id'       => (int)($row['id'] ?? 0),
            'name'     => $this->displayName($row, 'Customer'),
            'email'    => (string)($row['email'] ?? ''),
            'phone'    => (string)($row['phone'] ?? ''),
            'platform' => 'yourplatform',
            'source'   => 'yourplatform_identity_token',
        ];
    }

    /* A session identity stamped by ANOTHER platform's token must not be
     * claimed here. An empty platform is accepted because older bridges did
     * not stamp one, and the site key already scoped the token. */
    private function isOurs(array $row): bool
    {
        $p = strtolower(trim((string)($row['platform'] ?? '')));
        return $p === '' || $p === 'yourplatform' || $p === 'remote';
    }

    private function sessionRowFor(string $key): ?array
    {
        if (session_status() !== PHP_SESSION_ACTIVE) return null;
        $row = $_SESSION[$key] ?? null;
        return (is_array($row) && (int)($row['id'] ?? 0) > 0) ? $row : null;
    }
}

Działania wykonywane w ramach własnego zakresu: dwa zamki, oba wymagane

Model nie może wybierać, czyje dane odczytuje. OpsIQ powoduje, że po jego stronie, a platforma musi egzekwować go na drugiej stronie zbyt. Jeden zamek jest błąd od przecieku; dwa zamki są umową.

Blokada1 — OpsIQnadpisuje parametry tożsamości

Przed uruchomieniem akcji customer- chat, OpsIQ zastępuje każdy parametr w kształcie identyfikatora tożsamością odwiedzającego VERIFIDED: client_id, clientid, user_id, userid, customer_id, account_id pobiera zweryfikowany identyfikator numeryczny; client_identifier, customer_identifier, account_identifier wziąć to jako ciąg; e-mail, client_email, customer_email, user_email wziąć zweryfikowaną wiadomość e-mail. Niezależnie od zaproponowanego modelu jest odrzucany.

Blokowanie 2 - Twoja platforma ponownie przeprogramowuje każde zapytanie

Weź id, który ci podano i dodaj go do klauzuli Where każdego czytania i każdy zapis na tej powierzchni. Nigdy nie ufaj referencji w wniosku samodzielnie. Klient signed-in pytając o czyimś zamówienie musi wrócić pusty, a nie zabronione.

Podaj parametry, aby zablokować 1, aby je znaleźć

Zadzwoń do niego customer_idParametr nie jest kuszący ani ref. Parametr OpsIQ nie rozpoznaje parametru, którego nie może zablokować.

⚠️
Daj signed- w powierzchni klienta jego własne operacje, oddzielone od admin, nawet jeśli SQL wygląda podobnie. Dwie powierzchnie z różnymi zasadami pozostają uczciwe; jedna powierzchnia z flagą staje się przeciek dzień ktoś edytuje niewłaściwą gałąź.

Brak przewodów stron: sonda deklarowana przez podłącza

You can spare the operator all page wiring. Add an admin_identity_probe_url setting (https only) pointing at your identity endpoint. The plain admin-widget loader from Remote Sites, Codes then works with no page attributes at all: the widget discovers the endpoint through the connector, calls it with the site key and widget token, and authenticates each admin individually. A page can still override with a data-identity-endpoint attribute or window.OpsIQAdminIdentityEndpoint.

ustawienia.json- ustawienie sondy
{
  "key": "admin_identity_probe_url",
  "label": "Admin identity probe URL",
  "type": "text",
  "placeholder": "https://your-site.com/opsiq-yourplatform-bridge.php?op=admin_identity",
  "help": "Set this to your bridge admin_identity endpoint and the plain admin-widget loader works with NO page wiring: the widget probes this URL by itself, the bridge answers with the signed identity of the CURRENTLY logged-in admin, and every admin is matched to their own OpsIQ agent. Leave empty to keep the admin embed off."
}
Sonda jest wywoływana przez przeglądarkę

Same- origin, więc nie może nosić własnego nagłówka. Jego uwierzytelnieniem jest sesja platformy. Umieść go AHEAD z bramki mostkowej-klucz, trzymać go z dala od rekordowych danych i nic nie zwrócić dla zagubienego gościa.

Odpowiada na stałe kształt

{"success":true,"authenticated":true,"admin":{...},"identity_token":"..."} — and {"success":false,"authenticated":false,"error":"..."} when nobody is signed in.

Nie ma długo żywej tajemnicy w źródle strony

Tylko podpisany, wygasający żeton.

pełne implementacje punktu końcowego dla produktu Laravel,WordPress, WHMCS, Symfony i zwykły PHP, plus hard- won Laravel specifics i zlecenie rozwiązywania problemów, są na stronie widget admin. Są one tym samym kodem dla klienta: zmienić strażnika czytasz i klucz tematyczny podpisz.

Łączniki

Publikowanie: edycja folderu nie jest publikacją

Najczęstszym sposobem na utratę popołudnia jest edycja złącza pod marketplace_connectors /, ponowne zainstalowanie go i nic się nie zmieniło. Instalatory nie czytają tego folderu. Wyciąga podpisane ZIP z katalogu rynku. Publikowanie to sekwencja, która umieszcza zmiany w tym ZIP.

Dlaczego edycja nic nie zrobiła?

marketplace_connectors/<slug>/ is the SOURCE

To miejsce, gdzie pracujesz, nic z tego nie wynika.

Katalog posiada podpisane ZIP

Instalacja pobiera, że ZIP, weryfikuje podpis i rozpakowuje go. Dopóki nie odbudujesz ZIP każda instalacja ciągle dostaje stary pakiet.

Złącze Builder publikuje gdzie indziej

It writes into /connectors/<slug>/ on this install. That is a local connector, not a marketplace release. The two paths do not overlap.

Sekwencja zwalniania

1
Wypuście wersję w plikach DWA

settings.json oraz connector_contract.json. Konformancja porównuje je i nie udaje się, jeśli ślimak, wersja lub zestaw funkcji nie zgadza się. Dodaj CHANGELOG.md wpis, gdy tam jesteś - jest to wymagany plik.

2
Resynchronizuj mostek

php tools/sync_connector_bridge_snippets.php --apply — only relevant if your package ships bridge/*.php, and mandatory if it does. Skipping it means the panel hands operators the previous bridge.

3
Podpisz ponownie każdy pakiet

Narzędzia php /resign_all_connectors.php - podpis obejmuje hashy plików, więc ANAY edytuje je unieważnia. Podpisz ostatni po zakończeniu każdego pliku.

4
Eksportuj klucz do podpisania, a następnie nasiona

Poszukiwacz podpisuje każdy pakiet, budując ZIP i działa w kontekście, w którym nie można odczytać klucza z ustawień - więc musi pochodzić ze środowiska.

5
Przełóż plik mostu, jeśli go wyślesz

Ponowne zainstalowanie złącza uaktualnia pakiet. NIE dotyka kopii siedzącej w webroot operatora. Powiedz im, w panelu i w changelogu.

Całe wydanie, w porządku
# 2 — hold the panel copy identical to the shipped bridge
php tools/sync_connector_bridge_snippets.php --apply

# 3 — re-sign (do this last, after every file is final)
php tools/resign_all_connectors.php

# 4 — the seeder reads the signing key from the ENVIRONMENT only
export OPSIQ_CONNECTOR_SIGNING_KEY="$(php -r 'require "bootstrap/init.php"; echo opsiq_setting("connector_signing_key","");')"
php saas/scripts/maint/seed_marketplace_free.php --apply --only=<slug>

# verify before and after
php tools/verify_identity_contracts.php
php vendor/bin/phpunit tests/phpunit/Unit/Connectors
⚠️
Dlaczego eksport nie jest opcjonalny: signer szuka klucza w OPSIQ_CONNECTOR_SIGNING_KEY po pierwsze i connector_signing_key ustawienie drugie. Poszukiwacz działa na bootstrap SaaS i narzędzia /sign_connector.php w ogóle nic nie robi, więc w obu ustawieniach czytnik nie istnieje - bez zmiennej środowiskowej nie ma klucza, a otrzymasz "Nie można podpisać klucz dostępny" lub każdy pakiet zgłoszony jako signing_failed. Tylko narzędzia /resign_all_connectors.php buty OpsIQ i może znaleźć klucz sam.

Co właściwie statki

Tylko pliki na okładce podpisu

ZIP jest zbudowany z własnej listy plików signera, więc plik bezpański siedzący w folderze pakietów nie jest wysyłany. To jest celowe: niepodpisany plik używany do jazdy po klientach.

Rozszerzenia objęte

php,json, js,css, md, txt,html, sh, svg, png, jpg, jpeg, gif, webp, ico, yml, yaml - rekursywnie, w tym mostek / i testy /. podpis.jsonsamo jest wyłączone z hashów, a następnie dodane do ZIP, aby instalacje mogą zweryfikować.

Wszystko inne jest zgłaszane jako not_packaged

Poszukiwacz określa każdy plik, który po sobie zostawił. Przeczytaj tę listę. Plik, którego chcesz wysłać oznacza nieodpowiednie rozszerzenie lub złe położenie - nie cichy sukces.

Edycja pliku łamie pieczęć

Włączając w to plik Markdown.

Wymagane pliki w pakiecie rozdzielnym

connector.php

Musi zwrócić przykład ConnectorInterface.

settings.json

Manifest: ślimak, nazwa, wersja, manifest_version, kompatybilności, zdolności, connector_contract_version, ustawienia.

connector_contract.json

Kontrakt do odczytu maszynowego. Jego ślimak, wersja i zestaw funkcji muszą być identyczne z settings.json.

README. md, DEVELOPEL. md., CHANGELOG. md

Wszystkie trzy są sprawdzane pod kątem istnienia i minimalnego rozmiaru. DEVELOPER. md potrzebuje rzeczywistej zawartości, a nie stub.

Plik na deklarowaną zdolność

Każda funkcja określa plik, którego oczekuje — ContextProvider.php w odniesieniu do kontekstu, IdentityProvider.php dla tożsamości, GuestLookupProvider.php zamiast guest_lookup, i tak dalej - chyba że złącze implementuje funkcję inline.

Nic, co wygląda jak kredyt zaufania.

Konformancja skanuje trzy pliki Markdown dla wartości w formie sekretów i prywatnych kluczy, a nie udaje się trafienie.

Sprawdź zanim go wyślesz.

Komplet zgodności jest tym samym uruchomieniem instalacji. Sprawdza manifest z umową kanoniczną, że runtime i zdolności manifest zgadzają się, że każda zadeklarowana zdolność ma swój plik i jego metody, identyczny-token umowy w każdym pliku mintingu, mecz Bridge- snippet, guest- lookup dopuszczalna higiena, unikalność działania i bezpieczeństwo potwierdzenia, a także podpis pakietu.

Uruchom wszystkie cztery przed każdym wydaniem
# conformance for every marketplace package
php tools/test_marketplace_connector_conformance.php

# the identity-token contract, statically, with file:line on failure
php tools/verify_identity_contracts.php

# the connector unit suite
php vendor/bin/phpunit tests/phpunit/Unit/Connectors

# the release gate
php tools/release_gate_connectors.php
💡
Jedna porażka jest oczekiwana i nie stanowi problemu: sprawdzanie podpisu pakietu zgłasza ostrzeżenie podczas edycji. Oczyszcza on moment ponownego podpisania. Każda inna awaria jest prawdziwa.
Łączniki

Pakiet łączników i odniesienie do cyklu życia

Jest to kontrakt na poziomie źródłowym do budowy złącza, które OpsIQ może odkryć, skonfigurować, potwierdzić, włączyć, wykonać, przetestować, podpisać i rozpowszechnić.

Odniesienie do programisty
Pakiet łącznikówPakiet złączy posiada wymagane implementację i manifest łącznika, z opcjonalnymi działaniami, recepturami, wiedzą, aktywami i metadanymi podpisu.Pakiet łącznikówdeveloperMANIFESTv1LIFEKTYKLEZarządzaniePRACOWNIKKoper włoskiWIDOK PRACY ŻYWEJconnector.phpKlasa / fabryka złączaWymaganesettings.jsonSchemat Manifestu i ustawieńWymaganeactions.jsonDefinicje działańOpcjonalniesignature.jsonMetadane podpisu pakietuZwolnienie1DECLAREManifest i możliwości2IMPLEMENTCykl życia i usługodawcy3WAŻNETest, znak, opakowanie
Pakiet złączy posiada wymagane implementację i manifest łącznika, z opcjonalnymi działaniami, recepturami, wiedzą, aktywami i metadanymi podpisu.

Minimalne opakowanie

connectors/example_platform/
├── connector.php          # connector implementation / entry point
├── settings.json          # manifest + configuration schema
├── actions.json           # optional action catalogue
├── README.md              # setup, scopes, webhooks and limits
├── workflow_recipes.json  # optional reusable recipes
├── knowledge.json         # optional provider knowledge
├── profile.json           # optional connector profile
├── src/                   # optional client/provider classes
├── assets/                # optional admin assets
└── signature.json         # signed release metadata

Umowa w sprawie Manifest

settings.json wykorzystuje wersję manifest 1. Walidator oczekuje ślimaka, nazwa, wersja, manifest_version, kompatybilność, opis i możliwości. opsiq_min oraz opsiq_max. Status zwolnienia jest jednym z produkcja, beta, podgląd lub wzór; dojrzałość zdolności wykorzystuje poziomy L1- L6. Pakiety Legacy mogą być normalizowane z ostrzeżeniami, ale nowy pakiet powinien przejść bez ostrzeżeń.

Interfejs złącza rdzeniowego

  • Tożsamość i konfiguracja: slug(), name(), description(), capabilities(), settingsSchema(), testConnection().
  • Cykl życia: onEnable() oraz onDisable(). Nieusuwalne musi być nieniszczące; czyszczenie danych jest oddzielną operacją celową.
  • Przylot / synchronizacja: handleWebhook(), poll(), backfill(). Poll obsługuje prace przyrostowe; backfill historii importu i musi być bezpieczny do powtórzenia.
  • Wsparcie: pushReply() gdzie platforma akceptuje odpowiedzi.
  • Działania: registerActions() dostarcza umowy o działania podlegające wykonaniu.
  • Bezpieczeństwo: securityCapabilities(), syncBlockedIp(), removeBlockedIp(), testSecuritySync().

Abstrakcyjna baza oferuje również opcjonalne zaplecze, listę klientów, odkrywanie / tworzenie konta emailowego, abonentów, detekcję administracyjną / klienta, fakturowanie / kontekst / dostawców tożsamości, ekstrakcję odpowiedzi, ponowne wykonywanie połączeń HTTP, dostęp do ścieżki JSON, niewyraźne ranking i pomoc w paginacji.

Zdolności i uwierzytelnianie

Obsługiwane nazwy zdolności obejmują działania, wyzwalacze, kontekst, tożsamość, sprzedaż, fakturowanie, inbound_ticket, outbound_reply, sync_users, sync_departments, security_events, customer_import, security_native_block, promo_audience, promo_feed, email_mailbox, native_api, ai_brain_aware oraz ai_tickets. Budowniczy zapewnia API klucz, okaziciel, podstawowy, HMAC, OAuth 2 uwierzytelnianie klientów, OAuth 2 kod autoryzacji i szablony uwierzytelniania na zamówienie.

Rejestr cyklu życia

  1. Odkrywanie ładuje opakowanie i potwierdza jego manifest.
  2. Konfiguracja jest zapisywana na przestrzeni roboczej; tajemnice są szyfrowane.
  3. Test połączenia potwierdza kwalifikacje bez możliwości włączenia złącza.
  4. Włącz wywołania onEnable(), synchronizuje definicje działań i może rozpocząć początkowe backfill.
  5. Aukcja ankietowa / webhook / subskrybent zawsze ma kontekst przestrzeni roboczej.
  6. Wyłącz połączenia onDisable() i zatrzymuje działalność bez usuwania importowanych danych.
  7. Czystość jest oddzielną operacją wyraźną.

Zasady poprawności

  • Użyj klucza workspace / site w każdym odczycie, zapisie, klawiszu cache, kluczu deduplikatu i przeszukiwaniu haka webhook.
  • Wykonaj backfill, połknięcie haka webhook i napisz działania idemstrong. Nagrać zewnętrzny ID / event ID wszędzie tam, gdzie platforma zapewnia jeden.
  • W przypadku systemów zdalnych, używać ich API; nigdy nie zakładaj, że ich tabele bazy danych istnieją w OpsIQ połączenie.
  • Zwróć ustrukturyzowane, bezpieczne dla klienta błędy. Nigdy nie ujawniaj tajemnic, surowych śladów dostawcy lub istnienia innego miejsca pracy.
  • Declare tylko funkcje pakiet rzeczywiście implementuje. actions.json katalog nie powoduje, że działanie jest użyteczne do czasu zainstalowania, włączenia, skonfigurowania i jego podłączenia.

Badanie i zwolnienie

Uruchom PPHP, potwierdzenie stanu, testy podłączenia, testy schematów działania, testy podpisu / powtórzenia haka webowego, testy izolacji w miejscu pracy, badania typu backfilled-repeat, testy złącza wyłączonego i próby awarium / ponownego testowania. Pakiet rynkowy powinien być następnie podpisany i zweryfikowany, obejmować dokumentację konfiguracji / uprawnień / dokumentacji haka internetowego oraz podać jego prawdziwy status uwalniania. Płytka łącząca i manifest są autorytatywnym sygnałem dostępności.

Łączniki

Przepisy dotyczące podłączania

Przepisy krok-by- krok dla wspólnych ustawień złącza.

Przepisy
Przepis łącznikaPrzepis konfiguracyjny Shopify jako lista kontrolna: tworzyć aplikację, grant sops, pasty token i testować, włączyć haki webhacks, złożyć zamówienie na test.Przepis łącznikaShopifyRecipe · Shopify z hakami webhakeramiUtwórz własną aplikację w adminie ShopifyKoperty dotacyjne: read_orders, read_customers…Wklej domenę sklepu + token, kliknij TestWłącz synchronizację webhak (Autodiagnostyka zleceń)Umieść zlecenie badania → pojawia się w sprzedaży w 30s1STEP BY STEPPrzepisy dotyczące pasty do kopiowania2REAL PLATFORMSShopify · WHMCS · Stripe· GBP3WERYFIKACJAPokaz zamówienia testowego w 30s
Każdy przepis jest listą kontrolną, którą można śledzić z góry do dołu, tutaj, Shopify z hakami webhacks real- time zamówienia, zweryfikowane przez zlecenie testowe.

Przepis: Shopify z hakami webowymi w czasie rzeczywistym

Scenariusz:
Cel: Połącz Shopify z automatyczną synchronizacją zamówień oraz GDPR zgodności.
Co robić:

1. Create a custom app in Shopify admin (Settings > Apps > Develop apps). 2. Grant scopes: read_orders, read_customers, read_products, write_customers. 3. Copy the Admin API access token. 4. In OpsIQ Connectors > Shopify, enter store domain and token. 5. Click Test Connection. 6. Enable Webhook sync, OpsIQ registers order/customer webhooks automatically. 7. GDPR webhooks register automatically (data_request, customers/redact, shop/redact). 8. Verify: place a test order, check it appears in OpsIQ Sales within 30 seconds.

Przepis: WHMCS integracja

Scenariusz:
Cel: Połącz WHMCS, aby AI mogła szukać klientów, usług, biletów i faktur.
Co robić:

1. In WHMCS admin, Setup > Staff Management > Manage API Credentials. Create a key. 2. In OpsIQ Connectors > WHMCS, enter URL, API identifier, and secret. 3. Click Test Connection. 4. Install the WHMCS module addon for ticket relay. 5. Verify: ask the admin AI "Find client [email protected]". WHMCS data should appear.

Przepis:Stripepłatności

Scenariusz:
Cel: Płatności Track Stripe i niech AI szuka transakcji.
Co robić:

1. In Stripe Dashboard > Developers > API keys, create a restricted key (read: Customers, Charges, Invoices, Subscriptions). 2. In OpsIQ Connectors > Stripe, enter the restricted key. 3. Test Connection. 4. Add webhook endpoint in Stripe: copy the webhook URL shown on the connector's own settings page. It carries a per-connector token and looks like https://your-domain.com/api/connectors.php?slug=stripe&token=THE_TOKEN A URL without the token is rejected with "Missing slug or token". 5. Select events: charge.succeeded, invoice.paid, customer.subscription.updated. 6. Copy the webhook signing secret to OpsIQ. 7. Verify: make a test payment, check it in OpsIQ Sales.

Receptura: Profil biznesowy Google

Scenariusz:
Cel: Połącz GBP na zarządzanie przeglądem, posty i spostrzeżenia.
Co robić:

1. Create a Google Cloud project, enable Business Profile API. 2. Create OAuth 2.0 credentials (Web application). 3. Set redirect URI: copy it from the connector's own settings page. Google and Microsoft connectors share one slug-less callback: https://your-domain.com/connectors.php?oauth=callback Everything else uses https://your-domain.com/connectors.php?slug=<slug>&oauth=callback OAuth redirect URIs must match EXACTLY, and a URI missing oauth=callback is read as a webhook and answered with "Missing slug or token". 4. In OpsIQ, enter Client ID and Client Secret. 5. Click Authorize, sign in, grant access. 6. Select your business location. 7. Verify: reviews, posts, and insights should appear.

Łączniki

Rozszerzenie CRM & Site Intelligence

OpsIQ podsystemy są otwarte do rozszerzenia. Złącze może podłączyć nowe funkcje do CRM lub Site Intelligence bez zmian OpsIQ rdzeń, za pośrednictwem rejestru zdolności platformy (\OpsIQ\ Platform\ CapabilityRegistry). Declare zdolność, wdrożenie jego mały zestaw metod, statek złącze,OpsIQ odkrywa go i podłącza do interfejsu użytkownika, Klienta 360 Licznik czasu i zainstaluj podpowiedzi.

Rozszerzenie CRM & SI
Możliwości platformyZłącze na autobusach z lewym podawaniem (CRM, Site Intelligence, Analytics) odkryte przez CapabilityRegistry.Możliwości platformyprzestrzeń roboczaTwoje złączedeklaruje możliwościCRMkalendarz · wzbogacenie · esign · płatności · skrzynka pocztowaWywiad terenulocal_listing · rank_dataAnalizaweb_analytics · raport & połykanieCapabilityRegistryodkrywa go i podłącza linię czasu UI +1DECLAREMożliwości, a nie edycje rdzeniowe2PLUG INCRM · SI · Busy analityczne3AUTO-WIREDInterfejs, linia czasowa, podpowiedzi
Złącze deklaruje możliwości (kalendarz, wzbogacenie, dane rangi, analityka...) i OpsIQ auto- przewody do CRM i Site Intelligence, bez zmian rdzenia.

Rozdzielczość

Deklaracja (ustalenie s.json)

Dodaj <domain>_capabilities tablica, najlepsza dla złączy niekodowych / rynkowych. Domeny: crm, site_intelligence.

Kod (connector. php)

Wdrożenie crmCapabilities() / siCapabilities() zwracając te same deskryptory.

Zadeklaruj dostawcę kalendarza CRM (settings.json)

Scenariusz:
Cel: w panelu CRM Schedulemeeting pojawi się złącze kalendarza.
Co robić:

"crm_capabilities": [ { "type": "calendar", "label": "Calendar (Acme)", "actions": ["createEvent","listEvents","freeBusy"], "requires_auth": true } ]

Zadeklaruj dostawcę analizy witryny (settings.json)

Scenariusz:
Cel: dane z lokalnej listy w Wywiadzie.
Co robić:

"site_intelligence_capabilities": [ { "type": "local_listing", "actions": ["listLocations","listReviews","getInsights"], "requires_auth": true } ]

Busy do zdolności i ich powierzchnia metodologiczna

crm / kalendarz

createEvent($settings,$params) → {sukces,event_id,html_link,meet_link}; listEvents; freeBusy. Driven by\OpsIQ\ CRM\ CalendarBridge.

crm / wzbogacanie

enrich($settings,$params) → {sukces, cechy}. Driven by\OpsIQ\ CRM\ EnrichmentBridge (działa również automatycznie na firmie tworzyć, gdy dostawca jest podłączony).

CRM / Zarządzanie relacjami z klientami

sendForSignature($settings,$params) → {success,envelope_id,sign_url}. Driven by \OpsIQ\CRM\EsignBridge.

site_intelligence / local_listing

listLocations, listReviews, getInsights. Statki za pośrednictwem złącza profilu Google Business Profile.

site_intelligence / rank_data

keywordRanks($settings,$params) → {sukces, rangi}. Driven by\OpsIQ\ SiteIntelligence\ RankDataBridge. Statki: Złącze SerpApi.

analityka / web_analytics

report($settings,$params) (sync / export) + ingest($settings,$events) (import).OpsIQ\ Analytics\ WebAnalyticsBridge. Statki: Google Analytics Złącze (GA4). Dane API dla raportów, Protokół pomiaru importu. Analiza jest otwarta dla złączy takich jak CRM + Intelligence Site (domena analytics / analytics_capabilities).

płatności / payment_provider

listPayments, customerPayments, createPaymentLink* Driven by *OpsIQ\ Płatności\ Payments Bridge. Pokaż płatności klienta na osi czasu CRM + wysłać link do płatności na umowie. Statki:StripeZłącze płatności. payments / payments_capabilities.

skrzynka pocztowa / email_sync

listMessages + sendMessage* Driven by *OpsIQ\ Skrzynka pocztowa\ MailboxBridge. Klient e-mail na klienta 360 Licznik + wysłać e-mail z umowy. Statki: Gmail + Outlook / Microsoft 365 złącza. Domena mailbox / mailbox_capabilities.

Wspólna aplikacja OAuth + ONE przekierowanie

Wszystkie złącza Google udostępniają aplikację ONE za pośrednictwem\OpsIQ\OAuth\ Udostępniona aplikacja GoogleAp. Ustaw google_oauth_client_id/_secret Raz i Kalendarz, Analytics, Business Profil + Gmail wszystkie prace (per- złącze "(opcjonalne)" pola są nadrzędne). URI, <site>/connectors.php?oauth=callback (nie ma ślimaka łączącego), ponieważ Google ujawnia API dodawanie przekierowań URI do aplikacji; OpsIQ odzyskuje złącze z podpisanego OAuth state nonce. Zarejestruj się, że jeden URI raz i każdy złącze Google (teraźniejszość + przyszłość) zezwala bez dalszego konfiguracji konsoli. SharedGoogleApp::resolve(...)jest redirect_uri z oauthParams(); never hard- code a per- slug redirect. Złącza Microsoft robią to samo przez\OpsIQ\OAuth\ SharedDetactApp (microsoft_oauth_*).

Przyciski importu są obrobione

W Import (historyczne wypełnienie) oraz Klienci importujący przyciski pokazują WYŁĄCZNIE dla złączy, które faktycznie je wdrażają, wykryte przez odbicie, więc nie ma flagi do zadeklarowania. backfill() lub backfillChunk() aby zdobyć przycisk Importuj; nadpisz listCustomers() (return {email, first_name,...} strony), aby zdobyć klientów Import. AbstractConnector no- op i przycisk pozostaje w ukryciu, więc interfejs użytkownika nigdy nie oferuje importowanego złącza nie może wykonać.

PWI w autobusach

Agent CRM proponuje i księguje spotkania poza sygnałami transakcji (\OpsIQ\ CRM- MeetingProposer → CalendarBridge), a auto- wzbogaca nowe konta, "AI działa CRm" pętla, wykonywane przez autobusy łączników.

Klient- czat przeszukanie biletu (fetchTicket())

Dwupoziomowy, bez zmian podstawowych

Kiedy gość odsyła numer biletu w czacie klienta ("jaki jest status T -000123?"), OpsIQ Rozwiązuje to w dwóch poziomach. Poziom ryzyka 1 czyta wspólny sklep z biletami OpsIQ, każde złącze inbound_ticket odbija tam swoje bilety, więc bilety synchroniczne działają tylko dla złączy ALL z kodem zerowym. Poziom ryzyka 2 jest to really fallback dla OLD biletów, które nigdy nie zostały odzwierciedlone: połączenia podstawowe OPTIONAL fetchTicket() na każdym włączonym złączu, które go wdraża. duck-typed (odkryte przez method_exists(), jak contextProviders()/audienceCatalog()), więc podpisane ConnectorInterface jest nietknięty i złącza, które go nie potrzebują (źródła e-mail / czat, które tworzą bilety native) po prostu pomiń go.

⚠️
Własność jest obowiązkowa i musisz ją egzekwować. fetchTicket() otrzymuje tożsamość odwiedzającego VERIFIDED w $ctx (client_id + client_email, identyczną tożsamość klienta czat AI używa). Rozwijaj klienta platformy z tej tożsamości i zapytaj TYLKO, że bilet klienta, a następnie ponownie sprawdzić własność na rekordzie szczegółowości. null w przypadku jakichkolwiek niepasujących, niedopasowanych lub błędów, nigdy danych innego klienta. null Z wdzięcznością poniża "nie mogłem znaleźć tego biletu".
connector. php, umowa na bony () (referencyjna: złącza /whmcs i złącza-zendesk)
<?php
// connector.php — OPTIONAL universal client-chat ticket resolver (Tier 2).
// Only add it if your platform keeps its OWN ticket store that may hold tickets
// not yet mirrored into OpsIQ. Return the normalised array below, or null.
//
// $ref      = ['mode' => 'id'|'tid', 'value' => string]  (from extract_ticket_ref)
// $ctx      = ['client_id' => int, 'client_email' => string]  (VERIFIED visitor)
// $settings = your connector settings
public function fetchTicket(array $ref, array $ctx, array $settings): ?array
{
    try {
        $email = trim((string)($ctx['client_email'] ?? ''));
        $cid   = (int)($ctx['client_id'] ?? 0);
        if ($cid <= 0 && $email === '') return null;            // no verified identity → refuse

        // 1) Resolve THIS visitor on your platform (by verified email/id).
        // 2) List ONLY their tickets and match $ref against the ticket number/id.
        // 3) Re-confirm ownership on the detail record before returning.
        //    On any miss/mismatch/error → return null (never leak).

        return [
            'tid'        => 'T-000123',     // the customer-facing reference
            'id'         => 123,            // your internal id
            'status'     => 'open',
            'subject'    => '…',
            'department' => 'Billing',     // '' if your platform has none
            'priority'   => 'high',
            'opened_at'  => '2026-06-29 10:00:00',
            'last_reply' => '2026-06-29 12:00:00',
            'message'    => 'opening message text',
            'replies'    => [               // oldest → newest; opening message may be first
                ['who' => 'You',   'date' => '…', 'message' => '…'],
                ['who' => 'Staff', 'date' => '…', 'message' => '…'],
            ],
        ];
    } catch (\Throwable $e) {
        error_log('[yourslug][fetchTicket] ' . $e->getMessage());
        return null;                                             // graceful degrade
    }
}

Jak platforma go wykorzystuje

Odkrycie

CapabilityRegistry::providers($domain,$type) zawiera listę dostawców z zainstalowanym / włączonym / gotowym statusem (w oparciu o plik; DB tylko dla flagi).

Wybór

CapabilityRegistry::active($domain,$type) zwraca pierwszego gotowego dostawcę z załadowanym złączem i ustawieniami. Mosty nazywają to zamiast hardcoding ślimaki.

Notes - to-install

Jeżeli funkcja wymaga możliwości, która nie jest jeszcze połączona, interfejs pokazuje jedno- kliknięcie Connect / Install showd, nigdy martwej kontroli.

Pełny przewodnik

Patrz connectors/PLATFORM_CONNECTORS.md (CRM + Wywiad terenu) oraz connectors/CRM_CONNECTORS.md W opakowaniu.

Łączniki

Wyszukiwania i zwroty usług dla klientów (zbuduj złącze do czatu klienta)

Klienci Signed-in mogą zapytać klienta czat AI o ich konto OWN ("moje saldo", "moje zamówienia",, "wsparcie odpowiedzieć mój bilet") i, jeśli firma umożliwia to, żądaj zwrotu. Wszystko to jest zasilane przez swoje deklaracje złącza: nie OpsIQ rdzeń zmian, nie platformy Hardcoding. AI nazywa Twoje lookup jako natywne narzędzia (nie może wymyślić jeden), tożsamość jest zablokowany server- side zweryfikowanego klienta, a wyniki są automatycznie przycinane dla AI.

Zdecyduj się na sprawdzenie klienta

W twoim actions.json, tylko read- działanie staje się customer- calling z ALL ThREE: "scope":"client", "requires_confirmation":false, "is_destructive":falseUżyj "scope":"both" kiedy to samo lookup powinien być również wywoływany przez zespół w Admin AI. Pełne słownictwo jest admin, client, both oraz system (system nie osiąga ani AI - API i tylko trasy haka webhook). Wszystko inne jest odrzucane w całości: walidacja pakietu nie powiodła się, a akcja nie zainstaluje. Nie ma żadnego writing zakres - asystent Pisanie jest obsługiwany admin zestaw akcji.

Zasada tożsamości (obowiązkowa)

Podaj swój parametr tożsamości ze standardowego zestawu. client_id, clientid, customer_id, user_id, userid, account_id. Zamknięty na ten id jako ciąg znaków: client_identifier, customer_identifier, account_identifier. Zablokowany do zweryfikowanego e-maila: email, client_email, customer_email, user_emailOpsIQ zamyka i automatycznie wypełnia go z platformów- sprawdzonej signed- w kliencie; AI nigdy nie widzi ani nie wybiera tożsamości. Niestandardowa nazwa nie zostaje zamknięta (odrzucona, nigdy nie wyciekła).

Co musi pozostać admin- only

Wszystko, czego nie ma w tej tożsamości: fetch- by- bare- id (order_id/ticket_id same), listy w całym magazynie, darmowe wyszukiwanie tekstu. Są to przecieki klientów krzyżowych na każdej platformie. "scope":"admin".

Kształtowanie wyników (klawisze nośne)

Wyniki wyszukiwania są strukturalnie przycinane zanim dotrą do AI: klucze w kształcie sekretów są upuszczane, długie struny i listy są ograniczone, puste pola są przycięte, a płaska mapa szersza niż klawisz czapka utrzymuje swoje Klucze do łożysk odpowiedzi jako pierwsze, pieniądze (credit, balance, amount, total, due, paid), tożsamość (email, *name, phone, company), stan (status, active, expir*, renew*), daty, data, plan / produkt / domena / usługa / subskrypcja / zamówienie / faktura / pola biletów, waluta, liczba i stats/summary/totals, przed każdym pozostałych miejsc przejść do innych kluczy slalest- value- first. Praktyczne wskazówki: nazwa pól z tego standardowego słownictwa i zwrócić pola, które odpowiadają na pytanie klienta zamiast surowego 100-Key platformy pull; pole nazwane poza słownikiem konkuruje o resztki siedzeń i może być przycięte z bardzo szerokich ładunków.

Refundacje · co Twoje złącze zapewnia

Dwie operacje surowe, wolne od polityki: (1) płatności- weryfikacja odczytu filtrowalnego według tożsamości I referencji transakcji (API must AND the filters), np. whmcs_get_transactions; (2) refund execute action (scope:"admin", requires_confirmation:true, is_destructive:true, nigdy nie narażony na kontakt z klientem), np. whmcs_refund_order. Firma wybiera oba klucze w Ustawienia → Chat klienta; OpsIQ ponownie weryfikuje stronę płatności, stosuje pole polityki biznesu (kwota czapka, okno wieku, miesięczny limit), problemy wewnątrz pola i pliki bilet recenzji dla wszystkiego innego.

Nie-kod builder

Edytor akcji Connector Builder ma takie same sterowniki: ustaw "Kto może go używać" na klientów Signed- in, zostaw zarówno zapis pól kontrolnych i użyj standardowej nazwy parametrów tożsamości.

Referencyjne implementacje

Wpisy "Klient Self-Service" w connectors/whmcs/actions.json, woocommerce/actions.json, oscommerce/actions.json; pełna umowa connectors/README.md §8.1–8.2 oraz ConnectorInterface::registerActions().

Łączniki

Przeszukanie gości - pozwolić odwiedzającym śledzić rezerwację, dostawę lub zamówienie BEZ podpisu w (guest_lookup)

Hotele, kurierzy i wiele platform handlowych obsługują klientów, którzy posiadają referencje, ale nie logują się: gość z potwierdzeniem rezerwacji, odbiorca z numerem śledzenia. guest_lookup możliwość (Kontrakt złącza, tryb: generowany) pozwala Twoim łączem służyć tym odwiedzającym w czacie klienta AI - nieOpsIQzmiany rdzenia, brak twardego kodowania platformy. Twoje złącze deklaruje, CO dowodzi uprawnień i które pola są widoczne;OpsIQwymusza przełączniki, przepustnicę i uniform zaprzeczyć.

Model zaufania

Reference + proof, never identity

Odwiedzający dostarcza referencje rekordu (dopasowane do regex, który deklarujesz) plus dowód, który wybierasz - zazwyczaj e-mail na płycie. Twoje działanie pobierania pobiera rekord SERVER- SIDE przez odniesienie; wygenerowany dostawca OpsIQ porównuje dowód z rekordem FETCHED. Wstęp odwiedzającego nigdy nie jest zaufany i nie tworzy się zweryfikowanej tożsamości: mecz uprawnia gościa do tego jednego rekordu pola dozwolone, nic innego.

Jednolity środek dezaktywacji (bez wymowy wyliczeniowej)

Nie znaleziono i błąd-dowód produkują One identyczną odpowiedź. AI jest wyraźnie poinstruowany, aby nigdy nie potwierdzić, czy referencja istnieje i nigdy nie wymyślić szczegóły rekordu. Próby są rate- ograniczone na rozmowę + IP przez rdzeń przed kiedykolwiek konsultowane złącze.

Podwójna opt- in, obydwa domyślnie wyłączone

Nic nie służy gościom, dopóki firma nie umożliwi obu przełączników: sterowanie w całym miejscu pracy w ustawieniach→Bezpieczeństwo→"Gości rekordy lookup w czacie klienta" (permission- falisted i zawsze password- potwierdzone, nawet jeśli opcjonalne step- up jest wyłączone), a Twój złącze własne guest_lookup_enabled ustawienia przełączania. Instalacja lub włączenie samego złącza nigdy nie otwiera powierzchni gości.

Oddana powierzchnia gości

Wygenerowany dostawca rejestruje guest powierzchnia kontekstowa - strukturalnie oddzielona od admin oraz customer. Istniejące dostawcy kontekstowe nigdy nie są konsultowane dla anonimowych odwiedzających, a dostawca gości nigdy nie jest konsultowany dla signed- in ones. ctx otrzymuje niesie wiadomość czatu, identyfikator wątku i użytkownik jest potwierdzony (niezweryfikowany) e-mail przed czatem jako kandydata na dowód - bez pól tożsamości.

Oświadczanie tego w Budowniczce

1
Zdefiniuj akcję pobierania

Na kroku Działania, dodaj tylko do odczytu działanie, które zwraca jeden rekord przez jego odniesienie (np. GET /bookings/{booking_number}) i mapuje pola odpowiedzi pseudonimami: status, przyjazd, wyjazd, room_type, customer_email…

2
Tik "Przeszukiwania gości"

Na etapie zdolności, włączyć guest_lookup. Pojawia się dedykowany panel: wybrać działanie pobierania, podać parametr odniesienia, podać wzór referencyjny (ciało regex takie jak \bBK-[0-9]{4,10}\b), nazwę rekordu ("rezerwacja") i wybrać dowód - e-mail na rekordzie (zalecane) lub żadnego (odniesienie tylko, dla śledzenia kuriera tylko status).

3
Lista widocznych pól

Zaznacz dokładnie pola, które gość może zobaczyć. Wszystko inne jest DROPPED - nigdy nie zredagowane. Builder odmawia pól w kształcie PII- (e-mail, telefon, adres, płatność...) w liście dozwolonej, a pakiet conformance release- gate sprawdza tę samą zasadę przed publikacją, więc ręcznie edytowany spec nie może przemycić jednego z nich. Zauważ, że walidacja czasu instalacji obejmuje manifest i tylko podpis, więc uruchom apartament conforsance samodzielnie przed statkiem. Pole dowodu nie może być wyświetlone.

4
Publikuj i włączaj

Emituje Builder GuestLookupProvider.php - kanoniczne hartowane implementacji, identyczne dla każdego wygenerowanego pakietu - i dodaje guest_lookup_enabled Przełącz na ustawienia złącza. Biznes broni dwa przełączniki i czat AI zaczyna oferować lookup, gdy gość pyta o swój typ rekordu.

Zasady umów

Tylko pola w kształcie statusa

Pomyśl "co kurier wydrukowałby na publicznej stronie śledzenia": status, daty, pokój lub kategoria usług, liczy. Nazwiska, dane kontaktowe, adresy ulic, dane płatnicze i darmowe notatki nie mają miejsca w anonimowym czacie - Budowniczy i konformancja zarówno odmówić.

AI odpowiada tylko z bloku

Wygenerowany dostawca kończy swoją produkcję z instrukcją, aby odpowiedzieć tylko z pól wymienionych i oferować bilet na cokolwiek innego. Szczegóły nie w liście jest "nie jest dostępna w czacie" - przez projekt.

Poszczególne grupy kontynuuj pracę

Dostawca re- czerpie odniesienie z ostatnich wiadomości odwiedzającego w tej samej rozmowie, więc "i kiedy jest check- out?" działa bez ponownego wpisywania referencji. Dopasowany referencyjny i dowód e-mail są zapamiętywane na wątku czatu jako CANDIDATES, więc followers-up nie ponownie -ask. Są to tylko kandydaci: każda kolej nadal pobiera server- side i re- porównuje dowód przed zwolnieniem jednego pola.

Pakiety ręcznie ułożone

Pakiet rynkowy może wysłać swój własny GuestLookupProvider.php implementing ContextProviderInterface z surfaces(): ['guest']Podążaj za podpisanym kontraktem - pobierz referencyjną, sprawdzającą stronę server- match, uniform defense, allowlist- only output - i deklaruj guest_lookup in capabilities. Konformancja sprawdza powierzchnię gości i skanuje dopuszczalną listę PII.

💡
Wypatrywania gości są kontekstem tylko read- dla czatu AI. Nigdy nie wykonują działań, nigdy nie tworzą tożsamości i nigdy nie odblokowują ścieżki działania samoobsługi klienta powyżej - ta ścieżka nadal wymaga platformy- zweryfikowane signed- w kliencie.
Łączniki

Promocja ukierunkowana na odbiorców (promo_audience)

Niech promocyjne Studio kampanii docelowych przez klienta LIVE i stan rozliczeń z platformy: "ma niezapłaconą fakturę", "zamówienie oczekujące", subskrypcja anulowana. "Wszelkie złącze (wstępnie zainstalowane, rynku, lub jeden budujesz się) łączy się poprzez wdrożenie dwóch małych metod. Nie OpsIQ rdzeń zmian, nie Hardcoding platformy: Twój złącze pojawia się jako platforma w studio Targeting tab z własnym zrzutem faktów, a kilka złącza mogą być włączone obok siebie.

Promo publiczność
Promocja ukierunkowana na odbiorcówZweryfikowana tożsamość przekazana do złącza "Flagi" nazywa tworzenie faktów, które napędzają zasadę celowania, z niepowodzeniem zamkniętą notatką.Promocja ukierunkowana na odbiorcówprzestrzeń roboczaLogged- inzweryfikowana tożsamośćaudie. efsageFlags ()Twój złączeFAKTYunpaid_invoices = 2RULAunpaid_invoices ≥ 1Pokazy kampaniiNiepowodzenia zamknięte: nieznany klient lub jakikolwiek błąd → kampania pozostaje ukryta.1TWO METHODSaudie. Catalog + flagi2LIVE STATENieopłacone, oczekujące, status3FAIL-SAFENigdy nie pokazuje się niewłaściwej osobie.
Twoje połączenie odpowiada na żywo fakturę dla zagubienia- w odwiedzającym; cele studio na nich, i nie zamyka się tak oferta rozliczeń nigdy nie dociera do niewłaściwej osoby.

Jak to działa?

1
Oceń swoje fakty.

Wdrożenie audi. ereCatalog () na swojej klasie złączy. Zwraca etykietę i listę kluczy, na które może odpowiedzieć platforma. Każdy klucz pojawia się w studio rozwijanym pod nazwą platformy.

2
Odpowiedź dla jednego klienta

Implement audienceFlags(array $identity). OpsIQ calls it at delivery time with the VERIFIED logged-in visitor identity (from the widget identity token, the same identity the client chat AI uses). Return a flat key => value map.

3
Gotowe

Włącza złącze. Zakładka Orientacja Studio Targeting rośnie sekcja "Klient i rozliczanie" z listy platformy; admin budować zasady jak "unpaid_invoices >= 1"; każdy fakt staje się również zmienną personalizacji, taką jak {unpaid_invoices}.

connector.php, kompletny promo_audience umowa
public function audienceCatalog(): array
{
    return ['label' => 'My Billing Platform', 'keys' => [
        ['key' => 'unpaid_invoices', 'label' => 'Unpaid invoices (count)', 'type' => 'number'],
        ['key' => 'pending_orders',  'label' => 'Pending orders (count)',  'type' => 'number'],
        ['key' => 'client_status',   'label' => 'Client status',           'type' => 'text'],
    ]];
}

public function audienceFlags(array $identity): array
{
    // $identity = verified token payload: ['email' => ..., 'id' => ..., 'name' => ...]
    $email = strtolower(trim((string)($identity['email'] ?? '')));
    if ($email === '') return [];
    $client = $this->api('GetClient', ['email' => $email]); // your platform call
    if (!$client) return []; // unknown client -> return [] (fails CLOSED)
    return [
        'unpaid_invoices' => (int)$client['unpaid_count'],
        'pending_orders'  => (int)$client['pending_orders'],
        'client_status'   => (string)$client['status'],
    ];
}

Zasady umów

Ogłoś zdolność

Dodaj 'promo_audience' do twojego złącza capabilities() tablica tak platforma i rynek wykaz to jako audie- zdolny (odkrycie działa również z obecności metody, ale deklarując, że jest czysty sygnał). connectors/whmcs złącze jest pełnym wdrożeniem odniesienia.

Nazewnictwo klucza

Niższy snake_case, 2-60 chars, matching ^ [a- z0- 9 _] + $. Typy: liczba, tekst, bool. Niezgłoszone klucze zwrócone przez audiere.Flags () są nadal przydatne w zasadach, ale deklaruj wszystko co wspierasz, aby administratorzy mogli je zobaczyć.

Tożsamość jest weryfikowana

The $identity array comes from the signed widget identity token issued by the customer site at login, never from client-supplied fields. If your platform cannot resolve the identity, return an empty array.

Niepowodzenie zamknięte · zawsze

W przypadku jakiegokolwiek błędu API w dół, klient nie znaleziono, timeout) zwrócić []. Zasada, której brakuje faktu, że kampania NIE pokazuje. Billing- ukierunkowane popup nie może dotrzeć do niewłaściwej osoby; OpsIQ zmusza do tego również w zasadzie matcher.

Wydajność

Audi.e.Flags () jest wywoływany co najmniej raz na złącze na widok strony, i TYLKO, gdy opublikowana kampania rzeczywiście wykorzystuje swoje zasady platformy. Anonimowych odwiedzających kosztuje Cię zero połączeń. 1-2 API rozmowy; OpsIQ zapamiętuje w ramach wniosku.

Operatorzy zapewnili bezpłatnie

Administracje łączą klucze z =,! =, >, > =, <, < =, zawiera, jest ustawiony, jest pusty, tylko wartości podajesz.

Kseny personalizacji

Każdy fakt podwaja się jako zmienna w kopii kampanii: {unpaid_invoices}, {client_status}, plus built- ins {first_name} oraz {client_email}. Wartości są oczyszczone przed renderowaniem.

Złącza rynkowe niekodowane

Automatyczne fakty

Deklaracja (JSON-tylko) złącza rynkowe get promo_audience za DARMOWE: jeżeli Twój złącze deklaruje klientów / użytkowników, faktury, zamówienia lub subskrypcje zasobów, OpsIQ pochodne customer_status, unpaid_invoices, amount_due, pending_orders, active_subscriptions oraz subscription_status z istniejących działań wyszukiwania. Brak kodu w ogóle.

Katalog użytkownika (settings.json)

Add an audience_capabilities object · {"label": "My Platform", "keys": [{"key": "open_carts", "label": "Open carts", "type": "number"}]}, to control exactly which facts (and labels) appear in the studio dropdown.

Testowanie swojego dostawcy

1
Włącz złącze

Złącza > Twój złącze > Włącz. Następnie otwórz zakładkę targetowania kampanii. Twoja platforma musi pojawić się w "Klient & rachunki (złącza)".

2
Zbuduj zasadę

Dodaj: Twoja platforma · klucz · > = · 1 i ustawić "Logged- w klientach". Zapisz i opublikuj.

3
Weryfikacja obu kierunków

Zaloguj się na swojej platformie jako klient, który pasuje do reguły (popup musi pokazać) i jako ten, kto nie (popowy musi pozostać w ukryciu).

Wystrzelić kampanię z własnego kodu (niestandardowy wyzwalacz)

Dlaczego?

Poza wyzwalaczami built- in (opóźnienie, przewijanie, wymuszanie, bezczynność, kliknięcie, przeglądanie stron, działalność chat / bilet), można uruchomić kampanię z dowolnego miejsca na swojej stronie lub złącza front- end, po udanym etapie checkout, gdy koszyk jest opuszczony, kiedy SPA zmienia trasę, itp.

Jak

Nastaw na to, że kampania będzie działać. Własny z nazwą zdarzenia (np. checkout_failed), następnie zadzwoń do globalnego haka z Twojej strony:

Twoja strona / złącze przedni JS
// Any campaign whose Custom trigger event matches will be evaluated
// (it still respects targeting, frequency caps and audience rules).
window.OpsIQPromo && window.OpsIQPromo.fire('checkout_failed');
💡
Wystrzelenie zdarzenia nigdy nie omija celu lub częstotliwości. Wypuszcza tylko "kiedy". Kampania musi jeszcze przejść każdą zasadę (geo, publiczność, zgoda, czapki) zanim się pokaże.
Pełny przewodnik jak-to-use (projektowanie, bloki, analityka, A / B, publikacja) mieszka w centrum pomocy in- app pod Zaangażowanie → Studio Promocji. Możliwość tutaj jest odkrywana automatycznie z dowolnego złącza ENABLED w złączkach / lub market_ złączy /. Nie ma nic do rejestracji. Statek dwie metody, a studio robi resztę.
Łączniki

Zdolność złącza ankietowego (Contract 2.2)

W survey możliwość pozwala każdej platformie dostarczyć zweryfikowane adaptery tożsamości klienta, fakty publiczność, bezpieczne zmienne i kandydaci do Survey Studio. Jest niezależna od promo_audience i nie daje własności złącza ankiet, odpowiedzi, analityki lub dostawy poczty elektronicznej.

💡
Status realizacji. Autoryzacja jest kompletna i możliwa do użytku dzisiaj: 2.2, SurveyConnectorInterface, dedykowany panel Builder, generowany SurveyProvider.php, metadane pakietów i izolacja konformance wszystkich statków. Konsumpcja nie jest jeszcze przewodem: SurveyConnectorRegistry jest wdrożony i przetestowany, ale nie Survey runtime wywołuje jeszcze, więc zdrowie dostawcy nie pojawia się w admin UI i żaden opublikowany pakiet złącza deklaruje zdolność. Signed- token Survey Identity Gateway emisji, targeting i integracji zmiennych, CRM Outreach materialization i pierwszy wysyłany mappings dostawca pozostaje oddzielną fazą. Build against this contract now; spodziewać się, że czas trwania badania zacząć go konsumować w późniejszym wydaniu.

Obowiązki dostawcy

Katalog i fakty publiczności

Declare wpisane fakty kanoniczne i rozwiązać wartości tylko dla serwera zweryfikowane, workspace- temat. Typowe fakty obejmują order_count, last_order_status, cancelled_order_count, customer_created_at, active_subscription_count, past_due_invoice_count oraz open_ticket_count.

Katalog zmienny i wartości

Zdecyduj o kliencie, koncie, zamówieniu, subskrypcji i wsparciu zmiennych z rodzaju, wrażliwości i dozwolonego kontekstu. Kopia ankiety wymaga awaryjnych i output- context ucieczki.

Paging dla odbiorców

Opcjonalnie wymienia kandydatów do CRM Outreach ze stabilnymi zewnętrznymi identyfikatorami, ograniczonymi stronami, definitywnymi kursorami i metadanymi związanymi z zgodą. Badanie zamraża wybraną publiczność przed każdym wysłaniem.

Tożsamość

Przyjmij tożsamość tylko z Bramy Tożsamości Badania po symbolicznym podpisaniu, wygaśnięciu, celu, złącza i weryfikacji miejsca pracy.

Zdrowie w czasie pracy

SurveyConnectorRegistry jest przeznaczony do zgłaszania kompatybilnych, zablokowanych i niedostępnych dostawców bez ujawniania ustawień, ścieżek, surowych tożsamości lub wiadomości wyjątkowych, a zablokowany dostawca nigdy nie może być powołany. Powierzchnia raportowania nie jest jeszcze narażona w UI administratora: dziś zablokowany usługodawca jest po prostu obojętny.

Zasady zamknięte

Niezgłoszone klucze, niewłaściwe typy, przerośnięte wartości, niedopasowanie tematu, timeout złącza i nieznane tożsamości są odrzucone. Zasada celowania, która wymaga niedostępności faktu nie pasuje. Odbiorcy strony są ograniczone i kontrolowane. Wartości czułe nigdy nie pojawiają się w podglądzie publicznym lub logach.

Brama do wydania dla budowlańców

Kontrakt 2.2 statki wpis rejestru zdolności, interfejs, Panel do mapowania ankiety, wygenerowane SurveyProvider.php, wersja funkcji, README / deweloper reference i konformizacji. Handel, helpdesk, SaaS most i lokalne profile PHP obejmują to; Standardowe API złącza opt in. Statyczna brama odrzuca dostawcy Survey, który nazywa promocyjne miejsce na nazwy, tabeli lub możliwości.

💡
Kopia z Promocji jest ważna - tylko: Builder może przetłumaczyć kompatybilne mappingi promocyjne raz, zapisać kompletny egzemplarz i miejsce pochodzenia. Usuwanie lub zmiana Mapowanie Promocji nie może zmienić zachowania Survey.
Łączniki

Odpowiedzi zdolność sprzężenia zwrotnego (umowa 2.2)

W reply_feedback zdolność odzwierciedla własne oceny odpowiedzi per-response platformy do OpsIQ. Gwiazda klient daje odpowiedź pracowników wewnątrz WHMCS obszar klientów ląduje na SAME odpowiedź w OpsIQ wątek admin, z tym samym chipem, kredytu agenta, Wpis strony Feedback i Team & Performance obliczenia jako rating podany na OpsIQ Bilet na portal. Jeden magazyn, jeden chip, jeden rurociąg; złącze tylko tłumaczy.

* The one write path *

Istnieją dokładnie dwie ścieżki wejścia i jedna prawda. OpsIQ bilety portalu pisać native. Bilety platformy przepływają przez złącze, a rdzeń ląduje każde wydarzenie poprzez ReplyFeedback::recordMirrored(): te same kolumny, zasada tylko dla personelu, jeden-rating- per- respons- wygrywa semantykę, znacznik miejsca pracy i Głos Klienta indeksujący wykorzystanie zapisu portalu. Złącze nigdy nie pisze wierszy zwrotnych.

Konfiguracja (cztery pliki, następnie ponowny podpis)

1
connector_contract.json

Dodaj możliwości.reply_feedback wpis: wersja 1.0, ReplyFeedbackConnectorInterface, metody replikiFeedBackCatalog i pullRepliFeedback, implikuje inbound_ticket.

2
settings.json

Dodaj reply_feedback do listy możliwości. Oto co odczytuje odkrycie złącza.

3
spec.json

Declare reply_feedback.tryby (sondaż i / lub haczyk webhook) oraz skala oceny platformy. Oto co odczytuje brama zgodności.

4
Klasa czasu startowego

Wdrożenie interfejsu, lista reply_feedback w możliwościach (), a następnie ponowny podpis pakietu.

Obowiązki dostawcy

Katalog

Declare trybów, własnej skali ratingowej platformy (rdzeń normalizuje do rodzimej 1-5), oraz wszelkie znaki reakcji. Katalog musi zgadzać się z Spec.json.

Wyciągnij tłumaczenie

pullRepliFeedback zwraca zdarzenia kanoniczne: id kuponu platformy, id odpowiedzi platformy, ocena, opcjonalne reakcji / komentarz, złożony czas i stabilny event_id. Czyta i tłumaczy. Nigdy nie pisze.

Niezdolność do działania

event_id jest stabilny na każde sprzężenie zwrotne STAN, więc powtórne zdarzenie jest no- op i zmienione nadpisanie ratingu (najnowsze wygrane, jak portal).

Dyscyplina kursora

Strony są ograniczone i determinatywne; kursor, który nie wyprzedza kończy bieg. Historyczne backfill ścieki jako toczące się okno, nigdy jeden gigantyczny ciągnięcie.

Bezpieczeństwo sondy

Bez konfiguracji, zwróć pustą stronę zamiast rzucać. Sondy conformance runner z pustymi argumentami.

Niezamknięta rezolucja

Rdzeń rozwiązuje każde wydarzenie na lokalnej odpowiedzi przez marker lusterka lusterko już znaczniki (<slug>:<ticket>:reply:<reply>). Zdarzenie, które nie może być rozwiązane jest wycofane, nigdy się nie domyśla; informacje zwrotne są dołączane tylko do odpowiedzi pracowników; i kredyt agenta zawsze pochodzi od istniejącego autora odpowiedzi. Rating nigdy nie zmienia autorstwa. Dlatego zdolność wymaga inbound_ticket lub ticket_mirror.

Przykład roboczy: WHMCS

WHMCS przechowuje oceny gwiazd w obszarze perresponse tblticketreplies.rating. WHMCS złącze deklaruje tryb ankiety z 1-5 skala, statki ticket_reply_ratings komenda przekazuj w pliku mostowym i przelicza każdy wiersz na zdarzenie, którego ids pasuje do whmcs:<ticket>:reply:<reply> markery jego lusterka bilet już znaczniki. Po aktualizacji złącza, ponownie skopiować plik mostu do serwera WHMCS tak nowe polecenie istnieje tam.

💡
Pełna umowa deweloperska z interfejsem, kształtami zdarzeń, zasadami normalizacji i listą kontrolną zgodności: doc/contracts/TICKET_REPLY_FEEDBACK_CAPABILITY.md w OpsIQ Pakiet. Akceptacja: ocena odpowiedzi wewnątrz platformy, czekać na ankietę godzinową, i ta sama odpowiedź w OpsIQ pokazuje chip, strona Feedback zawiera listę i ponownie odtwarzane zdarzenie nic nie zmienia.
Łączniki

Możliwość połączenia biletów (umowa) 2.4)

W ticket_merge możliwość sprawia, że bilet łączy się w OpsIQ połączenie na każdej podłączonej platformie biletów. Bilet przechowywany platformy otrzymuje wiadomości połączonych biletów, począwszy od każdego połączonego biletu wiadomość otwarcia, zamiast połączenia kupon platformy tylko jest zamknięty.

Dlaczego istnieje?

Połączenie OpsIQ przesuwa każdą wiadomość o połączonych biletach do zatrzymanego biletu i usuwa połączone bilety. Przed Kontrakt 2.4 tylko słyszalne złącze ticket.deleted dla każdego połączonego biletu. WHMCS zamknęli bilet i zatrzymali WHMCS bilet nigdy nie otrzymał tego, co klient po raz pierwszy napisał: obiekt pokazał [MERGED] i treści brakowało.

Co za rdzeń wysyła

ticket. covered (raz na połączenie)

ticket_id, ticket_number, przedmiot i external_ref biletu KEPT; native_table (opsiq_tickets); site_key; źródła, połączone bilety najstarsze najpierw, każdy z ticket_id, ticket_number, przedmiot, external_ref, client_name, client_email, created_at i wiadomości [{reply_id, author_type, author_name, created_at, ciało}]; merged_by; merged_at. Wiadomości są widoczne dla użytkownika rozmowy, uchwycone przed przeprowadzką. Wewnętrzne notatki nigdy nie są zawarte.

ticket. deleted (za bilet w połączeniu)

Wciąż strzela, teraz z merged_into {ticket_id, ticket_number, external_ref}. Rdzeń nie dostarcza go do złącza, które deklaruje ticket_merge; inni konsumenci mogą odróżnić połączenie od usunięcia.

Haki wychodzące

ticket. covered jest zdarzeniem do dostarczenia. Punkt końcowy haka internetowego SaaS subskrybowany na ticket. deleted otrzymuje również ticket. conversed, więc integracja zbudowana przed 2.4 słyszy połączenie.

Co robi twój złącze

Zadeklaruj

List ticket_merge in capabilities() and settings.json, and implement TicketMergeConnectorInterface::mergeTickets(array $merge, array $settings). Required on Contract 2.4 for any package that declares ticket_mirror or handles ticket.deleted; conformance fails it otherwise.

Połącz się naiwnie, kiedy możesz

When the kept ticket and a merged ticket both have a copy on your platform (TicketMergeContract::twins() resolves them from external_ref), call the platform's own merge.

W przeciwnym razie dodaj notatkę prywatną

A merged ticket with no copy on your platform: add TicketMergeContract::transcript() to the kept platform ticket as a PRIVATE note. Never a public reply, which would email the customer their own old messages.

Zgłoś to, co nie zostało połączone

Zwróć {ok, tryb, połączone, odnotowane, niepołączone, błąd}. Każda połączona kopia nie może się połączyć idzie w niezłączonym, a rdzeń stosuje normalne usuwanie obsługi (zamknij lub usuń mirror_deletes) dokładnie do tych samych. Zwraca tryb nieobsługiwany tylko wtedy, gdy platforma nie ma połączenia i prywatnych notatek. Transport lub auth awaria jest ok = false z powodu; jest zapisywana w Diagnostics.

Czcij swoje przeczucia

Te same ustawienia lustra, które otwierają inne bilety na metro.

Łącze, które zaczynają się na platformie

Resolve the platform ids and call TicketMergeContract::applyInbound(['<prefix>'], $keptId, $mergedIds). OpsIQ merges its copies with _origin=mirror, so nothing is pushed back to you.

Przesyłane implementacje

WHMCS

MergeTicket (ticketid = kept bilet, mergeticketids = bilety połączone), gdy oba są w WHMCS; AddTicketNote z transkrypcją inaczej. Haczyk TickettMerge przekaźnika łączy OpsIQ kopie po połączeniu się personelu WHMCS.

Zendesk

POST /api/v2/tickets/{id}/merge.json z prywatnymi komentarzami łączącymi (do pięciu biletów na rozmowę), plus zapis jako prywatny komentarz na temat zatrzymanego biletu, ponieważ Zendesk zamyka połączone bilety bez przesuwania ich komentarzy.

Most OpsIQ SaaS

POST /v1/tickets/{id}/merge z source_ids, który przesuwa odpowiedzi i załączniki portalu; odpowiedź wewnętrzna nosi zapis dla biletów, które nigdy nie były na portalu. A /manage połączenie łączy OpsIQ kopie.

Kreator Łączników

ticket_merge jest otrzymywany, nigdy nie zaznaczony: wygenerowany pakiet deklaruje to, gdy łączy kupon platformy, którą tworzy (ticket.created abonent z biletem link na), obsługuje tiket.deleted lub deklaruje ticket_mirrorNa krok Bilety, pod Łączenia, wybrać połączenie działania platformy (połączenie mapy.target_remote_idi połączyć się.source_remote_ids lub połączenie.source_remote_id) i prywatny notatka akcja (mapa notatki.remote_id i note.body). Wygenerowane mergeTickets () wykorzystuje oba. Z żadnym, Builder ostrzega, że połączone wiadomości biletu nie dotrze do platformy.

💡
Pełna umowa: doc/contracts/CONNECTOR_CONTRACT.md, sekcja Bilet łączy. Akceptacja: połączenie dwóch biletów w OpsIQ, które oba istnieją na platformie, a następnie otworzyć zatrzymany bilet na platformą.
Łączniki

Rynek złącza

Rynek pozwala na odkrywanie, instalowanie i publikowanie złączy zbudowanych przez społeczność.

Rynek
Rynek złączaPrzeszukuje sieć kart złączy społecznościowych z kategoriami, instaluje przyciski i oceny gwiazd.Rynek złączaprzestrzeń roboczaPrzeszukaj złącza...CalendlyHarmonogramInstalacja★ 4.8HubSpotCRMInstalacja★ 4.6MailchimpE-mailInstalacja★ 4.7QuickBooksRachunkowośćInstalacja★ 4.5TwilioSMSInstalacja★ 4.9NotyfikacjaDokumentyInstalacja★ 4.41DISCOVERZłącza wspólnotowe2INSTALLJedno kliknięcie3PUBLISHZaloguj się i prześlij swój
Przeglądanie połączeń społecznościowych, instalowanie jednym kliknięciem lub podpisywanie i publikowanie własnych, wstępnie zainstalowanych i targów zarówno wyszukiwarki.

Znalezienie i instalacja złączy

1
Przeglądaj

Przejdź do Connectors > Marketplace. Szukaj według nazwy, kategorii lub platformy.

2
Przegląd

Sprawdź opis, obsługiwane działania i oceny.

3
Instalacja

Kliknij przycisk Instaluj. Pakiet złącza pobiera i instaluje marketplace_connectors /.

4
Konfiguracja

Włącz go w Connectors, wprowadź API i przetestuj.

Publikowanie złącza

1
Zbudować i przetestować

Użyj Złącza Builder. Sprawdź wszystkie działania pracy.

2
Opakowanie

Generuj profil.json, działania.json Wiedza.json, i pliki PHP.

3
Podpisz

Run php tools/sign_connector.php <slug> to sign ONE package (it also accepts a path). It does not boot OpsIQ, so give it the key: either --key=<secret> or the OPSIQ_CONNECTOR_SIGNING_KEY environment variable, otherwise it stops with "No signing key available". tools/resign_all_connectors.php re-signs EVERY package on the install and reads the key from settings by itself, but it can also mint a NEW install-wide signing key, so reach for it only when that is what you want.

4
Prześlij

Przesyłanie przez rynek przepływu składania do przeglądu.

Dwa poziomy złącza

złącza / - co faktycznie działa

Korzeń odkrycia runtime. Wszystko tutaj jest na żywo: złącza, które statek z OpsIQ, wszystko zainstalowane z rynku, i wszystko, co Connector Builder publikuje na tej instalacji.

market_ connects / - gdzie pakiety są autorskie

Wydawnictwo SOURCE dla pakietów rynku pierwszej partii. To nie jest korzeń odkrywania: nic tu nie jest na żywo, dopóki nie jest pakowany, podpisany, zasiewany do katalogu i zainstalowany, w którym punkcie kopie ląduje w złączkach /.

💡
Spójrz w obu miejscach. Pakiet, który napisałeś pod market_ connections / nie jest kopią, która uruchamia się - instalowanie kopii do złączy / i tylko ta kopia jest odkrywana w czasie pracy.Stripe, BigCommerce, Magento2, PrestaShop, OpenCart, Amazon SES, Postmark i Resend są wszystkie pakiety rynkowe: zainstalować jeden przed oczekiwaniem znaleźć go w Connectors.
Programista

API i budowa haków

W API i Webhook Builder pozwala tworzyć niestandardowe API punkty końcowe i słuchacze haków webowych wewnątrz OpsIQ bez zapisywania surowego PHP.

API budowniczy
API i budowa hakówBuilder wybiera typ wyzwalacza (przychodzący haczyk, harmonogram, zdarzenie, instrukcja), który jest zapisany w konfigurowalnej akcji.API & budowa hakaprzestrzeń roboczaWYZWANIEHak do sieci przychodzącejHarmonogram (cron)Zdarzenie OpsIQPodręcznikDziałanieMapa pól przychodzących →utworzyć bilet / powiadomienie / połączenie APIZapisać punkt końcowy1TRYGERYWebhook · harmonogram · event · manual2NO RAW PHPZbudowany w UI3DZIAŁANIEMap fields, a następnie uruchomić
Zbuduj punkty końcowe bez surowego PHP: wybierz przycisk (przychodzący haczyk, harmonogram, zdarzenie lub instrukcja), a następnie mapuj pola do akcji.

Wyzwalacze

Zdarzenie

Biegnij, gdy coś się stanie. OpsIQ, lub gdy zewnętrzny system wyśle zdarzenie pasujące do Twojego haka URL. Wpisz nazwę zdarzenia, na przykład ticket.created.

Harmonogram

Użyj jednego z built- in interval zdarzeń jako nazwę zdarzenia: cron. minotly, cron. ehopy lub cron. hot. ekran Akcje i Triggers ma przyciski do tych, więc nie trzeba ich pamiętać.

Frazę

Uruchom, gdy admin poprosi o to AI w prostym języku. Dodaj wyrażenie, które powinno pasować, na przykład znajdź klienta.

Hak do sieci przychodzącej

Zewnętrzny system wysyła poST HTTP do Twojego OpsIQ hak URL Każdy wyzwalacz, który odsłuchuje to zdarzenie, strzela.

Uruchom go tylko czasami: warunki

Wyzwalacz zdarzenia może mieć warunki, więc działa tylko wtedy, gdy dane przychodzące pasują. Bez warunków działa za każdym razem, gdy zdarzenie się uruchomi.

Pole

Ścieżka do danych zdarzenia. Użyj kropki dla zagnieżdżonych wartości, na przykład customer. email.

Dopasować wszystkie lub dowolne

Wybierz, czy każda zasada musi się zgadzać, czy tylko jedna z nich.

Badania tekstu

równa się, nie równa, zawiera, nie zawiera, zaczyna się od, jest jednym z, nie jest. Dopasowanie ignoruje stolice.

Badania liczby

większe niż, co najmniej, mniej niż, najwyżej. Liczby zapisane jako tekst nadal poprawnie porównują.

Badania obecności

jest obecny, brakuje, jest pusty, nie jest pusty.

Tylko wezwij inżyniera na telefon w sprawie pilnych biletów

Scenariusz:
Event ticket. created, z jedną zasadą: priorytet równa się pilny.
Co robić:

Akcja prowadzi na pilne bilety i jest pomijany dla wszystkiego innego. Nie trzeba filtrować na koniec.

💡
Jeśli pozostawiasz zasady puste, wyzwalacz uruchamia się na każdym dopasowanym zdarzeniu, które jest takie samo zachowanie jak przed istnieniem warunków.

Działania

Wyślij haczyk

Wyślij HTTP POST do zewnętrznego URL z własnym ładunkiem.

Utwórz bilet

Utwórz bilet wsparcia z określonym działem, tematem i wiadomością.

Wyślij e-mail

Wyślij e-mail z szablonem na zamówienie.

Uaktualnij zapis

Aktualizacja klienta, bilet lub rekord CRM.

Uruchom działanie złącza

Wykonaj zarejestrowaną akcję ze złącza włączonego z jego zezwoleniem na połączenie i zasadami potwierdzania.

Biegnij OpsIQ Ogólne API działanie

Szukaj pełnego o nazwie katalog General API. Pola, zakresy, uprawnienia, potwierdzenie, idepotencja i suchy-run wsparcie pochodzą z live action contract; przepływ pracy wykonuje wewnątrz zapisanego obszaru roboczego i kontekstu administratora.

Wyślij provider- rodzimej API wniosek

Użyj złącza rdzennego API Odczytywany lub potwierdzony rdzenny API Pisz akcję, gdy punkt końcowy dostawcy nie ma działania kurated. Kredyty pozostają wewnątrz złącza i tylko względne ścieżki dostawców są akceptowane.

Akcje & Triggers builder, /api/v1.php, OpenAPI i Postman używają tego samego ActionContractRegistry, więc wybrane działanie nie może być zniesione z dokumentacji runtime.
Programista

Podajniki do gotowania

Ready- to- use trigger- action przepisy dla wspólnych automatyzacji.

Jak to działa?
Podajniki do gotowaniaPrzepis przepływu: uptime. down webhook przechodzi filtr produkcyjny, a następnie wentylatory na zewnątrz, aby utworzyć pilny bilet i powiadomić Slack.uptime.downmonitor haka webhookjeśli prodfilterUtwórz pilny biletInformuj Slack # ops
Podajniki do gotowania

Automatycznie tworzyć bilet z monitoringu

Scenariusz:
System monitorowania wysyła POST, gdy serwer się zawali.
Co robić:

Trigger: Inbound webhook Condition: payload.status = "down" Action: Create ticket · Dept: Technical, Subject: "Server {{payload.hostname}} down", Priority: Urgent

Powiadomienie Slack o dużych zamówieniach

Scenariusz:
Slackwiadomość za każdym razem, gdy klient składa zamówienie$100.
Co robić:

Trigger: Event (order.completed) Condition: order.amount > 100 Action: Send webhook to Slack incoming webhook URL with order details

Cotygodniowy e-mail z diestem

Scenariusz:
Podsumowanie e-mail do kierownictwa w każdy poniedziałek o 9: 00.
Co robić:

Trigger: Schedule (Monday 09:00) Action: Send email with last week's stats pulled from the REST API

Bilety na eskalację

Scenariusz:
Jeśli bilet nie ma odpowiedzi na 24 godzin, należy przypisać do zespołu prowadzenie.
Co robić:

Trigger: Schedule (every hour) Condition: ticket.status = "Open" AND ticket.last_reply_age > 86400 Action: Assign to team-lead, add internal note

Programista

Budowanie pierwszego działania

Ten przelot tworzy proste działanie łącznika od podstaw.

Działania w zakresie budowania
Budowanie działaniaFormularz definicji działania: nazwa lookup_order, wniosek GET do /orders/{id}, parametr ID wpisany i przechodzący 200 test.Nowe działanieprzestrzeń roboczaNowe działanieNazwalookup_orderWniosekGET/orders/{id}Paramsid · ciąg znaków200 · znalezione zamówienie1DEFINENazwa, metoda, punkt końcowy2PARAMSWpisywane wejścia3BADANIEWynik na żywo 200
Zbuduj jedną akcję od zera. Podaj nazwę, ustaw metodę i punkt końcowy, zadeklaruj paramy na maszynie i przetestuj ją na żywo 200.

Dwa rodzaje działań

Przed rozpoczęciem, zdecydować, którego potrzebujesz. Oba są skonfigurowane w tym samym ekranie.

Zawołaj zewnętrznego API

Akcja wysyła żądanie HTTP na platformę. Wybierz ten, kiedy OpsIQ musi dotrzeć i zrobić coś po swojej stronie.

Uruchom działanie złącza

Akcja działa coś zainstalowane złącze już zapewnia. Wybierz to, gdy praca jest już dostępna i po prostu chcesz go uruchomić. Wybierasz działanie złącza z listy, więc nie ma nic do podłączenia.

Drugą opcją jest jak ponownie wykorzystać wszystko, co złącza mogą zrobić bez budowania żadnego z nich ponownie: przeczytaj nitkę biletu, sprawdź klienta, kontakty importowe i tak dalej. Wybierz działanie łącznika z rozwijanego i jesteś gotowy.
1
Planować działanie

Przykład: "lookup_product". Sprawdź produkt po nazwie, cenie zwrotu, stanie i opisie.

2
Zdefiniuj działania.json

Dodać definicję działania:

actions.json - prawdziwy manifest kształtu
{
  "actions": [
    {
      "action_id": "lookup_product",
      "label": "Look up a product",
      "category": "Catalogue",
      "description": "Find a product by name and return price, stock and description.",
      "scope": "admin",
      "requires_confirmation": false,
      "is_destructive": false,
      "delivery_type": "http",
      "http_method": "GET",
      "http_url": "/api/products/search",
      "parameters": [
        { "name": "name", "type": "string", "required": true, "in": "query",
          "description": "Product name to search for" }
      ],
      "returns": [
        { "alias": "id",          "path": "data.id",             "type": "string" },
        { "alias": "name",        "path": "data.name",           "type": "string" },
        { "alias": "price",       "path": "data.price",          "type": "number" },
        { "alias": "stock",       "path": "data.stock_quantity", "type": "number" }
      ]
    }
  ]
}
⚠️
Trzy rzeczy, które sprawiają, że działania nie rejestrują się w ogóle. action_id jest WYMAGANE i musi być 2 do 100 znaki małych liter, cyfr i podkreśleń - wpis bez jednego jest odrzucany z góry. manifest jest obiektem o "actions" LIST, a nie mapą wytyczoną przez nazwę działania. Mapowanie odpowiedzi to "returns" z ścieżkami DOTTED (data.id), nie JSONPath ($.dataa.id) - nie ma "response_mapping", metoda", "punkt końcowy" lub "params" klucz w dowolnym miejscu rejestru.
3
Badanie z suszeniem

W punkcie przeglądu Connector Builder 's Review naciśnij Suchy bieg. Działa on na pełnej liście kontrolnej zgodności z Twoim pakietem i, gdy dostarczyłeś referencje, robi prawdziwy test połączenia. Nie wykorzystuje przykładowych danych.

4
Weryfikacja użycia ptasiej grypy

Zapytaj admin AI: "Sprawdź produkt Widget Pro". AI powinien znaleźć i wykonać działanie.

⚠️
Dodawanie działania actions.json NIE tworzy trasy AJAX, więc nie ma nic do regeneracji OpsIQ gdy złącze jest włączone lub jego ustawienia są zapisane: ponownie zapisać złącze i nowe action appears. Narzędzia /gen_route_registry.php obejmuje wysyłkę admin AJAX i nie ma wpływu na działania łączników.
Programista

Punkty końcowe zdarzenia przychodzącego

Punkty końcowe przychodzące akceptują podpisane JSON z innego systemu i przekształcają go w zdeduplikowaną aktywność kontaktową, która może zasilać linie czasowe, punkty punktowe i przepływy pracy.

Ekran produktu
Punkty końcowe przychodząceKażde źródło przychodzące ma swój własny URL, tajny, mapowanie i ostatni wynik aktywności.Punkty końcowe przychodząceprzestrzeń roboczaSOURCES5ACCEPTED12.4kREJECTED18WIDOK PRACY ŻYWEJPlatforma rozliczaniaimprezy subskrypcyjneZdroweAplikacja produktuzapisy i zdarzenia związane z użytkowaniemZdroweIdentyfikator zdarzeniaprovider_event_idDeduplikacjaPodpisX-OpsIQ-Inbound-SignatureHMAC1CREATE SOURCEURL i tajne2MAP PAYLOADEmail, event i ID3WERYFIKACJAHMAC następnie połknąć
Każde źródło przychodzące ma swój własny URL, tajny, mapowanie i ostatni wynik aktywności.

Utwórz jedno źródło na system wysyłający. OpsIQ generuje URL/ symbolu i tajemnicy. JSON z Content-Type: application/json i podpisać dokładne surowe ciało za pomocą HMAC- SHA256:

X-OpsIQ-Inbound-Signature: sha256=<hex hmac>

Mapa Ścieżek JSON dla email kontaktowego, nazwa zdarzenia i opcjonalny identyfikator zdarzenia. Identyfikator zdarzenia jest preferowanym kluczem do oddulania. Akceptowana aktywność wchodzi w linię czasu kontaktu i może wpływać na punktację ołowiu, segmenty, zasady cyklu życia i przepływy pracy.

Odrzuć nieprawidłowe podpisy przed przeparowaniem danych biznesowych. Obróć sekret poprzez aktualizację obu stron wewnątrz kontrolowanego okna; nie loguj się z sekretem.

Programista

Operacje związane z wychodzącym hakiem webowym

Administracja odchodzących haków internetowych tworzy podpisane subskrypcje, testy punktów końcowych i monitoruje asynchroniczne dostawy i ponowne badanie zdrowia.

Ekran produktu
Haki wychodząceWychodząca strona z hakiem internetowym zawiera listę punktów końcowych HTTPS, subskrypcje zdarzeń, zdrowie dostawy oraz test podpisany jednym kliknięciem.Haki wychodząceprzestrzeń roboczaENDPOINTS7SUCCESS99.2%POTWIERDZANIE4WIDOK PRACY ŻYWEJLusterko CRMKontakt. * i umowa. *ZdroweAutobus wsparciaBilet. * i czat. *ZdroweMagazyn danych*PrzekraczanieDostawa testowaPodpisany ładunek użyteczny próbkiGotowe1SUBSCRIBEHTTPS URL i wydarzenia2AUTHENTICATEPodpis HMAC3OBSERVEKolejka i powtórne dostawy
Wychodząca strona z hakiem internetowym zawiera listę punktów końcowych HTTPS, subskrypcje zdarzeń, zdrowie dostawy oraz test podpisany jednym kliknięciem.

Pełni administratorzy tworzą punkt końcowy HTTPS, wybrać konkretne zdarzenia lub dziką kartę, przechowywać tajemnicę bezpiecznie i wysłać test. OpsIQ podpisuje surowe obciążenie z HMAC- SHA256:

X-OpsIQ-Signature: sha256=<hex hmac>

Weryfikacja podpisu przed dezercjacją lub działaniem. Dostawa jest asynchroniczna i automatycznie ponownie wypróbowane po około 1Minuta. 5 minuty, 30 minuty,2godziny i 12 godziny. Użyj kolei restent- dostawy do kontroli statusu, kod odpowiedzi i liczba prób.

Twój odbiornik musi być idemstrong, ponieważ każdy system asynchroniczny może regeneracja. Zwróć odpowiedź 2xx tylko po trwałej akceptacji.

Programista

Webhooki

Haki internetowe niech systemy zewnętrzne powiadomić OpsIQ kiedy coś się dzieje (przychodzący), i niech OpsIQ powiadamianie systemów zewnętrznych, gdy coś dzieje się wewnętrznie (na zewnątrz).

Webhooki
Haki wychodząceEkran wychodzących haków: tabela punktów końcowych z nazwą, subskrybowanymi zdarzeniami, ostatnie punkty statusu dostawy oraz przycisk Test Send- Testing.Haki wychodząceprzestrzeń roboczaPunkty końcowe+ Zapisać punkt końcowyNAZWAWYDARZENIADOSTAWYSlack # seale- alertshttps://hooks.slack.com/…crm.deal.won, zamówienieBadanieLusterko CRMhttps://api.acme.com/hookcontact. *, ticket. createdBadanieZapierhttps://hooks.zapier.com/…chat.startedBadanie1ENDPOINTSNazwa, wydarzenia, URL2SIGNEDAutomatyczne ponowne badanie HMAC +3SEND TESTSprawdzić dostawy
Prawdziwy ekran z hakami: każdy punkt końcowy ze swoimi wydarzeniami, stan zdrowia ostatniej dostawy i jednokliknięcie Wyślij test, podpisane i ponownie wypróbowane.

Haki wychodzące

Subskrybowanie

Przejdź do Ustawienia > Haki internetowe. Dodaj punkt końcowy URL i wybierz zdarzenia, które mają być odebrane.

Wydarzenia

Subskripować do określonych wydarzeń, lub ["*"] dla wszystkiego. Pełna lista instalacji jest poniżej, i webhooks.events.list zwraca go jako JSON.

Ponowny prób

Nieudane dostawy ponownie spróbować z wykładniczym backupu. Po 15 kolejne niepowodzenia, punkt końcowy jest auto- wyłączone.

Podpisanie

Każda dostawa jest podpisana. X-OpsIQ-Signature carries v2=<hex>, a podpisany ciąg jest version.timestamp.delivery_id.body - nie tylko ciało. Zawsze weryfikuj i zawsze odbudowuj strunę dokładnie. Zobacz przykłady poniżej.

Ochrona SSRF

OpsIQ nie wyśle do prywatnych / wewnętrznych IPs (127.x, 10.x, 172.16.x, 192.168.x, 169.254.169.254).

Dostawa Async

Haki są dostarczane przez kolejkę zadań, nie blokując operacji OpsIQ.

Identyfikator zdarzenia stabilnego

Każde wydarzenie ma unikalny event_id, który pozostaje taki sam w powtarzaniu dla deduplikatu.

Co przychodzi z każdej dostawy

X-OpsIQ-Event

Nazwa zdarzenia, na przykład ticket.created.

X-OpsIQ-Delivery

Identyfikator dostawy. Pozostaje taki sam w czasie powtórzeń - użyj go do zignorowania duplikatu.

X-OpsIQ-Timestamp

Unix sekundy w czasie podpisywania. Odrzuć cokolwiek starszego niż około pięciu minut.

X-OpsIQ-Signature

Podpis v2=<hex>Rozdziel się na =: lewa strona jest wersją, prawa strona jest wartością którą porównujesz.

X-OpsIQ-Signature-Version

Obecnie stosowany system v2. Czytaj go z nagłówka zamiast twardego kodowania go, a kod działa nadal, jeśli v3 jest kiedykolwiek dodany.

⚠️
Podpisany ciąg jest version.timestamp.delivery_id.body, nie surowe ciało na własną rękę. Hashing tylko ciało jest najczęstszym powodem niepowodzenia weryfikacji - każda prawdziwa dostawa zostaje odrzucona i punkt końcowy wygląda złamane.

Weryfikacja dostawy

PHP · weryfikuje haczyk OpsIQ
<?php
// Read the raw body BEFORE any framework parses it — the signature covers
// the exact bytes we sent, so a re-encoded array will not match.
$raw      = file_get_contents("php://input");
$sigHeader= $_SERVER["HTTP_X_OPSIQ_SIGNATURE"] ?? "";   // "v2=<hex>"
$ts       = (string)($_SERVER["HTTP_X_OPSIQ_TIMESTAMP"] ?? "");
$delivery = (string)($_SERVER["HTTP_X_OPSIQ_DELIVERY"] ?? "");
$secret   = "your endpoint signing secret";   // shown once when you add the endpoint

// 1. Refuse a stale delivery. This is what stops a captured request being replayed.
if ($ts === "" || abs(time() - (int)$ts) > 300) {
    http_response_code(401);
    exit(json_encode(["error" => "Stale delivery"]));
}

// 2. The header names its own version: "v2=<hex>".
[$version, $received] = array_pad(explode("=", $sigHeader, 2), 2, "");

// 3. Rebuild exactly what OpsIQ signed.
$canonical = $version . "." . $ts . "." . $delivery . "." . $raw;
$expected  = hash_hmac("sha256", $canonical, $secret);

// 4. Constant-time compare, so a timing attack cannot reveal the secret.
if ($received === "" || !hash_equals($expected, $received)) {
    http_response_code(401);
    exit(json_encode(["error" => "Invalid signature"]));
}

// 5. Accept. Deliveries retry, so treat a delivery id you have already
//    processed as a success and do the work only once.
$event = json_decode($raw, true);
// ... your handling ...

http_response_code(200);
echo json_encode(["received" => true]);
Node.js · zweryfikowaćOpsIQhak
const crypto = require("crypto");

// express.raw gives you the exact bytes OpsIQ signed. express.json() does not.
app.post("/opsiq-webhook", express.raw({ type: "application/json" }), (req, res) => {
  const raw      = req.body;                                  // Buffer
  const sig      = req.headers["x-opsiq-signature"]  || "";   // "v2=<hex>"
  const ts       = req.headers["x-opsiq-timestamp"]  || "";
  const delivery = req.headers["x-opsiq-delivery"]   || "";
  const secret   = process.env.OPSIQ_WEBHOOK_SECRET;

  // 1. Reject stale deliveries (replay protection).
  if (!ts || Math.abs(Date.now() / 1000 - Number(ts)) > 300) {
    return res.status(401).json({ error: "Stale delivery" });
  }

  // 2. Split "v2=<hex>" into its version and its value.
  const [version, received] = sig.split("=", 2);

  // 3. Rebuild what OpsIQ signed: version.timestamp.delivery_id.body
  const canonical = Buffer.concat([
    Buffer.from(`${version}.${ts}.${delivery}.`),
    raw,
  ]);
  const expected = crypto.createHmac("sha256", secret).update(canonical).digest("hex");

  // 4. Constant-time compare. Lengths must match first or timingSafeEqual throws.
  const a = Buffer.from(expected), b = Buffer.from(received || "");
  if (a.length !== b.length || !crypto.timingSafeEqual(a, b)) {
    return res.status(401).json({ error: "Invalid signature" });
  }

  // 5. Accept, and make the work idempotent on the delivery id.
  const event = JSON.parse(raw.toString("utf8"));
  res.json({ received: true });
});

Każde zdarzenie, które może wysłać

Wygenerowane z bieżącej budowy, więc zawsze pasuje do wersji, na której jesteś.

52 events can be delivered to a webhook endpoint on this install. Subscribe with ["*"] for all of them, or name the ones you want. The General API action webhooks.events.list zwraca tę samą listę co JSON, więc twój kod nigdy nie musi go kodować.

analityka (1)

analytics.anomaly

Fired by PHASE_ANOMALY_ALERTS when a daily KPI (sessions, pageviews, conversions, revenue) deviates from its same-weekday 4-week baseline beyond the configured threshold. Payload: day (required), title, site_key, anomalies.

handel (2)

commerce.order.created

Fired the moment a chat-confirmed order lands on the merchant platform (connector or custom-actions integration) - before payment. Subscribe to sync carts, reserve stock, or notify fulfilment systems. Payload: reference (required), connector, amount_minor, currency, customer_email, thread_id, occurred_at.

commerce.payment.confirmed

Fired exactly once per order when the gateway actively verifies the payment (amount and currency exact). This is the settlement signal - it rides the same claim that prevents duplicate receipts, so it can never double-fire. Payload: reference (required), connector, occurred_at.

kontakt (6)

contact.conversion

Fired by OpsIQ.

contact.erased

Fired by OpsIQ.

contact.lifecycle_changed

Fired by OpsIQ.

contact.status_changed

Fired by OpsIQ.

contact.tag_added

Fired by OpsIQ.

opsiq.contact.upsert

Fired by OpsIQ.

conversation (5)

conversation.assigned

Fired when a conversation is assigned to an agent or unassigned. Payload: thread_id (required), site_key, assigned_admin_id, by_admin_id, occurred_at.

conversation.created

Fired when a new Client Chat conversation (thread) is opened. Payload: thread_id (required), site_key, channel, client_email, client_name, visitor_id, created_at.

conversation.message.created

Fired when a visible message is written to a conversation by the visitor, an agent, the AI or the system. Internal notes do not fire. Payload: thread_id (required), message_id (required), site_key, sender_type, admin_id, message, has_attachment, created_at.

conversation.rated

Fired when the visitor rates a conversation (1-5 stars). Payload: thread_id (required), site_key, stars, comment, trigger, admin_id, occurred_at.

conversation.resolved

Fired when an agent resolves a conversation and hands it back to the AI. Payload: thread_id (required), site_key, by_admin_id, occurred_at.

crm (6)

crm.company.created

Fired when a CRM company/account is created. Payload: company_id (required), name.

crm.deal.created

Fired when a CRM deal/opportunity is created (by an order, the capture agent, or a human). Payload: deal_id (required), title, amount, currency, scope.

crm.deal.lost

Fired when a deal is moved to a Lost stage (closed-lost). Payload: deal_id (required), stage, amount.

crm.deal.stage_changed

Fired when a deal moves to a different pipeline stage. Payload: deal_id (required), stage, amount.

crm.deal.won

Fired when a deal is moved to a Won stage (closed-won). Payload: deal_id (required), stage, amount.

crm.task.created

Fired when a CRM task is created (incl. AI-suggested next-step / renewal tasks). Payload: task_id (required), title.

e-mail (2)

email.bounced

Fired by OpsIQ.

email.replied

Fired by OpsIQ.

feedback (13)

feedback.analysis.completed

Fired when a Voice-of-Customer analysis run completes. Payload: analysis_run_id (required), workspace_key, sample_count, model_version.

feedback.detractor.detected

Fired when a newly indexed response meets its metric-specific detractor rule. Payload: feedback_item_id (required), workspace_key, source_kind, metric_kind, classification.

feedback.follow_up.completed

Fired when a Feedback follow-up is completed. Payload: feedback_item_id (required), workspace_key, actor_admin_id, outcome_code.

feedback.item.assigned

Fired when Feedback ownership changes. Payload: feedback_item_id (required), workspace_key, assignee_admin_id, team_id, actor_admin_id.

feedback.item.indexed

Fired when a source record is added to or refreshed in the canonical Feedback index. Payload: feedback_item_id (required), source_kind, source_id, workspace_key, metric_kind, classification.

feedback.item.redacted

Fired when source deletion or redaction removes Feedback content from the index. Payload: feedback_item_id (required), workspace_key, source_kind.

feedback.item.status_changed

Fired when the Feedback workflow state changes. Payload: feedback_item_id (required), workspace_key, state, actor_admin_id.

feedback.item.tagged

Fired when a tag is added to or removed from Feedback. Payload: feedback_item_id (required), workspace_key, tag, operation.

feedback.item.updated

Fired when a canonical Feedback item changes. Payload: feedback_item_id (required), workspace_key, change.

feedback.source.failed

Fired when a Feedback source replay or incremental index operation fails. Payload: workspace_key, source_kind (required), error_code, checkpoint.

feedback.source.lagging

Fired when a Feedback source checkpoint is behind its expected freshness window. Payload: workspace_key, source_kind (required), lag_seconds, last_success_at.

feedback.theme.detected

Fired when a canonical topic or theme signal is attached to Feedback. Payload: feedback_item_id (required), workspace_key, theme_key, confidence.

feedback.urgent.detected

Fired when an urgent Feedback signal is detected. Payload: feedback_item_id (required), workspace_key, source_kind, signal_key.

invoice (3)

invoice.created

Fired when an invoice is generated. Payload: invoice_id (required), customer_id, customer_email, amount, currency, due_date, items.

invoice.overdue

Fired when an invoice passes its due date unpaid. Payload: invoice_id (required), customer_id, customer_email, amount, currency, days_overdue.

invoice.paid

Fired when an invoice is paid in full. Payload: invoice_id (required), customer_id, customer_email, amount, currency, paid_at.

order (1)

order.created

Fired when a new order is placed. Payload: order_id (required), customer_id, customer_email, amount, currency, items, status, source.

płatność (3)

payment.completed

Fired when a payment succeeds. Payload: order_id (required), payment_id, provider_ref, customer_id, customer_email, amount, amount_minor, currency, gateway, invoice_id, items, paid_at.

payment.failed

Fired when a payment attempt fails. Payload: order_id, customer_id, customer_email, amount, currency, gateway, reason.

payment.refunded

Fired when a refund is issued. Payload: order_id, refund_id, customer_id, customer_email, amount, currency, reason.

bezpieczeństwo (1)

security.alert

Fired by PHASE_SECURITY_ALERTS when a security rule trips: failed-login wave, new automatic IP blocks, or a tamper-evidence (audit/consent hash chain) verification failure. Payload: rule (required), title, site_key, count, blocks, errors.

subscription (3)

subscription.cancelled

Fired when a subscription is cancelled. Payload: subscription_id (required), plan_name, customer_id, customer_email, cancel_reason, cancelled_at, ends_at.

subscription.created

Fired when a subscription is started. Payload: subscription_id (required), plan_id, plan_name, customer_id, customer_email, amount, currency, interval, trial_ends_at, next_billing_at.

subscription.renewed

Fired when a subscription renews successfully. Payload: subscription_id (required), plan_name, customer_id, customer_email, amount, currency, next_billing_at.

bilet (5)

ticket.closed

Fired when a ticket is closed or resolved. Payload: ticket_id (required), resolution, closed_by_type, closed_by_id.

ticket.created

Fired when a new support ticket is opened. Payload: ticket_id (required), ticket_number, subject, department_id, department_name, customer_id, customer_email, priority, message, author_type, author_id, author_name.

ticket.merged

Fired when one or more tickets are merged into another ticket. Payload: ticket_id (required), ticket_number, subject, external_ref, native_table, site_key, sources, merged_by, merged_at.

ticket.renumbered

Fired when a connector mirror adopts the remote platform's ticket number for an OpsIQ ticket. Payload: ticket_id (required), old_number (required), ticket_number (required), connector, external_ref.

ticket.replied

Fired when a reply is posted to a ticket. Payload: ticket_id (required), reply_id, author_type, author_id, author_name, message.

user (1)

user.registered

Fired when a new user/customer account is created. Payload: user_id (required), email, firstname, lastname, company, country, source.

Jak przetestować haki na miejscu?+

Ngrok ukazuje lokalny serwer. Ustaw punkt końcowy haka na swój ngrok URL.

A jeśli mój punkt końcowy jest tymczasowo obniżony?+

OpsIQ ponownie próbuje z wykładniczym backuffem. Jeśli Twój punkt końcowy odzyskuje się w oknie ponownego próby, nie zostaną utracone żadne zdarzenia.

Programista

Klucze API

API klawisze uwierzytelniają żądania do OpsIQ REST API Każdy klucz ma prawo dostępu.

Klucze API
Klucze APIEkran kluczy API: panel z żetonami poziomu dostępu i zakresu, obok listy istniejących zamaskowanych klawiszy z przyciskami cofnięcia.Klucze APIprzestrzeń roboczaWydanie kluczaDostępTylko do odczytuOgraniczoneZakrescontacts.readtickets.readevents.writeKlucz wydaniaTwoje kluczeIntegracja Zapapieraopq_••••4f2aOdrodzenieAplikacja mobilnaopq_••••91c7OdrodzenieEksport analitykówopq_••••2db0Odrodzenie1SCOPEDTylko do odczytu lub ograniczenia2PER-ACTIONWybrać dokładne zakresy3REVOCABLEObróć w dowolnym momencie
Prawdziwy ekran kluczy API: wystawić klucz skalowany, tylko do odczytu lub ograniczony wybierając dokładne zakresy i w każdej chwili cofnąć dowolny klucz.

Tworzenie klucza API

1
Przejdź do ustawień > API Klucze

Przejdź do zarządzania kluczami API.

2
Kliknij przycisk Utwórz klucz

Podaj nazwę opisową.

3
Wybierz zakresy

Daj klucz tylko tego, czego potrzebuje. Kopie przychodzą do odczytu i pisać pary na obszarze, tak aby integracja sprawozdawcza może być przyznana czytanie i nic innego.

Dostępne zakresy

Wybierz najwęższy zestaw, który się nadaje. admin spełnia wszystkie poniższe zakresy, więc używać go tylko wtedy, gdy naprawdę potrzebujesz szerokiego dostępu.

crm. read / crm. write

Kontakty, firmy, transakcje, działania, segmenty, zasięg, konwersje, cykl życia i haki CRM.

tickets. read / ticketts. write

Lista i odczyt biletów i ich wiadomości; odpowiedzi, aktualizacja, otwarcie i uruchomić operacje w kolejce masowej.

conversations. read / conversadions. write

Czytaj live- czat rozmowy i historię wiadomości; wysyłaj wiadomości, przypisz i zmień status.

kb. read / kb. write

Wpisy bazy wiedzy.

chat. read / chat. write

Szablony odpowiedzi zapisanych.

connectors.read

Zobacz, które złącza są zainstalowane, co mogą zrobić i sprawdzić ich kwalifikacje.

automations.read

Zobaczcie swoje działania, wyzwalacze i ich historię.

departments.read

Wydziały dostępne do routingu.

notifications.read

Powiadomienia dla określonego operatora.

analytics.read

Sekcja sprawozdania, wywóz CSV i definicje sprawozdań okresowych.

site_intelligence.read

Monitorowane strony i ich raporty SEO.

files.read

Podpisano linki do pobierania załączników.

status.write

Składniki i incydenty strony statusu.

pisanie

Pomocnicy do pisania w sztukach: szkic, streszczenie, tłumaczenie, przeredagowanie, komponowanie, analiza.

administrator

Wszystko, w tym niewielka liczba wrażliwych działań, które nie są celowo osiągalne przez wąski zakres: wymazywanie kontaktu, zmiana ustawień prywatności i czytanie dziennika dostępu.

💡
Zadzwoń meta. actions z kluczem, aby dokładnie zobaczyć, jakie działania może on uruchomić na instalacji. To jest zawsze bardziej wiarygodne niż praca z listy.

Poziomy dostępu

Wszystkie

Klucz może nazywać wszystko, co pozwala na jego skoki.

Tylko do odczytu

Każdy zapis jest odrzucany, cokolwiek mówią te skopy. Najbezpieczniejszy wybór do raportowania, deski rozdzielcze i wszystko, co nie powinno zmienić danych.

Ograniczone

Wypisz dokładne działania, które może wywołać klucz.

4
Kopiuj klucz

Pokazane raz. Zaczyna się od "opq _". Przechowywać go bezpiecznie.

🚫
Nigdy się nie dziel API klawisze w kodzie publicznym, po stronie klienta JavaScript, lub kontroli wersji. Użyj zmiennych środowiskowych.
Programista

Połącz swoją stronę internetową

W OpsIQ widget jest JavaScript Snippet dodajesz do swojej strony do śledzenia, czatu AI, tworzenia biletów i identyfikacji klienta.

Jak to działa?
Połącz swoją stronę internetowąTag skryptu w jednej linii po lewej i, po prawej stronie, strona internetowa z OpsIQ chat bańka pojawiająca się w rogu.<!-- paste before </body> --><script src="https://cdn.opsiq.io/w.js" data-site="ws_8a2f" async></script>
Połącz swoją stronę internetową

Instalacja podstawowa

Podstawowy snippet widżetu
<script src="https://your-opsiq-domain.com/widget.php"
  data-site-key="site_abc123"
  async></script>

Paste before the closing </body> tag. The script loads asynchronously and does not block page rendering.

Atrybuty konfiguracji

data-site-key

Wymagany. Klucz do strony z Connected Sites.

data-mode

Opcjonalnie. "chat" (domyślnie), "bites" lub "both".

data-position

Opcjonalnie. "bottom-right" (domyślnie) lub "bottom- left".

data-color

Opcjonalny. Podstawowy kod szesnastkowy koloru.

data-greeting

Opcjonalne. Wstępna wiadomość powitalna.

data-language

Opcjonalny. Język UI: "en", "es", fr ", de", pkt ", ar" itp.

data-identity-token

Opcjonalnie. Wygenerowany przez serwer symbol tożsamości.

Wsparcie SPA

Ręczne śledzenie trasy SPA
// Manually notify OpsIQ of a route change (for custom routers)
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["pageview", {
  url: window.location.href,
  title: document.title,
}]);

Zasady CSP

Zasady CSP dla widżetu
script-src 'self' https://your-opsiq-domain.com;
connect-src 'self' https://your-opsiq-domain.com;
frame-src https://your-opsiq-domain.com;
Czy widget spowalnia moją stronę?+

Nie. Pod 15 KB gzipped, ładuje async po zawartości strony.

Mogę dostosować wygląd?+

Użyj koloru data- dla pierwotnego koloru. Obsługa kontaktu dla opcji nadświetlenia CSS.

Programista

Widget przepisy instalacji

Przewodniki instalacyjne specyficzne dla platformy.

Jak to działa?
Widget przepisy instalacjiPlatforma zainstalować karty dla WordPress, Shopify oraz Google Tag Manager Każdy mówi, gdzie dodać widżet.WPWordPressZainstaluj wtyczkę, wpiszTwój klucz do strony, oszczędzaj.SklepShopifyWkleić w zakraplacztheme. liquid przed /body.GTMMenadżer znacznikówNiestandardowy znacznik HTML, wszystkie strony.
Zainstaluj przepisy

WordPress

Scenariusz:
Dodaj do wszystkich stron strony WordPress.
Co robić:

Option 1: Edit theme footer.php, paste snippet before </body>. Option 2: Use "Insert Headers and Footers" plugin > Scripts in Footer. Option 3: Use a child theme footer.php to survive theme updates.

Shopify

Scenariusz:
Dodaj do sklepu Shopify.
Co robić:

Online Store > Themes > Edit Code > Layout > theme.liquid. Paste before </body>. Save.

React / Next. js

Scenariusz:
Dodaj do aplikacji React lub Next. js.
Co robić:

In Next.js, use next/script in app/layout.tsx: import Script from "next/script"; <Script src="https://your-opsiq.com/widget.php" data-site-key="site_abc" strategy="lazyOnload" />

WHMCS

Scenariusz:
Dodaj do obszaru klienta WHMCS.
Co robić:

Ustawienia > Ustawienia ogólne > Inne > Zawartość globalnego footera. Wklej zarysowanie. Albo edytuj swój szablon stope. tpl.

Google Tag Manager

Scenariusz:
Dodaj przez GTM.
Co robić:

Tworzenie niestandardowych HTML tag, pasty snippet. Trigger: Wszystkie strony. Publikuj.

Programista

Admin widget w Twoim tle (jeden kontrakt, każda platforma)

Zamieść OpsIQ asystent administratora - czat admin, skrzynka na bilety i napisanie AI - wewnątrz panelu administratora platformy WWW, więc Twój zespół nigdy nie zostawia swoje narzędzia. Jak tożsamość odwiedzających i portal SSO, jest to jeden ogólny kontrakt wdrożony w ~15 linie kodu serwera platformy - ten sam wzór Zendesk, Intercom i Dyskurs wykorzystania do SSO. Nie ma wtyczki per- platform czekać na: każdy stos, który może obliczyć HMAC Może zrobić to dzisiaj.

Krok 1 - linia osadzona

Od Witryny zdalne→Twoja strona→Kody, skopiować linię ładowarki i dodać ją do stron panelu administracyjnego (foot include, szablon układu lub tylko admin- customer- JS pole):

Jedna linia osadzona
<script async src="https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=SITE_KEY&identity_token=TOKEN_FROM_STEP_2"></script>

Krok2- PowiedzOpsIQktóry jest zalogowany (server- signed)

Tylko Twoja aplikacja wie, w którym administratorze jest zalogowany - to nie jest brakujące, to model bezpieczeństwa. Twój serwer generuje krótki-żywy symbol podpisany z własnej sesji, dokładnie jak żeton tożsamości odwiedzającego, podpisany tym samym hakiem internetowym sekret:

PHP · podpisanie tożsamości administratora z sesji
<?php
$secret  = "opsiq_whsec_your_site_secret";   // Remote Sites → Codes
$payload = json_encode([
    "site_key"      => "SITE_KEY",
    "iat"           => time(),
    "exp"           => time() + 6 * 3600,
    "authenticated" => true,          // REQUIRED, top level — see note below
    "platform"      => "your-platform",
    "admin"    => [
        "id"            => (string)$admin->id,      // from YOUR session
        "name"          => $admin->name,
        "username"      => $admin->username,
        "email"         => $admin->email,
        "role"          => $admin->role,
        "authenticated" => true,
    ],
]);
$payload64 = rtrim(strtr(base64_encode($payload), "+/", "-_"), "=");
$identityToken = $payload64 . "." . hash_hmac("sha256", $payload64, $secret);
// Put $identityToken into the embed line (identity_token=…), or expose it as
// window.OpsIQAdminIdentityToken before the loader script.
Dostęp do Per- admin, automatycznie

Każdy administrator, który loguje się do platformy jest dopasowany indywidualnie:OpsIQPer- admin brama dostępu rozwiązuje token użytkownika nazwa + e-mail przeciwko jednejOpsIQagent (strona Team; użyj listy e-mail agenta "mecz", gdy emaile platformy różnią się) i stosuje uprawnienia THAT agenta, dział i skrzynki odbiorczej. Nowy pracownik = dodać agenta wOpsIQ; brak zmian zagnieżdżonych.

Roles ride along

Niezależnie od tego, jaki ciąg ról wysyła platforma jest wyświetlana naOpsIQstrona do przypisania; autoryzacja zawsze pochodzi zOpsIQAgent Record, nigdy z asertywnej roli.

Dlaczego nie przeczytasz naszego pliku cookie logowania?

Przeglądarki nigdy nie wysyłają plików cookie admin do innego pochodzenia - żaden sprzedawca nie może "po prostu wykryć" Twojej domeny logowania. Każdy poważny produkt rozwiązuje to w ten sam sposób: Twoje vouches serwera, podpisane. To jest cały kontrakt.

Brak trybu współdzielonego na swojej stronie

Poza hostem OpsIQ nie ma trybu bez podpisu lub współdzielenia: ładownik pozostaje ukryty do momentu przybycia podpisanego symbolu administratora. Token =... Wartość w ładowarce Codes jest kluczem widget, który tylko identyfikuje stronę; nigdy nie może się zalogować.

W authenticated flaga - umieścić go na poziomie TOP

Flaga ta jest twierdzeniem serwera, że człowiek jest naprawdę zalogowany, a OpsIQ odmawia żadnego symbolu bez niego. "authenticated" => true beside site_key/iat/exp, Nie tylko wewnątrz admin obiekt. Bieżący OpsIQ akceptuje go w obu pozycjach, ale starsze wydania tylko odczytują górny poziom - a niepowodzenie jest zwodnicze: lista rozmów, historia i nieprzeczytane wszystkie uwierzytelniania grzywny podczas każdego czatu odpowiedzi "Wymagany administracyjny login"Jeśli widzisz dokładnie ten podział, sprawdź najpierw tę flagę.

Higiena tokena

Podpisz tylko na serwerze, nigdy w przeglądarceJavaScript. Zachować exp krótki (minuty do godzin);OpsIQodrzuca wygasły i future- datowane żetony, a podpis wiąże token z kluczem witryny.

Referencyjne implementacje

W WHMCS moduł robi to automatycznie z WHMCS sesja administracyjna; Botble Plik mostowy złącza hotelowego robi to z sesji Laravel (op =admin_identity). Oba są tylko tym kontraktem w dialekcie ich platformy - kopia, który czyta najbliżej stosu.

Przewód zerowy (sonda deklarowana przez podłączenie)

Kiedy złącze OpsIQ przechowuje swój punkt końcowy tożsamości w swoim admin_identity_probe_url ustawienie, linia PLAIN Loadera jest wszystkie strony administratora potrzebne: widget odkrywa sondę z złącza, wywołuje go za pomocą klucza witryny + widelżet i uwierzytelnia każdy administrator automatycznie. Strona może nadal nadpisać data-identity-endpoint atrybut lub window.OpsIQAdminIdentityEndpoint.

💡
Tajemnica podpisania jest dla ciebie wypełniona. W zdalnych witrynach, Twoja strona, kody, Opcja 3, Zarejestruj się w swoim personelu, każdy przykład już zawiera własny sekret tej strony, więc kod działa jak wklejone: nie ma nic do kopiowania lub konfigurowania. Przykłady na tej stronie show opsiq_whsec_YOUR_SITE_SECRET na jego miejsce. Każdy przykład szuka OPSIQ_SITE_SECRET (lub własne ustawienie framework, nazwane w swoich notatkach) na serwerze najpierw i używa go, gdy jest ustawiony, więc można przenieść sekret z pliku kiedy tylko chcesz, na przykład obrócić go bez edytowania kodu. Tak czy inaczej plik działa tylko na swoim serwerze: nigdy nie wklej go do strony internetowej lub przeglądarki JavaScripti nigdy nie zobowiązuj się do publicznego repozytorium, ponieważ każdy, kto posiada tajemnicę może zalogować się jako jeden z twoich klientów lub pracowników. WHMCS oraz Botble nie potrzebuje niczego z tego: WHMCS hak przybywa z sekretem wypełnionym, i Botble Panel łączników wypełnia go do mostu.

Kompletny kod, platforma po platformie

Każdy przykład drukuje znacznik Admin Chat tylko dla signed- w personelu, z podpisanym żetonem dodany, i odpowiada na odświeżenie widget (?opsiq_identity_refresh=1&role=admin) z {"success":true,"identity_token":"…"} lub 401. Zdalne strony, witryny, kody, opcja 3, Zarejestruj się na swoich pracowników drukuje ten sam kod z klucza witryny i sekret wypełniony.

⚠️
Symbol admin jest dwuczęściową formą: base64url (ładunek), kropka, a następnie hex HMAC-SHA256 z tego tekstu base64url. To nie jest JWT, i JWT. Obiekt admin potrzebuje id i e-mail, a exp musi być wewnątrz 24 godzin.

WHMCS

Nothing to add: the WHMCS hook in Option 1 already signs your logged-in staff into Admin Chat and refreshes the token. Do not paste the Option 3 loader as well.
1

Install the Option 1 hook as includes/hooks/opsiq_tracker.php.

2

Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

includes/hooks/opsiq_tracker.php
/* WHMCS: no extra code. Option 1 (the All-in-One WHMCS Hook) signs the logged-in
 * admin into Admin Chat on every admin page and answers ?opsiq_identity_refresh=1&role=admin. */

Botble (connector bridge)

Nothing to add: the Botble bridge signs your logged-in admins. Copy the bridge from the Botble connector panel (it arrives with OPSIQ_HOST, OPSIQ_SITE_KEY and OPSIQ_SITE_SECRET filled in), then put its one admin_embed line in Botble's admin Custom JS.
1

In Botble admin → Custom JS, add: <script async src="https://YOUR-BOTBLE-SITE/opsiq-botble-bridge.php?op=admin_embed"></script>

2

Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

public/opsiq-botble-bridge.php
<!-- Botble admin → Custom JS. The bridge signs the logged-in admin; nothing secret is in the page. -->
<script async src="https://YOUR-BOTBLE-SITE/opsiq-botble-bridge.php?op=admin_embed"></script>

PHP (no dependencies)

1

Save as opsiq-admin-chat.php. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

At the very top of every ADMIN page, before any output: require 'opsiq-admin-chat.php'; opsiq_admin_chat_refresh(); and before </body>: <?= opsiq_admin_chat_tag() ?> (it replaces the Option 3 loader).

3

Replace opsiq_admin_chat_user() with your signed-in staff member. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

opsiq-admin-chat.php
<?php
/* opsiq-admin-chat.php — sign your logged-in staff into OpsIQ Admin Chat. */

// WHO IS SIGNED IN AS STAFF — replace the body. Return null for anyone who is not staff.
function opsiq_admin_chat_user(): ?array
{
    $u = $_SESSION['admin'] ?? null;    // e.g. ['id' => 3, 'email' => '…', 'username' => '…', 'name' => '…', 'role' => 'Owner']
    return is_array($u) && !empty($u['id']) && !empty($u['email']) ? $u : null;
}

// The admin token is base64url(payload) . '.' . hex HMAC — NOT a JWT.
function opsiq_admin_chat_token(array $u): string
{
    $secret = (string) (getenv('OPSIQ_SITE_SECRET') ?: 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; the environment wins when set
    if ($secret === '') return '';                           // fail closed: no Admin Chat
    $now = time();
    $payload = rtrim(strtr(base64_encode(json_encode([
        'site_key'      => 'YOUR_SITE_KEY',
        'iat'           => $now,
        'exp'           => $now + 3600,                      // at most 24 hours
        'authenticated' => true,
        'platform'      => 'php',
        'admin'         => [
            'id'       => (string) $u['id'],                 // REQUIRED
            'email'    => (string) $u['email'],              // REQUIRED
            'username' => (string) ($u['username'] ?? ''),
            'name'     => (string) ($u['name'] ?? ''),
            'role'     => (string) ($u['role'] ?? ''),
        ],
    ], JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
    return $payload . '.' . hash_hmac('sha256', $payload, $secret);
}

// Call at the top of every admin page, before any output.
function opsiq_admin_chat_refresh(): void
{
    if (empty($_GET['opsiq_identity_refresh'])) return;
    header('Content-Type: application/json; charset=utf-8');
    header('Cache-Control: no-store');
    $u = opsiq_admin_chat_user();
    $t = $u ? opsiq_admin_chat_token($u) : '';
    if ($t === '') { http_response_code(401); echo json_encode(['success' => false, 'login_required' => true]); exit; }
    echo json_encode(['success' => true, 'role' => 'admin', 'identity_token' => $t]);
    exit;
}

// Print before </body> on admin pages. Prints nothing for anyone who is not staff.
function opsiq_admin_chat_tag(): string
{
    $u = opsiq_admin_chat_user();
    $t = $u ? opsiq_admin_chat_token($u) : '';
    if ($t === '') return '';
    $src = 'https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=' . rawurlencode($t);
    return '<script async src="' . htmlspecialchars($src, ENT_QUOTES) . '" data-opsiq-widget="admin-chat"></script>';
}

Laravel

1

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET=… in .env with 'opsiq' => ['site_secret' => env('OPSIQ_SITE_SECRET')] in config/services.php on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Save the class as app/Support/OpsiqAdminChat.php; adjust isStaff() to your admin guard or role. Add the refresh middleware from the bottom of the code to your admin routes.

3

In your admin Blade layout before </body>: {!! \App\Support\OpsiqAdminChat::tag() !!}. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

app/Support/OpsiqAdminChat.php
<?php
// app/Support/OpsiqAdminChat.php — no packages needed.
namespace App\Support;

final class OpsiqAdminChat
{
    /** WHO IS STAFF — adjust to your admin guard, role or gate. */
    private static function staff()
    {
        $user = auth('web')->user();                    // or auth('admin')->user()
        return ($user && $user->can('access-admin')) ? $user : null;
    }

    /** The admin token is base64url(payload) . '.' . hex HMAC — NOT a JWT. */
    public static function token(): string
    {
        $user = self::staff();
        $secret = (string) (config('services.opsiq.site_secret') ?: 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; config wins when set
        if (!$user || $secret === '') return '';
        $now = time();
        $payload = rtrim(strtr(base64_encode(json_encode([
            'site_key'      => 'YOUR_SITE_KEY',
            'iat'           => $now,
            'exp'           => $now + 3600,
            'authenticated' => true,
            'platform'      => 'laravel',
            'admin'         => [
                'id'       => (string) $user->id,           // REQUIRED
                'email'    => (string) $user->email,        // REQUIRED
                'username' => (string) ($user->username ?? $user->email),
                'name'     => (string) $user->name,
                'role'     => 'Admin',
            ],
        ], JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
        return $payload . '.' . hash_hmac('sha256', $payload, $secret);
    }

    /** For the admin Blade layout, before </body>. Prints nothing for non-staff. */
    public static function tag(): string
    {
        $t = self::token();
        if ($t === '') return '';
        return '<script async src="' . e('https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=' . rawurlencode($t)) . '" data-opsiq-widget="admin-chat"></script>';
    }
}

/* Refresh — Admin Chat asks ?opsiq_identity_refresh=1&role=admin on the admin page it is on.
 * app/Http/Middleware/OpsiqAdminChatRefresh.php, added to your admin route group:
 *
 *   public function handle($request, \Closure $next) {
 *       if (!$request->query('opsiq_identity_refresh')) return $next($request);
 *       $t = \App\Support\OpsiqAdminChat::token();
 *       return $t === ''
 *           ? response()->json(['success' => false, 'login_required' => true], 401)->header('Cache-Control', 'no-store')
 *           : response()->json(['success' => true, 'role' => 'admin', 'identity_token' => $t])->header('Cache-Control', 'no-store');
 *   }
 */

WordPress / WooCommerce

1

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, add define('OPSIQ_SITE_SECRET', '…'); to wp-config.php instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Paste into your theme's functions.php or a small plugin. It shows Admin Chat inside wp-admin to users who can manage_options; change the capability to suit your team.

3

Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

functions.php
/* functions.php or a small plugin — OpsIQ Admin Chat inside wp-admin. */

if (!defined('OPSIQ_SITE_SECRET')) define('OPSIQ_SITE_SECRET', 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; wp-config.php wins when set

function opsiq_admin_chat_token(): string {
    if (!is_user_logged_in() || !current_user_can('manage_options')) return '';     // who counts as staff
    if (!defined('OPSIQ_SITE_SECRET') || OPSIQ_SITE_SECRET === '') return '';
    $u   = wp_get_current_user();
    $now = time();
    // The admin token is base64url(payload) . '.' . hex HMAC — NOT a JWT.
    $payload = rtrim(strtr(base64_encode(wp_json_encode([
        'site_key'      => 'YOUR_SITE_KEY',
        'iat'           => $now,
        'exp'           => $now + 3600,
        'authenticated' => true,
        'platform'      => 'wordpress',
        'admin'         => [
            'id'       => (string) $u->ID,                   // REQUIRED
            'email'    => (string) $u->user_email,           // REQUIRED
            'username' => (string) $u->user_login,
            'name'     => (string) $u->display_name,
            'role'     => (string) (reset($u->roles) ?: 'administrator'),
        ],
    ])), '+/', '-_'), '=');
    return $payload . '.' . hash_hmac('sha256', $payload, OPSIQ_SITE_SECRET);
}

// Refresh: Admin Chat asks ?opsiq_identity_refresh=1&role=admin on the admin page it is on.
add_action('admin_init', function () {
    if (empty($_GET['opsiq_identity_refresh'])) return;
    nocache_headers();
    $t = opsiq_admin_chat_token();
    if ($t === '') wp_send_json(['success' => false, 'login_required' => true], 401);
    wp_send_json(['success' => true, 'role' => 'admin', 'identity_token' => $t]);
});

// The loader, on every wp-admin page, for staff only.
add_action('admin_footer', function () {
    $t = opsiq_admin_chat_token();
    if ($t === '') return;
    echo '<script async src="' . esc_url('https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=' . rawurlencode($t)) . '" data-opsiq-widget="admin-chat"></script>';
});

Node.js / Express

1

No packages needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

adminRouter.use(opsiqAdminChat) on your ADMIN routes, after your session middleware; adjust isStaff(). It answers the refresh and sets res.locals.opsiqAdminChatTag.

3

Print res.locals.opsiqAdminChatTag (unescaped) before </body> in your admin layout. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

opsiq-admin-chat.js
// opsiq-admin-chat.js — no packages needed.
const crypto = require("crypto");

const isStaff = (user) => !!(user && user.isAdmin);        // WHO IS STAFF — adjust

// The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
function opsiqAdminChatToken(user) {
  const secret = process.env.OPSIQ_SITE_SECRET || "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; the environment wins when set
  if (!isStaff(user) || !secret) return "";
  const now = Math.floor(Date.now() / 1000);
  const payload = Buffer.from(JSON.stringify({
    site_key: "YOUR_SITE_KEY",
    iat: now,
    exp: now + 3600,                                        // at most 24 hours
    authenticated: true,
    platform: "node",
    admin: { id: String(user.id), email: user.email, username: user.username || user.email, name: user.name || "", role: user.role || "Admin" },  // id + email REQUIRED
  })).toString("base64url");
  return payload + "." + crypto.createHmac("sha256", secret).update(payload).digest("hex");
}

// adminRouter.use(opsiqAdminChat)
function opsiqAdminChat(req, res, next) {
  const token = opsiqAdminChatToken(req.user);
  if (req.query.opsiq_identity_refresh) {
    res.set("Cache-Control", "no-store");
    return token
      ? res.json({ success: true, role: "admin", identity_token: token })
      : res.status(401).json({ success: false, login_required: true });
  }
  res.locals.opsiqAdminChatTag = token
    ? '<script async src="' + ("https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=" + encodeURIComponent(token)).replace(/"/g, """) + '" data-opsiq-widget="admin-chat"></script>'
    : "";
  next();
}

module.exports = { opsiqAdminChat };

Python (Flask)

1

No packages beyond Flask and flask-login. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Call init_opsiq_admin_chat(app) where you create the app, and adjust is_staff().

3

In your admin base template before </body>: {{ opsiq_admin_chat_tag }}. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

opsiq_admin_chat.py
# opsiq_admin_chat.py — Flask + flask-login, no other packages.
import base64, hashlib, hmac, json, os, time, urllib.parse
from flask import request, jsonify
from flask_login import current_user
from markupsafe import Markup, escape

def is_staff(user):                                           # WHO IS STAFF — adjust
    return user.is_authenticated and getattr(user, "is_admin", False)

def opsiq_admin_chat_token():
    secret = os.environ.get("OPSIQ_SITE_SECRET") or "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; the environment wins when set
    if not secret or not is_staff(current_user):
        return ""
    now = int(time.time())
    # The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
    payload = base64.urlsafe_b64encode(json.dumps({
        "site_key": "YOUR_SITE_KEY", "iat": now, "exp": now + 3600,
        "authenticated": True, "platform": "python",
        "admin": {"id": str(current_user.id), "email": current_user.email,           # REQUIRED
                  "username": getattr(current_user, "username", current_user.email),
                  "name": getattr(current_user, "name", ""), "role": "Admin"},
    }, separators=(",", ":")).encode()).decode().rstrip("=")
    return payload + "." + hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()

def init_opsiq_admin_chat(app):
    @app.before_request
    def _opsiq_admin_refresh():
        if request.args.get("opsiq_identity_refresh"):
            t = opsiq_admin_chat_token()
            if t:
                resp = jsonify({"success": True, "role": "admin", "identity_token": t})
            else:
                resp = jsonify({"success": False, "login_required": True})
                resp.status_code = 401
            resp.headers["Cache-Control"] = "no-store"
            return resp

    @app.context_processor
    def _opsiq_admin_tag():
        t = opsiq_admin_chat_token()
        if not t:
            return {"opsiq_admin_chat_tag": ""}
        src = "https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=" + urllib.parse.quote(t, safe="")
        return {"opsiq_admin_chat_tag": Markup('<script async src="%s" data-opsiq-widget="admin-chat"></script>' % escape(src))}

Django

1

No packages needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in settings.py (for example os.environ["OPSIQ_SITE_SECRET"]) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Add "yourapp.opsiq_admin_chat.OpsiqAdminChatMiddleware" to MIDDLEWARE (after AuthenticationMiddleware) and "yourapp.opsiq_admin_chat.opsiq_admin_chat" to TEMPLATES context_processors. Staff = user.is_staff.

3

In your admin base template before </body>: {{ opsiq_admin_chat_tag }}. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

opsiq_admin_chat.py
# yourapp/opsiq_admin_chat.py — no packages needed.
import base64, hashlib, hmac, json, time, urllib.parse
from django.conf import settings
from django.http import JsonResponse
from django.utils.html import format_html

def opsiq_admin_chat_token(user):
    secret = getattr(settings, "OPSIQ_SITE_SECRET", "") or "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; settings win when set
    if not secret or not user.is_authenticated or not user.is_staff:
        return ""
    now = int(time.time())
    # The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
    payload = base64.urlsafe_b64encode(json.dumps({
        "site_key": "YOUR_SITE_KEY", "iat": now, "exp": now + 3600,
        "authenticated": True, "platform": "django",
        "admin": {"id": str(user.pk), "email": user.email, "username": user.get_username(),   # id + email REQUIRED
                  "name": user.get_full_name(), "role": "Superuser" if user.is_superuser else "Staff"},
    }, separators=(",", ":")).encode()).decode().rstrip("=")
    return payload + "." + hmac.new(secret.encode(), payload.encode(), hashlib.sha256).hexdigest()

class OpsiqAdminChatMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self, request):
        if request.GET.get("opsiq_identity_refresh"):
            t = opsiq_admin_chat_token(request.user)
            resp = (JsonResponse({"success": True, "role": "admin", "identity_token": t}) if t
                    else JsonResponse({"success": False, "login_required": True}, status=401))
            resp["Cache-Control"] = "no-store"
            return resp
        return self.get_response(request)

def opsiq_admin_chat(request):
    t = opsiq_admin_chat_token(request.user)
    if not t:
        return {"opsiq_admin_chat_tag": ""}
    src = "https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=" + urllib.parse.quote(t, safe="")
    return {"opsiq_admin_chat_tag": format_html('<script async src="{}" data-opsiq-widget="admin-chat"></script>', src)}

.NET / C#

1

No packages needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OpsIQ:SiteSecret (user-secrets, the OpsIQ__SiteSecret environment variable or Key Vault) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

In Program.cs after app.UseAuthentication(): app.Use(OpsiqAdminChat.Refresh); staff = users in the "Admin" role (adjust).

3

In your admin layout before </body>: @Html.Raw(OpsiqAdminChat.Tag(Context)). Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

OpsiqAdminChat.cs
// OpsiqAdminChat.cs — no packages needed.
using System.Net;
using System.Security.Claims;
using System.Security.Cryptography;
using System.Text;
using System.Text.Json;

public static class OpsiqAdminChat
{
    // The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
    public static string Token(HttpContext ctx)
    {
        var secret = ctx.RequestServices.GetRequiredService<IConfiguration>()["OpsIQ:SiteSecret"];
        if (string.IsNullOrEmpty(secret)) secret = "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; configuration wins when set
        if (string.IsNullOrEmpty(secret) || !ctx.User.IsInRole("Admin")) return "";      // WHO IS STAFF — adjust
        var now = DateTimeOffset.UtcNow.ToUnixTimeSeconds();
        var json = JsonSerializer.Serialize(new Dictionary<string, object> {
            ["site_key"] = "YOUR_SITE_KEY", ["iat"] = now, ["exp"] = now + 3600,
            ["authenticated"] = true, ["platform"] = "dotnet",
            ["admin"] = new Dictionary<string, string> {
                ["id"] = ctx.User.FindFirstValue(ClaimTypes.NameIdentifier) ?? "",      // REQUIRED
                ["email"] = ctx.User.FindFirstValue(ClaimTypes.Email) ?? "",            // REQUIRED
                ["username"] = ctx.User.Identity?.Name ?? "", ["name"] = ctx.User.Identity?.Name ?? "", ["role"] = "Admin" },
        });
        var payload = Convert.ToBase64String(Encoding.UTF8.GetBytes(json)).TrimEnd('=').Replace('+', '-').Replace('/', '_');
        using var h = new HMACSHA256(Encoding.UTF8.GetBytes(secret));
        return payload + "." + Convert.ToHexString(h.ComputeHash(Encoding.UTF8.GetBytes(payload))).ToLowerInvariant();
    }

    // app.Use(OpsiqAdminChat.Refresh)
    public static async Task Refresh(HttpContext ctx, Func<Task> next)
    {
        if (string.IsNullOrEmpty(ctx.Request.Query["opsiq_identity_refresh"])) { await next(); return; }
        ctx.Response.Headers["Cache-Control"] = "no-store";
        var t = Token(ctx);
        if (t == "") { ctx.Response.StatusCode = 401; await ctx.Response.WriteAsJsonAsync(new { success = false, login_required = true }); return; }
        await ctx.Response.WriteAsJsonAsync(new { success = true, role = "admin", identity_token = t });
    }

    public static string Tag(HttpContext ctx)
    {
        var t = Token(ctx);
        if (t == "") return "";
        return "<script async src=\"" + WebUtility.HtmlEncode("https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=" + Uri.EscapeDataString(t)) + "\" data-opsiq-widget=\"admin-chat\"></script>";
    }
}

Ruby on Rails

1

No gems needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

include OpsiqAdminChat in your admin base controller; adjust opsiq_staff.

3

In your admin layout before </body>: <%= opsiq_admin_chat_tag %>. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

app/controllers/concerns/opsiq_admin_chat.rb
# app/controllers/concerns/opsiq_admin_chat.rb — no gems needed.
require "base64"
require "cgi"
require "json"
require "openssl"

module OpsiqAdminChat
  extend ActiveSupport::Concern

  included do
    before_action :opsiq_admin_identity_refresh
    helper_method :opsiq_admin_chat_tag
  end

  private

  def opsiq_staff                                        # WHO IS STAFF — adjust
    current_user if respond_to?(:current_user, true) && current_user&.try(:admin?)
  end

  # The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
  def opsiq_admin_chat_token
    secret = ENV["OPSIQ_SITE_SECRET"].presence || "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; the environment wins when set
    staff = opsiq_staff
    return "" if secret.blank? || staff.nil?
    now = Time.now.to_i
    payload = Base64.urlsafe_encode64({
      site_key: "YOUR_SITE_KEY", iat: now, exp: now + 3600,
      authenticated: true, platform: "rails",
      admin: { id: staff.id.to_s, email: staff.email,              # REQUIRED
               username: staff.try(:username).to_s, name: staff.try(:name).to_s, role: "Admin" }
    }.to_json, padding: false)
    payload + "." + OpenSSL::HMAC.hexdigest("SHA256", secret, payload)
  end

  def opsiq_admin_identity_refresh
    return unless params[:opsiq_identity_refresh].present?
    response.headers["Cache-Control"] = "no-store"
    t = opsiq_admin_chat_token
    return render(json: { success: false, login_required: true }, status: :unauthorized) if t.blank?
    render json: { success: true, role: "admin", identity_token: t }
  end

  def opsiq_admin_chat_tag
    t = opsiq_admin_chat_token
    return "" if t.blank?
    helpers.tag.script(nil, async: true, src: "https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=#{CGI.escape(t)}", data: { opsiq_widget: "admin-chat" })
  end
end

Java (Spring Boot)

1

No libraries needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set opsiq.site.secret (for example from OPSIQ_SITE_SECRET) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Replace staff() with your admin lookup. The filter answers the refresh; @ControllerAdvice exposes opsiqAdminChatTag to views.

3

Admin Thymeleaf layout before </body>: <th:block th:utext="${opsiqAdminChatTag}"/>. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

OpsiqAdminChat.java
// OpsiqAdminChat.java — no libraries needed.
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.util.*;
import javax.crypto.Mac;
import javax.crypto.spec.SecretKeySpec;
import com.fasterxml.jackson.databind.ObjectMapper;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.util.HtmlUtils;

@Component
@ControllerAdvice
public class OpsiqAdminChat implements Filter {
    @Value("${opsiq.site.secret:opsiq_whsec_YOUR_SITE_SECRET}")   // this site's secret; opsiq.site.secret wins when set
    private String secret;

    /** WHO IS STAFF — replace: id, email, username, name, role. Null for anyone else. */
    private Map<String, String> staff(HttpServletRequest req) {
        if (req.getUserPrincipal() == null || !req.isUserInRole("ADMIN")) return null;
        String n = req.getUserPrincipal().getName();
        return Map.of("id", n, "email", n, "username", n, "name", n, "role", "Admin");
    }

    // The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
    String token(HttpServletRequest req) {
        Map<String, String> u = staff(req);
        if (u == null || secret.isEmpty()) return "";
        try {
            long now = System.currentTimeMillis() / 1000;
            Map<String, Object> claims = new LinkedHashMap<>();
            claims.put("site_key", "YOUR_SITE_KEY"); claims.put("iat", now); claims.put("exp", now + 3600);
            claims.put("authenticated", true); claims.put("platform", "java"); claims.put("admin", u);   // id + email REQUIRED
            String payload = Base64.getUrlEncoder().withoutPadding().encodeToString(new ObjectMapper().writeValueAsBytes(claims));
            Mac mac = Mac.getInstance("HmacSHA256");
            mac.init(new SecretKeySpec(secret.getBytes(StandardCharsets.UTF_8), "HmacSHA256"));
            return payload + "." + HexFormat.of().formatHex(mac.doFinal(payload.getBytes(StandardCharsets.UTF_8)));
        } catch (Exception e) { return ""; }
    }

    @Override // Admin Chat refreshing on the admin page it is on
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        if (req.getParameter("opsiq_identity_refresh") == null) { chain.doFilter(request, response); return; }
        HttpServletResponse res = (HttpServletResponse) response;
        res.setHeader("Cache-Control", "no-store");
        res.setContentType("application/json");
        String t = token(req);
        if (t.isEmpty()) { res.setStatus(401); res.getWriter().write("{\"success\":false,\"login_required\":true}"); return; }
        res.getWriter().write("{\"success\":true,\"role\":\"admin\",\"identity_token\":\"" + t + "\"}");
    }

    @ModelAttribute("opsiqAdminChatTag")
    public String tag(HttpServletRequest req) {
        String t = token(req);
        if (t.isEmpty()) return "";
        String src = "https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=" + URLEncoder.encode(t, StandardCharsets.UTF_8);
        return "<script async src=\"" + HtmlUtils.htmlEscape(src) + "\" data-opsiq-widget=\"admin-chat\"></script>";
    }
}

Go

1

No modules needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Replace staff() with your session lookup and wrap your admin router: OpsiqAdminChatRefresh(adminMux).

3

Pass OpsiqAdminChatTag(r) to your admin layout and print it before </body>. Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.

opsiq_admin_chat.go
// opsiq_admin_chat.go — standard library only.
package main

import (
    "crypto/hmac"
    "crypto/sha256"
    "encoding/base64"
    "encoding/hex"
    "encoding/json"
    "html"
    "html/template"
    "net/http"
    "net/url"
    "os"
    "time"
)

type OpsiqStaff struct{ ID, Email, Username, Name, Role string }

// WHO IS STAFF — replace with your session lookup. Return nil for anyone who is not staff.
func staff(r *http.Request) *OpsiqStaff { return nil }

// The admin token is base64url(payload) + "." + hex HMAC — NOT a JWT.
func opsiqAdminChatToken(r *http.Request) string {
    u, secret := staff(r), os.Getenv("OPSIQ_SITE_SECRET")
    if secret == "" {
        secret = "opsiq_whsec_YOUR_SITE_SECRET" // this site's secret; the environment wins when set
    }
    if u == nil || secret == "" {
        return ""
    }
    now := time.Now().Unix()
    body, _ := json.Marshal(map[string]any{
        "site_key": "YOUR_SITE_KEY", "iat": now, "exp": now + 3600,
        "authenticated": true, "platform": "go",
        "admin": map[string]string{"id": u.ID, "email": u.Email, "username": u.Username, "name": u.Name, "role": u.Role}, // id + email REQUIRED
    })
    payload := base64.RawURLEncoding.EncodeToString(body)
    mac := hmac.New(sha256.New, []byte(secret))
    mac.Write([]byte(payload))
    return payload + "." + hex.EncodeToString(mac.Sum(nil))
}

// OpsiqAdminChatRefresh answers Admin Chat's ?opsiq_identity_refresh=1&role=admin.
func OpsiqAdminChatRefresh(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if r.URL.Query().Get("opsiq_identity_refresh") == "" {
            next.ServeHTTP(w, r)
            return
        }
        w.Header().Set("Cache-Control", "no-store")
        w.Header().Set("Content-Type", "application/json")
        if t := opsiqAdminChatToken(r); t != "" {
            json.NewEncoder(w).Encode(map[string]any{"success": true, "role": "admin", "identity_token": t})
            return
        }
        w.WriteHeader(http.StatusUnauthorized)
        json.NewEncoder(w).Encode(map[string]any{"success": false, "login_required": true})
    })
}

// OpsiqAdminChatTag prints the loader for staff only.
func OpsiqAdminChatTag(r *http.Request) template.HTML {
    t := opsiqAdminChatToken(r)
    if t == "" {
        return ""
    }
    src := "https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=YOUR_SITE_KEY&identity_token=" + url.QueryEscape(t)
    return template.HTML(`<script async src="` + html.EscapeString(src) + `" data-opsiq-widget="admin-chat"></script>`)
}

Wdrażanie punktu końcowego tożsamości na Laravel (ciężko wygrane uwagi)

Jeśli Twoja platforma jest Laravel (Butelka, Bagisto, aplikacje niestandardowe) i Twój punkt końcowy jest samodzielny plik, który uruchamia ramy do czytania logged- w admin, trzy szczegóły zaoszczędzą Ci godzin - każdy z nich spowodował prawdziwą awarię produkcji zanim został poznany:

Zwiążcie żądanie PRZED bootstrap

Państwa usługodawcy mogą rozwiązać request z pojemnika podczas bagażnika. Laravel własny cykl życia wiąże przechwycone żądanie pierwszej rzeczy wewnątrz Kernel::handle() - lustro, że rozkaz: $app->instance('request', Request::capture()) INFORMACJE WAŻNE PRZED $kernel->bootstrap()lub "Klasa docelowa [żądanie] nie istnieje".

Prefiks session- cookie jest HMAC-keyed

Nowoczesne prefiksy Laravel z wartościami cookies HMAC obliczone za pomocą klucza APP (CookieValuePrefix) - równina sha1(name."v2") nigdy nie można go dopasować. CookieValuePrefix::validate($name, $decrypted, $keys), o strukturalnym zapachu (znaki hex + 40 | na pozycji40). Powiedz: id sesji dłużej niż40znaki (81= prefiks nadal dołączony) i sesja, która ładuje tylko _token - W środku.

Gdzie mieszka logowanie

Znacznik Auth jest login_<guard>_<sha1(guard class)> - dla domyślnej straży internetowej: 'login_web_' . sha1(Illuminate\Auth\SessionGuard::class)Przeskanuj każdy login_* klucz numeryczny jako awaryjny dla strażników.

Debugowanie jak most

Statek debug=1 tryb, który nazywa nieudany STEP i wyjątek - ślepy chwyt - wszystkie wykonane na żywo wdrożenia nie do rozpoznania. Botomostek (z v1.0.7) jest referencją: markery stopu w jądrze / bind / bootstrap / decrypt / session / auth / db.

Laravel · kompletny punkt końcowy tożsamości (kopia, ustawić dwie stałe, gotowe)
<?php
/* identity endpoint · LARAVEL (Botble, Bagisto, any Laravel admin)
 * Drop this in your PUBLIC web root, e.g. /opsiq-identity.php
 * Answers: {"success":true,"authenticated":true,"admin":{...},"identity_token":"..."} */
define("OPSIQ_SITE_KEY", "SITE_KEY");
define("OPSIQ_SITE_SECRET", "opsiq_whsec_your_site_secret");   // Remote Sites → Codes

header("Content-Type: application/json");
$step = "boot";
try {
    require __DIR__ . "/../vendor/autoload.php";
    $app = require_once __DIR__ . "/../bootstrap/app.php";

    $step = "bind";
    // ORDER MATTERS: bind the request BEFORE bootstrapping, or providers that
    // resolve "request" during boot throw "Target class [request] does not exist".
    $request = Illuminate\Http\Request::capture();
    $app->instance("request", $request);

    $step = "bootstrap";
    $kernel = $app->make(Illuminate\Contracts\Http\Kernel::class);
    $kernel->bootstrap();

    $step = "session";
    $app["session"]->driver()->setId($request->cookie(config("session.cookie")));
    $app["session"]->driver()->start();

    $step = "auth";
    $user = auth()->guard("web")->user();   // use YOUR admin guard name
    if (!$user) {
        echo json_encode(["success" => false, "authenticated" => false, "error" => "no admin session"]);
        exit;
    }

    $step = "sign";
    $admin = [
        "id"            => (string)$user->id,
        "name"          => (string)($user->name ?? $user->username),
        "username"      => (string)($user->username ?? $user->email),
        "email"         => (string)$user->email,
        "role"          => (string)optional($user->roles->first())->name,
        "authenticated" => true,
    ];
    $payload = json_encode([
        "site_key"      => OPSIQ_SITE_KEY,
        "iat"           => time(),
        "exp"           => time() + 6 * 3600,
        "authenticated" => true,          // TOP LEVEL — required
        "platform"      => "laravel",
        "admin"         => $admin,
    ], JSON_UNESCAPED_SLASHES);
    $p64   = rtrim(strtr(base64_encode($payload), "+/", "-_"), "=");
    $token = $p64 . "." . hash_hmac("sha256", $p64, OPSIQ_SITE_SECRET);

    echo json_encode(["success" => true, "authenticated" => true,
                      "admin" => $admin, "identity_token" => $token]);
} catch (\Throwable $e) {
    // debug=1 names the failing STEP — never ship a blind catch-all
    $err = ($_GET["debug"] ?? "") === "1"
        ? get_class($e) . " at [" . $step . "]: " . $e->getMessage()
        : "identity unavailable";
    echo json_encode(["success" => false, "authenticated" => false, "error" => $err]);
}

Ten sam punkt końcowy na innych stosach

Tylko "kto jest zalogowany?" zmienia się linia - blok podpisów jest wszędzie identyczny. Podpisz na serwerze, nigdy w JavaScript.

WordPress · WHMCS· Symfony · plain PHP - zamień wygląd, zachowaj signer
<?php
/* The ONE helper every platform shares. Keep it verbatim. */
function opsiq_identity_token(array $admin, string $siteKey, string $secret, string $platform): string {
    $payload = json_encode([
        "site_key"      => $siteKey,
        "iat"           => time(),
        "exp"           => time() + 6 * 3600,
        "authenticated" => true,          // TOP LEVEL — OpsIQ refuses the token without it
        "platform"      => $platform,
        "admin"         => $admin + ["authenticated" => true],
    ], JSON_UNESCAPED_SLASHES);
    $p64 = rtrim(strtr(base64_encode($payload), "+/", "-_"), "=");
    return $p64 . "." . hash_hmac("sha256", $p64, $secret);
}

/* ── WORDPRESS ─────────────────────────────────────────────────────────── */
require_once ABSPATH . "wp-load.php";
if (!current_user_can("manage_options")) { /* not an admin → refuse */ }
$u = wp_get_current_user();
$admin = ["id" => (string)$u->ID, "name" => $u->display_name,
          "username" => $u->user_login, "email" => $u->user_email,
          "role" => implode(",", $u->roles)];

/* ── WHMCS (inside an addon/hook, admin area) ──────────────────────────── */
$aid = (int)($_SESSION["adminid"] ?? 0);
if ($aid <= 0) { /* not an admin → refuse */ }
$row = Capsule::table("tbladmins")->where("id", $aid)->first();
$admin = ["id" => (string)$row->id, "name" => trim($row->firstname . " " . $row->lastname),
          "username" => $row->username, "email" => $row->email, "role" => "administrator"];

/* ── SYMFONY ───────────────────────────────────────────────────────────── */
$u = $security->getUser();                    // Symfony\Bundle\SecurityBundle\Security
if (!$u) { /* not an admin → refuse */ }
$admin = ["id" => (string)$u->getId(), "name" => $u->getName(),
          "username" => $u->getUserIdentifier(), "email" => $u->getEmail(),
          "role" => implode(",", $u->getRoles())];

/* ── PLAIN PHP / your own app ──────────────────────────────────────────── */
session_start();
if (empty($_SESSION["admin_id"])) { /* not an admin → refuse */ }
$admin = ["id" => (string)$_SESSION["admin_id"], "name" => $_SESSION["admin_name"] ?? "",
          "username" => $_SESSION["admin_username"] ?? "", "email" => $_SESSION["admin_email"] ?? "",
          "role" => $_SESSION["admin_role"] ?? ""];

/* ── then, on EVERY stack ──────────────────────────────────────────────── */
$token = opsiq_identity_token($admin, "SITE_KEY", "opsiq_whsec_your_site_secret", "wordpress");
echo json_encode(["success" => true, "authenticated" => true,
                  "admin" => $admin, "identity_token" => $token]);

Kiedy nie działa - zdiagnozuj w tej kolejności

Widget nigdy się nie pojawia, konsola mówi "wymagany jest podpisany symbol tożsamości administratora"

Po podaniu leku u pacjenta wystąpił powrót punktu końcowego. identity_token. Otwórz punkt końcowy URL bezpośrednio w blocked- w przeglądarce admin z &debug=1 - zobaczysz niepowodzenie. Na Laravel jest to prawie zawsze element wiążący wniosek lub cookie- prefix powyżej.

Historia i rozmowy działają, ale każdy czat mówi "Wymagany administracyjny login"

Twój żeton nie ma TOP- LEVEL authenticated flaga - punkt końcowy widget akceptuje token, wspólny weryfikator za strumieniem czatu odmawia. Dodaj "authenticated" => true beside exp.

"admin nie jest w OpsIQ" (HTTP 401)

Token zweryfikowany, ale jego nazwa użytkownika + e-mail pasuje nie OpsIQ Agent. Dodaj agenta OpsIQ → Team, lub dodać email platformy do listy match- e-mail tego agenta, gdy różni się od ich OpsIQ e-mail.

Wszystko 403s z przeglądarki, ale działa z curl

Przelot CORS odrzuca jeden z nagłówków. Twój punkt końcowy musi odpowiedzieć OPTIONS i echo wnioskujące pochodzenie, lub po prostu uniknąć niestandardowych nagłówków - widget potrzebuje tylko ciasteczko.

Wczoraj pracowałem, dziś nie.

Sprawdź exp: żetony są krótkotrwałe według projektu. Widget re- sondy automatycznie, więc zazwyczaj oznacza to, że punkt końcowy przestał widzieć sesję - rotacja klucza aplikacji, zmiana sterownika sesyjnego lub zmiany domeny cookie.

💡
Admin widget sprawia, że jest ukryty aż tożsamość rozwiązuje, i każdy czat / inbox / wywołanie danych jest egzekwowane server- strona przeciwko dopasowanyOpsIQagent niezależnie od czegokolwiek, co strona twierdzi. Symbol odblokowuje interfejs; uprawnienia zawsze pochodzą zOpsIQ.
Programista

Tożsamość osoby odwiedzającej

Tożsamość łączy anonimowych odwiedzających ze znanymi klientami. Po zidentyfikowaniu, OpsIQ łączy historię przeglądania, czaty i bilety do profilu klienta.

Jak to działa?
Tożsamość osoby odwiedzającejPrzepływ: użytkownik loguje się na swojej stronie, wydajesz podpisany znak tożsamości, a OpsIQ jednoczy ich sesje, czaty i bilety w jeden profil.Loguje się użytkownikna swojej stronie internetowejPodpisany tokenidentity_token (HMAC)Jeden profilsessions+ czaty+ bilety
Tożsamość osoby odwiedzającej

Dwa poziomy tożsamości, a kiedy każdy jest wystarczający

Poziom 1 - niepodpisane podpowiedź

Powiedz widżetowi, kto jest gościem z równiną.JavaScriptobiekt. Wypełnia identyfikator e-mail i klienta w dzienniku odwiedzających, więc tablica rozdzielcza pokazuje signed- w ruchu i sesje połączyć się. Jest to HINT: każdy może go edytować w swojej przeglądarce, takOpsIQNigdy nie wydaje danych o sile tego konta.

Poziom 2 - podpisany symbol tożsamości

Twój serwer podpisuje krótki-żył żeton z hakiem webhook tajemnicy. OpsIQ weryfikuje podpis i dopiero wtedy traktuje osobę jako sprawdzonego klienta. Jest to poziom, który odblokowuje odpowiedzi konta w czacie klienta i przeszukiwania złącza. Użyj go do wszystkiego, czego obcy nie może zobaczyć.

⚠️
Poziom1jest wygodą wyświetlania. Poziom2jest uwierzytelnianiem. Jeśli pytanie może być tylko odpowiedzi dla prawdziwego posiadacza konta, potrzebujesz poziomu2.
💡
Nie musisz pisać poziomu 2 ręcznie: strony zdalne → Twoja strona → Kody → C. Signed- in klientów generuje kod podpisu i obsługi odświeżania PHP, WordPressLaravel, Node.js, Python, Django, .NET, Rails, Java i Go WHMCS hak i Botble most złącza już podpisać klientów. Tożsamość mówi, kim jest klient; ich zamówienia lub rezerwacje dotrzeć do czatu przez złącze (z pliku mostu tylko wtedy, gdy platforma nie ma API).

Poziom 1 - niepodpisane podpowiedź

Ustaw obiekt PRZED skryptem widget lub zadzwoń ID () później, gdy aplikacja dowie się, kto jest zalogowany. Obie formularze są odczytywane; użyj tej samej strony, która pasuje do Twojej strony.

JavaScript · dwie obsługiwane formularze
<!-- Form A: set the global before the loader -->
<script>
  window.OpsIQClient = {
    id:    "cust_1001",
    email: "[email protected]",
    name:  "Jane Smith",
    plan:  "pro"
  };
</script>
<script async src="https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY"></script>

<!-- Form B: identify later, e.g. after a client-side login -->
<script>
  window.opsiq.identify({
    id:    "cust_1001",
    email: "[email protected]",
    name:  "Jane Smith",
    plan:  "pro"
  });
</script>
⚠️
Only these forms are read: the window.OpsIQClient global, window.opsiqConfig.user, and window.opsiq.identify(). There is no OpsIQ.push(['identify', ...]) queue and no OpsIQClientSignature global — if you find either in an old note, it does nothing.

Poziom 2 - symbol tożsamości podpisana serwerem

Dokładnie ten sam token umowy co widget admin, z customer obiekt zamiast admin 1. Podpisz na serwerze i podaj do widżetu. Dwa szczegóły decydują, czy to weryfikuje, a oba są łatwe do pomylenia:

W HMAC obejmuje ciąg BASE64URL, a nieJSON

Podpisz $payload64, nie $payload. Podpisanie surowego JSON produkuje żeton, który wygląda dobrze i jest odrzucany za każdym razem z niedopasowanie podpisu.

Base64url, niepakowany

Przetłumacz +/ do -_ i rozbierać = pasowanie. Plain base64 zdarza się przetrwać dzisiaj; base64url jest umową i to, co każdy weryfikator OpsIQ i referencyjne emisje złącza.

uwierzytelnione idzie na poziomie TOP

Obok site_key, iat oraz expTo twoje twierdzenie, że prawdziwy człowiek jest zalogowany, a OpsIQ odmawia symbolu bez niego.

customer. id jest obowiązkowy

Token, który nosi tylko e-mail weryfikuje jako podpis i jest następnie cicho upuszczony. Zawsze wysyłaj ID.

Trzymaj exp krótki

To jest twierdzenie sesji, a nie dowód na przechowywanie.

PHP - podpisanie symbolu tożsamości klienta (ten dokładny kod weryfikuje)
<?php
/* Server-signed customer identity. Runnable as-is: set the two constants. */
$siteKey = "YOUR_SITE_KEY";                        // Remote Sites -> Codes
$secret  = "opsiq_whsec_your_site_secret";         // Remote Sites -> Codes

$payload = json_encode([
    "site_key"      => $siteKey,
    "iat"           => time(),
    "exp"           => time() + 3600,
    "authenticated" => true,                       // TOP LEVEL - required
    "platform"      => "your-platform",
    "customer"      => [
        "id"            => (string)$user->id,      // REQUIRED
        "email"         => (string)$user->email,   // REQUIRED
        "name"          => (string)$user->name,
        "plan"          => (string)($user->plan ?? ""),
        "authenticated" => true,
    ],
], JSON_UNESCAPED_SLASHES);

/* base64url(payload) . "." . hex HMAC-SHA256 OF THAT STRING. */
$payload64 = rtrim(strtr(base64_encode($payload), "+/", "-_"), "=");
$token     = $payload64 . "." . hash_hmac("sha256", $payload64, $secret);

/* Hand it to the widget either way: */
printf(
    '<script async src="https://YOUR-OPSIQ/widget.php?site_key=%s&identity_token=%s"></script>',
    rawurlencode($siteKey),
    rawurlencode($token)
);
// or, if the loader is already on the page:
// echo '<script>window.opsiqConfig = window.opsiqConfig || {}; '
//    . 'window.opsiqConfig.identityToken = ' . json_encode($token) . ';</script>';
🚫
Zaloguj się tylko na serwerze. Token wybity w przeglądarce JavaScript oznacza wysyłanie tajemnicy witryny do każdego gościa, który daje każdemu możliwość podszywania się pod klienta.

Ten sam kontrakt, trzy powierzchnie

Czat z klientem na swojej stronie

Obiekt klienta, przeszedł jako identity_token do widget. php. Objęty powyżej. Opcjonalnie: z zatrzaskiem A i złączem czat już weryfikuje klientów (rezerwacja lub numer zamówienia z dowodem, lub kod e-mail przed zamówieniem). Zdalne strony, kody, C generuje kod automatycznego rozpoznawania klientów już zalogowanych na swojej stronie.

Admin czat wewnątrz swojego backend

admin subject, passed to opsiq/ osadzone /admin_widget.php. Ten sam sygnalizator, inny klucz tematyczny. Zobacz "Admin widget w twoim tle".

Obsługa portalu głębokich linków

Bardziej rygorystyczny wariant: te same roszczenia plus jti i single_use:True i 120-drugie życie, ponieważ symbolik podróżuje w URL i musi być wydatkowane raz. Nie rolować go ręcznie. Ustawienia, Portal Wsparcia ma gotowy fragment dla Twojego języka, a platforma mentuje go dla Ciebie, gdy obszar konta działa na tym serwerze.

A jeśli gość oczyści ciasteczka?+

Stają się anonimowe, dopóki nie zostaną zidentyfikowane ponownie. OpsIQ łączy nowy anonimowy rekord z profilem klienta w momencie gdy pojawi się podpowiedź lub token.

Dlaczego mój token sprawdza dziennik gości, ale nie na pytania konta?+

To jest poziom1/ Poziom2podzielony. Niepodpisane podpowiedź wypełnia dziennik odwiedzających i nic więcej. Odpowiedzi na konto potrzebują zweryfikowanego podpisu.

Programista

Zapisy na portalu: kod dla każdej platformy

Wyślij klienta, który jest już zalogowany do aplikacji bezpośrednio do portalu wsparcia, zalogowany, bez drugiego hasła. Ta strona wyjaśnia jak działa przekazanie, każde roszczenie w tokenie, konfiguracja i kompletna trasa dla każdej platformy. Ustawienia, Wsparcie Portal drukuje ten sam kod z własnym adresem portalu i klucz roboczy wypełniony.

Jak to działa?

1
Klient kliknie Wsparcie w aplikacji

Link wskazuje na małą trasę na serwerze, na przykład /support-portal. Nigdy nie znajduje się w odnośniku, który zawiera już żeton: token w stronie przecieka przez źródło strony, historię przeglądarki i nagłówka Referer.

2
Kontrola trasy, która jest zarejestrowana

Odczytuje klienta z własnej sesji. Odwiedzający, który nie jest zalogowany jest wysyłany do logowania się najpierw i wraca na trasę później.

3
Trasa oznacza jednokrotny symbol

Standardowy dokument HS256 JWT podpisany z tym sekretem podpisania przestrzeni roboczej, który posiada tylko twój serwer. Wygasa po sekundach 120 i może być użyty raz.

4
Trasa przekierowuje się do portalu

Na stronie portalu klient przyszedł z kiedy portal poprosił o jeden (opsiq_portal_return, akceptowane tylko w obrębie adresu portalu), w przeciwnym razie do domu portalu. Odpowiedź nosi Referrer- Polityka: nie-referrer i Cache- Control: nie -sklep.

5
Portal weryfikuje i podpisuje klienta w

Sprawdzone są podpis, klucz do pracy, data ważności i identyfikator czasu. Klient jest odnaleziony lub utworzony przez e-mail, a jego istniejące żądania są dopasowane do nich.

W przedmiocie symbolu, roszczenia w formie roszczenia

site_key

Twój klucz do miejsca pracy. Nie jest on używany nawet wtedy, gdy jest poprawnie podpisany.

iat / exp

Wydany w czasie i wygaśnięcia, w sekundach. Portal token żyje 120 sekund: musi przetrwać tylko jeden przekierowanie.

uwierzytelnione: prawdziwe

Oświadczenie twojej aplikacji, że naprawdę podpisała się ta osoba. Wymagane, na najwyższym poziomie.

jti + single_use: prawda

Losowy identyfikator i jednokrotna flaga. Ten sam link nie może być użyty dwukrotnie.

platforma

Darmowa etykieta dla miejsca, z którego pochodzi klient (php, wordpress, whmcs...). Pokazane w profilu klienta.

customer. id i customier. mail

Zarówno wymagane. Identyfikator jest własnym identyfikatorem klienta aplikacji; e-mail jest sposób, w jaki portal znajduje klienta i odpowiada ich żądaniom.

customer. name / external_id

Opcjonalna nazwa wyświetlacza i id OpsIQ przechowuje na swojej platformie.

Ustawienia

1
Kopiuj trasę

Ustawienia, Portal Wsparcia, Bezszwowe logowanie z aplikacji. Wybierz co aplikacja działa na; kod poniżej listy zawiera adres portalu i klucz roboczy wypełniony, z numerowanymi nutami dla tej platformy.

2
Sekret jest już w kodzie.

Skopiowana trasa zawiera sekretny podpis tego miejsca pracy, więc działa jako wklejona. Aby utrzymać go z dala od pliku, ustawić OPSIQ_SITE_SECRET (lub ustawienia ram) na serwerze zamiast: ta wartość jest używana jako pierwsza. Nigdy nie umieszczaj trasy na stronie, JavaScript, aplikacja mobilna lub repozytorium publiczne: każdy, kto posiada tajemnicę może się zalogować jako każdy klient.

3
Połącz przycisk Wsparcie z trasą

Na przykład https://your-app.com/support-portal.

4
Zaloguj się do portalu za pomocą aplikacji

Portal Studio, Sign- w stronie, Korzystanie z mojej strony logowania, Twoja strona logowania URL: ustawić go na tej samej trasie. Portal dodaje opsiq_portal_return sama i trasa sprowadza klienta z powrotem do tej strony, wpisane.

5
Opcjonalnie: wypisz się wszędzie

Ustawienia, Portal Wsparcia, Zaloguj się wszędzie: URL z aplikacji, więc podpisywanie się z portalu również podpisuje klienta z aplikacji.

6
Badanie

Generuj podpisany link testowy na tej samej stronie ustawień, aby sprawdzić stronę portalu samodzielnie, a następnie otwórz swoją trasę podczas podpisywania się do aplikacji.

WHMCS nie potrzebuje kodu: WHMCS haczyk z Remote Sites już podpisuje klientów do portalu i przynosi je z powrotem do strony, na której byli.
💡
Tajemnica podpisania jest dla ciebie wypełniona. W ustawieniach, Portal Wsparcia, Bezszwowe logowanie z aplikacji, każdy przykład zawiera już własny sekret tej strony, więc kod działa jak wklejony: nie ma nic do skopiowania lub konfiguracji. Przykłady na tej stronie show opsiq_whsec_YOUR_SITE_SECRET na jego miejsce. Każdy przykład szuka OPSIQ_SITE_SECRET (lub własne ustawienie framework, nazwane w swoich notatkach) na serwerze najpierw i używa go, gdy jest ustawiony, więc można przenieść sekret z pliku kiedy tylko chcesz, na przykład obrócić go bez edytowania kodu. Tak czy inaczej plik działa tylko na swoim serwerze: nigdy nie wklej go do strony internetowej lub przeglądarki JavaScripti nigdy nie zobowiązuj się do publicznego repozytorium, ponieważ każdy, kto posiada tajemnicę może zalogować się jako jeden z twoich klientów lub pracowników. WHMCS oraz Botble nie potrzebuje niczego z tego: WHMCS hak przybywa z sekretem wypełnionym, i Botble Panel łączników wypełnia go do mostu.

Kompletne trasy, platforma po platformie

OpsIQ server (self-hosted)

1

For a self-hosted OpsIQ: the route runs on your own OpsIQ server, so there is no secret to copy. OpsIQ reads this workspace's signing secret itself.

2

Save it as a page on that server, e.g. support-portal.php, and point your "Support" link at it.

3

Replace the body of $currentUser so it returns your signed-in customer (id, email, name), or null for a guest, and /login with your login page.

OpsIQ server (self-hosted)
/* OpsIQ server (self-hosted) — save as e.g. support-portal.php on your OpsIQ
 * server and link your "Support" button to it. OpsIQ reads the workspace's
 * signing secret itself, so there is nothing secret to copy. */

if (!function_exists('opsiq_portal_signed_url_for_site')) {
    require_once '/path/to/opsiq/opsiq/opsiq.portal_identity.php';
}

// 1. WHO IS SIGNED IN — replace the body. Return null for a guest.
$currentUser = static function (): ?array {
    $u = $_SESSION['user'] ?? null;
    return is_array($u) && !empty($u['id']) && !empty($u['email']) ? $u : null;
};
$user = $currentUser();
if (!$user) {
    header('Location: /login?return=' . urlencode($_SERVER['REQUEST_URI'] ?? '/'), true, 302);
    exit;
}

// 2. WHERE TO LAND — the portal page they came from, only if it is on the portal.
$portal = 'https://YOUR-OPSIQ/portal/your-workspace';
$back   = preg_replace('/#.*$/', '', (string)($_GET['opsiq_portal_return'] ?? ''));
$target = ($back === $portal || strpos($back, $portal . '/') === 0 || strpos($back, $portal . '?') === 0)
    ? $back : $portal;

// 3. MINT a one-time link (120 s) for this workspace.
$url = opsiq_portal_signed_url_for_site($target, 'YOUR_SITE_KEY', [
    'id'    => $user['id'],        // REQUIRED
    'email' => $user['email'],     // REQUIRED
    'name'  => $user['name'] ?? '',
], 120);
if (!$url) {
    http_response_code(503);       // fail closed: never send a customer to a guessed address
    exit('Support portal is not configured yet.');
}

header('Referrer-Policy: no-referrer');   // the token is in the URL
header('Cache-Control: no-store');
header('Location: ' . $url, true, 302);
exit;

PHP (no dependencies)

1

Save the snippet as a page in your app, e.g. support-portal.php.

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment (hosting panel, .env or SetEnv) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Replace the body of $currentUser with your app's signed-in customer, and /login with your login page.

PHP (no dependencies)
/* support-portal.php — a redirect route in your own app.
 * Mint at CLICK time: a token baked into an href leaks through page source,
 * browser history and the Referer header. */

// 1. WHO IS SIGNED IN — replace the body with your app's own session. Return null for a guest.
$currentUser = static function (): ?array {
    $u = $_SESSION['user'] ?? null;            // e.g. ['id' => 7, 'email' => '…', 'name' => '…']
    return is_array($u) && !empty($u['id']) && !empty($u['email']) ? $u : null;
};
$user = $currentUser();
if (!$user) {                                  // a guest: sign in first, then come back here
    header('Location: /login?return=' . urlencode($_SERVER['REQUEST_URI'] ?? '/'), true, 302);
    exit;
}

// 2. THE SECRET — server-side only. Fail closed without it.
$secret = (string) (getenv('OPSIQ_SITE_SECRET') ?: 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; the environment wins when set
if ($secret === '') { http_response_code(503); exit('Support portal is not configured.'); }

// 3. WHERE TO LAND — the portal page they came from, only if it is on the portal.
$portal = 'https://YOUR-OPSIQ/portal/your-workspace';
$back   = preg_replace('/#.*$/', '', (string)($_GET['opsiq_portal_return'] ?? ''));
$target = ($back === $portal || strpos($back, $portal . '/') === 0 || strpos($back, $portal . '?') === 0)
    ? $back : $portal;

// 4. MINT the token (standard HS256 JWT).
$b64 = static function ($v) {
    return rtrim(strtr(base64_encode(json_encode($v, JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
};
$now = time();
$signing = $b64(['alg' => 'HS256', 'typ' => 'JWT']) . '.' . $b64([
    'site_key'      => 'YOUR_SITE_KEY',
    'iat'           => $now,
    'exp'           => $now + 120,                // URL-borne tokens live ~2 minutes
    'authenticated' => true,
    'jti'           => bin2hex(random_bytes(16)),
    'single_use'    => true,                      // one-time link; replay is refused
    'platform'      => 'php',
    'customer'      => [
        'id'          => $user['id'],             // REQUIRED
        'email'       => $user['email'],          // REQUIRED
        'name'        => $user['name'] ?? '',
        'external_id' => (string) $user['id'],
    ],
]);
$token = $signing . '.' . rtrim(strtr(base64_encode(hash_hmac('sha256', $signing, $secret, true)), '+/', '-_'), '=');

// 5. GO. The default is https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
$url = $target . (strpos($target, '?') === false ? '?' : '&')
     . 'site_key=' . rawurlencode('YOUR_SITE_KEY') . '&identity_token=' . rawurlencode($token);
header('Referrer-Policy: no-referrer');       // the token is in the URL
header('Cache-Control: no-store');
header('Location: ' . $url, true, 302);
exit;

Laravel

1

Run: composer require firebase/php-jwt

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET=… in .env with 'opsiq' => ['site_secret' => env('OPSIQ_SITE_SECRET')] in config/services.php on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Paste the route into routes/web.php. The auth middleware sends guests to your login and back.

Laravel
/* routes/web.php — composer require firebase/php-jwt
 * Link customers to  route('support.portal') */

Route::get('/support-portal', function (\Illuminate\Http\Request $request) {
    $user   = $request->user();                                   // guaranteed by ->middleware('auth')
    $secret = (string) (config('services.opsiq.site_secret') ?: 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; config wins when set
    abort_if($secret === '', 503, 'Support portal is not configured.');   // fail closed

    // Where to land: the portal page they came from, only if it is on the portal.
    $portal = 'https://YOUR-OPSIQ/portal/your-workspace';
    $back   = preg_replace('/#.*$/', '', (string) $request->query('opsiq_portal_return', ''));
    $target = ($back === $portal || str_starts_with($back, $portal . '/') || str_starts_with($back, $portal . '?'))
        ? $back : $portal;

    $now   = time();
    $token = \Firebase\JWT\JWT::encode([
        'site_key'      => 'YOUR_SITE_KEY',
        'iat'           => $now,
        'exp'           => $now + 120,
        'authenticated' => true,
        'jti'           => bin2hex(random_bytes(16)),
        'single_use'    => true,
        'platform'      => 'laravel',
        'customer'      => [
            'id'          => $user->id,          // REQUIRED
            'email'       => $user->email,       // REQUIRED
            'name'        => $user->name,
            'external_id' => (string) $user->id,
        ],
    ], $secret, 'HS256');

    // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    $url = $target . (str_contains($target, '?') ? '&' : '?')
         . 'site_key=' . rawurlencode('YOUR_SITE_KEY') . '&identity_token=' . rawurlencode($token);

    return redirect()->away($url)
        ->header('Referrer-Policy', 'no-referrer')
        ->header('Cache-Control', 'no-store');
})->middleware('auth')->name('support.portal');

WordPress

1

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, add define('OPSIQ_SITE_SECRET', '…'); to wp-config.php, above "That's all, stop editing", instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Paste the snippet into your theme's functions.php, or a small plugin (Code Snippets works).

3

Create an empty page with the slug support-portal and link your "Support" menu item to it. Guests are sent to wp-login and back.

WordPress
/* functions.php, or a small plugin. Create an empty page with the slug
 * "support-portal" and link customers to it. */

add_action('template_redirect', function () {
    if (!is_page('support-portal')) return;
    if (!is_user_logged_in()) { auth_redirect(); }                 // login, then back here

    $secret = defined('OPSIQ_SITE_SECRET') ? OPSIQ_SITE_SECRET : 'opsiq_whsec_YOUR_SITE_SECRET';   // this site's secret; wp-config.php wins when set
    if ($secret === '') wp_die('Support portal is not configured.', '', ['response' => 503]);   // fail closed

    // Where to land: the portal page they came from, only if it is on the portal.
    $portal = 'https://YOUR-OPSIQ/portal/your-workspace';
    $back   = preg_replace('/#.*$/', '', isset($_GET['opsiq_portal_return']) ? wp_unslash((string) $_GET['opsiq_portal_return']) : '');
    $target = ($back === $portal || strpos($back, $portal . '/') === 0 || strpos($back, $portal . '?') === 0)
        ? $back : $portal;

    $user = wp_get_current_user();
    $b64  = static function ($v) {
        return rtrim(strtr(base64_encode(wp_json_encode($v)), '+/', '-_'), '=');
    };
    $now     = time();
    $signing = $b64(['alg' => 'HS256', 'typ' => 'JWT']) . '.' . $b64([
        'site_key'      => 'YOUR_SITE_KEY',
        'iat'           => $now,
        'exp'           => $now + 120,
        'authenticated' => true,
        'jti'           => bin2hex(random_bytes(16)),
        'single_use'    => true,
        'platform'      => 'wordpress',
        'customer'      => [
            'id'          => $user->ID,              // REQUIRED
            'email'       => $user->user_email,      // REQUIRED
            'name'        => $user->display_name,
            'external_id' => (string) $user->ID,
        ],
    ]);
    $token = $signing . '.' . rtrim(strtr(base64_encode(hash_hmac('sha256', $signing, $secret, true)), '+/', '-_'), '=');

    // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    $url = $target . (strpos($target, '?') === false ? '?' : '&')
         . 'site_key=' . rawurlencode('YOUR_SITE_KEY') . '&identity_token=' . rawurlencode($token);
    nocache_headers();
    header('Cache-Control: no-store');
    header('Referrer-Policy: no-referrer');
    wp_redirect($url, 302);                                       // wp_redirect, not wp_safe_redirect: the portal is another host
    exit;
});

WHMCS

Already using the OpsIQ WHMCS hook from Sites (includes/hooks/opsiq_tracker.php)? It already signs your customers into the portal and brings them back to the page they were on, so you do not need this snippet. Just set Portal Studio → Sign-in page → Your login page URL to your WHMCS client area login. Use the code below only if you are not installing that hook.
1

Save part 1 as opsiq_support.php in your WHMCS root (next to clientarea.php).

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the hook, set $opsiq_site_secret = '…'; in configuration.php instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Save part 2 as includes/hooks/opsiq_support_link.php to add Support to the client-area menu.

WHMCS
/* Two files you own — no OpsIQ module, nothing to keep updated.
 *
 * 1) Save this part as  opsiq_support.php  in your WHMCS root. */

require __DIR__ . '/init.php';

$ca = new WHMCS\ClientArea();
$ca->initPage();
$ca->requireLogin();                                         // login, then back here

$secret = '';
if (is_file(__DIR__ . '/configuration.php')) {
    include __DIR__ . '/configuration.php';                  // defines $opsiq_site_secret
    $secret = isset($opsiq_site_secret) ? (string) $opsiq_site_secret : 'opsiq_whsec_YOUR_SITE_SECRET';   // this site's secret; configuration.php wins when set
}
if ($secret === '') { http_response_code(503); exit('Support portal is not configured.'); }   // fail closed

// Where to land: the portal page they came from, only if it is on the portal.
$portal = 'https://YOUR-OPSIQ/portal/your-workspace';
$back   = preg_replace('/#.*$/', '', (string)($_GET['opsiq_portal_return'] ?? ''));
$target = ($back === $portal || strpos($back, $portal . '/') === 0 || strpos($back, $portal . '?') === 0)
    ? $back : $portal;

$uid    = (int) $ca->getUserID();
$client = localAPI('GetClientsDetails', ['clientid' => $uid]);

$b64 = static function ($v) {
    return rtrim(strtr(base64_encode(json_encode($v, JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
};
$now     = time();
$signing = $b64(['alg' => 'HS256', 'typ' => 'JWT']) . '.' . $b64([
    'site_key'      => 'YOUR_SITE_KEY',
    'iat'           => $now,
    'exp'           => $now + 120,
    'authenticated' => true,
    'jti'           => bin2hex(random_bytes(16)),
    'single_use'    => true,
    'platform'      => 'whmcs',
    'customer'      => [
        'id'          => $uid,                       // REQUIRED
        'email'       => $client['email'] ?? '',     // REQUIRED
        'name'        => trim(($client['firstname'] ?? '') . ' ' . ($client['lastname'] ?? '')),
        'external_id' => (string) $uid,
    ],
]);
$token = $signing . '.' . rtrim(strtr(base64_encode(hash_hmac('sha256', $signing, $secret, true)), '+/', '-_'), '=');

// Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
$url = $target . (strpos($target, '?') === false ? '?' : '&')
     . 'site_key=' . rawurlencode('YOUR_SITE_KEY') . '&identity_token=' . rawurlencode($token);
header('Referrer-Policy: no-referrer');
header('Cache-Control: no-store');
header('Location: ' . $url, true, 302);
exit;

/* 2) And this part as  includes/hooks/opsiq_support_link.php  to put a
 *    Support entry in the client-area navbar:
 *
 *    add_hook('ClientAreaPrimaryNavbar', 1, function ($navbar) {
 *        $navbar->addChild('opsiqSupport', [
 *            'label' => 'Support',
 *            'uri'   => 'opsiq_support.php',
 *            'order' => 60,
 *        ]);
 *    });
 */

Node.js / Express

1

Run: npm i jsonwebtoken

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment (.env with dotenv, or your host's settings) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Paste the route after your session / passport setup. Change /login if your login page lives elsewhere.

Node.js / Express
// npm i jsonwebtoken
const jwt = require("jsonwebtoken");
const crypto = require("crypto");

const PORTAL = "https://YOUR-OPSIQ/portal/your-workspace";
const onPortal = (u) => u === PORTAL || u.startsWith(PORTAL + "/") || u.startsWith(PORTAL + "?");

app.get("/support-portal", (req, res) => {
  const user = req.user;                                  // set by your session / passport
  if (!user) return res.redirect("/login?next=" + encodeURIComponent(req.originalUrl));

  const secret = process.env.OPSIQ_SITE_SECRET || "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; the environment wins when set
  if (!secret) return res.status(503).send("Support portal is not configured.");   // fail closed

  // Where to land: the portal page they came from, only if it is on the portal.
  const back = String(req.query.opsiq_portal_return || "").replace(/#.*$/, "");
  const target = onPortal(back) ? back : PORTAL;

  const token = jwt.sign({
    site_key: "YOUR_SITE_KEY",
    authenticated: true,
    jti: crypto.randomBytes(16).toString("hex"),
    single_use: true,                                     // one-time link
    platform: "node",
    customer: {
      id: user.id,                                        // REQUIRED
      email: user.email,                                  // REQUIRED
      name: user.name,
      external_id: String(user.id),
    },
  }, secret, { algorithm: "HS256", expiresIn: 120 });     // sets iat + exp

  // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
  const url = target + (target.includes("?") ? "&" : "?")
    + "site_key=" + encodeURIComponent("YOUR_SITE_KEY") + "&identity_token=" + encodeURIComponent(token);
  res.set("Referrer-Policy", "no-referrer").set("Cache-Control", "no-store").redirect(302, url);
});

Node.js (no dependencies)

1

No packages needed. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Replace currentUser() with your app's signed-in customer, then call supportPortal(req, res) for GET /support-portal in your server.

Node.js (no dependencies)
// No packages needed — Node's own crypto is enough.
const crypto = require("crypto");

const PORTAL = "https://YOUR-OPSIQ/portal/your-workspace";
const b64 = (obj) => Buffer.from(JSON.stringify(obj)).toString("base64url");

// 1. WHO IS SIGNED IN — replace with your app's session lookup. Return null for a guest.
function currentUser(req) {
  return req.user || null;                                // { id, email, name }
}

// GET /support-portal
function supportPortal(req, res) {
  const here = new URL(req.url, "http://local");
  const user = currentUser(req);
  if (!user) {                                            // a guest: sign in first, then come back
    res.writeHead(302, { Location: "/login?next=" + encodeURIComponent(req.url) });
    return res.end();
  }
  const secret = process.env.OPSIQ_SITE_SECRET || "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; the environment wins when set
  if (!secret) { res.writeHead(503); return res.end("Support portal is not configured."); }

  // Where to land: the portal page they came from, only if it is on the portal.
  const back = (here.searchParams.get("opsiq_portal_return") || "").replace(/#.*$/, "");
  const target = (back === PORTAL || back.startsWith(PORTAL + "/") || back.startsWith(PORTAL + "?")) ? back : PORTAL;

  const now = Math.floor(Date.now() / 1000);
  const signing = b64({ alg: "HS256", typ: "JWT" }) + "." + b64({
    site_key: "YOUR_SITE_KEY",
    iat: now,
    exp: now + 120,
    authenticated: true,
    jti: crypto.randomBytes(16).toString("hex"),
    single_use: true,
    platform: "node",
    customer: { id: user.id, email: user.email, name: user.name, external_id: String(user.id) },
  });
  const token = signing + "." + crypto.createHmac("sha256", secret).update(signing).digest("base64url");

  // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
  const url = target + (target.includes("?") ? "&" : "?")
    + "site_key=" + encodeURIComponent("YOUR_SITE_KEY") + "&identity_token=" + encodeURIComponent(token);
  res.writeHead(302, { Location: url, "Referrer-Policy": "no-referrer", "Cache-Control": "no-store" });
  res.end();
}

Python (Flask / FastAPI)

1

Run: pip install pyjwt (the Flask example also uses flask-login).

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Paste into the module that creates your app. @login_required sends guests to your login view and back.

Python (Flask / FastAPI)
# pip install pyjwt flask-login
import os, secrets, time, urllib.parse
import jwt
from flask import request, redirect, abort
from flask_login import login_required, current_user

PORTAL = "https://YOUR-OPSIQ/portal/your-workspace"

def portal_link(user, back=""):
    secret = os.environ.get("OPSIQ_SITE_SECRET") or "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; the environment wins when set
    if not secret:
        abort(503, "Support portal is not configured.")     # fail closed
    back = back.split("#", 1)[0]
    target = back if (back == PORTAL or back.startswith(PORTAL + "/") or back.startswith(PORTAL + "?")) else PORTAL
    now = int(time.time())
    token = jwt.encode({
        "site_key": "YOUR_SITE_KEY",
        "iat": now,
        "exp": now + 120,                                   # URL-borne: ~2 minutes
        "authenticated": True,
        "jti": secrets.token_hex(16),
        "single_use": True,                                 # one-time link
        "platform": "python",
        "customer": {
            "id": user.id,                                  # REQUIRED
            "email": user.email,                            # REQUIRED
            "name": getattr(user, "name", ""),
            "external_id": str(user.id),
        },
    }, secret, algorithm="HS256")
    # Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    return (target + ("&" if "?" in target else "?")
            + "site_key=" + urllib.parse.quote("YOUR_SITE_KEY", safe="")
            + "&identity_token=" + urllib.parse.quote(token, safe=""))

@app.route("/support-portal")
@login_required
def support_portal():
    resp = redirect(portal_link(current_user, request.args.get("opsiq_portal_return", "")), code=302)
    resp.headers["Referrer-Policy"] = "no-referrer"
    resp.headers["Cache-Control"] = "no-store"
    return resp

Django

1

Run: pip install pyjwt

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in settings.py (for example os.environ["OPSIQ_SITE_SECRET"]) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Paste the view into views.py and add path("support-portal/", views.support_portal) to urls.py. @login_required sends guests to LOGIN_URL and back.

Django
# pip install pyjwt   —   urls.py: path("support-portal/", views.support_portal)
import secrets, time, urllib.parse
import jwt
from django.conf import settings
from django.contrib.auth.decorators import login_required
from django.http import HttpResponse, HttpResponseRedirect

PORTAL = "https://YOUR-OPSIQ/portal/your-workspace"

@login_required
def support_portal(request):
    secret = getattr(settings, "OPSIQ_SITE_SECRET", "") or "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; settings win when set
    if not secret:                                       # fail closed
        return HttpResponse("Support portal is not configured.", status=503)

    # Where to land: the portal page they came from, only if it is on the portal.
    back = request.GET.get("opsiq_portal_return", "").split("#", 1)[0]
    target = back if (back == PORTAL or back.startswith(PORTAL + "/") or back.startswith(PORTAL + "?")) else PORTAL

    now = int(time.time())
    token = jwt.encode({
        "site_key": "YOUR_SITE_KEY",
        "iat": now,
        "exp": now + 120,
        "authenticated": True,
        "jti": secrets.token_hex(16),
        "single_use": True,
        "platform": "django",
        "customer": {
            "id": request.user.pk,                        # REQUIRED
            "email": request.user.email,                  # REQUIRED
            "name": request.user.get_full_name(),
            "external_id": str(request.user.pk),
        },
    }, secret, algorithm="HS256")

    # Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    url = (target + ("&" if "?" in target else "?")
           + "site_key=" + urllib.parse.quote("YOUR_SITE_KEY", safe="")
           + "&identity_token=" + urllib.parse.quote(token, safe=""))
    resp = HttpResponseRedirect(url)
    resp["Referrer-Policy"] = "no-referrer"
    resp["Cache-Control"] = "no-store"
    return resp

.NET / C#

1

Run: dotnet add package System.IdentityModel.Tokens.Jwt

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OpsIQ:SiteSecret (user-secrets, the OpsIQ__SiteSecret environment variable or Key Vault) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Paste into Program.cs after app.UseAuthentication(). RequireAuthorization() sends guests to your login and back.

.NET / C#
// dotnet add package System.IdentityModel.Tokens.Jwt   —   Program.cs
using System.IdentityModel.Tokens.Jwt;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;

const string Portal = "https://YOUR-OPSIQ/portal/your-workspace";

app.MapGet("/support-portal", (HttpContext ctx, IConfiguration cfg) =>
{
    var secret = cfg["OpsIQ:SiteSecret"];
    if (string.IsNullOrEmpty(secret)) secret = "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; configuration wins when set
    if (string.IsNullOrEmpty(secret))                     // fail closed
        return Results.StatusCode(503);

    var id    = ctx.User.FindFirstValue(ClaimTypes.NameIdentifier) ?? "";   // REQUIRED
    var email = ctx.User.FindFirstValue(ClaimTypes.Email) ?? "";            // REQUIRED
    var name  = ctx.User.Identity?.Name ?? "";

    // Where to land: the portal page they came from, only if it is on the portal.
    var back = (ctx.Request.Query["opsiq_portal_return"].ToString()).Split('#')[0];
    var target = (back == Portal || back.StartsWith(Portal + "/") || back.StartsWith(Portal + "?")) ? back : Portal;

    var key   = new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret));
    var creds = new SigningCredentials(key, SecurityAlgorithms.HmacSha256);
    var now   = DateTimeOffset.UtcNow;
    var payload = new JwtPayload
    {
        { "site_key",      "YOUR_SITE_KEY" },
        { "iat",           now.ToUnixTimeSeconds() },
        { "exp",           now.AddSeconds(120).ToUnixTimeSeconds() },
        { "authenticated", true },
        { "jti",           Guid.NewGuid().ToString("N") },
        { "single_use",    true },
        { "platform",      "dotnet" },
        { "customer", new Dictionary<string, object>
            { { "id", id }, { "email", email }, { "name", name }, { "external_id", id } } },
    };
    var token = new JwtSecurityTokenHandler().WriteToken(new JwtSecurityToken(new JwtHeader(creds), payload));

    // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    var url = target + (target.Contains('?') ? "&" : "?")
        + "site_key=" + Uri.EscapeDataString("YOUR_SITE_KEY") + "&identity_token=" + Uri.EscapeDataString(token);
    ctx.Response.Headers["Referrer-Policy"] = "no-referrer";
    ctx.Response.Headers["Cache-Control"] = "no-store";
    return Results.Redirect(url);
}).RequireAuthorization();

Ruby on Rails

1

Add gem "jwt" to the Gemfile and run bundle install.

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment (or Rails credentials) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Save as app/controllers/support_controller.rb and add get "/support-portal", to: "support#portal" to routes.rb. Devise's authenticate_user! sends guests to login and back.

Ruby on Rails
# Gemfile: gem "jwt"   —   routes.rb: get "/support-portal", to: "support#portal"
require "jwt"
require "securerandom"
require "cgi"

class SupportController < ApplicationController
  before_action :authenticate_user!                      # login, then back here

  PORTAL = "https://YOUR-OPSIQ/portal/your-workspace"

  def portal
    secret = ENV["OPSIQ_SITE_SECRET"].presence || "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; the environment wins when set
    return head :service_unavailable if secret.blank?    # fail closed

    # Where to land: the portal page they came from, only if it is on the portal.
    back = params[:opsiq_portal_return].to_s.split("#").first.to_s
    target = (back == PORTAL || back.start_with?(PORTAL + "/", PORTAL + "?")) ? back : PORTAL

    now = Time.now.to_i
    token = JWT.encode({
      site_key:      "YOUR_SITE_KEY",
      iat:           now,
      exp:           now + 120,
      authenticated: true,
      jti:           SecureRandom.hex(16),
      single_use:    true,
      platform:      "rails",
      customer: {
        id:          current_user.id,                    # REQUIRED
        email:       current_user.email,                 # REQUIRED
        name:        current_user.try(:name).to_s,
        external_id: current_user.id.to_s
      }
    }, secret, "HS256")

    # Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    url = target + (target.include?("?") ? "&" : "?") +
          "site_key=#{CGI.escape("YOUR_SITE_KEY")}&identity_token=#{CGI.escape(token)}"
    response.headers["Referrer-Policy"] = "no-referrer"
    response.headers["Cache-Control"] = "no-store"
    redirect_to url, allow_other_host: true
  end
end

Java (Spring Boot)

1

Add io.jsonwebtoken:jjwt-api, jjwt-impl and jjwt-jackson (0.12+).

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set opsiq.site.secret in application.properties (for example from OPSIQ_SITE_SECRET) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Replace currentUser() with your user lookup. With Spring Security the route must be authenticated so guests go to login and back.

Java (Spring Boot)
// io.jsonwebtoken:jjwt-api / jjwt-impl / jjwt-jackson (0.12+)
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import jakarta.servlet.http.HttpServletResponse;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.Principal;
import java.time.Instant;
import java.util.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.http.HttpStatus;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import org.springframework.web.server.ResponseStatusException;
import org.springframework.web.servlet.view.RedirectView;

@Controller
public class SupportPortalController {
    private static final String PORTAL = "https://YOUR-OPSIQ/portal/your-workspace";

    @Value("${opsiq.site.secret:opsiq_whsec_YOUR_SITE_SECRET}")   // this site's secret; opsiq.site.secret wins when set
    private String secret;

    /** WHO IS SIGNED IN — replace with your own lookup: id, email, name. */
    private Map<String, Object> currentUser(Principal principal) {
        return Map.of("id", principal.getName(), "email", principal.getName(), "name", principal.getName());
    }

    @GetMapping("/support-portal")
    public RedirectView supportPortal(Principal principal, HttpServletResponse response,
                                      @RequestParam(name = "opsiq_portal_return", defaultValue = "") String back) {
        if (principal == null) return new RedirectView("/login");               // login, then back here
        if (secret.isEmpty()) throw new ResponseStatusException(HttpStatus.SERVICE_UNAVAILABLE);   // fail closed

        // Where to land: the portal page they came from, only if it is on the portal.
        back = back.split("#", 2)[0];
        String target = (back.equals(PORTAL) || back.startsWith(PORTAL + "/") || back.startsWith(PORTAL + "?")) ? back : PORTAL;

        Map<String, Object> user = currentUser(principal);
        Map<String, Object> customer = Map.of(
            "id",          user.get("id"),                 // REQUIRED
            "email",       user.get("email"),              // REQUIRED
            "name",        user.get("name"),
            "external_id", String.valueOf(user.get("id")));

        Instant now = Instant.now();
        String token = Jwts.builder()
            .claim("site_key", "YOUR_SITE_KEY")
            .claim("authenticated", true)
            .claim("single_use", true)                     // one-time link
            .claim("platform", "java")
            .claim("customer", customer)
            .id(UUID.randomUUID().toString())              // jti
            .issuedAt(Date.from(now))
            .expiration(Date.from(now.plusSeconds(120)))
            .signWith(Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8)), Jwts.SIG.HS256)
            .compact();

        // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
        String url = target + (target.contains("?") ? "&" : "?")
            + "site_key=" + URLEncoder.encode("YOUR_SITE_KEY", StandardCharsets.UTF_8)
            + "&identity_token=" + URLEncoder.encode(token, StandardCharsets.UTF_8);
        response.setHeader("Referrer-Policy", "no-referrer");
        response.setHeader("Cache-Control", "no-store");
        return new RedirectView(url);
    }
}

Go

1

Run: go get github.com/golang-jwt/jwt/v5

2

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

3

Replace currentUser() with your session lookup and register http.HandleFunc("/support-portal", supportPortal).

Go
// go get github.com/golang-jwt/jwt/v5
package main

import (
    "crypto/rand"
    "encoding/hex"
    "fmt"
    "net/http"
    "net/url"
    "os"
    "strings"
    "time"

    "github.com/golang-jwt/jwt/v5"
)

const portal = "https://YOUR-OPSIQ/portal/your-workspace"

type User struct{ ID, Email, Name string }

// WHO IS SIGNED IN — replace with your session lookup. Return nil for a guest.
func currentUser(r *http.Request) *User { return nil }

func supportPortal(w http.ResponseWriter, r *http.Request) {
    user := currentUser(r)
    if user == nil { // login, then back here
        http.Redirect(w, r, "/login?next="+url.QueryEscape(r.URL.RequestURI()), http.StatusFound)
        return
    }
    secret := os.Getenv("OPSIQ_SITE_SECRET")
    if secret == "" {
        secret = "opsiq_whsec_YOUR_SITE_SECRET" // this site's secret; the environment wins when set
    }
    if secret == "" { // fail closed
        http.Error(w, "Support portal is not configured.", http.StatusServiceUnavailable)
        return
    }

    // Where to land: the portal page they came from, only if it is on the portal.
    back := strings.SplitN(r.URL.Query().Get("opsiq_portal_return"), "#", 2)[0]
    target := portal
    if back == portal || strings.HasPrefix(back, portal+"/") || strings.HasPrefix(back, portal+"?") {
        target = back
    }

    jti := make([]byte, 16)
    rand.Read(jti)
    now := time.Now().Unix()
    token, err := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
        "site_key":      "YOUR_SITE_KEY",
        "iat":           now,
        "exp":           now + 120,
        "authenticated": true,
        "jti":           hex.EncodeToString(jti),
        "single_use":    true,
        "platform":      "go",
        "customer": map[string]any{
            "id":          user.ID,    // REQUIRED
            "email":       user.Email, // REQUIRED
            "name":        user.Name,
            "external_id": fmt.Sprint(user.ID),
        },
    }).SignedString([]byte(secret))
    if err != nil {
        http.Error(w, "sign failed", http.StatusInternalServerError)
        return
    }

    // Default target: https://YOUR-OPSIQ/portal/your-workspace?site_key=YOUR_SITE_KEY&identity_token=…
    sep := "?"
    if strings.Contains(target, "?") {
        sep = "&"
    }
    w.Header().Set("Referrer-Policy", "no-referrer")
    w.Header().Set("Cache-Control", "no-store")
    http.Redirect(w, r, target+sep+"site_key="+url.QueryEscape("YOUR_SITE_KEY")+"&identity_token="+url.QueryEscape(token), http.StatusFound)
}

Kiedy coś jest nie tak

Portal otwiera się, ale się wypisuje.

Klucz tajny lub roboczy nie pasuje do tego miejsca pracy, token jest starszy niż sekundy 120 (sprawdź zegar serwera), lub ten sam link został otwarty dwukrotnie. Generuj podpisany link testowy: jeśli to działa, porównaj roszczenia swojego tokena z przykładem.

Zawsze ląduje na portalu.

Adres zwrotny nie znajdował się w Twoim adresie portalu, więc został celowo zignorowany. Porównaj go z Portalem URL pokazanym w Ustawieniach.

Goście mają błąd zamiast logowania

Zamień /login na trasie za pomocą prawdziwej strony logowania i upewnij się, że login powróci do adresu, który został podany.

Działa tylko dla niektórych klientów

customer. email lub custocerer. id jest dla nich pusty. Oba są wymagane.

Programista

Czat klienta: rozpoznaj zagged- w klientach

Opcjonalnie. Większość stron nie potrzebuje tego: z zwykłym chat snippet i złącze, czat weryfikuje samych klientów, z rezerwacji lub numer zamówienia plus dowód na lookup i kod email przed zamówieniem. Dodaj to, gdy chcesz klienta, który jest już zalogowany na swojej stronie rozpoznawany automatycznie, z ich całego konta. WHMCS robi to już przez haczyk. Zdalne strony, witryny, kody, C drukuje ten sam kod z klucz witryny wypełniony.

Jak to działa?

1
Twoja strona drukuje znacznik czatu

Dla signed- w klienta widget URL niesie &identity_token=... podpisane na serwerze; dla gościa jest to zwykły tag. Nic nie jest tajne w stronie: tylko token, który wygasa.

2
Czat weryfikuje token

Podpis, klucz do pracy i wygaśnięcie. Klient jest znany na każdym żądanie czatu, a Twój złącze może odpowiedzieć na ich własne zamówienia, rezerwacje lub faktury.

3
Czat odświeża się przed godziną.

To nazywa stronę, z którą jest na?opsiq_identity_refresh=1& rola = klient. Twój kod odpowiada {"sukces": prawda ",identity_token":"...} podczas gdy klient jest zalogowany, lub 401 z {"sukces": false ",login_required": true} when they are not. Dlatego opiekun odświeżania musi uruchomić zanim Twoja strona wydrukuje cokolwiek.

Jak to różni się od tokena portalu

Czas życia

Godzina (exp = iat + 3600) zamiast 120 Sekundy, ponieważ to jeździ każdy wniosek czatu zamiast jednego przekierowania.

No jti lub single_use

Ten sam symbol jest używany dla każdej wiadomości, dopóki odświeżanie go nie zastąpi.

To samo co wszystko inne.

site_key, iat, exp, uwierzytelnione: prawdziwe, platformy i klienta z wymaganym identyfikatorem i e-mail. Ten sam sekret, ten sam podpis.

💡
Tożsamość mówi, że klient jest WHO. Ich zamówienia, rezerwacje lub faktury dotrzeć do czatu przez złącze: jeden, który nazywa platformę API, lub, gdy platforma nie ma API, złącze plus jego plik mostowy (konstruktor złącza tworzy jeden).
💡
Tajemnica podpisania jest dla ciebie wypełniona. W zdalnych witrynach, Twoja strona, kody, C, każdy przykład zawiera już własny sekret tej strony, więc kod działa jak wklejone: nie ma nic do kopiowania lub konfiguracji. Przykłady na tej stronie show opsiq_whsec_YOUR_SITE_SECRET na jego miejsce. Każdy przykład szuka OPSIQ_SITE_SECRET (lub własne ustawienie framework, nazwane w swoich notatkach) na serwerze najpierw i używa go, gdy jest ustawiony, więc można przenieść sekret z pliku kiedy tylko chcesz, na przykład obrócić go bez edytowania kodu. Tak czy inaczej plik działa tylko na swoim serwerze: nigdy nie wklej go do strony internetowej lub przeglądarki JavaScripti nigdy nie zobowiązuj się do publicznego repozytorium, ponieważ każdy, kto posiada tajemnicę może zalogować się jako jeden z twoich klientów lub pracowników. WHMCS oraz Botble nie potrzebuje niczego z tego: WHMCS hak przybywa z sekretem wypełnionym, i Botble Panel łączników wypełnia go do mostu.

Kompletny kod, platforma po platformie

WHMCS

Nothing to add: the WHMCS hook in Option 1 already signs your signed-in clients into the chat, refreshes the token on long visits, and signs staff into Admin Chat. No connector is needed for this.
1

Install the Option 1 hook as includes/hooks/opsiq_tracker.php. Do not also paste the plain chat tag.

2

Optional: add the WHMCS connector under Connectors if you also want the chat to answer about invoices, services and tickets. Identity works without it.

includes/hooks/opsiq_tracker.php
/* WHMCS: no extra code. Option 1 (the All-in-One WHMCS Hook) signs the signed-in
 * client into Client Chat, answers ?opsiq_identity_refresh=1 and signs staff into
 * Admin Chat. No connector is needed for identity. */

Botble (connector bridge)

Nothing to add for bookings: the Botble connector takes bookings as a guest checkout and finds existing bookings by booking number and proof, so guests do not need to sign in. Admins are signed in through the bridge (op=admin_embed).
1

Install the Botble connector under Connectors, copy its bridge file from the connector panel and upload it to public/. The panel fills in OPSIQ_HOST, OPSIQ_SITE_KEY and OPSIQ_SITE_SECRET for you.

2

Botble has no API, so the bridge file is how the chat reads rooms and takes bookings. To also recognise a guest who is already signed in on the hotel site, use the Laravel option with your customer guard.

public/opsiq-botble-bridge.php
/* Botble: no extra code for bookings.
 * The connector books as a guest checkout and finds bookings by booking number + proof.
 * In public/opsiq-botble-bridge.php fill OPSIQ_HOST, OPSIQ_SITE_KEY and OPSIQ_SITE_SECRET.
 * Admins: op=admin_embed */

PHP (no dependencies)

1

Save as opsiq-chat.php. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

At the very top of every page (or your front controller), before any output: require 'opsiq-chat.php'; opsiq_chat_refresh();

3

Just before </body> on every page: <?= opsiq_chat_tag() ?> — it replaces the plain chat tag. Replace opsiq_chat_user() with your signed-in customer.

opsiq-chat.php
<?php
/* opsiq-chat.php — signed-in customers for OpsIQ Client Chat. */

// WHO IS SIGNED IN — replace the body with your app's session. Return null for a guest.
function opsiq_chat_user(): ?array
{
    $u = $_SESSION['user'] ?? null;               // e.g. ['id' => 7, 'email' => '…', 'name' => '…']
    return is_array($u) && !empty($u['id']) && !empty($u['email']) ? $u : null;
}

function opsiq_chat_token(array $u): string
{
    $secret = (string) (getenv('OPSIQ_SITE_SECRET') ?: 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; the environment wins when set
    if ($secret === '') return '';                           // fail closed: plain chat, no identity
    $b64 = static fn($v) => rtrim(strtr(base64_encode(json_encode($v, JSON_UNESCAPED_SLASHES)), '+/', '-_'), '=');
    $now = time();
    $signing = $b64(['alg' => 'HS256', 'typ' => 'JWT']) . '.' . $b64([
        'site_key'      => 'YOUR_SITE_KEY',
        'iat'           => $now,
        'exp'           => $now + 3600,                      // the widget refreshes before this
        'authenticated' => true,
        'platform'      => 'php',
        'customer'      => [
            'id'          => $u['id'],                       // REQUIRED
            'email'       => $u['email'],                    // REQUIRED
            'name'        => $u['name'] ?? '',
            'external_id' => (string) $u['id'],
        ],
    ]);
    return $signing . '.' . rtrim(strtr(base64_encode(hash_hmac('sha256', $signing, $secret, true)), '+/', '-_'), '=');
}

// Call at the top of every page, before any output.
function opsiq_chat_refresh(): void
{
    if (empty($_GET['opsiq_identity_refresh'])) return;
    header('Content-Type: application/json; charset=utf-8');
    header('Cache-Control: no-store');
    $u = opsiq_chat_user();
    $t = $u ? opsiq_chat_token($u) : '';
    if ($t === '') { http_response_code(401); echo json_encode(['success' => false, 'login_required' => true]); exit; }
    echo json_encode(['success' => true, 'role' => 'customer', 'identity_token' => $t]);
    exit;
}

// Print before </body> on every page, instead of the plain chat tag.
function opsiq_chat_tag(): string
{
    $src = 'https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY';
    $u = opsiq_chat_user();
    $t = $u ? opsiq_chat_token($u) : '';
    if ($t !== '') $src .= '&identity_token=' . rawurlencode($t);
    return '<script async src="' . htmlspecialchars($src, ENT_QUOTES) . '" data-opsiq-widget="client-chat"></script>';
}

Laravel

1

Run: composer require firebase/php-jwt. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET=… in .env with 'opsiq' => ['site_secret' => env('OPSIQ_SITE_SECRET')] in config/services.php on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Save the class as app/Support/OpsiqChat.php, and add the small OpsiqChatRefresh middleware from the bottom of the code to the web group, so the widget can refresh its token on any page.

3

In your main Blade layout, just before </body>: {!! \App\Support\OpsiqChat::tag() !!}

app/Support/OpsiqChat.php
<?php
// app/Support/OpsiqChat.php — composer require firebase/php-jwt
namespace App\Support;

use Firebase\JWT\JWT;

final class OpsiqChat
{
    public static function token(): string
    {
        $user = auth()->user();
        $secret = (string) (config('services.opsiq.site_secret') ?: 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; config wins when set
        if (!$user || $secret === '') return '';                 // guest, or not configured
        $now = time();
        return JWT::encode([
            'site_key'      => 'YOUR_SITE_KEY',
            'iat'           => $now,
            'exp'           => $now + 3600,
            'authenticated' => true,
            'platform'      => 'laravel',
            'customer'      => [
                'id'          => $user->id,                      // REQUIRED
                'email'       => $user->email,                   // REQUIRED
                'name'        => $user->name,
                'external_id' => (string) $user->id,
            ],
        ], $secret, 'HS256');
    }

    /** For Blade: {!! \App\Support\OpsiqChat::tag() !!} before </body>. */
    public static function tag(): string
    {
        $src = 'https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY';
        $t = self::token();
        if ($t !== '') $src .= '&identity_token=' . rawurlencode($t);
        return '<script async src="' . e($src) . '" data-opsiq-widget="client-chat"></script>';
    }
}

/* Refresh: the widget asks ?opsiq_identity_refresh=1 on the page it is on.
 * Laravel 11+ — bootstrap/app.php:
 *
 *   ->withMiddleware(function ($middleware) {
 *       $middleware->web(append: \App\Http\Middleware\OpsiqChatRefresh::class);
 *   })
 *
 * app/Http/Middleware/OpsiqChatRefresh.php:
 *
 *   public function handle($request, \Closure $next) {
 *       if (!$request->query('opsiq_identity_refresh')) return $next($request);
 *       $t = \App\Support\OpsiqChat::token();
 *       return $t === ''
 *           ? response()->json(['success' => false, 'login_required' => true], 401)->header('Cache-Control', 'no-store')
 *           : response()->json(['success' => true, 'role' => 'customer', 'identity_token' => $t])->header('Cache-Control', 'no-store');
 *   }
 */

WordPress / WooCommerce

1

This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, add define('OPSIQ_SITE_SECRET', '…'); to wp-config.php instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Paste into your theme's functions.php or a small plugin. It prints the chat itself, so remove the plain chat tag if you added one.

3

For WooCommerce orders in the chat, add the WooCommerce connector under Connectors.

functions.php
/* functions.php or a small plugin — OpsIQ Client Chat with signed-in customers. */

if (!defined('OPSIQ_SITE_SECRET')) define('OPSIQ_SITE_SECRET', 'opsiq_whsec_YOUR_SITE_SECRET');   // this site's secret; wp-config.php wins when set

function opsiq_chat_token(): string {
    if (!is_user_logged_in() || !defined('OPSIQ_SITE_SECRET') || OPSIQ_SITE_SECRET === '') return '';
    $u   = wp_get_current_user();
    $b64 = static fn($v) => rtrim(strtr(base64_encode(wp_json_encode($v)), '+/', '-_'), '=');
    $now = time();
    $signing = $b64(['alg' => 'HS256', 'typ' => 'JWT']) . '.' . $b64([
        'site_key'      => 'YOUR_SITE_KEY',
        'iat'           => $now,
        'exp'           => $now + 3600,
        'authenticated' => true,
        'platform'      => 'wordpress',
        'customer'      => [
            'id'          => $u->ID,                     // REQUIRED
            'email'       => $u->user_email,             // REQUIRED
            'name'        => $u->display_name,
            'external_id' => (string) $u->ID,
        ],
    ]);
    return $signing . '.' . rtrim(strtr(base64_encode(hash_hmac('sha256', $signing, OPSIQ_SITE_SECRET, true)), '+/', '-_'), '=');
}

// Refresh: the widget asks ?opsiq_identity_refresh=1 on the page it is on.
add_action('init', function () {
    if (empty($_GET['opsiq_identity_refresh'])) return;
    nocache_headers();
    $t = opsiq_chat_token();
    if ($t === '') wp_send_json(['success' => false, 'login_required' => true], 401);
    wp_send_json(['success' => true, 'role' => 'customer', 'identity_token' => $t]);
});

// The chat tag, on every front-end page.
add_action('wp_footer', function () {
    $src = 'https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY';
    $t = opsiq_chat_token();
    if ($t !== '') $src .= '&identity_token=' . rawurlencode($t);
    echo '<script async src="' . esc_url($src) . '" data-opsiq-widget="client-chat"></script>';
});

Node.js / Express

1

Run: npm i jsonwebtoken. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

app.use(opsiqChat) after your session / passport middleware. It answers the refresh and sets res.locals.opsiqChatTag.

3

Print res.locals.opsiqChatTag (unescaped) just before </body> in your layout, instead of the plain chat tag.

opsiq-chat.js
// opsiq-chat.js — npm i jsonwebtoken
const jwt = require("jsonwebtoken");

function opsiqChatToken(user) {
  const secret = process.env.OPSIQ_SITE_SECRET || "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; the environment wins when set
  if (!user || !secret) return "";
  return jwt.sign({
    site_key: "YOUR_SITE_KEY",
    authenticated: true,
    platform: "node",
    customer: { id: user.id, email: user.email, name: user.name, external_id: String(user.id) },  // id + email REQUIRED
  }, secret, { algorithm: "HS256", expiresIn: 3600 });     // sets iat + exp
}

// app.use(opsiqChat) — after your session / passport middleware.
function opsiqChat(req, res, next) {
  const token = opsiqChatToken(req.user);
  if (req.query.opsiq_identity_refresh) {                  // the widget refreshing on this page
    res.set("Cache-Control", "no-store");
    return token
      ? res.json({ success: true, role: "customer", identity_token: token })
      : res.status(401).json({ success: false, login_required: true });
  }
  const src = "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY" + (token ? "&identity_token=" + encodeURIComponent(token) : "");
  res.locals.opsiqChatTag = '<script async src="' + src.replace(/"/g, """) + '" data-opsiq-widget="client-chat"></script>';
  next();
}

module.exports = { opsiqChat };

Python (Flask)

1

Run: pip install pyjwt flask-login. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Call init_opsiq_chat(app) where you create the app. It answers the refresh and gives templates opsiq_chat_tag.

3

In your base template, just before </body>: {{ opsiq_chat_tag }}

opsiq_chat.py
# opsiq_chat.py — pip install pyjwt flask-login
import os, time, urllib.parse
import jwt
from flask import request, jsonify
from flask_login import current_user
from markupsafe import Markup, escape

def opsiq_chat_token():
    secret = os.environ.get("OPSIQ_SITE_SECRET") or "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; the environment wins when set
    if not secret or not current_user.is_authenticated:
        return ""
    now = int(time.time())
    return jwt.encode({
        "site_key": "YOUR_SITE_KEY", "iat": now, "exp": now + 3600,
        "authenticated": True, "platform": "python",
        "customer": {"id": current_user.id, "email": current_user.email,       # REQUIRED
                     "name": getattr(current_user, "name", ""), "external_id": str(current_user.id)},
    }, secret, algorithm="HS256")

def init_opsiq_chat(app):
    @app.before_request
    def _opsiq_refresh():
        if request.args.get("opsiq_identity_refresh"):
            t = opsiq_chat_token()
            resp = jsonify({"success": True, "role": "customer", "identity_token": t}) if t \
                else (jsonify({"success": False, "login_required": True}), 401)
            if isinstance(resp, tuple):
                resp[0].headers["Cache-Control"] = "no-store"
            else:
                resp.headers["Cache-Control"] = "no-store"
            return resp

    @app.context_processor
    def _opsiq_tag():
        t = opsiq_chat_token()
        src = "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY" + ("&identity_token=" + urllib.parse.quote(t, safe="") if t else "")
        return {"opsiq_chat_tag": Markup('<script async src="%s" data-opsiq-widget="client-chat"></script>' % escape(src))}

Django

1

Run: pip install pyjwt. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in settings.py (for example os.environ["OPSIQ_SITE_SECRET"]) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Add "yourapp.opsiq_chat.OpsiqChatMiddleware" to MIDDLEWARE (after AuthenticationMiddleware) and "yourapp.opsiq_chat.opsiq_chat" to TEMPLATES context_processors.

3

In your base template, just before </body>: {{ opsiq_chat_tag }}

opsiq_chat.py
# yourapp/opsiq_chat.py — pip install pyjwt
import time, urllib.parse
import jwt
from django.conf import settings
from django.http import JsonResponse
from django.utils.html import format_html

def opsiq_chat_token(user):
    secret = getattr(settings, "OPSIQ_SITE_SECRET", "") or "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; settings win when set
    if not secret or not user.is_authenticated:
        return ""
    now = int(time.time())
    return jwt.encode({
        "site_key": "YOUR_SITE_KEY", "iat": now, "exp": now + 3600,
        "authenticated": True, "platform": "django",
        "customer": {"id": user.pk, "email": user.email,             # REQUIRED
                     "name": user.get_full_name(), "external_id": str(user.pk)},
    }, secret, algorithm="HS256")

class OpsiqChatMiddleware:
    def __init__(self, get_response):
        self.get_response = get_response
    def __call__(self, request):
        if request.GET.get("opsiq_identity_refresh"):
            t = opsiq_chat_token(request.user)
            resp = (JsonResponse({"success": True, "role": "customer", "identity_token": t}) if t
                    else JsonResponse({"success": False, "login_required": True}, status=401))
            resp["Cache-Control"] = "no-store"
            return resp
        return self.get_response(request)

def opsiq_chat(request):
    t = opsiq_chat_token(request.user)
    src = "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY" + ("&identity_token=" + urllib.parse.quote(t, safe="") if t else "")
    return {"opsiq_chat_tag": format_html('<script async src="{}" data-opsiq-widget="client-chat"></script>', src)}

.NET / C#

1

Run: dotnet add package System.IdentityModel.Tokens.Jwt. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OpsIQ:SiteSecret (user-secrets, the OpsIQ__SiteSecret environment variable or Key Vault) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

In Program.cs, after app.UseAuthentication(): app.Use(OpsiqChat.Refresh);

3

In _Layout.cshtml before </body>: @Html.Raw(OpsiqChat.Tag(Context))

OpsiqChat.cs
// OpsiqChat.cs — dotnet add package System.IdentityModel.Tokens.Jwt
using System.IdentityModel.Tokens.Jwt;
using System.Net;
using System.Security.Claims;
using System.Text;
using Microsoft.IdentityModel.Tokens;

public static class OpsiqChat
{
    public static string Token(HttpContext ctx)
    {
        var secret = ctx.RequestServices.GetRequiredService<IConfiguration>()["OpsIQ:SiteSecret"];
        if (string.IsNullOrEmpty(secret)) secret = "opsiq_whsec_YOUR_SITE_SECRET";   // this site's secret; configuration wins when set
        if (string.IsNullOrEmpty(secret) || ctx.User.Identity?.IsAuthenticated != true) return "";
        var id = ctx.User.FindFirstValue(ClaimTypes.NameIdentifier) ?? "";      // REQUIRED
        var email = ctx.User.FindFirstValue(ClaimTypes.Email) ?? "";            // REQUIRED
        var creds = new SigningCredentials(new SymmetricSecurityKey(Encoding.UTF8.GetBytes(secret)), SecurityAlgorithms.HmacSha256);
        var now = DateTimeOffset.UtcNow;
        var payload = new JwtPayload {
            { "site_key", "YOUR_SITE_KEY" }, { "iat", now.ToUnixTimeSeconds() }, { "exp", now.AddSeconds(3600).ToUnixTimeSeconds() },
            { "authenticated", true }, { "platform", "dotnet" },
            { "customer", new Dictionary<string, object> { { "id", id }, { "email", email }, { "name", ctx.User.Identity?.Name ?? "" }, { "external_id", id } } },
        };
        return new JwtSecurityTokenHandler().WriteToken(new JwtSecurityToken(new JwtHeader(creds), payload));
    }

    // app.Use(OpsiqChat.Refresh) — the widget refreshing on the page it is on.
    public static async Task Refresh(HttpContext ctx, Func<Task> next)
    {
        if (string.IsNullOrEmpty(ctx.Request.Query["opsiq_identity_refresh"])) { await next(); return; }
        ctx.Response.Headers["Cache-Control"] = "no-store";
        var t = Token(ctx);
        if (t == "") { ctx.Response.StatusCode = 401; await ctx.Response.WriteAsJsonAsync(new { success = false, login_required = true }); return; }
        await ctx.Response.WriteAsJsonAsync(new { success = true, role = "customer", identity_token = t });
    }

    public static string Tag(HttpContext ctx)
    {
        var t = Token(ctx);
        var src = "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY" + (t != "" ? "&identity_token=" + Uri.EscapeDataString(t) : "");
        return "<script async src=\"" + WebUtility.HtmlEncode(src) + "\" data-opsiq-widget=\"client-chat\"></script>";
    }
}

Ruby on Rails

1

Add gem "jwt" and run bundle install. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

include OpsiqChat in ApplicationController.

3

In app/views/layouts/application.html.erb before </body>: <%= opsiq_chat_tag %>

app/controllers/concerns/opsiq_chat.rb
# app/controllers/concerns/opsiq_chat.rb — Gemfile: gem "jwt"
require "jwt"
require "cgi"

module OpsiqChat
  extend ActiveSupport::Concern

  included do
    before_action :opsiq_identity_refresh
    helper_method :opsiq_chat_tag
  end

  private

  def opsiq_chat_token
    secret = ENV["OPSIQ_SITE_SECRET"].presence || "opsiq_whsec_YOUR_SITE_SECRET"   # this site's secret; the environment wins when set
    return "" if secret.blank? || !respond_to?(:current_user, true) || current_user.nil?
    now = Time.now.to_i
    JWT.encode({
      site_key: "YOUR_SITE_KEY", iat: now, exp: now + 3600,
      authenticated: true, platform: "rails",
      customer: { id: current_user.id, email: current_user.email,          # REQUIRED
                  name: current_user.try(:name).to_s, external_id: current_user.id.to_s }
    }, secret, "HS256")
  end

  def opsiq_identity_refresh
    return unless params[:opsiq_identity_refresh].present?
    response.headers["Cache-Control"] = "no-store"
    t = opsiq_chat_token
    return render(json: { success: false, login_required: true }, status: :unauthorized) if t.blank?
    render json: { success: true, role: "customer", identity_token: t }
  end

  def opsiq_chat_tag
    t = opsiq_chat_token
    src = "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY" + (t.present? ? "&identity_token=#{CGI.escape(t)}" : "")
    helpers.tag.script(nil, async: true, src: src, data: { opsiq_widget: "client-chat" })
  end
end

Java (Spring Boot)

1

Add io.jsonwebtoken:jjwt-api, jjwt-impl and jjwt-jackson (0.12+). This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set opsiq.site.secret (for example from OPSIQ_SITE_SECRET) on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Replace currentUser() with your user lookup. The filter answers the refresh on every page; @ControllerAdvice exposes opsiqChatTag to views.

3

Thymeleaf layout before </body>: <th:block th:utext="${opsiqChatTag}"/>

OpsiqChat.java
// OpsiqChat.java — io.jsonwebtoken:jjwt-api / jjwt-impl / jjwt-jackson (0.12+)
import io.jsonwebtoken.Jwts;
import io.jsonwebtoken.security.Keys;
import jakarta.servlet.*;
import jakarta.servlet.http.*;
import java.io.IOException;
import java.net.URLEncoder;
import java.nio.charset.StandardCharsets;
import java.security.Principal;
import java.time.Instant;
import java.util.*;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;
import org.springframework.web.bind.annotation.ControllerAdvice;
import org.springframework.web.bind.annotation.ModelAttribute;
import org.springframework.web.util.HtmlUtils;

@Component
@ControllerAdvice
public class OpsiqChat implements Filter {
    @Value("${opsiq.site.secret:opsiq_whsec_YOUR_SITE_SECRET}")   // this site's secret; opsiq.site.secret wins when set
    private String secret;

    /** WHO IS SIGNED IN — replace with your lookup: id, email, name. Null for a guest. */
    private Map<String, Object> currentUser(Principal p) {
        return p == null ? null : Map.of("id", p.getName(), "email", p.getName(), "name", p.getName());
    }

    String token(HttpServletRequest req) {
        Map<String, Object> u = currentUser(req.getUserPrincipal());
        if (u == null || secret.isEmpty()) return "";
        Instant now = Instant.now();
        return Jwts.builder()
            .claim("site_key", "YOUR_SITE_KEY").claim("authenticated", true).claim("platform", "java")
            .claim("customer", Map.of("id", u.get("id"), "email", u.get("email"), "name", u.get("name"),
                                      "external_id", String.valueOf(u.get("id"))))          // id + email REQUIRED
            .issuedAt(Date.from(now)).expiration(Date.from(now.plusSeconds(3600)))
            .signWith(Keys.hmacShaKeyFor(secret.getBytes(StandardCharsets.UTF_8)), Jwts.SIG.HS256)
            .compact();
    }

    @Override // the widget refreshing on the page it is on
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        HttpServletRequest req = (HttpServletRequest) request;
        if (req.getParameter("opsiq_identity_refresh") == null) { chain.doFilter(request, response); return; }
        HttpServletResponse res = (HttpServletResponse) response;
        res.setHeader("Cache-Control", "no-store");
        res.setContentType("application/json");
        String t = token(req);
        if (t.isEmpty()) { res.setStatus(401); res.getWriter().write("{\"success\":false,\"login_required\":true}"); return; }
        res.getWriter().write("{\"success\":true,\"role\":\"customer\",\"identity_token\":\"" + t + "\"}");
    }

    @ModelAttribute("opsiqChatTag")
    public String tag(HttpServletRequest req) {
        String t = token(req);
        String src = "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY" + (t.isEmpty() ? "" : "&identity_token=" + URLEncoder.encode(t, StandardCharsets.UTF_8));
        return "<script async src=\"" + HtmlUtils.htmlEscape(src) + "\" data-opsiq-widget=\"client-chat\"></script>";
    }
}

Go

1

Run: go get github.com/golang-jwt/jwt/v5. This site's signing secret is already filled in, so the code works as pasted. To keep it out of the file, set OPSIQ_SITE_SECRET in the environment on the server instead: that value is used first. Keep this file on the server and never commit it to a public repository.

2

Replace currentUser() with your session lookup, and wrap your router: http.ListenAndServe(addr, OpsiqChatRefresh(mux)).

3

Pass OpsiqChatTag(r) to your layout template and print it before </body>.

opsiq_chat.go
// opsiq_chat.go — go get github.com/golang-jwt/jwt/v5
package main

import (
    "encoding/json"
    "fmt"
    "html"
    "html/template"
    "net/http"
    "net/url"
    "os"
    "time"

    "github.com/golang-jwt/jwt/v5"
)

type OpsiqUser struct{ ID, Email, Name string }

// WHO IS SIGNED IN — replace with your session lookup. Return nil for a guest.
func currentUser(r *http.Request) *OpsiqUser { return nil }

func opsiqChatToken(r *http.Request) string {
    u, secret := currentUser(r), os.Getenv("OPSIQ_SITE_SECRET")
    if secret == "" {
        secret = "opsiq_whsec_YOUR_SITE_SECRET" // this site's secret; the environment wins when set
    }
    if u == nil || secret == "" {
        return ""
    }
    now := time.Now().Unix()
    t, err := jwt.NewWithClaims(jwt.SigningMethodHS256, jwt.MapClaims{
        "site_key": "YOUR_SITE_KEY", "iat": now, "exp": now + 3600,
        "authenticated": true, "platform": "go",
        "customer": map[string]any{"id": u.ID, "email": u.Email, "name": u.Name, "external_id": fmt.Sprint(u.ID)}, // id + email REQUIRED
    }).SignedString([]byte(secret))
    if err != nil {
        return ""
    }
    return t
}

// OpsiqChatRefresh answers the widget's ?opsiq_identity_refresh=1 on any page.
func OpsiqChatRefresh(next http.Handler) http.Handler {
    return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
        if r.URL.Query().Get("opsiq_identity_refresh") == "" {
            next.ServeHTTP(w, r)
            return
        }
        w.Header().Set("Cache-Control", "no-store")
        w.Header().Set("Content-Type", "application/json")
        if t := opsiqChatToken(r); t != "" {
            json.NewEncoder(w).Encode(map[string]any{"success": true, "role": "customer", "identity_token": t})
            return
        }
        w.WriteHeader(http.StatusUnauthorized)
        json.NewEncoder(w).Encode(map[string]any{"success": false, "login_required": true})
    })
}

// OpsiqChatTag is printed before </body> in your layout.
func OpsiqChatTag(r *http.Request) template.HTML {
    src := "https://YOUR-OPSIQ/widget.php?site_key=YOUR_SITE_KEY"
    if t := opsiqChatToken(r); t != "" {
        src += "&identity_token=" + url.QueryEscape(t)
    }
    return template.HTML(`<script async src="` + html.EscapeString(src) + `" data-opsiq-widget="client-chat"></script>`)
}

Kiedy coś jest nie tak

Czat traktuje klienta logged- w jako gościa

Tag został wydrukowany bez identity_token (tajemnica nie jest dostępna na serwerze, więc kod nie jest zamknięty), lub klucz do miejsca pracy tokena lub sekret nie pasuje.

Rozpoznany na początku, potem gość po około godzinie

Nie jest osiągnięta obsługa odświeżania: musi ona być uruchomiona przed wyjściem, na każdej stronie czatu.

Zwykły czat pokazuje dwa razy

Usuń zwykły znacznik czatu z szablonu: ten kod sam drukuje czat.

Programista

Wtyczki i SDK

OpsIQ zapewnia SDK pakiety i wtyczki do wspólnych platform.

Jak to działa?
Wtyczki i SDKCztery pakiety: PHP SDK, Node.js SDK, WordPress plugin i WHMCS moduł, każdy z jego polecenia instalacji.PHPPHP SDKWymagany kompozytor opsiq/sdkJSNode. js SDKnpm i @opsiq/sdkWPWtyczka WordPressKliknij jeden przycisk i podłączWHModuł WHMCSAddon do naliczania opłat + przekaźnik biletów
Wtyczki i SDKy
PHP SDK

Pakiet Composer: generowanie symboli tożsamości, pomoc API, weryfikacja podpisu haka.

JavaScript SDK

Strona przeglądarki: śledzenie, tożsamość, niestandardowe zdarzenia, kontrola czatu.

Wtyczka WordPress

Wtrysk widget, tożsamość z sesji użytkowników WP, synchronizacja WooCommerce.

Moduł WHMCS

Pełna integracja: widget, przekaz biletów, tożsamość, admin AI.

Rozszerzenie tematu Shopify

Aplikacja osadzona w automatycznej tożsamości klienta.

PHP SDK szybki start

Przykład PHP SDK
composer require opsiq/sdk

use OpsIQ\SDK\Identity;
$token = Identity::createToken(
    siteKey: "site_abc123",
    secret:  "opsiq_whsec_your_secret",
    customer: ["id" => "cust_1001", "email" => "[email protected]", "name" => "Jane"]
);

// Call any catalog action over the action API
$ch = curl_init("https://your-opsiq.com/api/v1.php");
curl_setopt_array($ch, [
    CURLOPT_POST => true,
    CURLOPT_RETURNTRANSFER => true,
    CURLOPT_HTTPHEADER => [
        "Authorization: Bearer opq_your_key",
        "Content-Type: application/json",
    ],
    CURLOPT_POSTFIELDS => json_encode([
        "action" => "crm.contacts.list",
        "status" => "lead",
        "limit"  => 25,
    ]),
]);
$contacts = json_decode(curl_exec($ch), true);
Programista

Badanie API, zdarzenia i bezkonektorowa automatyzacja

Survey Studio jest zaprojektowane do korzystania z tego samego wpisanego Generała API, wewnętrzne wykonawcy, event bus i webhook operacji jako reszta OpsIQ. Pozwala to deweloperom zintegrować koniec do końca bez budowania zapakowanego złącza.

⚠️
Status realizacji: katalog na żywo obecnie ujawnia tylko platform.get.survey.config oraz platform.save.survey.config. The surveys.* oraz feedback.* poniżej rodziny są zatwierdzoną umową docelową i muszą powrócić unknown_action do chwili rejestracji.

Docelowe rodziny działań

Typy, szablony i szybkie uruchomienie

surveys.types.*, surveys.templates.* oraz surveys.quick_launch.* lista, podgląd, immanentyfikacja i walidacja kompletnych startów.

Badania i wersje

surveys.create|get|list|update|archive|duplicate plus niezmienna wersja, walidacja i publikacja działań.

Przemieszczenie i ukierunkowanie

surveys.deployments.*, surveys.links.*, surveys.audiences.*, surveys.triggers.* oraz surveys.variables.*.

Działania informacyjne i odpowiedzi

surveys.invitations.*, surveys.campaigns.*, surveys.recipients.*, surveys.responses.*, eksport, redakcja i analityka.

Haki internetowe, import i zwroty

surveys.webhooks.*, surveys.imports.*, feedback.items.*, feedback.analytics.*, feedback.sources.* oraz feedback.analysis.*.

Bezprzewodowy przepływ

1
Tworzenie i publikowanie za pośrednictwem General API

Użyj badań wpisanych. * działania z kluczem przypiętym do pracy. Pisze deklaruje pozwolenie, ryzyko, potwierdzenie, idepotencja i zachowanie w trybie suszenia.

2
Otrzymuj wydarzenie biznesowe

Wyślij podpisane zdarzenie na przychodzący hak, na przykład anulowanie zamówienia lub zakończony etap pokładowy.

3
Mapowanie w Akcji i Tryggerach

Wybierz OpsIQ Ogólne API działania takie jak wydanie zaproszenia do badania lub przygotowanie kampanii, a następnie mapy pól z zweryfikowanego ładunku wyzwalacza.

4
Subskrybować wydarzenia ankietowe

Dostarcz udokumentowany ankiet bezpieczeństwa biznesowego. * cykl życia podset do punktu końcowego z podpisem, filtrem, ponowną próbą, logiem i autoryzowaną powtórką.

Kanoniczny cel zdarzenia

Wspólny katalog będzie obejmować badania / wdrożenia publikuje stan, publiczność i decyzji wyzwalających, zaproszenia, renderowanie / start / częściowy / wznowienie / pełne / porzucenie, readaptacja, stan kampanii i niepowodzenia dostawy. Wysokogłośny nacisk, przewijanie i pytania pobyt w Survey Analytics przechowywania chyba wyraźnie udokumentowane fan- out.

Złącze jest opcjonalne. Dodaje wielokrotnego użytku odkrycie platformy, zweryfikowaną tożsamość, fakty, zmienne i wyliczenie odbiorcy. Ogólne API plus Działania & Tryggery / haki webhacks pozostaje kompletną ścieżką integracji dla deweloperów, którzy nie potrzebują zapakowanego złącza.
Programista

RESY API

W OpsIQ REST API pozwala programowo uzyskać dostęp do wszystkich funkcji platformy.

Jak to działa?
RESY APITerminal pokazujący POST do OpsIQ API z Kluczem Nosiciela, lista otwartych biletów, i paged JSON Odpowiedź.$ curl -X POST https://your-domain.com/api/v1.php \-H "Authorization: Bearer opq_..."200 OK{ "data": [{ "id": 4192, "ticket_number": "T-4192","subject": "Card declined", "status": "open" },... more tickets ...], "page": 1, "per_page": 50, "has_more": true }
RESY API

Format wniosku

Wyślij klucz jako Authorization: Bearer opq_... lub X-OpsIQ-Key: opq_...Użyj jednego nagłówka uwierzytelniania, nie obu.

Format żądania API
POST https://your-opsiq-domain.com/api/v1.php
Authorization: Bearer opq_your_api_key
# Alternative header: X-OpsIQ-Key: opq_your_api_key
Content-Type: application/json

{
  "action": "endpoint.name",
  "site_key": "site_abc123"
}

Wspólne działania

API jest oparty na działaniach: wysłać action nazwa w organizmie. Każdy zarejestrowany administrator JSON operacja ma stajnię o nazwie akcja. POST {"action":"meta.actions"} (brak klucza) dla autorytatywnego, perinstall list, wniosek o kontrakt, metadane ryzyka i zakres. platform.routes.* most pozostaje tylko dla starszych integracje.

crm.contacts.list

Lista kontaktów CRM (zakres crm. read). Parametry: q, status, źródło, tag, wynik potencjalnego klienta, limit.

crm.contacts.upsert

Resoluve- or- create a contact (scope crm. write). Params: email plus fields, tags, nots.

crm.deals.list

Lista CRM transakcje (zakres crm.read). Params: status, stage_id, company_id, owner_admin_id, pipeline_id, limit.

crm.activities.record

Zapis cyklu życia / działalności gospodarczej dla kontaktu (zakres crm.write). Params: e-mail lub contact_id, wydarzenie, wartość, waluta.

crm.conversions.record

Zapis konwersji (zakres crm.write). Params: contact_id lub e-mail, conversion_type, wartość, waluta.

crm.events.list

Odpytywanie strumienia zdarzeń CRM (zakres crm. read). Parametry: limit.

tickets.list

Lista biletów (scope tickets.read). Params: strona, per_page, sort, order, status, priority, department_id, assigned_admin_id, client_email, szukaj.

tickets.get

Jeden bilet i jego wiadomości (scope tickets.read). Params: ticket_id lub ticket_number, include_messages, messages_limit.

tickets.reply

Wpisz odpowiedź na bilet (scope tickets.write). Params: ticket_id lub ticket_number, ciało, author_type, author_nameWewnętrzne.

tickets.update

Aktualizacja biletu (scope tickets.write). Params: ticket_id lub ticket_number, status, priorytet, przedmiot, department_id, assigned_admin_id.

tickets.open

Otwórz bilet wsparcia (scope tickets.write): customer_email, customer_name, obiekt, ciało, priorytet.

tickets.bulk

Uruchom operację kolejki masowej (scope tickets. write). Params: operacja, ids.

conversations.list

Lista rozmów live- chat (conversations.read). Params: strona, per_page, status, assigned_admin_id, client_email, szukaj.

conversations.get

Jedna rozmowa i jej wiadomości (conversations.read). Params: conversation_id lub thread_key, include_messages.

conversations.messages

Historia wiadomości na stronie (conversations.read). Params: conversation_id, strona, per_page, include_internal.

conversations.send

Wyślij wiadomość do rozmowy (conversations.write). Params: conversation_id, wiadomość, sender_typeWewnętrzne.

conversations.update

Przypisz, status lub tytuł konwersacji (conversations.write). Params: conversation_id, status, assigned_admin_id, obiekt.

connektors. list / . get / . test

Zobacz, które złącza są zainstalowane, co każdy może zrobić, i czy jego referencje działają (connectors. read).

automations.actions.list

Działania, które Twój Builder Działania będzie uruchomić (zakres automatyzacji czytaj).

automations.triggers.list

Co będzie strzelać i na jakich warunkach (zakres automatyzacji czytaj).

automations.runs.list

Historia wykonania debugowania integracji (zakres automations. read). Params: status, action_key.

departments.list

Wydziały mogą przekierować bilet do (dział zakresowy przeczytane).

notifications.list

Powiadomienia dla jednego operatora (zgłoszenia zakresowes.read). Params: admin_id (wymagane), unread_only.

analytics.export

Sekcja raportu jako CSV (analiza zakresus. read). Paramy: sekcja, preset, od, do. Zadzwoń analytics. sections. list dla poprawnych wartości.

site_intelligence.sites.list / .reports.list

Monitorowane strony i ich SEO sprawozdania (zakres site_intelligence.read).

commerce. products. list / . get

Katalog Sklepu, paged (scope commerce. read). Filtry: aktywny, kategoria, wyszukiwanie. .get zwraca jeden produkt z jego wariantami.

commerce. orders. list / . get

Zlecenia przechowywania (zakres commerce.read). Filtry: status, payment_method, kanał, customer_emailPrzyprowadź jednego order_id lub jego ORD - referencji, z elementów linii. Uchwyt do bramki na żywo nie jest zwracany.

commerce.refunds.list

Wnioski o zwrot kosztów i ich stan (zakres commerce. read).

commerce.quotes.create

Cena pozycji dla klienta (zakres commerce. write). Źródło store lub ślimaka złącza. Tworzy nic: nie zamawianie, nie płatność. Zobacz dział Handel.

Bilety.csat.list / .get / .metrics

Odpowiedzi na pytania użytkownika jako dane (scope tickets. read). Filtr według ratingu, biletu, agenta lub okresu; .metrics zwraca te same liczby, które pokazuje deska rozdzielcza.

conversations.ratings.list

Rozmowa z odwiedzającymi, z komentarzem, co skłoniło ocenę i agenta (conversations. read).

knowledge.articles.list

Strona przez artykuły Centrum Pomocy (zakres kb. read).

knowledge.articles.get

Jeden artykuł Help Center id (zakres kb. read). Params: article_id.

webhooks.events.list

Każde zdarzenie można zapisać do punktu końcowego haka webowego, z jego ładunku. Dostępny na każdym planie, więc można budować przeciwko niemu przed zakupem.

files.get

Krótkotrwały, podpisany link do pobierania dla załącznika (scope files. read). Params: reference, ttl.

security.check

Pytaj, czy IP lub e-mail jest zablokowany lub podejrzliwy tutaj (scope security.read).IP firewall, blocklist spamu biletów i wyrok AI bezpieczeństwa. Params: ip, e-mail.

security.report

Zgłoś nadużycia obserwowany system (zakres bezpieczeństwa . write). Nagrane jako zdarzenie bezpieczeństwa, zaklasyfikowane przez Bezpieczeństwa AI natychmiast, i admin są ostrzeżone na wysoki poziom ryzyka werdykty. Params: ip, e-mail, rodzaj, powód, źródło.

security. blocklist. add / . list

Zarządzaj regułami spamu, które jest egzekwowane przez potok biletów (zakres security. write / security. read). To samo przechowuje się jak kontrolka "Blokuj nadawcę" strony Bilety. Parametry: rodzaj (email, domena, ip), wartość, powód, expires_hours.

💡
meta. actions jest zawsze autorytatywny. Zwraca każdą akcję dostępną na instalacji z zakresu każdego, więc nigdy nie trzeba zgadywać lub kodować tej listy.

Paging, filtrowanie i sortowanie

Każda akcja na liście używa tych samych parametrów, więc uczysz się ich raz.

strona / per_page

Numer strony zaczynający się na 1, i rozmiar strony. Domyślnie 50, maksimum 200. Limit i offset są również akceptowane, jeśli wolisz je.

sortuj / zamawiaj

Pole sortować przez, i asc lub desc (domyślnie desc). Każda akcja akceptuje stały zestaw pól sortowania; wszystko inne jest ignorowane zamiast błędnych.

filters

Wysyłanie filtrów jako obiektu lub podanie filtru jako parametru najwyższego poziomu. Nieznane filtry są ignorowane.

Co wraca

elementy, strona, per_page, liczenie, ogółem oraz has_moreZażądaj stron do czasu has_more jest fałszywa.

Żądanie listy na paged, filterowane, sortowane
POST /api/v1.php
Authorization: Bearer opq_your_api_key

{
  "action": "tickets.list",
  "status": "open",
  "priority": "urgent",
  "sort": "created_at",
  "order": "desc",
  "page": 1,
  "per_page": 50
}

Błędy

Każda porażka zwraca ten sam kształt, ze stabilną code Możesz się rozgałęzić. Nie dopasowuj do odczytu ludzkiego error tekst, który może być przeredagowany.

Odpowiedź na błąd
{
  "success": false,
  "code": "missing_scope",
  "error": "API key missing required scope. Needed one of: tickets.read, admin",
  "request_id": "req_8f2c1a9d4b7e"
}
missing_api_key / invalid_api_key

Nie wysłano żadnego klucza, lub klucz jest zły lub wygasł. HTTP 401.

missing_scope

Klucz jest poprawny, ale brak zakresu tego działania. HTTP 403.

read_only_key / action_restricted

Klucz jest tylko read-, lub tej akcji nie ma na swojej liście uprawnień. HTTP 403.

unknown_action

Nie ma takiej akcji. Zawołaj meta. actions dla bieżącej listy. HTTP 400.

missing_parameter / invalid_parameter

Wymagany parametr jest nieobecny lub wartość nie jest akceptowana. HTTP 400.

not_found

Zapis nie istnieje, lub nie jest w miejscu pracy ten klucz może zobaczyć. HTTP 404.

plan_feature_locked

Twój plan nie zawiera funkcji tej akcji należy do. feature, the plan_name obowiązujące i upgrade_url. Pobieranie nie pomoże; plan musi się zmienić. HTTP 402.

license_required

Licencja instalacji nie jest aktywna, więc żadne działanie nie będzie działać do momentu jej przywrócenia. HTTP 402.

selling_paused

Specyfika dla handlu: sklep ma sprzedaż wyłączona, więc nic nie można cytować lub zamówić. HTTP 400.

rate_limited

Limit godzinowy tego klucza jest używany. HTTP 429.

server_error

Coś nam się nie udało request_id identyfikuje próbę, jeśli trzeba zgłosić. HTTP 500.

Bezpieczne powtórki

Jeśli czas zapisu się nie można stwierdzić, czy wylądował. idempotency_key i powtarzanie tego samego połączenia zwraca wynik pierwotny zamiast wykonać pracę dwa razy.

Idemstrong write
{
  "action": "tickets.reply",
  "ticket_id": 4192,
  "body": "Thanks, that is now fixed.",
  "idempotency_key": "your-unique-id-for-this-attempt"
}
Jak długo to trwa

Klucz jest zapamiętywany dla 24 godzin przed tym samym działaniem oraz API Klucz.

Co dostaniesz z powrotem

Oryginalna odpowiedź, plus idempotent_replay: prawda, więc można powiedzieć, że to była powtórka.

Nieprawidłowości pozostają do odzyskania

Tylko udane teksty są zapamiętywane. Jeśli połączenie nie powiodło się, wysyłanie go ponownie z tym samym kluczem uruchamia go ponownie, co jest tym czego chcesz.

Odczyty

Czytanie ignoruje klucz. Powtarzanie odczytu jest nieszkodliwe.

Test bez zmiany niczego

Dodaj dry_run: true do każdego zapisu. Twój klucz, zakresy i parametry są sprawdzane dokładnie tak jak normalnie, a następnie połączenie zatrzymuje się przed cokolwiek jest tworzone lub zmienione.

Suchy bieg: zweryfikować referencje i ładunek bezpiecznie
{
  "action": "tickets.update",
  "ticket_id": 4192,
  "status": "closed",
  "dry_run": true
}

{
  "success": true,
  "dry_run": true,
  "would_execute": true,
  "message": "Authorised and validated. No write was performed because dry_run was set."
}
Użyj dry_run podczas budowania. Jest to najszybszy sposób, aby potwierdzić klucz ma odpowiednie zakresy i ładunek jest kształtowany prawidłowo, bez tworzenia danych testowych trzeba następnie posprzątać.

Limity stawek

Limit klucza

Konfigurowalny limit godzinowy na API klucz (domyślnie 1000 żądania na godzinę). Ustaw go na klucz pod ustawieniami,API Kluczyki.

W przypadku przekroczenia

HTTP 429 z kodem rate_limited, plus Retri- After nagłówek mówi ile sekund czekać. Limit resetuje się w górnej części następnej godziny zegara.

Wiedząc, gdzie stoisz

Każda odpowiedź zawiera X- RateLimit- Limit, X- RateLimits- Remainning i X- Related Rate- Reset (znacznik czasu Unix). Oglądaj Remaining i zwolnij zanim uciekniesz zamiast czekać na odmowę.

Mówienie 429 od 401

A 429 oznacza czekać i spróbować ponownie. A 401 oznacza, że sam klucz jest zły lub przeterminowany, więc ponowna próba nie pomoże, dopóki nie naprawisz klucza.

Strażnik brutalnej siły przedautu

Wielokrotne próby niepowodzenia z jednego IP są zaciśnięte oddzielnie.

Najlepsze praktyki

Odwal się, gdy pozostanie niskie, i honorować Retri- Po 429 zamiast ponownie próbuje natychmiast.

Wersje i stabilność

Aktualna wersja

v1. Każda odpowiedź niesie X-OpsIQ-API- Wersja i X-OpsIQ-API- Status, żebyś mógł potwierdzić to, z czym rozmawiasz.

Jak was ostrzegą?

Jeśli wersja jest kiedykolwiek na emeryturze, odpowiedzi uzyskać standardowe nagłówki Deprecation i Sunset, a meta. actions raporty zdepregatowane i sunset_at. Sprawdź te w monitorowaniu i nigdy nie będzie zaskoczony.

Co się nie zmieni?

Istniejące nazwy akcji, ich parametry i kody błędów. Nowe działania i nowe opcjonalne pola mogą być dodawane w dowolnym momencie, więc ignoruj pola nie rozpoznają się raczej niż nie.

Kompletna integracja, zacznij kończyć

To jest cała pętla: znajdź pracę, przeczytaj ją, działaj na nią i potwierdź to, co zrobiłeś.

Pełny przepływ biletów przez API
# 1. Discover what this install offers and what each action needs.
POST /api/v1.php
{"action":"meta.actions"}

# 2. Find the urgent open tickets.
POST /api/v1.php
Authorization: Bearer opq_your_api_key
{"action":"tickets.list","status":"open","priority":"urgent","per_page":25}

# 3. Read one, including its conversation history.
{"action":"tickets.get","ticket_id":4192}

# 4. Reply, safely enough to retry if the network drops.
{"action":"tickets.reply","ticket_id":4192,
 "body":"We have issued the refund.","idempotency_key":"reply-4192-attempt-1"}

# 5. Close it.
{"action":"tickets.update","ticket_id":4192,"status":"closed"}

# 6. Page through anything larger: keep going until has_more is false.
{"action":"tickets.list","page":2,"per_page":50}
💡
Wszystko powyżej działa w ten sam sposób dla rozmów: konwersations. list, conversationsget, convensation. send i conversadions. update podążają za identycznym wzorem, parametrami i kształtem odpowiedzi.

Więcej sprawdzonych przykładów

Każdy z nich jest kompletnym, nieusuwalnym fragmentem prawdziwej integracji.

Strona w każdym rekordzie, w trzech językach

Zasada jest taka sama wszędzie: poprosić o następną stronę aż has_more Nigdy nie zgaduj.

Python · strona przez każdy otwarty bilet
import requests

API  = "https://your-opsiq-domain.com/api/v1.php"
HEAD = {"Authorization": "Bearer opq_your_api_key"}

def every(action, **params):
    """Yield every record for a list action, one page at a time."""
    page = 1
    while True:
        r = requests.post(API, headers=HEAD,
                          json={"action": action, "page": page, "per_page": 200, **params},
                          timeout=30)
        r.raise_for_status()
        body = r.json()
        if not body.get("success"):
            raise RuntimeError(f"{body.get('code')}: {body.get('error')}")
        yield from body.get("items", [])
        if not body.get("has_more"):
            return
        page += 1

for ticket in every("tickets.list", status="open"):
    print(ticket["ticket_number"], ticket["subject"])
Node. js - strona przez każdy trop
const API = "https://your-opsiq-domain.com/api/v1.php";
const HEAD = { Authorization: "Bearer opq_your_api_key", "Content-Type": "application/json" };

async function* every(action, params = {}) {
  for (let page = 1; ; page++) {
    const res  = await fetch(API, {
      method: "POST",
      headers: HEAD,
      body: JSON.stringify({ action, page, per_page: 200, ...params }),
    });
    const body = await res.json();
    if (!body.success) throw new Error(`${body.code}: ${body.error}`);
    yield* body.items ?? [];
    if (!body.has_more) return;
  }
}

for await (const contact of every("crm.contacts.list", { status: "lead" })) {
  console.log(contact.email);
}
PHP - strona przez każdy otwarty bilet
<?php
$api = "https://your-opsiq-domain.com/api/v1.php";

function opsiq(string $action, array $params = []): array {
    global $api;
    $ch = curl_init($api);
    curl_setopt_array($ch, [
        CURLOPT_POST           => true,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_HTTPHEADER     => [
            "Authorization: Bearer opq_your_api_key",
            "Content-Type: application/json",
        ],
        CURLOPT_POSTFIELDS => json_encode(["action" => $action] + $params),
        CURLOPT_TIMEOUT    => 30,
    ]);
    $body = json_decode((string)curl_exec($ch), true) ?: [];
    curl_close($ch);
    if (empty($body["success"])) {
        throw new RuntimeException(($body["code"] ?? "error") . ": " . ($body["error"] ?? "unknown"));
    }
    return $body;
}

$page = 1;
do {
    $res = opsiq("tickets.list", ["status" => "open", "page" => $page, "per_page" => 200]);
    foreach ($res["items"] as $t) {
        echo $t["ticket_number"], " ", $t["subject"], PHP_EOL;
    }
    $page++;
} while (!empty($res["has_more"]));

Poradź sobie z każdą porażką, którą API może zwrócić

Oddział code, nigdy na temat brzmienia errorTo opakowanie jest cały kontrakt w jednej funkcji.

Python · klient, który prawidłowo obsługuje każdy kod błędu
import time, requests

RETRYABLE = {"server_error", "handler_unavailable"}

def call(action, **params):
    for attempt in range(4):
        r = requests.post(API, headers=HEAD, json={"action": action, **params}, timeout=30)
        body = r.json()
        if body.get("success"):
            return body

        code = body.get("code")

        if code == "rate_limited":
            # Honour Retry-After rather than guessing.
            time.sleep(int(r.headers.get("Retry-After", 60)))
            continue

        if code in RETRYABLE:
            time.sleep(2 ** attempt)
            continue

        # Everything below is permanent: retrying cannot fix it.
        if code == "plan_feature_locked":
            raise RuntimeError(f"Plan {body['plan_name']} lacks {body['feature']}: {body['upgrade_url']}")
        if code in ("missing_scope", "read_only_key", "action_restricted"):
            raise RuntimeError(f"This API key cannot do that: {body['error']}")
        if code in ("invalid_api_key", "missing_api_key"):
            raise RuntimeError("The key is wrong or expired; retrying will not help.")
        raise RuntimeError(f"{code}: {body.get('error')} (request_id {body.get('request_id')})")

    raise RuntimeError("Gave up after repeated retries")

Odpowiedz na złe wyniki satysfakcji w ciągu godziny

Przeczytaj niskie wyniki, otwórz bilet dla każdego i nigdy nie działaj na tym samym dwa razy.

Zamknij pętlę na nieszczęśliwych klientów
# 1. Yesterday's detractors.
POST /api/v1.php
{"action":"tickets.csat.list","filters":{"max_rating":2},"days":1,"per_page":100}

# 2. For each one, open a follow-up ticket. The idempotency key is derived
#    from the response id, so re-running the job creates nothing twice.
POST /api/v1.php
{"action":"tickets.open",
 "customer_email":"[email protected]",
 "subject":"Following up on your feedback",
 "body":"We saw your rating and want to put it right.",
 "priority":"high",
 "idempotency_key":"csat-followup-8821"}

# 3. The same shape works for chat: conversations.ratings.list with
#    {"filters":{"max_stars":2},"days":1} returns the comment, what
#    prompted the rating and which agent it is credited to.

Cytuj przedmiot i działaj na podstawie odpowiedzi kupca

Odmowa, która mówi ci co zbierać
POST /api/v1.php
{"action":"commerce.quotes.create","source":"whmcs","item_id":"47","quantity":1}

# The merchant needs more from the customer before it can price this:
{
  "success": false,
  "code": "quote_refused",
  "error": "We need the domain this hosting plan is for.",
  "actionable": true,
  "missing": ["domain"]
}

# Ask the customer for exactly what "missing" names, then quote again.
POST /api/v1.php
{"action":"commerce.quotes.create","source":"whmcs","item_id":"47",
 "fields":{"domain":"example.ng"}}

{
  "success": true,
  "source": "whmcs",
  "quote": {
    "quote_id": "…",
    "totals": { "total": { "amount_minor": 306027, "currency": "NGN" }, "currency": "NGN" },
    "expires_at": "2026-09-05T12:34:56+00:00"
  },
  "ordering": { "creates_order": false, "confirm_via_api": false }
}
⚠️
Pokaż klientowi totals.total Dokładnie tak jak zwrócone. Ilość nie zawsze mnoży cenę jednostkową - hotel cytuje jeden pokój na trzy noce - więc licznik, który obliczysz może się różnić od tego, co kupiec faktycznie będzie pobierał.

Odbiornik hakowy, który jest bezpieczny w produkcji

Sprawdź, de- duplikat, szybko odpowiedz, a następnie wykonaj pracę. Dostawy ponownie spróbować, więc to samo wydarzenie może dotrzeć więcej niż raz.

PHP · odbiornik haka webowego w kształcie produkcyjnym
<?php
// (verification exactly as in the Webhooks section, omitted here for brevity)

$event    = json_decode($raw, true);
$name     = $_SERVER["HTTP_X_OPSIQ_EVENT"] ?? ($event["event"] ?? "");
$delivery = $_SERVER["HTTP_X_OPSIQ_DELIVERY"] ?? "";

// 1. Already seen this delivery? Say OK and stop — do not redo the work.
if ($db->alreadyProcessed($delivery)) {
    http_response_code(200);
    exit(json_encode(["ok" => true, "duplicate" => true]));
}

// 2. Answer FAST. Anything slow belongs on your own queue: OpsIQ treats a
//    timeout as a failure and will retry the whole delivery.
$db->markProcessed($delivery);
$queue->push($name, $event);

http_response_code(200);
echo json_encode(["ok" => true]);

// 3. Your worker then routes on the event name.
//    conversation.rated        -> alert the team on a 1 or 2 star rating
//    ticket.created            -> mirror into your own helpdesk
//    crm.deal.won              -> post to #sales-alerts
//    commerce.payment.confirmed-> release the order in your fulfilment system

Plany i uprawnienia

Każda akcja należy do funkcji produktu, a plan decyduje jakie funkcje masz. Jeśli Twój plan nie zawiera funkcji, działania odpowiedzi 402 - po sprawdzeniu klucza, więc nieuwierzytelniony dzwoniący nie dowiaduje się nic o twoim planie, a zanim cokolwiek zostanie stworzone, tak zablokowany zapis nigdy nie ma miejsca.

Działanie zablokowane planowaniem
{
  "success": false,
  "code": "plan_feature_locked",
  "feature": "commerce",
  "plan_locked": true,
  "plan_name": "Growth",
  "upgrade_url": "https://…",
  "request_id": "req_8f2c1a9d4b7e"
}
Jak odróżnić go od problemu uprawnień

A403oznacza, że KLUCZOŚĆ jest zbyt wąska - ponownie wystawić ją z odpowiednim zakresem i działa.402oznacza, że RACHUNK nie posiada funkcji - żaden klucz nie może go odblokować, plan musi się zmienić.

Nie należy ponownie próbować 402

Nie jest przemijający. upgrade_url do właściciela konta, zamiast się wycofać i spróbować ponownie.

Zakres admin nie omija go

Skaperzy wyrażają to, co główny emitent delegowany; plan wyraża to, czego nabywa konto. Klucz admingowany nadal otrzymuje 402 za funkcję, której nie ma w planie.

Dowiedz się przed statkiem

W feature Każdy z potrzeb działania jest opublikowany w katalogu działań poniżej i w meta.action, więc można sprawdzić w czasie budowy zamiast odkrywania go w produkcji.

Najszybszy sposób, aby zobaczyć dokładnie gdzie znajduje się klucz jest meta.me. Raporty planu w mocy, każdej cechy, którą niesie, i każde działanie ten klucz nie może zadzwonić z powodu każdego.

meta. me - co ten klucz może właściwie zrobić
POST /api/v1.php
Authorization: Bearer opq_your_api_key

{"action":"meta.me"}

{
  "success": true,
  "key": { "name": "Reporting", "scopes": ["tickets.read"], "permissions_mode": "read_only" },
  "plan": { "name": "Growth", "features": { "ticket_system": true, "commerce": false } },
  "capabilities": {
    "available_action_count": 812,
    "blocked_actions": {
      "commerce.orders.list": "plan_locked:commerce",
      "tickets.reply":        "read_only"
    }
  }
}
Zadzwoń meta. me najpierw, gdy integracja zachowuje się inaczej między dwoma instalacjami. Odpowiada "dlaczego ten klucz nie może zrobić" w jednym wniosku, bez nikogo otwierającego admin.

Cytowanie ceny

commerce.quotes.create ceny jednego elementu dla jednego klienta. To tworzy nic - bez zamówienia, nie sesji płatności, brak akcji - więc jest bezpieczny do połączenia podczas gdy klient nadal decyduje.

Cytuj element
POST /api/v1.php
Authorization: Bearer opq_your_api_key

# Your own Store
{"action":"commerce.quotes.create","source":"store","item_id":"12","quantity":2}

# A connected merchant platform, priced for a known customer
{"action":"commerce.quotes.create","source":"whmcs","item_id":"47",
 "fields":{"domain":"example.ng"},
 "customer":{"connector_customer_id":"1042"}}
Kupiec wygrywa

Dla połączonej platformy, suma pochodzi od tego kupca i nigdy nie jest ponownie obliczona tutaj. Ilość nie zawsze mnoży cenę jednostkową - hotel cytuje jeden pokój na trzy noce - więc pokaż całkowitą ilość, którą otrzymałeś, a nie taką, którą wypracowałeś.

Odrzuceni mówią ci, czego brakuje.

Jeśli kupiec potrzebuje więcej od klienta, masz quote_refused o missing listę nazw pól do zbierania, i własne sformułowania kupca do pokazania.

Zamawianie nie jest wywołaniem API

Cytat jest orientacyjny. Potwierdzenie dzieje się tam, gdzie klient - podpisane karty w czacie, lub własny czek kupca - nigdy przez ten API. Odpowiedź mówi tak w ordering.

W przypadku gdy sprzedaż jest wstrzymana

Jeśli sklep ma wyłączoną sprzedaż, cytując odpowiedzi selling_paused Zamiast wyceniać coś, czego nikt nie może kupić.

Pozostałe punkty końcowe

Prawie wszystko czego potrzebujesz to jeden list gończy /api/v1.phpTo są wyjątki i po co każdy z nich.

/api/v1/openapi.php · /api/v1/postman.php · /api/docs/

Nie trzeba kluczy, więc możesz je zbadać zanim będziesz miał.

/api/ai_stream.php

Serwer- wysłane zdarzenia dla odpowiedzi czatu na żywo, jak są one generowane. Strumień, a nie działanie JSON.

/api/writing.php

Starsze AI- pisanie punkt końcowy. Wszystko, co robi jest również dostępny jako writing.* działania na /api/v1.php,, które są miejscem, gdzie nowe prace powinny iść.

/api/inbox_copilot.php

Projekt, przeredagowanie i triage dla skrzynki biletu osadzone w swoim własnym admin.

/api/v1/si/…

Wywiad witryny jako mały REST API - strony, pełzają, problemy, słowa kluczowe, przychody - dla rurociągów CI, które chcą rozpocząć czołganie po wdrożeniu i przeczytać wynik.

/api/connectors.php?slug=&token=

Gdzie podłączona platforma POST jest do Ciebie własnych haczyków. Gniazdo jest wybity, gdy włączysz złącze.

/api/integrations/*.php

Silnik integracyjny: uruchamia i potwierdza działania oraz połyka wydarzenia sprzedaży, tożsamości i podróży. Wykorzystuje swój własny typ klucza, wydany pod API & Webhook builder.

💡
Wszystkie te są zgodne z tymi samymi zasadami planu, co działania. Cechą twój plan nie zawiera odpowiedzi 402 tutaj również, w tym samym kształcie.

Każde działanie, z zakresem którego jest ono potrzebne

Lista ta jest generowana z katalogu, więc zawsze pasuje do wersji, na której jesteś. meta.actions zwraca te same informacje co JSON.

2418 named actions: 804 reads, 1614 writes and 69 scopes. Every registered administrator JSON operation has a stable named action. OpenAPI: /api/v1/openapi.php. Postman: /api/v1/postman.php. Contract quality: declared_dynamic: 604; explicit: 63; route_inferred: 1633; source_inferred: 118.

administration (25)

administration.2fa.disable

Write. Scope: administration.write, admin. Contract: route_inferred. Admin 2fa Disable

administration.2fa.enable

Write. Scope: administration.write, admin. Contract: route_inferred. Admin 2fa Enable

administration.2fa.recovery.regenerate

Write. Scope: administration.write, admin. Contract: route_inferred. Admin 2fa Recovery Regenerate

administration.2fa.setup

Read. Scope: administration.read, admin. Contract: route_inferred. Admin 2fa Setup

administration.2fa.status

Read. Scope: administration.read, admin. Contract: declared_dynamic. Admin 2fa Status

administration.ai.train.from.reply

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Ai Train From Reply

administration.brain.cancel

Write. Scope: administration.write, admin. Contract: declared_dynamic. Admin Brain Cancel

administration.brain.view

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Brain View

administration.chat.access.check

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Chat Access Check

administration.chat.create.ticket.on.behalf

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Chat Create Ticket On Behalf

administration.chat.draft.ticket.from.thread

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Chat Draft Ticket From Thread

administration.conv.delete

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv Delete

administration.conv.get

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv Get

administration.conv.list

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv List

administration.conv.new

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv New

administration.conv.save

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv Save

administration.notification.prefs.get

Read. Scope: administration.read, admin. Contract: declared_dynamic. Admin Notification Prefs Get

administration.notification.prefs.save

Write. Scope: administration.write, admin. Contract: declared_dynamic. Admin Notification Prefs Save

administration.notifications.list

Read. Scope: administration.read, admin. Contract: route_inferred. Admin Notifications List

administration.notifications.mark.all.read

Write. Scope: administration.write, admin. Contract: declared_dynamic. Admin Notifications Mark All Read

administration.notifications.mark.read

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Notifications Mark Read

administration.notifications.pulse

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Notifications Pulse

administration.online.list

Read. Scope: administration.read, admin. Contract: declared_dynamic. Admin Online List

administration.presence.ping

Write. Scope: administration.write, admin. Contract: declared_dynamic. Admin Presence Ping

administration.realtime.token

Write. Scope: administration.write, admin. Contract: route_inferred. Admin Realtime Token

analityka (43)

analytics.add.widget

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Add Widget

analytics.analytics.connectors.catalog

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Analytics Connectors Catalog

analytics.analytics.data

Read. Scope: analytics.read, admin. Contract: route_inferred. Analytics Data

analytics.analytics.export

Read. Scope: analytics.read, admin. Contract: route_inferred. Analytics Export

analytics.analytics.export.csv

Read. Scope: analytics.read, admin. Contract: route_inferred. Analytics Export Csv

analytics.analytics.import

Write. Scope: analytics.write, admin. Contract: route_inferred. Analytics Import

analytics.analytics.report

Write. Scope: analytics.write, admin. Contract: route_inferred. Analytics Report

analytics.analytics.segments.delete

Write. Scope: analytics.write, admin. Contract: route_inferred. Analytics Segments Delete

analytics.analytics.segments.list

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Analytics Segments List

analytics.analytics.segments.save

Write. Scope: analytics.write, admin. Contract: route_inferred. Analytics Segments Save

analytics.analytics.status

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Analytics Status

analytics.clear.all

Write. Scope: analytics.write, admin. Contract: declared_dynamic. Replay Clear All

analytics.compute

Read. Scope: analytics.read, admin. Contract: route_inferred. Funnels Compute

analytics.create

Write. Scope: analytics.write, admin. Contract: route_inferred. Ab Test Create

analytics.create.route.dashboard.create

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Create

analytics.create.route.report.create

Write. Scope: analytics.write, admin. Contract: route_inferred. Report Create

analytics.delete

Write. Scope: analytics.write, admin. Contract: route_inferred. Ab Test Delete

analytics.delete.route.dashboard.delete

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Delete

analytics.delete.route.funnels.delete

Write. Scope: analytics.write, admin. Contract: route_inferred. Funnels Delete

analytics.delete.route.report.delete

Write. Scope: analytics.write, admin. Contract: route_inferred. Report Delete

analytics.events

Read. Scope: analytics.read, admin. Contract: route_inferred. Replay Events

analytics.export

Read. Scope: analytics.read, admin. Contract: source_inferred. Analytics Export

analytics.get

Read. Scope: analytics.read, admin. Contract: route_inferred. Dashboard Get

analytics.layout.save

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Layout Save

analytics.list

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Ab Test List

analytics.list.route.dashboard.list

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Dashboard List

analytics.list.route.funnels.list

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Funnels List

analytics.list.route.report.list

Read. Scope: analytics.read, admin. Contract: declared_dynamic. Report List

analytics.remove.widget

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Remove Widget

analytics.rename

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Rename

analytics.results

Read. Scope: analytics.read, admin. Contract: route_inferred. Ab Test Results

analytics.save

Write. Scope: analytics.write, admin. Contract: route_inferred. Funnels Save

analytics.save.widgets

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Save Widgets

analytics.scheduled.list

Read. Scope: analytics.read, admin. Contract: explicit. List scheduled analytics reports for an operator Required fields: admin_id.

analytics.sections.list

Read. Scope: analytics.read, admin. Contract: explicit. List analytics report sections and date presets

analytics.send.now

Write. Scope: analytics.write, admin. Contract: route_inferred. Report Send Now

analytics.sessions

Read. Scope: analytics.read, admin. Contract: route_inferred. Replay Sessions

analytics.step.visitors

Read. Scope: analytics.read, admin. Contract: route_inferred. Funnels Step Visitors

analytics.timeline

Read. Scope: analytics.read, admin. Contract: route_inferred. Replay Timeline

analytics.toggle.shared

Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Toggle Shared

analytics.update

Write. Scope: analytics.write, admin. Contract: route_inferred. Ab Test Update

analytics.update.route.report.update

Write. Scope: analytics.write, admin. Contract: route_inferred. Report Update

analytics.widget.data

Read. Scope: analytics.read, admin. Contract: route_inferred. Dashboard Widget Data

automations (6)

automations.actions.list

Read. Scope: automations.read, admin. Contract: explicit. List integration actions

automations.delete

Write. Scope: automations.write, admin. Contract: route_inferred. Workflow Delete

automations.list

Read. Scope: automations.read, admin. Contract: route_inferred. Workflow List

automations.runs.list

Read. Scope: automations.read, admin. Contract: explicit. List automation execution history

automations.save

Write. Scope: automations.write, admin. Contract: route_inferred. Workflow Save

automations.triggers.list

Read. Scope: automations.read, admin. Contract: explicit. List integration triggers

czat (40)

chat.call.start

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Call Start

chat.cobrowse.send

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Cobrowse Send

chat.feedback

Read. Scope: chat.read, admin. Contract: route_inferred. Chat Feedback

chat.feedback.digest

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Feedback Digest

chat.form.delete

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Form Delete

chat.form.get

Read. Scope: chat.read, admin. Contract: route_inferred. Chat Form Get

chat.form.list

Read. Scope: chat.read, admin. Contract: declared_dynamic. Chat Form List

chat.form.save

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Form Save

chat.form.set.default

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Form Set Default

chat.meeting.decide

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Decide

chat.meeting.outcome.set

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Outcome Set

chat.meeting.type.delete

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Type Delete

chat.meeting.type.save

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Type Save

chat.meeting.types.list

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Types List

chat.meetings.list

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meetings List

chat.online.admins

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Online Admins

chat.permissions.list

Write. Scope: admin. Contract: route_inferred. Chat Permissions List

chat.permissions.revoke

Write. Scope: admin. Contract: route_inferred. Chat Permissions Revoke

chat.permissions.save

Write. Scope: admin. Contract: route_inferred. Chat Permissions Save

chat.permissions.upload.avatar

Write. Scope: admin. Contract: route_inferred. Chat Permissions Upload Avatar

chat.reaction.toggle

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Reaction Toggle

chat.saved_replies.add

Write. Scope: chat.write, admin. Contract: source_inferred. Chat Saved Replies Add Retry-safe with idempotency_key.

chat.saved_replies.list

Read. Scope: chat.read, admin. Contract: explicit. List workspace and personal saved replies

chat.saved_replies.save

Write. Scope: chat.write, admin. Contract: source_inferred. Chat Saved Replies Save Retry-safe with idempotency_key.

chat.set.persona

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Set Persona

chat.snooze.clear

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Snooze Clear

chat.snooze.set

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Snooze Set

chat.transfer.thread

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Transfer Thread

chat.transfer.unread

Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Transfer Unread

chat.typing.preview

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Typing Preview

chat.whisper.ai.summary

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Ai Summary

chat.whisper.controls

Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Whisper Controls

chat.whisper.delete.room

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Delete Room

chat.whisper.list

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper List

chat.whisper.mentions

Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Whisper Mentions

chat.whisper.rooms

Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Whisper Rooms

chat.whisper.save.controls

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Save Controls

chat.whisper.send

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Send

chat.whisper.targets

Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Whisper Targets

chat.whisper.unread

Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Unread

handel (11)

commerce.analytics.snapshot

Read. Scope: commerce.read, analytics.read, admin. Contract: explicit. Read privacy-safe storefront analytics

commerce.orders.get

Read. Scope: commerce.read, admin. Contract: explicit. Get one Store order with its line items

commerce.orders.list

Read. Scope: commerce.read, admin. Contract: explicit. List Store orders in the bound workspace

commerce.pages.list

Read. Scope: commerce.read, admin. Contract: explicit. List storefront pages and promotional modals

commerce.products.get

Read. Scope: commerce.read, admin. Contract: explicit. Get one Store product with its variants Required fields: product_id.

commerce.products.list

Read. Scope: commerce.read, admin. Contract: explicit. List Store products in the bound workspace

commerce.quotes.create

Write. Scope: commerce.write, admin. Contract: explicit. Quote an item for a customer (creates nothing) Required fields: source, item_id. Retry-safe with idempotency_key.

commerce.readiness.get

Read. Scope: commerce.read, admin. Contract: explicit. Check whether the storefront can launch

commerce.refunds.list

Read. Scope: commerce.read, admin. Contract: explicit. List Store refund requests in the bound workspace

commerce.storefront.catalog.get

Read. Scope: commerce.read, admin. Contract: explicit. Discover Store themes, designs, blocks and promotional shells

commerce.storefront.get

Read. Scope: commerce.read, admin. Contract: explicit. Get the bound workspace storefront configuration

communications (21)

communications.auth.check

Read. Scope: admin. Contract: route_inferred. Email Auth Check

communications.campaign.delete

Write. Scope: communications.write, admin. Contract: route_inferred. Push Campaign Delete

communications.campaign.save

Write. Scope: communications.write, admin. Contract: route_inferred. Push Campaign Save

communications.campaign.send

Write. Scope: communications.write, admin. Contract: route_inferred. Push Campaign Send

communications.campaigns.list

Read. Scope: communications.read, admin. Contract: declared_dynamic. Push Campaigns List

communications.drafts.delete

Write. Scope: communications.write, admin. Contract: route_inferred. Email Drafts Delete

communications.drafts.list

Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Drafts List

communications.drafts.save

Write. Scope: communications.write, admin. Contract: route_inferred. Email Drafts Save

communications.drafts.send

Write. Scope: communications.write, admin. Contract: route_inferred. Email Drafts Send

communications.mailboxes.delete

Write. Scope: communications.write, admin. Contract: route_inferred. Email Mailboxes Delete

communications.mailboxes.list

Read. Scope: communications.read, admin. Contract: route_inferred. Email Mailboxes List

communications.mailboxes.poll

Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Mailboxes Poll

communications.mailboxes.save

Write. Scope: communications.write, admin. Contract: route_inferred. Email Mailboxes Save

communications.mailboxes.test

Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Mailboxes Test

communications.pipe.regen.token

Write. Scope: communications.write, admin. Contract: declared_dynamic. Email Pipe Regen Token

communications.platform.list

Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Platform List

communications.platform.send

Write. Scope: communications.write, admin. Contract: route_inferred. Email Platform Send

communications.settings.get

Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Settings Get

communications.settings.save

Write. Scope: communications.write, admin. Contract: route_inferred. Email Settings Save

communications.settings.test

Read. Scope: communications.read, admin. Contract: route_inferred. Email Settings Test

communications.vapid.generate

Write. Scope: communications.write, admin. Contract: declared_dynamic. Push Vapid Generate

connector_builder (11)

connector_builder.export

Read. Scope: connector_builder.read, admin. Contract: explicit. Export a generated connector Required fields: slug.

connector_builder.generate

Write. Scope: connector_builder.write, admin. Contract: route_inferred. Generate a connector package Required fields: spec.

connector_builder.get

Read. Scope: connector_builder.read, admin. Contract: route_inferred. Load a Builder specification Required fields: slug.

connector_builder.import.curl

Write. Scope: connector_builder.write, admin. Contract: route_inferred. Import cURL into Connector Builder

connector_builder.import.openapi

Write. Scope: connector_builder.write, admin. Contract: route_inferred. Import OpenAPI into Connector Builder

connector_builder.import.postman

Write. Scope: connector_builder.write, admin. Contract: route_inferred. Import Postman into Connector Builder

connector_builder.list

Read. Scope: connector_builder.read, admin. Contract: declared_dynamic. List Builder connectors

connector_builder.profiles

Read. Scope: connector_builder.read, connectors.read, admin. Contract: source_inferred. List Connector Builder profiles and capability contracts

connector_builder.test

Write. Scope: connector_builder.write, admin. Contract: route_inferred. Run Builder conformance tests Required fields: slug.

connector_builder.update

Write. Scope: connector_builder.write, admin. Contract: route_inferred. Update a generated connector Required fields: slug, spec.

connector_builder.validate

Read. Scope: connector_builder.read, admin. Contract: route_inferred. Validate a Builder specification Required fields: spec.

connectors (51)

connectors.action

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Action

connectors.backfill

Write. Scope: connectors.write, admin. Contract: route_inferred. Start connector backfill Required fields: slug.

connectors.backfill.route.connectors.backfill

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Backfill

connectors.backfill.status

Read. Scope: connectors.read, admin. Contract: route_inferred. Read connector backfill status Required fields: slug.

connectors.backfill.status.route.connectors.backfill.status

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Backfill Status

connectors.builder.ai.actions

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Ai Actions

connectors.builder.ai.draft

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Ai Draft

connectors.builder.ai.handler

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Ai Handler

connectors.builder.ai.map

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Ai Map

connectors.builder.delete

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Delete

connectors.builder.dry.run

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Dry Run

connectors.builder.generate

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Generate

connectors.builder.import.curl

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Import Curl

connectors.builder.import.openapi

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Import Openapi

connectors.builder.import.postman

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Import Postman

connectors.builder.list

Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connectors Builder List

connectors.builder.load

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Load

connectors.builder.marketplace.apply

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Marketplace Apply

connectors.builder.marketplace.link

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Marketplace Link

connectors.builder.marketplace.status

Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connectors Builder Marketplace Status

connectors.builder.marketplace.submit

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Marketplace Submit

connectors.builder.schema

Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connectors Builder Schema

connectors.builder.test

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Test

connectors.builder.test.action

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Test Action

connectors.builder.update

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Update

connectors.builder.validate

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Validate

connectors.contacts.import

Write. Scope: connectors.write, admin. Contract: route_inferred. Connector Contacts Import

connectors.contract

Read. Scope: connectors.read, connector_builder.read, admin. Contract: source_inferred. Read the canonical connector capability contract

connectors.customers.sync

Write. Scope: connectors.write, admin. Contract: route_inferred. Synchronize connector customers Required fields: slug.

connectors.disable

Write. Scope: connectors.write, admin. Contract: route_inferred. Disable a connector Required fields: slug.

connectors.disable.route.connectors.disable

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Disable

connectors.email.account.department

Read. Scope: connectors.read, admin. Contract: route_inferred. Connector Email Account Department

connectors.email.account.remove

Write. Scope: connectors.write, admin. Contract: route_inferred. Connector Email Account Remove

connectors.email.account.routing

Read. Scope: connectors.read, admin. Contract: route_inferred. Connector Email Account Routing

connectors.enable

Write. Scope: connectors.write, admin. Contract: route_inferred. Enable a connector Required fields: slug.

connectors.enable.route.connectors.enable

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Enable

connectors.get

Read. Scope: connectors.read, admin. Contract: source_inferred. Connectors Get

connectors.get.route.connectors.get

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Get

connectors.install

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Install

connectors.integrity.scan

Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connector Integrity Scan

connectors.list

Read. Scope: connectors.read, admin. Contract: explicit. List installed connectors and capabilities

connectors.list.route.connectors.list

Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connectors List

connectors.oauth.start

Write. Scope: connectors.write, admin. Contract: route_inferred. Connector Oauth Start

connectors.settings.get

Read. Scope: connectors.read, admin. Contract: route_inferred. Read connector settings Required fields: slug.

connectors.settings.save

Write. Scope: connectors.write, admin. Contract: route_inferred. Save connector settings Required fields: slug, settings.

connectors.shared.oauth.delete

Write. Scope: connectors.write, admin. Contract: route_inferred. Connector Shared Oauth Delete

connectors.sync.customers

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Sync Customers

connectors.test

Read. Scope: connectors.read, admin. Contract: source_inferred. Connectors Test

connectors.test.route.connectors.test

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Test

connectors.uninstall

Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Uninstall

connectors.workflow.recipes

Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Workflow Recipes

conversations (38)

conversations.ai.draft

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Ai Draft

conversations.ai.rewrite

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Ai Rewrite

conversations.archive

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Archive

conversations.assign

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Assign

conversations.assignees

Write. Scope: conversations.write, admin. Contract: declared_dynamic. Admin Client Chat Assignees

conversations.bulk

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Bulk

conversations.clear

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Clear

conversations.clear.all

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Clear All

conversations.customer.tickets

Write. Scope: conversations.write, admin. Contract: declared_dynamic. Admin Client Chat Customer Tickets

conversations.decline

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Decline

conversations.delete

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Delete

conversations.delete.last

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Delete Last

conversations.edit.last

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Edit Last

conversations.export

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Export

conversations.forget.visitor

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Forget Visitor

conversations.get

Read. Scope: conversations.read, admin. Contract: source_inferred. Conversations Get

conversations.history

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat History

conversations.list

Read. Scope: conversations.read, admin. Contract: source_inferred. Conversations List

conversations.messages

Read. Scope: conversations.read, admin. Contract: source_inferred. Conversations Messages

conversations.ratings.list

Read. Scope: conversations.read, admin. Contract: explicit. List rated Client Chat conversations

conversations.resolve

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Resolve

conversations.saved.replies

Write. Scope: conversations.write, admin. Contract: declared_dynamic. Admin Client Chat Saved Replies

conversations.saved.reply.add

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Saved Reply Add

conversations.saved.reply.ai.generate

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Saved Reply Ai Generate

conversations.saved.reply.delete

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Saved Reply Delete

conversations.saved.reply.save

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Saved Reply Save

conversations.send

Write. Scope: conversations.write, admin. Contract: source_inferred. Conversations Send Retry-safe with idempotency_key.

conversations.send.route.admin.client.chat.send

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Send

conversations.tags.set

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Tags Set

conversations.thread

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Thread

conversations.threads

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Threads

conversations.toggle

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Toggle

conversations.toggle.attachments

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Toggle Attachments

conversations.toggle.call.button

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Toggle Call Button

conversations.typing

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Typing

conversations.unarchive

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Unarchive

conversations.update

Write. Scope: conversations.write, admin. Contract: explicit. Update a conversation status, assignment or subject Retry-safe with idempotency_key.

conversations.upload

Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Upload

crm (260)

crm.ab.results

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Ab Results

crm.access.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Access Set

crm.access_log.list

Read. Scope: admin. Contract: source_inferred. Crm Access Log List

crm.account.health

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Account Health

crm.account.health.board

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Account Health Board

crm.account.health.refresh

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Account Health Refresh

crm.account.plan.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Account Plan Get

crm.account.plan.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Account Plan Save

crm.account.plans.due

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Account Plans Due

crm.account.timeline

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Account Timeline

crm.activities.list

Read. Scope: crm.read. Contract: explicit. List CRM contact activities

crm.activities.record

Write. Scope: crm.write. Contract: explicit. Record a CRM contact activity Required fields: contact_id, activity_type. Retry-safe with idempotency_key.

crm.activity.feed

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Activity Feed

crm.agent.toggle

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Agent Toggle

crm.ai.policy.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Ai Policy Get

crm.ai.policy.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Ai Policy Save

crm.ai.policy.simulate

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Ai Policy Simulate

crm.ai.trace

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Ai Trace

crm.approval.decide

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Decide

crm.approval.delegate.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Delegate Set

crm.approval.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Approval List

crm.approval.policy.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Policy Get

crm.approval.policy.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Policy Save

crm.approval.settings

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Settings

crm.approve.apply

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Approve Apply

crm.approve.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Approve List

crm.approve.reject

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Approve Reject

crm.approve.update

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Approve Update

crm.ask

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Ask

crm.assign.owner

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Assign Owner

crm.assignment.get

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Assignment Get

crm.assignment.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Assignment Save

crm.attachment.delete

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Attachment Delete

crm.attachment.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Attachment List

crm.attachment.upload

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Attachment Upload

crm.autobook.meeting

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Autobook Meeting

crm.autodeal.mode

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Autodeal Mode

crm.book.meeting

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Book Meeting

crm.booking.link.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Booking Link Save

crm.booking.links.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Booking Links List

crm.build.apply

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Build Apply

crm.build.get

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Build Get

crm.build.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Build List

crm.build.plan

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Build Plan

crm.build.rollback

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Build Rollback

crm.bulk

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Bulk

crm.bundle.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Bundle Set

crm.calendar.status

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Calendar Status

crm.capture.status

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Capture Status

crm.comm.policy.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Comm Policy Get

crm.comm.policy.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Comm Policy Save

crm.command.snapshot

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Command Snapshot

crm.companies.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Companies List

crm.company.hierarchy

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Company Hierarchy

crm.company.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Company Save

crm.company.set.parent

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Company Set Parent

crm.company.suggest.related

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Company Suggest Related

crm.connectors.catalog

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Connectors Catalog

crm.consent_log.list

Read. Scope: crm.read. Contract: source_inferred. Crm Consent Log List

crm.contact.churn

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Contact Churn

crm.contact.draft.email

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contact Draft Email

crm.contact.enrich

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contact Enrich

crm.contact.propose.email

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contact Propose Email

crm.contacts.detail

Read. Scope: crm.read. Contract: source_inferred. Crm Contacts Detail

crm.contacts.erase

Write. Scope: admin. Contract: source_inferred. Crm Contacts Erase Retry-safe with idempotency_key.

crm.contacts.export

Read. Scope: crm.read. Contract: source_inferred. Crm Contacts Export

crm.contacts.import.list

Read. Scope: crm.read. Contract: source_inferred. Crm Contacts Import List

crm.contacts.import.run

Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Import Run Retry-safe with idempotency_key.

crm.contacts.list

Read. Scope: crm.read. Contract: source_inferred. Crm Contacts List

crm.contacts.next_action

Read. Scope: crm.read. Contract: source_inferred. Crm Contacts Next Action

crm.contacts.open_chat

Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Open Chat Retry-safe with idempotency_key.

crm.contacts.open_ticket

Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Open Ticket Retry-safe with idempotency_key.

crm.contacts.resync

Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Resync Retry-safe with idempotency_key.

crm.contacts.save

Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Save Retry-safe with idempotency_key.

crm.contacts.send_email

Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Send Email Retry-safe with idempotency_key.

crm.contacts.upsert

Write. Scope: crm.write. Contract: explicit. Crm Contacts Upsert Required fields: email. Retry-safe with idempotency_key.

crm.contract.amend

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contract Amend

crm.contract.price.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contract Price Set

crm.contract.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contract Save

crm.contract.usage

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contract Usage

crm.contracts.list

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contracts List

crm.conversation.intel

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Conversation Intel

crm.conversions.goals.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Conversions Goals Delete Retry-safe with idempotency_key.

crm.conversions.goals.list

Read. Scope: crm.read. Contract: source_inferred. Crm Conversions Goals List

crm.conversions.goals.save

Write. Scope: crm.write. Contract: source_inferred. Crm Conversions Goals Save Retry-safe with idempotency_key.

crm.conversions.list

Read. Scope: crm.read. Contract: source_inferred. Crm Conversions List

crm.conversions.record

Write. Scope: crm.write. Contract: source_inferred. Crm Conversions Record Retry-safe with idempotency_key.

crm.create.video.meeting

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Create Video Meeting

crm.customer.auto.sync

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Customer Auto Sync

crm.customer.auto.sync.status

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Customer Auto Sync Status

crm.customer.emails

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Customer Emails

crm.customer.payments

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Customer Payments

crm.data.steward.bulk.propose

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Data Steward Bulk Propose

crm.data.steward.inbox

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Data Steward Inbox

crm.data.steward.propose

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Data Steward Propose

crm.deal.advance

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Deal Advance

crm.deal.coach

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Deal Coach

crm.deal.coach.action

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Deal Coach Action

crm.deal.get

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Deal Get

crm.deal.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Deal Save

crm.deal.splits.get

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Deal Splits Get

crm.deal.splits.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Deal Splits Set

crm.deals.advance

Write. Scope: crm.write. Contract: explicit. Advance a CRM deal to another stage Required fields: deal_id, stage_id. Retry-safe with idempotency_key.

crm.deals.create

Write. Scope: crm.write. Contract: explicit. Create a CRM deal Required fields: title. Retry-safe with idempotency_key.

crm.deals.detail

Read. Scope: crm.read. Contract: explicit. Get one CRM deal Required fields: deal_id.

crm.deals.list

Read. Scope: crm.read. Contract: explicit. List CRM deals

crm.deals.list.route.crm.deals.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Deals List

crm.deals.update

Write. Scope: crm.write. Contract: explicit. Update a CRM deal Required fields: deal_id. Retry-safe with idempotency_key.

crm.detail

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Detail

crm.draft.outreach

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Draft Outreach

crm.enrich.account

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Enrich Account

crm.erase

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Erase

crm.events.catalog

Read. Scope: crm.read. Contract: explicit. List subscribable CRM domain events

crm.events.list

Read. Scope: crm.read. Contract: explicit. List durable CRM domain events

crm.export

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Export

crm.export.all

Read. Scope: crm.read, admin. Contract: route_inferred. Contact Export All

crm.field.add

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Field Add

crm.field.policy.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Field Policy Get

crm.field.policy.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Field Policy Save

crm.field.remove

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Field Remove

crm.fields.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Fields List

crm.forecast.board

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Forecast Board

crm.forecast.snapshot

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Forecast Snapshot

crm.form.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Form Save

crm.forms.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Forms List

crm.health.repair.catalog

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Health Repair Catalog

crm.health.smoke

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Health Smoke

crm.health.snapshot

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Health Snapshot

crm.home.persona.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Home Persona Set

crm.identity.rules.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Identity Rules Get

crm.identity.rules.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Identity Rules Save

crm.import.list

Read. Scope: crm.read, admin. Contract: route_inferred. Contact Import List

crm.import.run

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Import Run

crm.inbound.activity

Read. Scope: crm.read. Contract: source_inferred. Crm Inbound Activity

crm.inbound.endpoints.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Inbound Endpoints Delete Retry-safe with idempotency_key.

crm.inbound.endpoints.list

Read. Scope: crm.read. Contract: source_inferred. Crm Inbound Endpoints List

crm.inbound.endpoints.save

Write. Scope: crm.write. Contract: source_inferred. Crm Inbound Endpoints Save Retry-safe with idempotency_key.

crm.inbound.endpoints.test

Write. Scope: crm.write. Contract: source_inferred. Crm Inbound Endpoints Test Retry-safe with idempotency_key.

crm.leaderboard

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Leaderboard

crm.lifecycle.evaluate

Write. Scope: crm.write. Contract: source_inferred. Crm Lifecycle Evaluate Retry-safe with idempotency_key.

crm.lifecycle.rules.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Lifecycle Rules Delete Retry-safe with idempotency_key.

crm.lifecycle.rules.list

Read. Scope: crm.read. Contract: source_inferred. Crm Lifecycle Rules List

crm.lifecycle.rules.save

Write. Scope: crm.write. Contract: source_inferred. Crm Lifecycle Rules Save Retry-safe with idempotency_key.

crm.list

Read. Scope: crm.read, admin. Contract: route_inferred. Contacts List

crm.mailbox.status

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Mailbox Status

crm.meeting.book

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Meeting Book

crm.meeting.cancel

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Meeting Cancel

crm.meeting.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Meeting List

crm.meeting.reschedule.accept

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Meeting Reschedule Accept

crm.meeting.reschedule.reject

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Meeting Reschedule Reject

crm.merge

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Merge

crm.message.send

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Message Send

crm.messaging.provider.delete

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Messaging Provider Delete

crm.messaging.provider.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Messaging Provider Save

crm.messaging.provider.test

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Messaging Provider Test

crm.messaging.status

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Messaging Status

crm.next.action

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Next Action

crm.object.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Object Save

crm.objects.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Objects List

crm.offline.pull

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Offline Pull

crm.offline.push

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Offline Push

crm.open.chat

Read. Scope: crm.read, admin. Contract: route_inferred. Contact Open Chat

crm.open.ticket

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Open Ticket

crm.outreach.campaigns.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Campaigns Delete Retry-safe with idempotency_key.

crm.outreach.campaigns.list

Read. Scope: crm.read. Contract: source_inferred. Crm Outreach Campaigns List

crm.outreach.campaigns.save

Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Campaigns Save Retry-safe with idempotency_key.

crm.outreach.campaigns.send

Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Campaigns Send Retry-safe with idempotency_key.

crm.outreach.send

Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Send Retry-safe with idempotency_key.

crm.outreach.templates.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Templates Delete Retry-safe with idempotency_key.

crm.outreach.templates.list

Read. Scope: crm.read. Contract: source_inferred. Crm Outreach Templates List

crm.outreach.templates.preview

Read. Scope: crm.read. Contract: source_inferred. Crm Outreach Templates Preview

crm.outreach.templates.save

Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Templates Save Retry-safe with idempotency_key.

crm.payments.status

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Payments Status

crm.pipeline.data

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Pipeline Data

crm.price.resolve

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Price Resolve

crm.pricebook.entry.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Pricebook Entry Set

crm.pricebook.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Pricebook Save

crm.pricebooks.list

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Pricebooks List

crm.privacy_settings.get

Read. Scope: crm.read. Contract: source_inferred. Crm Privacy Settings Get

crm.privacy_settings.save

Write. Scope: admin. Contract: source_inferred. Crm Privacy Settings Save Retry-safe with idempotency_key.

crm.product.archive

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Product Archive

crm.product.revenue

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Product Revenue

crm.product.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Product Save

crm.products.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Products List

crm.propose.meeting

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Propose Meeting

crm.propose.outreach

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Propose Outreach

crm.prospecting.dashboard

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Prospecting Dashboard

crm.prospecting.icp.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Prospecting Icp Save

crm.prospecting.import

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Prospecting Import

crm.prospecting.research

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Prospecting Research

crm.prospecting.score

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Prospecting Score

crm.prospecting.sequence

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Prospecting Sequence

crm.qualification.checklist.get

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Qualification Checklist Get

crm.qualification.checklist.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Qualification Checklist Save

crm.quota.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Quota Save

crm.quote.get

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Quote Get

crm.quote.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Quote Save

crm.quotes.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Quotes List

crm.record.delete

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Delete

crm.record.fields.get

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Record Fields Get

crm.record.fields.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Fields Save

crm.record.get

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Record Get

crm.record.history

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Record History

crm.record.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Save

crm.record.share.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Share Set

crm.record.share.unset

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Share Unset

crm.record.shares

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Shares

crm.records.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Records List

crm.restore.email.consent

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Restore Email Consent

crm.resync.from.platform

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Resync From Platform

crm.retention.catalog

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Retention Catalog

crm.revert

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Revert

crm.runtime.policy.get

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Runtime Policy Get

crm.runtime.policy.remote.wipe

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Runtime Policy Remote Wipe

crm.runtime.policy.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Runtime Policy Save

crm.save

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Save

crm.scoring.rule.ai

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Scoring Rule Ai

crm.scoring.rule.delete

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Scoring Rule Delete

crm.scoring.rule.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Scoring Rule List

crm.scoring.rule.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Scoring Rule Save

crm.segments.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Segments Delete Retry-safe with idempotency_key.

crm.segments.list

Read. Scope: crm.read. Contract: source_inferred. Crm Segments List

crm.segments.members

Read. Scope: crm.read. Contract: source_inferred. Crm Segments Members

crm.segments.preview

Read. Scope: crm.read. Contract: source_inferred. Crm Segments Preview

crm.segments.save

Write. Scope: crm.write. Contract: source_inferred. Crm Segments Save Retry-safe with idempotency_key.

crm.segments.suggestions.accept

Write. Scope: crm.write. Contract: source_inferred. Crm Segments Suggestions Accept Retry-safe with idempotency_key.

crm.segments.suggestions.dismiss

Write. Scope: crm.write. Contract: source_inferred. Crm Segments Suggestions Dismiss Retry-safe with idempotency_key.

crm.segments.suggestions.list

Read. Scope: crm.read. Contract: source_inferred. Crm Segments Suggestions List

crm.semantic.search

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Semantic Search

crm.send.email

Write. Scope: crm.write, admin. Contract: route_inferred. Contact Send Email

crm.send.email.route.crm.send.email

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Send Email

crm.send.for.signature

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Send For Signature

crm.send.payment.link

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Send Payment Link

crm.sequence.action

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Sequence Action

crm.sequence.runs

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Sequence Runs

crm.setup.status

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Setup Status

crm.sharing.rules.get

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Sharing Rules Get

crm.sharing.rules.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Sharing Rules Save

crm.subject.registry

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Subject Registry

crm.subscriptions.list

Read. Scope: crm.read, admin. Contract: route_inferred. Crm Subscriptions List

crm.subscriptions.rollup

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Subscriptions Rollup

crm.subscriptions.sync

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Subscriptions Sync

crm.task.create

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Task Create

crm.tasks.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Tasks List

crm.team.parent.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Team Parent Set

crm.team.rules.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Team Rules Set

crm.team.save

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Team Save

crm.teams.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Teams List

crm.territory.set

Write. Scope: crm.write, admin. Contract: route_inferred. Crm Territory Set

crm.video.status

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Video Status

crm.views.delete

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Views Delete

crm.views.list

Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Views List

crm.views.save

Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Views Save

crm.webhooks.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Webhooks Delete Retry-safe with idempotency_key.

crm.webhooks.list

Read. Scope: crm.read. Contract: explicit. List CRM outbound webhook endpoints and recent deliveries

crm.webhooks.save

Write. Scope: crm.write. Contract: source_inferred. Crm Webhooks Save Retry-safe with idempotency_key.

crm.webhooks.test

Write. Scope: crm.write. Contract: source_inferred. Crm Webhooks Test Retry-safe with idempotency_key.

crm.workflows.delete

Write. Scope: crm.write. Contract: source_inferred. Crm Workflows Delete Retry-safe with idempotency_key.

crm.workflows.list

Read. Scope: crm.read. Contract: source_inferred. Crm Workflows List

crm.workflows.save

Write. Scope: crm.write. Contract: source_inferred. Crm Workflows Save Retry-safe with idempotency_key.

klienci (44)

customers.analyze

Write. Scope: customers.write, journey.write, admin. Contract: route_inferred. Analyze a customer journey with AI Required fields: client_id.

customers.behaviour

Read. Scope: admin. Contract: route_inferred. Cdp Behaviour

customers.behaviour.analyze

Write. Scope: admin. Contract: route_inferred. Cdp Behaviour Analyze

customers.chat.embed.backfill

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Embed Backfill

customers.chat.embed.status

Read. Scope: customers.read, admin. Contract: declared_dynamic. Client Chat Embed Status

customers.chat.faq.ai.generate

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Ai Generate

customers.chat.faq.approve.all

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Approve All

customers.chat.faq.delete

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Delete

customers.chat.faq.delete.all

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Faq Delete All

customers.chat.faq.export

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Faq Export

customers.chat.faq.generate

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Generate

customers.chat.faq.import

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Import

customers.chat.faq.list

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq List

customers.chat.faq.save

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Save

customers.chat.faq.set.help

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Set Help

customers.chat.faq.set.help.all

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Set Help All

customers.chat.faq.status

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Status

customers.chat.grant.upload

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Grant Upload

customers.chat.help.set.slug

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Help Set Slug

customers.chat.knowledge.crawl.step

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Crawl Step

customers.chat.knowledge.delete

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Delete

customers.chat.knowledge.delete.all

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Knowledge Delete All

customers.chat.knowledge.delete.duplicates

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Knowledge Delete Duplicates

customers.chat.knowledge.duplicates

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Knowledge Duplicates

customers.chat.knowledge.export.json

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Knowledge Export Json

customers.chat.knowledge.import.json

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Import Json

customers.chat.knowledge.preview

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Preview

customers.chat.knowledge.recrawl

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Recrawl

customers.chat.knowledge.test.url

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Test Url

customers.chat.revoke.upload

Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Revoke Upload

customers.chat.upload.agent.avatar

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Upload Agent Avatar

customers.chat.upload.ai.avatar

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Upload Ai Avatar

customers.chat.upload.icon

Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Upload Icon

customers.client.analyze

Write. Scope: admin. Contract: route_inferred. Cdp Client Analyze

customers.client.delete

Write. Scope: admin. Contract: route_inferred. Cdp Client Delete

customers.client.export

Write. Scope: admin. Contract: route_inferred. Cdp Client Export

customers.client.journey

Read. Scope: admin. Contract: route_inferred. Cdp Client Journey

customers.client.prepare.outreach

Write. Scope: customers.write, admin. Contract: route_inferred. Cdp Client Prepare Outreach

customers.clients.list

Read. Scope: admin. Contract: route_inferred. Cdp Clients List

customers.detail

Read. Scope: customers.read, admin. Contract: route_inferred. Client Detail

customers.get

Read. Scope: customers.read, crm.read, admin. Contract: route_inferred. Get a customer profile Required fields: client_id.

customers.journey

Read. Scope: customers.read, journey.read, admin. Contract: route_inferred. Get a complete customer journey Required fields: client_id.

customers.list

Read. Scope: customers.read, crm.read, admin. Contract: route_inferred. List known customers

customers.outreach.prepare

Write. Scope: customers.write, crm.write, admin. Contract: route_inferred. Prepare CRM outreach for a customer Required fields: client_id.

departments (1)

departments.list

Read. Scope: departments.read, admin. Contract: source_inferred. Departments List

e-mail (2)

email.template.send

Write. Scope: email.write, admin. Contract: source_inferred. Send one governed workspace email template Required fields: template, to. Retry-safe with idempotency_key.

email.templates.list

Read. Scope: email.read, admin. Contract: source_inferred. List email templates available to this workspace

engagement (163)

engagement.ab.autowinner

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ab Autowinner

engagement.ab.bandit

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ab Bandit

engagement.address.get

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Address Get

engagement.address.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Address Save

engagement.ai.agent

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Agent

engagement.ai.analyze

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Analyze

engagement.ai.compile.profile

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Compile Profile

engagement.ai.copy

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Copy

engagement.ai.critique

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Critique

engagement.ai.decide

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Decide

engagement.ai.design

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Design

engagement.ai.edit

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Edit

engagement.ai.generate

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Generate

engagement.ai.ideas

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Ideas

engagement.ai.image

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Image

engagement.ai.image.edit

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Image Edit

engagement.ai.localize

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Localize

engagement.ai.logo

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Logo

engagement.ai.media.jobs

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Media Jobs

engagement.ai.narrative

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Narrative

engagement.ai.responsive

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Responsive

engagement.ai.variants

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Variants

engagement.ai.video.start

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Video Start

engagement.ai.video.status

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Video Status

engagement.approval.decide

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Approval Decide

engagement.approval.request

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Approval Request

engagement.approvals.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Approvals List

engagement.asset.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Asset Delete

engagement.asset.upload

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Asset Upload

engagement.assets.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Assets List

engagement.audience.materialize

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Audience Materialize

engagement.audience.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Audience Save

engagement.audience.test

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Audience Test

engagement.audit.export

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Audit Export

engagement.autoresponder.get

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Autoresponder Get

engagement.autoresponder.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Autoresponder Save

engagement.bank.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Bank Delete

engagement.bank.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Bank List

engagement.bank.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Bank Save

engagement.bank.used

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Bank Used

engagement.blackouts.get

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Blackouts Get

engagement.blackouts.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Blackouts Save

engagement.brand.kit.bootstrap

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Brand Kit Bootstrap

engagement.brand.kit.font.upload

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Brand Kit Font Upload

engagement.brand.kit.get

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Brand Kit Get

engagement.brand.kit.get.route.survey.brand.kit.get

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Brand Kit Get

engagement.brand.kit.save

Write. Scope: engagement.write, admin. Contract: declared_dynamic. Promo Brand Kit Save

engagement.brand.kit.save.route.survey.brand.kit.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Brand Kit Save

engagement.campaign.archive

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Archive

engagement.campaign.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Delete

engagement.campaign.duplicate

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Duplicate

engagement.campaign.get

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Get

engagement.campaign.launch

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Campaign Launch

engagement.campaign.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign List

engagement.campaign.pause

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Pause

engagement.campaign.preview

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Preview

engagement.campaign.publish

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Publish

engagement.campaign.rollback

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Rollback

engagement.campaign.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Save

engagement.campaign.save.route.survey.campaign.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Campaign Save

engagement.campaign.toggle

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Toggle

engagement.campaign.versions

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Versions

engagement.comment.add

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Comment Add

engagement.comments.add

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Comments Add

engagement.comments.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Comments Delete

engagement.comments.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Comments List

engagement.comments.list.route.survey.comments.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Comments List

engagement.comments.resolve

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Comments Resolve

engagement.connectors.catalog

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Connectors Catalog

engagement.coupon.providers

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Coupon Providers

engagement.coupons.clear

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Coupons Clear

engagement.coupons.stats

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Coupons Stats

engagement.coupons.upload

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Coupons Upload

engagement.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Announcement Delete

engagement.delete.route.tour.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Tour Delete

engagement.delivery.analytics

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Delivery Analytics

engagement.delivery.dashboard

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Delivery Dashboard

engagement.deployment.ab.promote

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Ab Promote

engagement.deployment.ab.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Ab Save

engagement.deployment.publish

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Publish

engagement.deployment.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Save

engagement.deployment.status

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Status

engagement.detail

Read. Scope: engagement.read, admin. Contract: route_inferred. Campaign Detail

engagement.digest.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Digest Save

engagement.feed.catalog

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Feed Catalog

engagement.feed.items

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Feed Items

engagement.geo.preview

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Geo Preview

engagement.idle.cron.set

Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Idle Cron Set

engagement.import.create

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Import Create

engagement.import.replay

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Import Replay

engagement.leads.export

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Leads Export

engagement.leads.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Leads List

engagement.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Announcements List

engagement.list.route.tours.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Tours List

engagement.module.set.ai.live

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Module Set Ai Live

engagement.module.set.custom.html

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Module Set Custom Html

engagement.module.set.enabled

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Module Set Enabled

engagement.module.status

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Module Status

engagement.onsite.preview

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Onsite Preview

engagement.pause.all

Write. Scope: engagement.write, admin. Contract: declared_dynamic. Promo Pause All

engagement.presence

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Presence

engagement.preview.share

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Preview Share

engagement.push.draft

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Push Draft

engagement.recipients.issue

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Recipients Issue

engagement.recipients.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Recipients List

engagement.recipients.revoke

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Recipients Revoke

engagement.response.detail

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Response Detail

engagement.responses.browse

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Responses Browse

engagement.rule.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Rule Delete

engagement.rule.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Rule Save

engagement.rule.stats

Read. Scope: engagement.read, admin. Contract: route_inferred. Proactive Rule Stats

engagement.rule.test

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Rule Test

engagement.rule.toggle

Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Rule Toggle

engagement.rules.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Proactive Rules List

engagement.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Announcement Save

engagement.save.route.tour.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Tour Save

engagement.stats

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Stats

engagement.stats.route.tour.stats

Read. Scope: engagement.read, admin. Contract: route_inferred. Tour Stats

engagement.studio.a11y

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio A11y

engagement.studio.ai.generate

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Ai Generate

engagement.studio.ai.insights

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Ai Insights

engagement.studio.ai.target

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Ai Target

engagement.studio.archive

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Archive

engagement.studio.assets

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Studio Assets

engagement.studio.create

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Create

engagement.studio.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Delete

engagement.studio.duplicate

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Duplicate

engagement.studio.event

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Studio Event

engagement.studio.get

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Studio Get

engagement.studio.governance

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Governance

engagement.studio.list

Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Studio List

engagement.studio.preview

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Studio Preview

engagement.studio.preview.link

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Studio Preview Link

engagement.studio.publish

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Publish

engagement.studio.rename

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Rename

engagement.studio.revert

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Revert

engagement.studio.save.draft

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Save Draft

engagement.studio.save.targeting

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Save Targeting

engagement.studio.set.active

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Set Active

engagement.studio.set.status

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Set Status

engagement.studio.template.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Template Delete

engagement.studio.template.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Template Save

engagement.studio.tpl.preview

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Tpl Preview

engagement.studio.upload

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Upload

engagement.studio.webhook

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Webhook

engagement.targeting.simulate

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Targeting Simulate

engagement.template.apply

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Template Apply

engagement.template.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Template List

engagement.template.save.custom

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Template Save Custom

engagement.toggle

Write. Scope: engagement.write, admin. Contract: route_inferred. Announcement Toggle

engagement.toggle.route.tour.toggle

Write. Scope: engagement.write, admin. Contract: route_inferred. Tour Toggle

engagement.trigger.set.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Trigger Set Save

engagement.variant.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Variant Delete

engagement.variant.list

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Variant List

engagement.variant.promote

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Variant Promote

engagement.variant.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Variant Save

engagement.version.compare

Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Version Compare

engagement.version.get

Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Version Get

engagement.version.label

Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Version Label

engagement.webhook.delete

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Delete

engagement.webhook.replay

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Replay

engagement.webhook.run

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Run

engagement.webhook.save

Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Save

feedback (8)

feedback.analytics

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Analytics

feedback.detractors

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Detractors

feedback.get

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Get

feedback.ingest

Write. Scope: feedback.write, admin. Contract: explicit. Ingest a feedback record or external review

feedback.list

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback List

feedback.overview

Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Overview

feedback.sources.list

Read. Scope: feedback.read, admin. Contract: explicit. List Voice of Customer feedback sources

feedback.update

Write. Scope: feedback.write, admin. Contract: source_inferred. Feedback Update Retry-safe with idempotency_key.

files (1)

files.get

Read. Scope: files.read, admin. Contract: source_inferred. Files Get

h (48)

hr.agent.incident.close

Write. Scope: hr.write, admin. Contract: route_inferred. Close an agent incident — the same act that lifts the suspension it caused Required fields: incident_uuid, resolution.

hr.agent.step

Write. Scope: hr.write, admin. Contract: route_inferred. Run one agent step: gate verdict, execution and outcome reported separately Required fields: run_uuid, agent_key, tool_key, jurisdiction, purpose.

hr.agent.step.status

Read. Scope: hr.read, admin. Contract: route_inferred. What actually happened at a step (permitted, executed, proven, failed, compensated) Required fields: run_uuid, seq.

hr.agent.takeover

Write. Scope: hr.write, admin. Contract: route_inferred. A human takes an agent run; no further agent steps are accepted Required fields: run_uuid.

hr.agent.tool.grant

Write. Scope: hr.write, admin. Contract: route_inferred. Grant an agent a tool for one jurisdiction and purpose, up to a risk ceiling Required fields: agent_key, tool_key, jurisdiction, max_risk, purpose.

hr.agent.tools

Read. Scope: hr.read, admin. Contract: declared_dynamic. List the registered typed tools an agent may use, and open agent incidents

hr.ai.corrections

Write. Scope: hr.write, admin. Contract: declared_dynamic. Bundle recent reviewer corrections into a dataset; it is pending privacy review and trains nothing

hr.ai.quality.overview

Read. Scope: hr.read, admin. Contract: declared_dynamic. The AI quality board: sampled defect rate, override pressure per workflow, coaching reception

hr.booking.slots_reconcile

Write. Scope: hr.write, admin. Contract: declared_dynamic. Release booking slots whose claim never became a booked meeting

hr.connectors.certify

Write. Scope: hr.write, admin. Contract: route_inferred. Certify an HR connector (scope sandbox|production; production demands provider-side proof under dual control) Required fields: connector_class, connector_key, scope, evidence, submitted_by.

hr.connectors.health

Read. Scope: hr.read, admin. Contract: route_inferred. One connector account's health: certification level and scope, last reconciliation verdict, failures and webhook backlog Required fields: account_uuid.

hr.decisions.appeals

Write. Scope: hr.write, admin. Contract: route_inferred. File an appeal against an AI decision on a person's behalf; it must be heard by an independent human Required fields: decision_uuid, subject_type, subject_id, grounds.

hr.decisions.explanation

Read. Scope: hr.read, admin. Contract: route_inferred. Plain-language explanation of one AI decision: what was looked at, which policy, and how to appeal Required fields: decision_uuid, audience.

hr.employee.provision

Write. Scope: hr.write, admin. Contract: route_inferred. Provision seatless employee access and send the invitation Required fields: person_uuid.

hr.employee.restore

Write. Scope: hr.write, admin. Contract: route_inferred. Lift an employee access suspension (written reason required) and provision again Required fields: person_uuid, reason.

hr.experience.metrics

Read. Scope: hr.read, admin. Contract: route_inferred. Measured persona experience metrics (self-service rate, decision cycle, coaching usefulness, quality) from live journeys

hr.global.readiness

Read. Scope: hr.read, admin. Contract: declared_dynamic. The whole launch picture: 15-gate leadership score, release readiness checks and jurisdiction coverage

hr.identity.facets

Read. Scope: hr.read, admin. Contract: route_inferred. List a person's identity facets and open conflicts Required fields: person_uuid.

hr.identity.link

Write. Scope: hr.write, admin. Contract: route_inferred. Link an identity facet to a person Required fields: person_uuid, facet_type, facet_key.

hr.interview.room.connect

Write. Scope: hr.write, admin. Contract: route_inferred. Connect the AI to interview media; refuses unless media really reaches the worker Required fields: media_uuid.

hr.interview.room.consent

Write. Scope: hr.write, admin. Contract: route_inferred. Record or withdraw consent for ONE interview purpose (recording, biometric_liveness, transcription) Required fields: media_uuid, purpose, state.

hr.interview.room.pause

Write. Scope: hr.write, admin. Contract: route_inferred. Pause a live interview Required fields: media_uuid.

hr.interview.room.provision

Write. Scope: hr.write, admin. Contract: route_inferred. Provision an interview room (a place to meet — NOT AI participation) Required fields: session_uuid, transport, accommodation_route.

hr.interview.room.state

Read. Scope: hr.read, admin. Contract: route_inferred. Read an interview room, including whether the AI is actually participating Required fields: media_uuid.

hr.interview.room.takeover

Write. Scope: hr.write, admin. Contract: route_inferred. A human takes the interview; the AI cannot speak in it again Required fields: media_uuid, reason.

hr.jurisdiction.capabilities

Read. Scope: hr.read, admin. Contract: route_inferred. What this product may do in one country, per feature, with the law behind each answer Required fields: code.

hr.jurisdiction.change.raise

Write. Scope: hr.write, admin. Contract: route_inferred. Report a change in the law; a high or critical one suspends every lane in that jurisdiction at once Required fields: pack_key, summary, severity.

hr.jurisdiction.coverage

Read. Scope: hr.read, admin. Contract: declared_dynamic. Computed coverage for every market: released pack, named counsel owner, cited sources, passing tests

hr.jurisdiction.explain

Read. Scope: hr.read, admin. Contract: route_inferred. Why an action about one person is allowed, reduced or blocked, with the rule and citation Required fields: person_uuid, feature.

hr.jurisdiction.pack.release

Write. Scope: hr.write, admin. Contract: route_inferred. Put a drafted policy pack into effect; refused without a named counsel owner and a cited law Required fields: release_uuid.

hr.learning.overview

Read. Scope: hr.read, admin. Contract: declared_dynamic. Read courses, paths and enrolments

hr.leave.overview

Read. Scope: hr.read, admin. Contract: declared_dynamic. Read leave types and requests

hr.lifecycle.lanes

Read. Scope: hr.read, admin. Contract: declared_dynamic. Every lifecycle lane with its mode, KPIs and whether a live tool path really exists behind it

hr.marketplace.overview

Read. Scope: hr.read, admin. Contract: declared_dynamic. Read HR connector accounts, conflicts and deliveries

hr.org.tree

Read. Scope: hr.read, admin. Contract: declared_dynamic. Read the organisation tree

hr.people.create

Write. Scope: hr.write, admin. Contract: route_inferred. Create an HR person Required fields: display_name.

hr.people.get

Read. Scope: hr.read, admin. Contract: route_inferred. Get one HR person Required fields: person_uuid.

hr.people.list

Read. Scope: hr.read, admin. Contract: declared_dynamic. List HR people

hr.people.update

Write. Scope: hr.write, admin. Contract: route_inferred. Update an HR person Required fields: person_uuid, display_name, primary_email.

hr.postings.list

Read. Scope: hr.read, admin. Contract: declared_dynamic. List job postings

hr.readiness.read

Read. Scope: hr.read, admin. Contract: declared_dynamic. Run the HR release readiness report

hr.release.verify

Write. Scope: hr.write, admin. Contract: declared_dynamic. Run the four HR release gates (schema, manifest, probe, readiness)

hr.requisitions.create

Write. Scope: hr.write, admin. Contract: route_inferred. Create a requisition Required fields: title, openings, justification.

hr.requisitions.list

Read. Scope: hr.read, admin. Contract: declared_dynamic. List requisitions

hr.thread.delete

Write. Scope: hr.write, admin. Contract: route_inferred. Delete a workforce conversation; refused while it is under legal hold Required fields: thread_uuid, reason.

hr.thread.legal_hold

Write. Scope: hr.write, admin. Contract: route_inferred. Place or lift a legal hold on a workforce conversation Required fields: thread_uuid, on, reason.

hr.thread.retention

Write. Scope: hr.write, admin. Contract: route_inferred. Set a conversation's retention class (standard|extended|permanent) Required fields: thread_uuid, retention_class.

hr.threads.retention_sweep

Write. Scope: hr.write, admin. Contract: declared_dynamic. Run the conversation retention sweep; legal holds are never swept

intent (6)

intent.clear

Write. Scope: intent.write, admin. Contract: declared_dynamic. Intent Clear

intent.funnel

Read. Scope: intent.read, analytics.read, admin. Contract: route_inferred. Read the intent funnel

intent.funnel.aggregate

Read. Scope: intent.read, admin. Contract: route_inferred. Intent Funnel Aggregate

intent.funnel.route.intent.funnel

Read. Scope: intent.read, admin. Contract: route_inferred. Intent Funnel

intent.summary

Read. Scope: intent.read, analytics.read, admin. Contract: route_inferred. Read intent summaries

intent.summary.route.intent.summary

Read. Scope: intent.read, admin. Contract: route_inferred. Intent Summary

kb (6)

kb.faq.delete

Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Delete Retry-safe with idempotency_key.

kb.faq.generate

Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Generate Retry-safe with idempotency_key.

kb.faq.import

Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Import Retry-safe with idempotency_key.

kb.faq.list

Read. Scope: kb.read, read, admin. Contract: source_inferred. Kb Faq List

kb.faq.save

Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Save Retry-safe with idempotency_key.

kb.faq.set_status

Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Set Status Retry-safe with idempotency_key.

knowledge (78)

knowledge.analytics.get

Read. Scope: kb.read, admin. Contract: route_inferred. Help Analytics Get

knowledge.analytics.toggle

Write. Scope: kb.write, admin. Contract: route_inferred. Help Analytics Toggle

knowledge.article.ai.refine

Read. Scope: kb.read, admin. Contract: route_inferred. Help Article Ai Refine

knowledge.article.class.bulk

Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Class Bulk

knowledge.article.delete

Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Delete

knowledge.article.publish

Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Publish

knowledge.article.save

Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Save

knowledge.article.set.category

Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Set Category

knowledge.article.set.public

Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Set Public

knowledge.articles.ai.generate

Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Ai Generate

knowledge.articles.bulk.delete

Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Bulk Delete

knowledge.articles.count

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Articles Count

knowledge.articles.get

Read. Scope: kb.read, admin. Contract: explicit. Get one Help Center article Required fields: article_id.

knowledge.articles.ids

Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Ids

knowledge.articles.list

Read. Scope: kb.read, admin. Contract: route_inferred. Help Articles List

knowledge.articles.set.public.all

Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Set Public All

knowledge.categories.ai.merge

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Categories Ai Merge

knowledge.categories.bulk.delete

Write. Scope: kb.write, admin. Contract: route_inferred. Help Categories Bulk Delete

knowledge.categories.list

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Categories List

knowledge.categories.merge.dupes

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Categories Merge Dupes

knowledge.category.delete

Write. Scope: kb.write, admin. Contract: route_inferred. Help Category Delete

knowledge.category.get

Read. Scope: kb.read, admin. Contract: route_inferred. Help Category Get

knowledge.category.save

Write. Scope: kb.write, admin. Contract: route_inferred. Help Category Save

knowledge.center.article.image.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Article Image Upload

knowledge.center.favicon.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Favicon Upload

knowledge.center.hero.dark.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Hero Dark Upload

knowledge.center.hero.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Hero Upload

knowledge.center.logo.dark.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Logo Dark Upload

knowledge.center.logo.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Logo Upload

knowledge.center.og.image.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Og Image Upload

knowledge.center.settings.get

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Center Settings Get

knowledge.center.settings.save

Write. Scope: kb.write, admin. Contract: route_inferred. Help Center Settings Save

knowledge.center.subhero.dark.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Subhero Dark Upload

knowledge.center.subhero.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Subhero Upload

knowledge.center.translate.estimate

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Translate Estimate

knowledge.center.translate.run

Write. Scope: kb.write, admin. Contract: route_inferred. Help Center Translate Run

knowledge.center.translate.status

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Center Translate Status

knowledge.center.translate.stop

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Translate Stop

knowledge.center.widget.hero.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Widget Hero Upload

knowledge.center.widget.icon.upload

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Widget Icon Upload

knowledge.comments.deliver.notifications

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Comments Deliver Notifications

knowledge.comments.moderate

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Comments Moderate

knowledge.comments.moderation.list

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Comments Moderation List

knowledge.import.batches

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Batches

knowledge.import.connectors

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Import Connectors

knowledge.import.csv.preview

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Import Csv Preview

knowledge.import.preview

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Preview

knowledge.import.resync

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Resync

knowledge.import.run

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Run

knowledge.import.undo

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Undo

knowledge.insights.generate

Write. Scope: kb.write, admin. Contract: route_inferred. Help Insights Generate

knowledge.insights.get

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Insights Get

knowledge.mark.reviewed

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Mark Reviewed

knowledge.missed.dismiss

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Missed Dismiss

knowledge.missed.draft.article

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Missed Draft Article

knowledge.missed.list

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Missed List

knowledge.missed.mark.published

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Missed Mark Published

knowledge.missed.refresh

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Missed Refresh

knowledge.organize.descriptions

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Organize Descriptions

knowledge.organize.status

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Organize Status

knowledge.organize.step

Write. Scope: kb.write, admin. Contract: route_inferred. Help Organize Step

knowledge.publish

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Publish

knowledge.reformat.revert

Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Reformat Revert

knowledge.reformat.status

Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Reformat Status

knowledge.reformat.step

Write. Scope: kb.write, admin. Contract: route_inferred. Help Reformat Step

knowledge.review.queue

Read. Scope: kb.read, admin. Contract: declared_dynamic. Kb Review Queue

knowledge.search.gaps

Read. Scope: kb.read, admin. Contract: declared_dynamic. Kb Search Gaps

knowledge.set.featured

Write. Scope: kb.write, admin. Contract: route_inferred. Help Set Featured

knowledge.set.visibility

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Set Visibility

knowledge.subdomain.allocate

Write. Scope: kb.write, admin. Contract: route_inferred. Help Subdomain Allocate

knowledge.subdomain.check

Read. Scope: kb.read, admin. Contract: route_inferred. Help Subdomain Check

knowledge.subdomain.release

Write. Scope: kb.write, admin. Contract: route_inferred. Help Subdomain Release

knowledge.taxonomy.organize

Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Taxonomy Organize

knowledge.taxonomy.status

Read. Scope: kb.read, admin. Contract: declared_dynamic. Kb Taxonomy Status

knowledge.taxonomy.step

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Taxonomy Step

knowledge.widget.categories

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Widget Categories

knowledge.widget.publish

Write. Scope: kb.write, admin. Contract: route_inferred. Kb Widget Publish

knowledge.widget.targets

Read. Scope: kb.read, admin. Contract: route_inferred. Kb Widget Targets

leads (6)

leads.delete

Write. Scope: leads.write, crm.write, admin. Contract: route_inferred. Delete a lead Required fields: lead_id.

leads.delete.route.lead.delete

Write. Scope: leads.write, admin. Contract: route_inferred. Lead Delete

leads.list

Read. Scope: leads.read, crm.read, admin. Contract: route_inferred. List leads

leads.stats

Read. Scope: leads.read, analytics.read, admin. Contract: declared_dynamic. Get lead statistics

leads.stats.route.leads.stats

Read. Scope: leads.read, admin. Contract: declared_dynamic. Leads Stats

leads.update

Write. Scope: leads.write, crm.write, admin. Contract: route_inferred. Update a lead Required fields: lead_id, status.

metanamount in units (real) (4)

meta.action

Read. Scope: none. Contract: explicit. Get one General API action contract Required fields: name.

meta.actions

Read. Scope: none. Contract: explicit. List the complete General API contract

meta.me

Read. Scope: none. Contract: explicit. Describe the authenticated API key and active workspace

meta.scopes

Read. Scope: none. Contract: explicit. List API scopes and the actions protected by each scope

notifications (1)

notifications.list

Read. Scope: notifications.read, admin. Contract: source_inferred. Notifications List

platforma (924)

platform.add.announcement

Write. Scope: platform.write, admin. Contract: declared_dynamic. Add Announcement

platform.add.kb.article

Write. Scope: platform.write, admin. Contract: route_inferred. Add Kb Article

platform.add.todo.item

Write. Scope: platform.write, admin. Contract: route_inferred. Add Todo Item

platform.ai.action.lookup

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Action Lookup

platform.ai.anomaly.detect

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Anomaly Detect

platform.ai.brain.add

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Add

platform.ai.brain.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Delete

platform.ai.brain.edit

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Edit

platform.ai.brain.list

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain List

platform.ai.brain.pin

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Pin

platform.ai.brain.status

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Status

platform.ai.chat

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Chat

platform.ai.confidence.stats

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Confidence Stats

platform.ai.context.lookup

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Context Lookup

platform.ai.daily.brief

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Daily Brief

platform.ai.daily.brief.check

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Daily Brief Check

platform.ai.daily.brief.dismiss

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Daily Brief Dismiss

platform.ai.daily.brief.fetch

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Daily Brief Fetch

platform.ai.eval.control.summary

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Control Summary

platform.ai.eval.feedback.queue

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Feedback Queue

platform.ai.eval.kb.gap.queue

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Kb Gap Queue

platform.ai.eval.load

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Load

platform.ai.eval.replay.history

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Eval Replay History

platform.ai.eval.run

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Eval Run

platform.ai.eval.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Eval Save

platform.ai.eval.score.answer

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Score Answer

platform.ai.eval.simulate

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Eval Simulate

platform.ai.feedback.analysis

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Feedback Analysis

platform.ai.feedback.stats

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Feedback Stats

platform.ai.history.archive

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Archive

platform.ai.history.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Clear All

platform.ai.history.delete

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Delete

platform.ai.history.export.csv

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Export Csv

platform.ai.history.get

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Get

platform.ai.history.list

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History List

platform.ai.history.stats

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Stats

platform.ai.insight.clear

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Insight Clear

platform.ai.insight.history

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Insight History

platform.ai.insight.report.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Insight Report Delete

platform.ai.insight.report.get

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Insight Report Get

platform.ai.instructions.compress

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Instructions Compress

platform.ai.instructions.connector.templates

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Instructions Connector Templates

platform.ai.instructions.example

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Instructions Example

platform.ai.instructions.load

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Instructions Load

platform.ai.instructions.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Instructions Preview

platform.ai.instructions.reset

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Instructions Reset

platform.ai.instructions.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Instructions Save

platform.ai.page.insights

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Page Insights

platform.ai.popup.regen

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Popup Regen

platform.ai.quality.view

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Quality View

platform.ai.reasoning.chain.get

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Reasoning Chain Get

platform.ai.score.lead

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Score Lead

platform.ai.smart.alerts

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Smart Alerts

platform.ai.spoke

Read. Scope: platform.read, admin. Contract: route_inferred. Ai Spoke

platform.ai.triage.accuracy

Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Triage Accuracy

platform.ai.whmcs.chat

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Whmcs Chat

platform.ai.writing

Write. Scope: platform.write, admin. Contract: route_inferred. Ai Writing

platform.api.keys.catalog

Read. Scope: admin. Contract: declared_dynamic. Api Keys Catalog

platform.api.keys.create

Write. Scope: admin. Contract: route_inferred. Api Keys Create

platform.api.keys.delete

Write. Scope: admin. Contract: route_inferred. Api Keys Delete

platform.api.keys.list

Read. Scope: admin. Contract: declared_dynamic. Api Keys List

platform.api.keys.revoke

Write. Scope: admin. Contract: route_inferred. Api Keys Revoke

platform.api.keys.update

Write. Scope: admin. Contract: route_inferred. Api Keys Update

platform.audit.export

Read. Scope: admin. Contract: route_inferred. Audit Export

platform.blocked

Write. Scope: platform.write, admin. Contract: route_inferred. Blocked

platform.campaigns

Read. Scope: platform.read, admin. Contract: declared_dynamic. Campaigns

platform.chart.browsers

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Browsers

platform.chart.countries

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Countries

platform.chart.devices

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Devices

platform.chart.hourly

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Hourly

platform.chart.new.returning

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart New Returning

platform.chart.os

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Os

platform.chart.sources

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Sources

platform.chart.visitors

Read. Scope: platform.read, admin. Contract: route_inferred. Chart Visitors

platform.chatbot.flow.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Delete

platform.chatbot.flow.get

Read. Scope: platform.read, admin. Contract: route_inferred. Chatbot Flow Get

platform.chatbot.flow.save

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Save

platform.chatbot.flow.stats

Read. Scope: platform.read, admin. Contract: route_inferred. Chatbot Flow Stats

platform.chatbot.flow.test.advance

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Test Advance

platform.chatbot.flow.test.start

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Test Start

platform.chatbot.flow.toggle

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Toggle

platform.chatbot.flows.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Chatbot Flows List

platform.chatbot.node.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Node Delete

platform.chatbot.node.save

Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Node Save

platform.chatbot.nodes.list

Read. Scope: platform.read, admin. Contract: route_inferred. Chatbot Nodes List

platform.clear.admin.chat.history

Write. Scope: platform.write, admin. Contract: declared_dynamic. Clear Admin Chat History

platform.command.center.view

Read. Scope: platform.read, admin. Contract: declared_dynamic. Command Center View

platform.commerce.actf.execute

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Actf Execute

platform.commerce.actf.policy.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Actf Policy Save

platform.commerce.actf.review

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Actf Review

platform.commerce.actf.simulate

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Actf Simulate

platform.commerce.analytics.report

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Analytics Report

platform.commerce.analytics.report.email

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Analytics Report Email

platform.commerce.autonomy.issue

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Autonomy Issue

platform.commerce.autonomy.status

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Autonomy Status

platform.commerce.collections.delete

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Collections Delete

platform.commerce.collections.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Collections Save

platform.commerce.customer.block

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Customer Block

platform.commerce.customer.credit.add

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Customer Credit Add

platform.commerce.customer.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Customer Save

platform.commerce.customers.list

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Customers List

platform.commerce.digital.codes.import

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Digital Codes Import

platform.commerce.digital.config.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Digital Config Save

platform.commerce.digital.file.upload

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Digital File Upload

platform.commerce.fulfilment.transition

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Fulfilment Transition

platform.commerce.intelligence.economics.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Intelligence Economics Save

platform.commerce.intelligence.market.price.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Intelligence Market Price Save

platform.commerce.intelligence.market.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Intelligence Market Save

platform.commerce.kit.apply

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Kit Apply

platform.commerce.kit.preview

Read. Scope: commerce.read, admin. Contract: route_inferred. Commerce Kit Preview

platform.commerce.kits.list

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Kits List

platform.commerce.launch.readiness

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Launch Readiness

platform.commerce.menu.ai.build

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Menu Ai Build

platform.commerce.menus.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Menus Save

platform.commerce.merchandising.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Merchandising Save

platform.commerce.onboarding.ai.draft

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Onboarding Ai Draft

platform.commerce.onboarding.apply

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Onboarding Apply

platform.commerce.option.sets.generate

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Option Sets Generate

platform.commerce.option.sets.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Option Sets Save

platform.commerce.option.templates

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Option Templates

platform.commerce.order.refundable

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Order Refundable

platform.commerce.order.ship

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Order Ship

platform.commerce.order.shipments

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Order Shipments

platform.commerce.orders.list

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Orders List

platform.commerce.orders.transition

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Orders Transition

platform.commerce.page.ai.draft

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Page Ai Draft

platform.commerce.page.ai.refine

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Page Ai Refine

platform.commerce.page.render

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Page Render

platform.commerce.pages.delete

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Pages Delete

platform.commerce.pages.list

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Pages List

platform.commerce.pages.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Pages Save

platform.commerce.price.advice

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Price Advice

platform.commerce.products.ai.copy

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Products Ai Copy

platform.commerce.products.bulk

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Bulk

platform.commerce.products.catalog.meta

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Products Catalog Meta

platform.commerce.products.delete

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Delete

platform.commerce.products.duplicate

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Duplicate

platform.commerce.products.export.csv

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Products Export Csv

platform.commerce.products.image.alt.ai

Read. Scope: commerce.read, admin. Contract: route_inferred. Commerce Products Image Alt Ai

platform.commerce.products.image.delete

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Image Delete

platform.commerce.products.image.update

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Products Image Update

platform.commerce.products.image.upload

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Image Upload

platform.commerce.products.images.list

Read. Scope: commerce.read, admin. Contract: route_inferred. Commerce Products Images List

platform.commerce.products.images.reorder

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Products Images Reorder

platform.commerce.products.import.csv

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Import Csv

platform.commerce.products.list

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Products List

platform.commerce.products.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Products Save

platform.commerce.refunds.complete.manual

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Refunds Complete Manual

platform.commerce.refunds.request

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Refunds Request

platform.commerce.returns.transition

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Returns Transition

platform.commerce.size.charts.delete

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Size Charts Delete

platform.commerce.size.charts.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Size Charts Save

platform.commerce.store.maturity

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Store Maturity

platform.commerce.storefront.brand.import

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Storefront Brand Import

platform.commerce.storefront.domain.remove

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Storefront Domain Remove

platform.commerce.storefront.domain.set

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Storefront Domain Set

platform.commerce.storefront.logo.upload

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Storefront Logo Upload

platform.commerce.storefront.page.ai.seo

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Storefront Page Ai Seo

platform.commerce.storefront.slug.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Storefront Slug Save

platform.commerce.variants.delete

Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Variants Delete

platform.commerce.variants.save

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Variants Save

platform.commerce.wallet.topup.refund

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Wallet Topup Refund

platform.commerce.wallet.topups.list

Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Wallet Topups List

platform.complete.todo.item

Write. Scope: platform.write, admin. Contract: route_inferred. Complete Todo Item

platform.consent.log.list

Read. Scope: platform.read, admin. Contract: route_inferred. Consent Log List

platform.countries

Read. Scope: platform.read, admin. Contract: declared_dynamic. Countries

platform.country.detail

Read. Scope: platform.read, admin. Contract: route_inferred. Country Detail

platform.custom.code.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Approve

platform.custom.code.disable

Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Disable

platform.custom.code.reject

Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Reject

platform.custom.code.rollback

Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Rollback

platform.custom.code.status

Read. Scope: platform.read, admin. Contract: route_inferred. Custom Code Status

platform.delete.todo.item

Write. Scope: platform.write, admin. Contract: route_inferred. Delete Todo Item

platform.devices

Read. Scope: platform.read, admin. Contract: declared_dynamic. Devices

platform.diag.check.resolutions

Read. Scope: platform.read, admin. Contract: declared_dynamic. Diag Check Resolutions

platform.diag.dismiss

Write. Scope: platform.write, admin. Contract: route_inferred. Diag Dismiss

platform.diag.event.taxonomy

Read. Scope: platform.read, admin. Contract: declared_dynamic. Diag Event Taxonomy

platform.diag.identity.restitch

Write. Scope: admin. Contract: declared_dynamic. Diag Identity Restitch

platform.diag.recheck

Write. Scope: platform.write, admin. Contract: route_inferred. Diag Recheck

platform.diag.recheck.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Diag Recheck All

platform.diag.report

Write. Scope: platform.write, admin. Contract: route_inferred. Diag Report

platform.diag.unmute

Write. Scope: platform.write, admin. Contract: route_inferred. Diag Unmute

platform.dismiss.credit.alert

Write. Scope: admin. Contract: route_inferred. Dismiss Credit Alert

platform.domain.knowledge.ai.generate

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Ai Generate

platform.domain.knowledge.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Delete

platform.domain.knowledge.list

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge List

platform.domain.knowledge.save

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Save

platform.domain.knowledge.toggle

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Toggle

platform.domain.verify.add

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Verify Add

platform.domain.verify.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Domain Verify List

platform.domain.verify.recheck

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Verify Recheck

platform.domain.verify.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Domain Verify Remove

platform.dynamic.action.dispatch

Write. Scope: platform.write, admin. Contract: route_inferred. Dynamic Action Dispatch

platform.events.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Events Clear All

platform.events.list

Read. Scope: platform.read, admin. Contract: route_inferred. Events List

platform.experiment.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Experiment Delete

platform.experiment.results

Read. Scope: platform.read, admin. Contract: route_inferred. Experiment Results

platform.experiment.save

Write. Scope: platform.write, admin. Contract: route_inferred. Experiment Save

platform.experiments.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Experiments Clear All

platform.experiments.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Experiments List

platform.failed.logins.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Failed Logins Clear All

platform.failed.logins.clear.history

Write. Scope: platform.write, admin. Contract: declared_dynamic. Failed Logins Clear History

platform.failed.logins.journey

Write. Scope: platform.write, admin. Contract: route_inferred. Failed Logins Journey

platform.failed.logins.list

Write. Scope: platform.write, admin. Contract: declared_dynamic. Failed Logins List

platform.failed.logins.unblock

Write. Scope: platform.write, admin. Contract: route_inferred. Failed Logins Unblock

platform.feedback.analysis.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Analysis Get

platform.feedback.analysis.run

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Analysis Run

platform.feedback.analytics.all

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics All

platform.feedback.analytics.detractors

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Detractors

platform.feedback.analytics.metrics

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Metrics

platform.feedback.analytics.overview

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Overview

platform.feedback.analytics.segments

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Segments

platform.feedback.analytics.sentiment

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Sentiment

platform.feedback.analytics.themes

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Themes

platform.feedback.analytics.trends

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Trends

platform.feedback.assignees.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Assignees List

platform.feedback.event.outbox.drain

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Event Outbox Drain

platform.feedback.exports.create

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Exports Create

platform.feedback.exports.get

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Exports Get

platform.feedback.external.review.ingest

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback External Review Ingest

platform.feedback.ingest.create

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Ingest Create

platform.feedback.items.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Assign

platform.feedback.items.evidence

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Items Evidence

platform.feedback.items.follow.up.complete

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Follow Up Complete

platform.feedback.items.follow.up.set

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Follow Up Set Required fields: bool.

platform.feedback.items.get

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Items Get

platform.feedback.items.list

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Items List

platform.feedback.items.mark.read

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Mark Read

platform.feedback.items.notes.add

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Notes Add

platform.feedback.items.set.priority

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Set Priority

platform.feedback.items.set.status

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Set Status

platform.feedback.items.tags.add

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Tags Add

platform.feedback.items.tags.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Tags Remove

platform.feedback.list

Read. Scope: platform.read, admin. Contract: route_inferred. Feedback List

platform.feedback.reconciliation

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reconciliation

platform.feedback.reports.delete

Write. Scope: platform.write, admin. Contract: declared_dynamic. Feedback Reports Delete

platform.feedback.reports.email

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reports Email

platform.feedback.reports.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reports Get

platform.feedback.reports.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reports List

platform.feedback.satisfaction.advice.last

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Satisfaction Advice Last

platform.feedback.satisfaction.advise

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Satisfaction Advise

platform.feedback.satisfaction.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Satisfaction Overview

platform.feedback.sources.health

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Sources Health

platform.feedback.sources.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Sources List

platform.feedback.sources.rebuild

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Sources Rebuild

platform.feedback.sources.replay

Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Sources Replay

platform.feedback.stats

Write. Scope: platform.write, admin. Contract: declared_dynamic. Feedback Stats

platform.fx.refresh.now

Write. Scope: platform.write, admin. Contract: declared_dynamic. Fx Refresh Now

platform.geoip.autodetect

Read. Scope: platform.read, admin. Contract: declared_dynamic. Geoip Autodetect

platform.get.admin.chat.history

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Admin Chat History

platform.get.ai.snapshot

Write. Scope: platform.write, admin. Contract: route_inferred. Get Ai Snapshot

platform.get.campaign.groups

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Campaign Groups

platform.get.client.chat.knowledge.overview

Write. Scope: platform.write, admin. Contract: declared_dynamic. Get Client Chat Knowledge Overview

platform.get.kb.categories

Read. Scope: platform.read, admin. Contract: route_inferred. Get Kb Categories

platform.get.live.health.snapshot

Read. Scope: platform.read, admin. Contract: route_inferred. Get Live Health Snapshot

platform.get.pwa.chat.prefs

Write. Scope: platform.write, admin. Contract: declared_dynamic. Get Pwa Chat Prefs

platform.get.servers

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Servers

platform.get.survey.config

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Survey Config

platform.get.ticket.options

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Ticket Options

platform.get.ticket.thread

Read. Scope: platform.read, admin. Contract: route_inferred. Get Ticket Thread

platform.get.todo.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Todo List

platform.get.widget.advanced

Read. Scope: platform.read, admin. Contract: route_inferred. Get Widget Advanced

platform.governance.summary

Read. Scope: platform.read, admin. Contract: route_inferred. Governance Summary

platform.groups.create

Write. Scope: platform.write, admin. Contract: route_inferred. Groups Create

platform.groups.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Groups Delete

platform.groups.list

Write. Scope: platform.write, admin. Contract: route_inferred. Groups List

platform.groups.rename

Write. Scope: platform.write, admin. Contract: route_inferred. Groups Rename

platform.groups.set.primary

Write. Scope: platform.write, admin. Contract: route_inferred. Groups Set Primary

platform.hc.preview.mint

Read. Scope: platform.read, admin. Contract: route_inferred. Hc Preview Mint

platform.hc.template.apply

Write. Scope: platform.write, admin. Contract: route_inferred. Hc Template Apply

platform.hc.template.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Hc Template Delete

platform.hc.template.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Hc Template Preview

platform.hc.template.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hc Template Save

platform.hc.templates.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hc Templates List

platform.hc.translation.review.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hc Translation Review Get

platform.hc.translation.review.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hc Translation Review List

platform.hc.translation.review.revert

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hc Translation Review Revert

platform.hc.translation.review.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hc Translation Review Save

platform.heatmap

Read. Scope: platform.read, admin. Contract: route_inferred. Heatmap

platform.hr.access.grant.manual

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Grant Manual

platform.hr.access.policy.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Access Policy List

platform.hr.access.policy.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Policy Set

platform.hr.access.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Request

platform.hr.access.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Revoke

platform.hr.accommodation.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Accommodation List

platform.hr.accommodation.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Accommodation Resolve

platform.hr.agent.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Assign

platform.hr.agent.compensation.retry

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Compensation Retry

platform.hr.agent.compensation.sweep

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Agent Compensation Sweep

platform.hr.agent.compensations

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Agent Compensations

platform.hr.agent.incident.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Incident Close

platform.hr.agent.register

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Register

platform.hr.agent.step

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Step

platform.hr.agent.step.status

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Agent Step Status

platform.hr.agent.tool.auth

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Tool Auth

platform.hr.agent.tool.grant

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Tool Grant

platform.hr.agent.tools

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Agent Tools

platform.hr.ai.act.build

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Ai Act Build

platform.hr.ai.act.export

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Ai Act Export

platform.hr.ai.act.fria.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Fria Record

platform.hr.ai.act.notice.publish

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Notice Publish

platform.hr.ai.act.overseer.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Overseer Assign

platform.hr.ai.act.overseer.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Overseer Revoke

platform.hr.ai.act.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Ai Act Overview

platform.hr.ai.metering.export

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Ai Metering Export

platform.hr.ai.metering.overview

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Ai Metering Overview

platform.hr.ai.metering.settings.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Metering Settings Save

platform.hr.ai.status

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Ai Status

platform.hr.analytics.ask

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Analytics Ask

platform.hr.analytics.snapshot

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Analytics Snapshot

platform.hr.app.move

Write. Scope: platform.write, admin. Contract: route_inferred. Hr App Move

platform.hr.appeal.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Appeal List

platform.hr.appeal.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Appeal Resolve

platform.hr.application.history

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Application History

platform.hr.application.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Application List

platform.hr.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Assign

platform.hr.auto.offer.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Auto Offer Run

platform.hr.autonomy.lane.demote

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Autonomy Lane Demote

platform.hr.autonomy.lane.install

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Autonomy Lane Install

platform.hr.autonomy.lane.promote

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Autonomy Lane Promote

platform.hr.autonomy.lane.review

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Autonomy Lane Review

platform.hr.autonomy.lane.shadow

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Autonomy Lane Shadow

platform.hr.autonomy.lanes

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Autonomy Lanes

platform.hr.autonomy.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Autonomy Overview

platform.hr.availability.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Availability Save

platform.hr.band.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Band Approve

platform.hr.band.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Band List

platform.hr.band.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Band Save

platform.hr.benchmarks.contribute.now

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Benchmarks Contribute Now

platform.hr.benchmarks.opt.in

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Benchmarks Opt In

platform.hr.benchmarks.opt.out

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Benchmarks Opt Out

platform.hr.benchmarks.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Benchmarks Overview

platform.hr.benefit.enroll

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Benefit Enroll

platform.hr.benefit.plan.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Benefit Plan Save

platform.hr.bias.audit.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Bias Audit List

platform.hr.bias.audit.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Bias Audit Run

platform.hr.booking.link.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Booking Link Save

platform.hr.booking.slots.reconcile

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Booking Slots Reconcile

platform.hr.breaker.reset

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Breaker Reset

platform.hr.broadcast.audience.options

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Broadcast Audience Options

platform.hr.broadcast.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Broadcast List

platform.hr.broadcast.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Broadcast Preview

platform.hr.broadcast.send

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Broadcast Send

platform.hr.budget.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Budget Set

platform.hr.calibration.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Calibration Close

platform.hr.calibration.move

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Calibration Move

platform.hr.calibration.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Calibration Open

platform.hr.capabilities.get

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Capabilities Get

platform.hr.capability.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Capability Set

platform.hr.capability.trail

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Capability Trail

platform.hr.cards.refresh

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Cards Refresh

platform.hr.case.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Assign

platform.hr.case.attachment.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Attachment Add

platform.hr.case.attachment.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Case Attachment List

platform.hr.case.categories

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Case Categories

platform.hr.case.event.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Event Add

platform.hr.case.get

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Case Get

platform.hr.case.grant.access

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Case Grant Access

platform.hr.case.intake.mailbox

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Intake Mailbox

platform.hr.case.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Case List

platform.hr.case.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Open

platform.hr.case.route

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Route

platform.hr.case.thread

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Thread

platform.hr.case.tighten

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Tighten

platform.hr.certification.define

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Certification Define

platform.hr.certification.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Certification List

platform.hr.certification.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Certification Record

platform.hr.certification.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Certification State

platform.hr.certification.types

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Certification Types

platform.hr.check.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Check List

platform.hr.check.manual.result

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Manual Result

platform.hr.check.order

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Order

platform.hr.check.requery

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Requery

platform.hr.check.void

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Void

platform.hr.checkin.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Checkin Record

platform.hr.coach.feedback

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Coach Feedback

platform.hr.coach.me

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Coach Me

platform.hr.coach.receive

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Coach Receive

platform.hr.comp.change.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Comp Change Approve

platform.hr.comp.change.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Comp Change Request

platform.hr.compliance.build

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Compliance Build

platform.hr.compliance.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Compliance List

platform.hr.connector.cert.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Cert Revoke

platform.hr.connector.cert.submissions

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Connector Cert Submissions

platform.hr.connector.cert.submit

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Cert Submit

platform.hr.connector.certify

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Certify

platform.hr.connector.health

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Connector Health

platform.hr.connector.options

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Connector Options

platform.hr.connector.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Revoke

platform.hr.contract.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Contract List

platform.hr.copilot.apply

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Copilot Apply

platform.hr.copilot.plan

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Copilot Plan

platform.hr.copilot.recipes

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Copilot Recipes

platform.hr.copilot.reject

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Copilot Reject

platform.hr.correction.dataset.build

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Correction Dataset Build

platform.hr.correction.datasets

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Correction Datasets

platform.hr.correction.privacy.review

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Correction Privacy Review

platform.hr.course.enroll

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Enroll

platform.hr.course.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Save

platform.hr.course.skills.tag

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Skills Tag

platform.hr.decision.appeal.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Decision Appeal Assign

platform.hr.decision.appeal.file

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Decision Appeal File

platform.hr.decision.appeal.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Decision Appeal Resolve

platform.hr.decision.appeals.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Decision Appeals List

platform.hr.decision.explanation

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Decision Explanation

platform.hr.decisions.recent

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Decisions Recent

platform.hr.directory.visibility.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Directory Visibility Get

platform.hr.directory.visibility.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Directory Visibility Set

platform.hr.discipline.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Discipline Decide

platform.hr.discipline.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Discipline Propose

platform.hr.document.access.log

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Document Access Log

platform.hr.document.deletion.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Deletion Request

platform.hr.document.hold

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Hold

platform.hr.document.intake

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Intake

platform.hr.document.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Document List

platform.hr.document.requirement.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Requirement Add

platform.hr.document.requirement.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Requirement Remove

platform.hr.document.review.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Review Approve

platform.hr.document.reviews

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Document Reviews

platform.hr.dsr.list

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Dsr List

platform.hr.dsr.transition

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Dsr Transition

platform.hr.email.intake.log

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Email Intake Log

platform.hr.employee.access.events

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Employee Access Events

platform.hr.employee.provision

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employee Provision

platform.hr.employee.restore

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employee Restore

platform.hr.employee.suspend

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employee Suspend

platform.hr.employment.activate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employment Activate

platform.hr.employment.end

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employment End

platform.hr.enterprise.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Enterprise Approve

platform.hr.equipment.delivered

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Equipment Delivered

platform.hr.equipment.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Equipment Request

platform.hr.equipment.returned

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Equipment Returned

platform.hr.escrow.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Escrow Resolve

platform.hr.evidence.a11y.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence A11y Record

platform.hr.evidence.attest

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Attest

platform.hr.evidence.dr.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Dr Record

platform.hr.evidence.ledgers

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Evidence Ledgers

platform.hr.evidence.load.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Load Record

platform.hr.evidence.owner.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Owner Assign

platform.hr.expense.confirm

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Confirm

platform.hr.expense.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Decide

platform.hr.expense.handoff

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Handoff

platform.hr.expense.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Expense Overview

platform.hr.expense.policy.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Policy Save

platform.hr.experience.metrics

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Experience Metrics

platform.hr.expiry.run

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Expiry Run

platform.hr.fairness.cohort.define

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Fairness Cohort Define

platform.hr.fairness.cohorts

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Fairness Cohorts

platform.hr.fairness.evaluate

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Fairness Evaluate

platform.hr.faq.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq Delete

platform.hr.faq.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq Draft

platform.hr.faq.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Faq List

platform.hr.faq.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq Save

platform.hr.faq.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq State

platform.hr.feedback.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Feedback List

platform.hr.feedback.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Feedback Record

platform.hr.flag.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Flag Set

platform.hr.flags.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Flags Get

platform.hr.frontline.overview

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Frontline Overview

platform.hr.gig.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Gig Decide

platform.hr.gig.post

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Gig Post

platform.hr.global.readiness

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Global Readiness

platform.hr.goal.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Goal Create

platform.hr.goal.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Goal Draft

platform.hr.goal.update

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Goal Update

platform.hr.grievance.file

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Grievance File

platform.hr.grievance.outcome

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Grievance Outcome

platform.hr.headcount.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Headcount Approve

platform.hr.headcount.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Headcount Draft

platform.hr.headcount.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Headcount List

platform.hr.hire

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Hire

platform.hr.hiring.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Hiring Decide

platform.hr.holiday.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Holiday Save

platform.hr.identity.admin.options

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Identity Admin Options

platform.hr.identity.conflict.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Conflict Resolve

platform.hr.identity.coverage.plan

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Identity Coverage Plan

platform.hr.identity.facets

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Identity Facets

platform.hr.identity.history

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Identity History

platform.hr.identity.link

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Link

platform.hr.identity.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Revoke

platform.hr.identity.verification.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Verification Record

platform.hr.incident.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Incident List

platform.hr.incident.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Incident Open

platform.hr.incident.step

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Incident Step

platform.hr.interview.recording.start

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Recording Start

platform.hr.interview.recording.upload

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Recording Upload

platform.hr.interview.review

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Review

platform.hr.interview.room.answer

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Answer

platform.hr.interview.room.ask

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Ask

platform.hr.interview.room.connect

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Connect

platform.hr.interview.room.consent

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Consent

platform.hr.interview.room.end

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room End

platform.hr.interview.room.leave

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Leave

platform.hr.interview.room.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Interview Room List

platform.hr.interview.room.observe

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Observe

platform.hr.interview.room.pause

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Pause

platform.hr.interview.room.provision

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Provision

platform.hr.interview.room.reconnect

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Reconnect

platform.hr.interview.room.resume

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Resume

platform.hr.interview.room.state

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room State

platform.hr.interview.room.takeover

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Takeover

platform.hr.interview.schedule

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Schedule

platform.hr.interview.transcript.correct

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Transcript Correct

platform.hr.investigation.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Close

platform.hr.investigation.finding

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Finding

platform.hr.investigation.hold

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Hold

platform.hr.investigation.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Open

platform.hr.investigation.triage

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Investigation Triage

platform.hr.iplan.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iplan Approve

platform.hr.iplan.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iplan Create

platform.hr.iplan.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Iplan List

platform.hr.iscore.human

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iscore Human

platform.hr.iscore.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iscore Run

platform.hr.isession.attach.meeting

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Isession Attach Meeting

platform.hr.isession.control

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Isession Control

platform.hr.isession.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Isession List

platform.hr.isession.liveness

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Isession Liveness

platform.hr.isession.schedule

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Isession Schedule

platform.hr.job.arch.analyse

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Job Arch Analyse

platform.hr.job.arch.apply

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Apply

platform.hr.job.arch.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Approve

platform.hr.job.arch.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Job Arch Overview

platform.hr.job.arch.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Propose

platform.hr.job.arch.reject

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Reject

platform.hr.job.family.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Family Save

platform.hr.job.level.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Level Save

platform.hr.job.profile.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Profile Save

platform.hr.job.version.draft.ai

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Version Draft Ai

platform.hr.job.version.publish

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Version Publish

platform.hr.job.version.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Version Save

platform.hr.job.versions

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Job Versions

platform.hr.jurisdiction.capabilities

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Capabilities

platform.hr.jurisdiction.case.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Case Run

platform.hr.jurisdiction.case.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Case Save

platform.hr.jurisdiction.change.assess

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Change Assess

platform.hr.jurisdiction.change.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Change Close

platform.hr.jurisdiction.change.raise

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Change Raise

platform.hr.jurisdiction.coverage

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Jurisdiction Coverage

platform.hr.jurisdiction.explain

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Explain

platform.hr.jurisdiction.overlay.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Overlay List

platform.hr.jurisdiction.overlay.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Overlay Save

platform.hr.jurisdiction.pack.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Pack Draft

platform.hr.jurisdiction.pack.release

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Pack Release

platform.hr.jurisdiction.pack.withdraw

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Pack Withdraw

platform.hr.jurisdiction.release.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Jurisdiction Release List

platform.hr.jurisdiction.rule.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Rule Save

platform.hr.jurisdiction.source.declare

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Source Declare

platform.hr.jurisdiction.transfer.declare

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Transfer Declare

platform.hr.kill.flip

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kill Flip

platform.hr.kill.toggle

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kill Toggle

platform.hr.kiosk.register

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kiosk Register

platform.hr.kiosk.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kiosk Revoke

platform.hr.knowledge.pack.install

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Knowledge Pack Install

platform.hr.knowledge.pack.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Knowledge Pack Remove

platform.hr.knowledge.packs

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Knowledge Packs

platform.hr.leadership.score

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Leadership Score

platform.hr.learning.assign.mandatory

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Learning Assign Mandatory

platform.hr.learning.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Learning Overview

platform.hr.leave.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Leave Decide

platform.hr.leave.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Leave Overview

platform.hr.leave.policy.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Leave Policy Save

platform.hr.leave.type.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Leave Type Save

platform.hr.letter.issue

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Letter Issue

platform.hr.letter.kinds

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Letter Kinds

platform.hr.letter.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Letter Preview

platform.hr.listening.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Listening Close

platform.hr.listening.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Listening Overview

platform.hr.listening.run.due

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Listening Run Due

platform.hr.listening.schedule.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Listening Schedule Save

platform.hr.listening.schedule.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Listening Schedule State

platform.hr.loop.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Approve

platform.hr.loop.correct

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Correct

platform.hr.loop.evaluate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Evaluate

platform.hr.loop.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Loop Overview

platform.hr.loop.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Propose

platform.hr.loop.release

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Release

platform.hr.loop.rollback

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Rollback

platform.hr.loop.snapshot

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Snapshot

platform.hr.marketplace.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Marketplace Overview

platform.hr.meeting.book

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Book

platform.hr.meeting.cancel

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Cancel

platform.hr.meeting.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Propose

platform.hr.meeting.reschedule

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Reschedule

platform.hr.meetings.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Meetings Overview

platform.hr.meetings.reconcile

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Meetings Reconcile

platform.hr.mentor.propose

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Mentor Propose

platform.hr.module.toggle

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Module Toggle

platform.hr.new.hire.checkin.state

Read. Scope: platform.read, admin. Contract: route_inferred. Hr New Hire Checkin State

platform.hr.offer.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Approve

platform.hr.offer.draft

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Draft

platform.hr.offer.esign.confirm

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Esign Confirm

platform.hr.offer.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Offer List

platform.hr.offer.send

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Send

platform.hr.offer.withdraw

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Withdraw

platform.hr.onboarding.checkins.book

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Onboarding Checkins Book

platform.hr.onboarding.draft.tasks

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Draft Tasks

platform.hr.onboarding.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Onboarding Overview

platform.hr.onboarding.plan.buddy

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Plan Buddy

platform.hr.onboarding.plan.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Plan Close

platform.hr.onboarding.plan.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Plan Create

platform.hr.onboarding.task.block

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Block

platform.hr.onboarding.task.done

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Done

platform.hr.onboarding.task.skip

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Onboarding Task Skip

platform.hr.onboarding.task.unblock

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Unblock

platform.hr.onboarding.task.verify

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Verify

platform.hr.onboarding.template.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Template Save

platform.hr.one.on.one.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr One On One List

platform.hr.one.on.one.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr One On One Record

platform.hr.opportunity.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Opportunity Decide

platform.hr.opportunity.post

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Opportunity Post

platform.hr.org.chart

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Chart

platform.hr.org.legal.entities

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Legal Entities

platform.hr.org.legal.entity.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Legal Entity Create

platform.hr.org.location.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Location Create

platform.hr.org.locations

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Locations

platform.hr.org.map.overview

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Org Map Overview

platform.hr.org.map.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Map Remove

platform.hr.org.map.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Map Save

platform.hr.org.tree

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Tree

platform.hr.org.unit.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Unit Create

platform.hr.org.unit.move

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Org Unit Move

platform.hr.override.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Override Record

platform.hr.overtime.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Overtime Decide

platform.hr.path.enroll

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Path Enroll

platform.hr.path.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Path Save

platform.hr.pay.equity.overview

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Pay Equity Overview

platform.hr.pay.gap.evaluate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pay Gap Evaluate

platform.hr.payroll.import

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Payroll Import

platform.hr.payroll.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Payroll Overview

platform.hr.payroll.provider.exceptions

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Payroll Provider Exceptions

platform.hr.payroll.reconcile

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Payroll Reconcile

platform.hr.payslips.issue

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Payslips Issue

platform.hr.people.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr People List

platform.hr.perf.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Perf Overview

platform.hr.person.create

Write. Scope: platform.write, admin. Contract: route_inferred. Create an HR person Required fields: display_name.

platform.hr.person.get

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Person Get

platform.hr.person.identifier.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Person Identifier Add

platform.hr.person.identifier.read

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Person Identifier Read

platform.hr.person.identifiers

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Person Identifiers

platform.hr.person.update

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Person Update

platform.hr.pilot.outcome.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pilot Outcome Record

platform.hr.pipeline

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Pipeline

platform.hr.policy.activate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Policy Activate

platform.hr.policy.compile

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Policy Compile

platform.hr.pool.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pool Create

platform.hr.pool.member.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pool Member Add

platform.hr.pool.member.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pool Member Remove

platform.hr.pool.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Pool Overview

platform.hr.portal.address

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Portal Address

platform.hr.portal.slug.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Portal Slug Save

platform.hr.position.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Assign

platform.hr.position.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Create

platform.hr.position.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Position Overview

platform.hr.position.profile.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Profile Set

platform.hr.position.reports.to

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Reports To

platform.hr.position.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position State

platform.hr.position.vacate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Vacate

platform.hr.posting.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Posting Close

platform.hr.posting.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Posting Create

platform.hr.posting.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Posting List

platform.hr.posting.publish

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Posting Publish

platform.hr.probation.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Probation Open

platform.hr.probation.review

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Probation Review

platform.hr.profile.address.format

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Profile Address Format

platform.hr.profile.address.write

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Address Write

platform.hr.profile.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Decide

platform.hr.profile.ownership.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Profile Ownership Get

platform.hr.profile.ownership.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Ownership Set

platform.hr.profile.pending

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Profile Pending

platform.hr.profile.photo.clear

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Photo Clear

platform.hr.profile.photo.set

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Photo Set

platform.hr.profile.reveal

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Reveal

platform.hr.profile.section.end

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Section End

platform.hr.profile.section.write

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Section Write

platform.hr.profile.sections

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Profile Sections

platform.hr.pulse.close

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pulse Close

platform.hr.pulse.issue

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pulse Issue

platform.hr.pulse.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Pulse List

platform.hr.pulse.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pulse Open

platform.hr.pulse.results

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Pulse Results

platform.hr.quality.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Quality Overview

platform.hr.quality.sample.draw

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Quality Sample Draw

platform.hr.quality.samples

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Quality Samples

platform.hr.quality.verdict

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Quality Verdict

platform.hr.queue.agent.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Queue Agent Add

platform.hr.queue.agent.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Queue Agent Remove

platform.hr.queue.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Queue Save

platform.hr.readiness.report

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Readiness Report

platform.hr.recognise

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Recognise

platform.hr.relations.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Relations Overview

platform.hr.release.gates

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Release Gates

platform.hr.release.verify

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Release Verify

platform.hr.req.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Req Create

platform.hr.req.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Req List

platform.hr.req.reject

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Req Reject

platform.hr.req.transition

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Req Transition

platform.hr.review.cycle.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Cycle Open

platform.hr.review.include

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Include

platform.hr.review.respond

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Respond

platform.hr.review.template.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Template Save

platform.hr.rubric.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Rubric Approve

platform.hr.rubric.create

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Rubric Create

platform.hr.rubric.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Rubric List

platform.hr.run.replay

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Replay

platform.hr.run.start

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Start

platform.hr.run.step

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Step

platform.hr.run.takeover

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Takeover

platform.hr.scenario.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Scenario Run

platform.hr.schedule.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Schedule Save

platform.hr.screening.correct

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Screening Correct

platform.hr.screening.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Screening List

platform.hr.screening.review

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Screening Review

platform.hr.screening.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Screening Run

platform.hr.screening.verify

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Screening Verify

platform.hr.security.assurance.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Security Assurance Record

platform.hr.service.item.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Service Item Save

platform.hr.servicedesk.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Servicedesk Overview

platform.hr.shadow.compare

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Shadow Compare

platform.hr.shift.add

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Shift Add

platform.hr.shift.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Shift Assign

platform.hr.signature.cancel

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Signature Cancel

platform.hr.signature.confirm

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Signature Confirm

platform.hr.signature.list

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Signature List

platform.hr.signature.request

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Signature Request

platform.hr.signin.design.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Signin Design Get

platform.hr.signin.design.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Signin Design Save

platform.hr.skill.challenge.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Skill Challenge Resolve

platform.hr.skills.infer.sweep

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Skills Infer Sweep

platform.hr.skills.infer.text

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Skills Infer Text

platform.hr.skills.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Skills Overview

platform.hr.skills.taxonomy.adopt

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Skills Taxonomy Adopt

platform.hr.status

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Status

platform.hr.succession.nominate

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Succession Nominate

platform.hr.succession.open

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Succession Open

platform.hr.succession.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Succession Overview

platform.hr.swap.approve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Swap Approve

platform.hr.swap.decline

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Swap Decline

platform.hr.sync.conflict.resolve

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Sync Conflict Resolve

platform.hr.talent.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Talent Overview

platform.hr.thread.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Delete

platform.hr.thread.dm

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Dm

platform.hr.thread.legal.hold

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Legal Hold

platform.hr.thread.outreach

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Outreach

platform.hr.thread.post

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Post

platform.hr.thread.read

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Thread Read

platform.hr.thread.retention

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Retention

platform.hr.thread.search

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Thread Search

platform.hr.threads.inbox

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Threads Inbox

platform.hr.threads.retention.sweep

Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Threads Retention Sweep

platform.hr.time.decide

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Time Decide

platform.hr.time.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Time Overview

platform.hr.title.history

Read. Scope: platform.read, admin. Contract: route_inferred. Hr Title History

platform.hr.title.record

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Title Record

platform.hr.training.requirement.save

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Training Requirement Save

platform.hr.truth.register

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Truth Register

platform.hr.turnover.run

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Turnover Run

platform.hr.verifier.verdict

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Verifier Verdict

platform.hr.wb.grant

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb Grant

platform.hr.wb.identity

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb Identity

platform.hr.wb.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Wb List

platform.hr.wb.read

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb Read

platform.hr.wb.state

Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb State

platform.hr.workforce.dashboard

Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Workforce Dashboard

platform.inbound.activity.feed

Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Activity Feed

platform.inbound.endpoints.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Endpoints Delete

platform.inbound.endpoints.list

Write. Scope: admin. Contract: route_inferred. Inbound Endpoints List

platform.inbound.endpoints.save

Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Endpoints Save

platform.inbound.endpoints.test

Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Endpoints Test

platform.interrupted

Read. Scope: platform.read, admin. Contract: declared_dynamic. Interrupted

platform.ip.classify

Read. Scope: platform.read, admin. Contract: route_inferred. Ip Classify

platform.js.errors.clear.all

Write. Scope: platform.write, admin. Contract: declared_dynamic. Js Errors Clear All

platform.js.errors.list

Read. Scope: platform.read, admin. Contract: route_inferred. Js Errors List

platform.js.issue.assign

Write. Scope: platform.write, admin. Contract: route_inferred. Js Issue Assign

platform.js.issue.update

Write. Scope: platform.write, admin. Contract: route_inferred. Js Issue Update

platform.js.sourcemap.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Js Sourcemap Delete

platform.js.sourcemap.upload

Write. Scope: platform.write, admin. Contract: route_inferred. Js Sourcemap Upload

platform.js.sourcemaps.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Js Sourcemaps List

platform.leads

Read. Scope: platform.read, admin. Contract: route_inferred. Leads

platform.license.delete

Write. Scope: admin. Contract: declared_dynamic. License Delete

platform.license.diagnostics

Read. Scope: platform.read, admin. Contract: declared_dynamic. License Diagnostics

platform.license.force.check

Read. Scope: platform.read, admin. Contract: declared_dynamic. License Force Check

platform.license.preflight

Read. Scope: platform.read, admin. Contract: declared_dynamic. License Preflight

platform.license.save

Write. Scope: admin. Contract: route_inferred. License Save

platform.license.status

Read. Scope: platform.read, admin. Contract: declared_dynamic. License Status

platform.license.verify.now

Write. Scope: platform.write, admin. Contract: declared_dynamic. License Verify Now

platform.lifecycle.evaluate

Read. Scope: platform.read, admin. Contract: route_inferred. Lifecycle Evaluate

platform.lifecycle.rule.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Lifecycle Rule Delete

platform.lifecycle.rule.list

Read. Scope: platform.read, admin. Contract: route_inferred. Lifecycle Rule List

platform.lifecycle.rule.save

Write. Scope: platform.write, admin. Contract: route_inferred. Lifecycle Rule Save

platform.list.assignable.sites

Read. Scope: platform.read, admin. Contract: declared_dynamic. List Assignable Sites

platform.list.network.issues

Read. Scope: platform.read, admin. Contract: declared_dynamic. List Network Issues

platform.lookup.client.full

Read. Scope: platform.read, admin. Contract: route_inferred. Lookup Client Full

platform.mark.feedback.read

Write. Scope: platform.write, admin. Contract: route_inferred. Mark Feedback Read

platform.marketplace.local.install

Write. Scope: platform.write, admin. Contract: route_inferred. Marketplace Local Install

platform.marketplace.local.uninstall

Write. Scope: platform.write, admin. Contract: route_inferred. Marketplace Local Uninstall

platform.marketplace.session.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Marketplace Session Get

platform.marketplace.session.set

Write. Scope: platform.write, admin. Contract: route_inferred. Marketplace Session Set

platform.media.ready

Read. Scope: platform.read, admin. Contract: route_inferred. Media Ready

platform.message.contact.locale

Write. Scope: platform.write, admin. Contract: route_inferred. Message Contact Locale

platform.message.outbound.convert

Write. Scope: platform.write, admin. Contract: route_inferred. Message Outbound Convert

platform.message.translate

Write. Scope: platform.write, admin. Contract: route_inferred. Message Translate

platform.message.translation.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Message Translation Delete

platform.message.translation.save

Write. Scope: platform.write, admin. Contract: route_inferred. Message Translation Save

platform.meta.channels.disconnect

Write. Scope: platform.write, admin. Contract: declared_dynamic. Meta Channels Disconnect

platform.meta.channels.switch.page

Write. Scope: platform.write, admin. Contract: route_inferred. Meta Channels Switch Page

platform.observe

Read. Scope: platform.read, admin. Contract: declared_dynamic. Observe

platform.onboarding.action

Read. Scope: platform.read, admin. Contract: declared_dynamic. Onboarding Action

platform.onboarding.readiness

Read. Scope: platform.read, admin. Contract: declared_dynamic. Onboarding Readiness

platform.open.network.issue

Read. Scope: platform.read, admin. Contract: declared_dynamic. Open Network Issue

platform.open.ticket

Read. Scope: platform.read, admin. Contract: route_inferred. Open Ticket

platform.operator.text.translate

Write. Scope: platform.write, admin. Contract: route_inferred. Operator Text Translate

platform.opsiq.backup.export

Read. Scope: platform.read, admin. Contract: declared_dynamic. Download a full backup in one request (retired)

platform.opsiq.backup.import

Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Import

platform.opsiq.backup.import.start

Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Import Start

platform.opsiq.backup.job.start

Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Job Start

platform.opsiq.backup.job.status

Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Job Status

platform.outreach.campaign.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Campaign Delete

platform.outreach.campaign.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Campaign List

platform.outreach.campaign.save

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Campaign Save

platform.outreach.campaign.send

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Campaign Send

platform.outreach.compose.send

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Compose Send

platform.outreach.draft.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Draft Delete

platform.outreach.draft.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Draft List

platform.outreach.draft.save

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Draft Save

platform.outreach.messages.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Messages Delete

platform.outreach.replies.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Replies List

platform.outreach.reply.ai

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Ai

platform.outreach.reply.mark

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Mark

platform.outreach.reply.pref

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Pref

platform.outreach.reply.send

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Send

platform.outreach.reply.thread

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Thread

platform.outreach.send.detail

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Send Detail

platform.outreach.send.retry

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Send Retry

platform.outreach.sends.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Sends List

platform.outreach.template.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Template Delete

platform.outreach.template.list

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Template List

platform.outreach.template.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Template Preview

platform.outreach.template.save

Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Template Save

platform.overview

Read. Scope: platform.read, admin. Contract: declared_dynamic. Overview

platform.overview.hub.view

Read. Scope: platform.read, admin. Contract: route_inferred. Overview Hub View

platform.overview.intelligence.graph

Read. Scope: platform.read, admin. Contract: declared_dynamic. Overview Intelligence Graph

platform.pages

Read. Scope: platform.read, admin. Contract: route_inferred. Pages

platform.paths.data

Read. Scope: platform.read, admin. Contract: route_inferred. Paths Data

platform.pause

Read. Scope: platform.read, admin. Contract: declared_dynamic. Pause

platform.profile.change.password

Write. Scope: platform.write, admin. Contract: declared_dynamic. Profile Change Password

platform.profile.get

Read. Scope: platform.read, admin. Contract: route_inferred. Profile Get

platform.profile.reward.claim

Write. Scope: platform.write, admin. Contract: route_inferred. Profile Reward Claim

platform.profile.reward.claim.cancel

Write. Scope: platform.write, admin. Contract: route_inferred. Profile Reward Claim Cancel

platform.profile.save

Write. Scope: platform.write, admin. Contract: declared_dynamic. Profile Save

platform.profile.session.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Profile Session Revoke

platform.profile.sessions.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Profile Sessions List

platform.profile.sessions.revoke.others

Write. Scope: platform.write, admin. Contract: declared_dynamic. Profile Sessions Revoke Others

platform.profile.team.dispute.file

Write. Scope: platform.write, admin. Contract: route_inferred. Profile Team Dispute File

platform.purge

Write. Scope: admin. Contract: route_inferred. Purge

platform.purge.all

Write. Scope: admin. Contract: route_inferred. Purge All

platform.realtime

Read. Scope: platform.read, admin. Contract: route_inferred. Realtime

platform.realtime.test

Write. Scope: platform.write, admin. Contract: route_inferred. Realtime Test

platform.resume

Read. Scope: platform.read, admin. Contract: declared_dynamic. Resume

platform.retention.data

Read. Scope: platform.read, admin. Contract: route_inferred. Retention Data

platform.routes.list

Read. Scope: admin. Contract: source_inferred. List every registered OpsIQ operation

platform.routes.read

Read. Scope: admin. Contract: explicit. Execute a registered read operation Required fields: route.

platform.routes.write

Write. Scope: admin. Contract: explicit. Execute a registered write operation Required fields: route, idempotency_key. Retry-safe with idempotency_key.

platform.run.ai.analysis

Write. Scope: platform.write, admin. Contract: route_inferred. Run Ai Analysis

platform.save.admin.chat.history

Write. Scope: platform.write, admin. Contract: route_inferred. Save Admin Chat History

platform.save.pwa.chat.prefs

Write. Scope: platform.write, admin. Contract: declared_dynamic. Save Pwa Chat Prefs

platform.save.survey.config

Write. Scope: platform.write, admin. Contract: route_inferred. Save Survey Config

platform.save.widget.advanced

Write. Scope: platform.write, admin. Contract: declared_dynamic. Save Widget Advanced

platform.scim.token.issue

Read. Scope: platform.read, admin. Contract: route_inferred. Scim Token Issue

platform.scim.token.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Scim Token List

platform.scim.token.revoke

Write. Scope: platform.write, admin. Contract: route_inferred. Scim Token Revoke

platform.segment.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Segment Delete

platform.segment.list

Read. Scope: platform.read, admin. Contract: route_inferred. Segment List

platform.segment.members

Read. Scope: platform.read, admin. Contract: route_inferred. Segment Members

platform.segment.preview

Read. Scope: platform.read, admin. Contract: route_inferred. Segment Preview

platform.segment.save

Write. Scope: platform.write, admin. Contract: route_inferred. Segment Save

platform.segment.suggestion.accept

Write. Scope: platform.write, admin. Contract: route_inferred. Segment Suggestion Accept

platform.segment.suggestion.dismiss

Write. Scope: platform.write, admin. Contract: route_inferred. Segment Suggestion Dismiss

platform.segment.suggestion.list

Read. Scope: platform.read, admin. Contract: route_inferred. Segment Suggestion List

platform.send.campaign

Write. Scope: platform.write, admin. Contract: route_inferred. Send Campaign

platform.send.client.email

Write. Scope: platform.write, admin. Contract: route_inferred. Send Client Email

platform.send.ticket.reply

Write. Scope: platform.write, admin. Contract: route_inferred. Send Ticket Reply

platform.service.studio.get

Read. Scope: platform.read, admin. Contract: declared_dynamic. Service Studio Get

platform.set.active.site

Write. Scope: platform.write, admin. Contract: route_inferred. Set Active Site

platform.silence

Read. Scope: platform.read, admin. Contract: declared_dynamic. Silence

platform.site.set.group

Write. Scope: platform.write, admin. Contract: route_inferred. Site Set Group

platform.sites.add

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Add

platform.sites.edit

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Edit

platform.sites.list

Write. Scope: platform.write, admin. Contract: route_inferred. Sites List

platform.sites.picker

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Picker

platform.sites.regenerate.secret

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Regenerate Secret

platform.sites.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Sites Remove

platform.stats

Read. Scope: platform.read, admin. Contract: declared_dynamic. Stats

platform.stepup.verify

Write. Scope: platform.write, admin. Contract: declared_dynamic. Stepup Verify

platform.submit.agent.ai.feedback

Write. Scope: platform.write, admin. Contract: route_inferred. Submit Agent Ai Feedback

platform.submit.triage.feedback

Write. Scope: platform.write, admin. Contract: route_inferred. Submit Triage Feedback

platform.takeover

Read. Scope: platform.read, admin. Contract: declared_dynamic. Takeover

platform.terminate

Read. Scope: platform.read, admin. Contract: route_inferred. Terminate

platform.test.geoip

Read. Scope: platform.read, admin. Contract: route_inferred. Test Geoip

platform.top.pages

Read. Scope: platform.read, admin. Contract: route_inferred. Top Pages

platform.train.client.chat.knowledge

Write. Scope: platform.write, admin. Contract: route_inferred. Train Client Chat Knowledge

platform.triggers

Read. Scope: platform.read, admin. Contract: declared_dynamic. Triggers

platform.trust.evidence.report

Write. Scope: platform.write, admin. Contract: declared_dynamic. Trust Evidence Report

platform.turn.pool.add

Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Add

platform.turn.pool.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Turn Pool List

platform.turn.pool.pick.test

Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Pick Test

platform.turn.pool.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Remove

platform.turn.pool.update

Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Update

platform.update.lead.status

Write. Scope: platform.write, admin. Contract: route_inferred. Update Lead Status

platform.wa.embedded.signup.exchange

Write. Scope: platform.write, admin. Contract: route_inferred. Wa Embedded Signup Exchange

platform.warehouse.export.run

Read. Scope: platform.read, admin. Contract: declared_dynamic. Warehouse Export Run

platform.warehouse.exports.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Warehouse Exports List

platform.webhook.deliveries.list

Read. Scope: platform.read, admin. Contract: route_inferred. Webhook Deliveries List

platform.webhook.endpoint.delete

Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Endpoint Delete

platform.webhook.endpoint.list

Read. Scope: platform.read, admin. Contract: declared_dynamic. Webhook Endpoint List

platform.webhook.endpoint.save

Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Endpoint Save

platform.webhook.endpoint.test

Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Endpoint Test

platform.webhook.redeliver

Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Redeliver

platform.weekly.digest.view

Read. Scope: platform.read, admin. Contract: route_inferred. Weekly Digest View

platform.whmcs.op.dispatch

Read. Scope: platform.read, admin. Contract: declared_dynamic. Whmcs Op Dispatch

platform.workspace.custom.domain.remove

Write. Scope: platform.write, admin. Contract: route_inferred. Workspace Custom Domain Remove

platform.workspace.custom.domain.set

Write. Scope: platform.write, admin. Contract: route_inferred. Workspace Custom Domain Set

platform.writing.json.knowledge.clear

Write. Scope: platform.write, admin. Contract: declared_dynamic. Writing Json Knowledge Clear

platform.writing.json.knowledge.count

Read. Scope: platform.read, admin. Contract: declared_dynamic. Writing Json Knowledge Count

platform.writing.json.knowledge.import

Write. Scope: platform.write, admin. Contract: route_inferred. Writing Json Knowledge Import

portal_studio (169)

portal_studio.accessibility.evidence.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Accessibility Evidence Save

portal_studio.add

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Domain Add

portal_studio.allocate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Subdomain Allocate

portal_studio.analytics.breakdown

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Analytics Breakdown

portal_studio.analytics.load

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Analytics Load

portal_studio.apply.kit

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Apply Kit

portal_studio.apply.theme

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Apply Theme

portal_studio.approval

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design Approval

portal_studio.approve

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Approve

portal_studio.ask

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Ask

portal_studio.audience.delete

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Audience Delete

portal_studio.audience.explain

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Audience Explain

portal_studio.audience.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Audience List

portal_studio.audience.preview

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Audience Preview

portal_studio.audience.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Audience Save

portal_studio.brand.generate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Brand Generate

portal_studio.brand.import

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Brand Import

portal_studio.cancel.schedule

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Design Cancel Schedule

portal_studio.certify

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Certify

portal_studio.check

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Host Check

portal_studio.check.route.portal.subdomain.check

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Subdomain Check

portal_studio.comment.add

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Comment Add

portal_studio.comment.resolve

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Comment Resolve

portal_studio.component.package.inspect

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Component Package Inspect

portal_studio.component.package.install

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Component Package Install

portal_studio.component.validate

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Component Validate

portal_studio.config

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Handoff Config

portal_studio.data.resolve

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Data Resolve

portal_studio.delete.theme

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Delete Theme

portal_studio.developer.contract

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Developer Contract

portal_studio.discovery.preview

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Discovery Preview

portal_studio.discovery.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Discovery Save

portal_studio.document.load

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Load

portal_studio.document.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Save

portal_studio.experiment.control

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Experiment Control

portal_studio.experiment.results

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Experiment Results

portal_studio.experiment.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Experiment Save

portal_studio.experiments.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Experiments List

portal_studio.form.archive

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Form Archive

portal_studio.form.catalog

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Form Catalog

portal_studio.form.create

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Create

portal_studio.form.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Delete

portal_studio.form.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Duplicate

portal_studio.form.evaluate

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Form Evaluate

portal_studio.form.group.apply

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Group Apply

portal_studio.form.group.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Group Delete

portal_studio.form.group.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Group Save

portal_studio.form.publish

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Publish

portal_studio.form.restore

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Form Restore

portal_studio.form.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Save

portal_studio.form.template

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Template

portal_studio.form.test

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Form Test

portal_studio.form.version.restore

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Version Restore

portal_studio.history

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design History

portal_studio.identity.discover

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Identity Discover

portal_studio.identity.load

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Identity Load

portal_studio.identity.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Identity Save

portal_studio.integration.activate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Activate

portal_studio.integration.install

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Install

portal_studio.integration.kill.switch

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Kill Switch

portal_studio.integration.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Integration List

portal_studio.integration.policy

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Integration Policy

portal_studio.integration.policy.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Integration Policy Save

portal_studio.integration.preflight

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Preflight

portal_studio.integration.revise

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Revise

portal_studio.integration.rollback

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Rollback

portal_studio.integration.transition

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Transition

portal_studio.journey.archive

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Archive

portal_studio.journey.catalog

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Journey Catalog

portal_studio.journey.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Delete

portal_studio.journey.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Duplicate

portal_studio.journey.evaluate

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Journey Evaluate

portal_studio.journey.instantiate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Instantiate

portal_studio.journey.restore

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Restore

portal_studio.journey.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Save

portal_studio.kb.category.delete

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Category Delete

portal_studio.kb.category.reorder

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Category Reorder

portal_studio.kb.category.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Kb Category Save

portal_studio.kb.governance

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Governance

portal_studio.kb.governance.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Kb Governance Save

portal_studio.kb.languages

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Languages

portal_studio.kb.languages.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Languages Save

portal_studio.kb.parity

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Parity

portal_studio.kb.search.tuning

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Search Tuning

portal_studio.kb.search.tuning.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Search Tuning Save

portal_studio.kb.tree

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Tree

portal_studio.knowledge.summary

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Knowledge Summary

portal_studio.list

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Domain List

portal_studio.load

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Analytics Load

portal_studio.load.route.portal.design.load

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Design Load

portal_studio.load.route.portal.form.load

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Form Load

portal_studio.lock

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Lock

portal_studio.migration.apply

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Apply

portal_studio.migration.approve

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Approve

portal_studio.migration.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Migration List

portal_studio.migration.reconcile

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Reconcile

portal_studio.migration.report

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Migration Report

portal_studio.migration.rollback

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Rollback

portal_studio.migration.rollout

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Rollout

portal_studio.migration.start

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Start

portal_studio.node.add

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Add

portal_studio.node.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Delete

portal_studio.node.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Duplicate

portal_studio.node.move

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Move

portal_studio.node.update

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Update

portal_studio.operations.control

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Operations Control

portal_studio.operations.feed

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Operations Feed

portal_studio.operations.record

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Operations Record

portal_studio.operations.summary

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Operations Summary

portal_studio.org.context

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Org Context

portal_studio.org.member.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Org Member Save

portal_studio.org.members

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Org Members

portal_studio.org.requests

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Org Requests

portal_studio.page.archive

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Archive

portal_studio.page.create

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Create

portal_studio.page.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Delete

portal_studio.page.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Duplicate

portal_studio.page.restore

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Restore

portal_studio.page.update

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Update

portal_studio.parity.accept

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Accept

portal_studio.parity.capture

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Capture

portal_studio.parity.compare

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Compare

portal_studio.parity.create

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Create

portal_studio.parity.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Parity List

portal_studio.personalization.delete

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Personalization Delete

portal_studio.personalization.list

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Personalization List

portal_studio.personalization.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Personalization Save

portal_studio.presence

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Presence

portal_studio.preview

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Preview

portal_studio.preview.catalog

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Preview Catalog

portal_studio.publish

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Publish

portal_studio.quality

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Quality

portal_studio.redirect.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Redirect Delete

portal_studio.redirect.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Redirect Save

portal_studio.release.diff

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Release Diff

portal_studio.release.evidence

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design Release Evidence

portal_studio.release.history

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Release History

portal_studio.release.publish

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Publish

portal_studio.release.rollback

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Rollback

portal_studio.release.schedule

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Schedule

portal_studio.remove

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Domain Remove

portal_studio.request.changes

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Request Changes

portal_studio.restore.field

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Restore Field

portal_studio.restore.published

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Restore Published

portal_studio.revert

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Design Revert

portal_studio.review

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Review

portal_studio.review.link

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Review Link

portal_studio.rollback

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Rollback

portal_studio.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Save

portal_studio.save.route.portal.form.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Form Save

portal_studio.save.theme

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Save Theme

portal_studio.saved.section.delete

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Saved Section Delete

portal_studio.saved.section.instantiate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Saved Section Instantiate

portal_studio.saved.section.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Saved Section Save

portal_studio.schedule

Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design Schedule

portal_studio.schedule.cancel

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Schedule Cancel

portal_studio.scim.config

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Scim Config

portal_studio.service.archive

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Archive

portal_studio.service.catalog

Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Service Catalog

portal_studio.service.duplicate

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Duplicate

portal_studio.service.reorder

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Reorder

portal_studio.service.restore

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Restore

portal_studio.service.save

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Save

portal_studio.service.template

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Template

portal_studio.sign.in.flow.save

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Sign In Flow Save

portal_studio.signin.methods

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Signin Methods

portal_studio.test.link

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Handoff Test Link

portal_studio.unlock

Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Unlock

portal_studio.upload

Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Image Upload

sales (14)

sales.ai.insight

Write. Scope: sales.write, admin. Contract: route_inferred. Sales Ai Insight

sales.analyze

Write. Scope: sales.write, analytics.write, admin. Contract: route_inferred. Analyze sales with AI

sales.chart

Write. Scope: sales.write, admin. Contract: route_inferred. Sales Chart

sales.compare

Read. Scope: sales.read, analytics.read, admin. Contract: route_inferred. Compare sales periods

sales.compare.route.sales.compare

Read. Scope: sales.read, admin. Contract: route_inferred. Sales Compare

sales.goal.delete

Write. Scope: sales.write, admin. Contract: route_inferred. Conversion Goal Delete

sales.goal.list

Read. Scope: sales.read, admin. Contract: route_inferred. Conversion Goal List

sales.goal.save

Write. Scope: sales.write, admin. Contract: route_inferred. Conversion Goal Save

sales.list

Read. Scope: sales.read, analytics.read, admin. Contract: route_inferred. List sales and conversions

sales.list.route.conversion.list

Read. Scope: sales.read, admin. Contract: route_inferred. Conversion List

sales.record

Write. Scope: sales.write, admin. Contract: route_inferred. Conversion Record

sales.stats

Read. Scope: sales.read, analytics.read, admin. Contract: declared_dynamic. Read sales statistics

sales.stats.route.sales.stats

Read. Scope: sales.read, admin. Contract: declared_dynamic. Sales Stats

sales.table

Read. Scope: sales.read, admin. Contract: route_inferred. Sales Table

bezpieczeństwo (21)

security.ai.analyze

Write. Scope: security.write, admin. Contract: route_inferred. Security Ai Analyze

security.ai.ask

Write. Scope: security.write, admin. Contract: route_inferred. Security Ai Ask

security.ai.briefs

Read. Scope: security.read, admin. Contract: declared_dynamic. Security Ai Briefs

security.ai.chain.explain

Read. Scope: security.read, admin. Contract: route_inferred. Security Ai Chain Explain

security.ai.incident.action

Write. Scope: security.write, admin. Contract: route_inferred. Security Ai Incident Action

security.ai.incidents

Read. Scope: security.read, admin. Contract: route_inferred. Security Ai Incidents

security.ai.js.triage

Read. Scope: security.read, admin. Contract: route_inferred. Security Ai Js Triage

security.ai.policies

Read. Scope: security.read, admin. Contract: declared_dynamic. Security Ai Policies

security.ai.policy.action

Write. Scope: security.write, admin. Contract: route_inferred. Security Ai Policy Action

security.ai.verdicts

Read. Scope: security.read, admin. Contract: route_inferred. Security Ai Verdicts

security.blocklist.add

Write. Scope: security.write, admin. Contract: source_inferred. Add a spam rule (email, domain or IP) to the ticket blocklist Required fields: kind, value. Retry-safe with idempotency_key.

security.blocklist.list

Read. Scope: security.read, admin. Contract: explicit. List the current ticket spam rules

security.chain.reanchor

Write. Scope: security.write, admin. Contract: declared_dynamic. Security Chain Reanchor

security.check

Read. Scope: security.read, admin. Contract: source_inferred. Check an IP or email against the platform blocklists and Security AI verdicts

security.ip

Write. Scope: security.write, admin. Contract: route_inferred. Block Ip

security.ip.route.unblock.ip

Write. Scope: security.write, admin. Contract: route_inferred. Unblock Ip

security.list

Write. Scope: security.write, admin. Contract: route_inferred. Access Log List

security.overview.chains

Read. Scope: security.read, admin. Contract: declared_dynamic. Security Overview Chains

security.overview.data

Read. Scope: security.read, admin. Contract: declared_dynamic. Security Overview Data

security.report

Write. Scope: security.write, admin. Contract: source_inferred. Report abuse a connector observed (spam, login attack, scan, fraud) Retry-safe with idempotency_key.

security.visitor

Write. Scope: security.write, admin. Contract: route_inferred. Block Visitor

sessions (5)

sessions.detail

Read. Scope: sessions.read, admin. Contract: route_inferred. Session Detail

sessions.get

Read. Scope: sessions.read, analytics.read, admin. Contract: route_inferred. Get a session journey Required fields: session_id.

sessions.list

Read. Scope: sessions.read, analytics.read, admin. Contract: route_inferred. List sessions

sessions.merged

Read. Scope: sessions.read, admin. Contract: route_inferred. Sessions Merged

sessions.table

Read. Scope: sessions.read, admin. Contract: route_inferred. Sessions Table

settings (11)

settings.ai.eval.watchtower.config

Write. Scope: settings.write, admin. Contract: declared_dynamic. Ai Eval Watchtower Config

settings.get.client.chat.settings

Read. Scope: settings.read, admin. Contract: route_inferred. Get Client Chat Settings

settings.get.settings

Read. Scope: settings.read, admin. Contract: route_inferred. Get Settings

settings.opsiq.branding.clear

Write. Scope: admin. Contract: route_inferred. Opsiq Branding Clear

settings.opsiq.branding.upload

Write. Scope: admin. Contract: route_inferred. Opsiq Branding Upload

settings.privacy.settings.get

Read. Scope: settings.read, admin. Contract: declared_dynamic. Privacy Settings Get

settings.privacy.settings.save

Write. Scope: settings.write, admin. Contract: route_inferred. Privacy Settings Save

settings.save.ai.settings

Write. Scope: settings.write, admin. Contract: route_inferred. Save Ai Settings

settings.save.chat.widget.settings

Write. Scope: settings.write, admin. Contract: declared_dynamic. Save Chat Widget Settings

settings.save.client.chat.settings

Write. Scope: settings.write, admin. Contract: route_inferred. Save Client Chat Settings

settings.save.settings

Write. Scope: settings.write, admin. Contract: route_inferred. Save Settings

site_intelligence (221)

site_intelligence.action.audit.chain

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Action Audit Chain

site_intelligence.action.execute

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Action Execute

site_intelligence.action.preview

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Action Preview

site_intelligence.action.token

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Action Token

site_intelligence.agent.auto.bg

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Auto Bg

site_intelligence.agent.auto.bg.stop

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Auto Bg Stop

site_intelligence.agent.auto.step

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Auto Step

site_intelligence.agent.chat

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Chat

site_intelligence.agent.conn.delete

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Conn Delete

site_intelligence.agent.conn.get

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Conn Get

site_intelligence.agent.conn.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Conn Save

site_intelligence.agent.conn.test

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Conn Test

site_intelligence.agent.coverage

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Coverage

site_intelligence.agent.events

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Events

site_intelligence.agent.hosted.apply

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Apply

site_intelligence.agent.hosted.finalize

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Finalize

site_intelligence.agent.hosted.live.set

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Live Set

site_intelligence.agent.hosted.preview

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Preview

site_intelligence.agent.hosted.rollback

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Rollback

site_intelligence.agent.hosted.start

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Start

site_intelligence.agent.hosted.verify

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Verify

site_intelligence.agent.run.delete

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Delete

site_intelligence.agent.run.finalize

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Finalize

site_intelligence.agent.run.rollback

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Rollback

site_intelligence.agent.run.start

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Start

site_intelligence.agent.run.status

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Status

site_intelligence.agent.run.verify

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Verify

site_intelligence.agent.runs.list

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Runs List

site_intelligence.agent.set.mode

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Set Mode

site_intelligence.agent.status

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Status

site_intelligence.agent.step.apply

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Step Apply

site_intelligence.agent.step.skip

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Step Skip

site_intelligence.agent.turn.status

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Turn Status

site_intelligence.ai.activity

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Ai Activity

site_intelligence.ai.alert.enrich

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Alert Enrich

site_intelligence.ai.alerts

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Alerts

site_intelligence.ai.analyst

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Analyst

site_intelligence.ai.analyst.ask

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Analyst Ask

site_intelligence.ai.analyst.email

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Analyst Email

site_intelligence.ai.analyst.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Analyst Run

site_intelligence.ai.badges

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Badges

site_intelligence.ai.badges.portfolio

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Ai Badges Portfolio

site_intelligence.ai.badges.preview

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Badges Preview

site_intelligence.ai.bl.plan

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Bl Plan

site_intelligence.ai.bl.plan.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Bl Plan Run

site_intelligence.ai.brief

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Brief

site_intelligence.ai.brief.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Brief Run

site_intelligence.ai.comp.analyse

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Comp Analyse

site_intelligence.ai.comp.analyse.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Comp Analyse Run

site_intelligence.ai.content.get

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Content Get

site_intelligence.ai.content.list

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Content List

site_intelligence.ai.content.publish

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Content Publish

site_intelligence.ai.content.write

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Content Write

site_intelligence.ai.daily.digest

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Daily Digest

site_intelligence.ai.discover

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Discover

site_intelligence.ai.fix.apply

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Apply

site_intelligence.ai.fix.apply.bulk

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Apply Bulk

site_intelligence.ai.fix.dismiss

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Dismiss

site_intelligence.ai.fix.dismiss.bulk

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Dismiss Bulk

site_intelligence.ai.fix.generate

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Generate

site_intelligence.ai.fix.generate.all

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Generate All

site_intelligence.ai.fix.list

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix List

site_intelligence.ai.kw.coach

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Kw Coach

site_intelligence.ai.kw.coach.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Kw Coach Run

site_intelligence.ai.overview

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Overview

site_intelligence.ai.page.audit

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Page Audit

site_intelligence.ai.page.audit.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Page Audit Run

site_intelligence.ai.portfolio

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Ai Portfolio

site_intelligence.ai.portfolio.history

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Ai Portfolio History

site_intelligence.ai.portfolio.run

Write. Scope: site_intelligence.write, admin. Contract: declared_dynamic. Si Ai Portfolio Run

site_intelligence.ai.probe

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Probe

site_intelligence.ai.prompt.add

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Prompt Add

site_intelligence.ai.prompt.history

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Prompt History

site_intelligence.ai.prompt.remove

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Prompt Remove

site_intelligence.ai.prompts

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Prompts

site_intelligence.ai.readiness

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Readiness

site_intelligence.ai.ready

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Ready

site_intelligence.alert.resolve

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Alert Resolve

site_intelligence.alerts

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Alerts

site_intelligence.alerts.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List Site Intelligence alerts

site_intelligence.alerts.resolve

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Resolve a Site Intelligence alert Required fields: alert_id.

site_intelligence.analyze

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Analyze

site_intelligence.ask

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ask

site_intelligence.audit.hint

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Audit Hint

site_intelligence.backlink.disavow

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Backlink Disavow

site_intelligence.backlinks

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Backlinks

site_intelligence.backlinks.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List backlinks

site_intelligence.backlinks.refresh

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Backlinks Refresh

site_intelligence.billing.overview

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Billing Overview

site_intelligence.brand.get

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Brand Get

site_intelligence.brand.radar

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Brand Radar

site_intelligence.brand.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Brand Save

site_intelligence.cannibalisation

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Cannibalisation

site_intelligence.compare

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Compare

site_intelligence.competitor.add

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Competitor Add

site_intelligence.competitor.refresh

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Competitor Refresh

site_intelligence.competitor.remove

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Competitor Remove

site_intelligence.competitors

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Competitors

site_intelligence.competitors.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List competitors

site_intelligence.content.brief

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Content Brief

site_intelligence.content.decay

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Content Decay

site_intelligence.content.draft

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Content Draft

site_intelligence.crawl.budget

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Crawl Budget

site_intelligence.crawl.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Crawl List

site_intelligence.crawl.status

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Crawl Status

site_intelligence.crawls.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List Site Intelligence crawls

site_intelligence.crawls.status

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Get crawl status

site_intelligence.dashboard

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Read the Site Intelligence dashboard

site_intelligence.dashboard.route.si.dashboard

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Dashboard

site_intelligence.dashboard.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Dashboard Save

site_intelligence.diag.backfill

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Backfill

site_intelligence.diag.compare

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Compare

site_intelligence.diag.portfolio

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Diag Portfolio

site_intelligence.diag.recs.regen

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Recs Regen

site_intelligence.diag.thresholds

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds

site_intelligence.diag.thresholds.eval

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds Eval

site_intelligence.diag.thresholds.history

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds History

site_intelligence.diag.thresholds.profile

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds Profile

site_intelligence.diag.thresholds.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds Save

site_intelligence.diagnostics

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diagnostics

site_intelligence.exec.report

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Exec Report

site_intelligence.export

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Export

site_intelligence.ga4.connect

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 Connect

site_intelligence.ga4.list.properties

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 List Properties

site_intelligence.ga4.map

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 Map

site_intelligence.ga4.status

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 Status

site_intelligence.ga4.sync

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 Sync

site_intelligence.gbp

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp

site_intelligence.gbp.draft.approve

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Draft Approve

site_intelligence.gbp.draft.dismiss

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Draft Dismiss

site_intelligence.gbp.draft.sync

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Draft Sync

site_intelligence.gbp.drafts

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Drafts

site_intelligence.gbp.locations

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Gbp Locations

site_intelligence.gbp.map

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Map

site_intelligence.gbp.post.draft

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Post Draft

site_intelligence.gbp.post.publish

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Post Publish

site_intelligence.gbp.qa

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Qa

site_intelligence.gbp.qa.approve

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Qa Approve

site_intelligence.gbp.qa.dismiss

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Qa Dismiss

site_intelligence.gbp.qa.sync

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Qa Sync

site_intelligence.gbp.site.prefs

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Site Prefs

site_intelligence.gbp.sync

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Sync

site_intelligence.google.truth.schedule.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Google Truth Schedule Save

site_intelligence.growth

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Growth

site_intelligence.gsc.connect

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Connect

site_intelligence.gsc.list.properties

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc List Properties

site_intelligence.gsc.map

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Map

site_intelligence.gsc.opportunities

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Opportunities

site_intelligence.gsc.status

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Status

site_intelligence.gsc.sync

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Sync

site_intelligence.image.audit

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Image Audit

site_intelligence.internal.links

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Internal Links

site_intelligence.issue.history

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Issue History

site_intelligence.issues

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Issues

site_intelligence.issues.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List Site Intelligence issues

site_intelligence.keyword.add

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Keyword Add

site_intelligence.keyword.remove

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Keyword Remove

site_intelligence.keyword.research

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Keyword Research

site_intelligence.keywords

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Keywords

site_intelligence.keywords.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List tracked keywords

site_intelligence.local

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Local

site_intelligence.local.grid

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Local Grid

site_intelligence.local.grid.scan

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Local Grid Scan

site_intelligence.log.ingest

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Log Ingest

site_intelligence.log.summary

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Log Summary

site_intelligence.metadata.audit

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Metadata Audit

site_intelligence.overview

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Overview

site_intelligence.page

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Page

site_intelligence.page.experience

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Page Experience

site_intelligence.page.optimize

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Page Optimize

site_intelligence.pages

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Pages

site_intelligence.pages.list

Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List Site Intelligence pages

site_intelligence.pagespeed.bridge.status

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Pagespeed Bridge Status

site_intelligence.portfolio.export

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Portfolio Export

site_intelligence.provider.health

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Provider Health

site_intelligence.rank.check

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Rank Check

site_intelligence.rec.action

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Rec Action

site_intelligence.recommendations

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Recommendations

site_intelligence.redirect.audit

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Redirect Audit

site_intelligence.report

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Report

site_intelligence.report.generate

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Report Generate

site_intelligence.reports

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Reports

site_intelligence.reports.list

Read. Scope: site_intelligence.read, admin. Contract: source_inferred. Site Intelligence Reports List

site_intelligence.reset.google.oauth

Write. Scope: site_intelligence.write, admin. Contract: declared_dynamic. Si Reset Google Oauth

site_intelligence.revenue

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Revenue

site_intelligence.revenue.portfolio

Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Revenue Portfolio

site_intelligence.save.shared.google.oauth

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Save Shared Google Oauth

site_intelligence.scan.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Start a Site Intelligence analysis

site_intelligence.schedule.delete

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schedule Delete

site_intelligence.schedule.run.now

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schedule Run Now

site_intelligence.schedule.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schedule Save

site_intelligence.schedules.list

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schedules List

site_intelligence.schema.audit

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schema Audit

site_intelligence.server.engineer

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Server Engineer

site_intelligence.settings.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Settings Save

site_intelligence.sites.list

Read. Scope: site_intelligence.read, admin. Contract: explicit. List Site Intelligence monitored sites

site_intelligence.speed

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed

site_intelligence.speed.progress

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed Progress

site_intelligence.speed.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed Run

site_intelligence.speed.v2

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2

site_intelligence.speed.v2.build.task

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2 Build Task

site_intelligence.speed.v2.collect

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2 Collect

site_intelligence.speed.v2.read

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2 Read

site_intelligence.speed.v2.run

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2 Run

site_intelligence.start.crawl

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Start Crawl

site_intelligence.task.approve

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Approve

site_intelligence.task.assign

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Assign

site_intelligence.task.bulk.apply

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Bulk Apply

site_intelligence.task.bulk.assign

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Bulk Assign

site_intelligence.task.bulk.deadline

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Bulk Deadline

site_intelligence.task.bulk.dismiss

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Bulk Dismiss

site_intelligence.task.deadline

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Deadline

site_intelligence.task.note

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Note

site_intelligence.task.proof

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Proof

site_intelligence.task.reject

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Reject

site_intelligence.task.review

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Review

site_intelligence.topical.map

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Topical Map

site_intelligence.webhook.delete

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Webhook Delete

site_intelligence.webhook.save

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Webhook Save

site_intelligence.webhooks.list

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Webhooks List

site_intelligence.workflow

Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Workflow

status (6)

status.component.save

Write. Scope: status.write, admin. Contract: declared_dynamic. Status Component Save

status.components.save

Write. Scope: status.write, admin. Contract: explicit. Create or update a public status component Required fields: name. Retry-safe with idempotency_key.

status.incident.create

Write. Scope: status.write, admin. Contract: declared_dynamic. Status Incident Create

status.incident.resolve

Read. Scope: status.read, admin. Contract: route_inferred. Status Incident Resolve

status.incidents.create

Write. Scope: status.write, admin. Contract: explicit. Create a status-page incident Required fields: title. Retry-safe with idempotency_key.

status.incidents.resolve

Write. Scope: status.write, admin. Contract: source_inferred. Status Incidents Resolve Retry-safe with idempotency_key.

badania (22)

surveys.analytics.get

Read. Scope: surveys.read, admin. Contract: source_inferred. Surveys Analytics Get

surveys.audiences.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey audiences

surveys.audiences.materialize

Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Audiences Materialize Retry-safe with idempotency_key.

surveys.campaigns.create

Write. Scope: surveys.write, admin. Contract: explicit. Create or update a survey campaign Required fields: deployment_id. Retry-safe with idempotency_key.

surveys.campaigns.launch

Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Campaigns Launch Retry-safe with idempotency_key.

surveys.campaigns.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey campaigns

surveys.deployments.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey deployments

surveys.deployments.set_status

Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Deployments Set Status Retry-safe with idempotency_key.

surveys.get

Read. Scope: surveys.read, admin. Contract: source_inferred. Surveys Get

surveys.imports.create

Write. Scope: surveys.write, admin. Contract: explicit. Create and run a survey import Required fields: kind. Retry-safe with idempotency_key.

surveys.imports.process

Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Imports Process Retry-safe with idempotency_key.

surveys.invitations.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey invitations

surveys.links.create

Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Links Create Retry-safe with idempotency_key.

surveys.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey definitions

surveys.responses.get

Read. Scope: surveys.read, admin. Contract: source_inferred. Surveys Responses Get

surveys.responses.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey responses

surveys.triggers.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey trigger sets

surveys.types.list

Read. Scope: surveys.read, admin. Contract: explicit. List supported question types and Studio templates

surveys.versions.list

Read. Scope: surveys.read, admin. Contract: source_inferred. Surveys Versions List

surveys.webhooks.delete

Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Webhooks Delete Retry-safe with idempotency_key.

surveys.webhooks.list

Read. Scope: surveys.read, admin. Contract: explicit. List survey webhook subscriptions

surveys.webhooks.save

Write. Scope: surveys.write, admin. Contract: explicit. Create or update a survey webhook subscription Required fields: url. Retry-safe with idempotency_key.

zespół (63)

team.delete

Write. Scope: team.write, admin. Contract: route_inferred. Admin Users Delete

team.delete.route.departments.delete

Write. Scope: team.write, admin. Contract: route_inferred. Departments Delete

team.list

Read. Scope: team.read, admin. Contract: route_inferred. Admin Users List

team.list.route.departments.list

Read. Scope: team.read, admin. Contract: declared_dynamic. Departments List

team.perf.activity

Write. Scope: admin. Contract: route_inferred. Team Perf Activity

team.perf.ai.compare

Write. Scope: admin. Contract: route_inferred. Team Perf Ai Compare

team.perf.ai.review

Write. Scope: admin. Contract: route_inferred. Team Perf Ai Review

team.perf.availability

Write. Scope: admin. Contract: route_inferred. Team Perf Availability

team.perf.award.finalize

Write. Scope: admin. Contract: route_inferred. Team Perf Award Finalize

team.perf.award.history

Read. Scope: team.read, admin. Contract: route_inferred. Team Perf Award History

team.perf.award.void

Write. Scope: admin. Contract: route_inferred. Team Perf Award Void

team.perf.claim.pay

Write. Scope: admin. Contract: route_inferred. Team Perf Claim Pay

team.perf.claim.recover

Write. Scope: admin. Contract: route_inferred. Team Perf Claim Recover

team.perf.claim.reject

Write. Scope: admin. Contract: route_inferred. Team Perf Claim Reject

team.perf.clear

Write. Scope: admin. Contract: route_inferred. Team Perf Clear

team.perf.coaching.action.item.add

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Action Item Add

team.perf.coaching.action.item.complete

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Action Item Complete

team.perf.coaching.evidence.pin

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Evidence Pin

team.perf.coaching.evidence.unpin

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Evidence Unpin

team.perf.coaching.session

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Session

team.perf.coaching.session.create

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Session Create

team.perf.coaching.session.update

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Session Update

team.perf.coaching.sessions

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Sessions

team.perf.coaching.status

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Status

team.perf.data

Write. Scope: admin. Contract: route_inferred. Team Perf Data

team.perf.heatmap

Write. Scope: admin. Contract: route_inferred. Team Perf Heatmap

team.perf.history

Write. Scope: admin. Contract: route_inferred. Team Perf History

team.perf.pay.all.claims

Write. Scope: admin. Contract: route_inferred. Team Perf Pay All Claims

team.perf.qa.calibration.record

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Calibration Record

team.perf.qa.dispute.resolve

Write. Scope: admin. Contract: route_inferred. Team Perf Qa Dispute Resolve

team.perf.qa.disputes

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Disputes

team.perf.qa.evaluation.submit

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Evaluation Submit

team.perf.qa.overview

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Overview

team.perf.qa.scorecard.publish

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Scorecard Publish

team.perf.qa.scorecard.save

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Scorecard Save

team.perf.quest.record

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Quest Record

team.perf.quest.save

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Quest Save

team.perf.quest.status

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Quest Status

team.perf.quests

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Quests

team.perf.recognition

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Recognition

team.perf.recognition.settings.save

Write. Scope: admin. Contract: route_inferred. Team Perf Recognition Settings Save

team.perf.recognition.streak.history

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Recognition Streak History

team.perf.recognition.streaks.record

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Recognition Streaks Record

team.perf.reward.budget.authorize

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Budget Authorize

team.perf.reward.claims

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Claims

team.perf.reward.pay

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Pay

team.perf.reward.payouts

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Payouts

team.perf.reward.period.finalize

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Period Finalize

team.perf.reward.period.history

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Reward Period History

team.perf.reward.period.preview

Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Reward Period Preview

team.perf.reward.period.reverse

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Period Reverse

team.perf.reward.period.void

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Period Void

team.perf.reward.save

Write. Scope: admin. Contract: route_inferred. Team Perf Reward Save

team.perf.reward.state

Write. Scope: admin. Contract: route_inferred. Team Perf Reward State

team.perf.trends

Write. Scope: admin. Contract: route_inferred. Team Perf Trends

team.perf.v2.data

Write. Scope: admin. Contract: route_inferred. Team Perf V2 Data

team.perf.v2.export

Write. Scope: admin. Contract: route_inferred. Team Perf V2 Export

team.perf.v2.live

Write. Scope: admin. Contract: route_inferred. Team Perf V2 Live

team.perf.v2.reward.sheet

Write. Scope: admin. Contract: route_inferred. Team Perf V2 Reward Sheet

team.perf.v2.settings

Write. Scope: admin. Contract: route_inferred. Team Perf V2 Settings

team.perf.v2.settings.save

Write. Scope: admin. Contract: route_inferred. Team Perf V2 Settings Save

team.save

Write. Scope: team.write, admin. Contract: route_inferred. Admin Users Save

team.save.route.departments.save

Write. Scope: team.write, admin. Contract: route_inferred. Departments Save

bilety (77)

tickets.ai.summary

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Ai Summary

tickets.analytics

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Analytics

tickets.approval.decide

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Approval Decide

tickets.approval.request

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Approval Request

tickets.approvals.pending

Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket Approvals Pending

tickets.assignment.rule.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Assignment Rule Delete

tickets.assignment.rule.list

Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket Assignment Rule List

tickets.assignment.rule.save

Write. Scope: tickets.write, admin. Contract: declared_dynamic. Ticket Assignment Rule Save

tickets.assignment_rules.delete

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Assignment Rules Delete Retry-safe with idempotency_key.

tickets.assignment_rules.save

Write. Scope: tickets.write, admin. Contract: explicit. Create or update a ticket assignment rule Required fields: name. Retry-safe with idempotency_key.

tickets.bulk

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Bulk Retry-safe with idempotency_key.

tickets.bulk.route.tickets.bulk

Write. Scope: tickets.write, admin. Contract: route_inferred. Tickets Bulk

tickets.calendar.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Sla Calendar Delete

tickets.calendar.save

Write. Scope: tickets.write, admin. Contract: declared_dynamic. Sla Calendar Save

tickets.claim

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Claim

tickets.csat.get

Read. Scope: tickets.read, admin. Contract: explicit. Get the CSAT response for one ticket Required fields: ticket_id.

tickets.csat.list

Read. Scope: tickets.read, admin. Contract: explicit. List ticket CSAT responses in the bound workspace

tickets.csat.metrics

Read. Scope: tickets.read, admin. Contract: explicit. CSAT metrics for a period (the tickets dashboard numbers)

tickets.embed.load

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Embed Load

tickets.embed.save

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Embed Save

tickets.embed.secret

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Embed Secret

tickets.field.save

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Field Save

tickets.follower.add

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Follower Add

tickets.follower.remove

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Follower Remove

tickets.get

Read. Scope: tickets.read, admin. Contract: source_inferred. Tickets Get

tickets.kb.deflection

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Kb Deflection

tickets.kb.draft

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Kb Draft

tickets.kb.save

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Kb Save

tickets.kb.version.restore

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Kb Version Restore

tickets.kb.versions

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Kb Versions

tickets.link.add

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Link Add

tickets.link.remove

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Link Remove

tickets.list

Read. Scope: tickets.read, admin. Contract: source_inferred. Tickets List

tickets.open

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Open Retry-safe with idempotency_key.

tickets.open_guest

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Open Guest Retry-safe with idempotency_key.

tickets.ops.summary

Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket Ops Summary

tickets.policy.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Sla Policy Delete

tickets.policy.save

Write. Scope: tickets.write, admin. Contract: declared_dynamic. Sla Policy Save

tickets.presence.leave

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Presence Leave

tickets.presence.ping

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Presence Ping

tickets.quick.replies

Write. Scope: tickets.write, admin. Contract: declared_dynamic. Ticket Quick Replies

tickets.quick.reply.save

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Quick Reply Save

tickets.relations.get

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Relations Get

tickets.reply

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Reply Retry-safe with idempotency_key.

tickets.reply.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Delete

tickets.reply.edit

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Edit

tickets.reply.outbound.convert

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Outbound Convert

tickets.reply.translate

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Translate

tickets.reply.translation.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Translation Delete

tickets.reply.translation.save

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Translation Save

tickets.rule.compose

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Rule Compose

tickets.side.ai.draft

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Side Ai Draft

tickets.side.assign.department

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Side Assign Department

tickets.side.create

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Side Create

tickets.side.list

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Side List

tickets.side.mention

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Side Mention

tickets.side.recipients

Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket Side Recipients

tickets.side.reply

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Side Reply

tickets.sla.delete

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Sla Delete Retry-safe with idempotency_key.

tickets.sla.save

Write. Scope: tickets.write, admin. Contract: explicit. Create or update an SLA policy Required fields: name. Retry-safe with idempotency_key.

tickets.split

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Split

tickets.split.candidates

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Split Candidates

tickets.tag.add

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Tag Add

tickets.tag.list

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Tag List

tickets.tag.remove

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Tag Remove

tickets.tags.add

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Tags Add Retry-safe with idempotency_key.

tickets.tags.list

Read. Scope: tickets.read, admin. Contract: source_inferred. Tickets Tags List

tickets.tags.remove

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Tags Remove Retry-safe with idempotency_key.

tickets.update

Write. Scope: tickets.write, admin. Contract: source_inferred. Update a ticket status, priority, subject, department or assignment Retry-safe with idempotency_key.

tickets.view.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket View Delete

tickets.view.list

Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket View List

tickets.view.save

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket View Save

tickets.views.delete

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Views Delete Retry-safe with idempotency_key.

tickets.views.save

Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Views Save Retry-safe with idempotency_key.

tickets.worklog.add

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Worklog Add

tickets.worklog.delete

Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Worklog Delete

tickets.worklog.list

Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Worklog List

todos (1)

todos.add

Write. Scope: todos.write, admin. Contract: source_inferred. Todos Add Retry-safe with idempotency_key.

visitors (3)

visitors.block

Write. Scope: visitors.write, security.write, admin. Contract: route_inferred. Block a visitor Required fields: visitor_id.

visitors.list

Read. Scope: visitors.read, analytics.read, admin. Contract: route_inferred. List visitors

visitors.table

Read. Scope: visitors.read, admin. Contract: route_inferred. Visitors Table

haki webhaki (1)

webhooks.events.list

Read. Scope: webhooks.read, crm.read, admin. Contract: explicit. List outbound webhook events and their payloads

pisanie (6)

writing.analyze

Write. Scope: writing. Contract: source_inferred. Writing Analyze Retry-safe with idempotency_key.

writing.compose

Write. Scope: writing. Contract: source_inferred. Writing Compose Retry-safe with idempotency_key.

writing.reply

Write. Scope: writing. Contract: source_inferred. Writing Reply Retry-safe with idempotency_key.

writing.rewrite

Write. Scope: writing. Contract: source_inferred. Writing Rewrite Retry-safe with idempotency_key.

writing.summarize

Write. Scope: writing. Contract: source_inferred. Writing Summarize Retry-safe with idempotency_key.

writing.translate

Write. Scope: writing. Contract: source_inferred. Writing Translate Retry-safe with idempotency_key.

Czy OpenAPI i Listonosz są dostępne?+

Tak. Generowane OpenAPI 3.0 dokument jest na /api/v1/openapi.php, wygenerowana kolekcja Postman jest w /api/v1/postman.php, a doktorzy deweloperów do odczytu ludzkiego są na /api/docs/.

Jak mogę pracować z więcej niż jednym miejscem pracy?+

Wyślij site_key w organizmie, aby wybrać miejsce pracy. Klucz wydany dla jednego miejsca pracy pozostaje przypięty do niego; klucz z kontekstem admin może wybrać dowolny obszar roboczy, który jest dozwolone, i nie jest on przeznaczony na jakiekolwiek nie jest.

Które działania mogą być tylko do odczytu?+

Każda akcja oznaczona jako odczyt. Ustaw tryb uprawnień na klucz read_only i każdy zapis jest odrzucany read_only_key, więc integracja sprawozdawcza nie może zmienić niczego nawet przez pomyłkę.

Dlaczego nie znalazłem czegoś, co widzę w admirał?+

Klucz jest skanowany do przestrzeni roboczej. Zapisy w innych miejscach pracy wracają not_found Zamiast błędu pozwolenia, więc API nigdy nie potwierdza, czy coś istnieje gdzie indziej.

Programista

Bezpieczeństwo API

Jedna umowa bezpieczeństwa dla każdego złącza i integracji: zapytaj OpsIQ co wie o IP lub nadawca, i karmić ponownie nadużyć twój własny system widzi.

OpsIQ już broni się: IP Firewall bloki atakujących, rurociąg biletów filtruje spam, a AI Security klasyfikuje przestępców i proponuje zasady blokowania. API otwiera tę inteligencję na inne systemy. Platforma rozliczeniowa, portal klienta lub aplikacja niestandardowa może sprawdzić odwiedzającego przed zaufaniem mu i zgłosić to, co obserwował, więc cała instalacja uczy się z każdej powierzchni.

Co możesz zrobić?

Sprawdź przed zaufaniem

security. check odpowiedzi ze stanu firewall, wszelkie spam zasady pasujące nadawcy, i buforowane AI werdykt dla IP. Jeden telefon, jedna skonsolidowana opinia.

Zgłoś to, co widziałeś.

security.report rejestruje obserwację jako wydarzenie bezpieczeństwa, ma AI Bezpieczeństwa klasyfikuje IP od razu, i ostrzega administratorów, gdy werdykt wraca wysokie ryzyko. Powtarzane raporty gromadzić w incydentach, dokładnie jak ataki OpsIQ widzi bezpośrednio.

Zasady udostępniania spamu

security. blocklist. add i security . locklist. html list odczytują i zapiszą te same zasady spamu, które używa strona Bilety, więc nadawca zablokowany w jednym systemie jest wszędzie zablokowany.

Zgłaszanie nadużyć ze złącza
POST /api/v1.php
Authorization: Bearer opq_your_api_key
Content-Type: application/json

{
  "action": "security.report",
  "ip": "203.0.113.7",
  "kind": "spam",
  "reason": "Sent 40 junk tickets in 10 minutes",
  "source": "whmcs:example.com"
}

Skapy i bezpieczeństwo

security.read

Wymagane dla bezpieczeństwa. Sprawdzanie i bezpieczeństwo. Blocklist. list. Bezpieczne do zapewnienia integracji raportowania.

security.write

Wymagane dla bezpieczeństwa. report i security. blocklist. add. Daj to tylko do systemów, które chcesz karmić zasady i raporty w.

Nic nie jest po cichu zniszczone.

Zablokowany nadawca nadal ląduje w widoku Spam, gdzie bilet może być odczytany i przywrócony.

Platforma chroni się

The server’s own IP Adresy IP nie mogą być nigdy blokowane, dodawane do listy zablokowanych ani zgłaszane poprzez ten mechanizm. API, więc błędnie skonfigurowana integracja nie może spowodować upadku platformy.

💡
Mieć klucz w ramach Integracji, a następnie API Keys, i dać mu tylko zakres zabezpieczeń, którego potrzebuje. Pełna umowa na każde działanie jest w meta. actions i dokument OpenAPI.
Czy moje istniejące złącza używają tego automatycznie?+

Wyłączona synchronizacja jest już automatyczna: gdy blokujesz IP, podłączone platformy są informowane przez synchronizację bezpieczeństwa złącza. API jest przychodzącą połową. Wskaż swój złącze lub kod niestandardowy na tych czterech działań z kluczem niosącym ze sobą skoki bezpieczeństwa.

Gdzie mieszkają zasady spamu?+

Jeden sklep. Strona Bilety kontroli nadawcy Block, spam AI w ustawieniach, i ten API wszystkie działają przeciwko tej samej listy blokady, więc jest dokładnie jedno miejsce do sprawdzenia.

Programista

Wydarzenia API

Wyślij niestandardowe zdarzenia z serwera lub strony internetowej do OpsIQ dla analityki, eksperymentów, wyzwalaczy CRM i warunków haka.

Jak to działa?
Wydarzenia APIWywołanie ścieżki () wysyłanie niestandardowych demo_booked event do OpsIQ, który zasila cele konwersji, segmenty i wyzwalacze.OpsIQ.track ("demo_booked", {wartość: 0, plan: "pro"});Cele konwersjiSegmentyPodajniki i hakiPrzeglądarka (OpsIQ.track) lub po stronie serwera POST /v1/events
Wydarzenia API

Zdarzenia po stronie przeglądarki

Śledzenie zdarzeń przeglądarki
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "button_clicked", {
  button: "signup",
  page: "/pricing",
  variant: "green"
}]);

Zdarzenia po stronie serwera

Serwery, nagrywania działań i konwersje przeciwko kontaktowi poprzez działanie API. Użyj crm.activities.record w odniesieniu do cyklu życia / działalności gospodarczej oraz crm.conversions.record dla konwersji. Nie ma events.send działanie; odbiornik zdarzeń CRM przychodzący do obiektu /v1/inbound.php?t=<token> dla systemów trzeciej partii, które wciskają wydarzenia.

Działanie po stronie serwera (działanie API)
POST /api/v1.php
Authorization: Bearer opq_your_key
Content-Type: application/json

{
  "action": "crm.activities.record",
  "site_key": "site_abc123",
  "email": "[email protected]",
  "event": "subscription.upgraded",
  "value": 50,
  "currency": "USD"
}

Konwencja o nazewnictwie

Notacja kropki

"order . completed" not "orderCompleted.

Czas przeszły

"button. Clicked" nie "button. Click".

Bądź dokładny

"ceny.plan_selected"nie"user_action".

Programista

Jak dane przepływają przez OpsIQ

Zrozumienie przepływu danych pomaga debugować integracje i optymalizować wydajność.

Jak to działa?
Jak dane przepływająDane płyną z widżetu i sygnalizatora do OpsIQ rdzeń (CDP, wykres tożsamości, mózg AI, analityka, CRM) następnie na zewnątrz przez haki i REST API.Widget& nadajnikRdzeń OpsIQCDP · wykres tożsamościMózg ptasiej grypyanalityka · CRMHaki internetoweRESY API
Przepływ danych

Przepływ danych przychodzących

1
Nadajnik widżetowy

W JavaScript widget wysyła strony widoki, kliknięcia i wiadomości czatu do /beacon.php.

2
Spożycie leku

Zdarzenia przechowywane w opsiq_events z site_key, typ zdarzenia, klient i właściwości.

3
Zespół sesji

Sesja builder grupy przeglądania stron do sesji (poprzez cron).

4
Rozdzielczość tożsamości

Po zidentyfikowaniu anonimowe zapisy są powiązane z profilem klienta.

5
Synchronizacja połączenia

Złącza pobierają dane z zewnętrznych platform i przechowują w pamięci podręcznej złącza.

6
Kontekst AI

AI gromadzi kontekst z: historii odwiedzających, profilu klienta, danych złącza, KB i promptu.

Przepływ danych z zewnątrz

1
Pożary zdarzeń

Wewnętrzne zdarzenia pożarowe (ticket. created, chat. message, order. completed).

2
Kolejka zadań

Zdarzenie umieszczone w kolejce zadań async.

3
Wysyłka z hakiem

Dyspozytor podpisuje i wysyła do wszystkich punktów końcowych.

4
Nawrót awarii

Nieudany proces dostaw z wykładniczym wycofaniem.

Ustawienia

Ustawienia odniesienia

Ustawienia to centrum sterowania przestrzeni roboczej. Wszystko poniżej jest skalowane do obszaru roboczego, w którym jesteś, więc jedno konto może uruchomić kilka marek o różnych tożsamości, zachowania czatu i zasad retencji.

Znalezienie ustawienia

W Ustawieniach jest około 600 indywidualnych kontroli, rozłożone na jedenaście kart zgrupowanych pod czterema menu. Nie oczekuje się, że będziesz je przeglądał.

Ustawienia wyszukiwania (Ctrl + K)

Wciśnij Ctrl + K lub Cmd + K na komputerze Mac, w dowolnym miejscu strony Ustawienia. Wpisz proste słowa i naciśnij Enter, aby przejść prosto do kontroli. Szukaj toleruje małe literówki i rozumie podobne słowa, tak że terminarz znajduje Cron a prywatność znajdzie kontrolę śledzenia. Pokazuje tylko ustawienia, które twoja rola może się otworzyć.

Przestrzeń robocza i plan

Ogólne i Licencyjne.

AI i wsparcie klienta

Admin Assistant AI, Chat Klienta, OpsIQ Pisanie i Wsparcie Portal.

Dane i zarządzanie

Śledzenie i prywatność, uprawnienia i bezpieczeństwo.

System

Cron Setup (tylko w samolotach) i Danger Zone.

Zapisywanie

Każda zakładka sama zapisuje swój przycisk Zapisz. Klient czat i OpsIQ Writing pin ich na ekranie. Zapisz przed przełączeniem kart; zmiany nie są przenoszone przez.

Głębokie powiązania

Zakładka aktywna jest zapisywana na adres strony, więc zakładka może być zakładką lub wysłana do kolegi.

Ogólne: Tożsamość biznesowa

Najważniejsza karta na stronie. AI czyta te wartości na każdej odpowiedzi, raportu i codziennie briefingu.

Nazwa przedsiębiorstwa

Używane w raportach AI, dziennych slipach i zwrotów zwracających uwagę na klienta. Dopasuj swój stopkę strony internetowej.

Przemysł

Analiza AI krawcowa, ocena wiodąca, slipy i ankiety. Wybierz z hostingu internetowego, e-commerce, SaaS, nieruchomości, agencja, doradztwo, opieka zdrowotna, edukacja, finanse lub ogólne biznesu.

Język systemowy

Język pokazywany każdemu, kto nie wybrał swojego. Każdy agent może go obejść w swoim profilu.

Użyj języka przeglądarki

Pokazuje znak w zakładce w języku użytkownika. Gdy ktoś wybierze język, jego wybór wygrywa i to nigdy go nie przewyższa.

Czas systemu

Strefa, w której działa cały system: daty, raporty, harmonogramy i tło cron. Użyj strefy czasowej operacji, a nie klientów.

Ogólne: GeoIP i śledzenie

Ścieżka do bazy danych GeoIP2

Pełna ścieżka do GeoLite2-City.mmdb. Auto- wykrywa pierwsze obciążenie cPanel, Plesk, DirectAdmin, Cloudways, Docker i zwykły Linux lub Windows. Dodaj GeoLite2-ASN.mmdb w tym samym folderze dla dostawcy Internetu odwiedzającego.

Tryb źródłowy Geo

Tylko GeoLite2, Geolite2 z Cloudflare odwrócenie, lub Cloudflare Tylko.Cloudflare tryby wymagają, aby witryna była proxy przez Cloudflare, z lokalizacją miejsc odwiedzających włączone dla miasta i regionu szczegółowości.

Czas (-y) sesji

Bezczynność przed sesją odwiedzających jest uważana za zakończoną. Domyślny 14400, czyli cztery godziny.

Żywy (-e) odświeżacz (-e, -i)

Jak często Live Feed odświeża. Domyślne 30 sekund.

Próg aktywny (min)

Jak długo gość liczy jako na żywo po ostatnim załadowaniu strony. Domyślne 2 minut. Jest to Live Feed drop- off, nie długość sesji.

Zatrzymanie danych (dni)

Usuwa zebrane i wygenerowane rekordy w tym wieku: analityka, czat, bilety, informacje zwrotne, transakcje, telemetria AI, logi integracyjne i CRM aktywności. 0 utrzymuje wszystko na zawsze. Ustawienia, autorskie treści i paragony zgody nigdy nie są usuwane.

Kiedy czat jest usunięty

Wybór ilości usuniętej rozmowy pozostaje na rekordzie: pełny rekord, rekord bez rozmowy lub tylko wynik. Usuwanie zawsze ukrywa czat z skrzynki odbiorczej i historii odwiedzających. Zaplanowany retencja i Zapomnijcie o odwiedzającym zawsze wymazać w całości niezależnie od tego.

Track bot ruchu

Liczy się jako odwiedzających. Zostaw; to zwiększa liczbę gości i przewraca każdy raport.

Przekaz zwrotny włączony

Pokazuje widget informacji o całym miejscu dla odwiedzających. Oddzielny od ankiet czatu pod Chat klienta, Wsparcie Flow.

Ogólne: AI Cechy

Przełączniki Master dla każdej powierzchni AI. Wszystkie domyślnie włączone i zapisane na przestrzeni roboczej.

AI Travel na biletach

Klasyfikuje każdy bilet według kategorii, priorytetu i sentymentu, a na górze pisze podsumowanie wątków.

Podsumowanie przejazdu AI

Pokazuje znaczniki i podsumowanie w podpowiedzi, gdy agent znajduje się wiersz na liście biletów. Wymaga AI Travel.

Kopilot skrzynki odbiorczej (kompozytor)

Dodaje projekt odpowiedzi AI, Cieplej, Krócej, Bardziej formalne i przeproszone przyciski pod biletem odpowiedzi. Nic nie wysyła bez agenta.

Ask- OpsIQ Copilot

Kwalifikowalny drugi pilot na każdej stronie administratora. Wie, który klient, faktura lub bilet jest otwarty.

Poranne streszczenie

Na pierwszy otwarty każdego dnia drugi pilot prezentuje pilne bilety, nieodebrane odpowiedzi i czaty oczekujące. Niedziele produkują tydzień w recenzji.

Ogólne: pieniądze, marka, kopia zapasowa

OpsIQ waluta bazowa

Każda suma pieniędzy w admin jest przekształcana w tej walucie na wyświetlaczu. Złącza przechowywać własną walutę źródłową; ustawić, że na złącze.

Autosynchronizacja FX

Odświeża ceny co sześć godzin z bezpłatnej publicznej paszy bez klucza API. Możesz dodać stawki ręczne, które nadrabiają wartość kanału. Z autosynchronizacji off, waluty bez kursu ręcznego pozostają nieskonwertowane.

Włącz funkcje handlu i rozliczania

Statki wyłączone. Włączenie go ujawnia stronę sprzedaży i konwersji, karty dochodów deski rozdzielczej i Live Intelligence Feed. Z nim, każda powierzchnia cena jest ukryta i strona sprzedaży opuszcza menu.

Słownictwo handlowe

Uczy OpsIQ swoje brzmienie: czy zrobić wznowienie, słowo na odnowienie, co sprzedajesz, i jak nazywa się kupujących.

Znakowanie i logo

Dwa pliki do pobrania, jeden do tła (paska boczna admin) i jeden do ciemnego (strona sign- in). PNG, JPG, WebP lub SVG do 3 MB.

Agent wywiadu, pozwolić prywatnym SSH cele

Autoimplementacyjny agent SEO łączy się przez SSH. Domyślnie blokowane są prywatne, zapętlone i zastrzeżone adresy jako środek antySSRF. Włączam tylko na samoobsługowych instalacjach, które muszą dotrzeć do lokalnego serwera.

OpsIQ Kopia zapasowa / przywracanie

Eksportuje wszystkie ustawienia i OpsIQ-owned table plus przesłane pliki. Przywracanie zastępuje OpsIQ tylko konfiguracja i rejestry; nigdy nie dotyka klientów, faktur, biletów, usług, domen, zamówień lub transakcji.

⚠️
Weź kopię zapasową przed użyciem czegokolwiek w strefie niebezpiecznej. Backup mieszka w Strefie ogólnej i usuń działania żyć w strefie niebezpieczeństwa, więc łatwo jest dotrzeć do przycisku usunąć bez uprzedniego eksportu.
Ustawienia

Ustawienia: Bezpieczeństwo

Ochrona dla admin signing- in, konta personelu i dane OpsIQ zbiera. Zapisy klienta na portalu wsparcia są skonfigurowane oddzielnie.

Ochrona sygnalizatora

Google reCAPTCHA

Zatrzyma boty i naklejki na sygnie admin. Wybierz v3 (niewidoczne, punktowane) lub v2 (pole wyboru), ustaw próg punktacji v3 i podaj stronę i tajne klucze. Te same klucze są ponownie używane przez formularz wniosku o portal wsparcia.

Zaznaczony auto- Logowanie

Blokuje adres po wielu niepowodzeniach w oknie, przez kilka godzin. Możesz dostosować wiadomość z zamkniętej strony i pokazać małe rozproszenie ekranu oczekiwania.

Zaloguj się Hardening

Polityka haseł o minimalnej długości, odrzucenie hasełek znalezionych w znanych naruszeniach, blokada konta na podstawie informacji o naklejkach, obowiązkowe dwuliterowe czynniki dla każdego admina, ponowne wejście hasła przed niebezpiecznymi działaniami oraz sygnalizacja nowego urządzenia w alarmach.

Pojedyncze sygnalizatory (OIDC)

Zapisuj się do swojego dostawcy tożsamości. Potrzebny jest emitent URL, identyfikator klienta i tajemnica klienta. Domeny automatycznego dostarczania danych, jeden na linię, tworzyć użytkowników automatycznie przy pierwszym logowaniu.

Pojedynczy sygnał włączony (SAML 2.0)

Dla dostawców, którzy mówią SAML. OpsIQ dostarcza odpowiedź ACS URL oraz identyfikator jednostki SP; podajesz identyfikator jednostki IDP, sign- in URL, fakultatywne wylogowanie URL oraz X.509 podpisywanie certyfikatu. Pola atrybutu e-mail i nazwa są potrzebne tylko dla niestandardowych nazw atrybutów.

Provisioning SCIM

Stworzenie, aktualizacja i dezaktywacja OpsIQ kont.OpsIQ dostarcza SCIM podstawa URL Generujesz tutaj znaczniki, żeby można było je cofnąć bez rozbijania reszty.

Zagrożenia, blokowanie i zbieranie

Lista dodatków do Egresu na zewnątrz

Referencje, które zewnętrzne hosty tego obszaru roboczego mogą wywołać. Towarzysz do kontroli docelowej SSH w Generale.

Zagrożenie i blokowanie auto-

Blokuje odwiedzającego, gdy ich wynik zagrożenia przechodzi próg. 0 wyłącza go. Oglądaj stronę Przegląd bezpieczeństwa na tydzień przed wyborem numeru.

Wiadomość o zablokowaniu strony

Wiadomość, którą blokowany odwiedzający widzi, jest prostym tekstem lub własnym niestandardowym ekranem bloku HTML.

Podstawowe wartości internetowe od prawdziwych odwiedzających

Środki LCP, INP i CLS z prawdziwych sesji.

Związane, bezpieczne dostawy zdarzeń

Niestandardowe wydarzenia kolejka w przeglądarce i dostarczyć w partiach z powtórzeń, zmniejszając straty na słabych połączeń komórkowych.

Podpisane znaki identyfikujące

Prawdziwe wsporniki widżetu posiadają rotacyjny token kryptograficzny, więc sfałszowane dane śledzące mogą być odrzucone. Domyślnie wyłączone; umożliwianie zmian w sposobie uwierzytelniania osadzania, więc najpierw przetestować.

Alarmy bezpieczeństwa

Domyślnie wyłączone. Wykrywanie i blokowanie działa niezależnie. Ta karta kontroluje, czy jest powiedziane, i jak bardzo AI pomaga.

Włącz wpisy dotyczące bezpieczeństwa

Przełącznik do tej karty.

Próg fali logowania

Ile nieudanych znaków w krótkim czasie liczy się jako fala, na którą warto zaalarmować.

IP wywiad reputacji

Dodaje wynik zagrożenia dla odwiedzających pojawiających się w publicznych mediach.

Zegarek na stronie

Godzina ważności i kontrola wygaśnięcia TLS, ostrzegająca przed wygaśnięciem certyfikatu.

Analityk bezpieczeństwa i informacji o incydentach w zakresie ptasiej grypy

Dodaje do tego wyjasniony werdykt podejrzanej działalności, a powiązane z nimi ataki w jeden czytelny incydent, a nie strumień wydarzeń.

Autopilot polityczny

Działa samodzielnie, zmieniając to, czego się uczy z incydentu w proponowaną lub stosowaną zasadę. Pozostaw to do czasu przeglądu jego propozycji i zgody z nimi.

Codzienne bezpieczeństwo Dimest i tygodniowy doradca postawy

Codzienne podsumowanie na stronie Przegląd bezpieczeństwa oraz cotygodniowa lista kontrolna hartowania pokazująca, co jest chronione i co jest nadal otwarte.

Wnioski o autostradę

Proponowana zasada blokowa, której nigdy nie użyłeś, wygasa sama, zamiast się gromadzić.

DOM Replay sesji

Włącz powtórkę sesji DOM

Nagrywa sesje odwiedzających do odtwarzania. Kiedy nie jest załadowana biblioteka replay, więc nie ma kosztów pozostawienia go. Nagrania są pobierane i prywatne maskad, i są oglądane na stronie Session Replay pod Analizy.

Szybkość próbkowania, maks. wychwytywanie, retencja

Jaki udział sesji należy nagrywać, jak długo może trwać pojedyncze nagranie i ile dni są przechowywane nagrania.

⚠️
Odtwarzanie sesji rejestruje prawdziwe osoby za pomocą witryny. Zachować częstotliwość próbkowania i retencji tak niskie, jak nadal będzie odpowiadać na pytanie, i ujawnić go w swoim zawiadomieniu o prywatności.
Ustawienia

Ustawienia: Śledzenie i prywatność

Co OpsIQ może zbierać i jak długo każdy rodzaj rekordu przetrwa.

Wyłączenia

Z wyłączeniem IPs i rangi CIDR

Adresy nigdy nie wyśledziły, jeden na linię, dokładne adresy lub zakresy CIDR. Najczystszy sposób, aby utrzymać swój zespół z dala od analityki, ponieważ obejmuje wszystkich pod tym adresem, a nie tylko signed- w adminach.

Z wyłączeniem Ścieżek URL

Wzory stron nigdy nie wyśledzone, jedna na linię, karty z gwiazdką. Na przykład /admin/* utrzymuje całe biuro back poza dziennikiem odwiedzających.

Polityka zatrzymywania danych

Przekładnia auto- czyszczenie w dniach. Oddziel się od ogólnego ustawienia zatrzymywania danych w Generalnym i ze strefy zagrożenia czystka.

Rejestry interakcji z ptasią grypą

Telemetria zaufania, w której wyświetlane są krótkie podglądy zapytań i odpowiedzi. Domyślne dni 90. Posiada to większość tekstu klienta, więc skracaj go najpierw przy zaostrzaniu prywatności.

Zdarzenia związane z wykorzystywaniem ptasiej grypy

Token per- call liczy się dla raportowania kosztów. Domyślne dni 90. Tylko numery, brak treści wiadomości.

Ścieżka audytu działań

Domyślny dzień 365. Zachowaj to najdłużej; to jest twój ślad dowodowy.

Diagnostyka

Domyślne dni 30.

Pytania bez odpowiedzi

Klastry pytań AI nie mógł odpowiedzieć. Domyślne dni 90. Przepracuj je na Pytania, które przegapiła strona AI przed ich wygaśnięciem.

Watchdogs i eksport

Alerty analizatora metrycznego

Codzienne porównanie wczoraj z ostatnim bazowym, ostrzegając, kiedy metryka porusza się więcej niż próg. Domyślnie 35 procent.

Eksport z magazynu

Nocne wysypiska sesji, odwiedzających, przeglądów i powiązanych tabel dla własnego stosu BI, w formacie wybranym przez Ciebie, przechowywane przez kilka dni. Domyślnie wyłączone.

Ustawienia

Ustawienia: Admin Assistant AI

Pływający asystent Twój personel używać wewnątrz admin, z odczytu na żywo dostępu do klientów, faktur, biletów, serwerów i dzienników cron. Inny asystent od klienta - zwrócony w stronę klienta Chat.

Włącz widżet AI OpsIQ

Pokazuje przycisk asystenta na każdej stronie administratora. Off ukrywa go dla wszystkich.

Układ i zachowanie

Pozycja narożnika, szerokość panelu (320 do 600 px), maksymalna wysokość (400 do 900 px), promień narożny (0do 24), rozmiar czcionki i matowe szkło rozmyte za panelem.

Pokaż szybkie chipy

Przyciski skrótu przy nagłówku. Najszybszy sposób na większość personelu.

Pokaż informacje o modelu

Wyświetla, który model odpowiedział i jak długo to trwało. Przydatne podczas strojenia kosztów, hałas do codziennego użytku.

Brama dostępu dla Per- admin

Tylko pokazuje asystenta signed- w admin, którego nazwa użytkownika i e-mail zarówno dopasować OpsIQ agenta przypisany do tej przestrzeni roboczej. Właściciele zawsze przejść. Użyj przycisk Sprawdź mój dostęp przed włączeniem lub można zablokować swój własny zespół.

AI Persona

Wyświetla nazwę, nagłówek i niestandardową wiadomość powitalną wyświetlaną po otwarciu panelu.

Inteligentne Quick- Chips działania

Edytuj etykietę i podręczny sygnał dla każdego skrótu, dodawaj własny lub resetuj do domyślnych. Etykieta jest tym co widzą pracownicy, a prompt jest tym, co otrzymuje AI.

Kolory i kształt

Kształt chipu (pigułka, zaokrąglony, kwadratowy), kolory chipów, motyw karty i kształt wyrzutni (okrągły, wiewiórka, kwadrat), z podglądem na żywo.

Rozmowa Pamięć

Asystent zapamiętuje historię każdej osoby w trakcie sesji przeglądarki, aż do wiadomości 120, zapisanych w twojej bazie danych.

Ustawienia

Ustawienia: Klient rozmowy

Czat widget użytkowników i największy obszar ustawień. Sześć podzakładek, z głównym przełącznikiem i Zapisz przypięte do góry karty.

Praca za pośrednictwem podkart w celu nowej instalacji: Tożsamość i kopia, Wygląd, Zachowanie, Wsparcie Flow, Szkolenia Wiedzy. Zaawansowana jest infrastruktura i może czekać.

Tożsamość i kopia

Identyfikacja marki

Nazwa widget, taglina, nazwa AI, nazwa używana do systemowych i bezczynności powiadomień oraz sposób, w jaki pojawiają się nazwy agentów. Agent Name Source decyduje między prawdziwymi nazwami, nazwą niestandardową lub etykietą zespołu.

In- Chat Pozdrowienia

Dwa pozdrowienia, jeden dla wszystkich odwiedzających i jeden dla zidentyfikowanych gości. Pytanie zaczyna więcej rozmów niż oświadczenia.

Popup Teaser

Pływająca wiadomość przed otwarciem czatu, z własną nazwą, wielkością czcionki i kolorami. AI może pisać teasery, z kontrolami dla ilu generować, ile pokazać na wizytę i przepaść między nimi.

Prompy i Handoff

Pełny scenariusz: prosząc o imię i email, potwierdzenie, prośba o człowieka, brak dostępnych agentów, bilet utworzony lub anulowany, przekazanie oczekujące. Około dwóch tuzinów pojedynczych linii w panelu składanym.

Ogłoszenia o stanie i niezakłóceniu

Trzy wiadomości widoczne dla klienta: agent zamyka czat, gość jest cicho, a agent ręce z powrotem do AI. Unikaj wewnętrznych sformułowań jak rozwiązane lub testowane.

Kompozytor i sugestie

Wstęp na miejsce, etykieta przycisku-do-człowieka i sugestie dotyczące otwarcia. Trzy dobre propozycje odwracają więcej biletów niż strona artykułów.

Launcher, Icon i Avatary

Ikona Launcher, opcjonalna inna ikona przy otwarciu, rozmiar launcher i obrazy dla ludzkiego agenta i AI.

Wygląd

Motyw i szkło

Tryb tematyczny, premium zaprogramowany kolor, intensywność rozmycia i nieprzezroczystość, plus przełączanie animacji, linii separatorów, ukrywanie wiersza stanu, ukrycie karty skrzynki wiadomości i ukrywanie przycisku zamykania. Zacznij od ustawionego ustawienia; ustawia dziesiątki kolorów naraz.

Kolory główne

Launcher, nagłówek, panel pomocy, linki, przyciski, komunikaty systemowe i kompozytor, każdy z kolorem startowym i końcowym dla gradientów. Opcja domyślna szkła ignoruje te elementy i zachowuje przezroczyste wykończenie.

Panel, bąbelki i wióry

Około trzydziestu pickerów obejmujących panel, granicę, tekst, obszar wprowadzania i każdy typ bańki (odwiedzający, AI, agent, maszynopis, system) plus chipy sugestii i ich stan hover. Otwórz tylko to dla dokładnego dopasowania marki, i sprawdź kontrast na tekście bańka.

Układ i kształt

Szerokość i wysokość panelu, promień narożnika, wielkość czcionki, położenie ekranu, kształt wyrzutni, styl bańki i czy avatary pokazują.

Zachowanie

AI automatycznie odpowiada

Master switch dla odpowiedzi AI. Off oznacza, że każda wiadomość czeka na człowieka.

Ludzkie obserwacje i naturalne dwutekstowe

Delikatne śledzenie, gdy gość idzie cicho, i opcjonalne krótkie wiadomości drugiej osoby w sposób wysłany jeden. Dostrojone z max follow- upy na ciszę, pierwsze opóźnienie, później mnożnik, okno obecności i maksymalne okno sekwencji. Może być ograniczona do godzin pracy, i tłumiony po prostych podziękowaniach.

Odpowiedzi maszynisty i tempo odpowiedzi

Czy odpowiedzi wypisywać słowo po słowie, i jak szybko asystent odpowiada, przez preset lub własne minimalne i maksymalne opóźnienie w milisekundach. Małe opóźnienie odczytuje jako bardziej ludzki niż natychmiastowa odpowiedź.

Tłumaczenie na żywo

Każdy agent czyta i pisze we własnym języku, podczas gdy gość czyta w ich.

Oddaję z powrotem do SI po tym jak agent nie działa.

Minuty nieaktywności agenta, zanim AI wznowią rozmowę.

Auto- otwórz czat

Sekundy przed otwarciem widżetu.0nigdy nie otwierają. Intruzi na telefon komórkowy; urlop w0o ile nie zostały zbadane.

Inteligentniejsze odpowiedzi

Planowanie odpowiedzi jednospassowych, głębokość myślenia, opcjonalny osobny model dla odpowiedzi agentów, przedstawianie rozumowania odwiedzającym, tolerowanie błędów w pisowni, pamięć o długiej rozmowie, ograniczenie asystenta do tylko Twojej firmy, ceny w walucie odwiedzających i jak pojawiają się linki.

Zapisywanie kosztów

Pomija poszukiwanie wiedzy pozdrowienia, takie jak hi i dzięki, i czapki najdłuższą odpowiedź w żetonach. Trims koszt bez zmiany jakości odpowiedzi na prawdziwe pytania.

Języki

Które języki widget obsługuje i jak wybiera jeden dla gościa.

Odpowiedzi na konto klienta

Odpowiedzi z signed- na własny rachunek klienta, opcjonalnie spojrzał na żywo i opcjonalnie załadowany tylko w razie potrzeby. Read- tylko we wszystkich przypadkach; load- when -potrzebne zauważalnie zmniejsza koszty.

Wysokość refundacji

Pomocnicze żądania zwrotu, gdzie asystent gromadzi szczegóły i ręce do osoby. Nigdy nie kończy refundacji sam.

Rozmowa i widget

Prowadzenie rozmów w przeszłości, kontynuowanie czatu na swoich powiązanych stronach, ciągnące okno, prosząc gości o e-mail i pozwalając zespołowi zmienić czat w bilet.

Funkcje widżetu

Emoji picker, załączniki z opcjonalnym trybem pasta-tylko, rozumienie obrazu AI, inline ikony, mikrofon, przycisk talk- to- agent, dźwięki odwiedzających, podgląd załącznika, przycisk wywołania głosu i sesja izolacji. Ilustracja AI pozwala na wklejenie przez gościa zrzutu ekranu błędu i uzyskać użyteczną odpowiedź.

Admin Inbox, Powiadomienia i powitanie Popup

Odwiedzający powitają popowę, plus twoi agenci ostrzegają: dźwięki z skrzynki odbiorczej, powiadomienia na pulpicie, szepty, czy prywatne szepty i interwał ankiety w skrzynce odbiorczej.

Wsparcie dla przepływu

Ludzkie Handoff

Jak wnioski o osobę są przypisane, sekundy agent musi odpowiedzieć, czy spada zwraca czat do AI, i czy AI wznawia się, gdy czas upływa. Konfiguracja to przed pójściem na żywo lub odwiedzający, który prosi o człowieka po prostu czeka.

Godziny pracy

Czas otwarcia, strefa czasowa i zamknięty-godziny wiadomości. Poza tymi godzinami AI nie będzie oferować człowieka. Oddzielny harmonogram od godzin pracy biletów w OpsIQ Pisanie.

Odpowiada, gdy AI jest wyłączony

Pierwsza odpowiedź na nowe przesłanie, odpowiedź, kiedy ktoś jest już w kolejce i jak długo przed powtórzeniem.

Formularz offline

Pokazuje formularz kontaktowy zamiast czatu.

Wyszukiwanie biletów i powiadamianie departamentów

Świadomość biletu AI, więc odwiedzający cytując numer biletu dostaje swój prawdziwy status, i które działy AI może trasy do. Built- w panelu pokazuje prawdziwych odbiorców dla każdego działu, rozstrzygnął tak samo zgłaszający rozwiązuje je, więc można zobaczyć przed klientem robi, że dział nikt nie ostrzega.

Pomoc Centrum w widget czatu

Pozwala odwiedzającym przeglądać opublikowane artykuły bez opuszczania czatu. Wybierasz, gdzie pojawia się punkt wejścia, dolną etykietę paska i ikonę oraz czy oferować link do pełnego centrum pomocy. Domyślnie wyłączone.

Ocena rozmów

Gwiazda ocena uruchomiona, gdy agent zamyka czat, kiedy przekazanie kończy się, lub po okresie nieaktywności ustawić. Wybierz jeden lub dwa wyzwalacze, nie wszystkie z nich.

Badanie post-chat

Krótka ankieta, kiedy gość zamyka czat, z pytaniem, opóźnienie, reguła czasu i cap na wizytę. Odwiedzający mogą również e-mail lub pobrać transkrypcję. Jedno pytanie otrzymuje odpowiedź; trzy nie.

Post- Chat Email Survey

Po zakończeniu rozmowy, opcjonalnie w języku, w którym gość rozmawiał, z kontrolą nad opóźnieniem, temat, intro, pytanie, zarówno etykiety przycisków i linia dziękczynienie.

Odpowiedź na odpowiedź

Kciuki w górę i kciuki w dół na każdej odpowiedzi AI, karmiąc wysokiej jakości deski rozdzielcze.

Konwersacja Archiwum

Autoarchiwum po dniach, auto- rozwiązać po minutach ciszy, a usunąć zarchiwizowane rozmowy po dniach. Trzecie miejsce retencji jest ustawione, obok Generała i Śledzenie.

Szkolenie z wiedzy

To, co asystent wie, nic innego w Chat klienta nie ma znaczenia.

Szkolenie wiedzy na stronie internetowej

Crawls witryny tak asystent może odpowiedzieć z niego. Do dziesięciu początkowych linków, limit strony, głębokość łącza i wyłączonych folderów. Pojedynczy URL można przetestować przed pełnym pełzaniem. Wyłączcie checkout, konto i ścieżki admin.

Zapisy

Klucz API i model, który zmienia strony w przeszukiwalne znaczenie zamiast słów kluczowych pasuje.

Organizator wiedzy o ptasiej grypie

Jedno kliknięcie i AI czyta każdy FAQ i pełzać strona i sortować je w kategorie.

FAQ, zweryfikowane odpowiedzi

Pary pytań i odpowiedzi traktowane jako najwyższe źródło priorytetu, każdy z statusem, waga i kategoria. Wyszukiwarka, importowana z JSON, i AI może je zapisać z opisu swojej działalności. Kiedy asystent dostaje coś złego, napisać FAQ: to wyprzedza czołgane strony, więc fix jest natychmiastowa.

Zaawansowane

Wyniki i granice

Przedział przeglądania, limit i okno szybkości wiadomości, maksymalny rozmiar załącznika, próby załączników na okno oraz dozwolone rozszerzenia plików. Lista rozszerzeń jest kontrolą bezpieczeństwa; trzymaj ją mocno.

Dostawa czasu realtime

Natychmiastowa wiadomość i status dostawy zamiast sondażu, przez Pusher, Ably lub Firebase, z przerwami w ankiecie awaryjnej.

Powiadomienia o uruchomieniu

Ostrzeżenia dotyczące urządzeń dla agentów za pośrednictwem łożysk Pusher lub OneSignal, z zainteresowaniem urządzeniem.

Wciśnij (VAPID)

Przeglądarka naciska przy użyciu własnych wygenerowanych kluczy bez dostawcy trzeciej partii. Generowane tutaj, nie w strefie zagrożenia.

Udostępnianie głosu, wideo i ekranu

Kwalifikacje TURN więc połączenia łączą się za pośrednictwem sieci restrykcyjnych, przy użyciu Cloudflare lub Twilio legitymacje lub własne TURN URL, nazwa użytkownika i wiarygodność.

Przepływ danych w skrzynce odbiorczej

Ustawienie miejsca pracy zamiast ustawień odwiedzających: pierwszy - odpowiedź SLA w minutach, zapisane widoki kolejki, skróty klawiszowe i paleta poleceń, wyszukiwanie in- rozmowy i bilety na klienta w inspektorze.

Przesyłanie kanałów

WhatsApp, SMS, Facebook Messenger, Instagram, Telegram, X wiadomości bezpośrednie i LINE, każdy z własnym przełącznikiem automatycznej odpowiedzi AI, plus przełącznik polityki dla działań AI na kanałach, debuuncja odpowiedzi i szablon ponownych zaręczyn WhatssApp. Każdy kanał ląduje w tym samym polu odbiorczym co czat internetowy.

Podgląd Widget Live na dole aktualizacji karty podczas edycji. Użyj go zamiast przeładowania strony internetowej, aby sprawdzić zmianę.
Ustawienia

Ustawienia: Szablony

Każdy e-mailOpsIQwysyła, i jeden projekt, który ramuje je wszystkie. Edytuj brzmienie każdej wiadomości, i pisać szablony własne na wszystkoOpsIQnie wysyła jeszcze.

Jeden projekt, wiele wiadomości

W globalny szablon poczty elektronicznej jest to opakowanie: logo, nagłówek, karta, typografia i stopka, z pustym środkiem. Każda wiadomość OpsIQ wysyła jest wstawiana do środka. Edytuj opakowanie raz i każdy email zmienia się razem - odpowiedzi na bilet, kwity ze Sklepu, resetowanie hasła, przypomnienia o rezerwacji, listy PeopleOS i wszystko co piszesz.

Nie ma sposobu, aby wysłać e-mail z OpsIQ bez tego opakowania. Jest stosowany w jednym punkcie każda wiadomość pozostawia przez, więc wiadomość dodana później nie może go przegapić.

Edycja wiadomości

1
Otwórz ustawienia, a następnie szablony

Wiadomości są pogrupowane według tego, czym są: bilet i portal, Sklep, sign- in i bezpieczeństwo konta, rezerwacje, rozmowy i powiadomienia, raporty, listy PeopleOS i własne.

2
Naciśnij Edytuj na tym, którego chcesz

Otrzymujesz temat, edytor tekstów z widokiem HTML można przełączyć na żywo, a podgląd gotowego maila dokładnie tak jak odbiorca otrzymuje - opakowanie zawarte.

3
Użyj żetonów zmiennych

Chipy nad edytorem są faktami, które się zmieniają: numer biletu, odniesienie do zamówienia, czas rezerwacji. Kliknij jeden, aby upuścić go tam, gdzie kursor jest.

4
Zapisz

Tylko ta wiadomość jest napisana. Zostaw pole puste i zachowuje jego built- w brzmieniu; pigułka na wierszu mówi, w którym stanie jest.

💡
Zmienna, której nie używasz jest usuwana, gdy wiadomość e-mail jest wysyłany, a także linia, na której ona siedzi. Dlatego rezerwacja bez numeru telefonu nigdy nie wysyła "Telefon:" bez niczego po niej.

Napisz własny szablon

Użyj tego dla wiadomościOpsIQnie wysyła jeszcze: ogłoszenie dostawy, przypomnienie odnowy, pakiet powitalny, klucz licencyjny. Dostaje wszystko built- w wiadomość dostaje - edytor, podgląd, zasady planu i twój globalny projekt - a własny system wysyła go przezAPI.

1
Naciśnij Dodaj szablon

Przycisk siedzi na górze strony Szablony i ponownie obok "własne szablony".

2
- Co to jest?

Nazwa staje się referencją, którą wysyła system, pokazany w polu jak piszesz - na przykład x_custom_delivery_booked. Nie może się zmienić po tym, ponieważ coś już przez niego będzie wysyłać.

3
Powiedz, co to jest i kiedy zostanie wysłane

Te dwie linie są tym, co ty i twoi koledzy przeczytaliście na stronie Szablony za rok. Są warte 30 sekund.

4
Lista części, które się zmieniają

Comma- separated, na przykład: name, when, tracking_linkKażdy staje się {{variable}} możesz wpaść do obiektu lub wiadomości, a system wypełnia go w czasie wysyłania.

5
Napisz temat i wiadomość

Wyraźne zdania są w porządku - przerwy linii stają się paragrafami. Napisz tylko MESSAGE; logo, nagłówek i stopka pochodzą z globalnego szablonu.

6
Stwórz go, a potem otwórz.

Pojawia się w "własne szablony" z pełnym edytorem i podglądem na żywo, tak samo jak każdy built- w wiadomości.

⚠️
Write the message, not the whole page. A template that carries its own <html> document is refused, because a whole document would slip past the wrapper and your email would go out with none of your branding on it.

Wysyłanie własnego szablonu

Dwa połączenia na produkt API. Rozmówca dostarcza odbiorcę i zmienne - nigdy sformułowania i nigdy projektu, więc integracja nie może wysłać niezamarkową pocztę przez miejsce pracy ani po cichu zmienić to, co mówisz do klientów.

Lista szablonów i zmiennych, które każdy bierze
POST /api/v1.php
Authorization: Bearer YOUR_API_KEY

{ "action": "email.templates.list", "mine": true }
Wyślij to.
POST /api/v1.php
Authorization: Bearer YOUR_API_KEY

{
  "action": "email.template.send",
  "template": "x_custom_delivery_booked",
  "to": "[email protected]",
  "to_name": "Ada Obi",
  "variables": {
    "name": "Ada",
    "when": "Thursday 11 September, 14:00",
    "tracking_link": "https://track.example.com/AB12"
  }
}
💡
Zmienne nazwy iść bez aparatów w API call. email. tempplates. list daje je z powrotem w dokładnie takim kształcie, w jakim je przekazać.

Szablony i plan

Wiadomość, której nie masz dla

Pozostaje na liście "Zobacz plany" i nie ma edytora - więc można zobaczyć, co OpsIQ wysłałby, a co go odblokowuje.

Twoje własne szablony

Wybierz usługę szablon należy do kiedy go tworzyć, lub zostawić go na każdym planie. Przestrzeń robocza bez tej usługi widzi go na liście, ale nie może go edytować ani wysyłać.

Sygnalizacja, bezpieczeństwo, powiadomienia i test e-mail

Nigdy nie planowane. Niemożność naprawienia sformułowania hasła zresetowanego przez własnych administratorów będzie złym rodzajem zamka.

Pytania

Czy mogę zmienić projekt tylko dla jednej wiadomości?+

Nie, i celowo. Projekt jest owijaczem i jest udostępniany, co jest tym, co utrzymuje każdy e-mail rozpoznawalnie twój. Co to jest per- wiadomość jest sformułowanie, panel faktów i wszelkich przycisków można dodać wewnątrz wiadomości.

Co się stanie z moim tekstem, jeśli nacisnę Reset?+

Reset pojawia się tylko na globalnym szablonie i zastępuje to, co jest w edytorze projektem built- in. Nic nie jest napisane, dopóki nie naciśniesz Zapisz, więc możesz zamknąć okno dialogowe, aby zmienić zdanie.

Przez pomyłkę skasowałem jeden z moich szablonów.+

Usuwanie wymaga dwóch kliknięć dokładnie z tego powodu - pierwsze ramiona to i mówi, co przestanie działać. Jeśli już go nie ma, utworzyć go ponownie o tej samej nazwie i ten sam odnośnik wraca; tylko sformułowania muszą być poprawione.

Czy złącze lub add- on może przynieść własne szablony?+

Tak. Pakiet wysyła szablony pocztowe.json w swoim własnym katalogu, a jego wiadomości pojawiają się w "Deweloper szablony" z tym samym edytorem, podglądem, wrapper i bramą planu. Twoje sformułowania edytowane należą do Twojej przestrzeni roboczej i przetrwać aktualizację pakietu.

Ustawienia

Ustawienia: OpsIQ Pisanie

Bilety zostały odebrane na piśmie: automatyczna odpowiedź, system biletów krajowych, eskalacja, godziny pracy, routing i e-maile zwrócone do klienta.

Auto- odpowiedź

Pokaż przyciski zapisu OpsIQ

Dodaje przyciski pomocnika do pisania dla agentów w admin.

Włącz auto- odpowiedź biletu

Kolejki nowe bilety i odpowiedzi i odpowiedzi na nie po opóźnieniu. Zacznij od niego i przeglądaj projekty na tydzień. Refundacje, anulowania i zmiany dostępu powinny zawsze dotrzeć do osoby.

Autoodsyłanie

Wszystko, co nie jest wymienione, zostaje dla człowieka, który jest bezpiecznym domyślnym.

Harmonogram opóźnienia odpowiedzi (minuty)

Jak długo czekać, zanim automatyczna odpowiedź wyśle. Odpowiedź natychmiastowa odczytuje się jako robot; kilka minut czyta jako szybki zespół.

Max odpowiedzi AI za bilet według departamentu

Kap przedziałowy, na przykład Billing 1 Wsparcie i wsparcie 3. Bez czapki mylący gwint może się zapętlić.

Odpowiedzi na pytanie o długość, status i tożsamość

Maksymalne znaczniki zapisu, status biletu po odpowiedzi i eskalacji, a także do którego konta admin przypisane są automatyczne odpowiedzi. Użyj wyraźnie nazwanego konta, aby personel mógł odróżnić odpowiedź AI od ludzkich.

Operacje na rodzimych biletach

System Biletu Krajowego

System biletów wbudowany w OpsIQ, do instalacji bez zewnętrznego punktu obsługi.

Pipe przychodzący e-mail do rodzimych biletów

Przemienia e-mail przychodzący w bilety. OpsIQ dostarcza punkt końcowy URL, token auth, ścieżka skryptu i binarne PHP. Wszystko, co może wysłać do tego punktu końcowego może tworzyć bilety, więc zachować token w tajemnicy.

Wielokierunkowe odpowiedzi i opóźnienie i debuuncja

Czy AI ciągle odpowiada na rozmowę, a czy czeka ciche okno tak trzy szybkie wiadomości dostać jedną rozważaną odpowiedź. Cichy okno jest najlepszym pojedynczym ustawieniem do automatycznego odbierania odpowiedzi czuć brane pod uwagę.

Portal wsparcia publicznego

Strona z adresem użytkownika, na której każdy może podnieść i śledzić bilet, z opcjonalną linią powitalną. Adres i wygląd są skonfigurowane w zakładce Portal Wsparcia.

Format numeru biletu

Ile losowych liter pojawia się w wygenerowanych numerach biletów.

Klienci e-mail w ich własnym języku

Email z biletami jest zgodny z językiem klienta. Email personelu nigdy nie zmienia języka: powiadomienia, alarmy departamentu, raporty i regularne raporty pozostają w języku systemu.

Podziękowania i potwierdzenia

Potwierdzenie na nowych biletach, plus potwierdzenie wiadomości po otwarciu biletu, gdy zostanie zachowana informacja zwrotna i kiedy bilet jest zamknięty, każdy z podglądem na żywo. Istnieje również globalne opakowanie szablonu e-mail oraz link za widoku przycisk biletu.

Przesiewanie spamu w sztucznej broni palnej

Skreśla bilety od nieznanych nadawców i może opcjonalnie przenieść podejrzewany spam na własną rękę. Zostaw automatyczne przeniesienie się, aż nie obejrzysz jego wyroku.

Autozamykanie biletów bezczynności

Zamyka bilet po kilku dniach ciszy. Powiedz klientowi w wiadomości zamykającej jak ponownie otworzyć.

Godziny pracy (kalendarz SLA)

Strefa czasowa, godziny otwarcia i zamknięcia, dni robocze i święta dla zegarów pierwszej odpowiedzi i rozwiązania. Oddzielny harmonogram od Godzin pracy w Czacie z klientem.

Automatycznie przypisz nowe bilety

Automatyczne przypisywanie, opcjonalnie tylko do agentów, którzy są online, z umiejętnościami agenta i czułość dopasowania dla routingu opartego na umiejętności.

Sugeruje się podwojenie biletów

Plakietki, gdy klient otwiera bilet blisko jednego już mają, z regulowaną czułością dopasowania.

Badanie zadowolenia po zamknięciu

Email ankiety dzień po zamknięciu. Wyniki pojawiają się na stronie CSAT.

Powiadomienie departamentu przez e-mail

Odbiorcy są członkami tego departamentu, a nie adres poczty, który jest przychodzącym biletem.

Co może czytać AI

Dostęp do danych klientów AI

Master switch plus indywidualne uprawnienia tylko do odczytu dla podsumowania profilu klienta, faktury, transakcje, saldo kredytowe, produkty i usługi, domeny, powiązane serwery i przegląd konta wysokiego poziomu. Zacznij od podsumowania profili i dodaj kategorie, jak ich potrzebują odpowiedzi.

Eskalacja i wiedza

Włącz eskalację biletów na AI

Przed odprawą przeniesie bilet do lepszego działu. Wybierz dozwolone działy, opóźnienie w kontroli i możesz napisać własne instrukcje dotyczące eskalacji. Włącz wewnętrzną notatkę eskalacyjną, aby twój zespół mógł zobaczyć dlaczego bilet został przeniesiony.

Ustawienia wiedzy

Czy odpowiedzi korzystają z języka klienta, czy czerpią one z czołganych linków i FAQ, czy AI czyta obraz i PDF załączniki, tryb odpowiedzi wiedzy, niezależnie od tego, czy importowane JSON Używa się wiedzy i czy mogą pojawić się linki źródłowe. Używaj czołgających się linków i FAQ powinny być włączone, lub AI jest zgadywanie.

Przerwać auto- odpowiedź po odpowiedzi człowieka

Kiedy personel odpowie, AI przestanie odpowiadać na ten mandat.

Instrukcje dotyczące biletu i poczty elektronicznej

Instrukcje dotyczące tekstu i treści kształtujące ton i treść każdej odpowiedzi, z obciążalnym przykładem pracy. Bądź dokładny na temat tego, czego AI nie może nigdy zrobić.

Import wiedzy JSON

Wyślij lub wklej plik wiedzy JSON dla asystenta pisarskiego.

Studio przycisków

Pełny projektant dla przycisku zwróconego do klienta: wyświetlacz stylu, rozmiar, etykieta, ikona, kształt, minimalna szerokość, tło z kolorami pierwotnymi i wtórnymi, kąt gradientu, granica, promień narożnika, cień, typografia, wyściełanie, animacja bezczynności, ruch na poduszce i kolory oraz pierścień ostrości, plus niestandardowe pole CSS dla wszystkiego, czego sterownik nie obejmuje.

Ustawienia

Ustawienia: Portal wsparcia

Strona, w której klienci podnoszą i śledzą bilety i czytają artykuły o pomocy. Ta zakładka kontroluje sposób ich osiągnięcia i jak klienci się rejestrują; jej wizualny projekt jest wykonywany w Studio Wsparcia Portal.

Portal Studio lub wbudowany portal Biletu: który chcę?

Są to dwa różne produkty i ludzie je ciągle mieszają. Rozwiązują różne problemy, a bieganie razem jest normalne.

Portal wsparcia Studio: miejsce, do którego wysyłasz klientów

Studio projektuje kompletna strona wsparcia, że OpsIQ hosts for youMa swój własny adres internetowy, lub swoją domenę, i posiada całe doświadczenie w samoobsłudze: pomóc artykuły z wyszukiwania, formularz wniosku, historia biletów, podpis klienta i asystenta. Wybierz szablon, pracy poprzez motyw, Nawigacja, Layout, Wiedza, Footer, Marka, Bilety, Asystent, Forma i CSS, podgląd na pulpicie, tablet i rozmiar telefonu, a następnie publikuje.

Użyj go, gdy chcesz jeden markowy cel można wskazać każdego klienta na, i wolisz nie budować lub utrzymywać obszar wsparcia w obrębie własnej strony internetowej.

Osadzony portal Biletu: bilety wewnątrz własnej witryny

Wgniecione miejsca Tylko doświadczenie bilet na stronie własnej strony internetowej. Klienci otwierają, śledzą i odpowiadają na prośby o wsparcie bez opuszczania stron, a Twój własny nagłówek, nawigacja i projektowanie pozostają dokładnie takie, jakie są. Ustaw układ, wygląd i zasady dostępu w budowniczym widget, podgląd wyniku, a następnie skopiuj zagnieżdżony snippet na swojej stronie.

Użyj go, gdy masz już stronę internetową lub aplikację z własnym projektem, i chcesz, aby wsparcie miało miejsce w środku zamiast przekazać klienta na inny adres.

Wersja krótka

Studio buduje miejsce, do którego wysyłasz klientów. Embed przynosi bilety do miejsca, gdzie już są twoi klienci. Wiele firm działa zarówno, osadzając widget bilet w obszarze konta na żądanie w kontekście podczas prowadzenia portalu hostingu jako pełnego celu self-service z artykułami i wyszukiwania. Są to niezależne przełączniki.

Adres i dostęp

Tryb dostępu

Czy portal jest otwarty dla kogokolwiek lub ograniczony do signed- w klientów. Otwarte portale uzyskać więcej biletów i spamu.

Wybór układu

Czy portal i pomoc centrum dzielić jednego bohatera lub użyć dwóch, które nawigacja i stopka pojawiają się na obu powierzchniach, i etykiety sekcji nawigacji.

Adres portalu

Klienci używają adresu. Wybierz nazwę i OpsIQ pokazuje uzyskany portal i dopasowanie adresów centrum pomocy. Zmiana później łamie linki już wysłane.

Twoja własna dziedzina

Obsługuje portal z domeny, którą posiadasz, np. support. yourdomain. com.

Wbudowany portal biletowy

Przełącza na widżecie drop- in opisane powyżej, i otwiera zamocowany budowniczy, gdzie wybrać układ, wygląd i zasady dostępu, podgląd wyniku i skopiować wycinanka dla swojej strony. To nie jest Portal Studio: Studio projektuje hostowane portal, to umieszcza bilety w obrębie własnej witryny. Oba mogą być włączone natychmiast.

Jak klienci się zapisują

Są to opcje logowania klientów. Zapis personelu jest skonfigurowany w Ustawienia, Bezpieczeństwo.

Metody sygnalizacji

Które opcje pojawiają się na stronie sign- w. Złącze i e-mail sign-in działa automatycznie.

Podpis społeczny

Dostawcy kont konsumenckich, każdy z nich potrzebuje identyfikatora klienta i tajemnicy, z adresem przekierowanym dostarczonym przez OpsIQ do zarejestrowania się u tego dostawcy.

Jednorazowy sygnał (OIDC)

Zapisuj się do klienta za pośrednictwem dostawcy tożsamości, z emitentem URL, ID klienta, tajne i opcjonalne dozwolone listy domeny e-mail.

Klient SAML 2.0

W SAML równoważny. OpsIQ dostarcza odpowiedź ACS URLoraz identyfikator podmiotu SP; podajesz identyfikator jednostki IDP, wpisz i wypisz URLs, X.509 certyfikaty i opcjonalne nazwy atrybutów.SAML na w sygnach - w metodach lub nie pojawi się.

Bezszwowe logowanie z aplikacji

Podpisane głębokie połączenie, więc klient już zalogował się do aplikacji ląduje w portalu bez logowania się ponownie. OpsIQ dostarcza sekretu podpisania, portal URL i klucz roboczy, kompletna trasa dla Twojego języka (PHP, Laravel, WordPress, WHMCS, Node.js, Flask, Django, .NET, Rails, Java, Go, a na self-host instaluje OpsIQ sam serwer), notatki konfiguracji krok-by-krok i generator dla podpisanego łącza testowego. Użyj generatora przed napisaniem jakiegokolwiek kodu.

Jak działa trasa

Klient kliknie na link Wsparcia, który wskazuje na trasę. Trasa znajduje się zalogowany do aplikacji (gość jest wysyłany do logowania i z powrotem), czyta sekret z serwera, podpisuje jednokrotny token, który wygasa w ciągu dwóch minut, i przekierowuje do portalu z no- referrer i no- magazyn nagłówków tak żeton nie jest buforowane lub wyciek.

Wpisz przycisk

W Portal Studio, Sign- in strona, włączyć Użyj logowania mojej strony internetowej i ustawić stronę logowania URL do tej samej trasy. Portal dodaje opsiq_portal_return (strona, na której był klient); trasa honoruje ją tylko wtedy, gdy znajduje się w Twoim adresie portalu i przyprowadza klienta z powrotem tam, wpisany.

WHMCS

Nic do napisania: WHMCS hak z Remote Sites już podpisuje klientów na portalu i obsługuje adres zwrotny. Ustaw stronę logowania URL do WHMCS login obszaru klienta.

Wypisz się wszędzie.

Podpisanie z portalu również wypisuje klienta z aplikacji.

Spożycie i ochrona

Pola formularza wniosku

Co uporządkowane pola formularz wniosku zbiera. Każde dodatkowe pole traci zgłoszenia, więc zapytaj tylko o to, co trzeba do oceny.

Ochrona przed spamem i nadużyciami

Miód i ograniczenie stawki zawsze chronić formę publiczną. Na górze można zablokować jednorazowe adresy e-mail, dodać własne blokowane domeny i dodać CAPTCHA za pomocą GooglereCAPTCHAlubCloudflareTurnstile.reCAPTCHAponownie używa klawiszy już ustawionych w Ustawieniach, Bezpieczeństwo; klawisze Turnstille są tutaj wprowadzone.

Analityka portalu

Tylko w formie podsumowania aktywności portalu w ciągu ostatnich 30 dni.

Ustawienia

Ustawienia: uprawnienia, licencja, cron i strefa niebezpieczeństwa

Grupa systemowa plus kontrola dostępu zespołu, która decyduje kto może zobaczyć, która zakładka Ustawienia.

Dostęp i uprawnienia zespołu

Per- admin uprawnienia

Każdy administrator otrzymuje wyraźny zestaw uprawnień obejmujących dostęp do czatu inbox, które sekcje Ustawienia mogą edytować, i ich działy. Każdy z pełnymi funkcjami Administratora zawsze ma wszystkie uprawnienia. Ustawienia decydują, które karty osoba widzi, więc przyznaj najwęższy zestaw, który pozwala im pracować.

Licencja

Pokazuje aktualne prawo jazdy, to, co uprawnia do i jego status.

Ustawienia wrotkarskie

Samoobsługowe instalowanie tylko. Na chmurze OpsIQ zaplanowane zadania są dla Ciebie i karta jest ukryta. Jedna linia crontab napędza każde zaplanowane zadanie: auto- odpowiedź biletu, routing eskalacji, odświeżanie wymiany-stawki, sondowanie skrzynki pocztowej i synchronizacja złącza.

1
Kopiuj linię

Karta pokazuje dokładną linię crontab dla serwera z wybranym już poprawnym plikiem binarnym PHP.

2
Dodaj do crontab

Uruchom crontab -e jako użytkownika, który uruchamia PHP i wklej pojedynczą linię. W cPanel zamiast tego użyj narzędzia Cron Jobs.

3
Weryfikacja

W ciągu minuty serce płytki świeci się. Użyj Run teraz do natychmiastowego testowania, a nie czekania.

Panel bicia serca pokazuje ostatni bieg, czas trwania i to, co zostało przetworzone zarówno dla kolejki auto- odpowiedzi oraz ankiety e-mail i złącza. Ostrzega on, kiedy ostatni ciąg pochodzi z ręcznego przycisku WWW zamiast prawdziwego cron serwera, a gdy serce stało się niewyraźne.

Strefa zagrożenia

Usuń wszystkie dane śledzenia

Wyczyszcza wszystko, co zbierane lub generowane OpsIQ. Odcinasz, co dokładnie zawierać i wpisywać wyrażenie potwierdzenia. Ustawienia i konfiguracja strony, zablokowane adresy, wszystko, czego twój zespół napisał (baza wiedzy, FAQ, tłumaczenia, projekty portali, definicje działań) i kwity zgody są zachowane.

Oczyść dane starsze niż

To samo przeszukiwanie ograniczone do rekordów starszych niż 30, 60, 90 lub 180 dni, lub rok. Do automatycznego zatrzymywania toczenia użyć wartości retencji w Generale i śledzenia zamiast i niech zaplanowane zadanie to zrobić.

🚫
Eksportuj kopię zapasową z Ustawienia, Ogólne przed użyciem czegokolwiek w strefie zagrożenia. Te działania nie mogą być cofnięte.
Ustawienia

Zarządzanie zespołem

Zaproś członków zespołu i przydziel role do kontroli, kto może uzyskać dostęp do czego.

Zespół
Zespół & działyEkran zespołu: tabela adminsów z kontaktem, odznaką (Właściciel, Pełni Administracja, Agent) i departamenty każdy może uzyskać dostęp.Zespół & działyprzestrzeń roboczaZespół & działy+ Zapisz użytkownika administratoraKONTAKTROLADEPARTAMENTYAO[email protected]Ada OwusuWłaścicielWszystkieKM[email protected]Kojo MensahPełny administratorWszystkieRT[email protected]Rita TettehAgentRachunekSB[email protected]AgentWsparcie1TEAMZaproś administratorów i zarządzaj nimi2ROLESWłaściciel · Pełni Administracja · Agent3SCOPEDDostęp do działu
Prawdziwy ekran zespołu: każdy administrator z ich kontaktem, rolą i wydziałami mogą dotrzeć, agenci scoped, właściciele pełne.

Role

Właściciel

Pełny dostęp, w tym licencja, rachunki i strefa zagrożenia.

Pełny administrator

Pełny dostęp z wyjątkiem licencji i strefy zagrożenia.

Agent

Ograniczone do przydzielonych działów. Bilety, rozmowy i analityka tylko.

Zaproszenie członków zespołu

1
Idź do drużyny.

Przejdź do drużyny na bocznej.

2
Kliknij Zaproszenie

Wpisz e-mail członka zespołu.

3
Ustaw rolę

Wybierz właściciela, pełnoprawnego admina lub agenta.

4
Przydziel działy

Dla agentów, wybierz dostępne działy.

5
Wyślij zaproszenie

Otrzymają e-mail z linkiem do konfiguracji.

Ustawienia

Wykonanie zespołu

Jak działa Twój zespół wsparcia. Dostęp jest przez pozwolenie, nie przez rolę: pozwolenie na widok otwiera stronę, uprawnienia zarządzania odblokowuje cele, QA i collegage- identyfikacja odczytów, a zezwolenie na nagrod- finanse jest to, co dodaje kartę Nagrody. Prowadzenie zespołu może być podane którekolwiek z nich bez stania się pełnym administratorem.

Wykonanie zespołu
Wykonanie zespołuEkran wydajności drużyny: agenci w rankingu przez złożony pasek wyników, CSAT i bilans nagród z przycisku Wypłata na rząd.Wykonanie zespołuprzestrzeń roboczaWykonanie zespołuAGENTZAKRESCSATBALANCJARTRita Tetteh4.8$42ZapłaćSBSam Boateng4.5$28ZapłaćKMKojo Mensah4.2$15ZapłaćAOAda Owusu4.9$51Zapłać1SCOREDWydajność kompozytowa2CSAT & LOADOszacowania + wolumen3REWARDSSalda agentów płatniczych
Prawdziwy ekran wydajności drużyny: każdy agent zdobył wynik na głośności i CSAT, z saldem nagród można wypłacić w rzędzie.

Jak strona jest zorganizowana

Team Performance to pięć kart. Każda odpowiedź na inne pytanie, i są one zamawiane przez jak pilnie oni zwykle potrzebują ciebie.

Centrum dowodzenia 01

Stan live kolejki, wyniki klienta w stosunku do celów, jak wydajność została wydana, sytuacje wymagające decyzji, i wskaźnik dopasowany do dowodów per- teammate.

02 Teammates

Liderów, rozpoznawanie (najbardziej ulepszone i smugi), questy, i opt- w kontroli dla kto może zobaczyć ranking.

Jakość 03

Wyniki, odnotowane oceny, poprawiona szansa - porozumienie recenzenta, dryf recenzentów i spory dowodowe.

04 Nagrody

Wartość toksykologiczna, roszczenia z tytułu wypłat oraz przydział okresu regulowanego: zatwierdzenie pułapu kapitałowego, przegląd podglądu, sfinalizowanie.

05 Historia

Jak przestrzeń robocza przesuwa się z czasem: wskaźniki trendów z wykresem, i mapy zasięgu 28-dzień pokazuje kiedy zespół rzeczywiście pracował. Każda karta ukrywa się aż jest wystarczająco dużo historii, aby ją narysować.

Nieoceniona wartość nie jest zerowa

Zespół bez wystarczającej ilości obrobionej objętości - lub którego wymiary z dowodami sumują się do mniej niż połowy skonfigurowanej wagi - jest pokazywany jako Ungranted. Ich wynik, ranga i zespół są puste, a ich podział jest ukryty. Jest to celowe: uczynienie nieobecnego pomiaru jako zero stawia kogoś na dole rankingu dla cichego tygodnia. Progi dowodów są konfigurowalne w przestrzeni roboczej w targach i punktacji.

Dwa progi dowodów zrobić różne zadania i warto zachować je osobno. Minimalne obsługiwane decyduje, czy ktoś jest w ogóle ocena. Minimalny rating nie wpływa na wynik: to decyduje o przyznaniu nagrody i nagradzania kwalifikowalności. Tak więc zespół może być w pełni ocenione i rankingu i nadal nie kwalifikować się do tego okresu, ponieważ zbyt mało klientów oceniło ich.

💡
Każda figura jest przeskalowana do obszaru roboczego, który przeglądasz i zakresu czasu, jaki wybierasz. Członek zespołu pracujący w dwóch oddzielnych miejscach pracy ma niezależny rekord w każdym z nich. Dwa wyjątki warte poznania: GRUPA witryny jest jednym obszarem roboczym, więc jej domeny członków są mierzone razem; a widok All- stron celowo mierzy wszystko naraz.

Wskaźnik wydajności

Złożony z pięciu wymiarów, każdy mierzony względem celu można ustawić raczej niż przeciwko kolegom, następnie ciągnięty w kierunku środka, gdy dowody za nim jest cienka. Uwaga kierunek: dostosowanie przesuwa postać w kierunku 70, więc cienkie doskonały wynik jest wyciągnięta i cienki słaby wynik jest ciągnięty. Zły pierwszy tydzień na czterech rozmowach nie jest rozstrzygnięty werdykt również. Jako dowód gromadzi skorygowaną liczbę zbiega się na surowe.

Jakość

Zadowolenie klienta z zweryfikowanych informacji zwrotnych. Uzupełnione wynikami wyników QA, gdzie istnieją i są regulowane.

Odpowiedź

Pierwszy raz w P50 i P90, przeciwko twoim celom.

Rozdzielczość

Czas rozdzielczości i szybkość rozdzielczości jednodotykowej.

SLA

Atakowanie SLA skonfigurowanego, plus ryzyko i naruszone liczniki.

Zarządzanie

Ponowne otwarcie i transfer - praca, która wraca.

💡
Wagi są konfigurowalne i względne; nie muszą być całkowite 100. Brak dowodów może tylko obniżyć indeks, nigdy go nie podnieść - pełna skonfigurowana waga pozostaje w mianowniku.

Zdolność produkcyjna i czas produkcji

Zawód, czas produkcji, rozwiązane za godzinę produktywności i udział online w oknie. Używanie nie jest celowo zgłaszane: potrzebuje godzin zaplanowanych jako mianownik, OpsIQ nie ma grafiku ani źródła zmiany, a zastępczy mianownik będzie zgadywać nosząc znak procentowy. Czyta jako niedostępny z załączonym powodem.

⚠️
Tylko raportowanie. Okupacja mówi, jak czas został wydany, nigdy nie jak dobrze został wydany i nigdy nie finansuje, bramy lub rozmiar płatności.

Zapewnienie jakości

Recenzenci wyników to rekwizytorzy rubric zdobywają prawdziwe rozmowy przeciwko. Tylko publikowana wersja może otrzymać ocenę, a publikacja nowej wersji nigdy nie przepisze tego, co już zostało zdobyte. Recenzja jest dowodem na jedną rozmowę, a nie werdykt na osobę.

Umowa z recenzentem

Zgłoszono jako statystykę skorygowaną o szanse (Kappa Cohena i Fleissa), a nie jako procent umowy. Dwóch recenzentów, którzy zdają wszystko zgadza się 100% czasu, nie mając żadnych informacji.

Zrzut z przeglądu

Czy recenzent systematycznie uzyskuje wyniki trudniejsze lub bardziej miękkie niż ich koledzy na tej samej rozmowie - porównanie z resztą panelu, a nie trend w czasie. Wymaga interakcji ocenione niezależnie więcej niż raz.

Spory

Zespół może formalnie zakwestionować dowody o nich. Otwarty spór blokuje okres nagrodzony finalizacji do czasu jego rozwiązania.

Przegląd self-

Nie mogę się poddać ocenie.

⚠️
Oceny klasy AI- nie mogą wpływać na wynagrodzenie, dopóki kalibracja nie zostanie opublikowana pokazując, że model zgadza się z ludzkimi recenzentami wystarczająco dokładnie, mierzonymi przez kappa względem minimalnej próbki. Otwarta brama oznacza, że Model zgadza się ze wszystkimi ludźmi na tyle blisko, aby liczyć - nigdy nie oznacza to, że jest poprawny.

Uznawanie

Ranking sam udokumentował tryby błędów: granie w metric, wypalanie i publiczne zawstydzanie tego, kto jest ostatni.

Najlepsza

Mierzona w stosunku do wcześniejszych rekordów kolegi z drużyny, nigdy przeciwko koleżankom i kolegom, z kurczącym się mianownikiem, więc mały mianownik nie może kupić wygranej.

Pęcherzyki

Okresy specyficzne spełniają stałą, deklarowaną bar - średnia ocena, obsługiwane głośność, oceny i ujemne -sprzężenia zwrotnego, wszystkie absolutne liczby. Każdy może utrzymać passę jednocześnie, więc nie tworzy rankingu, a kolega o wyjątkowym miesiącu nie może złamać swój.

Opt- w rankingu

Domyślnie. Kolega z drużyny zawsze widzi swój własny indeks; czy widzą kolegów jest decyzją przestrzeni roboczej. Zespoły percentyli mogą być publikowane zamiast pozycji bezwzględnych.

💡
Uznanie nigdy nie dotyka pieniędzy. Pas nie może sfinansować wypłaty lub złamać jeden, a większość ulepszonych nie jest kategorią nagród.

Pytania

Cel, do którego pracuje zespół, mierzony w stosunku do ustalonego deklarowanego baru, a nie przeciwko sobie - tak aby każdy mógł w tym samym czasie dokonać tego samego zadania.

Zakres i kadencja

Indywidualne lub zespołowe; jednorazowe, powtarzalne lub sezonowe z wyraźnym oknem.

Kryteria

Rozmowy prowadzone, oceny otrzymane, dni aktywne, średnia ocena, lub negatywne zwroty. Wszystkie absolutne - nie metryczny, którego wartość zależy od tego, co koledzy zrobili.

Ochrona jakości

Wymagane na każdym quest z celu wolumenu. Uderzając liczbę podczas gdy jakość spada poniżej podłogi wstrzymuje poszukiwania zamiast jej zakończenia, i jest to pokazane jako niedokończone, nie niedokończone.

Powtórzyć ograniczenia

Zakrywka okresowa, napędzana najwolniejszym kryterium, plus opcjonalne ochłodzenie zanim powtórzenie może się liczyć.

Zadania zespołu

Wspólnie z postępów bez przypisywania drużyny opublikowanych, więc poszukiwanie zespołu nie może stać się tablicy liderów.

Sesje coachingowe

Sesja coachingowa to rekord, nie czat. Ma trenera, kolegę z drużyny jest szkolony, zaplanowany czas, uzgodnione punkty rozmowy i streszczenie napisane później. Prawdziwe rozmowy, bilety i oceny QA są przypinane do niego jako dowód, więc rozmowa jest zakotwiczona do pracy, która rzeczywiście się stało, a nie na zapamiętane wrażenie.

Punkty rozmów

Zgoda przed sesją, więc kolega z drużyny nie wchodzi w niespodziankę.

Dowody w postaci ozdób

Czaty, bilety i oceny QA dołączone do sesji. Ppin przechowuje referencje - typ i id - nie kopię, więc zawsze wskazuje na rekord na żywo. OpsIQ nie weryfikuje id przed zaakceptowaniem go.

Pozycje działania

Każdy z właścicielem i termin płatności. Pozycja po jego terminie jest pokazywana jako zaległe - stan pochodny, a nie status ktoś musi pamiętać ustawić.

Notatka prywatna

Nie jako agent, nie jako kierownik, ani jako właściciel. Ten czek działa przed każdym innym pozwoleniem i nie może być nadstawiony.

Kto widzi sesję

Trener, kolega z drużyny i każdy kto ma pozwolenie na występ zespołu zarządzającego.

Audyt

Każde tworzenie, aktualizacja, pin, odpin i ukończenie jest rejestrowane z tym, co się zmieniło, przez kogo.

💡
Coaching jest celowo oddzielony od punktów i pieniędzy. Sesja nie zmienia indeksu nikogo, nie otwiera nagrody i nie pojawia się na tablicy liderów.

Nagrody i nagrody

Nagrywane działanie konwertuje się na żetony o wartości gotówką, którą ustawiasz. Ścieżka do płatności jest celowo wolna i każdy krok jest zapisywany.

1
Ustaw wartość symbolu

Ile żetonów równa się ile pieniędzy i ile jest warta każda aktywność.

2
Upoważnienie pułapu kapitałowego

W zamkniętym okresie kalendarzowym, administrator podaje maksymalne żetony, które może zapłacić. Zapisywanie formularza ustawień nie zezwala na budżet i nie może zmienić pułapu, który już został zatwierdzony.

3
Przegląd podglądu

Odbiorcy, rezerwa i powód, dla którego ktokolwiek nie kwalifikuje się do pomocy.

4
Zakończenie

Alokacja jest rejestrowana na stałe z dowodami za nią. Okres, który przydzielił nic nie może być unieważniony i ponownie uruchomiony w sposób oczywisty. Jeden, który wydał żetony muszą być odwrócone najpierw: OpsIQ pisze wpis kompensacyjny przeciwko każdemu portfelowi i nigdy nie usuwa oryginału, więc rejestr nadal pokazuje co się stało i dlaczego, a dopiero wtedy jest zwolniony okres. Odwrócenie odmawia, jeśli ktoś już wypłacił więcej niż kwota odzyskany, i nazwy kto i jak dużo.

⚠️
Kwalifikowalność wymaga zweryfikowanych opinii klientów. Wyniki jakości AI mogą uzupełniać tę ocenę, ale nigdy jej nie zastępować, a członek zespołu pokazany jako Ungradted nie jest kwalifikowana. Każdy podmiot przekazujący dane jest ograniczony do 25% powyżej ich oczekiwanego udziału w okresie, więc jeden bardzo głośny miesiąc nie może wchłonąć całego budżetu.
💡
Właściciel konta nie bierze udziału w nagrodach ani nagrodzinach symbolicznych, bez przełącznika: autoryzują finansowany pułap i finalizują każdy przydział, a nikt ponad nimi nie akceptuje tego, co sami sobie płacili. Ich praca jest mierzona, oceniana i rankingowa na tablicy dokładnie jak każdy inny.

Wszyscy inni biorą udział domyślnie, prowadzi zespół i współwłaściciele w tym. Aby zostawić kogoś na zewnątrz, otworzyć je w Team & Departments i wyłączyć część Biega w nagrodach i nagród opcji. Ich praca jest nadal zdobyte i pokazane; przestaną być kandydatem od tego punktu, i nic już sfinalizowane nie jest dotknięte.

⚠️
Nikt nie zatwierdza pieniędzy dla siebie. Ponieważ ludzie, którzy mogą wziąć udział są również osoby, które mogą zatwierdzić wypłaty, OpsIQ odmawia wypłaty lub kredytu do własnego portfela, płacąc własne roszczenia, finalizacja okresu, w którym będą wypłacane, i finalizacji nagrody wygrasz. Inny pełny administrator lub właściciel musi to zrobić. Zapłać wszystkie roszczenia pomija swoje własne i zgłasza go jako pominięte, nie zawiodły.

Kto widzi i robi co

Wyświetl wydajność zespołu

Zarząd, stan na żywo, pojemność i przegląd jakości przestrzeni roboczej.

Zarządzanie zespołem

Cele i wyniki, eksport, oceny wyników QA, coaching, zadania oraz odczyty, które zawierają dane umożliwiające identyfikację kolegium, takie jak historia nadadmina i historii nagród.

Zobacz finanse zespołu

Środki, wartości gotówkowe, noty reklamacyjne i odniesienia do płatności - oddzielone od dowodów wykonania, ponieważ są one przylegające do wypłaty.

Tylko w pełni administrator

Każda mutacja pieniężna: wypłata nagrody, zapłata lub odrzucenie roszczenia, zatwierdzenie budżetu, sfinalizowanie, anulowanie lub odwrócenie przydziału oraz ustalenie stawki gotówką. Nie mogą one być przekazywane przez udzielenie zezwolenia.

Używając go uczciwie

Wskaźnik wydajności jest dowodem zarządzania, a nie automatyczną decyzją o zatrudnieniu. Otwórz rozmowę źródłową za liczbą przed działaniem na nim, i ważyć złożoność przypadku, harmonogramy, urlopu i dostępności potrzeb.

Ustawienia

Twoje strony (miejsca pracy)

Witryny (miejsca pracy) pozwalają zarządzać wieloma stronami internetowymi z jednej instalacji OpsIQ. Każdy ma własne śledzenie, AI, złącza i dostęp do zespołu.

Strony
Twoje stronyEkran stron: lista miejsc pracy, z których każda posiada swoją domenę, typ, złącze, identyfikator statusu i przycisk Otwórz, plus Add- new- site.Twoje stronyprzestrzeń roboczaTwoje strony+ Dodaj nową stronęSshop.acme.come-commerce · Shopify złączeAktywneOtwórzHhost.acme.comHosting · WHMCS złączeAktywneOtwórzBblog.acme.comZawartość · bez złączaUstawieniaOtwórz1MULTI-SITEJedna przestrzeń robocza na stronę2ISOLATEDDane nigdy nie mieszają się3PER-SITEUstawienia własne i złącza
Prawdziwy ekran Sites: każda strona jest swoją własną izolowaną przestrzenią roboczą (domeną, złączem i ustawieniami), dodaną i otwartą z jednej listy.

Tworzenie strony

1
Przejdź do Połączonych Witryn

Przejdź do Witryn Połączonych.

2
Dodaj nową stronę

Wprowadź nazwę, domenę i opis.

3
Kopiuj klucz strony

Każda strona otrzymuje unikalny klucz (site_xxx) do cięcia widżetu.

4
Konfiguracja niezależna

Każda strona ma własną AI, złącza i ustawienia.

Ile stron mogę mieć?+

- Zależy od planu licencji.

Ustawienia

Licencja i plan

Twoje funkcje sterowania licencją OpsIQ, ograniczenia strony i salda kredytowego AI.

Licencja
Centrum licencjiCentrum Licencyjne OpsIQ: plan, plaster statusu aktywnego, klucz licencyjny maskowany, licznik kredytowy AI- i przycisk kontroli Force- remote.Centrum licencjiprzestrzeń roboczaCentrum Licencyjne OpsIQPlanBiznesStanAktywneKluczOPSIQ-••••-••••-2F9CKredyty AI$68 lewoWymuś zdalne sprawdzenie1PLAN & STATUSAktywny, w skrócie2KEYHMAC- cached lokalnie3CREDITSBilans i granice ptasiej grypy
Prawdziwe Centrum Licencyjne: Twój plan i aktywny status, klucz maskowany, saldo kredytu AI- oraz ponowna weryfikacja siły jednego kliknięcia.
Klucz licencyjny

Wpisz w Ustawienia > Licencja. Potwierdzony na serwerze licencji OpsIQ.

Licencja bicie serca / walidacja

OpsIQ zwykle odczytuje podpisana lokalna licencja cache i odświeża walidację w razie potrzeby. Użyj Force zdalne sprawdzenie, gdy potrzebujesz natychmiastowego wyniku; Diagnostyka identyfikuje DNS, HTTPS lub server- time problemy.

Plan

Określanie dostępności i ograniczeń.

Granica obszaru

Maksymalna liczba miejsc pracy.

Kredyty AI

Jeśli używasz zarządzanej SI, Twoje saldo kredytowe jest pokazane tutaj.

Data ważności

Odnówcie przed wygaśnięciem, aby uniknąć przerw w obsłudze.

Co się stanie, gdy moje prawo jazdy wygaśnie?+

Śledzenie, bilety i CRM kontynuować. AI funkcje wstrzymać do odnowienia. Dane są zachowane.

Ustawienia

Profil, hasło i uwierzytelnienie dwóch czynników

Każdy administrator może zachować własną tożsamość, preferencje robocze, hasło i uwierzytelnianie dwóch czynników.

Ekran produktu
Mój profilStrona profilu oddziela dane osobowe, język / strefa czasowa, awatar / podpis, hasło i uwierzytelnianie dwóch czynników.Mój profilprzestrzeń roboczaPROFILEKompletnyTIMEZONEEuropa / Ateny2FAWłączoneWIDOK PRACY ŻYWEJNazwa i adres e-mailTożsamość osobistaEdycjaJęzyk i strefa czasowaDaty i interfejsEdycjaAwatar i podpisOdpowiedzi i obecność zespołuEdycjaHasło i 2FAOchrona rachunkuBezpieczne1UPDATE PROFILETożsamość i lokalizacja2SECURE LOGINHasło i 2FA3SAVEZastosuj do tego admin
Strona profilu oddziela dane osobowe, język / strefa czasowa, awatar / podpis, hasło i uwierzytelnianie dwóch czynników.

Ustawienia profilu należą do administratora signed- in i nie zmieniają marki w miejscu pracy. Użyj unikalnego hasła i uaktywnij uwierzytelnianie dwu-czynników. Zmiana ustawień e-mail lub uwierzytelnienia może wymagać ponownej weryfikacji lub nowego podpisu.

Ustawienia

Preferencje dotyczące powiadamiania

Kontrola preferencji powiadomień, które zdarzenia operacyjne docierają do administratora produktu lub drogą elektroniczną.

Ekran produktu
Preferencje dotyczące powiadamianiaStrona powiadomienia zawiera opcje perevent in- app i e-mail oraz najnowszą listę powiadomień.Preferencje dotyczące powiadamianiaprzestrzeń roboczaIN-APPWłączoneEMAILSelektywnaUNREAD4WIDOK PRACY ŻYWEJPrzypisany biletIn- app i e-mailWłączoneKlient odpowiedziałIn- appWłączoneRyzyko SLAIn- app i e-mailWłączoneZatwierdzenie AIIn- app i e-mailWłączone1CHOOSE EVENTSTylko użyteczne sygnały2CHOOSE CHANNELIn- app lub email3PRZEGLĄDOstatnie powiadomienia
Strona powiadomienia zawiera opcje perevent in- app i e-mail oraz najnowszą listę powiadomień.

Preferencje obejmują przydział biletów, odpowiedzi klientów, ostrzeżenia SLA, przekaz czatu i AI aprobaty zdarzeń. Zachować pilne sygnały operacyjne włączone gdzieś; wyłączenie poczty e-mail nie musi koniecznie wyłączyć powiadomienia in- app.

Ustawienia

Przegląd bezpieczeństwa

Przegląd bezpieczeństwa jest pierwszym ekranem do oceny bloków, ataków logowania, sesji zagrożenia, trendów bezpieczeństwa i integralności zdarzeń.

Ekran produktu
Przegląd bezpieczeństwaPrzegląd bezpieczeństwa łączy aktualne karty ryzyka, trend 14-dzień, listę atakujących, kanał eventowy i status integralności.Przegląd bezpieczeństwaprzestrzeń roboczaACTIVE BLOCKS18FAILED LOGINS42HIGH THREAT3WIDOK PRACY ŻYWEJAutomatycznie zablokowany7- dzień ogółem i źródłoTrendNajnowsze napastnikiIP, kraj i przyczynaPrzeglądWydarzenia związane z bezpieczeństwemRyzyko i wynik działaniaPaszaIntegralność łańcucha haszowegoŁańcuch zdarzeń oczywistych dla użytkownikaWażny1READ HEADLINEEkspozycje bieżące2OPEN EVIDENCEAtakujący i wydarzenia3DZIAŁAJBlokowanie, badanie, wywóz
Przegląd bezpieczeństwa łączy aktualne karty ryzyka, trend 14-dzień, listę atakujących, kanał eventowy i status integralności.

Użyj kart nagłówek do selekcji, a następnie otworzyć powiązaną Audyt, Nieudane logowania, Blocked IPs lub JavaScript Strona błędów do pracy na poziomie zapisu. 14-dzień trend jest bardziej użyteczny niż jeden skok. Sesje wysokiego zagrożenia powinny być badane przeciwko odwiedzającym, żądanie i uwierzytelnianie dowodów przed zastosowaniem stałego bloku.

Ustawienia

Rejestr kontroli oczywistych w trakcie procedury

Rejestr audytów rejestruje, kto zrobił co, kiedy, do którego celu, na jakim poziomie ryzyka i czy udało się.

Ekran produktu
Audyt działalnościStrona audytu zapewnia działania, aktor, ryzyko, cel i wynik w zakresie widocznych dla użytkownika operacji.Audyt działalnościprzestrzeń roboczaWYDARZENIA18.2kHIGH RISK21INTEGRITYWażnyWIDOK PRACY ŻYWEJWłączony złącze[email protected] · ShopifySukcesAPI klucz cofnięty[email protected] · klucz 19SukcesUstawienia zmienione[email protected] AISukcesOdmowa pozwolenia[email protected] · eksportZablokowany1FILTERDziałania, ryzyko i podmiot2KONTROLACel i wynik3EXPORTCSV lub JSON
Strona audytu zapewnia działania, aktor, ryzyko, cel i wynik w zakresie widocznych dla użytkownika operacji.

Filtrowanie według działania, ryzyka i podmiotu; eksport CSV lub JSON dla dochodzenia. Łańcuch hash pomaga wykryć brakujące lub zmienione wiersze audytu, ale nie zastępuje chronione kopie zapasowe i ograniczony dostęp do bazy danych. Traktować eksport audyt jako wrażliwy, ponieważ mogą one zidentyfikować użytkowników, rekordy i działania bezpieczeństwa.

Operacje

Diagnostyka

Diagnostyka zmienia kontrole podsystemów w zwykłe wyniki badań zdrowia i bezpośrednie działania.

Ekran produktu
DiagnostykaDiagnostyka grupy kontroli zdrowia dla widget, AI, bilety, integracje, Inteligencja witryny, zadaniach tła, automatyzacja CRM, licencjonowanie i przechowywanie.Diagnostykaprzestrzeń roboczaZDROWIE13WARNING2NIEPEŁNIONE1WIDOK PRACY ŻYWEJWidgetPunkty końcowe beacon i chatZdroweZadania podstawoweBicie serca na wrotkach spóźnioneOstrzeżenieE-mailBadanie z wynikiem wyjściowym nie powiodło sięNieudanyŁącznikiRejestr i przyjęcie zdarzeńZdrowe1REFRESHUruchom bieżące kontrole2OPEN WARNINGCzytać dowody3FIX AND RETESTPotwierdź odzyskanie pomocy
Diagnostyka grupy kontroli zdrowia dla widget, AI, bilety, integracje, Inteligencja witryny, zadaniach tła, automatyzacja CRM, licencjonowanie i przechowywanie.

Strona sprawdza szybkość strony, rank / słowo kluczowe / backlink / dane lokalne, AI i brama działania, bilety, raczler / audyty, integracja / przyjęcie zdarzenia, zadania w tle, automatyzacja CRM, licencja, widget i powiązane usługi produktowe. Celowo zgłasza przyczyny operacyjne, a nie ujawnianie surowych tajemnic.

Po zmianie, Odśwież i potwierdzić, że dotknięty podsystem powraca zdrowe. Zielona strona diagnostyczna jest konieczna, ale nie wystarczy do uruchomienia; ukończyć listę kontrolną przed uruchomieniem, jak również.

Ustawienia

Bezpieczeństwo i dostęp

OpsIQ zawiera wiele warstw bezpieczeństwa w celu ochrony admin, danych i API dostęp.

Jak to działa?
Bezpieczeństwo i dostępOsłona ochronna obok włączonych urządzeń sterujących: dwa-czynnik, OIDC SSO, SCIM 2.0, OAuth2 PKCE, CSRF / CSP, IP zapory, limity cenowe i skrytka tajemnic.Współczynnik dwukrotny (TOTP)OIDC SSOSCIM 2.0OAuth2 PKCECSRF + CSPFirewall IPLimity stawekSkarbiec tajemnic
Bezpieczeństwo

Zabezpieczenia

Uwierzytelnianie administratora

Email / hasło z opcjonalnym 2FA.

Blokada logowania

Tymczasowy zamek po zbyt wielu nieudanych próbach.

Blokowanie IP

Blok IPs lub CIDR obejmuje różne obszary dostępu do wyśledzonych stron.

Punktacja zagrożenia

/ Wysokie zagrożenie / może zostać zablokowane.

Egzekwowanie HTTPS

Wymagane dla wszystkich połączeń. HTTP przekierowuje się do HTTPS.

Nagłówki HSTS

Strict- Transport- Bezpieczeństwo zapobiega atakom obniżającym poziom.

Ochrona CSRF

Wszystkie formularze admin zawierają żetony CSRF.

Ochrona XSS

Wszystkie dane wejściowe użytkownika są niedostępne. Nagłówki CSP ograniczają wykonywanie skryptu.

Ochrona SSRF

Wychodzące haki internetowe blokują prywatne / wewnętrzne adresy IP.

Zalecane ustawienie

1
Włącz 2FA

Dla wszystkich kont administracyjnych.

2
Mocne hasła

Minimalne znaki 12, mieszane.

3
Rachunki przeglądowe

Usuń dostęp dla byłych członków zespołu.

4
Monitor nieudanych loginów

Sprawdzić co tydzień podejrzane wzorce.

5
Uaktualnianie

Zastosuj aktualizacje do systemów zabezpieczeń.

Ustawienia

Role i uprawnienia

Role- Based Access Control pozwala kontrolować co każdy członek zespołu może zrobić.

Role i uprawnienia
Role i uprawnieniaMatryca rolebyable: Właściciel ma wszystko; Full Admin brakuje rozliczeń i strefy zagrożenia; Agent tylko scale bilety.Role i uprawnieniaprzestrzeń roboczaUstawieniaBILLINGNIEBEZPIECZEŃSTWOKARYWłaścicielPełny administratorAgentscoped13 ROLESWłaściciel · Pełni Administracja · Agent2GRANULARPer- page + per- department3DEFAULT-DENYZapomnieli o zablokowanych trasach
Matryca rola w skrócie: Właściciel dostaje wszystko, Pełny admin wszystko oprócz fakturowania i strefy zagrożenia, Agent tylko ich scoped bilety.

Domyślne role

Właściciel

Wszystko, w tym licencja, strefa zagrożenia i zarządzanie instalacją.

Pełny administrator

Wszystko oprócz licencji i strefy zagrożenia.

Agent

Respond na przypisywanie biletów i czatów departamentu, analityka widoku. Brak ustawień, zespół, lub dostępu do bezpieczeństwa.

Czy mogę tworzyć niestandardowe role?+

Trzy budynki w rolach plus przydział departamentu daje kontrolę granulatu.

Ustawienia

Zablokowany IPs

Zarządzaj adresami IP zablokowanymi przed dostępem do swoich wyśledzonych stron.

Zablokowany IPs
Zablokowany IPsBlokada...IPs ekran: block- an-IP/ Formularz CIDR obok tabeli zablokowanych adresów z każdym wpisem, datą, powodem i przyciskiem Unblock.Zablokowany IPsprzestrzeń roboczaBlok IP / CIDR203.0.113.0/24Uzasadnienie (fakultatywne)BlokZablokowane adresy203.0.113.9Jun 12 · siła bruteOdblokuj45.12.0.0/16Jun 10 · Wszystkie komentarzeOdblokuj102.89.6.2Jun 9 · nadużycieOdblokuj1BLOKADAZakres IP lub CIDR2LISTKto i kiedy, z rozsądkiem3UNBLOCKJedno kliknięcie
Prawdziwe zablokowane IPs ekran: blokować jeden IPlub zakres CIDR, i zarządzać listą, każdy z jej daty, powodu i odblokować jeden-kliknięcie.

Jak blokować

1
Przejdź do bezpieczeństwa > Zablokowany IPs

2
Dodaj zakres IP lub CIDR

Przykład: 203.0.113.42 lub 203.0.113.0/24

3
Dodaj powód

Dokument, dlaczego: spam, nadużycia, drapanie itp.

Czy blokowanie wpłynie na legalnych użytkowników?+

Jeśli klienci mają udziały w przedsiębiorstwie IP lub VPN, blokując IP Blokuje wszystkich na nim.

Ustawienia

Nie powiodło się logowanie

Wszystkie nieudane próby logowania do admina OpsIQ.

Nie powiodło się logowanie
Nie powiodło się logowanieEkran niepowodzenia: tabela kont /IPs z licznikiem błędów, czas ostatniej próby i przycisk Block na rząd.Nie powiodło się logowanieprzestrzeń roboczaPróby logowania nie powiodły sięRACHUNK / IPNIEPEŁNIONEOSTATNIDZIAŁANIE[email protected] · 41.62.10.472 m temuBlok[email protected] · 102.89.6.2318 m temuBloknieznany · 45.12.9.71226 m temuBlok[email protected] · 88.21.4.921h temuBlok1WATCHPróby logowania nie powiodły się2COUNTSNa konto / IP3DZIAŁAJBlok z rzędu
Prawdziwy nieudany ekran logowania: każde konto /IP z jego liczba błędów i ostatnia próba, zablokować brutalne źródło siły prosto z rzędu.

Co każdy wpis pokazuje

Data / czas

Kiedy to się stało.

E-mail

Użyty adres e-mail.

Adres IP

Źródło próby.

Kraj

Lokalizacja geograficzna.

Uzasadnienie

Zło hasło, zablokowane lub nie znalezione.

Sygnały ostrzegawcze

Wiele prób, ten sam e-mail

Hasło zgadywanie. Upewnij się, że 2FA jest włączone.

Wiele prób, różne maile

Zablokuj źródło IP.

Niezwykłe kraje

Jeśli twój zespół jest miejscowy, zagraniczne próby są prawdopodobnie atakami.

Ustawienia

Analityk bezpieczeństwa w zakresie ptasiej grypy

Opt-w analitycy warstwy nad stronami bezpieczeństwa: werdykty, incydenty, dzienna trawa, cotygodniowe sprawdzenie postawy, Ask Security, i 0-token zasad blokowych. Nigdy nie działa w ścieżce żądanie odwiedzającego.

Każda strona bezpieczeństwa rejestruje to, co się stało, ale czytanie wciąż przyjmuje wyrok. Analityk bezpieczeństwa AI dodaje ten osąd na miejscu, i jest zbudowany do wydawania prawie nic: nigdy nie siedzi w ścieżce sygnalizacji lub logowania, zasady determinacji rozstrzygają oczywiste przypadki bez połączenia SI, werdykty są buforowane, a najlepszym wyjściem analityka jest determinacjonistyczna zasada, która następnie działa na zawsze na zero żetonów. Włącz funkcje w Ustawienia → Bezpieczeństwo- wszystkie nieobowiązkowe.

Co dodaje

Chipy werdykt + Wyjaśnij

Zablokowany IPs i nieudany wiersze Logins pokazać łagodny / podejrzliwy / wrogi chip z wynikiem pewności siebie. Wyjaśnij otwiera rozumowanie, fakty używane, i jednogłośnie kliknij Block / Release akcji. 24h, więc ponownie przeglądanie IPjest za darmo.

Informacje o zdarzeniach

Powiązane zdarzenia gromadzą się w jednym incydencie (fala logowania, skanowanie URL, autoblokowanie) z prostą i angielską linią czasową oraz kolejnym zalecanym krokiem.

Dzienna diesta

Jeden podsumowanie dziennie: wczoraj kontra twój punkt odniesienia, bloki, incydenty i jedna rzecz do zrobienia. Ciche dni wysłać determinalistyczny all- clear na zero żetonów.

Tygodniowe sprawdzanie pozycji

Poniedziałkowa lista kontrolna hartowania (luki 2FA, próg blokady w porównaniu do rzeczywistego wolumenu ataku, alarmy wyłączone) z ciężkością, wysiłkiem i dokładną poprawą na element.

Zapytaj o bezpieczeństwo

Okno na pytanie w Przegląd bezpieczeństwa, które odpowiedzi z Twojego stanu bezpieczeństwa na żywo. Pytania o głębokie serwery są przekazywane do inżyniera admin czatu zamiast odgadnąć.

Propozycje polityki + autopilot

Analityk proponuje konkretne zasady blokowe, jak Aprove / Dismiss karty; zatwierdzone zasady egzekwują w zero żetonów z licznym licznikiem trafień na żywo. Opcjonalnie autopilot zatwierdza tylko najbezpieczniejsze zasady automatycznie.

Ustawienia

Analityk bezpieczeństwa w zakresie ptasiej grypy (security_ai_enabled)

Włącza chipy werdyktu, Wyjaśnij i zapytaj o bezpieczeństwo. Tylko niejednoznaczne IPs dotrzeć do modelu, dołączony do jednego połączenia.

Briefs Incydent (security_ai_incidents)

Zaciska wydarzenia w incydenty i pisze każdą nową historię. Biega na istniejącym kórym cron bezpieczeństwa.

Dzienna diesta (security_ai_digest)

Jeden recip bezpieczeństwa dziennie na dzwonek i Przegląd.

Tygodniowe sprawdzanie pozycji (security_ai_posture)

Poniedziałek Hardening lista kontrolna na Przegląd. Lista kontrolna jest w pełni deterministyczna.

Autopilot polityczny (security_ai_autopilot)

Pozwala analitykowi aktywować swoje najbezpieczniejsze propozycje bez nadzoru: tylko odwracalne bloki czasu, jeden IPs lub zakresów nie szerszych niż /24, nigdy nie współdzielone / mobilne / prywatne, ograniczone 10 na godzinę, zawsze skontrolowane i niemożliwe do wykonania.

💡
Każde połączenie jest oznaczone security_ai z własnym comiesięcznym cap w konfiguracji AI → Cost Guardrails (domyślnie 300k żetonów). Jeśli czapka jest hit, funkcje degradacji do deterministycznych odczytów. Blokowanie, blokady i alarmy nigdy nie zależą od tego budżetu. Analityk nie może nigdy usunąć danych, zmienić ustawień, dotknąć księgi audytu lub dokonać stałego zakazu.
Operacje

Cron i automatyzacja

OpsIQ wykorzystuje jeden plan produktu do uruchamiania e-mail sondaży, automatyzacji biletów, analizy, wprowadzania, retencji, kolejki AI, CRM pracy, raportów i zadań łączników.

Ekran produktu
Cron i automatyzacjaJeden produkt cron wejście dostarcza bicie serca; OpsIQ decyduje, które wewnętrzne zadania są należne.Cron i automatyzacjaserwerHeartbeatCo minutęRUNNERcron/all.phpHEALTHUstawieniaWIDOK PRACY ŻYWEJUnifikowany podmiot prowadzący działalność w zakresie produktówopsiq/cron/all.phpWymaganeBilet i kolejki e-mailKrótkie zaplanowane praceAktywneAnaliza i retencjaKadencja wewnętrznaZaplanowanyAbonenci połączeńOznaczone zdarzenia cronKoper włoski1INSTALL ONE LINEUruchom terminarz produktów co minutę2CHECK CRON SETUPPotwierdź bicie serca CLI3USE DIAGNOSTICSBadanie opóźnionej lub nieudanej pracy
Jeden produkt cron wejście dostarcza bicie serca; OpsIQ decyduje, które wewnętrzne zadania są należne.

Wymagany wpis do kryla produktu

Dodaj tę pojedynczą linię do crontab dla tego samego serwera i środowiska PHP, które działa OpsIQ:

OpsIQ wpis produktu crontab
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1

Zastąp /path/to/opsiq z korzeniem instalacji. Użyj pełnej ścieżki PHP CLI, gdy host wymaga jednego, na przykład /usr/bin/php8.4.

Nie należy używać górnej części /cron.php do pracy w zakresie produktów. W tym repozytorium, że runner należy do oddzielnej usługi non-product poza tą podręcznika. OpsIQ jest Runner produktu opsiq/cron/all.php.

Co napędza ujednolicony terminarz

Bilet i kolejki AI

Procesy, które należy przeprowadzić auto- odpowiedzi, eskalacje, aprobaty i inne prace związane z produktem w kolejce.

Email przychodzący

Sondaże skonfigurowane na skrzynkach pocztowych, gdzie sondaże są wybraną metodą przyjmowania.

Analiza i sesje

Złącza sesje i odświeża planowe agregaty, kiedy są one należne.

CRM i zaangażowanie

Prowadzi zadania punktacji, cyklu życia, przepływu pracy, kampanii i harmonogramu- raportuj, które są włączone.

Zatrzymanie i utrzymanie

Wykonuje prace związane z czyszczeniem, archiwami, wygaśnięciem i integralnością.

Łączniki

Wyłącza abonentów cron złączy i sondaży tylko dla zainstalowanych, włączonych i skonfigurowanych złączy.

Zweryfikuj cron

  1. Otwórz Ustawienia - Ustawienie wiersza i potwierdzić istnienie podmiotu oferującego produkt.
  2. Stosowanie Uciekaj teraz. raz, następnie potwierdzić admin i ankietowanie aktualizacji bicia serca.
  3. Sprawdź Diagnostyka dla późnego bicia serca, PHP CLI, bazy danych lub ścieżki plików problem.
  4. Kontrola /tmp/opsiq-cron.log lub ścieżka logowania wybrana, gdy ręczny bieg nie działa.

Utrzymuj krótkie, idemstrong i pracy w przestrzeni. Seria długie synchronizacji i przechowywać kursor / punkt kontrolny, tak aby następny bieg może być kontynuowany bezpiecznie.

🚫
Kiedy produkt cron zatrzymuje, czas pracy OpsIQ kończy lub staje się późno, nawet jeśli zwykłe strony admin może jeszcze załadować.
Operacje

Operacje rozmieszczenia w ramach programu

Prowadzone przez operatora OpsIQ wdrożenie wykorzystuje te same ekrany produktów i przepływy robocze, podczas gdy operator hostingowy zarządza warstwą serwera. Zapisy handlowe, plany, rachunki i procedury portalu rachunkowego są poza tym podręcznikiem.

Ekran produktu
Przewidywane wdrożeniePrzewidywana operacja zmienia się, kto utrzymuje infrastrukturę; nie zmienia to sposobu korzystania z OpsIQ przez klientów.Przewidywane wdrożenieprzestrzeń roboczaPRODUCT UITen sam OpsIQINFRASTRUCTUREOperator- managedWORKSPACE DATAOdizolowaneWIDOK PRACY ŻYWEJCzas trwania aplikacjiPHP, serwer WWW i baza danychZarządzanieKron produktowyZaplanowany przez operatora hostingowegoWeryfikacjaKopie zapasowe i aktualizacjePolityka i dowody dostawcyPrzeglądUstawienia OpsIQStrony, AI, zespół i złączaTwój zespół1OPERATE OPSIQ NORMALLYUżyj tej samej nawigacji produktu2VERIFY SERVICE HEALTHUżyj diagnostyki i dowodów stanu3KNOW RESPONSIBILITYOddzielne ustawienia produktu z pracy hostingowej
Przewidywana operacja zmienia się, kto utrzymuje infrastrukturę; nie zmienia to sposobu korzystania z OpsIQ przez klientów.

Co operator hostingowy zwykle zarządza

  • Serwer WWW, PHP runtime, usługa baz danych, TLS i pamięci masowej.
  • Jednorodny cron produktu i jego logi poziomu server-.
  • Aktualizacje aplikacji, monitorowanie infrastruktury i proces tworzenia kopii zapasowych określony w umowie o przyjęciu.

Co administrator OpsIQ nadal zarządza

  • Strony internetowe i instalacja widżetu, ustawienia AI, wiedza, skrzynki pocztowe i aplikacje obsługi klienta.
  • Dostęp do zespołu, działy, kontrole bezpieczeństwa, klucze API, złącza, automatyzacja i ustawienia retencji danych.
  • Weryfikacja produktu poprzez Diagnostykę, dziennik audytu, testy złączy i rzeczywiste kontrole końcowe.

Kontrole operacyjne

Nie zakładaj, że zarządzana usługa oznacza każdą integrację produktu jest zdrowa. Potwierdź najnowsze dowody zapasowe i polityki retencji z operatorem hostingu, i używać OpsIQ Diagnostyka po zmianie DNS, e-mail, dostawców AI, stron internetowych lub łączników.

Sekcja ta obejmuje wyłącznie operacje produktowe. Handlowy system pokładowy, subskrypcje, rachunki i administracja kont klienta pozostają poza podręcznikiem OpsIQ.

Operacje

Samohostowanie OpsIQ

Sam-host OpsIQ Instalacja działa na kontrolowanej przez Ciebie infrastrukturze. Jesteś odpowiedzialny za runtime, bazy danych, TLS, produkty cron, kopie zapasowe, aktualizacje i monitoring.

Ekran produktu
Self- hostingSelf-hosting daje kontrolę infrastruktury i sprawia, że twój zespół odpowiada za każdą zależność operacyjną.Self- hostingserwerPHP8.4+DATABASEMySQL 5.7+SCHEDULERCo minutęWIDOK PRACY ŻYWEJRozszerzenia czasu startowegocurl, pdo_mysql, mbstring, jsonWymaganeDodatkowe rozszerzeniaxml, w języku angielskim, OpenSSL, Inc.WymaganeAlternatywa dla bazy danychMariaDB 10.3+ z InnoDBObsługiwaneTransportHTTPS i dostęp do usług zewnętrznychWeryfikacja1PREPARE THE SERVERDopasowanie wymagań dotyczących czasu pracy2INSTALL AND CONFIGUREUżyj dedykowanej bazy danych i HTTPS3ADD PRODUCT CRONUruchom opsiq/ cron / all. php
Self-hosting daje kontrolę infrastruktury i sprawia, że twój zespół odpowiada za każdą zależność operacyjną.

Minimalny kontrakt na oprogramowanie

PHP

PHP 8.4 lub nowsze. Wymagane rozszerzenia: curl, pdo_mysql, mbstring, json, xml, openssl, zip, intl i gd.

Baza danych

MySQL 5.7+ lub MariaDB 10.3+ za pomocą InnoDB. Utwórz dedykowaną bazę danych i najprostszego uprzywilejowanego użytkownika aplikacji.

Serwer WWW

Apache lub Nginx skonfigurowane dla kontrolera frontowego OpsIQ, aktywów statycznych i wymaganych zmian.

HTTPS

Wymagane do sesji admin, ruchu widget, klawiszy API, haków internetowych i połączeń z dostawcą.

Dostęp zewnętrzny

Pozwól DNS i HTTPS dostępu do AI, e-mail, złącze i licencje punktów końcowych faktycznie włączyć.

Dostęp do pliku

Użytkownicy sieci web i CLI muszą być w stanie odczytać pliki aplikacji i pisać tylko do udokumentowanych lokalizacji runtime / storage.

Cron

Uruchamianie programu OpsIQ co minutę z taką samą konfiguracją aplikacji i dostępem do bazy danych jak w procesie WWW.

Sekwencja instalacji

  1. Wyślij wydanie do zamierzonego root dokumentu i zachować dostarczoną strukturę katalogu.
  2. Utwórz bazę danych i użytkownika aplikacji, a następnie wprowadź do bazy danych, Canonical URL i ustawienia licencji.
  3. Uruchom przepływ instalatora / konfiguracji i utwórz pierwsze konto właściciela.
  4. Włącz HTTPS i weryfikuj przekierowanie, pliki cookie oraz publiczne ścieżki /API.
  5. Dodaj jednolity Cron produktu OpsIQ:
Self- hostingscron produktu
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1
  1. Ustawienia otwarte - Ustawienie i Diagnostyka Crona; uruchom raz terminarz i rozwiąż każdą nieudaną zależność.
  2. Konfiguracja kopii zapasowej, przywracanie testów, zatrzymywanie dzienników i aktualizacja procedur przed dodaniem danych produkcyjnych.

Uaktualnianie

  1. Przed zmianą plików należy przeczytać notatki wydania i sprawdzić wymagane rozszerzenia PHP /.
  2. Backup bazy danych i plików aplikacji / konfiguracji, a następnie udowodnić kopię zapasową można przywrócić w miejscu testowym.
  3. Wprowadzić nowe pliki bez usuwania danych dotyczących konfiguracji instalacji lub runtime.
  4. Uruchom dostarczony proces migracji / przed lotem i zweryfikuj logowanie, śledzenie widżetu, bilety, e-mail, AI, złącza i cron.
  5. Zachowaj poprzednią wersję wydania i backup bazy danych dostępne dla udokumentowanego okna rollback.
🚫
Poziom górny repozytorium /cron.php nie jest OpsIQ harmonogram produktów. Automatyzacja produktu tylko w punkcie opsiq/ cron / all.php.
⚠️
Nie usuwaj.schema_cache.json jako rutynowa konserwacja. Usuwać tylko wtedy, gdy instrukcje produktu wyraźnie wymagają schema- cache odbudowy.
Operacje

Przewodnik po produkcji

Lista kontrolna i najlepsze praktyki w zakresie prowadzenia produkcji OpsIQ.

Przewodnik po produkcji
Przewodnik po produkcjiLista kontrolna go- live: domeny niestandardowe i SSL, AI przeszkolony, złącza i cron, kopie zapasowe i retencji, a także role zespołowe.Lista kontrolna Go- liveprzestrzeń roboczaZanim wyjdziesz na żywoDomena użytkownika + SSL skonfigurowaneAI przeszkolony na treściPrzetestowane podłączenia · cron runningKopie zapasowe zaplanowane · retencja zestawRole zespołowe przypisane i zrecenzowane1GO-LIVELista kontrolna przed uruchomieniem2WERYFIKACJADomena · SSL · kopie zapasowe3CONFIDENTStatek, kiedy jest zielony
Lista kontrolna go- live, więc nic nie jest pominięte: domeny + SSL, przeszkolony AI, przetestowane złącza i cron, kopie zapasowe i retencja, a także role zespołu.

Zanim przejdziemy na żywo

Konfigurowane HTTPS

SSL zainstalowany, przekierowuje HTTP, włącza HSTS.

Bieg na wronie

Weryfikacja za pomocą strony diagnostycznej.

Badanie na obecność ptasiej grypy

Dyskusja jako klient. Sprawdzić dokładność i ton.

Instalowany widżet

Na wszystkich stronach internetowych. Weryfikacja za pomocą Live Feed.

Konfiguracja kopii zapasowej

Zainstalowana dzienna baza danych i kopie zapasowe plików.

Błąd podczas logowania

Włączony i monitorowany dziennik błędów PHP.

Drużyna zaproszona

Wszyscy członkowie mają konta z poprawnymi rolami.

Zaludniona baza wiedzy

Przynajmniej 5-10 artykuły.

Codziennie: Sprawdź deskę rozdzielczą, przejrzystą kolejkę biletów, sprawdź rozmowy AI.

Tygodniowe: Przegląd AI Insights, aktualizacja KB, sprawdzić wydajność zespołu, przegląd bezpieczeństwa.

Miesięczne: Przegląd trendów analitycznych, złącza audytowe, uaktualnienie szkolenia AI, zweryfikować kopie zapasowe.

Operacje

Lista kontrolna przed uruchomieniem

Uruchom bramki źródłowe i ukończ prawdziwe kontrole produktu przed premierą lub pierwszym uruchomieniem produkcji. Polecenie jest dostępne nie jest dowodem, że przeszedł w środowisku.

Ekran produktu
Weryfikacja zwolnieniaWidok wydania pokazuje wymagane bramy do uruchomienia; nie jest to przedetykietowanie je jak przeszedł.Weryfikacja zwolnieniaserwerCZAS TRWANIAPHP 8.4SOURCE GATESUruchom lokalnieOUTCOMEOparte na dowodachWIDOK PRACY ŻYWEJWymagane rozszerzeniaSprawdź przed apartamentemBramaPrzeszukiwanie syntaktyczne PHPWszystkie pliki PHP projektuBramaOcena ptasiej grypy i jednostka PHPUnitUruchom, gdy występują zależnościBramaKontrole statyczne i kontrole w przeglądarceUruchom, gdy skonfigurowanyBrama1RUN THE CHECKSUchwyt rzeczywistego wyjścia2FIX EVERY REQUIRED FAILURENie zastępujcie dowodów założeniami3TEST THE PRODUCTSprawdzić rzeczywiste podróże użytkowników
Widok wydania pokazuje wymagane bramy do uruchomienia; nie jest to przedetykietowanie je jak przeszedł.

Bramy źródłowe i wyjściowe

Uruchom kontrolę repozytorium z głównego źródła instalacji i zachowaj ich pełną wydajność z rekordem wydania.

Brama pierwotna przed lotem
php tools/preflight.php
Rozszerzona brama wydania
php tools/release_gate.php

Przed lotem sprawdza 8.4 czasu pracy i wymagane rozszerzenia, wykonuje wyszukiwanie syntax PHP, uruchamia bramkę statku oceny AI i pełny pakiet PHPUnit, a także sprawdza PHS Stan / Node podczas instalacji tych narzędzi. Rozszerzona brama zawiera również dym, clean- install / schema i kontrolę końcową przeglądarki, gdy ich środowisko jest skonfigurowane.

Pominięty czek nie jest przepustką. Napisz dlaczego był niedostępny, zainstalować brakującą zależność lub uruchomić go w poprawnym środowisku CI / instinging przed wydaniem.

Kontrole produktów

1. Uwierzytelnianie i role

Zaloguj się jako każda zamierzona rola; weryfikuj dozwolone i odrzucane strony / działania.

2. Widget i śledzenie

Wczytaj prawdziwą stronę w prywatnej przeglądarce; weryfikuj ruch sygnalizatora, Live Feed, rejestr odwiedzających i sesjach.

3. Chat i AI

Zadawać reprezentatywne pytania; weryfikować uziemienie wiedzy, bezpieczeństwo, eskalacja i historii AI.

4. Bilety

Utwórz, przypisz, odpowiedz, eskaluj, zamknij i ponownie otwórz każdą włączoną ścieżkę wlotu.

5. Adres e-mail

Przetestować wysyłkę i każdą skonfigurowaną przychodzącą skrzynkę pocztową lub ścieżkę haka.

6. CRM i analityka

Utwórz kontrolowany kontakt / transakcję / konwersję i weryfikuj tablice rozdzielcze, levels, punktację i raporty.

7. Złącza

Przeprowadź testy połączeń, jeden odczyt, jeden bezpieczny zapis / suchy bieg i ścieżki webhook / sondowania dla każdego włączonego złącza.

8. API i haki webhacks

Sprawdzić wąskie zakresy, ograniczenia prędkości, powtarzalne próby idemstrong, podpisy i duplikat obsługi.

9. Cron

Uruchom ujednolicony harmonogram produktów i potwierdzić wszystkie wymagane bicie serca w Cron Setup / Diagnostyka.

10. Bezpieczeństwo

Weryfikacja kontroli 2FA, CSRF / sesji, wpisów z audytu, kluczowego cofnięcia i izolacji przestrzeni roboczej.

11. Backup i przywracanie

Przywróć aktualną kopię zapasową do osobnego środowiska testowego i zweryfikuj dane i konfigurację.

12. Obserwacja i cofanie

Potwierdź logi / alarmy, zachowaj identyfikatory wniosków i dowiedz procedurę cofnięcia.

⚠️
Uruchomienie tylko po każdej wymaganej bramki i podróży o znaczeniu gospodarczym ma aktualne dowody na dokładne uwolnienie i środowisko.
Programista

Wciśnij strony stron trzecich

Przeglądarka powiadomień (w tym OpsIQ Kampanie push) potrzebują pracownika obsługi obsługiwanego z SAME ORIGIN jako strona.OpsIQ widget ładunki z Twojego OpsIQ rozmieszczenie, więc strona trzecia nie może zarejestrować OpsIQ jest bezpośrednio pracownik. Host jeden mały plik na własnej domeny witryny, aby umożliwić push tam. Kampanie dostarczyć poprzez oba obsługiwane metody.

Jak to działa?
WciśnijPowiadomienie o użyciu w stylu OS- push powyżej dwóch kart metod dostawy: Built- in VAPID i Beam Pusher.Twój sklepTwój koszyk czeka · 10% off dzisiajTeraz.Wbudowane (VAPID)Brak stron trzecichHost jeden plikŁopatki do puszerówUżyj swojego kontaPrzyjmij pracownika
Wciśnij

Dlaczego jest to potrzebne

Przeglądarki pozwalają tylko na zarejestrowanie pracownika serwisu z jego własnego pochodzenia.OpsIQ wdrożeniu, więc nie może zainstalować push pracownika na stronie klienta, dopóki nie gospodarzem pracownika na tej stronie pochodzenia, widget cicho poskacze push (bez błędu, brak subskrypcji). Masz dwie opcje poniżej;OpsIQ Push Campaigns publikuje przez oba.

Opcja A · Self- host Web Push (VAPID, brak stron trzecich)

1. Pobierz pracownika z aplikacji OpsIQ: https://YOUR-OPSIQ/opsiq/opsiq-push-sw.js

2. Wyślij to do swojego korzeń sieci web więc jest osiągalny w https://yoursite.com/opsiq-push-sw.jsWidget auto- decotes this path na własnej stronie pochodzenia i rejestruje go, nie ma zmian zawężenia potrzebne. (Używa wąskiego zakresu, więc nigdy nie zastępuje pracownika usług już uruchomić.)

Opcjonalnie: Jeśli musisz go hostować na niestandardowej ścieżce, wskaż widget przed Snippet. Jest akceptowany tylko wtedy, gdy samo-pochodzenie:

Opcjonalnie - tylko jeśli plik NIE znajduje się na korzeniu sieci web
<script>window.OpsIQ=window.OpsIQ||{};window.OpsIQ.pushSwUrl="/custom/opsiq-push-sw.js";</script>

3. W OpsIQ generuj klucze VAPID (Ustawienia → Klient Chat AI → Zaawansowane → Wciśnij Web). Widget następnie prosi odwiedzających o pozwolenie na zgłoszenie i subskrybuje je.

Za CDN /Cloudflare/ Upewnij się, że /opsiq-push-sw.js zwraca HTTP 200 (Oczyść pamięć podręczną, jeśli była 404 przed wysłaniem; buforowane 404 blokuje rejestrację).

Wariant B · Beams Pusher (zarządzany dostawca)

1. W ustawieniach OpsIQ ustawić dostawcę push do Łopatki do puszerów i wprowadź swoje beams Identyfikator rozstrzygnięcia oraz Tajny klucz.

2. Host Beams pracownik serwisu na stronie root jak /service-worker.js/ Przyjąłem. https://YOUR-OPSIQ/opsiq/pusher-beams-service-worker.jslub połączyć tę linię z istniejącym pracownikiem korzeniowym:

Pracownik blach, gospodarz w https://yoursite.com/service-worker.js
importScripts("https://js.pusher.com/beams/service-worker.js");

3. Widget ładuje automatycznie Beams SDK i subskrybuje każdego gościa do persite zainteresowania opsiq-site-<your-site-key>Nie trzeba innego okablowania.

Jak kampanie dostarczają

Kampanie push publikują oba metody na raz: odwiedzający w samodzielnie-hostowane VAPID pracownik dostać zaszyfrowany Web Push, a odwiedzający subskrybowani przez Pusher Beam uzyskać beams publikować. Każdy gość jest osiągany przez to, do czego subskrybenci, więc można uruchomić samo-pochodzenia VAPId na niektórych stronach i cross-origin Beams na innych.

Wymagane jest HTTPS dla pracowników serwisowych i Web Push (localhost jest zwolniony z obowiązku testowania). W skrzynce na rozmowy admin już używa tego samego mechanizmu zainteresowania Beamsa do wpisów operatora.

Operacje

Rozwiązywanie problemów

Wspólne problemy i jak je naprawić.

Ogólne

Puste strony+

Sprawdź dzienniki błędów PHP. Powoduje: stary PHP (potrzebuje 8.4+), brak rozszerzenia, połączenie DB nie powiodło się, błędne uprawnienia do pliku.

Deska rozdzielcza pokazuje zera+

Sprawdź: widget zainstalowany? Uruchomienie Cron? Zakres daty poprawny? IP wykluczony?

AI

AI nie odpowiada+

Sprawdź: dostawca skonfigurowany? API klucz poprawny (użyj połączenia testowego)? Budżet wyczerpany? Workspace AI config poprawna?

AI daje złe odpowiedzi+

Sprawdź: baza wiedzy aktualna? Szybkie klarowne? Złącza Lookupy zwracające prawidłowe dane? Recenzja rozmowy w historii AI.

AI jest wolna.+

Zależy od: dostawcy API prędkości, rozmiar kontekstu (duże KB = więcej żetonów = wolniej), opóźnienia sieciowe. Spróbuj szybszy model.

Śledzenie

Brak widżetu+

Sprawdź: skrypt w źródle strony? Błędy JS w konsoli? Blokowanie CSP? Ad bloker?

Nieznany kraj+

GeoIP nie jest skonfigurowany. Użyj bazy danych Cloudflare (automatic) lub MaxMind GeoLite2.

Bilety

E-maile nie tworzące biletów+

Sprawdź: skrzynka pocztowa podłączona? Uruchomienie Cron? Zmieniono hasło aplikacji? IMAP ustawienia poprawne?

Auto- odpowiedź nie działa+

Sprawdź: włączone? Dozwolone jest działanie działu? AI skonfigurowane? Uruchomienie Cron? Człowiek odpowiedział pierwszy?

Łączniki

Połączenie nie powiodło się+

Sprawdzić: poprawność uwierzytelniania? Klucz wygasł? API dostępne z serwera? Baza URL Zgadza się?

Połączone, ale brak danych+

Sprawdzić: API klawisze? synchronizacja webhook włączone? Uruchomienie Cron?

Wydajność

Wolne strony+

Sprawdź: wydajność bazy danych (SHOW PROCESSLIST), pamięć PHP (zwiększenie do 1GB), włącz opcache, skróć okres retencji.

Operacje

Widget nie loguje wizyt

Użyj tej skoncentruj się sprawdzić, kiedy obciążenia widget nieprawidłowo lub Live Feed pozostaje puste.

Kiedy widget nie jest logowanie wizyty, sprawdzić klucz witryny, załadować stronę w prywatnej przeglądarce, sprawdzić sieci / panele Console przeglądarki dla zablokowanych profilów lub widget, przegląd Content- Security- Policy i blokery reklamowe, potwierdzić, że strona jest aktywna w OpsIQ, i otwarta Diagnostyka. Widoczny bańka chat nie samo udowodnić, że nadajnik analityczny został zaakceptowany.

Odniesienie

Glosariusz

Definicje terminów używanych w całym OpsIQ.

Działanie

Coś, co AI może zrobić przez złącze lub platformę.

Agent

Członek zespołu z ograniczonym dostępem, albo agent ds. SI.

BYOK

Przynieś swój własny klucz, zapewniasz swój własny klawisz AI API.

Złącze

Wtyczka integrująca zewnętrzną platformę z OpsIQ.

CSAT

Wynik satysfakcji klienta.

Zgoda

Szansa na dochody w CRM.

Dział

Kategoria biletów do kontroli tras i dostępu.

Eskalacja

Przeniesienie biletu do innego wydziału lub z SI do człowieka.

GeoIP

Wykrywanie lokalizacji odwiedzających z adresu IP.

Przekazywanie

Przekształcanie rozmowy z Al w człowieka.

Symbol tożsamości

Podpisano symbol identyfikujący odwiedzającego stronę internetową.

Podstawa wiedzy

Artykuły, których używa AI, by odpowiadać na pytania.

Ołów

Gość, który pokazuje zamiar kupna.

Punkt wiodący

0-100 liczba wskazująca prawdopodobieństwo konwersji.

Etap cyklu życia

Gdzie jest klient: Ołów, Prospect, Klient, Pod Ryzykiem, Kościoły.

Zarządzana AI

AI dostarczona w ramach planu OpsIQ.

Rurociąg

Wizualna tablica etapów transakcji.

RBAC

Kontrola dostępu na bazie Role-.

Sesja

Serię przeglądów stron w oknie timeout.

Klucz strony

Unikalny identyfikator dla wyśledzonej strony internetowej.

SLA

Umowa na poziomie usług, czas reakcji.

Token Przewodniczący

Jednostka tekstu AI. W przybliżeniu 4 znaki = 1 Token.

Warstwa zaufania

System bezpieczeństwa kontrolujący autonomię AI.

Hak internetowy

Oddzwania HTTP do powiadomień o zdarzeniach.

Widget

JavaScript kod osadzony na Twojej stronie internetowej.

Przestrzeń robocza

Strona z własnym śledzeniem, SI, złącza i zespół.

Odniesienie

Sprowadź więcej pomocy.

Jeżeli dokumentacja ta nie odpowiada na Twoje pytanie:

Admin AI

Kliknij "Zapytaj OpsIQ" w admin. Ma dostęp do tej dokumentacji i danych platformy.

Bilet na wsparcie

Wpisz: co próbowałeś, co się stało, czego oczekiwałeś i wszelkie komunikaty o błędach.

E-mail

Obsługa e-mail z kluczem licencyjnym i opisem wydania.

Porady dotyczące skutecznych wniosków o wsparcie

Załącz stronę

Która strona administracyjna (URL lub nazwa).

Włączaj ustawienia

Dokładne ustawienie nazwy i bieżącej wartości.

Włączaj błąd

Dokładna wiadomość błędu z kodami.

Załącz kroki

To co zrobiłeś, krok po kroku.

Włączanie oczekiwanych vs rzeczywiste

Co powinno się stać, a co się stało.

💡
Im bardziej szczegółowe żądanie, tym szybciej odpowiedź. "To nie działa" wymaga dochodzenia. "Kliknięcie Zapisz na konfiguracji AI daje kod błędu 502" otrzymuje bezpośrednią odpowiedź.