OpsIQ Документация

строить, эксплуатировать и расширять OpsIQ.

Это полная документация для OpsIQ Настройка продукта, поддержка запуска, настройка AI, управление CRM, установка виджета, сборка разъемов, вызов REST API, получать веб-хуки, упаковывать рыночные приложения и управлять саморазмещенными развертываниями.

Руководство для клиентовРуководство для администраторовРуководство для разработчиковСсылка на CRMКоннектор SDKОСТАЛЬНЫЕ APIсамоуправляющийся
Сфера охвата

Объем этого справочника

Все, что делает OpsIQ, в одном месте: как работает каждый экран, как подключить свои собственные системы и как настроить поверх него. Начните с любого места, разделы следуют тому же порядку, что и боковая панель администратора.

Сфера охвата
Карта документацииСправочник организован вокруг продукта OpsIQ, в том же порядке, что и боковая панель администратора.Карта документацииOpsIQ ПродуктAUDIENCEОператорыстроитьРазработчикиRUNАдминистраторыЖИВОЙ ВИДЕО РАБОТЫИспользуем OpsIQЭкраны продуктов и рабочие процессыВключенныйРасширить OpsIQКоннекторы, APIs и виджетВключенныйОператор OpsIQБезопасность, Крон и развертываниеВключенныйСсылкаПакет, API и контракты на webhookВключенный1CHOOSE AUDIENCEОператор или разработчик2FOLLOW THE UIСекции зеркально OpsIQ3USE SOURCE TRUTHСтатус приходит из строения
Справочник организован вокруг продукта OpsIQ, в том же порядке, что и боковая панель администратора.
Portal Studio полевой гид

Используйте специальное руководство для администратора и разработчика по архитектуре портала, страницам, компонентам, предварительному просмотру, справочному центру, идентификатору SCIM, управляемым выпускам, расширениям, миграциям и сертификации.

Откройте руководство Portal Studio

Что здесь находится

Запускайте продукт

Каждый экран в админ: аналитика, чат, билеты, CRM, база знаний, разведка сайта, акции и портал учетной записи клиента. Что делает каждая страница, что означают цифры и что делать, когда они выглядят неправильно.

Подключите свои системы

Виджет сайта, почтовые ящики электронной почты, входящие и исходящие веб-хуки и библиотека разъемов для таких платформ, как Shopify, WooCommerce, WHMCS Zendesk, Stripe, Slack и Gmail.

Создайте свой собственный

Коннектор для разъемов без кода, действий и триггеров, если вы предпочитаете вообще не использовать разъединения, и REST API с каждым действием, объемом и кодом ошибки.

Управляйте им.

Роли и разрешения, безопасность, cron, диагностика, резервное копирование, а также размещенные и саморазмещенные развертывания.

С чего начать

1
Если вы работаете OpsIQ день за днем

Прочитайте разделы экрана в порядке боковой панели. Каждый открывается тем, для чего предназначена страница, чтобы вы могли остановиться, как только у вас будет то, что вам нужно.

2
Если вы управляете

Добавьте настройки, безопасность, диагностику, крону и производство. Это разделы, которые решают, все ли еще работает.

3
Если вы создаете интеграцию

Начните с Коннекторов, затем Строитель Коннекторов, затем REST. API Прочтите их в порядке, и вы увидите все способы OpsIQ Можно поговорить с другой системой.

💡
Две вещи меняют то, что вы видите. Разрешения скрывают страницы, которые ваша роль не может открыть, поэтому раздел, описанный здесь, может отсутствовать на вашей боковой панели. Попросите администратора проверить вашу роль. И разъемы несут ярлык зрелости Production, Beta, Preview или Template; запущенная сборка и ее манифест разъединения являются авторитетом, которым вы обладаете, а не этой страницей.
Начни здесь

Что OpsIQ делает для вашего бизнеса

OpsIQ Это полная бизнес-платформа для работы с ИИ. Она заменяет вашу аналитику, чат в реальном времени, службу поддержки, CRM, инструментарий SEO, промежуточное ПО интеграции и платформу разработчика одним единым администратором, где каждый инструмент разделяет один и тот же контекст клиента. 8-12 Отдельные продукты SaaS, которые вы устанавливаете OpsIQ Один раз и управлять всем с одного экрана.

Платформа
OpsIQ унифицированная платформаЦентральный мозг ИИ, подключенный к живому чату, CRM, билетам, Site Intelligence, рекламным акциям и аналитике.Живой чатПропагандаИИ CRMСайт компании IntelБилетыАналитикаOpsIQМозг ИИ1ONE WORKSPACEКаждый инструмент в одном админ2SHARED BRAINКонтекст клиента3ANYWHEREОблачный или собственный хостинг
OpsIQ - это одна платформа с одним общим клиентским контекстом, каждый инструмент питается и работает на одном и том же мозге ИИ.

Все, что делает OpsIQ, подробно

Аналитика веб-сайтов и аналитика посетителей

Отслеживание посетителей в реальном времени

Каждая загрузка страницы, клик, прокрутка и навигационное событие фиксируются в режиме реального времени. Посмотрите, кто находится на вашем сайте прямо сейчас, какие страницы они просматривают, сколько времени они проводят и откуда они пришли, все без сторонних файлов cookie.

Журнал посетителей и сессии

Полная история каждого посетителя с устройством, браузером, операционной системой, страной, городом, реферером, параметрами UTM, целевой страницей и разрешением личности.

Повтор сеанса

Воспроизведение сеансов посетителей в стиле временной шкалы. Посмотрите, что сделали пользователи: движения мыши, клики, свитки, переходы страниц и взаимодействия форм. Используйте его для диагностики проблем UX, понимания точек выпадения и проверки потоков конверсии.

Живые корма

Поток активности посетителей в режиме реального времени. Смотрите просмотры страниц, запускается чат, формирует представления и сигналы о намерениях, обновляющиеся каждые несколько секунд. Фильтр по стране, устройству или рефереру для фокусировки на конкретных сегментах трафика.

Лучшие страницы

Страницы, ранжированные по посещениям, времени вовлечения, коэффициенту отказов, конверсии и активности поддержки. Определите свой самый высокопроизводительный контент и страницы, которые нуждаются в улучшении.

Георазведка

Разбивка по странам, городам и регионам с помощью карт. Распределение устройств и браузеров, анализ источников трафика, отслеживание рефереров в поисковых системах и понимание проникновения на рынок.

Воронка намерения

Отслеживайте сигналы о намерениях посетителей (ценовые посещения страниц, повторные возвраты, шаблоны просмотра документации и взаимодействия поддержки), чтобы идентифицировать посетителей, которые могут покупать, отбрасывать или нуждаться в помощи.

A/B эксперименты

Запустите сплит-тесты на своем сайте непосредственно из OpsIQ. Создайте варианты, установите распределение трафика, определите цели конверсии и измерьте статистическую значимость.

JavaScript отслеживание ошибок

Захват клиентской стороны JavaScript ошибок с вашего сайта автоматически. См. сообщения об ошибках, следы стека, затронутые браузеры, количество частот и какие страницы их запускают. Проблемы интерфейса отладки без отдельного мониторинга ошибок.

Журнал событий

Каждое отслеживаемое событие (просмотры страниц, пользовательские события, взаимодействия в чате, отправка форм, покупки) в доступном для поиска, фильтруемом журнале с полными метаданными.

Продажи и конверсии

Отслеживайте заказы, доходы, возвраты средств, продление подписки и приписывайте конверсии источникам трафика, кампаниям и поездкам посетителей. Панели доходов с сравнением периодов и анализом тенденций.

Свинец

Высоконамеренные посетители, идентифицированные по шаблонам поведения. Оценка потенциальных клиентов на основе посещений страниц, времени на сайте, частоты возврата, взаимодействий поддержки и пользовательских сигналов. Корм ведет непосредственно в конвейер CRM.

Site Intelligence (SEO и контент-анализ)

Сканирование сайта

Автоматизированный сканирование всего вашего сайта, чтобы обнаружить страницы, обнаружить неработающие ссылки, найти отсутствующие метатеги, проверить альтернативный текст изображения, подтвердить канонический URLs и нанести на карту структуру вашего сайта.

Технический аудит SEO

Комплексный технический анализ: оценки скорости страницы, мобильная отзывчивость, ключевые веб-важности, статус сертификата SSL, цепочки переадресации, обнаружение дублированного контента, анализ глубины сканирования и валидация структурированных данных.

Проверка содержания

Оцените каждую страницу по качеству контента, количеству слов, читабельности, плотности ключевых слов, структуре заголовков, соотношению внутренних / внешних ссылок и свежести. Идентифицируйте тонкий контент, дублирующие страницы и пробелы в содержании.

Поиск с помощью ИИ

Семантический поиск по всему контенту вашего сайта. Задавайте вопросы на естественном языке о вашем контенте и получайте ответы с синтезированным ИИ со ссылками на исходные страницы.

Отслеживание ранга SERP

Следите за рейтингом в поисковых системах по целевым ключевым словам в Google и других движках. Отслеживайте изменения позиции с течением времени, сравнивайте с конкурентами и смотрите, какие страницы ранжируются по каким терминам.

Исследование ключевых слов

Откройте возможности ключевых слов на основе вашего контента, анализа конкурентов и данных об объеме поиска. Получите предложения по новым темам контента, изменениям длинного хвоста и целям оптимизации контента.

Анализ обратных ссылок

Просмотрите, какие сайты ссылаются на вас, отследите новые и потерянные ссылки, проанализируйте распределение якорного текста и определите возможности построения ссылок.

Локальная SEO сеть

Для компаний с физическими местоположениями: визуализируйте локальную видимость поиска по географической сети. Посмотрите, как ваши рейтинги варьируются в зависимости от местоположения, расстояния от вашего бизнеса и намерения поиска.

Google Business Profile синхронизируется

Подключите свой бизнес-профиль Google OpsIQ Синхронизация обзоров, сообщений, вопросов и ответов, фотографий и деловой информации. Управляйте своим списком GBP изнутри OpsIQ Отвечайте на обзоры, публикуйте посты и отслеживайте идеи.

Запланированные доклады

Автоматизированные отчеты по SEO и аналитике, созданные в вашем расписании (ежедневно, еженедельно, ежемесячно). Отчеты включают изменения рейтинга, тенденции трафика, обнаруженные технические проблемы и производительность контента.

Поддержка на основе ИИ

Клиентский чат AI

ИИ отвечает на вопросы клиентов на вашем сайте 24/7 использование базы знаний, данных подключенной платформы (заказы, учетные записи, подписки) и пользовательских подсказок для обучения. Поддержка нескольких поставщиков ИИ: Claude Anthropic), GPT-4o (OpenAI), Gemini (Google) и Grok (xAI).

Помощник AI Admin

Копилот ИИ внутри панели администратора, который помогает вам писать ответы на билеты, составлять сообщения клиентов, анализировать тенденции поддержки, просматривать данные клиентов через подключенные платформы и выполнять действия через систему разъемов.

Основы знаний AI

ИИ основан на ваших статьях базы знаний, записях часто задаваемых вопросов, документации по продуктам и данных подключенной платформы. Он не галлюцинирует. Он отвечает на вашу фактическую деловую информацию или усиливается при неопределенностях.

Автоматическая передача людям

Когда ИИ не может решить вопрос, обнаружить разочарование или клиент просит человека, он автоматически передает вашу команду с полным контекстом разговора.

Тренинг AI подсказки

Напишите отдельные инструкции для ИИ, ориентированного на клиента и AI, ориентированных на админ. Контрольный тон, границы, правила эскалации, запрещенные темы и поведение в зависимости от бизнеса. Поддерживается конфигурация рабочего пространства.

История ИИ и аудит

Каждый разговор с ИИ регистрируется с полными деталями запроса / ответа, использованием токенов, отслеживанием затрат, используемой версией поставщика и моделью. Просмотрите разговоры для выявления пробелов в обучении и повышения точности ИИ.

Искусственный интеллект

Автоматизированный анализ моделей разговоров с ИИ. См. общие вопросы, показатели разрешения, частоту передачи данных, удовлетворенность клиентов по темам и области, где ИИ нуждается в лучшей подготовке.

Конфигурация Per-workspace AI

Каждый подключенный сайт/рабочее пространство может использовать свой собственный поставщик ИИ, модель, температуру, бюджет токенов и учебные подсказки. Компания SaaS может использовать Claude для основного продукта и GPT-4o для вторичного бренда.

Управляемый ИИ и BYOK

Два режима ИИ: управляемый ИИ (включен в ваш план, нет)API Требуется ключ или принесите свой собственный ключ (используйте свой собственный) OpenAI/Anthropic Google/xAI API ключ для полного контроля над выбором модели и затратами. Оба являются первоклассными, каждая функция работает в любом режиме.

Токены AI бюджеты и контроль затрат

Установите ежемесячные токены, лимиты на разговор и оповещения с низким балансом. Отслеживайте расходы на поставщика, рабочее место и беседу. Предотвращайте безудержные затраты с жесткими потолками.

Билеты и справочники

Система местных билетов

Полная справочная служба с отделами, приоритеты (низкий / средний / высокий / срочный), статусы, отслеживание SLA, внутренние заметки, ответы клиентов, вложения файлов и резьбовые разговоры.

Сортировка и автоответ

ИИ автоматически сортирует входящие билеты по отделам и приоритетам. Включает автоматическое реагирование на безопасные отделы. ИИ разрабатывает и отправляет ответ после настраиваемой задержки (по умолчанию: 2 минут), чтобы люди могли вмешаться первыми.

Проглатывание электронной почты

Подключите почтовый ящик (Gmail, IMAP или специализированный провайдер) для автоматического создания билетов из входящих электронных писем.

Билетный портал встроен

Вставьте на свой сайт портал билетов, ориентированный на клиента. Клиенты могут отправлять билеты, просматривать их историю, отвечать на открытые билеты и проверять статус, все фирменные для вашего дизайна.

Слияние билетов

Слить дубликаты билетов в единую нитку. Слияние билетов показывают [Слияние] на предметную линию. Вся история разговора сохраняется в сохранившемся билете.

Вернуться в AI

После того, как человек-агент берет на себя билет, используйте "Возвращение к ИИ", чтобы позволить ИИ автоматически отвечать на этот билет. Полезно, когда требуемая человеком часть решена, но у клиента есть последующие вопросы, которые может решить ИИ.

Входящие копилоты

Управление билетами с помощью ИИ, с точки зрения почтового ящика. Копилот предлагает ответы, обобщает историю разговоров, рекомендует приоритетные / ведомственные задания и может выполнять действия на подключенных платформах.

Чат и поддержка в реальном времени

Чат-бокс

В режиме реального времени клиентский чат управляется из единого почтового ящика. См. все активные разговоры, личность клиента, историю разговоров и предложения ИИ. Несколько агентов могут сотрудничать в разговоре.

Правила активного чата

Сообщения в чате, основанные на поведении посетителей: время на странице URL посещение, глубина прокрутки, количество повторных посещений, намерение выхода или пользовательские события. Пример: покажите сообщение о помощи после 60 секунды на странице ценообразования.

Виджет чата

Настраиваемый чат виджет встроен на вашем сайте. Поддержка AI чат, живой агент чат, подача билета, поиск базы знаний и идентичность посетителя. Ответственный, доступный и брендированный.

CSAT Опросы

Собирайте рейтинги удовлетворенности клиентов после взаимодействия в чате и билетах. Дизайн-опросы с вашими собственными вопросами, шкалами рейтинга и последующими подсказками. Результаты поступают в производительность команды и понимание ИИ.

Post-chat email опрос

После окончания чата посетители с известным электронным письмом могут получить одно фирменное письмо с резюме ИИ о том, что было обработано, и одним щелчком мыши «Было ли это легко?» Да / Нет. Однажды на нить, подписанные одноразовые ссылки, каждая отправка зарегистрирована, и результат попадает на страницу обратной связи в качестве собственного сигнала рядом со звездами в чате.

Личность обратной связи

Каждый элемент обратной связи, который несет человека, показывает их: имя, адрес электронной почты, переход к полному путешествию клиента и контакт с CRM, а также ответы на электронную почту или AI-проект одним щелчком мыши, основанные на их фактической истории.

Написание AI

Отдельный помощник по написанию ИИ для составления черновиков электронной почты, ответов на билеты, объявлений и сообщений клиентов. использует свою собственную подсказку (не мозг чата) для профессионального делового письма.

AI-First CRM

Командный центр CRM

Один экран, показывающий все ваше состояние CRM: стоимость трубопровода, скорость сделки, предстоящие задачи, сделки с риском, активность агента и рекомендации ИИ. Домашняя страница CRM - ваша ежедневная отправная точка.

Контакты и компании

Управляйте контактами клиентов с полными профилями: имя, электронная почта, телефон, компания, теги, этап жизненного цикла, история разговоров, история билетов, истории покупок и пользовательских полей. Связывайте контакты с компаниями для управления отношениями B2B.

Сделки и трубопроводная плата

Визуальная доска сделок в стиле Канбана с настраиваемыми этапами. Перетаскивание сделок между стадиями, установление значений, назначение владельцев, отслеживание дат закрытия и просмотр стоимости трубопровода на каждом этапе. Поддерживается несколько трубопроводов.

Тренер по сделкам с ИИ

ИИ анализирует каждую сделку и обеспечивает коучинг: сигналы риска (умер, упоминался конкурент, проблемы с бюджетом), рекомендации по лучшим действиям, вероятность выигрыша и предлагаемые сроки выполнения.

Прогноз и отчеты

Прогнозирование доходов на основе данных трубопровода, исторических близких ставок и скорости сделки. Отчеты включают в себя конвейер по этапам, владельцем, источником, коэффициентами конверсии, средним размером сделки и длиной цикла продаж.

Ищущий агент (SDR)

Поиск с использованием ИИ, который идентифицирует потенциальных клиентов по данным посетителей, ведущим сигналам и активности подключенной платформы. Предлагает целевые показатели охвата, составляет первоначальные сообщения и оценивает качество свинца.

Последующие последовательности

Автоматизированные многошаговые последующие последовательности: электронная почта, ожидание, электронная почта , ответ на проверку, эскалация. Определите последовательности для новых потенциальных клиентов, остановленных сделок, после покупки регистрации и кампаний повторного участия.

Жизненный цикл и удержание

Отслеживание этапов жизненного цикла клиента (ведущий, потенциальный клиент, отточенный) с помощью автоматизированных переходов. Агент удержания отслеживает сигналы оттока и предлагает вмешательства.

Агент по управлению данными

Агент ИИ, который постоянно очищает и обогащает ваши данные CRM: дублирует контакты, заполняет отсутствующие поля, проверяет электронные письма, стандартизирует названия компаний и маркирует устаревшие записи.

Создайте свою CRM

Конфигурация CRM на естественном языке: сообщите ИИ, как выглядит ваш процесс продаж, и он строит ваши этапы конвейера, пользовательские поля, шаблоны сделок и правила автоматизации.

Проверка здоровья CRM

Автоматический аудит качества данных CRM: дублирование контактов, сделки без следующих шагов, устаревшие конвейеры, отсутствие контактной информации и оценка полноты данных.

Trust Dial скачать

Трехуровневый контроль автономии для каждого агента CRM AI: автопилот (AI действует независимо), Copilot (Ai предполагает, человек одобряет) и Ручное управление (Al наблюдает только).

Четыре агента ИИ

CRM работает с четырьмя специализированными агентами ИИ: Steward (качество данных), SDR (поиск), Retention (профилактика зуда) и Analyst (отчетность и понимание).

Коннекторы и интеграции

Предустановленные разъемы

Готовые к использованию соединители для Shopify, WooCommerce BigCommerce, Magento 2PrestaShop, OpenCart, osCommerce WordPress, WHMCS Zendesk, Stripe, Amazon SES, Postmark, Resend, SendGrid, Mailgun, Gmail, IMAP Slack и Google Business Profile. Каждый разъем обеспечивает синхронизацию действий, знаний и данных для конкретной платформы.

Конструктор соединений

Создавайте пользовательские разъемы для любой платформы, без кода, с помощью ИИ или полного кода APIs, OAuth поток кода авторизации, авторегистрация webhook Stripe и простые схемы подписи, пагинация (загрузка, страница, курсор и заголовок ссылки), преобразование списка / ошибки, контекст нескольких действий и упаковка рынка.

Создатель разъемов с поддержкой AI

ConnectorBuilderAI помогает вам создавать разъемы: описывать то, что вы хотите, и предлагает действия, пишет обработчики запросов и карты. API Реакции. Обрабатывает аутентификацию, инициацию и обработку ошибок автоматически.

OAuth поток для любого разъема

Дженерик в приложении OAuth поток авторизации, который работает с любым разъемом. поддержка PKCE, управление состоянием на сайте, автоматическое обновление токенов.OAuth параметров и OpsIQ Управляет потоком.

Широкоформатные автобусы (широкое расширение платформы)

Коннекторы не просто добавляют действия платформы. Они могут питать основные функции через «автобусы». Разъем объявляет о возможности (календарь, обогащение, знак в CRM; local_listing, rank_data в Site Intelligence; web_analytics в Analytics; payment_provider в Payments; email_sync в Mailbox; video_meeting в Comms) и реализует свой небольшой набор методов; OpsIQ обнаруживает его через CapabilityRegistry и подключает к пользовательскому интерфейсу, клиент 360 Несколько разъемов могут предложить такую же возможность без блокировки. См. connectors/PLATFORM_CONNECTORS.md.

Предустановленный vs рыночный уровень

Коннекторы живут в одном из двух уровней. Предварительно установленные разъемы (коннектора /) активны для реестра из коробки, остаются наклонными только к бесключевой ссылке и наиболее часто используемому поставщику за возможность (например, Google Calendar, Gmail, Google Business Profile). Разъемов Marketplace (marketplace_connectors /) можно обнаружить, но они инертны до установки, например Microsoft 365 Календарь, Outlook, DocuSign, Stripe, GA4, SerpApi, Zoom. Каждый мост выходит на рынок список, поэтому пользовательский интерфейс и ИИ могут запросить «установку с рынка» (уведомление о установке), когда у возможности нет готового поставщика, никогда не сломанная кнопка.

Рынок коннекторов

Опубликуйте свои разъемы для OpsIQ Маркетплейс, соединители пакетов с профилем.json Знания.json Рабочий процесс_рецепты.json Маркетплейс поддерживает бесплатные и платные разъемы с многоисточниковым выставлением счетов.

Подписание соединения

Все разъемы криптографически подписаны для проверки целостности. Подпись проверяется во время установки. Используйте инструмент resign_all_connectors для повторной подписи после обновлений.

SmartLookup

Декларативная система нечеткого соответствия для действий разъема. Определите правила поиска и OpsIQ Сопоставляет запросы пользователей с объектами платформы, использующими алгоритмы fuzzyScore и smartRank. Пример: find_country("germ") соответствует Германии 88.9% Уверенность.

Договоры на действия

Генерал OpsIQ API Публикует все зарегистрированные JSON Операция как обнаруживаемое именуемое действие. Используйте meta.actions для живых полных и точных типов контрактов; пакеты разъемов объявляют свои собственные действия поставщика через единого Исполнителя действий.

Рецепты Connector

Предварительно построенные рецепты рабочего процесса, которые объединяют несколько действий разъема в общие рабочие процессы бизнеса. Пример: «Когда новый заказ входит на Shopify, создайте билет, обновите CRM и отправьте уведомление Slack».

Синхронизация знаний

Коннекторы объявляют темы знаний, которые синхронизируются с базой знаний ИИ. Статьи о помощи для платформы, руководства по настройке и шаги по устранению неполадок автоматически доступны для AI без ввода ручных знаний.

Платформа для разработчиков

ОСТАЛЬНЫЕ API

По имени JSON API Покрывает всех зарегистрированных администраторов JSON Операция, с API- ключевая аутентификация, изоляция рабочего пространства, области применения, ограничение скорости, идемпотентные записи, OpenAPI и созданная коллекция Postman.

Вебхуки

Исходящие веб-хуки для всех основных событий: заказы, счета-фактуры, подписки, билеты, чаты, лиды, регистрация пользователей и отказ от корзины. Доставка Async через очередь работы, экспоненциальная обратная повторная запись, защита SSRF и автоматическое отключение после 15 последовательных сбоев.

Подписание Web-cook

Каждый исходящий веб-хук подписан HMAC-SHA256. Проверяйте подписи на принимающем конце, чтобы обеспечить подлинность веб-книги. Стабильное событие_id для обработки идемпотентов.

Виджет SDK

JavaScript SDK для виджета отслеживания с разрешением идентификации, отслеживанием пользовательских событий, программным управлением чатом и конфигурацией страницы. Установите рецепты React, Vue, Next.js WordPress, Shopify и статический HTML.

Плагины и SDK

Серверные SDK и плагины для общих структур. WordPress Плагин, WHMCS модуль и общие библиотеки интеграции PHP/Node.js;

События API

Нажмите пользовательские события в OpsIQ из вашего бэкэнда: покупки, регистрации, использование функций, ошибки или любое деловое событие. События появляются на временной шкале посетителя и подаются в аналитический и AI-контекст.

Поваренная книга Triggers

Создавайте автоматизированные рабочие процессы, вызванные событиями: новый билет, запущен чат, идентифицирован посетитель, изменена стадия сделки или пользовательское событие. Триггеры выполняют действия разъема, отправляют веб-хуки, обновляют записи или уведомляют вашу команду.

API Разработчик

визуальный API и webhook builder внутри администратора. Настройка конечных точек, тестовые запросы, проверка ответов и отладка интеграции без оставления OpsIQ.

Команда и администрация

Контроль доступа на основе ролей

Три роли: Владелец (полный доступ, выставление счетов, опасная зона), Полный администратор (все операции, кроме выставления счетов и опасной зоны) и Агент (только назначенные отделы, нет доступа к настройкам).

Диспетчерская панель Team Performance

Владелец и панель управления только с полным администратором, показывающая время разрешения, распределение рабочей нагрузки, глубину обработки, разбивку канала, анализ тенденций, соответствие SLA, CSAT агентом, повторные открытые ставки, развертывания команды и самые загруженные часы. Обновлено в режиме реального времени.

Присутствие администратора и онлайн-отслеживание

Виджет в режиме реального времени, который находится в сети, в навигации администратора. Обнаружение присутствия на основе сердцебиения (60- второй пинг, 300- второй отрезок, авто-срубка после 120 Смотрите, какие администраторы в настоящее время активны и на каких страницах.

Настройки рабочего пространства

Каждый подключенный сайт (рабочее пространство) может иметь свою собственную конфигурацию ИИ, настройки разъема, отделы билетов, брендинг и операционные правила.

Управление несколькими объектами

Управлять несколькими сайтами из одного OpsIQ Каждый сайт имеет свой собственный фрагмент отслеживания, данные о посетителях и конфигурацию. Переключайтесь между сайтами из навигации администратора.

Система шаблонов электронной почты

Шаблоны электронной почты, управляемые реестром для всех автоматизированных коммуникаций: уведомления о билетах, стенограммы чата, приветственные электронные письма, сброс паролей и системные оповещения. HTML шаблоны с живым предварительным просмотром, переменные чипы ({{customer_name}}, {{ticket_id}}) и глобальный контроль за размещением.

Импорт и экспорт

Импорт контактов, билетов и статей знаний из CSV/JSON Экспорт данных посетителей, аналитических отчетов и записей CRM. Переносимость данных для миграции между системами.

Безопасность, соблюдение и операции

Предприятие SSO

OIDC (OpenID Подключение) единый вход с полным рабочим временем: обнаружение, авторизация, обратный вызов, проверка подписи JWKS, пользовательская информация, список разрешений домена, предоставление JIT и охрана статуса. SAML Поддержка конфигурации.

GDPR и соответствие данных

встроенный DSAR (Запрос на доступ к данным) обработка: экспорт и удаление данных о клиентах во всех системах. Стирание данных контактного уровня, охватывающее сессии, билеты, чаты, записи CRM и журналы электронной почты. Политика управления согласием и хранения.

IP блокировка и защита от грубой силы

Блок специфический IPs или колеблется от доступа к вашему сайту или администратору. Автоматическая блокировка после настраиваемых неудачных попыток входа в систему.IP, временная метка и пользовательский агент.

HSTS и заголовки безопасности

HTTP Strict Transport Security, заголовки Permissions-Policy и конфигурация безопасных файлов cookie. Самостоятельно размещенные развертывания могут добавлять заголовки CSP через конфигурацию сервера.

Закаливание исходящих webhook

SSRF Guard блокирует веб-хуки для частных / метаданных IP Доставка с помощью асинхронизации предотвращает блокировку приложения медленными конечными точками. 15 последовательные отказы предотвращают отходы ресурсов на конечных точках.

Изоляция рабочего пространства

Строгая изоляция данных между рабочими пространствами. Посетители, билеты, чаты, записи CRM и разговоры с ИИ относятся к их рабочему пространству. Утечки данных в межрабочем пространстве предотвращаются на уровне запросов.

Управление циклом Биллинга

Поддержка ежемесячных, квартальных, полугодовых, годовых, двухгодичных и пожизненных циклов выставления счетов. Нормализация валюты для мультивалютных шлюзов. конвертация валют на получение платежа для точной отчетности о доходах.

Кронная и плановая автоматизация

Встроенная система cron для запланированных задач: генерация отчетов, очистка данных, продление подписки, обновления обучения ИИ, синхронизация разъемов и повторные записи веб-хокков. Диагностика здоровья с предупреждающими индикаторами.

Политика хранения данных

Настройка того, как долго сессий посетителей, стенограммы чата, истории разговоров ИИ и журналов событий сохранены. Автоматическая очистка устаревших данных для управления хранением и соблюдения политики хранения.

Диагностика и здоровье

Панель мониторинга состояния системы, показывающая состояние cron, подключение к базе данных, статус поставщика AI, здоровье разъема, скорость доставки веб-хуков и использование хранилища. Предупреждения о проблемах конфигурации и узких местах производительности.

OpsIQ является

Магазины электронной торговли

Магазины

Отслеживайте каждого посетителя от посадки до покупки. Пусть ИИ ответит "Где мой заказ?"Shopify/WooCommerce/BigCommerce data. Управляйте билетами поддержки с помощью AI auto-reply. Запускайте конвейер сделок для оптовых и B2B лидов. Привносите доход в источники трафика и кампании. Следите за отказом тележки с восстановительными рабочими процессами.

SaaS и программные компании

SaaS

Мониторинг пробных регистраций и внедрение функций с повторением сеансов. Отслеживайте, какие страницы документации конвертируют. Автоматизируйте поддержку с помощью ИИ, основанного на вашем API Управление доходами от подписки и расширение сделок в CRM. Подключите свою платежную платформу (Stripe, WHMCS) для отслеживания в реальном времени MRR. Используйте агент жизненного цикла CRM для обнаружения и предотвращения оттока.

Агентства и фрилансеры

Агентство

Предлагайте клиентам аналитику с белыми метками и порталы поддержки. Отслеживайте потенциальных клиентов на нескольких сайтах от одного администратора. Используйте CRM-провод для управления перспективами и руководителями проектов. Создавайте пользовательские разъемы для клиентских платформ, используя Connector Builder. Создайте фирменные отчеты SEO с помощью Site Intelligence. Перепродавайте рыночные разъединения в качестве дополнительных услуг.

Хостинг и инфраструктура

Хостинг

Глубокий WHMCS Интеграция с 80+ действия ИИ по поиску заказов, управлению услугами; DNS Автоответ на общие вопросы хостинга с использованием статей базы знаний Отслеживайте взаимодействие со страницей статуса сервера Управляйте билетами технической поддержки с сортировкой ИИ Используйте лестницу цикла выставления счетов для ежемесячных планов пожизненного хоста.

Поддержанные предприятия

Поддержка

отклонять 40-70% Повторяющиеся вопросы в чате с ИИ, основанные на вашей базе знаний. Маршрутные билеты в нужный отдел с сортировкой AI. Отслеживайте работу команды со временем разрешения, соответствие SLA и CSAT агентом. Используйте пишущий ИИ для профессионального составления ответов. Следите за тенденциями поддержки с помощью идей ИИ.

Маркетинговые и SEO команды

Маркетинг

Полный набор Site Intelligence: сканирование, технический SEO-аудит, контент-анализ, отслеживание рейтинга SERP, исследование ключевых слов, мониторинг обратных ссылок и локальная сеть SEO. Управление бизнес-профилем Google. Запланированные отчеты по белым меткам для клиентов. A / B тестирование встроенное в виджет отслеживания. Атрибуция кампании по всем каналам.

Основатели соло и небольшие команды

Стартапы

Начните с простого отслеживания и чата, бесплатно добавляйте. Затем добавите билеты, когда вы получите объем поддержки. Включите CRM, когда начнете продавать. Подключайте платформы по мере их принятия. OpsIQ от одного человека, делающего все до 50- Персональная операционная команда с RBAC, отделами и отслеживанием эффективности каждого агента.

Предприятие и мультибренд

Корпоративный

предприятие SSO с OIDC для централизованной аутентификации. Многопространственная изоляция для отдельных брендов или подразделений. Пер-рабочее пространство AI конфигурация с различными поставщиками и моделями. Разработка пользовательских разъемов с дистрибуцией на рынке. Аудиторские маршруты, GDPR Инструменты соответствия и политики хранения данных.

Что такое OpsIQ

Google Analytics + Hotjar + Правдоподобно

Полная аналитика веб-сайта с отслеживанием посетителей, повторением сеансов, ранжированием страниц, геоаналитикой, воронками намерения, атрибуцией конверсий, событиями, экспериментами A / B и отслеживанием ошибок JS, все это удобно для конфиденциальности, все на одной платформе.

Intercom + Дрейф + Тидио

Клиентский чат с ИИ-мощью, основанный на знаниях, поддержка многопрофильного AI, автоматическое управление людьми, проактивные правила чата, история разговоров, опросы CSAT и создание билетов из чата.

Zendesk + Freshdesk+ Help Scout

Нативная система билетов с отделами, приоритетами, SLA, сортировкой ИИ, автоматической реакцией с настраиваемой задержкой, приемом электронной почты, вставкой билета, объединением билетов, копилотом для почтовых ящиков и возможностью возврата к AI.

HubSpot + Pipedrive + Salesforce

AI-first CRM с четырьмя специализированными агентами ИИ (Steward, SDR, Retention, Analyst), контроль автономии Trust Dial, доска объявлений, коучинг сделок, прогнозирование, последовательности, управление жизненным циклом и конфигурация CRM на естественном языке.

Ahrefs + SEMrush + Моз

Интеллект сайта с автоматизированными сканами, техническими аудитами SEO, анализом контента, поиском ИИ, отслеживанием рейтинга SERP, исследованием ключевых слов, анализ обратных ссылок, локальной сетью SEO и запланированными отчетами с белыми метками.

Zapier + Make + пользовательские промежуточные программы

соединитель SDK с 25+ предварительно построенные разъемы, Коннектор Строитель (без кода / AI-ассистированный / полный код), OAuth поток, авторегистрация webhook, большой каталог определений действия разъема, которые становятся исполняемыми только тогда, когда соответствующий разъединитель установлен, включен, настроен и проверен, SmartLookup, маркетплейс и подписанные пакеты.

Менеджер бизнес-профилей Google

Полный разъем GBP: управление обзорами, публикация постов, управление вопросами и ответами, загрузка фотографий, синхронизация бизнес-информации, отслеживание идей и ответы на обзоры на основе ИИ, все изнутри OpsIQ.

Отдельные инструменты шаблона электронной почты

Шаблоны электронной почты с визуальным редактором, предварительным просмотром в реальном времени, переменными чипами, глобальным контролем макета и настроек на каждое событие для всех автоматизированных коммуникаций.

Панели управления командой

Встроенная производительность команды: время разрешения, рабочая нагрузка, соответствие SLA, CSAT агентом, показатели повторного открытия, самые загруженные часы, отслеживание присутствия в режиме реального времени и поломки на каждый отдел.

GDPR Инструменты для обеспечения соответствия

Нативная обработка DSAR, удаление данных во всех системах, управление согласием, политика хранения и аудиты, встроенные в платформу, не включенные.

Два издания

Развертывание в хостинге

OpsIQ Работа продукта такая же; инфраструктура, обновления и резервные копии обрабатываются оператором хостинга. В этом руководстве документируется OpsIQ Это скорее время выполнения, чем маркетинговые или коммерческие потоки.

Самостоятельный модуль

устанавливать OpsIQ на вашем собственном сервере для полного контроля над данными, брендингом, обновлениями и интеграцией. 8.4+, MySQL 5.7+ или MariaDB 10.3+, HTTPS и другие OpsIQ Унифицированный крон. WHMCS Интеграция как дополнительный модуль. Полный суверенитет данных.

Рекомендуемый порядок чтения

1
Быстрое начало

Следуйте руководству по настройке 30-минут, чтобы отслеживать, общаться и использовать базовый ИИ для работы на вашем сайте.

2
Dashboard и аналитика

Узнайте, как читать данные посетителей, настроить повтор сеанса, определить потенциальных клиентов и понять шаблоны трафика.

3
Сайт разведки

Запустите свой первый SEO-сканер, проверьте свое техническое состояние и настройте отслеживание рейтинга SERP для целевых ключевых слов.

4
Билеты и поддержка

Настройте отделы, настройте автоответ с ИИ, подключите прием электронной почты и обучите свой ИИ обрабатывать общие вопросы.

5
CRM (управление связями с клиентами)

Организуйте контакты, создайте свой конвейер, настройте агентов ИИ, установите уровни Trust Dial и позвольте AI коучировать ваши сделки.

6
Коннекторы и инструменты разработчика

Подключите свою платформу электронной коммерции / биллинга, создайте пользовательские разъемы, настройте веб-хуки и интегрируйтесь через REST API.

💡
Новый для OpsIQ Начните с руководства по быстрому запуску ниже. Вы можете иметь отслеживание и базовый чат AI, работающий в режиме реального времени. 30 минуты.
Начни здесь

Быстрый старт в 30 минутах

Следуйте этим шагам, чтобы получить OpsIQ Каждый шаг строится на предыдущем. К концу у вас будет отслеживание посетителей, AI-чат и базовая поддержка билетов.

Настройка
Быстрый контрольный списокКонтрольный список с настройкой, показывающий установку виджета, подключение к платформе, обучение ИИ, приглашение команды и жизнь в режиме реального времени, с 60 % прогресс.Начинай.setupУстановите виджет OpsIQСкончалсяПодключите платформу ()WHMCS, Shopify...)СкончалсяТренируйте свой ИИ на своем контентеСкончалсяПригласите свою командуПроверь и живиПрогресс в налаживании3 из 5 · 60%1STEP 1Установить виджет2STEP 2Подключай и тренируй ИИ3STEP 3Приглашаем и живём
Путь 30-минута: установите виджет, подключите платформу, обучите свой ИИ, пригласите команду, а затем идите в прямом эфире.

Настройка 30-mint

1
Активируйте свою лицензию

Введите свой лицензионный ключ в администраторе OpsIQ. Перейдите в Настройки, введите лицензионный ключ, предоставленный для этой установки, и нажмите Активировать. Вы должны увидеть зеленый значок «Актив».

2
Установите свою бизнес-идентификацию

Перейдите в Настройки и заполните название вашего бизнеса, отрасль, часовой пояс, валюту по умолчанию и часы поддержки. Эта информация используется ИИ при ответе на вопросы клиентов и аналитике для отчетов, осведомленных о часовом поясе.

3
Выберите поставщика AI

Перейдите в Настройки AI и выберите поставщика. Claude (Anthropic), ГТП-4o (OpenAI), Gemini (Google), или Grok (xAI). API ключ если используя свой собственный ключ, или используйте управляемый ИИ если доступен на вашем плане. Нажмите «испытательное соединение» для того чтобы проверить.

4
Установите виджет отслеживания

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
Подключите платформу

Если вы используете Shopify, WooCommerce, WHMCS или другую поддерживаемую платформу, перейдите в Connectors, найдите свою платформу, введите учетные данные и щелкните Test Connection. Это дает ИИ доступ к данным заказа, профилям клиентов и контексту поддержки.

6
Пригласите свою команду

Перейдите в команду, нажмите «Пригласить», введите свою электронную почту и роль (владелец, полный администратор или агент). Агенты могут получить доступ только к отделам, которые вы им присваиваете. Владельцы и полные администраторы видят все.

Самый быстрый путь (5)

Шаг 1: Установить виджет

Копируйте фрагмент с подключенных сайтов и вставьте его на свой сайт. Это дает вам возможность отслеживать сразу.

Шаг 2: Включить AI

Перейдите в AI Configuration, выберите поставщика, введите свой ключ и сохраните. Чат ИИ теперь активен на вашем сайте.

Сделано

Теперь у вас есть отслеживание посетителей и AI-чат. Позже вы можете добавить билеты, CRM и разъемы.

День 2: Сделайте его полезным

Добавить знания

Перейдите на базу знаний и добавьте 5-10 ИИ использует их для точного ответа клиентам.

Создавать департаменты

Перейдите в «Билеты» и создайте по крайней мере 2 отделы (например, «Продажи» и «Поддержка»).

Напишите свой AI Quick

Перейдите в AI Training и напишите клиентский запрос, который описывает ваш бизнес, тон и правила эскалации.

Проверить разговор

Откройте свой сайт в частном браузере и пообщайтесь с ИИ как клиентом. Проверьте, что ответы точны и тон прав.

Неделя 1: Постройте свою работу

Подключите почту

Настройте почтовый ящик (Gmail, IMAP или разъем провайдера), чтобы электронные письма клиентов автоматически создавали билеты.

Настройка автоответчика

Включите автоматическое получение билетов для безопасных отделов. Установите 2-минутную задержку, чтобы люди могли вмешаться первыми.

Обзор аналитики

Ежедневно проверяйте панель мониторинга. Посмотрите на количество посетителей, показатель отказов, верхние страницы и продажи, если отслеживание подключено.

Начните свой CRM

Откройте AI CRM и позвольте OpsIQ импортировать контакты с подключенных платформ.

1: Оптимизация

Обзор истории AI

Проверяйте историю ИИ еженедельно. Ищите неправильные ответы, пропущенные вопросы и возможности для добавления знаний.

Добавить проактивные правила

Создайте правило: если посетитель находится на странице ценообразования в течение 60+ секунд, покажите сообщение чата с просьбой о помощи.

Построить разъем

Если вы используете платформу, которая не имеет встроенного разъема, используйте Connector Builder для его создания.

Настройка webhooks

Подключите OpsIQ к своим внутренним инструментам, используя исходящие веб-хуки для билетов, чата и событий продаж.

Могу ли я пропустить ИИ и просто использовать отслеживание?+

Да. Поставщик ИИ необязателен. OpsIQ работает как чистая аналитическая и билетная платформа без ИИ. Вы можете включить ИИ позже, когда будете готовы.

Можно ли отказаться от подключения и добавить его позже?+

Да. Коннекторы обогащают ИИ данными, специфичными для платформы, но OpsIQ работает без них. Начните с отслеживания и чата, затем подключите платформы при необходимости.

А если у меня еще нет сайта?+

Вы все еще можете использовать OpsIQ для билетов, CRM и совместной работы команды. Виджет отслеживания необязателен. Добавьте его, когда ваш сайт будет готов.

Как узнать, правильно ли установлен виджет?+

Посетите свой веб-сайт в частном / инкогнито браузере. OpsIQ Вы должны увидеть, как ваш визит появляется внутри. 15 Если нет, проверьте:1) является правильно вставленным фрагментом (2) является правильным ключом сайта, (3) являются блокировщиками рекламы или заголовками CSP, блокирующими сценарий.

Начни здесь

Полная карта продукта

OpsIQ не является одной из функций. Это администратор оператора, виджет веб-сайта, уровень поддержки ИИ, система билетов / справочных служб, полная CRM с четырьмя агентами AI, набор Site Intelligence, платформа разъема с рынком и поверхность разработчика. Вот каждый компонент, который он содержит.

Оператор admin

Панель управления, живой канал, журнал посетителей, сессии, повторение сеанса, верхние страницы, геоинтеллект, фуникулёр намерений, журнал событий, A / B-эксперименты, отслеживание ошибок JS, продажи и конверсии, потенциальные клиенты, AI CRM (командный центр, контакты, компании, сделки, доска трубопровода, коучинг по сделкам, прогнозирование, поиск, последовательности, жизненный цикл, управляющий данными, Создайте мой CRM, конфигурация CRM, состояние CRM, CRM API), билеты, папка входящих сообщений чата, проактивные правила, обследования CSAT, черновики электронной почты, почтовые ящики, настройка AI, обучение AI, история AI, аналитика AI, база знаний, соединители, конструктор соединителей, рынок, подключенные сайты, управление командой, производительность команды, настроек, диагностики и лицензии.

Поверхности, обращенные к клиентам

Виджет отслеживания веб-сайтов (аналитический маяк + чат + встраивание билетов + поиск базы знаний), чат клиента, портал представления билетов, обработка токенов идентификации посетителей, загрузка файлов, виджет опроса CSAT и центр помощи клиентам.

AI-First CRM

Командный центр, контакты, компании, сделки, доска трубопроводов с перетаскиванием и падением, коучинг сделок ИИ (сигналы риска, следующее лучшее действие, вероятность выигрыша), прогнозирование доходов, агент поиска (SDR), автоматизированные последовательности наблюдения, управление жизненным циклом и удержанием, агент управления данными (отказ, обогащение, проверка), конфигурация CRM, проверка здоровья CRM , Trust Dial (автопилот / пилот / руководство на агента), четыре специализированных агента (Стюард, SDR, Удержание, аналитик) и CRM API с веб-хуками.

Сюита для разведки

Автоматизированный сканирование сайтов, технический аудит SEO (скоростной, мобильный, Core Web Vitals), SSL, перенаправляет, структурированные данные), аудит контента (счет слов, читаемость, плотность ключевых слов, структура заголовков), семантический поиск на основе ИИ, отслеживание рейтинга SERP по двигателям, исследование ключевых слов с оценкой возможностей, анализ обратных ссылок и мониторинг, визуализация локальной сети SEO, синхронизация бизнес-профиля Google (обзоры, посты, вопросы и ответы, фотографии, идеи), запланированные отчеты (ежедневно / еженедельно / ежемесячно) и белые метки PDF продукции для учреждений.

ИИ и автоматизация

Клиентский AI-чат (многопрофильный провайдер: Claude, GPT-4o) Gemini, Grok), помощник администратора AI, заземление знаний ИИ, автозапуск с настраиваемым возвратом, конфигурация искусственного интеллекта в рабочем пространстве, управляемый ИИ и BYOK режимы, бюджеты токенов и контроль затрат, след аудита истории ИИ, анализ аналитических данных AI, сортировка билетов AI, автоматическое ответное действие на билеты с задержкой, написание AI (отдельная подсказка) и копилот администратора входящих сообщений.

Коннекторы и интеграции

25+ предварительно построенные разъемы (Shopify, WooCommerce BigCommerce, Magento2PrestaShop, OpenCart, osCommerce WordPress, WHMCS Zendesk, Stripe, Amazon SES, Postmark, Resend, SendGrid, Mailgun, Gmail, IMAP, Slack, Google Business Profile), Connector Builder (без кода / AI-ассистированный / полный код), общий OAuth поток с PKCE, рынок разъемов с платным дистрибутивом, подписание и проверка разъединения, нечеткое сопоставление SmartLookup, большой каталог определений действий HTTP, доступность которых зависит от установки разъёма, включения, конфигурации и проверки, синхронизации знаний и рецептов рабочего процесса.

Платформа для разработчиков

ПЕСТ API (посетители, события, билеты, контакты, настройки, разъемы), спецификация OpenAPI, API управление ключами, исходящие веб-хуки (синхронизация, подпись, повторная проверка, SSRF-охрана, автоматическое отключение), События API Для пользовательского проглатывания события, виджет SDK с разрешением идентичности, триггерами кулинарной книги, контрактами на действия, разъемом SDK, рыночная упаковка, серверные SDK (PHP, Node.js), WordPress плагин, и WHMCS Модуль.

Настройки и операции

Бизнес-идентификация, конфигурация ИИ на рабочем месте, настройки отслеживания, безопасность (HSTS, Permissions-Policy, IP блокировка, защита от грубой силы), RBAC (владелец / полный администратор / агент), управление командой и приглашения, панель управления производительностью команды, отслеживание присутствия администратора, система шаблонов электронной почты (управляемая регистром, визуальный редактор, переменные чипы), дизайнер опроса, знание домена, конструкция встраиваемых билетов, брендинг, политика хранения данных, управление циклом выставления счетов (ежемесячно через всю жизнь), нормализация валютного цикла, импорт / экспорт, диагностика, автоматизация крон и опасная зона.

Безопасность и соблюдение

предприятие SSO (OIDC с проверкой JWKS, предоставлением JIT), SAML конфигурация, GDPR/DSAR обработка (экспорт и удаление во всех системах), стирание данных при каждом контакте, управление согласием, изоляция рабочего пространства (строгая оценка уровня запросов), аудиторские маршруты, неудавшееся отслеживание входа в систему, IP Блокировка, исходящие веб-хуки SSRF и политики хранения данных.

Мост Провайдера

Управляемый ИИ, проходящий через OpsIQ поставщик URL Звонки провайдера Site Intelligence, проверка лицензии, отчеты о состоянии здоровья PDF рендеринг и экспорт данных, все маршрутизируемые через конечную точку сконфигурированного поставщика, а не прямого поставщика; API звонки с вашего сервера.

Каждая страница администратора

приборная панель

ядро

Ежедневный командный центр: обзор трафика, количество посетителей в реальном времени, сводка продаж, глубина очереди поддержки, предупреждения об активности ИИ и быстрые ярлыки действий.

Живые корма

Аналитика

Поток посетителей в режиме реального времени: просмотры страниц, запуск чата, отправка форм и сигналы о намерениях обновляются каждые несколько секунд с фильтрами страны, устройства и реферера.

Журнал посетителей

Аналитика

Полные записи посещения: устройство, браузер, ОС, страна, город, реферер, парам UTM, целевая страница, личность и полная история просмотра страницы.

Сессии

Аналитика

Вид сгруппированный по путешествию: поток страниц, время на странице, глубина прокрутки, путь конверсии и страница выхода для каждой сессии посетителя.

Повтор сеанса

Аналитика

Воспроизведение захваченных событий по временной шкале: движение мыши, клики, свитки, переходы страниц и взаимодействия форм для диагностики UX.

Лучшие страницы

Аналитика

Рейтинг производительности страницы: посещения, время взаимодействия, показатель отказов, конверсии, взаимодействие поддержки и направление тренда.

Георазведка

Аналитика

Географические отчеты: разбивка по стране / городу с картами, распределение устройств, доля браузера, источники трафика и проникновение на рынок.

Воронка намерения

Аналитика

Отслеживание поведенческих намерений: посещение цен, частота возврата, просмотр документов, поддержка взаимодействий и пользовательские сигналы с вероятностью конверсии.

Журнал событий

Аналитика

Историю событий, которые можно найти: просмотры страниц, пользовательские события, чаты, покупки, отправка форм с полными метаданными и фильтрация.

A/B эксперименты

Аналитика

Сплит-тестирование: создание вариантов, распределение трафика, определение целей, измерение значимости и объявление победителей, все изнутри. OpsIQ.

Ошибки JS

Аналитика

Захват ошибок Frontend: сообщения, следы стека, затронутые браузеры, частота, затронутых страниц и отслеживание тенденций.

продажи

продажи

Панель управления доходами: заказы, продления, возвраты, атрибуция по источнику, эффективность кампании, сравнение периода и анализ тенденций.

Свинец

продажи

Ведущее управление: оценка, атрибуция источника, статус CRM, контактные данные, поведенческие сигналы и маршрутизация трубопровода.

ИИ CRM

CRM (управление связями с клиентами)

Полный CRM: командный центр, контакты, компании, сделки, доска трубопровода, коучинг, прогноз, поиск, последовательности, жизненный цикл, управляющий данными и здоровье.

Билеты

Поддержка

Поддержка входящих сообщений: отделы, приоритеты, отслеживание SLA, сортировка AI, автоответ, внутренние заметки, вложения файлов, слияние и управление статусом.

Чат-бокс

Поддержка

Живые разговоры: ИИ и человеческий чат, передача данных, сотрудничество, история бесед, личность клиента и коллекция CSAT.

Черновики писем

Поддержка

Управление электронной почтой: входящая почта на билеты, состав ответов с помощью ИИ, выбор шаблона и конфигурация почтового ящика.

Конфигурация ИИ

ИИ

Настройка провайдера: выберите Claude/GPT-4o Gemini/Grok, введите API ключ или включите управляемый ИИ, заданную модель, температуру и токены бюджетов на рабочее пространство.

Обучение ИИ

ИИ

Быстрое авторство: подсказки, обращенные к клиенту и администратору, правила эскалации, руководящие принципы тональности, запрещенные темы и конфигурация границ.

История ИИ

ИИ

Аудит разговора: полный журнал запросов / ответов, использование токенов, стоимость за беседу, поставщик, версия модели и результат разрешения.

Искусственный интеллект

ИИ

Анализ шаблонов: общие вопросы, показатели разрешения, частота передачи данных, удовлетворенность по темам и выявление пробелов в обучении.

База знаний

ИИ

Содержание обучения ИИ: статьи, записи FAQ, документы на продукты, знания о разъемах и пользовательские записи. Семантический поиск и поиск ключевых слов для заземления AI.

Коннекторы

Интеграции

Интеграционный центр: установленные разъемы, состояние здоровья, инвентарь действий, управление учетными данными, браузер рынка и конструктор коннекторов.

Подключенные сайты

Настройки

Управление сайтом: отслеживание фрагмента, ключ сайта, конфигурация виджета, настройки домена и изоляция рабочего пространства на месте.

Команда

Настройки

Управление пользователями: приглашать участников, назначать роли (владелец / полный администратор / агент), устанавливать доступ к отделу и управлять разрешениями.

Выступление команды

Настройки

Метрики Ops: время разрешения, рабочая нагрузка, соответствие SLA, CSAT по агенту, повторные ставки открытия, самые загруженные часы и анализ тенденций.

Настройки

Настройки

Конфигурация: бизнес-идентификация, настройка ИИ, отслеживание, безопасность, брендинг, удержание, шаблоны электронной почты, выставление счетов, импорт / экспорт, диагностика и опасная зона.

Лицензия

Настройки

Управление планом: статус лицензии, функции плана, показатели использования, дата обновления и опции обновления / понижения.

Начни здесь

На бортовой езде

Путешествие на борту превращает новую установку в рабочую OpsIQ Рабочее пространство может быть оставлено и возобновлено без потери прогресса.

Экран продукта
На бортуНа борту отображается каждая область установки, ее текущее состояние и следующее действие для завершения.На бортурабочее пространствоPROGRESS60%COMPLETED6СледующийвиджетЖИВОЙ ВИДЕО РАБОТЫЛицензияПроверить лицензию на продукциюСделанопоставщик AIВыберите поставщика и проверьте ключСделаноБрендБизнес-идентификация и тонСделаноСайтДобавить сайт и установить виджетСледующий1COMPLETE BASICSЛицензия, бренд, AI2CONNECT DATAСайт и разъем3VERIFY LAUNCHКоманда, электронная почта, чеки
На борту отображается каждая область установки, ее текущее состояние и следующее действие для завершения.

Рекомендуемая последовательность

  1. Лицензия: Проверить лицензию и подтвердить, что рабочее пространство активно.
  2. Поставщик AI: Выберите поставщика / модель, введите учетные данные и запустите тест подключения. ИИ можно пропустить, если рабочее пространство изначально будет использовать только аналитику и билеты.
  3. Бизнес-идентификация: Установите название, отрасль, описание, тон клиента и детали бренда, используемые виджетом и ИИ.
  4. Коннектор: Включите по меньшей мере одну внешнюю платформу, когда OpsIQ нуждается в заказах, клиентах, билетах, электронной почте или другом контексте платформы.
  5. Сайт и виджет: Создайте сайт/рабочее пространство, скопируйте ключ сайта и проверьте посещение частного браузера в Live Feed.
  6. Команда и маршрутизация: приглашать администраторов/агентов, создавать отделы, устанавливать маршрутизацию электронной почты и подтверждать предпочтения уведомлений.
  7. Проверка Go-live: тестовый чат, билет, синхронизация разъема, cron, исходящая электронная почта, веб-хуки и заголовки безопасности.

В путевых магазинах завершение на рабочее место. Возвращение в Onboarding должно показывать выполненные шаги, а не принуждение к перезапуску.

Начни здесь

Администрирование навигации и разрешений

На боковой панели OpsIQ есть информация о разрешении. Эта карта объясняет, где живет каждая операционная область и почему страница может быть не видна каждому администратору.

Экран продукта
OpsIQ НавигацияГруппы боковой панели OpsIQ по рабочей области; отдельные ссылки появляются только тогда, когда текущая роль может их использовать.OpsIQ Навигациярабочее пространствоGROUPS8ГЛАВАРазрешение, основанноеSEARCHДоступныйЖИВОЙ ВИДЕО РАБОТЫПоддержкаБилеты, электронная почта, CSAT, знанияОткрытьCRM (управление связями с клиентами)Контакты, трубопровод, сделки, поискОткрытьавтоматизацияРабочие процессы, правила, целиОткрытьБезопасность и конфиденциальностьОбзор, аудит, согласие, блокиАдмирал1PICK A GROUPСовместим с боковой панелью2CHECK ROLEСкрытый означает ограниченный3USE PAGE HELPОткройте раздел соответствия
Группы боковой панели OpsIQ по рабочей области; отдельные ссылки появляются только тогда, когда текущая роль может их использовать.
Поддержка

Билеты, командная электронная почта, CSAT, справочный центр и потоки чат-ботов.

CRM (управление связями с клиентами)

Ежедневные поверхности продаж: CRM Home, Command Center, контакты, трубопровод, прогноз, жизненный цикл, поиск, сегменты, таблица лидеров, одобрение сделок, управляющий данными, инструменты роста и поток активности.

автоматизация

Рабочие процессы, основанные на событиях, правила жизненного цикла и цели конверсии.

Маркетинг

Пропаганда, проактивные сообщения, объявления, Студии продвижения, Студия опроса, push-кампании и экскурсии.

Аналитика

Сначала появляется отчет - Analytics Hub, AI-инсайты, продажи, клиенты, лиды, воронки, A / B тесты, повторение сеансов, пользовательские панели инструментов и запланированные отчеты - с необработанным посетителем, сессией, страницей, географией и журналами событий в подразделе Raw Data.

Отдельные страницы

Интеллект сайта, производительность команды и обратная связь находятся вне групп в качестве прямых записей.

Интеграции

Коннекторы, действия и триггеры, почтовые ящики, черновики, настройки электронной почты, входящие конечные точки, исходящие веб-хуки и API ключи.

Безопасность и конфиденциальность

Обзор безопасности, конфиденциальность и соответствие, согласие на использование файлов cookie, аудиторская деятельность, неудавшиеся логины, заблокированные IPs и JavaScript Ошибки.

Настройки

Основы рабочего пространства (общие, командные, сайты, языки), затем разборчивые подразделы: AI Brain (инструкции, конфигурация, оценка, история), CRM Setup (строитель, пользовательские поля, свинцовый балл, здоровье), Data & Health (диагностика, экспорт) и Getting Started (на борту, помощь).

Страницы, которые не могут быть открыты, скрыты от боковой панели. Страницы текущего плана не включают в себя видимость с помощью функции управления. модернизировать Откройте и откройте экран обновления в приложении.

Прямые маршруты все еще проверяются на стороне сервера. Скрытие боковой линии связи не является границей безопасности: каждое защищенное действие должно проходить проверку разрешения и рабочего пространства.

Аналитика

Аналитический центр

Концентратор Analytics предоставляет поддержку, чат, AI, отчеты о посетителях и агентах в одно рабочее пространство с отфильтрованными датами с экспортируемыми результатами.

Экран продукта
Аналитический центрAnalytics Hub показывает диапазон дат, метрические карты и вкладки для поддержки, чата, AI, посетителей и агентов.Аналитический центррабочее пространствоПальчики184AI RESOLVE63%CSAT4.7ЖИВОЙ ВИДЕО РАБОТЫПоддержкаСоздан, закрыт, ожидает, SLAВзятьЧатAI/человеческие результаты и управление временемВзятьИИДоверие, обратная связь, использование токеновВзятьАгентОбъем, скорость и удовлетворенностьВзять1CHOOSE DATESПредустановлено или настроено2CHANGE TABПоддержка агента3EXPORTСкачать CSV
Analytics Hub показывает диапазон дат, метрические карты и вкладки для поддержки, чата, AI, посетителей и агентов.

Фильтры и элементы управления

  • Используйте предустановленную или пользовательскую из/в Затем перезагрузите, чтобы восстановить каждую карту и график за тот же период.
  • Экспорт CSV экспортирует активный аналитический взгляд, а не скриншот.
  • Скапирование рабочего пространства происходит автоматически; изменение сайтов изменяет базовый набор данных.

Что измеряет каждая вкладка

  • Поддержка: созданные/закрытые/отложенные тикеты, первый ответ, разрешение, решение при первом контакте, SLA и приоритеты/подразделения/статус.
  • Чат: Начались сессии, резолюции ИИ, эскалации, отказ от них, обработка времени, сообщения за сессию и AI/human/all CSAT.
  • AI: Средняя уверенность, низкая степень уверенности, точность сортировки, обратная связь, отклонение знаний, использование токенов / кэша и элементы, которые нуждаются в обзоре.
  • Посетитель: тенденции в отношении трафика и вовлеченности за выбранный период.
  • Агент: - рабочая нагрузка на агента, скорость, закрытие и меры удовлетворенности.

Используйте Analytics Hub для межкомандного обзора; используйте специальные страницы « Посетители», «Билеты», CSAT, «История ИИ» и «Специальная производительность команды», когда вам нужно исследование на уровне записи.

Аналитика

Дэшборд

Панель управления - это ваш ежедневный командный центр. Она показывает трафик, продажи, нагрузку поддержки, активность ИИ и показатели конверсии в одном представлении. Откройте ее каждое утро, чтобы понять, что произошло за ночь и что сегодня требует внимания.

приборная панель
Обзор приборной панелиЭкран Обзора, возглавляемый панелью AI OpsIQ Intelligence (с ежедневным кратким описанием, Smart-оповещениями, прогнозом), плитками виджетов KPI и семидневным виджетом трафика, а также контролем макета сброса.Обзоррабочее пространствоOPSIQ ИнтеллектуальностьВыберите анализ и напишите его OpsIQЕжедневный краткийУмные оповещенияпрогнозСброс макетаВизитёры сегодня2,481+12%Ревеню$8.2k+5%Открытые галстуки143 SLAТрафик · последние 7 дней1AI-FIRSTOpsIQ Панель разведки2WIDGETSKPI плитки, которые вы организуете3ВашСброс макета в любое время
Реальный экран обзора: панель OpsIQ Intelligence (выберите анализ и напишите его) над виджетами KPI, которые вы организуете сами.

Карты с приборной панелью объяснили

Живые посетители

Количество людей на вашем сайте прямо сейчас. Это обновляет каждый 15 Посетитель «активен», если он загрузил страницу в пределах активного порога (по умолчанию): 90 секунды.

Уникальные посетители

Сколько разных людей посетили ваш сайт в выбранном диапазоне дат. OpsIQ идентифицирует посетителей по комбинации отпечатков пальцев браузера, файлов cookie и (если есть) аутентифицированной личности.

Новый vs Возвращение

Новые посетители видят ваш сайт впервые. Возвращающиеся посетители были замечены раньше. Высокое соотношение возврата означает, что ваш контент возвращает людей. Очень низкое отношение возврата может означать, что вы не сохраняете интерес.

показатель отказов

Процент посетителей, которые ушли после просмотра только одной страницы. Скорость отказов выше 70% на целевых страницах обычно означает, что страница не соответствует ожиданиям посетителей, неправильному контенту, медленной загрузке или плохому мобильному опыту.

Среднее время на странице

Как долго посетители проводят на каждой странице в среднем. Очень короткое время (под 10 секунд) на страницах контента предполагает, что контент не привлекает. Очень длительное время на страницами оформления заказа может указывать на путаницу.

Угрозы блокируются

IP адресов, которые OpsIQ идентифицируется как потенциально вредоносный на основе оценки угроз, попыток грубой силы или ручных блоков IPs список.

Продажи сегодня / на этой неделе / в этом месяце

Поступления от связанных источников продаж (в долл. США)Shopify, WooCommerce, Stripe и т. д.). Если продажи показывают нуль, проверьте, что ваш коннектор платформы подключен и синхронизирован.

Трендовая диаграмма

График линий, показывающий количество посетителей в выбранном диапазоне дат. Ищите закономерности: пики трафика (кампании, упоминания в прессе), провалы (выходные, праздники) и устойчивые тенденции.

Источники

Откуда приходят ваши посетители: прямые, Google, социальные сети, кампании по электронной почте, реферальные сайты. Используйте это для понимания того, какие маркетинговые каналы работают.

Лучшие браузеры

Chrome, Safari, Firefox, Edge и другие. Если браузер имеет необычно высокий показатель отказов, у вас может быть CSS или JavaScript Проблема совместимости.

Почасовая тепловая карта

Сетка, показывающая активность посетителей по часам дня и дня недели. Используйте это, чтобы решить, когда планировать смены поддержки, когда отправлять объявления и когда проводить акции.

Недавние посетители

Последние несколько посетителей со страной, страницей, устройством и источником полезны для быстрой проверки мест во время кампаний.

Использование фильтра диапазона дат

Нажмите на датчик в правом верхнем углу панели инструментов. Предустановки: Сегодня, Вчера, Последнее 7 Дни, последние 30 Дни, Этот месяц, Прошлый месяц, Настройка. Все карточки приборной панели и диаграммы обновляются при изменении диапазона. Диапазон дат находится в настроенном часовом поясе (установлено в настройках).

Проработанные примеры

Расследование о росте отказов

Сценарий:
Ваш показатель отказов подскочил от 45% то 78% Что случилось на этой неделе?
Что делать:

Проверить: (1) Изменилась ли конкретная целевая страница? Перейдите на верхние страницы и отсортируйте по показателю отказов. (2) Кампания отправила трафик на неправильную страницу? Проверь Топ-Источники для новых рефереров. (3) Сайт сломался на мобильном? Проверь сбой браузера на показатель отказов мобильных устройств. (4) Проверьте счетчик угроз и данные посетителей на подозрительные шаблоны.

Нулевой посетитель на приборной панели

Сценарий:
Панель приборов показывает 0 живых посетителей, даже если ваш сайт получает трафик.
Что делать:

Проверить: (1) Устанавливается виджет отслеживания? Просмотр исходного кода вашего сайта и поиск OpsIQ сценарий. (2) Сравните ключ сайта в сценарии с ключом на подключенных сайтах. (3) Является ли CDN или кэш-память устаревшей страницей без сценария? (4) Блокиратор рекламы или заголовок CSP блокирует сценарий? Проверьте консоль браузера на заблокированные запросы.

Чтение почасовой тепловой карты

Сценарий:
Ваша тепловая карта показывает тяжелую активность в период с 10 утра до 2 вечера в будние дни, но ничего по выходным.
Что делать:

Это шаблон трафика B2B. Ваши посетители работают профессионалами, просматривая в рабочее время. Последствия: (1) Расписание поддержки персонала в рабочие часы будни. (2) Отправляйте кампании по электронной почте во вторник-четверг утром. (3) Окна для обслуживания в выходные дни безопасны. (4) Подумайте о том, чтобы предлагать живой чат только в часы пик.

Всплеск трафика из неизвестного источника

Сценарий:
Вы видите внезапный всплеск посетителей 500 в течение одного часа от неизвестного реферера.
Что делать:

Перейдите в Посетители и фильтруйте по временному окну. Проверка: (1) Реальные посетители или боты? Посмотрите на продолжительность сессии, просмотренные страницы и разнообразие браузеров. (2) Если реальны, то на какой странице они приземляются? (3) Проверить реферера URL. Кто-то мог сослаться на вас из Reddit, Hacker News или популярного блога. (4) Если это трафик ботов, проверьте Угрозы и рассмотрите возможность блокировки IP диапазон.

Почему количество посетителей отличается от Google Analytics?+

OpsIQ Он использует отпечатки пальцев браузера и файлы cookie, в то время как GA использует другую модель файлов cookie. Фильтрация ботов, скорость блокировки рекламы и порядок загрузки скрипта также могут вызывать различия. 10-20% Разница нормальная.

Могу ли я встроить приборную панель в другой инструмент?+

Панель приборов предназначена для OpsIQ для внешней отчетности, используйте REST API Вытаскивать аналитические данные и отображать их на собственной панели инструментов или BI.

Что означает «угроза»?+

Это считается IP адресов, которые OpsIQ помечены или заблокированы на основе оценки угрозы, повторных неудавшихся логинов или ручных блоков. Нажмите на счетчик, чтобы увидеть детали и управлять блоками.

Аналитика

Журнал посетителей

Журнал посетителей показывает каждое посещение отслеживаемых вами веб-сайтов. Каждая строка - это загрузка одной страницы от одного посетителя. Используйте его для изучения поведения отдельных посетителей, поиска трафика кампании и диагностики проблем с отслеживанием.

Журнал посетителей
Журнал посетителейСтол для посетителей с фильтрующей панелью (дата, поиск)IP/email/city, источник, устройство) и столбцы для IP/email, местоположение, источник, устройство и время с отмеченным рядом угроз.Журнал посетителейyoursite.com7 днейПоиск IP, электронная почта, город...Источник ▾Устройство ▾IP / ЭЛЕКТРОННАЯ ПОЧТАМестонахождениеИсточникРЕШЕНИЕкогда[email protected]США · Нью-Йоркgoogleрабочий стол2 мкм41.62.10.4Великобритания · ЛондонdirectМобильный6 мкм[email protected]DE · Берлинutm:рекламаМобильный14 мкм203.0.113.9NG · Лагосreferralрабочий столthreat1–25 из 3,402Сессия →1FILTERДата · поиск · источник · устройство2REAL COLUMNSIP/email · местоположение · устройство · угроза3DRILL INОткрыть полную сессию
Реальный журнал посетителей: фильтр по дате, поиску и устройству, затем прочитайте каждое посещение по IP/email, местоположению, источнику, устройству и времени, угрозы отмечены красным цветом.

Что показывает каждый ряд

IP адрес

Посетитель IP адрес. Анонимный, если IP Анонимизация включена в настройках. Нажмите, чтобы увидеть все посещения из этого IP.

Страна и город

Обнаружено из IP Адрес с использованием данных GeoIP MaxMind GeoLite2 База данных или Cloudflare Геозаголовки. Показывает "Неизвестный", если GeoIP не настроен.

Страница URL

Страница, загруженная посетителем. Нажмите для просмотра полного URL. Длинный URLs обрезаются в виде таблицы.

Реферер

Где посетитель пришел до посадки на ваш сайт. "Прямой" означает отсутствие реферера (закладки, введённые URLs, некоторые ссылки приложения).

Устройство и браузер

Тип устройства посетителя (настольный компьютер, мобильный телефон, планшет) и браузер (Chrome, Safari, Firefox и т. Д.), Парсированный из заголовка User-Agent.

Дата и время

Когда страница была загружена, в настроенном часовом поясе.

Идентификационные данные клиента

Если посетитель идентифицирован (через токен идентификации или логин), его имя или адрес электронной почты появляется.

Фильтры

Диапазон дат

По умолчанию: последние 7 дней.

Поиск

Поиск по IP адрес, страница URL, реферер, страна или электронная почта клиента.

Источник

Фильтр по источнику трафика: прямой, органический, социальный, реферальный, платный, электронная почта.

Устройство

Фильтр с помощью настольных компьютеров, мобильных устройств или планшетов.

Только новый

Показать только первый раз посетителей, которые никогда не видели раньше.

Проработанные примеры

Найти посетителей из конкретной кампании

Сценарий:
Вы запустили кампанию Google Ads с параметром UTM utm_source=google&utm_medium=cpc&utn_campaign=summer-sale. Как вы найдете этих посетителей?
Что делать:

В Журнале посетителей используйте поле Поиск и введите «лето-продажа».URLs и страница URLs, поэтому параметры UTM будут совпадать. Вы также можете фильтровать по источнику = Платный для дальнейшего сужения.

Найдите клиента, который сообщил о проблеме

Сценарий:
Клиент написал по электронной почте, что "ваша кассовая страница была взломана вчера около 3 часов вечера". Как вы находите их сеанс?
Что делать:

Поиск по их адресу электронной почты в журнале посетителей. Если они были зарегистрированы, появится их личность. Установите диапазон дат до вчерашнего дня. Ищите посещения для проверки страниц около 3 часов вечера. Нажмите на их сеанс, чтобы увидеть полный поток страницы и любые ошибки JavaScript.

Обнаружить петлевого нападающего или скребок

Сценарий:
Ты замечаешь IP адрес имеет 500 Посещение за один час, все на одной странице.
Что делать:

Это, скорее всего, бот, скрепер или сломанный скрипт. Перейдите в Журнал посещений и найдите это IP. Проверка: (1) Все ли посещения на одну и ту же страницу? (2) Является ли пользовательский агент известным ботом? (3) Продолжительность сессии всегда 0 Если вы подтвердили, что это бот, перейдите в Безопасность и заблокируйте IP.

Visitor log vs Sessions vs Live feed (недоступная ссылка)

Журнал посетителей

Сырая загрузка страниц. Один ряд на просмотр страницы. Лучше всего: исследование конкретных страниц, поиск трафика из определенных источников, диагностика проблем с отслеживанием.

Сессии

Группа просмотров страниц в путешествиях. Один ряд за сеанс посещения. Лучше всего для: понимания потока пользователей, измерения продолжительности сессии, определения путей конверсии.

Живые корма

Активность в режиме реального времени. Показывает посетителей, находящихся на вашем сайте. Лучше всего: мониторинг проводимых кампаний, выявление высоконамеренных посетителей, просмотр возможностей поддержки.

Почему я вижу свои визиты в журнале?+

OpsIQ отслеживает все посещения по умолчанию. Чтобы исключить собственный трафик, добавьте свой IP адрес исключенного IPs Список в настройках > Отслеживание.

Почему туристы показывают «неизвестную» страну?+

Для поиска по GeoIP требуется либо Cloudflare геозаголовки (автоматически, если используется)Cloudflare) или файл базы данных MaxMind GeoLite2. Проверить настройки > GeoIP Path, чтобы обеспечить наличие и читаемость файла базы данных.

Как долго хранятся данные посетителей?+

Данные о посетителях хранятся в течение периода хранения, настроенного в настройках (по умолчанию: 90 дней). После этого старые записи автоматически очищаются за счет работы по удержанию крон.

Аналитика

Сессии

Сеансы группируют несколько просмотров страниц от одного человека в одно путешествие. В то время как журнал посетителей показывает отдельные загрузки страницы, сеансы показывают вам, как люди перемещаются по вашему сайту с посадки на выход.

Сессии
СессииТаблица журнала сеансов с IP, страной, устройством, источником, продолжительностью и столбцами страниц, а также отмеченной строкой угроз.Сессииyoursite.comСтрана (NG)Сессионный журналIP(S) (С)СтранаРЕШЕНИЕИсточникПродолжительностьГЛАВА41.62.10.4Великобританиярабочий столgoogle3m 12s6102.89.6.2НГМобильныйdirect1m 05s388.21.4.9ДЕрабочий столutm:рекламаСемь метров 48s11203.0.113.9СШАМобильныйreferral0m 42s21SESSION LOGГрупповые поездки2COLUMNSСтрана · устройство · источник · продолжительность3THREATОпасные сессии отмечены
Реальный журнал сеансов: каждое путешествие посетителя в строке (IP, страна, устройство, источник, продолжительность и страницы) с рискованными сессиями помечены красным.

Как работают сессии

Сеанс начинается, когда посетитель загружает свою первую страницу. Он продолжается по мере перехода на большее количество страниц. Сессия заканчивается, когда пользователь неактивен в течение периода тайм-аута сессии (по умолчанию: 30 мин) или закрывает свой браузер. Тот же человек, возвращающийся после таймауна, создает новую сессию.

Что показывает каждый сеанс

Первая страница

Целевая страница, на которой посетитель зашел на ваш сайт. Это говорит вам, какой контент привлекает людей.

Последняя страница

Если страница выхода часто является ценовой страницей, посетители могут сравнивать вас с конкурентами.

Количество страниц

Сколько страниц посетитель просмотрел в этом сеансе. Больше страниц обычно означает больше вовлеченности, но это также может означать потерю посетителя.

Продолжительность

Общее время от загрузки первой страницы до последней активности. Сессии с 0 секундами - это отказы (однократный просмотр страницы, никакого дальнейшего взаимодействия).

Источник

Источник трафика для этой сессии (прямой, Google, социальный, реферальный и т. д.).

Страна

Обнаружена страна по адресу посетителя IP.

отпрыск

Уход посетителя после просмотра только одной страницы. Отскочившие сессии имеют красный индикатор.

преобразование

Завершил ли посетитель отслеживаемое конверсионное событие (покупка, регистрация, представление формы) в течение этой сессии.

Фильтры

Поиск

Поиск по IP Электронная почта, страница URL, или реферер в рамках сеансов.

Тип

Фильтр для новых посетителей (первая сессия) или возвращающихся посетителей.

Источник

Фильтр по источнику трафика.

Страна

Фильтр по странам для просмотра сессий из определенного региона.

Угрозы/обнаженные

Фильтр, показывающий только отскочившие сессии или сеансы, отмеченные как угрозы.

Проработанные примеры

Профиль высокоценного клиента

Сценарий:
Клиент только что совершил крупную покупку, и вы хотите понять их путь перед покупкой.
Что делать:

Ищите их электронную почту в Сессиях. Посмотрите на все их сессии: (1) Сколько раз они посещали магазин перед покупкой? (2) Какие страницы они просматривали? (3) Они пользовались чатом или открывали билет? (4) Каково было общее время от первого визита к покупке? Это говорит вам о типичном пути покупки для клиентов с высокой стоимостью.

Обнаружить логин из нового места

Сценарий:
Клиент обычно заходит из Нигерии, но вы видите сессию из России.
Что делать:

Сравните страну недавних сессий. Если сессия внезапно появляется из необычной страны, это может быть законное путешествие или скомпрометированная учетная запись: (1) Была ли неудачная попытка входа в систему до успешной? (2) Сделал это IP изменить в течение той же сессии? Отметить его для проверки, если подозрительно.

В чем разница между сеансом и посетителем?+

Посетитель - это человек (или браузер). Сеанс - это одно посещение от этого человека. Один и тот же посетитель может иметь много сеансов в течение времени. Сессии истекают после периода тайм-аута.

Как OpsIQ идентифицирует возвращающихся посетителей?+

OpsIQ использует комбинацию файлов cookie, отпечатков пальцев браузера и аутентифицированных токенов идентификации. Если посетитель очищает свои файлы cookie и не входит в систему, он появится в качестве нового посетителя.

Аналитика

Живые корма

Live Feed показывает посетителей, находящихся на вашем сайте в режиме реального времени. Он автоматически обновляет каждую 15 секунды (настраиваемый). Используйте его во время кампаний, запусков продуктов и напряженных периодов поддержки, чтобы увидеть, что происходит прямо сейчас.

Живые корма
Живые кормаПоток активности в реальном времени, показывающий живой подсчет посетителей онлайн и поток недавних действий посетителей по странам.Живые кормаyoursite.com37Посетители онлайн сейчасЖивая деятельностьтеперьСША · просмотр /pricing2sВеликобритания: Начало чата5sDE · Добавлено в корзину9sCA · Завершенная регистрация1RIGHT NOWУзнать кто на месте2AUTO-REFRESHОбновление 15s3АКТПрыгайте в живой чат
Посмотрите, кто находится на вашем сайте в эту секунду и что они делают, автоматически освежая каждый сайт. 15 секунды.

Как это работает

Live Feed проводит опросы вашего сервера через настроенный интервал обновления. Каждая строка показывает посетителя, находящегося в настоящее время на вашем сайте: его текущую страницу, страну, устройство, источник, продолжительность сеанса и количество страниц. Зеленые выделения указывают на новую активность с момента последнего обновления. Нажмите любую строку посетителей, чтобы увидеть их полную информацию о сессии.

Настройки

Обновить интервал

Как часто обновляются прямые трансляции. 15 - Меньшие значения (см.5-10s) давать более быстрые обновления, но использовать больше ресурсов сервера.30-60s На сервере проще, но в реальном времени меньше.

Активный порог

Как долго посетитель считается «активным» после последней загрузки страницы. 90 Если посетитель загружает страницу, а затем читает ее 2 минуты без щелчка, они исчезают из живого корма после порога.

Кнопка паузы

Нажмите Пауза, чтобы остановить автоматическое обновление. Полезно, когда вы хотите прочитать детали без обновления списка. Нажмите Резюме для перезапуска.

Проработанные примеры

Найдите горячую линию во время кампании

Сценарий:
Вы запускаете продукт. Посетитель просто просмотрел вашу домашнюю страницу, затем функции, затем цены и теперь на странице оформления заказа.
Что делать:

Это высоконамеренное поведение: (1) Нажмите на посетителя, чтобы увидеть его сеанс. (2) Если они запустят чат, у ИИ будет полный контекст путешествия. (3) Если они уходят, не покупая, то становятся лидами на странице «Лидс». (4) Подумайте о создании упреждающего правила, чтобы показать сообщение чата, когда посетители достигают кассы.

Слишком много посетителей из одного и того же IP

Сценарий:
Видишь? 20 Посетители из той же IP Адрес, все на разных страницах.
Что делать:

Это может быть: (1) Проверьте, выглядят ли посещения как реальные люди (разные страницы, разумная продолжительность сеанса). (2) Бот или скребок. Проверьте, если сеансы очень короткие (0-1 секунды) или систематическое нажатие страниц. (3) Если вы проводите автоматизированные тесты, исключите IP От отслеживания.

Почему живые корма показывают 0 Посетители, когда на моем сайте есть трафик?+

Проверить: (1) Устанавливается ли скрипт виджета на вашем сайте? (2) Является ли сайт правильным? (3) Пройден ли активный порог? (4) Используют ли посетители агрессивные блокировщики рекламы, которые блокируют скрипт отслеживания?

Могу ли я фильтровать живую передачу по стране или устройству?+

В режиме реального времени транслируются все активные посетители. Для фильтрованных просмотров используйте страницы журнала посетителей или сеансов с их параметрами фильтра. Прямая трансляция намеренно проста для мониторинга в реальном времени.

Аналитика

Лучшие страницы

Топ-страницы показывают, какие страницы на вашем сайте получают наибольший трафик. Он ранжирует страницы по посещениям, вовлечению, конверсиям и поддержке. Используйте его для определения вашего лучшего контента, поиска неэффективных страниц и обнаружения страниц, которые генерируют вопросы поддержки.

Лучшие страницы
Лучшие страницыСписок наиболее посещаемых страниц с горизонтальными полосами посещения и счетами.Лучшие страницыyoursite.comСамые посещаемые страницы/pricing3,402/2,910/docs1,740/blog/seo-guide980/signup6401RANKEDСамые посещаемые страницы2SIGNALSПосещения и конверсии3FINDСтраницы, которые водят билеты
Ваши страницы ранжируются по трафику и вовлеченности, поэтому вы можете найти лучший контент и страницы, которые генерируют поддержку.

Что показывает каждая страница

Страница URL

Полный путь URL. Подобные страницы (например, варианты продукта) группируются при включенной группировке.

Виды

Общее количество раз эта страница была загружена в выбранном диапазоне дат.

Уникальные посетители

Сколько разных людей просмотрели эту страницу (человек, просматривающий одну и ту же страницу, имеет в два раза большее значение). 1 Уникальный.

показатель отказов

Процент посетителей, покинувших ваш сайт после просмотра только этой страницы. Высокий отскок на целевых страницах = проблема. Хороший отскочек на страницах "спасибо" = нормально.

Среднее время

Сколько времени посетители тратят на эту страницу в среднем. Очень коротко = не читают. Очень долго на странице формы = путаница.

Чат начинается

Сколько разговоров в чате было начато с этой страницы. Высокий чат начинается на странице продукта означает, что описание продукта может быть неясным.

Билеты поддержки

Сколько билетов поддержки было создано посетителями, которые были на этой странице. Высокое количество билетов = потенциальная проблема UX или контента.

Проработанные примеры

Найдите страницы, которые вызывают вопросы поддержки

Сценарий:
Ваша служба поддержки продолжает задавать вопросы о доставке.
Что делать:

Сортировать Верхние страницы по "Поддержка билетов" или "Чат стартует" спуска. Ищите товарные или транспортные страницы с высоким счетом. Страница с наибольшим количеством вопросов поддержки, вероятно, имеет неясную информацию. Исправьте содержимое страницы и проследите, уменьшаются ли вопросы поддержки.

Найти страницы с высоким уровнем выхода

Сценарий:
Вы хотите знать, где люди чаще всего покидают ваш сайт.
Что делать:

Игнорируйте страницы, которые естественно выходные точки (страницы благодарности, подтверждения). Сфокусировать на страницах, которые должны удерживать посетителей вовлечены: продуктов страницы цен, функций. Эти нуждаются в лучшем призывы к действию или более ясный контент.

Почему страница показывает 0 просмотров, даже если я знаю, что она получает трафик?+

Проверить: (1) Устанавливается ли виджет отслеживания на этой конкретной странице? Одностраничные приложения могут не отображать просмотры страниц при изменении маршрута. (2) Исключается ли страница в настройках отслеживания? (3) CDN обслуживает кэшированную версию без скрипта отслеживания?

Аналитика

Георазведка

Geo Intelligence показывает, откуда ваши посетители приезжают из страны, города, устройства и источника. Используйте его для понимания ваших географических рынков, принятия решения о языковой поддержке, планирования регионального маркетинга и обнаружения подозрительных моделей трафика.

Георгия
ГеоразведкаКарта мест для посетителей рядом с рейтингом бара в каждой стране.Георазведкаyoursite.comПосетители по местоположениюСШАВеликобританияДЕКАНГ1MARKETSСтрана, город, устройство2PLANЯзык и регионы3WATCHВыявить нечетный трафик
Где ваши посетители приезжают из (по стране, городу и устройству) на рынки размера и отмечают необычный трафик.

Что ты видишь

Top Страны Бар-чарты

Страны, в которых больше всего посетителей. Нажмите на страну, чтобы свернуть данные на уровне города.

Загородный пончик

Визуальная разбивка трафика по странам. Зависимость в процентах.

Полный список стран

Каждая страна с посетителями в выбранный период, показывающая количество посетителей, количество сеансов, показатель отказов и коэффициент конверсии.

Городская буровая

Нажмите на страну, чтобы увидеть, какие города в этой стране имеют наибольшее количество посетителей.

Как работает GeoIP-детектирование

OpsIQ Выявляет местоположение посетителя двумя способами:1) Cloudflare Если ваш сайт отстает Cloudflare Обнаружение страны является автоматическим и точным.2) База данных MaxMind GeoLite2. Загрузить бесплатную базу данных и настроить путь в Настройках. Обнаружение на уровне города требует базы данных GeoLit2-City, а не только базы данных Country.

VPN и прокси-трафик

Посетители, использующие VPN, по-видимому, исходят из местоположения VPN-сервера, а не их реального местоположения. OpsIQ Не можете и не должны пытаться обойти VPN. Если вы видите необычные шаблоны стран, подумайте об этом. 10-20% Посетители могут использовать VPN.

Проработанные примеры

Неожиданный трафик по стране

Сценарий:
Вы управляете бизнесом только в США, но 30% трафика из Индии.
Что делать:

Проверить: (1) Посмотрите на продолжительность сеанса и просмотренные страницы. Очень короткие сессии с высоким отскоком = вероятные боты. (2) Они находят вас через Google? Проверьте реферера. (3) Могут ли они стать потенциальными клиентами на новом рынке? Если трафик является подлинным и вовлеченным, рассмотрите возможность добавления цен или контента для Индии.

Решаем вопрос о языковой поддержке

Сценарий:
Вы должны знать, стоит ли переводить ваш сайт на испанский.
Что делать:

Посмотрите на страницу Geo Intelligence. Если испаноязычные страны (Испания, Мексика, Колумбия, Аргентина и т.д.) вместе представляют больше, чем другие. 10% Кроме того, проверьте: конвертируют ли посетители из этих стран по аналогичным ставкам на ваш основной рынок?

Планирование смены региональной поддержки

Сценарий:
Вам нужно выбрать часы поддержки для разных часовых поясов.
Что делать:

Используйте почасовую тепловую карту (на приборной панели) в сочетании с Geo Intelligence. 40% Ваш трафик из Европы и 35% Из США нужно покрытие для обоих часовых поясов. Тепловая карта показывает, когда именно каждый регион наиболее активен.

Страна с визитами, но без заказов

Сценарий:
В этом месяце в Германии будут представлены посетители 500, но продажи не будут расти.
Что делать:

расследовать: (1) Может быть, ваши цены неконкурентоспособны для этого рынка? (2) Вы отправляете в Германию? Проверьте, упоминает ли ваша страница о Германии. (3) Несоответствие валюты вызывает заброшенные кассы? (4) Являются ли эти посетители из одного источника, который может быть малонамеренным трафиком?

Почему туристы показывают «неизвестную» страну?+

GeoIP не настроен. либо установите Cloudflare (который автоматически добавляет геозаголовки), либо загрузите базу данных MaxMind GeoLite2 и установите путь файла в настройках > GeoIP Path.

Можно ли блокировать трафик из разных стран?+

OpsIQ Не блокируйте по стране. используйте свой веб-сервер или Cloudflare Правила брандмауэра для блокировки на основе страны.OpsIQ Он фокусируется на видимости, а не на контроле доступа в сети.

Аналитика

Воронка намерения

Воронка намерения классифицирует сеансы посетителей по тому, что они пытаются сделать: просматривать, исследовать, сравнивать, покупать, получать поддержку или уходить. Используйте его, чтобы понять баланс намерений на вашем сайте и определить, где посетители отправляются.

Воронка намерения
Воронка намеренияВоронка от Browse к Research, чтобы сравнить с Buy с подсчетами, плюс поддержка и оставление чипов.Воронка намеренияyoursite.comПросмотров: 8,200Исследование: 4,100Сравнить · 1,650Купить 520Поддержка 6%Оставить 11%1CLASSIFYЧего хотят посетители2STAGESБраузер купить3ФиксацияНайдите выпадающий
Сеансы классифицируются по намерениям (просмотр, исследование, сравнение, покупка), поэтому вы можете точно увидеть, куда люди отправляются.

Преднамеренные категории

просмотр

Посетители небрежно оглядываются вокруг. Короткие сеансы, несколько страниц, никакой конкретной цели не обнаружено.

исследование

Посетители читают страницы продуктов / функций, документы или контент блога. Больше времени на странице, несколько страниц контента.

сравнивать

Посетители просматривают цены, сравнение планов или таблицы функций. Часто возвращающиеся посетители.

покупать

Посетители на страницах оформления заказа, корзины или регистрации. Высокие намерения. Это ваши возможности конверсии.

Поиск поддержки

Посетители на страницах справки, контактных страницах или в чате.

прыгать

Посетители, которые ушли после одной страницы.

Как читать воронку

Толкование вашей воронки

Сценарий:
1,000 Посетители ознакомились с ценами. 270 Открытый чат. 92 Начала выписку. 64 Оплачено. 18 Открыты билеты поддержки.
Что делать:

Ценовая страница достаточно сильна, чтобы создать намерение. Чат важен на пути покупки: 27% Цены посетители взаимодействуют с чатом перед покупкой. Билеты поддержки после оформления заказа могут указывать на активацию или путаницу в оплате: (1) Убедитесь, что чат AI отвечает на вопросы о ценах. (2) Исследуйте 18 Билеты поддержки после кассового сбора по общим вопросам.

Фильтры времени

Используйте фильтр диапазона дат для сравнения моделей намерений в разные периоды. Например, сравните неделю Черной пятницы с обычной неделей. Вы должны увидеть всплеск намерения «Покупка» и, возможно, «Поиск поддержки», если ваши акции создали путаницу.

Как OpsIQ классифицирует намерение?+

OpsIQ Смотреть на страницу URLs, поведение сеанса и временные модели. Ценовые страницы сигнальное сравнение намерения. Страницы проверки сигнал покупатель намерение. Помощь/контактные страницы сигнальный поддержи намерения. Классификация основана на эвристике, а не на ИИ-приводе.

Могу ли я настроить категории намерений?+

В настоящее время нет. Категории встроены на основе общих моделей поведения в Интернете. Классификация индивидуальных намерений находится в дорожной карте.

Аналитика

Воронки, удержание и пути

Создавайте пользовательские поездки со страниц или шагов события, измеряйте когортное удержание и найдите пути, которые посетители чаще всего проходят через сайт.

Экран продукта
ВоронкиНастраиваемая воронка отображает каждую страницу / шаг события, оставшихся посетителей и процент конверсии.Воронкирабочее пространствоSTEPS4CONVERSION28.4%WINDOW72hЖИВОЙ ВИДЕО РАБОТЫЦены просматриваются1,420 Посетители100%План выбранный780 Посетители54.9%Начался контроль530 Посетители37.3%Заказ завершен403 Посетители28.4%1DEFINEВыбрать 2–8 шаг2Извините.Установить окно конвертации3повышатьНайдите самую большую каплю
Настраиваемая воронка отображает каждую страницу / шаг события, оставшихся посетителей и процент конверсии.

Воронки

Создайте именуемый воронку с 2 то 8 Установите окно преобразования за несколько часов; посетитель учитывает только то, когда упорядоченные шаги происходят внутри этого окна. Используйте перепад между шагами, чтобы выбрать, где проверить повторение, ошибки, скорость страницы или обмен сообщениями.

Сохранение

Группа удержания посетителей в еженедельных когортах и показывает, сколько возвратов. 6, 8 или 12 Недельный горизонт. Сохраняйте определение когорты стабильным при сравнении релизов или кампаний.

Пути

Пути перечисляют наиболее распространенные последовательности страниц. Выберите длину пути из 2 то 5 страницы, чтобы сохранить результат читаемым. Используйте его для поиска неожиданных обходов, общих выходов и контента, который неоднократно предшествует конверсии.

Пользовательские воронки — это аналитические определения, а не автоматизация. Чтобы реагировать на завершенный шаг, создайте цель преобразования, сегмент, триггер или рабочий процесс.

Аналитика

Повтор сеанса

Session Replay позволяет вам посмотреть хронологию того, что посетитель сделал на вашем сайте: какие элементы он щелкнул, как они прокручивали, где они зависали и что они напечатали (с чувствительными полями в маске). Используйте его для диагностики проблем UX, проверки отчетов об ошибках и понимания путаницы клиентов.

Повтор сеанса
Повтор сеансаИгрок повторного воспроизведения, показывающий порт просмотра страницы с курсором, панелью информации о сеансе и скруббером временной шкалы.Повтор сеансаyoursite.comКупить сейчасСессияПродолжительность 3 м 12s14 кликиСША · Рабочий столChrome 1241WATCHКлики, прокрутка, тип2MASKEDСкрытые чувствительные поля3DIAGNOSEПроверка отчетов о багах
Повторите то, что сделал посетитель: щелчки, свитки, набор текста (чувствительные поля в маске), на скруббере временной шкалы.

Поиск правильной сессии

На странице Сеансы ищите сессии с сообщенными проблемами, высоким количеством страниц без конверсии или сеансы от клиентов, которые подали билеты на поддержку. Нажмите значок повтора, чтобы открыть просмотр временной шкалы.

Что показывает игра

график

Горизонтальная полоса, показывающая события во времени. Нажмите в любом месте на временной шкале, чтобы перейти к этому моменту.

Навигация по страницам

Каждая загрузка страницы отображается как сегмент на временной шкале. Вы можете увидеть точный путь, который прошел посетитель.

Кликните

События клика отображаются в виде точек на временной шкале и как основные моменты на реконструкции страницы.

прокрутка

Глубина прокрутки отслеживается, чтобы вы могли видеть, как далеко внизу читает посетитель.

Форма взаимодействия

Записывается полевая фокусировка и события типизации. Ввод текста в пароле и чувствительных полях маскируется по умолчанию.

Конфиденциальность и маскировка

По умолчанию переигровка сеанса маскирует поля чувствительных форм. Поля паролей, вводы кредитных карт и поля, помеченные файлом data-opsiq-mask, никогда не записываются. Вы можете настроить дополнительные правила маскировки в Настройках > Отслеживание. Если этого требует ваша политика соответствия, вы можете полностью отключить повторную игру.

Диагностика сломанного кассового аппарата

Сценарий:
Клиент говорит: «Я пытался купить, но кнопка ничего не сделала».
Что делать:

Найдите их сессию на странице Сеансов (поиск по электронной почте). Откройте повтор. Посмотрите сегмент страницы оформления заказа. Ищите: (1) Они нажали правильную кнопку? (2) Сделал JavaScript Ошибка возникает? (Проверьте страницу ошибок JS для этого времени.) (3) Перезагрузили страницу или показали сообщение об ошибке? (4) Требуемое поле было пустым? Повторение показывает, что именно произошло.

Сколько памяти использует повторный сеанс?+

Данные повторного воспроизведения растут с увеличением объема трафика. Используйте настройки удержания для автоматической очистки старых данных повторного просмотра. Для сайтов с высоким трафиком рассмотрите более короткий период удержаний повторного использования (например, 30 дней) для управления хранением.

Могут ли посетители отказаться от повторного просмотра?+

Если в настройках включена функция «Уважать не отслеживать», посетители с заголовками DNT не записываются. Также можно исключить из повторения конкретных страниц в настройками отслеживания.

Аналитика

Журнал событий

Журнал событий показывает каждое событие, которое OpsIQ записал: просмотры страниц, клики, запуск чата, создание билетов, продажи и пользовательские события. Используйте его для отладки интеграции, проверки доставки веб-хуков и понимания последовательности действий.

Журнал событий
Журнал событийХронологический журнал событий с цветными значками типа: просмотр страниц, чат, продажа, веб-хук и пользовательский.Журнал событийyoursite.compageviewСША · /pricing12:04:01chat.startВеликобритания · Открыт виджет12:04:09продажа$49.00 · Порядок #104212:05:22веб-хукpayment.succeeded12:05:23customdemo_booked12:06:101EVERYTHINGКаждое записанное событие2DEBUGПроверить доставку web-cook3ORDERСмотрите точную последовательность
График времени для всего OpsIQ записи (просмотры страниц, чаты, продажи, веб-хуки, пользовательские события) для отладки и аудита.

Встроенные события (автоматические)

⚠️
Это events-log имена — какие OpsIQ записи на графике посетителей для аналитики, отладки и аудита. исходящий web-cook события, на которые вы подписываетесь. Если вы создаете приемник веб-хуков, используйте список в разделе «Webhooks» или позвоните webhooks.events.listПодписка на имя из этой таблицы ничего не даст.

Каждая строка показывает имя, которое вы отправлять Каноническое название: OpsIQ магазины Оба записаны: необработанное имя, которое вы отправили, и каноническое, на которое оно отображается, поэтому отчет, написанный против канонической таксономии, продолжает работать в зависимости от того, какой псевдоним используется трекер.

pageview page.viewed

Загрузка отслеживаемой страницы. Включает URL, заголовок, реферер и временную метку. page_view и view Они принимаются как одно и то же.

chat_open support.chat_opened

Посетитель открывает виджет чата.

chat_send support.chat_message_sent

Посетитель отправляет сообщение в чате. Сторона ответа хранится как support.chat_message_received.

ticket_open support.ticket_created

Создается билет поддержки. ticket_create принимается как одно и то же; ответы и закрытие хранятся в виде support.ticket_replied и support.ticket_closed.

form_submit form.submitted

Отслеженная форма представлена. submit принимается как одно и то же.

purchase commerce.purchase_completed

Покупка завершается. purchase_successи псевдонимы продаж order.completed, sale.completed, payment.completed и invoice.paidВсе они принимаются с подключенной платформы.

проверка commerce.checkout_started

Начинается проверка. cart_view, checkout_view, checkout_intent, checkout_abandon, add_to_cart.

login_success identity.signed_in

Посетитель вписывается. login_failedхранимые как identity.login_failed; локаут является login_lockout_created.

подписывать conversion.signup

Посетитель завершает регистрацию. leadхранимые как conversion.lead.

js_error error.js

Ошибка JavaScript регистрируется на отслеживаемой странице.

💡
Имя события, которое вы отправляете, не является одним из этих псевдонимов, все еще записывается дословно — ничего не сбрасывается. Он просто не имеет канонического отображения, поэтому он не будет вдаваться в отчеты на основе таксономии.

Пользовательские события

Вы можете отправлять пользовательские события с вашего сайта или сервера на OpsIQ. Пользовательские события полезны для отслеживания действий, характерных для вашего бизнеса: клики кнопок, использование функций, воспроизведение видео, загрузка и т. Д.

JavaScript · пользовательское событие из браузера
// Send a custom event from the browser
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "plan_selected", {
  plan: "pro",
  billing: "annual",
  value: 99
}]);
PHP - записывайте контактную активность с вашего сервера
// 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);

Фильтрация событий

Тип события

Фильтр по конкретным названиям событий: pageview, chat. started, ticket. created и т. д.

Диапазон дат

Показать события из определенного периода времени.

Поиск

Данные о событиях поиска по ключевым словам (URL, электронная почта, значения свойств событий).

Как долго хранятся события?+

События следуют политике удержания, установленной в Настройках. По умолчанию: 90 дней. Высокоценные события (покупки, события безопасности) могут быть настроены с более длительным сохранением.

Можно ли использовать события в экспериментах А/Б?+

Да. При создании эксперимента вы выбираете конверсионное событие. Любое встроенное или пользовательское событие может быть использовано в качестве цели конверсии.

Аналитика

A/B эксперименты

Эксперименты позволяют протестировать две версии страницы или функции и измерить, какая из них работает лучше. OpsIQ отслеживает впечатления, конверсии и статистическую значимость.

A/B эксперименты
A/B экспериментыДве карты с вариантами, сравнивающие коэффициенты конверсии, с значком победителя и значением на ведущем варианте.A/B экспериментыyoursite.comВариант А4.2%Конверсия · 1,020 просмотровВариант ВПобедитель6.8%Конверсия · 1,005 просмотров+62% подъемник 96% значительный1ТестДва варианта голова к голове2Извините.Конверсии и значимость3РешилОбъявить победителя
Запустите два варианта, посмотрите конверсии и статистическую значимость, и объявите победителя.

Как работают эксперименты

1
Создать эксперимент

Дайте ему имя, определите свой основной показатель (событие конверсии) и установите варианты (контроль и тест).

2
Запускай.

OpsIQ случайным образом назначает посетителям варианты и отслеживает их поведение. Не меняйте эксперимент во время его проведения.

3
Прочитайте результаты

После сбора достаточного количества данных проверьте уровень доверия.95% Уверенность означает, что вы можете быть 95% Я уверен, что разница реальна, а не случайна.

Эксперименты

Проект

Создано, но еще не запущено. Можно все же редактировать варианты и метрики.

бегать

Активно назначать посетителям варианты. Не редактировать во время работы.

завершенный

Достиг статистической значимости или был остановлен вручную.

Архивировано

Результаты были пересмотрены, и эксперимент больше не нужен в активном списке.

Лучшие практики

Определите свою метрику перед запуском

Решите, что вы измеряете перед началом. Выбор метрики после просмотра результатов вводит предвзятость.

Исключите внутренний трафик

Добавьте адреса вашей команды IP в список исключений, чтобы посещения сотрудников не искажали результаты.

Беги долго

Не прекращайте эксперимент после 100 посетителей. Для достоверных результатов нужны сотни или тысячи посетителей на вариант.

Тестирование одно изменение за раз

Если вы измените заголовок и цвет кнопки, то не будете знать, какие изменения вызвали улучшение.

Запишите свое решение

После окончания эксперимента отметьте, какой вариант победил и почему вы решили его реализовать.

Сколько посетителей мне нужно для полноценного эксперимента?+

Это зависит от базового коэффициента конверсии и размера эффекта, который вы хотите обнаружить. 500 Посетители в варианте для 20% Для меньших эффектов нужны тысячи.

Можно ли проводить несколько экспериментов одновременно?+

Да, но будьте осторожны. Если два эксперимента влияют на одну и ту же страницу, их результаты могут взаимодействовать. Безопаснее проводить эксперименты на разных страницах или функциях одновременно.

Аналитика

JavaScript Ошибки

JavaScript Ошибки собирают ошибки на стороне клиента от посетителей вашего сайта. API Позвоните, или здесь появится недостающий ресурс. Используйте его для поиска и исправления ошибок, которые влияют на реальных клиентов.

Ошибки JS
JavaScript ОшибкиСписок захваченных ошибок интерфейса с точками серьезности, исходным файлом, браузером и количеством вхождений.JavaScript Ошибкиyoursite.comНедавние ошибкиTypeError: не может читать x неопределенногоcheckout. js:42 · Chrome×214404 погрузка /assets/app.cssИндекс: Safari×88Uncaught (в обетовании) - сетевая ошибкаapi.js:17 Firefox×51Предупреждение об износе: событие разгрузкиpp. js · Edge×331CAPTUREОшибки на стороне клиента2IMPACTCounts & Browsers3ФиксацияСквош настоящих жуков
Настоящие посетители попадают на поверхность сломанного кода (сообщение, источник, браузер и как часто), чтобы вы могли исправить то, что имеет значение.

Что показывает каждая ошибка

Сообщение об ошибке

JavaScript текст ошибки (например, "TypeError: Cannot read properties of undefined").

Страница URL

На какой странице произошла ошибка.

Браузер и устройство

Какой браузер и тип устройства видели ошибку. Некоторые ошибки являются специфичными для браузера.

След от стека

Местоположение кода, где произошла ошибка. Нажмите, чтобы расширить полный след стека.

Первый вид

Когда впервые появилась эта ошибка.

Последний раз видел

Когда эта ошибка произошла совсем недавно.

Граф

Сколько раз была зафиксирована эта ошибка.

Пострадавшие сессии

Сколько различных сеансов посетителя испытали эту ошибку?

Приоритет ошибок

Не все JavaScript Ошибки требуют немедленного внимания: (1) ошибки на критических страницах (проверка, регистрация, вход в систему), (2) Ошибки с высоким количеством сеансов, (3) ошибки, появившиеся недавно (возможная регрессия от изменения кода); (4) Ошибки в собственном коде (не сторонние скрипты).

Исправляем сломанную кнопку проверки

Сценарий:
Страница ошибок JS показывает «TypeError: Cannot read properties of undefined (reading submission) on» /checkout, влияющий 45 Сессии на этой неделе.
Что делать:

Это означает 45 Настоящие клиенты не смогли завершить оформление заказа: (1) Откройте страницу в той же комбинации браузер/устройство. (2) Откройте консоль браузера и воспроизведите ошибку. (3) Проверьте след стека, чтобы найти точную строку кода. (4) Исправьте ошибку, разверните и контролируйте количество ошибок до нуля.

Означает ли это, что OpsIQ фиксирует ошибки из сторонних скриптов?+

Да, OpsIQ Поймать всех JavaScript ошибки на странице, включая ошибки из сценариев аналитики, виджетов чата и рекламных скриптов. URL В стеке след, чтобы сосредоточиться на вашем собственном коде.

Как исключить известные безобидные ошибки?+

Вы не можете устранить конкретные ошибки в OpsIQ Вы можете отфильтровать список по странице URL Исправлять или игнорировать ошибки из расширений браузера (они часто отображаются как ошибки из неизвестных источников).

продажи

Продажи и конверсии

Отслеживание продаж соединяет ваш магазин или платежную платформу с OpsIQ Каждая покупка приписывается путешествию посетителя, чтобы вы знали, какие страницы, кампании и каналы приносят доход.

продажи
продажиЭкран продаж: общая выручка с контролем за все время, поиском и таблицей недавних покупок (дата, клиент, платформа, сумма, источник).продажиyoursite.comРевеню$42,180+18%Все время ▾Поиск по электронной почте, IP, ID заказаПоследние покупкиДатапокупательПЛАТФОРМААмунтИсточникЮн 3[email protected]Shopify$49googleЮн 3[email protected]WooCommerce$129directЮн 2[email protected]Stripe$480объявления1РевенюЗаказы и продления2RECENT PURCHASESДата · клиент · сумма3ATTRIBUTEDИсточник трафика
Реальный экран продаж, доход наверху, а затем последние покупки (дата, клиент, платформа, сумма), каждый из которых приписывается источнику трафика.

Продажа приборной панели

Сегодняшние продажи

Выручка от заказов, выполненных сегодня. Отзывы с каждым новым событием заказа с подключенной платформы.

Эта неделя / этот месяц / общая

Выручка, агрегированная за период. Возврат средств вычитается из этих сумм.

Трендовая диаграмма

График строк, показывающий ежедневный доход в выбранном диапазоне дат. Ищите пики (промо-акции, кампании) и провалы (проблемы, сезонные).

Лучшие источники конвертации

Какие источники трафика приводят к наибольшему количеству покупок. "Прямые" покупатели часто закладывали ваш сайт в закладки. "Google" покупатели находили вас через поиск.

Последние покупки

Последние заказы с электронной почтой, суммой, валютой и приобретенными товарами.

Неподтвержденные покупки (путешествие клиента)

Когда трекер видит, что посетитель достигает подтверждения покупки в браузере, но никакая подключенная платформа не сообщила о том, что продажа еще не состоялась, путешествие клиента показывает ряд покупок (неподтвержденный) с янтарным значком. Он никогда не учитывается как доход. Когда платформа подтверждает продажу, подтвержденная покупка заменяет ее.

Примирение

Коннекторы продаж не зависят от одного веб-хука. Каждый сигнал оплаты, который посылает платформа, может открыть продажу, и Контракт на коннекторе 2.3 перечитывает собственный список завершенных продаж платформы по расписанию (по умолчанию почасово в рабочем пространстве), поэтому веб-книга, которую платформа никогда не доставляла, не может потерять продажу. Операторы могут запустить его по требованию из командной строки с помощью инструментов / Sales_reconcile. php.

Руководство по настройке платформы

Shopify

Перейти к Connectors Shopify Создайте собственное приложение в своем Shopify admin (Настройки > Приложения и каналы продаж > Разработка приложений). Гранты: read_orders, read_customers, Read_products. Copy the Admin API Доступ к токену. OpsIQ Введите свой домен магазина (например, your-store.myshopify.com) и токен доступа. Нажмите "Тестовое подключение". В случае успеха включите синхронизацию webhook для уведомлений о заказах в режиме реального времени.

WooCommerce

Перейти к Connectors WooCommerce В твоем WordPress Админ, иди к WooCommerce> Настройки > Продвинутый > REST API.Создать ключ с разрешения Read/Write.Копировать потребительский ключ и потребительскую тайну.В OpsIQ Войдите на свой сайт URL Ключ потребителя и секрет потребителя.

BigCommerce

Перейдите в Connectors > BigCommerce. В вашем администраторе BigCommerce перейдите в Advanced Settings >API Создать аккаунты. V2/V3 API Аккаунт с прочитанным объемом для Заказов, Клиентов и Продуктов. Копировать токен доступа, идентификатор клиента и API Введите их в путь. OpsIQ и тест.

Magento 2

Перейдите в раздел «Коннекторы» > Magento. В вашем админ-сервере MagenTo перейдите в «Система» > Интеграции. Создайте новую интеграцию с API доступ к ресурсам Продажа, Клиенты и Каталог. Активировать интеграцию и скопировать токен доступа. Введите его OpsIQ с вашей базой Magento URL.

PrestaShop

Перейдите в Коннекторы > PrestaShop. В администраторе Prestashop перейдите в Advanced Parameters > Webservice. Включите веб-сервис и создайте новый ключ. Предоставьте доступ к заказам, клиентам и продуктам. Копируйте ключ и введите его в OpsIQ с вашим магазином URL.

OpenCart

Перейти к Connectors > OpenCart. Generate API Удостоверения от вашей панели администратора OpenCart.API URL имя пользователя и ключ в OpsIQ Разъем использует OpenCart REST API для заказа и данных клиентов.

osCommerce

Перейдите в Connectors > osCommerce. Настройте доступ к базе данных или API учетные данные, задокументированные в настройках разъема. интеграция osCommerce обычно требует прямого доступа к базе данных или пользовательского интерфейса API Модуль.

Stripe

Перейти к Connectors > Stripe. Copy your Stripe limited API Ключ от панели инструментов Stripe (разработчики)API Ключ должен читать доступ к Клиентам, Платежи, Счета и Подписки. OpsIQ Настройка конечной точки webhook для событий в реальном времени.

Пользовательские/другие платформы

Используйте REST API или веб-хуки для отправки событий продаж с любой платформы. Отправьте заказ. завершенные события по электронной почте, сумме, валюте и элементам клиента.API Раздел для формата полезной нагрузки.

Понимание вашей воронки продаж

Лучшие источники конвертации

Показывает, какие каналы приносят платящих клиентов. Если Google приносит 1000 посетителей и 50 продажи, то есть 5% Коэффициент конверсии 200 посетителей и 30 продажи, то есть 15%Электронная почта более эффективна для каждого посетителя.

Возврат средств

Заказы с рефинансированием отслеживаются отдельно. Они уменьшают ваши чистые доходы. Если ставки возврата высоки из определенного источника, трафик может быть низкого качества.

Обработка валюты

OpsIQ сохраняет исходную валюту транзакции и сумму. Многовалютные предприятия видят выручку в каждой валюте. Нормализованная отчетность использует настроенный обменный курс.

Проработанные примеры

100 Посетители, нулевые продажи

Сценарий:
Ваша страница ценообразования получает 100 посетителей в день, но без конверсий.
Что делать:

расследовать: (1) Воспроизведение сеансов на страницах ценообразования. Посмотрите, как они взаимодействуют с таблицей цен. (2) Проверьте верхние страницы для цены на страницу показатель отказов и время-на-странице. (3) Проверяйте разговоры в чате от посетителей страницы ценообразования. (4) Сравните свою ценовую страницу с конкурентами. (5) Попробуйте A/B-эксперимент с различными ценовыми макетами.

Атрибуция для маркетинговой кампании

Сценарий:
Вы отправили по электронной почте кампанию с тегами UTM. Как вы измеряете ее влияние на доход?
Что делать:

Перейдите в раздел «Продажи» и отфильтровать по источнику. Ищите параметр кампании UTM: (1) Сколько посетителей пришло с электронной почты. (2) Сколько конвертируется в продажи. (3) Общий доход, приписанный кампании. (4) По сравнению с тем же периодом до начала кампании.

Почему продажи показывают ноль, даже если у моего магазина есть заказы?+

Проверка: (1) Разъем платформы подключен и здоров? Перейдите к разделу Соединители и проверьте статус. (2) Включена ли синхронизация webhook? Если используется просмотр, запущено ли задание cron? (3) Имеет ли разъем право API сферы охвата? Shopify, вам нужен read_orders.

Как OpsIQ приписывает продажу посетителю?+

Когда заказ поступает через разъем, OpsIQ совпадает с электронной почтой клиента известному посетителю. Если посетитель был отслежен до покупки, продажа связана с его путешествием посетителя, включая источник трафика, целевую страницу и историю сеанса.

Можно ли вручную добавлять продажи?+

Вы можете отправлять рекламные мероприятия через REST API или веб-хуки из любой системы. Формат события документируется в Событии API Раздел.

Торговля

Создавайте, запускайте и управляйте родным Storefront

Магазин OpsIQ является родным магазином для продуктов, страниц, справочников, рекламных панелей, оформления заказа, учетных записей клиентов и продаж с помощью ИИ в клиентском чате и поддерживаемых социальных каналах.

Начало работы в маркетинге → Storefront

1
Выберите рабочее пространство

Подтвердите, что сайт вы настраиваете. Продукты, настройки, страницы, заказы и аналитика изолированы в этом рабочем пространстве.

2
Включите электронную коммерцию и Storefront

Общие настройки → Электронная торговля является родительским органом. публикация в магазине, создание заказов и платежи остаются отдельными, поэтому вы можете безопасно просматривать каталог.

3
Опубликовать полную продукцию

Установите тип продукта, цену, валюту, инвентарь, варианты / опции, средства массовой информации и выполнение. Предварительно просмотрите продукт и выбор оформления заказа перед публикацией.

4
Настройка оплаты и выполнения

Подключите шлюз или добавьте банковский перевод, наличные деньги или встречную оплату. Физическим товарам нужны зоны доставки или сбора; цифровым товарам необходимы защищенные файлы или коды.

5
Запуск готов к запуску

Исправьте каждый блокировщик и просмотрите каждое предупреждение, а затем заполните заказ на песочницу из публичного магазина.

Стартовый О и содержание политики

Новые и обновленные магазины получают редактируемый начальный текст для О нас, Положения и условия, Конфиденциальностьи Возврат и возврат когда эти поля пусты, существующая копия купца никогда не перезаписывается.

  • Заменить каждый [Add …] Быстрый и быстрый ЗАМЕЧАНИЕ КАПИТА Уведомление перед запуском.
  • Используйте реальное юридическое название, маршрут контакта, обещания выполнения, правила возврата, методы обработки данных, сроки хранения и обслуживаемые рынки.
  • Получите консультацию, соответствующую продуктам и странам, которые вы обслуживаете. Стартер - это оперативное руководство, а не юридическая консультация.

Дизайн, страницы и акции

Тема и дизайн страницы

Выберите кураторскую цветовую тему и композицию, затем настройте типографику, заполнители / классиенты, формы, ширину, движение, висение и свет / темное поведение. Предварительный просмотр рабочего стола и телефона перед сохранением.

О, Контакты, Витрина/Книга и Аккаунт

Создайте каждую страницу из переупорядоченных блоков. Каждый блок имеет премиум-варианты дизайна. Сохраняйте такие блоки, как статистика, команда, награды или цитаты, пока их содержание не станет правдой.

Пользовательские страницы

Установите название, слизень, герой, SEO и заказанные блоки; предварительный просмотр во время черновика, затем опубликуйте. Зарезервированные маршруты магазина, такие как корзина, касса, учетная запись и политики не могут быть повторно использованы.

Промо-всплывающие окна и боковые панели

Создайте модальную страницу с по меньшей мере одним блоком. Выберите премиум-дизайн, размещение в центре / слева / справа / внизу, триггер загрузки / задержки / выхода / щелчка, фон, движение, ширину, купон и поведение один раз на посетителя. Тест закрытие, клавиатура и макет телефона.

Меню и футер

Ссылка на страницы, продукты, коллекции, политики, действия учетной записи / службы поддержки / корзины, живые модали или безопасные внешние URLs.

Клиентский чат и социальные заказы

Включите клиентскую чат-продажу, затем выберите, где клиенты могут купить. Помощник ищет каталог и просит сервер для авторитетной цитаты; сервер - не модель - создает подписанную карту заказа. Подтверждение происходит только через эту карту в Интернете или проверенное взаимодействие на социальном канале.

WhatsApp, Messenger, Instagram, Telegram, LINE, SMS и X используют учетную запись канала, проверенную провайдером, в качестве идентификатора канала. Электронная почта по-прежнему собирается для получения квитанций. Заказ соединителя сохраняет подписанный универсальный контракт и авторитетное общее количество торговцев; конфигурация Storefront не изменяет этот контракт.

Магазин аналитики Intelligence Analytics

Обзор уникальных посетителей, просмотров продуктов, добавлений корзины, запусков / отказов / завершений заказа, конверсии, подтвержденных заказов, доходов от валюты, приобретения, устройств, стран / городов, лучших продуктов, восстановления и предупреждения о качестве данных. Конверсия использует явно помеченные события в государственных магазинах; Валютные показатели никогда не объединяются молча. Dash означает, что выбранный диапазон не может ответить на вопрос об конвертации - не нулевой процент.

Генерал OpsIQ API

Используйте ключ на предъявителя с commerce.read; analytics.read Также предоставляет аналитический снимок. Связанное с ключом рабочее пространство является авторитетным.

Типичный Storefront читает
{ "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 получает возвраты общедоступной безопасной конфигурации, URL, меню и состояния начального обзора. Каталог Storefront возвращает каждую тему, дизайн страницы, тип блока, композицию блока и оболочку продвижения премиум-класса, поэтому удаленные строители никогда не жестко кодируют варианты. Список страниц возвращает пользовательские страницы и премиальные модали. Аналитика возвращает агрегаты без идентификаторов клиентов. Готовность возвращает действенные проверки запуска. OpenAPI и Postman используют эти же контракты.

Заключительный предварительный запуск

  1. Настольный компьютер и телефон: дом, поиск, продукт / вариант, корзина, проверка заказа, учетная запись, отслеживание, загрузки, О, Контакты, политики, книга поиска, страницы, меню и каждое живое продвижение.
  2. Заполните одну песочницу и проверьте статус заказа, получение, запас и выполнение.
  3. Разместите один клиентский чат и один провайдер-песочница на каждом включенном социальном канале.
  4. Подтвердите, что эти события появляются под правильной поверхностью и валютой в Store Intelligence.
⚠️
Текст политики запуска делает магазин непустым, но он не делает юридическую копию пересмотренной. Готовность к запуску сохраняет предупреждение до тех пор, пока каждое подсказка не будет заменено.
продажи

Свинец

Лидеры - это посетители или клиенты, которые показывают намерение покупки или поддержки. OpsIQ автоматически обнаруживает потенциальных клиентов на основе поведения: посещения страниц ценообразования, обратные визиты, взаимодействия в чате, запуск кассовых сборов и высокое взаимодействие. Используйте страницу лидерства для определения приоритетности последующего наблюдения и подачи вашего CRM-провода.

Свинец
СвинецЭкран Leads: таблица с возможностью поиска с IP/email, местоположением, устройством, источником и временем на месте столбцов, а также верхний источник и страна.Свинецyoursite.comПоиск по IP, город, страна...Источник: Google · Страна-лидер: СШАIP / ЭЛЕКТРОННАЯ ПОЧТАМестонахождениеРЕШЕНИЕИсточникВремя41.62.10.4Великобритания · ЛондонМобильныйgoogle4m 12s[email protected]США · Нью-Йоркрабочий столdirectСемь метров 02s[email protected]DE · БерлинМобильныйutm:рекламаПять метров 40s203.0.113.9CA - Торонторабочий столgoogle3m 28s1DETECTEDВысоконамеренные посетители2TOPВедущие источники и страны3ENRICHEDIP, местоположение, устройство, время
Настоящий экран Leads, высокоинтентированные посетители в виде таблицы с возможностью поиска (IP/email, местоположение, устройство, источник, время на сайте) с ведущими источниками и странами.

Что делает свинец

Ценовая страница Посещение

Посетители, которые просматривают вашу страницу ценообразования или планов, активно рассматривают покупку.

Возврат посещений

Посетители, которые возвращаются несколько раз, вовлечены, но еще не преобразованы.

Чат взаимодействия

Посетители, которые начинают чат, активно ищут помощь, будь то предварительная покупка или после покупки.

Запуск Checkout

Посетители, которые попадают на страницу оформления заказа, но не завершают покупку.

Форма представления

Посетители, которые подают контактную форму, демо-запрос или форму регистрации.

Высокая страница вовлеченность

Посетители, которые просматривают много страниц с длительной продолжительностью сеанса, глубоко исследуют.

Свинцовая панель деталей

Нажмите на любое лид-шоу, чтобы увидеть их полный профиль:

Идентичность

Имя, адрес электронной почты, компания, если известно. Анонимные лидеры показывают IP и местоположение.

Сессии

Все сеансы из этого лида с потоком страниц, продолжительностью и источником.

Страницы просмотренные

Каждая страница, которую они посетили, заказана по рецепту.

Источник

Как они нашли вас: органические, платные, социальные, реферальные, прямые.

Ведущий балл

А.0-100 Оценка основана на интенсивности поведения, ренты и намерениях страницы.

Статус CRM

Добавлено ли это лидерство в CRM как контакт или сделка.

Советы по продажам

Сгенерированное ИИ предложение о том, что делать дальше (например, «Посещение цен 3 раз · рассмотреть возможность проактивной пропаганды»).

Высокая стоимость свинцового значка

Лидеры с оценкой выше 80 получают значок «Высшее значение». Это ваши самые горячие перспективы. Приоритетируйте их для охвата, проактивного чата или ввода трубопровода CRM.

Проработанные примеры

Работать горячим свинцом

Сценарий:
Ведущий просмотрел вашу страницу ценообразования 3 временами 2 Несколько дней, начал чат с вопросами о планах предприятия, но не купил.
Что делать:

Это высокоинтенциональная зацепка: (1) Проверьте их ведущую информацию о компании и роли. (2) Просмотрите стенограмму чата для конкретных потребностей и возражений. (3) Создать сделку в CRM с собранной информацией. (4) Назначьте последующее задание для члена команды продаж. (5) Если они вернутся на страницу ценообразования, правило проактивного чата может вызвать персонализированное сообщение.

Преобразование анонимных ведет к CRM-контактам

Сценарий:
У вас есть 50 анонимные лиды с высокими баллами, но без адресов электронной почты.
Что делать:

Варианты: (1) Создайте упреждающее правило, которое предлагает скидку или загрузку ресурса в обмен на электронную почту на страницах с высокими намерениями. (2) Используйте виджет чата, чтобы запросить электронную почту, когда анонимные посетители начинают разговор. (3) Добавьте токен идентичности на страницы входа / регистрации, чтобы возвращающиеся посетители были автоматически идентифицированы.

Как рассчитывается ведущая оценка?+

Оценка учитывает: частоту посещений (недавнее = выше), частоту посещения (более = выше) , просмотренные страницы (цена / касса = выше ), продолжительность сеанса (более длительный = выше); взаимодействие в чате (задействованное = выше).

Могу ли я настроить правила подсчета очков?+

В CRM Configuration вы можете добавить правила оценки потенциальных клиентов, которые повышают оценку на основе конкретных ключевых слов, событий, источников или шаблонов страниц.

CRM (управление связями с клиентами)

CRM - начинайте здесь

OpsIQ отправляет полный CRM-систему, которая фиксирует правду о клиентах, очищает данные, оценивает потенциальных клиентов, коучинговые сделки, прогнозирует доход и действует с помощью веб-сайта, поддержки, билетов, продуктов и платежей в виде одного живого графика. Каждое действие ИИ исходит из источника, объяснимо, обратимо и контролируется одобрением.

ИИ CRM
Обзор AI CRMНабор Trust Dial для Copilot рядом с четырьмя картами агента ИИ: Стюард, Проспектор, Удержание и Аналитик.ИИ CRMрабочее пространствоTrust Dial скачатьРучнойКопилотавтопилотСколько ИИ делает самДСстюардОдурачивать, обогащатьвалидация данныхСДРпроспекторНайти и забитьНовый бизнесРТСохранениеСпот-шёрн,Продление ДвиженияАНаналитикПрогноз иОбъяснять цифры1AI-FIRSTЧетыре специализированных агента2YOU DECIDEДоверие к автономности Dial3TRUSTEDИсточник: Reversible
CRM, управляемый четырьмя специализированными агентами и Trust Dial, который сам решает, сколько они делают.

CRM страницы обзор

AI CRM (командный центр)

Начни здесь

Ваш ежедневный домашний экран: импульс дохода, то, что обнаружил ИИ, что он сделал, очередь одобрения, следующие шаги, здоровье агента и рентабельность инвестиций.

Контакты

ядро

Люди и компании в вашей CRM. Поиск, фильтрация, оценка и управление профилями.

трубопровод

ядро

Визуальная доска сделок с этапами перетаскивания, вероятностью выигрыша и коучингом ИИ.

Прогноз и отчеты

ядро

Прогнозирование на уровне совета директоров: совершенный, вероятный, лучший случай с доверительными интервалами и отслеживанием точности.

Жизненный цикл

ядро

Где каждый клиент стоит: активный, в опасности, расширение готово, обновление должно быть или штамповка.

Создайте свою CRM

конфигурация

Опишите свою настройку CRM на простом английском языке. OpsIQ генерирует обратимый план и применяет его при одобрении.

CRM Здоровье

Опс

Страница самопроверки: схема, агенты, маршруты, действия ИИ и подсчет живых данных.

Как OpsIQ обезопасить себя

Спрашивайте, прежде чем действовать

Предложения по ИИ идут в очередь одобрения. Вы одобряете, редактируете или отвергаете каждое из них. Ничего не происходит без вашего согласия.

Никогда не переписывай

Когда ИИ предлагает изменения, он показывает текущее значение и предлагаемое значение. Вводимые человеком данные имеют защиту происхождения.

Все обратимо

Каждое действие ИИ записывается в журнал. Вы можете отменить любое изменение одним щелчком мыши.

объясняемый

Каждая рекомендация ИИ показывает свои аргументы и источники данных, которые она использовала.

Снова бренд? Начни здесь.

1
Открытая AI CRM

Нажмите AI CRM в левой навигации. Командный центр показывает ваше текущее состояние.

2
Проверьте CRM Health

Открытый CRM Health для проверки схемы, агентов и маршрутов готов.

3
Контакты импорта

Если разъем активен ()Shopify, WHMCS Контакты импортируются автоматически, в противном случае - через CSV Или создавать вручную.

4
Создать трубопровод

Перейдите к трубопроводу и создайте свой первый трубопровод с этапами (например, свинец, квалифицированный, предложение, переговоры, выигрыш, проигрыш).

5
Добавьте свою первую сделку

Создайте сделку от контакта, установите сумму и этап и позвольте Тренеру по сделке направлять вас.

Нужно ли использовать CRM?+

CRM необязателен. OpsIQ отлично работает как платформа отслеживания + поддержки + ИИ без CRM. Включите ее, когда будете готовы управлять продажами и отношениями с клиентами.

Может ли CRM работать без разъемов?+

Да. Можно создавать контакты и сделки вручную. Коннекторы обогащают CRM данными платформы (заказами, подписками, билетами), но не требуются.

Что такое уровень доверия?+

Доверительный уровень — это система безопасности, которая контролирует то, что может сделать ИИ. Режим копилота (по умолчанию): ИИ предлагает, человек одобряет. Регулирование автопилота (отказ): ИИ автоматически действует на операции с низким риском, обратимые.

CRM (управление связями с клиентами)

Домашний экран AI CRM

Командный центр - это ваш ежедневный брифинг. Откройте его каждое утро, чтобы увидеть, что произошло, что требует внимания и что делать дальше.

Центр управления
Командный центр CRMCRM-дом с переключателями Forecast / Win-rate / Pipeline, взвешенным прогнозом KPI и очередей предложений AI с одобрением и отключением в каждом ряду.Командный центр CRMрабочее пространствопрогнозПобедительтрубопроводFORECAST · ЭТО ВЫСТАВЛЯЕТСЯ$74 тыс.87%Предложения по ИИ · утверждение очередиСделка Acme $24 000Из чата с покупателемодобрятьУвольнениеПереместить Nimbus → ПредложениеПоложительный ответ обнаруженодобрятьУвольнениеЗадание журнала · Следуйте за пикомне активны в 7 дняходобрятьУвольнение1TOGGLEПрогноз · Показатель выигрыша · Трубопровод2AI PROPOSESСделки, этапы, задачи3YOU DECIDEУтвердить или уволить
Настоящий командный центр: переключайтесь между прогнозом, процентом выигрышей и трубопроводом и работайте в очереди предложений ИИ, одобряйте или отклоняйте сделки, шаги на этапе и задачи, которые он предлагает.

Что показывает командный центр

Сегодняшние цифры

Стоимость трубопровода, выигранные / потерянные сделки, новые лиды, активные сделки и тенденция к доходам - это снимок вашего текущего состояния.

Что такое OpsIQ

Обнаруженные ИИ идеи: застопорившиеся сделки, учетные записи с риском, новые возможности, проблемы качества данных и рыночные сигналы.

Что такое OpsIQ

Действия, предпринятые ИИ (на автопилоте) или предложенные (в Copilot): этапы продвижения, обновления результатов, обогащение контактов и создание задач.

Необходимо одобрение

Очередь предложений по ИИ, ожидающих вашего решения. Каждый показывает предлагаемые действия, рассуждения и доказательства. Утвердить, отредактировать или отвергнуть.

Следующий ход

Иллюстрированный список 10 Самые важные вещи, которые нужно сделать сегодня: следить за горячей сделкой, проверять учетную запись в зоне риска, исследовать новое лидерство и т. Д.

Статус помощника

Здоровье агентов ИИ: Захват, Стюард данных, Сделочный интеллект, Тренер по сделкам, SDR, Удержание. Зеленый = бег, янтарь = требует внимания, красный = ошибка.

Результаты

Отслеживание рентабельности инвестиций: сделки, на которые влияет ИИ, экономия времени, точность прогнозов и сравнение с ручной работой CRM.

Утренний брифинг рабочий процесс

1
Читайте сегодняшние цифры

Проверь состояние трубопровода и динамику доходов.

2
Очистить очередь утверждения

Оцените каждое предложение ИИ. Утвердить безопасные действия, редактировать там, где это необходимо, отклонить плохие предложения.

3
Проверьте, что OpsIQ

Прочтите инсайты ИИ. Есть ли какие-либо сделки, которые могут быть рискованными?

4
Работайте над списком следующих ходов

Начнем с главного приоритета. ИИ оценил их по срочности и потенциальному воздействию.

Поймать после перерыва

Сценарий:
Ты была в отъезде неделю, что случилось, когда тебя не было?
Что делать:

Откройте командный центр и проверьте:1"Что?OpsIQ«сделала» показывает все действия ИИ во время вашего отсутствия.2"Одобрение потребностей" показывает предложения, ожидающие вашего рассмотрения.3"Что?OpsIQ"найденные" выделены срочные пункты.4) Установите диапазон дат приборной панели на период отсутствия, чтобы увидеть тенденцию.

CRM (управление связями с клиентами)

Контакты, компании и сделки

CRM организует ваши деловые отношения на четыре объекта: контакты (люди), компании (организации), сделки (возможности получения дохода) и задачи (последующие действия).

Объекты CRM
Объекты CRMКонтактная запись, связанная с объектами компании, сделки и задачи в подключенном графе.Объекты CRMрабочее пространствоКонтактчеловек · электронная почта · телефонКомпанияaccountsсделкаВозможность получения доходаЗаданиепоследующие действия1OBJECTSКонтакты, компании, сделки2LINKEDОдин связанный граф3TASKSПоследующие меры, прилагаемые
Четыре основных объекта (контакты, компании, сделки и задачи) связаны в один связанный график клиента.

Контакты

Что такое контакт

Человек в вашей CRM. Они могут быть клиентом, потенциальным клиентом или партнером. Контакты имеют электронную почту, имя, компанию, теги, этап жизненного цикла и оценку горячих точек.

Поиск контактов

Используйте строку поиска, чтобы найти по имени, электронной почте, компании или тегам. Используйте фильтры: этап жизненного цикла, счет лидов, источник, страна, последняя дата деятельности, назначенный владелец.

Контактный профиль

Нажмите на контакт, чтобы увидеть их полный профиль: личная информация, компания, сделки, мероприятия, билеты, чаты, посещения веб-сайтов, результаты и идеи ИИ.

Горячий балл

А.0-100 Оценка, рассчитанная по сигналам поведения: посещения веб-сайта, взаимодействие с электронной почтой, взаимодействия в чате, история покупок и ренты.

Компании

Больше билетов...
Контактная компания Связь

Контакты связаны с компаниями по электронной почте или ручному назначению. У одной компании может быть много контактов.

сделки

Что такое сделка

Сделки имеют название, сумму, конвейер, стадию, вероятность выигрыша, дату закрытия, назначенного владельца и связанные с ним контакты / компанию.

Выиграть вероятность

Процентный шанс на выигрыш сделки. Устанавливается вручную или рассчитывается ИИ на основе ваших исторических данных о выигрыше. Драйвирует взвешенный прогноз.

Забота о здоровье

Зеленый (здоровый), янтарный (в группе риска) или красный (застопорился). На основе активности, продолжительности сцены и сигналов взаимодействия.

Задачи

Что такое задача

Задачи имеют название, дату, приоритет, тип (звонок, электронная почта, встреча, другое) и связанные контакты / сделки.

ИИ-генерируемые задачи

ИИ автоматически создает задачи, когда обнаруживает что-то, требующее внимания: отслеживает застопорившуюся сделку, реагирует на учетную запись с риском, исследует новое лидерство.

Поиск горячих зацепок

Сценарий:
Вы хотите увидеть все контакты с высокими баллами в Великобритании, которые не были установлены в последнее время.
Что делать:

Перейти к Контакты. Фильтр по: Ведущий балл > 80, Страна = Великобритания, Последняя деятельность > 7 Несколько дней назад, понижая баллы за лидерство. Это ваши самые горячие забытые зацепки, расставьте приоритеты в работе с общественностью.

Создание сделки от контакта

Сценарий:
Контактный человек просто выразил интерес к вашему бизнес-плану во время чата.
Что делать:

Откройте контактный профиль. Нажмите «Создать сделку». Введите название сделки (например, «Acme Corp - Enterprise Plan»), сумму, конвейер и стадию (например: «Квалифицированный») Установите дату закрытия и назначьте ее себе. Тренер по сделке начнет отслеживать эту возможность.

CRM (управление связями с клиентами)

Трубопровод (ваш договорный совет)

Трубопровод - это визуальная доска, где сделки проходят этапы слева направо. Перетаскивайте и бросайте карты для продвижения сделок. Каждая карта показывает сумму сделки, вероятность выигрыша и состояние здоровья.

трубопровод
Трубопровод CRMЭкран трубопровода с открытыми сделками, открытой стоимостью, взвешенной прогнозной и атрибутированной статистикой сделок, кнопкой «Новая сделка», очередей AI Approve и платой Lead / Qualified / Win.трубопроводрабочее пространствоОткрытые сделки23Открытая стоимость$128 000Весовой прогноз$74 тыс.Атрибутные сделки12+ Новый договорУтвердить очередь2 для просмотравестиVolt Inc.4 доллараЛучечка$6 тыс.КАЧЕСТВЕННЫЙНимбус$30 тыс.пик$9 тыс.Победаорбита$48 тыс.1LIVE STATSОткрытое значение и взвешенный прогноз2AI QUEUEУтвердить предложенные сделки3BOARDДраг-сделки по этапам
Реальный экран трубопровода: живая статистика (открытая стоимость, взвешенный прогноз), очередь AI Approve для предлагаемых сделок и плата перетаскивания.

Использование трубопроводной платы

1
Посмотреть ваши сделки

В трубопроводе показаны все активные сделки в виде карт, расположенных в колонках (этапах). Каждый заголовок столбца показывает общую стоимость сделок на этом этапе.

2
Драги для продвижения

Перетащите карту на следующий этап. Вероятность выигрыша и счет обновления мгновенно. Если ход не удался (ошибка проверки), карта отскакивает назад в исходное положение.

3
Проверка карточек

Зеленый значок = здоровый (недавняя активность, на трассе). Янтарь = в группе риска (замедление, требует внимания). Красный = застопорился (нет активности слишком долго).

4
Нажмите для деталей

Нажмите на карту, чтобы открыть панель деталей сделки с контактами, действиями, кратким отчетом тренера по сделке и быстрыми действиями.

Очередь утверждения

Предложения по ИИ появляются в очереди утверждения в верхней части страницы конвейера. Каждое предложение показывает, что хочет сделать ИИ, почему и доказательства. Вы можете:

одобрять

Примите предложение как есть. Действие проходит через Слой доверия и записывается в журнале.

Редактировать

Например, изменить предложенный этап или скорректировать сумму.

Отклонить

ИИ учится на отказе, чтобы делать лучшие предложения в будущем.

Вероятность выигрыша объяснена

Вероятность выигрыша может быть установлена вручную или вычислена ИИ. Когда ИИ рассчитывает ее, он использует модель, обученную на ваших собственных закрытых сделках (выигранных и потерянных). Если у вас недостаточно исторических данных, ИИ использует вероятность по умолчанию стадии. Вероятность управляет взвешенным прогнозом: $10,000 заключать сделки 30% Вероятность способствует $3,000 «Вероятный» прогноз.

Перейти к сделке, чтобы выиграть

Сценарий:
Клиент подписал договор и оплатил его.
Что делать:

Перетащите карту сделки на стадию «Победа». OpsIQ будет: (1) Отметьте сделку как выигранную. (2) Обновить прогноз. (3) Добавьте «выигранное» действие к временной шкале. (4) Если настроено, инициировать событие webhook (crm.deal.won. (5) Обновить этап жизненного цикла контакта до «Клиент»

Застрявшие сделки

Сценарий:
Вы хотите найти сделки, которые были в той же стадии слишком долго.
Что делать:

Ищите красные (застопорившиеся) значки на доске трубопровода. Эти сделки не имели активности дольше, чем сконфигурированный порог гниения (установленный в CRM Configuration > Pipelines). Нажмите каждую застопоренную сделку, чтобы увидеть рекомендацию тренера по сделке для реактивации.

Можно ли иметь несколько трубопроводов?+

Да. Перейти к CRM Configuration > Трубопроводы для создания дополнительных трубопроводов. Частые случаи использования: отдельные трубопроводы для нового бизнеса против обновлений или для различных продуктов / услуг.

Что происходит, когда я тяну сделку на "Потерянный"?+

Сделка помечена как закрытая. Вас спросят о причине убытка. Сделку удаляют с активной доски, но можно найти в фильтре закрытых сделок. Контакт остается в CRM.

CRM (управление связями с клиентами)

Тренерская работа

Тренер по сделке анализирует каждую сделку и дает вам краткое описание состояния здоровья, сигналов риска, ключевых людей, контрольного списка квалификации, подготовки к встрече и предлагаемых следующих действий. Все получено. Тренер показывает, из какого билета, чата или деятельности исходит каждое требование.

Тренер по сделкам
Тренер по сделкамКарта сделки, в которой перечислены сигналы риска, обнаруженные ИИ, с источниками доказательств, помимо рекомендации ИИ и кнопки черновика электронной почты.Тренер по сделкамрабочее пространствоAcme Corp · $24,000Стадия: Предложение · 60% выигрышРИСК СИГНАЛСОтветов нет в 10 днейЧемпион помолчалКонкурент, упомянутый в чатеSources: ticket #482 · chat 6/12 · email threadAI рекомендуетВосстановить экономическоеПокупатель с ROI recapи план закрытия 7 дня.Подготовить электронное письмо1SIGNALSПочему сделка может проскользнуть2SOURCEDВсе утверждения ссылаются на доказательства3действиеOne-click следующий шаг
Тренер объясняет, почему сделка может проскользнуть (каждый сигнал указывает на ее источник) и передает вам следующий ход.

Что тренер говорит вам

Здоровье Объяснение

Почему сделка здоровая, подверженная риску или застопорившаяся. Конкретные сигналы: дни в стадии, дата последнего контакта, частота активности, упоминания конкурентов, шаблоны возражений.

сигналы

Категорически: возражения, упоминания конкурентов, обсуждение цен, индикаторы риска поддержки, сигналы обновления / расширения. Каждый сигнал ссылается на свой источник (транскрипт чата, билет, электронная почта, активность).

Карта чемпиона и блокировщика

Кто помогает сделке (чемпион) и кто сопротивляется (блокатор). На основе анализа взаимодействия и контактных ролей.

Контрольный список квалификаций

MEDDICC или BANT контрольный список (настраиваемый), показывающий, какие квалификационные критерии удовлетворяются и какие отсутствуют. Класс: A, B, C, D или F.

Подготовка к встрече

Перед запланированной встречей тренер формирует краткое описание: повестка дня, ключевые моменты для освещения, вопросы, которые нужно задать, риски и материалы для подготовки.

Ответить и позвонить в планы

Предлагалось следующее сообщение или сценарий вызова, основанный на текущем состоянии сделки и недавних взаимодействиях.

Сроки доказательств

Каждое утверждение, которое тренер делает ссылки на источник: номер билета, идентификатор стенограммы чата, дату активности или посещение веб-сайта.

Как пользоваться тренером

1
Прочитайте краткое

Откройте любую сделку и прокрутите в разделе Тренер по сделкам. Прочитайте состояние здоровья и ключевые сигналы.

2
Закрыть квалификационные пробелы

Проверить квалификационный лист. Если "Экономический покупатель" отсутствует, планировать выявить и привлечь бюджетного держателя.

3
Принятие решений по предложениям

Тренер предлагает конкретные дальнейшие действия. Нажмите, чтобы создать задачу, составить электронное письмо или запланировать встречу, все маршрутизируемое через очередь утверждения.

Подготовка к большой встрече

Сценарий:
Завтра у вас встреча с потенциальным клиентом по поводу сделки $50,000.
Что делать:

Откройте сделку и прочитайте раздел "Подготовка к встрече": (1) Ключевые точки разговора, основанные на последних взаимодействиях. (2) Возражения они подняли в чате на прошлой неделе. (3) Конкурент, о котором говорилось в билете поддержки. (4) Вопросы, которые нужно задать о сроках. (5) Используй этот бриф для подготовки целенаправленной, основанной на фактических данных повестки дня.

Понимание того, почему сделка находится под угрозой

Сценарий:
На трубопроводе красная эмблема о сделке, которая, как вы думали, шла хорошо.
Что делать:

Нажмите на сделку и прочитайте объяснение здоровья тренера по сделке. Он может сказать: "Эта сделка была в стадии предложения для 22 Дни (порог: 14 Последний контакт был 11 Несколько дней назад. Первый контакт открыл билет поддержки по вопросам миграции данных 5 Несколько дней назад (билет #T-)892 Предложение: решить проблему миграции и запланировать последующий звонок. Теперь вы точно знаете, что исправить.

CRM (управление связями с клиентами)

Прогноз и отчеты

Прогнозирование на уровне совета с оправданным диапазоном, объяснениями изменений уровня сделки и отслеживанием точности, чтобы вы могли доказать и объяснить свои цифры.

прогноз
прогнозЕжеквартальный прогнозный номер с полосами Commit, Best-case и Pipeline и примечанием о точности.прогнозрабочее пространствоFORECAST - эта четверть312 000 $87% для достижения целиОбещатьЛучший варианттрубопроводAI-взвешенный по состоянию здоровья и истории сделок · точность отслеживается с течением времени1КатегорииПринять на себя обязательство по трубопроводу2AI-WEIGHTEDСделка о здоровье3PROVABLEТочность отслеживается
Совершайте, в лучшем случае и конвейер с первого взгляда, ИИ-взвешенный по здоровью сделки, с точностью отслеживается, чтобы вы могли защитить его.

Категории прогнозов

преданный

Сделки с 80% или более высокой вероятностью выигрыша. Это ваши наиболее вероятные победы. Это должен быть ваш минимальный ожидаемый доход.

Вероятность взвешенного ИИ

Все открытые сделки взвешиваются на основе их ИИ-расчетной вероятности выигрыша. Это наиболее реалистичный прогноз того, что вы закроете.

Лучший вариант

Все открытые сделки по полной стоимости. Это максимально возможный доход, если все идет идеально (это редко бывает).

Интервал доверия

Ан 80% Вероятностная полоса, показывающая реалистичный диапазон. Пример: "Вероятно, вы будете близки между $45,000 и $72,000 в этом квартале.

Что изменилось и почему

Прогноз включает в себя атрибуцию недельных изменений, когда ваш прогноз падает $15,000 В докладе объясняется, какие именно сделки вызвали изменения: "Сделка А скатилась в следующий квартал ($8,000 Сделка B проиграна ()$5,000), Сделка C, сниженная в стоимости ($2,000)."

Точность отслеживания

Прогноз MAPE

Средняя абсолютная процентная ошибка: насколько далеки ваши прогнозы были исторически.15% Это означает, что ваши прогнозы обычно находятся в пределах 15% фактических результатов.

Выигрышная калибровка вероятности

Более точный результат, измеряющий, насколько хорошо вероятности выигрыша соответствуют реальным результатам.70% На самом деле вероятность выигрыша 70% В то время калибровка была хорошей.

Еженедельные снимки

OpsIQ фиксирует снимок вашего прогноза каждую неделю (через cron). Со временем вы можете видеть, как улучшается точность вашего прогнозов.

Скачки и предупреждения

Пер-стадийная конверсия

Сколько сделок переходят от каждого этапа к следующему. 80% Переход от квалифицированного к предложению, но только 20% Перейдите от предложения к переговорам, ваши предложения могут потребовать работы.

Показатель выигрыша от источника

Какие источники лидируют, дают больше выигрышей. Инвестируйте в источники с высокой процентной ставкой.

Производительность на одного владельца

Как работает каждый член команды продаж: выигранные сделки, стоимость трубопровода, средний размер сделки, коэффициент выигрыша.

Предупреждения

Песочница (нереалистично низкие вероятности), чрезмерная приверженность (нереально высокая) и рискованная сделка (высоковероятные сделки, показывающие сигналы остановки).

Понимание прогнозируемого падения

Сценарий:
Квартальный прогноз упал с $180,000 то $155,000 с прошлой недели.
Что делать:

Откройте страницу Прогноза и проверьте "Что изменилось". В отчете показано: "Сделка с Acme Corp ($15,000) перешла в "Потерянный", выбран конкурент.$8,000) дата закрытия перенесена на следующий квартал. Новая сделка с ООО "Гамма"$3,000) добавлено на этой неделе". Чистое изменение -$20,000 + $3,000 = -$17,000, объясняя падение с $180 тыс. до $163 тыс. (остальные $8 тыс. объясняются корректировками вероятности по другим сделкам).

CRM (управление связями с клиентами)

Поиск нового бизнеса

Ищущий агент помогает вам найти и исследовать потенциальных клиентов. Опишите своего идеального клиента, добавьте целевые компании и позвольте исследованиям ИИ, оценке и разработке охвата первого касания.

ищущий
ищущийСписок потенциальных компаний, найденных ИИ с соответствующими заметками, оценками и кнопкой разъяснительной работы.ищущийрабочее пространствоПерспективы, найденные агентом СДРNorthwind Ltd.SaaS · 50 персонал · поддержка найма88Проект информационно-пропагандистской работыКобальт MfgПроизводительность · 200 персонал74Проект информационно-пропагандистской работыРозничная торговля MesaeCommerce · 30 персонал69Проект информационно-пропагандистской работыВега ЗдоровьеЗдравоохранение · 80 персонал63Проект информационно-пропагандистской работы1FINDИсточники ИИ нацелены на аккаунты2ШоуFit & Continent рейтинг3DRAFTПервое прикосновение, написанное для вас
Агент SDR находит целевые компании, оценивает их по форме и разрабатывает программу первого касания для вашего обзора.

одноразовая установка

1
Опишите своего идеального клиента

Перейдите в CRM Configuration > Prospecting. Опишите свой идеальный профиль клиента (ICP): целевые отрасли, размеры компаний, названия должностей, географическая направленность, условия соответствия продукта и минимальный балл соответствия. Пример: "B2B SaaS компании с 50-500 Сотрудники в США/Великобритании, продающие инструменты для разработчиков, с вице-президентом по продажам или главой отдела роста в качестве основного контакта».

2
Добавить целевые компании

Введите домены или имена компаний, которые вы хотите исследовать. Вы также можете позволить ИИ предлагать компании на основе вашего ICP.

3
Результаты обзора результатов исследований

ИИ обогащает каждую компанию доступными данными: размером, отраслью, техническим стеком, последними новостями и оценкой соответствия с объяснением.

4
Утвердить информационно-пропагандистскую работу

Для компаний, которые хорошо себя чувствуют, ИИ составляет персонализированное сообщение первого касания. Проверяйте и одобряйте в очереди.

Приличный забивной

Каждая перспектива получает 0-100 Оценка соответствия на основе пяти факторов:

ПМС подходит

Насколько хорошо компания соответствует вашему идеальному профилю клиента (отрасль, размер, местоположение).

Сигналы экстренной помощи

Есть ли доказательства того, что они нуждаются в вашем продукте сейчас? Сообщения о работе, технологические изменения, жалобы на конкурентов.

Бюджетный прокси

Размер компании, стадия финансирования и показатели доходов указывают на наличие бюджета.

Товарный матч

Насколько ваш продукт актуален для вашего бизнеса, основанного на промышленности и технологиях.

Поддержка

Можно ли эффективно обслуживать этого клиента (временная зона, язык, сложность).

Исследование целевой компании

Сценарий:
Вы должны оценить, стоит ли acme.com.
Что делать:

Добавить acme.com Искусственный интеллект возвращается. 78/100 Причины: B2B SaaS, 120 Сотрудники, базирующиеся в США, недавно наняли вице-президента по продажам (сигнал экстренной помощи), используют конкурента X (совпадение продуктов). Покупка сигналов: посетили вашу страницу ценообразования дважды в прошлом месяце (отслеживание веб-сайта). [email protected] (Вице-президент по продажам.) Подготовленная открывающая ссылка на их недавние посещения страниц с информацией о найме и ценах.

CRM (управление связями с клиентами)

Автоматические последующие последовательности

Последовательности автоматизируют многошаговое отслеживание: сочетание шагов электронной почты, ожидания, задачи, вызова и веб-хука, которые запускаются автоматически после того, как вы одобрите первоначальную отправку.

Последовательности
Последующие последовательностиПоток горизонтальной последовательности: Email, ожидание три дня, Email и затем задача с обнаружением ответа.Последующие последовательностирабочее пространствоПосле того, как вы одобрите первый отправьте →Электронная почтаВступлениеПодожди.3 днейЭлектронная почтаПоследующие мерыЗаданиеЗвони.Шаги могут быть по электронной почте, ожиданию, задаче или веб-хук. Ответ автоматически останавливает последовательность.1AUTOMATEМногоэтапная последующая деятельность2STEPSЭлектронная почта · Ожидание · Задание · Webhook3YOU APPROVEПервый посыл закрыт
Автоматизированное многоэтапное отслеживание (электронная почта, ожидание, электронная почта, задача), которое вы сначала одобряете, и ответ автоматически останавливается.

Как работают последовательности

1
Создать последовательность

Определите шаги: электронная почта, подождите 3 Дни, электронная почта, ожидание 5 дни, задания (вызовите, если нет ответа), электронная почта. Каждый шаг электронной почты имеет шаблон, который вы можете настроить.

2
Зарегистрируйте контакты

Добавьте контакты в последовательность. ИИ также может предложить регистрацию из результатов поиска.

3
Автоматическое исполнение

Шаги выполняются автоматически по расписанию. Если контакт отвечает в любой момент, последовательность автоматически приостанавливается.

4
Результаты отслеживания

Смотрите открытые ставки, скорости ответа, коэффициенты конверсии и отказ от подписки на шаг. Используйте это для оптимизации последовательности.

Понимание ответов

Когда контакт отвечает, ИИ классифицирует ответ:

Положительный

Заинтересован, хочет поговорить. Последовательность пауз, задача, созданная для последующего наблюдения.

Возражение

Есть опасения, но не отрицание. Последовательность пауз, задача, созданная с деталями возражения.

Не подписываться

Хочет прекратить получать сообщения. Контакты постоянно подавляются.

Не сейчас

Заинтересованы, но время не подходящее. Последовательность пауз, слежка за созданной задачей.

Не тот человек

Не тот контакт, последовательность остановлена, контакт отмечен для проверки.

Поддержка

Вопрос поддержки, а не ответ на продажу. Последовательность пауз, создан билет.

Защита от спама

Отказ от обращения

Запросы на отмену подписки выполняются немедленно, и контакт подавляется из всех будущих последовательностей.

Ежедневная рассылка

Ежедневный лимит рабочего пространства (по умолчанию: 1,000 emails). Предотвращает массовые рассылки, которые запускают спам-фильтры.

Предельный контакт

Максимальное сообщение 1 на контакт в день. Предотвращает переполняемость отдельных людей.

Перегрузка крышки

Шаги, превышающие дневной предел, откладываются на следующий день. Они никогда не сбрасываются и не пропускаются.

Что произойдет, если контакт откроет билет поддержки во время последовательности?+

Последовательность автоматически приостанавливается. Поддержка имеет приоритет над охватом. Последовательность может быть возобновлена вручную после решения проблемы поддержки.

Можно ли пройти A/B-тестирование?+

Не в пределах последовательностей, но можно создать две последовательности с разными сообщениями и сравнить их результаты.

CRM (управление связями с клиентами)

Инструменты роста

Одна страница в CRM, которая поддерживает двигатель роста: повторяющийся доход (MRR / ARR), каталог продуктов, формы захвата лидов, ссылки на бронирование и маршрутизация свинца. Все здесь записывается прямо в CRP, поэтому представление формы или забронированный звонок - это контакт с историей, а не строка в электронной таблице.

Что живет на странице

Повторяющиеся доходы

Доход

MRR и ARR, проецируемые из вашего реального регистра выставления счетов. Подписки группируются из платежей на платформу, цикл выставления счета выводится из платежных пробелов, а подписка истекает, когда оплата просрочена в течение 1.5 раз его цикла. Клиенты автоматически связываются с контактами CRM, когда реестр переносит свою электронную почту.

Каталог товаров

Каталог

Один источник правды о том, что вы продаете. Цитаты вытягивают имя и цену списка из каталога, а принятые котировки скапливаются в доход по продукту. Архив продуктов они никогда не удаляют.

Формы захвата свинца

захват

Каждая форма получает размещенную страницу плюс код встраиваемого iframe для вашего собственного сайта. Представления становятся контактами, владелец получает уведомление, а ваши правила маршрутизации назначают лидерство.

Ссылки на бронирование

Расписание

Поделитесь ссылкой, пусть потенциальные клиенты выбирают бесплатный слот. Слоты уважают рабочее время организатора, часовую зону и существующие встречи. Бронирование создает встречу, отправляет потенциальным клиентам подтверждение и уведомляет организатора.

Маршрутизация свинца

маршрутизация

Правила территории работают сначала, затем правила поля (соответствуют полю, такому как страна или источник), а затем круглое поле через пул представителей. Он маршрутизирует КОНТАКТЫ и ДЕАЛЫ одинаково, независимо от статуса сделки: выигранная сделка все еще нуждается в владельце для присвоения комиссии, ответственности за счет учетной записи и последующего наблюдения, а в режиме видимости владельца или команды непринадлежащая запись невидима для всех, кроме менеджера. Записи, созданные автоматизацией (продажа разъемов, чат, импорт), не несут интерактивного создателя, поэтому они маршрутизируются теми же правилами о создании, а не оставлены без владельца. Все, что уже имеет владельца, никогда не переназначается.

Создайте свою первую форму

1
Инструменты открытого роста

Перейдите в CRM, затем Инструменты роста, а затем раздел Формы захвата свинца.

2
Назовите его и выберите поля

Введите имя и раздельный список полей, например имя, адрес электронной почты, телефон, сообщение.

3
Share или Inbed

Скопируйте размещенную ссылку, чтобы поделиться ею где угодно, или скопируйте вставленный код и вставьте его на любую страницу вашего сайта.

4
Приближаются часы

Каждое представление представляет собой CRM-контакт с заданной формой, уведомлением владельца и автоматической маршрутизацией.

💡
Публичные страницы захвата используют собственный адрес вашего рабочего пространства. Облачные рабочие места используют назначенный им поддомен (компания.opsiq. help), поэтому ссылка всегда разрешает правильные данные.

Встроенная защита

Боты видят успех, а вы ничего не видите.

Скрытое поле медового котла бесшумно отбрасывает ботов.

Ограниченная ставка

Десять заявок в час на IP адреса для всех форм и заказов.

Согласие остается честным

Отправка формы не дает маркетингового согласия. Только явный флажок согласия делает.

Нет двойного бронирования

Слот повторно проверяется на наличие новой проверки доступности в момент бронирования.

Откуда берутся данные о повторяющихся доходах?+

Из той же книги по торговле, которую использует ваша страница продаж, питается разъемами для выставления счетов. Используйте повторную синхронизацию после подключения новой платформы.

Могу ли я использовать формы без веб-сайта?+

Да. Каждая форма имеет размещенную страницу на вашем собственном адресе, которая работает отдельно, с или без JavaScript.

CRM (управление связями с клиентами)

Мессенджер (SMS и WhatsApp)

Один разъем, до двадцати шлюзов. Подключите SMS и WhatsApp провайдеров, которыми вы на самом деле пользуетесь, пометьте один как по умолчанию, и выберите любой из них при отправке сообщения контакту. Согласие проверяется CRM перед тем, как с любым шлюзом свяжутся.

Настройте его

1
Включить разъем

На странице Connectors откройте Messaging Hub (SMS и WhatsApp) и включите его.

2
Добавить провайдера

В одном и том же ящике или в CRM Growth Tools выберите шлюз из выпадающего (Twilio, Vonage, Termii, Meta WhatsApp Cloud, Infobip и т. д.), вставьте его API учетные данные и подключитесь. Вы можете добавить несколько, включая один и тот же шлюзов дважды с разными аккаунтами.

3
Проводите веб-хук

Каждый вход провайдера показывает свой собственный веб-хук URL Вставьте его в настройки отчета о доставке шлюза и входящего сообщения, чтобы получить статус доставки и ответы обратно в OpsIQ.

4
Отправить из контактной

Откройте контакт и воспользуйтесь кнопкой SMS или WhatsApp. Если канал поддерживает более одного провайдера, селектор позволяет выбрать; в противном случае используется по умолчанию.

Согласие приходит первым

Только согласие

Неизвестное согласие не является согласием. Отправка отказывается, если согласие SMS явно не предоставлено. WhatsApp использует то же самое согласие.

Не-контакт всегда побеждает

Флаг «не контактировать» блокирует каждый канал, независимо от того, что еще установлено.

Подавление почитаемое

Контакты в списке подавления никогда не сообщаются.

Отказы называют причину

Заблокированная отправка сообщает вам, почему именно так, чтобы вы могли исправить данные вместо того, чтобы гадать.

Разработчики: The Webhook Contract

URL форма

https://your-address/opsiq/cron/messaging_webhook.php?sk=SITE_KEY&e=ENTRY_ID&t=TOKEN. Токен для входа отчеканен, когда провайдер подключен и никогда не вращается при редактировании.

Формы поняты

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":"..."}.

последствия

Отчеты о доставке штамп строки реестра охвата, который несет идентификатор сообщения поставщика как доставленный или отскочивший. Входящие сообщения соответствуют контакту по номеру телефона внутри рабочего пространства, земля как сообщение. полученная деятельность и отметить ответ разговора.

Режим отказа

Неправильные или недостающие токены отвечают 403. Неизвестные полезные нагрузки считаются и игнорируются, никогда не бывают фатальными, поэтому неправильно настроенный шлюз не может сломать конечную точку.

Какие ворота поддерживаются?+

Twilio, Vonage, Plivo, MessageBird, Sinch, Infobip, Telnyx, ClickSend, Termii, Africa’s Talking, BulkSMS, Textlocal, Meta WhatsApp Cloud, 360dialog, SMSAPI, Gupshup, Kaleyra, D7 Networks, Hubtel и пользовательский HTTPS-хук для всего остального.

Безопасны ли учетные данные?+

Полномочия хранятся в зашифрованном виде в настройках разъема и никогда не перекликаются с браузером. Редактирование записи с помощью пустого секрета сохраняет сохраненный.

Может ли ИИ отправлять сообщения?+

Да, через зарегистрированные действия, которые требуют подтверждения и запуска того же самого входа согласия. ИИ также может перечислить подключенных провайдеров, чтобы объяснить, что доступно.

CRM (управление связями с клиентами)

Сохранение и рост клиентов

Управление жизненным циклом помогает вам защитить существующий доход. Каждый счет получает оценку риска, оценку здоровья, оценку расширения и рекомендуемую книгу успеха.

Жизненный цикл
Совет по жизненному циклуДоска жизненного цикла клиента (Onboarding, Active, At-risk, Renewal) с батончиками здоровья на каждой карте.Жизненный циклрабочее пространствоОБООРДОВАНИЕАккордЗдоровье 40активныйГлобэкЗдоровье 88ИнтихЗдоровье 76АТ-РИСКсойлентЗдоровье 28РЕНЕВАЛЬНЫЙУмбраОбновление в 12dРасширение +$8k1STAGESНа борту для обновления2SCOREDЗдоровье и экспансия3PLAYBOOKРекомендован следующий ход
Клиенты проходят через абордаж, активные, подверженные риску и обновление, каждый из которых оценивается по здоровью и расширению с помощью игровой книги.

Совет по жизненному циклу

Сценическая карта

Визуальная доска, показывающая, где находится каждый счет: Свинец, Перспектива, Возможность, Клиент, Расширение, Обновление, Риск, Чурнед.

Счета рисков

Учетные записи отмечены высоким риском оттока. На каждой из них показан лучший драйвер (спайк поддержки, бездействие, сбой платежа) и рекомендуемая игра сохранения.

Расширение возможностей

Учетные записи, которые показывают сигналы готовности покупать больше: высокий уровень использования, запросы на функции, запросы плана.

Обновления должны быть

Счета с предстоящими датами обновления, сортированные по уровню риска и стоимости выручки.

Как OpsIQ обнаруживает риск оттока

Риск вычисляется из нескольких сигналов, слитых вместе:

CRM сигналы

Справляйтесь со здоровьем, бездействием, недавними потерями, снижением вовлеченности.

Сигналы поддержки

Открытый подсчет билетов, скачки объема билетов. Негативные настроения, эскалация.

Вовлечение в работу с продукцией

Частота входа, использование функций, посещения страниц, API Звонки.

Сигналы для выставления счетов

Неудачные платежи, просроченные счета-фактуры, запросы на понижение рейтинга, посещения страниц отмены.

Игровые книжки

Сохранить игру

Для учетных записей, подверженных риску: проактивно связаться с ними, решить проблему, предложить поддержку, увеличить при необходимости.

Обновление игры

Для предстоящих обновлений: подтвердить удовлетворенность, пересмотреть использование, текущую стоимость, предложить стимул, если это необходимо.

Расширение игры

Для готовых к росту аккаунтов: представьте варианты обновления, поделитесь историями успеха, продемонстрируйте рентабельность инвестиций.

Игра в усыновление

Для недоиспользования учетных записей: предлагать обучение, делиться передовым опытом, включать функции, которые они не используют.

Поймать хуйню, прежде чем это случится

Сценарий:
Клиент, который обычно входит в систему ежедневно, не вошел 2 Недели, и они открылись. 3 Билеты на поддержку в этом году.
Что делать:

Совет по жизненному циклу отмечает эту учетную запись как «На риске» с драйверами: бездействие (14 дни с момента последнего входа в систему и всплеск поддержки ()3x Рекомендуемая игра: проактивный аутрич-звонок, чтобы понять, что происходит. Есть ли проблема с продуктом? Они оценивают конкурентов? Раннее вмешательство может спасти счет.

CRM (управление связями с клиентами)

Держите ваши данные в чистоте

Агент Data Steward автоматически находит и исправляет проблемы качества данных: дубликаты, недостающие поля, несоответствия и устаревшие записи.

Управляющий данными
Управляющий даннымиСписок проблем качества данных (дублированный, отсутствующий, устаревший, формат), каждый с одним кликом исправить действие.Управляющий даннымирабочее пространствоПроблемы с данными, которые обнаружил агент Стюардадублировать[email protected] и [email protected]слияниеПропавший12 Контакты не имеют компанииобогащатьнесвежий38 Нетронутые сделки для 90+ днейОбзорФорматНомера телефонов в форматах 4Исправь все1CATCHESДупы, пробелы, застой2EXPLAINSПочему каждый из них помечается3FIXESС вашего согласия
Агент Стюарда сохраняет вашу CRM-систему чистой, находя дубликаты, пробелы, устаревшие записи и плохие форматы, фиксируя одобрение.

Что ловит

Дублировать контакты

Несколько записей для одного и того же лица (например, [email protected] и [email protected] Стюард предлагает слить их.

Пропавшие данные

Контакты без электронной почты, сделки без сумм, компании без доменов. Предлагает заполнение из доступных источников.

Несвязанные записи

Сделки без ассоциированных контактов, контакты без компаний. Предлагает связать на основе домена электронной почты и контекста.

Несоответствия

Сделка на стадии «Выиграл» с вероятностью 20%, контакт помеченный «Клиент» без сделок, компания с несоответствующей отраслью.

Неправильные этапы

Сделки, которые слишком долго находились на одной и той же стадии или контакты, жизненный цикл которых не соответствует их деятельности.

Как использовать

1
Откройте список управляющих

Перейдите в CRM и найдите раздел Data Steward (или откройте его из CRM Health).

2
Утвердить безопасные исправления

Зеленые предметы безопасны: четкие дубликаты, очевидные недостающие данные.

3
Просмотреть остальное

Янтарные предметы нуждаются в вашем суждении: возможные дубликаты с небольшими различиями, предлагаемые изменения стадии, связывание компании.

Уборка дублирующих контактов

Сценарий:
Стюард нашел "Джона Смита"[email protected])" и "Джей Смит ([email protected])": одно и то же электронное письмо, разные имена дисплеев.
Что делать:

Стюард предлагает слияние: вести запись с большей активностью, объединять сделки и действия другой записи. Просмотреть предложение, при необходимости откорректировать сохранившееся отображаемое имя и утвердить. История обеих записей сохраняется в объединенном контакте.

CRM (управление связями с клиентами)

Создайте свою CRM

Build My CRM позволяет описать вашу настройку CRM на простом английском языке. OpsIQ генерирует проверенный, обратимый план и применяет его при одобрении.

Создайте свою CRM
Создайте свою CRMОписание естественного языка слева, создающее сгенерированный CRM-план этапов, полей и сегментов справа.Создайте свою CRMрабочее пространствоОпишите свой бизнесМы являемся агентством веб-дизайнаПродажа ежемесячных скидок иОдноразовые проекты для маленькихпредприятий.Создайте свою CRMГенерированный планЭтапы: Ведущий → RetainerТипы сделок: фиксатор, проектПоле: ежемесячная стоимостьСегменты: SMB, агентствоПоследовательность: бортовоеУтвердить и применять1DESCRIBEПросто английский язык2AI PLANSЭтапы, поля, сегменты3APPROVEПрименяется · нет кодирования
Опишите свой бизнес на простом английском языке; OpsIQ составляет всю CRM (стадии, поля, сегменты) и применяет ее при одобрении.

Как это работает

1
Опишите, что вы хотите

Введите простое английское описание вашей настройки CRM. Пример: «Создать трубопровод обновления с этапами: предстоящий, контактный, переговоры, продление, потерян. Оценка ведет выше, когда они рассматривают цену дважды».

2
Пересмотреть план

OpsIQ показывает предварительный просмотр того, что он создаст: трубопровод, этапы, вероятности стадии, правила подсчета очков, правила жизненного цикла.

3
Применять

Нажмите Применить для выполнения плана. Каждое изменение записывается как пакет, который вы можете отменить одним щелчком мыши.

4
Откат назад, если это необходимо

Если что-то не так, нажмите Undo, чтобы вернуть весь пакет. Ваш CRM возвращается в прежнее состояние.

Что можно построить

Трубопроводы и этапы

Создавайте названные трубопроводы с пользовательскими стадиями, вероятностями по умолчанию и порогами гниения.

Правила подсчета

Повысить показатели лидерства, основанные на поведении: «Выше в цене», «Снижается в цене при посещении страницы карьеры».

Правила жизненного цикла

Автоматически продвигайте этапы жизненного цикла: «Перейдите к SQL, когда они запрашивают демо», «Превратитесь к клиенту, когда сделка будет выиграна».

Пользовательские поля

Добавьте поля в контакты, сделки или компании: текст, номер, дата, выбор, флажок, URL, электронная почта.

Контрольный список квалификаций

Определите контрольный список MEDDICC или BANT, против которых оцениваются оценки тренера по сделке.

Создание нефтепровода обновления

Сценарий:
Вы управляете подписками SaaS и нуждаетесь в конвейере для продления.
Что делать:

Тип: "Создать трубопровод для обновления. Этапы: 90 Выходные дни.10%), 60 Выходные дни.25%), Связанный (40%), Переговоры (60%), Обновленная (100%), Чурнэд (0% Установить порог для гниения 14 дней. OpsIQ Создает план, вы просматриваете его и нажимаете Apply.Трубопровод появляется на вашей странице Pipeline немедленно.

Что, если я опишу что-то невозможное?+

Если вы попросите что-то вне его возможностей (например, «Интегрируйте с моим пользовательским API»), он отклонит запрос и объяснит, что он может сделать вместо этого.

Могу ли я отменить изменения?+

Да. Каждое действие Build My CRM фиксируется как обратимый пакет. Перейдите в CRM Health > Измените историю, чтобы увидеть все пучки и отменить любой из них.

CRM (управление связями с клиентами)

Настройка CRM на свой путь

Ручная конфигурация CRM для команд, которые предпочитают нажимать на тип. Все настройки, которые может создать Build My CRM, также доступны в виде традиционных полей форм.

Трубопроводы и этапы

Создавайте, переименовывайте и удаляйте трубопроводы и этапы. Установите вероятность выигрыша по умолчанию на этапе. Устанавливайте порог гниения (дни без активности до того, как сделка будет отмечена «застопорилась»).

Пользовательские поля

Добавить поля в сделки, контакты или компании. Типы полей: текст, номер, дата, выбор (снижение с предопределенными опциями), флажок, URL, электронная почта. Пользовательские поля появляются на профиле объекта и в фильтрах.

Контрольный список квалификаций

Определите контрольный список, который использует Тренер по сделкам для оценки сделок. Выберите MEDDICC, BANT или пользовательский набор критериев. Каждый пункт может быть отмечен как обязательный или необязательный.

Правила жизненного цикла

Определите автоматические переходы этапов: когда контакт отвечает условию (просмотр цен, отправка формы, совершение покупки), их этап жизненного цикла продвигается автоматически.

Правила определения лидеров

Увеличить или уменьшить баллы за лидерство на основе поведения. Примеры: "Просмотренная страница ценообразования = +15 баллы", "Загруженный whitepaper = +10 "Посетил страницу карьеры = -"5 Минимальное количество баллов может быть установлено (например, "должна учитывать ценообразование по меньшей мере") 2 "Времена".

Сохраненные взгляды

Создайте именованные комбинации фильтров + сорт для контактов, сделок или компаний. Поделитесь своими взглядами со своей командой. Установите вид по умолчанию на тип объекта.

Добавление правила скоринга

Сценарий:
Вы хотите, чтобы контакты, которые просматривают вашу страницу ценообразования дважды или более, получили более высокий балл.
Что делать:

Перейдите в Настройка CRM > Правила оценки потенциальных клиентов. Нажмите Добавить правило. Установить: Событие = "pageview", URL содержит =/pricing", минимальное число = 2, Повышение балла = +20. Сохранить. При следующем запуске счетчика контакты, соответствующие этому правилу, получат +20 к их лидирующему счету.

CRM (управление связями с клиентами)

CRM Health Check-Up (Проверка здоровья)

CRM Health - это страница самодиагностики, которая проверяет правильность настройки и бесперебойную работу вашего CRM.

Проверка здоровья
CRM Health Check (Проверка здоровья)Кольцо оценки здоровья по 92 рядом с контрольным списком проверок пропуска и предупреждения о конфигурации.CRM Health Check (Проверка здоровья)рабочее пространство92ЗдоровьяТрубопроводные ступени сконфигурированыConnector Linked & ИмпортАгенты ИИ могут!Отсутствие активной последовательности!12 Контакты пропавшей компании1АУДИТПроверяйте свою установку2FLAGSЧего не хватает3ШоуОбщее число
Одностраничный аудит CRM: общий балл здоровья плюс контрольный список того, что настроено правильно и что все еще требует внимания.

Что проверяет

Схема

Таблицы баз данных существуют и имеют правильные столбцы. Если миграция была пропущена, CRM Health будет отмечать ее.

Агенты ИИ

Все CRM-агенты (Capture, Data Steward, Deal Intelligence и др.) зарегистрированы и здоровы. Green = запущенный, amber = требует внимания, red = ошибка.

Маршруты

Маршруты CRM API и конечные точки AJAX регистрируются и вызываются.

Действия ИИ

Каталог действий CRM зарегистрирован в Реестре действий. Если действия отсутствуют, самоисцеление CRM Health происходит путем их перерегистрации.

Подсчет данных в реальном времени

Общие контакты, компании, сделки, задачи, мероприятия и события. Полезно для проверки импорта и постоянного сбора данных.

После проверки

После первой установки CRM откройте CRM Health и проверьте, все ли чеки зеленые. Если какие-либо из них янтарь или красный, нажмите пункт для диагностического объяснения и предлагаемого исправления.

Как часто нужно проверять CRM Health?+

Проверьте после первоначальной настройки, после крупных обновлений и всякий раз, когда поведение CRM кажется неправильным. CRM Health самостоятельно заживляет многие проблемы (например, отсутствие регистрации действий) просто открывая страницу.

CRM (управление связями с клиентами)

CRM-соединения для разработчиков

CRM предоставляет полный публичный REST API и исходящие веб-хуки, чтобы он соответствовал любому стеку без ручного экспорта.

API конечные точки

аутентификация

API ключ (авторизация: Bearer opq_...) с объемом crm.read или crm /api/v1.php Действия и site_key.

Контакты

crm. contacts. list (поиск + фильтр), crm

сделки

crm.deals.list,crm.deals.detail,crm.deals.create,crm.deals.update,crm.deals.advance (все через доверительный уровень).

Мероприятия

crm. activities. list (срок для контакта/сделки), crm,activities,record (лог нового действия).

События

crm. events. list (поток с длительными изменениями с помощью курсора since_id), crm,eventS. catalog (список доступных типов событий).

Создать сделку через 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
}

События Web-cook

opsiq.contact.upsert

Увольняется при создании или обновлении контакта. Это контактное событие для подписки; отдельного созданного события нет.

contact.lifecycle_changed

Увольняется, когда контакт переходит на другую стадию жизненного цикла.

contact.status_changed

Увольняется, когда меняется статус контакта.

contact.conversion

Увольняется, когда конверсия записывается против контакта.

contact.tag_added

Увольняется, когда к контакту добавляется тег.

contact.erased

Увольняется, когда контакт стирается для запроса на конфиденциальность.

crm.deal.created

Увольняется, когда создается сделка.

crm.deal.stage_changed

Увольняется, когда сделка переходит на другую стадию.

crm.deal.won

Увольняют, когда сделка закрывается как выигранная.

crm.deal.lost

Увольняют, когда сделка закрыта как проигранная.

crm.company.created

Увольняют, когда создается компания.

crm.task.created

Увольняется, когда создается новая задача (ручная или созданная ИИ).

email.replied

Увольняется, когда контакт отвечает на информационное письмо.

email.bounced

Увольняют, когда отскакивает информационное письмо.

💡
Звони. webhooks.events.list для авторитетного набора на вашей установке, с полезной нагрузкой каждого события. Он генерируется из самого кода доставки, поэтому он никогда не может не согласиться с тем, что действительно приходит. Полный список также появляется в разделе Webhooks.

Все события веб-хука подписаны HMAC и повторно проверены на отказ. Подпишитесь на URL в Настройки > Webhooks или список опросов crm. events. list с since_id для прочного корма для изменений.

Синхронизация CRM-контактов с Google Sheets

Сценарий:
Вы хотите, чтобы каждый новый контакт CRM появлялся в Google Sheet для вашей маркетинговой команды.
Что делать:

Настройка подписчика webhook для opsiq.contact.upsert. Наведите его на веб-приложение Google Apps Script или webhook Zapier URL. Полезная нагрузка включает имя контакта, адрес электронной почты, компанию, рейтинг потенциального клиента и источник. Сценарий добавляет строку в Google Sheet для каждого нового контакта.

CRM (управление связями с клиентами)

Сегменты

Сегменты сохраняют многоразовые контактные фильтры для просмотра CRM, аутрич-продвижения, рекламных акций и других инструментов, учитывающих аудиторию.

Экран продукта
СегментыРедактор сегмента объединяет условия, показывает количество совпадений в реальном времени и позволяет оператору выбрать фильтр или прикрепленный снимок.Сегментырабочее пространствомодаЖивиLOGICВСЕMATCHES1,248ЖИВОЙ ВИДЕО РАБОТЫКлиентская стадияАктивный клиентПравилоПоследняя активностьВ течение 30 днейПравилоСтранаравным ВеликобританииПравилоВысокая степеньПо крайней мере, 70Правило1CHOOSE MODEЖивой или снимок2ADD RULESВсе или любой3REUSEКампании и CRM
Редактор сегмента объединяет условия, показывает количество совпадений в реальном времени и позволяет оператору выбрать фильтр или прикрепленный снимок.

A Живой сегмент пересчитывает из текущих данных всякий раз, когда они используются. прикрепленный снимок Замораживает текущий список участников, что полезно, когда аудитория не должна меняться после одобрения.

Выбрать ВСЕ когда каждое условие должно соответствовать или любой когда одного условия достаточно. Просмотрите подсчет живого перед сохранением. Сегменты системы могут быть видны, но защищены от обычного редактирования.

CRM (управление связями с клиентами)

Забивающий гол

Правила оценки лидов превращают поведенческие и профильные сигналы в согласованный показатель, который могут использовать продажи и автоматизация.

Экран продукта
Забивающий голСвинцовый счет показывает активные правила, окно прокатки и изменение положительного или отрицательного балла.Забивающий голрабочее пространствоПравила12SCORED8,412HOT LEADS286ЖИВОЙ ВИДЕО РАБОТЫЦеновая деятельность3+ Посещение в 14 дни+20Купить ключевое словоСодержит миграцию или предпринимательство+15Риск поддержки30 дней, в течение которых-10Доверенный источникпартнерская ссылка+121DESCRIBE RULEИспользуйте простой английский2REVIEW FIELDSСигнал, окно, точки3RESCOREПрименяется в рабочем пространстве
Свинцовый счет показывает активные правила, окно прокатки и изменение положительного или отрицательного балла.

Создатель правил ИИ может превратить простую английскую инструкцию в структурированное правило. Каждое правило все равно должно быть пересмотрено перед активацией: подтвердить активность или ключевое слово, минимальное количество, прокатка окна и изменение баллов.

Позитивные и отрицательные правила могут сосуществовать. Сопоставить рабочее пространство после изменения правил материала, чтобы существующие контакты оценивались в соответствии с новой моделью. Оценки могут подавать сегменты, маршрутизацию, поиск и условия рабочего процесса.

CRM (управление связями с клиентами)

Лидер продаж

В таблице лидеров сравниваются представители, использующие квотирование, выигранные доходы, комиссионные и открытые трубопроводы за выбранный месяц.

Экран продукта
Лидер продажЕжемесячный список лидеров ранжирует торговых представителей, сохраняя видимость выручки, комиссии и открытого трубопровода.Лидер продажрабочее пространствоPERIODиюльTEAM QUOTA82%Победа£184 тыс.ЖИВОЙ ВИДЕО РАБОТЫАмина104% квота · £62 тыс. вон1-йБен88% квота · £51k вон2-йРита76% квота · £43k вон3-йОткрытый трубопровод312 фунтов стерлингов в командеОбзор1CHOOSE MONTHСравните один период2CHECK QUOTAПобеда в репа3COACHИспользование контекста трубопровода
Ежемесячный список лидеров ранжирует торговых представителей, сохраняя видимость выручки, комиссии и открытого трубопровода.

Достижение квоты имеет смысл только тогда, когда каждый представитель имеет текущую квоту и сделки имеют правильного владельца, сумму, валюту и близкий статус. Используйте таблицу лидеров для коучинга и признания, а не как единственную меру качества; сочетайте ее со здоровьем сделки, активностью и точностью прогноза.

CRM (управление связями с клиентами)

Утверждение сделки

Утверждение сделки требует подписи менеджера, прежде чем можно будет отметить выигранные сделки с высокой стоимостью.

Экран продукта
Утверждение сделкиПолитика утверждения определяет два пороговых значения, и очередь показывает ожидающие, одобренные и отклоненные решения.Утверждение сделкирабочее пространствоPOLICYвключенныйWAITING6OLDEST3hЖИВОЙ ВИДЕО РАБОТЫУровень 1Сделки с £10,000МенеджерУровень 2Сделки с £50,000старшийОбновление предприятия£72,000, запрашиваемый БеномВ ожиданииПроект по миграции£18,500, запрошенный РитойУтвержденный1SET THRESHOLDS0 отключает ярус2REQUESTRep представляет сделку3Решилодобрять или отклонять
Политика утверждения определяет два пороговых значения, и очередь показывает ожидающие, одобренные и отклоненные решения.

Включить политику и установить уровень 1 и уровень 2 пороговой величины. 0 Когда неменеджер пытается выиграть сделку на уровне или выше порога, OpsIQ создает запрос на одобрение вместо того, чтобы молча менять этап.

Менеджеры и полные администраторы не блокируются политикой. Каждое решение должно сохранять запрашивающего, одобряющего, время и причину для проверки.

CRM (управление связями с клиентами)

Правила жизненного цикла

Правила жизненного цикла автоматически перемещают контакты между этапами, когда их текущие данные соответствуют сохраненному состоянию.

Экран продукта
Правила жизненного циклаПравила жизненного цикла оцениваются по приоритету; первое правило соответствия изменяет стадию контакта.Правила жизненного цикларабочее пространствоактивный7RUNSНочьюPRIORITYСамый высокий первыйЖИВОЙ ВИДЕО РАБОТЫВедущий → Квалифицированныйбалл ≥ 60 и недавняя деятельностьПриоритет 100Квалифицированный → КлиентСобытие покупки существуетПриоритет 90Клиент → В зоне рискаБез активности в течение 60 днейПриоритет 70Риск: → КлиентНовая покупка или ответПриоритет 601PICK STAGESОт и до2DEFINE FILTERСегментный стиль JSON3ORDER RULESПобеда в первом матче
Правила жизненного цикла оцениваются по приоритету; первое правило соответствия изменяет стадию контакта.

Каждое правило имеет стадию источника, стадия назначения, активный флаг, приоритет и фильтр стиля сегмента. Задание с запланированным жизненным циклом оценивает в первую очередь более высокие приоритеты и останавливается после первого соответствия контакту.

Правила должны быть взаимопонятными. Избегайте двух активных правил, которые могут перемещать один и тот же контакт в противоположных направлениях во время одного и того же прогона. Проверяйте фильтр против сегмента перед его активацией.

CRM (управление связями с клиентами)

Поток активности CRM

Поток активности в рабочем пространстве объединяет события, связанные с клиентами и операциями, поэтому команды могут исследовать происходящее без открытия каждого модуля.

Экран продукта
Деятельность CRMПоток активности переплетает чат, билет, электронную почту, веб-хук, конверсию и аномалии с фильтрами и пагинацией.Деятельность CRMрабочее пространствоСобытия2,804CUSTOMERS1,126ANOMALIES14ЖИВОЙ ВИДЕО РАБОТЫЧат решен[email protected] · АИСейчасБилеты ответилиT-1048 · Биллинг4 метраВходящий случайsubscription.upgraded12 мкмпреобразованиеЗаказ #7788 · £14919 мкм1FILTERСобытие и клиент2OPEN CONTEXTПрыгнуть к рекорду3PAGE RESULTSДержите расследования ограниченными
Поток активности переплетает чат, билет, электронную почту, веб-хук, конверсию и аномалии с фильтрами и пагинацией.

Фильтр по типу события, дате, контакту или состоянию клиента (включая платящих клиентов). Корм является читаемой моделью записанной активности; он не заменяет исходный билет, разговор, сделку или запись разъема. Откройте связанную запись перед принятием чувствительного действия.

CRM (управление связями с клиентами)

Рабочие процессы

Рабочие процессы реагируют на событие и выполняют упорядоченную серию действий, включая отложенные шаги, возобновляемые cron.

Экран продукта
Рабочие процессыРабочий процесс показывает свой триггер, завершенные действия, задержку ожидания и следующий шаг.Рабочие процессырабочее пространствоактивный9RUNNING42несостоявшийся1ЖИВОЙ ВИДЕО РАБОТЫтриггерcontact.createdНачинатьШаг 1Отправить приветственный e-mailСделаноЗадержкаПодождите 2 днейЖдатьШаг 2Создать задачу продажСледующий1CHOOSE TRIGGERСобытия начинаются2ORDER STEPSМеры и задержки3MONITORПрохождение через cron
Рабочий процесс показывает свой триггер, завершенные действия, задержку ожидания и следующий шаг.

Создайте рабочий процесс, выбрав триггер, добавив шаги в порядок и включив его. Задержки хранятся, а не удерживаются запросом браузера; унифицированная крона возобновляет должный рабочий процесс.

Встроенные стартовые шаблоны включают приветствие после регистрации, пост-покупка благодарности и демо-подтверждение. Клонируйте шаблон, заменяйте его получателей/контента, затем тестируйте с контролируемой записью перед широкой активацией.

Ретрит не должен отправлять дублирующие запросы о движении денег или создавать дублирующие записи.

Поддержка

Билеты

Билеты - это ваш официальный канал поддержки. У них есть отделы, приоритеты, цели SLA, вложения, внутренние заметки и полный поток разговоров. OpsIQ админ, форма / вставка билета, прием электронной почты, эскалация чата, разъем или API.

Билеты
Подробнее о билетеБилет с мета-боковой панелью (приоритет, отдел, SLA, статус), нить разговора и AI Draft и действия по возврату средств.Билетрабочее пространствоТ-12345ПриоритетвысокийДепартаментБиллингSLA3h 12 м слеваСтатусОткрытьМеня дважды обвиняли в том, что яПодписка на июнь 3.ИИПодтверждено дублированиеПлата, обработка возврата.Проект ответаВозврат1THREADEDПолный разговор + заметки2SLA & ROUTINGПриоритет, таймеры3AI DRAFTОтвет, написанный для вас
Каждый билет имеет свой приоритет, отдел, таймер SLA и полную нить, а ИИ может подготовить ответ для вас.

Как продаётся билет

1
Билет прибывает

Клиент отправляет сообщение по электронной почте, эскалация чата, встраивание билета или администратор создает его. Билет получает уникальный идентификатор (например, T-)12345).

2
Схема

ИИ читает субъект и тело, присваивает приоритет (низкий/нормальный/высокий/срочный), предлагает отдел и обнаруживает чувства. Это происходит автоматически, если включена сортировка.

3
Ответить

Агент открывает билет, читает контекст (профиль клиента, данные платформы от разъемов, предыдущие билеты) и пишет ответ.

4
Закрыть

Когда вопрос решен, агент закрывает билет. Клиент уведомлен. Если клиент отвечает после закрытия, билет открывается автоматически.

Меры в отношении билетов

Отдел перемен

Переместите билет в другой отдел (например, от General до Billing). Полезно, когда первоначальная маршрутизация была неправильной.

Назначение агента

Присвоение билета конкретному члену команды. Приписанный агент видит билет в их виде «Мои билеты».

Добавить внутреннюю ноту

Напишите записку, видимую только персоналу. Использовать для: результатов расследования, причин возврата средств, инженерного контекста, предыдущих обязательств. Внутренние заметки никогда не появляются клиентам.

Слияние билетов

Объедините дубликаты билетов от одного и того же клиента. Слияние предмета билета получает [МЕРГЕД] тег. Все сообщения с обоих билетов сохранены в выжившем билете.

Канонический ответ

Вставьте предварительно написанный шаблон ответов. {{customer_name}} и {{ticket_id}} Они автоматически заменяются.

ИИ переписывает

Пусть ИИ улучшит ваш ответ на черновик: отрегулирует тон, укоротит/удлинит, исправит грамматику или переведёт. Вы просматриваете результат перед отправкой.

Изменить приоритет

Устанавливается на низкий, нормальный, высокий или срочный. Приоритет влияет на таймеры SLA и порядок сортировки.

Изменить статус

Настройка на открытие, ожидание, ожидании клиента, решение или закрытие.

Пример работы: обращение с недовольным клиентом

Электронная почта: «Мне дважды предъявили обвинения за подписку»

Сценарий:
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.
Что делать:

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.

департаменты

Создавайте отделы в Настройках > Билеты > Отделы. Общие отделы: общие, Биллинг, технические, продажи, злоупотребление, бортовое обслуживание. Каждый отдел может иметь разные правила автоматического реагирования, знания ИИ и командные задания.

Консервированные ответы

Создавайте шаблоны многоразовых ответов в Настройках > Билеты > Отзывы с консервированными метками.

Пример шаблона консервированного ответа
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}}

Слияние билетов

Когда клиент отправляет один и тот же вопрос несколько раз (по электронной почте и в чате или по двум отдельным электронным письмам), вы можете объединить дубликаты. Перейдите к билету, нажмите «Слияние», выберите другой билет для слияния. Выживший билет получает все сообщения от обоих билетов. Субъект объединенного билета получает тег [MERGED], чтобы указать, что он был объединен.

Подключенные платформы следуют за слиянием. Когда билеты также находятся на подключенной платформе (WHMCS, Zendesk, клиентский портал SaaS), слияние происходит и там: платформа объединяет свои копии, так что в тикете, который вы держите, отображается первое сообщение и ответы на слившийся тикет. Слитый тикет, который никогда не был на этой платформе, добавляет свой разговор к сохраненному тикету платформы как частную заметку сотрудника, но никогда в качестве ответа клиенту по электронной почте. WHMCS) объединяет OpsIQ билеты таким же образом.

Приоритет и SLA

низкий

Несрочные вопросы, запросы на функции, общая обратная связь. Первый ответ: 24 часов.

Нормальный

Стандартные вопросы поддержки. Первый ответ на задачу: 8 часов.

высокий

Первый ответ на задачу: 4 часов.

срочно

Отключение обслуживания, инцидент безопасности, потеря данных, ошибка выставления счетов. Первый ответ: 1 час.

Таймеры SLA начинаются, когда билет создан и останавливаются, когда статус «Ожидание клиента». Если цель SLA пропущена, билет выделяется и необязательно увеличивается.

Могут ли клиенты видеть внутренние записи?+

Внутренние заметки строго только для персонала. Они не появляются на портале билетов клиентов, уведомлениях по электронной почте или любой поверхности, обращенной к клиенту.

Что происходит, когда на закрытый билет отвечают?+

Билет автоматически открывается и возвращается в активную очередь. Команда уведомляется о новом ответе.

Могу ли я заблокировать билет, чтобы предотвратить дальнейшие ответы?+

Да, используйте опцию Lock Thread, чтобы не допустить добавления новых ответов как заказчиком, так и ИИ. Полезно для разрешения споров или закрытых расследований.

Поддержка

Сервисная студия: SLA, статус и качество

Комната управления тем, как ведет себя ваша операция поддержки: политики SLA с лестницами эскалации, календари рабочих часов, принудительное прохождение статуса, настройки CSAT и переключатели функций предприятия. Откройте его со страницы «Билеты» (кнопка Service Studio в строке операций).

Политика SLA

Каждый новый билет получает первую реакцию и крайний срок разрешения от наиболее конкретной активной политики: отдел + приоритет бьет департамент, бьет приоритет, бьёт по умолчанию. Крайние сроки автоматически приостанавливаются, пока билет находится в ожидании или на паузе.

Эскалационные лестницы

Вместо одного действия по нарушению политики можно определить до шести шагов: например, предупредить цессионария о нарушении. 75% В окно, предупреждайте менеджеров. 100% переназначить на имя агента в 150% Каждый шаг зажигается ровно один раз на билет.

Рабочие часы и календари

С рабочими часами SLA часы горят только в рабочее время, поэтому билет, открытый вечером пятницы, не нарушается к субботе. Названные календари (таймзона, дни, часы, праздники) могут быть прикреплены к индивидуальным политикам для команд в разных регионах.

Поток состояния

От / до матрицы, ограничивающей изменения статуса администраторов, с предустановленным стилем Zendesk. Автоматизация, входящая электронная почта и ответы на билеты клиента всегда освобождены, поэтому строгая матрица никогда не может заглушить конвейер.

Утверждение

Агенты запрашивают выписку на билете (возврат средств сверх порога, исключения из правил). Именованный автор или любой Полный администратор принимает решение с примечанием; запрашившие никогда не могут одобрить свой собственный запрос.

Билетные отношения

Ссылочные билеты как связанные, дублирующиеся, родительские / детские или блокирующие; раздельные ответы на новый связанный билет (обратная сторона слияния без отправки электронной почты клиенту); следуйте за билетами для уведомлений в приложении и необязательно CC-адреса электронной почты последователя на исходящих ответах.

Live Inbox и столкновения

С включенным почтовым ящиком в реальном времени новые билеты и ответы появляются для агентов в течение нескольких секунд через существующий поток уведомлений. На билете агенты видят, кто еще просматривает, и получают предупреждающий баннер, когда товарищ по команде уже пишет ответ. Кнопка «Оговорить» на один клик присваивает себе билет.

ИИ-ориентированная маршрутизация

Правила маршрутизации могут совпадать по сигналам сортировки ИИ: приоритет, категория, настроения и риск эскалации, а также типизированные значения пользовательского поля из формы запроса портала. Правила, использующие эти условия, остаются в состоянии покоя до тех пор, пока функция не включена.

💡
Каждый бизнес переключает корабли. Включение одного в Service Studio → Качество и автоматизация - это опция; оставляя их, сохраняет поведение, аналогичное до обновления.
Почему клиент может открыть закрытый билет, когда моя матрица запрещает открывать закрытый →?+

Матрица регулирует только действия ADMIN. Ответы, полученные от клиентов, ответы на электронную почту и автоматизация намеренно освобождаются, поэтому строгая политика никогда не может заблокировать клиентов или сломать конвейер.

Заменяют ли лестницы SLA старые нарушения?+

Нет. Политика, сохраненная одним действием по нарушению, продолжает работать без изменений. Лестница заменяет одно действие только на политику, в которой вы определяете шаги.

Поддержка

Автоответ на билеты и эскалация

Автоответ позволяет ИИ автоматически реагировать на новые билеты. Эскалация перемещает билеты в другой отдел, когда ИИ обнаруживает специализированные потребности. Обе функции работают через собственные билеты и созданные по электронной почте билеты.

автоответчик
Автоответчик для тикетовПоток: новый билет, двухминутная задержка, ответ ИИ от знаний и контекста, затем отправленный или сохраненный в виде черновика.автоответчикрабочее пространствоКогда прибывает новый билетНовый билетлюбой источникЗадержка2 minОтветы AIKB + контекстотправленили проектЕсли человек ответит во время задержки, автоответ будет отменен. Намерение может перерасти в другое ведомство первым.1DELAYЛюди получают первый шанс2AI REPLIESКБ + контекст3OR ESCALATEМаршрут по намерениям
Новые билеты получают короткую задержку (чтобы люди могли прыгать), затем ответ ИИ от вашего знания, отправленный или поставленный в очередь в виде черновика.

Как работает автоответ

1
Билеты появляются

Новый билет создается из любого источника (электронная почта, чат, портал, API).

2
Ответ на график

OpsIQ ожидание настроенной задержки (по умолчанию: 2 Это дает агентам возможность ответить первыми.

3
Первый ответ выиграл

Если агент отвечает во время задержки, автоматический ответ отменяется.

4
Создавать и отправлять

ИИ считывает билет, проверяет базу знаний, контекст разъема и историю клиента, затем пишет ответ. Ответ отправляется (или выстраивается в очередь в виде черновика для обзора, в зависимости от настроек).

Как работает эскалация

1
Настройка отделов

Установите, какие отделы могут получать эскалации (например, Биллинг может быть увеличен от общего, Технический может быть повышен от общего).

2
Классифицировать билет

Перед автоматической ответной реакцией ИИ классифицирует намерение билета: выставление счетов, техническое обслуживание, возврат средств, злоупотребление и т. Д.

3
Переехать, если нужно

Если намерение билета совпадает с отделом эскалации, то билет перемещается. Внутренняя записка объясняет почему.

4
Создавайте новый голос

Ответ генерируется с использованием знаний и обучения AI в отделе назначения.

Ссылки на настройки

Включено автоматическое реагирование

Включите, чтобы включить автоматическое получение билетов.

Разрешенные департаменты

Какие отделы могут получать автозапчасти. Начните с отделов низкого риска (General, Sales) до включения выставления счетов.

Задержка

How long to wait before the AI replies (in seconds). Default: 120 seconds (2 minutes). Set to 0 for instant replies.

Расписание задержек

Опционально устанавливайте различные задержки в рабочее время против часов после работы.

Остановите ответ admin

Если человек ответит первым, отмени автоответ.

Эскалация возможна

Включите автоматическую маршрутизацию отдела на основе намерения билета.

Отделы по эскалации

На какие отделы можно перераспределить билеты.

Статус эскалации

Какой статус устанавливать при эскалации (например, Открытый, В ожидании)

Эскалационная записка

Добавить ли внутреннюю записку, объясняющую причину эскалации.

Электронные билеты

Билеты, созданные по электронной почте (через опрос почтового ящика или доставку в MX-piped), следуют тем же правилам автоматического реагирования и эскалации. Ответ AI отправляется в виде ответа на электронную почту клиенту. Электронные проекты идут в очередь черновиков для рассмотрения при настройке.

Будет ли ИИ автоматически отвечать на вопросы выставления счетов?+

Только если вы позволяете автоответчику для отдела выставления счетов. Мы рекомендуем начинать с автоматического ответа на выставление счетов и включать его только после того, как вы обучили ИИ всеобъемлющим знаниям в области выставления счета и тщательно протестировали.

Что делать, если ИИ дает неправильный ответ?+

Если клиент отвечает, что ответ был неправильным, то должен вмешаться агент-человек. Просмотрите историю ИИ, чтобы понять, почему ИИ дал неправильный ответ, а затем обновите базу знаний или обучение ИИ, дабы предотвратить повторение этого.

Могу ли я проверить автозаполнения до их отправки?+

Да. Установите режим доставки на "Проект" вместо "Автоотправка". Перед отправкой в очереди Драфтов для проверки человеком появятся автоответчики.

Поддержка

Билетный портал встроен

Встроенный портал билетов позволяет добавить интерфейс управления билетами на любой веб-сайт. Клиенты могут просматривать свои билеты, создавать новые и отвечать, все без ввода администратора OpsIQ.

Как это работает
Билетный портал встроенПортал поддержки, встроенный в веб-сайт, показывающий клиенту свои билеты и кнопку нового билета.yoursite.com/supportЦентр поддержкиНовый билетТвои тики#1042 · Вопрос о возврате средствОткрыть#1038 · Настройка помощирешенный#1031 · Копия счетаВ ожидании1EMBEDДобавить на любой сайт2SELF-SERVEПокупатели видят свои билеты3NO LOGINИдентификацию обрабатывают надежно
Билетный портал встроен

Три встраиваемых аромата

Встроенный inline

Отдает билетный портал внутри дива на своей странице. Портал принимает полную ширину своего контейнера.

Плавающий виджет

Показывает плавающую кнопку, которая открывает билетный портал в панели.

аутентифицированный

Требуется подписанный токен, который клиенты видят только в своих билетах.

Установка

Билет и чат встроены
<!-- 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.

Генерация токенов идентичности

Для аутентифицированного режима ваш сервер подписывает кратковременный токен с секретом сайта. Этот токен говорит OpsIQ, кто клиент, так что они видят только свои собственные тикеты. Это стандартная HS256 JWT: любая библиотека JWT работает. Секрет никогда не попадает на страницу.

PHP · генерировать токен идентичности
<?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, генерация токенов идентичности
// 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 });
}

Виджеты

Список билетов

Список с возможностью поиска, заполненный статусом. На "Жду тебя" выделены билеты на флаги, которые команда ответила.

Разговор втиснутый

Полный вид разговора с богатым текстом, вложениями и временными метками.

Проект автосбережения

Реплика клиента автоматически сохраняется, поэтому он не теряет работу, если уходит.

Живой опрос

Виджет опросов для новых ответов каждые ~12 секунд.

Resolve / Открыть

Клиенты могут решить или открыть свои билеты одним щелчком мыши.

Внутренние заметки персонала никогда не показываются клиентам в билетном вставке. Это жесткая граница безопасности.
Поддержка

Чат-бокс

Чат-входящие - это место, где ваша команда управляет живыми разговорами клиентов. Он показывает активные чаты, назначенные беседы, чаты с искусственным интеллектом и архивную историю.

Чат-бокс
Чат-боксВходящие в чат трехпанельные агенты: список разговоров, живой разговор с чипом проекта ИИ и панель контекста посетителя / CRM.Чат-боксрабочее пространствоДжей ДиДжейнГде мой заказМОМенсавопрос о выставлении счетовРТРитаИИ обрабатываетсяГде мой заказ?Сегодня в США · UPSПроект готовОтветь.ВизитёрДжейн ДоуСША - Chrome3 прошлые заказыLTV$480CRM (управление связями с клиентами)Стадия: Клиент1UNIFIEDКаждый живой чат2CONTEXTПосетитель + CRM панель3AI ASSISTПроект и переписка
Один почтовый ящик для каждого живого чата, список разговоров, нить с черновиком AI нажатием и полный контекст CRM + посетитель.

Управление разговорами

Активные чаты

В настоящее время ведутся переговоры. Зеленая точка = клиент печатает или недавно активен.

управляемый ИИ

Разговоры, на которые отвечает ИИ. Вы можете взять на себя управление в любое время, щелкнув «Присоединиться».

Приписанный мне

Разговоры, которые вам специально поручены.

Ждать

Разговоры, когда клиент ждет ответа.

архив

Завершенные разговоры. Поиск по ключевым словам, дате и клиенту.

Отказ от ИИ для человека

Когда вы берете на себя разговор с ИИ, следуйте этим трем правилам:

1
Приветствую лично

Представь себя по имени. "Привет, это Сара из команды поддержки".

2
Ссылочный контекст

Покажи, как ты читаешь разговор. "Я вижу, что ты спросил о статусе заказа".

3
Установить ожидания

Расскажите клиенту, что будет дальше. «Я сейчас изучаю это и через несколько минут получу ответ».

Переключение AI в / выключено за разговор

Используйте переключатель AI в верхней части каждого разговора. Когда ИИ включен, он генерирует ответы. Когда выключен, только агенты человека могут ответить. ИИ запоминает контекст разговора даже при отключении и обратном включении.

Режим выхода / Out of hours

Настройка рабочих часов в настройках. Вне рабочих часов ИИ может: (1) Продолжайте отвечать клиентам, (2) Показать сообщение «в сторону» и создать билет для последующего наблюдения, или (3) Отключить чат полностью и показать форму билета. Выберите поведение, которое соответствует вашей модели поддержки.

Обработка жестких разговоров

1
Сохраняй спокойствие.

Не поддавайтесь эмоциональной напряжённости клиента, признайте его разочарование без защиты.

2
Собирать факты

Перед ответом соберите соответствующую информацию: детали заказа, статус счета, предыдущие билеты.

3
Рано эскалировать

Если ситуация включает в себя возврат средств, юридические угрозы, злоупотребления или безопасность, перерастет в старшего члена команды, а не пытаться справиться с этим самостоятельно.

Могу ли я иметь командный чат (агента агенту)?+

Да, используйте внутренние заметки в разговоре для связи с другими агентами. Эти заметочки никогда не видны клиенту.

Что происходит, когда я закрываю чат?+

Разговор переходит в Архив. Если клиент отправляет новое сообщение позже, создается новый разговор.

Поддержка

Каналы обмена сообщениями

Подключите WhatsApp, Facebook Messenger, Instagram DM, Telegram и LINE, чтобы сообщения, которые клиенты уже отправляют вам, приходили в тот же почтовый ящик, что и ваш веб-чат, ответил тот же помощник ИИ.

Каждый канал ведет себя одинаково, как только подключен: сообщение клиента становится разговором в Chat Inbox, ваш помощник ИИ отвечает на него с использованием тех же знаний и инструкций, что и ваш чат на сайте, и любой агент может взять на себя управление.

Как выглядит соединение

Facebook Messenger и Instagram

Один клик. Открытые разъемы.→Facebook Messenger & Instagram DM, нажмите Connect, войдите в учетную запись Facebook, которая управляет вашей страницей, и выберите страницу. Instagram поставляется с ней, когда ваша страница имеет профессиональную учетную записи Instagram.

WhatsApp

Один щелчок, где ваш провайдер предлагает его: открыть коннектор Messaging Hub и использовать Connect WhatsApp, затем следуйте Meta's руководство регистрации выбрать или создать свой номер WhatsApp Бизнес. В противном случае вставьте учетные данные из любого 20 шлюзов.

Telegram

Две минуты. Сообщение @BotFather в Telegram, отправьте /newbot, выберите имя и имя пользователя заканчивающееся на "bot", и вставьте токен, который он вам даст, в коннектор Telegram. _OpsIQ зарегистрирует webhook для вас.

Лайн

Создайте сообщение API канал на developer.line.biz, вставить секрет канала и токен доступа, затем скопировать веб-хук URL показанный OpsIQ Переключитесь на LINE и выключите свои собственные автоматические реплики.

СМС

Добавьте провайдера (Twilio, Vonage, Termii и другие) в Центр обмена сообщениями с его учетными данными и номером отправителя.

Каждый разъем показывает свои пошаговые инструкции внутри ящика, в том числе точно, что копировать и где. Вам никогда не нужны учетные данные разработчиков для вариантов с одним щелчком мыши.

Включаем канал

Подключение канала не запускает его. Настройки → Клиентский чат → продвинутый → Каналы обмена сообщениями, включить мастер переключатель и затем отдельный канал. Каждый канал имеет свой собственный автоматический коммутатор AI, поэтому вы можете пилотировать на одном перед открытием остальных.

1
Подключите канал

В Коннекторах, используя инструкции в ящике этого коннектора.

2
Проверьте соединение

Он делает настоящий звонок провайдеру и говорит вам, что не так, если что-то есть.

3
Включите каналы обмена сообщениями

Настройки→Клиентский чат→Продвинутый. Включите главный выключатель, затем канал.

4
Отправьте себе сообщение

Из другой учетной записи отправьте сообщение своей странице, номеру или боту. Он должен появиться в Chat Inbox в течение нескольких секунд и получить ответ ИИ.

Ответить Windows

Платформы обмена сообщениями ограничивают время, которое бизнес может ответить после того, как клиент пишет. OpsIQ показывает оставшееся время на каждом разговоре и применяет правило для вас.

WhatsApp

24 часов с последнего сообщения клиента. После этого вы можете отправить только утвержденный шаблон, который настраиваете в той же вкладке Advanced.

Messenger и Instagram

24 часами для обычных ответов; агенты могут отвечать до 7 Несколько дней спустя, в соответствии с пособием на человека-агента Меты.

Telegram, LINE, SMS

Нет наложенного окна платформы.

⚠️
Если ответ не удается, потому что окно закрыто, разговор показывает почему. Это правило платформы, а не предел OpsIQ.

Общие вопросы

Видят ли клиенты, что ИИ ответил?+

Только если вы им скажете. Ответ приходит с вашей страницы, номера или бота точно так же, как и человеческий ответ. Ваши инструкции ИИ контролируют тон и идентифицируют ли они себя.

Может ли агент взять на себя среднее общение?+

Да. Откройте разговор в чат-входящие и нажмите "Присоединиться". ИИ останавливается, вы вводите, а клиент видит непрерывную нить на своей стороне.

Что делать, если отключили канал?+

Использовать Disconnect на разъеме. История сообщений сохраняется; новые сообщения просто перестают поступать, и платформе велено прекратить их отправку.

Могут ли два рабочих пространства использовать одну и ту же страницу Facebook?+

Нет. Страница принадлежит одному рабочему пространству за раз. Соединение ее где-то еще перемещает его, и первое рабочее пространство перестает получать сообщения, поэтому отключайтесь намеренно, а не пересоединяйтесь в другом месте.

Поддержка

Реальные разговоры в чате

Эти примеры показывают, как хорошо обученный ИИ-клиент должен обрабатывать общие сценарии. Используйте их для тестирования вашего обучения ИИ и выявления пробелов.

10 Примеры разговоров

1 Возвращающийся клиент спрашивает о заказе

Сценарий:
Клиент: Здравствуйте, я сделал заказ 3 дней назад и пока не получил никакого уведомления об отправке. Заказ #ORD-_5523.
Что делать:

ИИ должен быть: (1) Посмотреть заказ #ORD-5523 через разъем. (2) Сообщите о текущем состоянии и отслеживании информации, если таковая имеется. (3) Если заказ задерживается, признайте задержку и предоставьте ориентировочный график. (4) Не придумывайте статус доставки, если разъем не имеет его.

2 Перспектива спрашивать о ценах

Сценарий:
Клиент: Сколько стоит ваш план Pro? Предлагаете ли вы ежегодный расчет?
Что делать:

ИИ должен быть: (1) Ответ из базы знаний с текущими ценами. (2) Объясните разницу между ежемесячным и годовым выставлением счетов. (3) Если ответа нет в базе знаний, скажите так и предложите подключить их к продажам. (4) Не придумывайте цены, которых нет в базе знаний.

3 Разгневанный клиент требует возврата денег

Сценарий:
Клиент: Это смешно! Ваш продукт не работает и я хочу вернуть свои деньги СЕЙЧАС.
Что делать:

ИИ должен быть: (1) Признайте разочарование спокойно. (2) Запросите номер заказа или адрес электронной почты. (3) Объясните процесс возврата. (4) Создайте билет поддержки или перейдите к агенту. (5) Не обещайте возврат, который требует человеческого одобрения.

4 Двойной кейс для выставления счетов

Сценарий:
Клиент: В этом месяце мне дважды предъявили обвинения. Мой банк показывает два обвинения в $29.99.
Что делать:

АИ должен:1) Признать свою озабоченность.2) Собрать соответствующие данные (электронная почта, даты предъявления обвинений).3) Объясните, что вопросы выставления счетов требуют рассмотрения человеком.4) Создать билет в отдел выставления счетов с подробной информацией.5) Установить приоритет на Высоком.

5 Многоязычный клиент

Сценарий:
Клиент: Бонжур, je voudrais savoir si vous livrez en France?
Что делать:

ИИ должен быть: (1) Отвечайте на языке клиента, если этот язык поддерживается. (2) Ответьте на вопрос о доставке во Францию из базы знаний. (3) Если язык не поддерживается, ответьте на языке по умолчанию и укажите, какие языки доступны.

6. Послечасовой разговор

Сценарий:
Клиент: Здравствуйте, кто-нибудь есть? Мне нужна помощь с моим счетом.
Что делать:

ИИ должен быть: (1) Если вы настроены для послечасового ИИ, отвечайте и помогайте. (2) Если после часа создаете билеты, скажите: «Наша команда в настоящее время находится в автономном режиме. Я создал для вас билет поддержки и кто-то будет следить за вами в рабочее время» (3) Укажите номер билета.

7 Предпокупатель сравнения покупок

Сценарий:
Клиент: Как ваш продукт сравнивается с конкурентом X?
Что делать:

ИИ должен быть: (1) Опишите сильные стороны вашего продукта фактически. (2) Не стоит злословить конкурента. (3) Если в базе знаний есть страница сравнения, ссылка на нее. (4) Если клиент спрашивает о функциях, которых у вас нет, будьте честны.

8 Клиенту нужна рекомендация

Сценарий:
Клиент: Я управляю небольшим интернет-магазином с 100 заказами в месяц. Какой план подходит мне?
Что делать:

ИИ должен быть: (1) Задавайте уточняющие вопросы, если это необходимо (например, какие функции имеют наибольшее значение). (2) Рекомендуем план, основанный на базе знаний. (3) Объясните, почему этот план соответствует их потребностям. (4) Упомяните, что они могут начать с меньшего плана и обновить позже.

9 Клиент пытается получить несанкционированную скидку

Сценарий:
Клиент: Я видел в интернете, что вы даете скидки 50%.
Что делать:

ИИ должен быть: (1) Вежливо объясните текущие акции, если таковые существуют. (2) Не создавайте и не обещайте скидки, которых нет в базе знаний. (3) Если клиент настаивает, предложите связать его с отделом продаж.

10 Клиенту нужна помощь с функцией

Сценарий:
Клиент: Как я экспортирую свои данные? Я не могу найти кнопку экспорта.
Что делать:

ИИ должен быть: (1) Пошаговые инструкции из базы знаний. (2) Включите точный путь страницы и местоположение кнопки. (3) Если функция требует определенного плана, упомяните об этом. (4) Если такой возможности нет, будьте честны и предложите альтернативу.

Поддержка

Маршрутизация чата и эскалация

Когда живому чату нужен реальный человек, ИИ отвечает на два вопроса: какая команда владеет этим разговором и кому следует его рассказать. Оба настроены в Настройки, клиентский чат, Поток поддержки, под отделами маршрутизации ИИ.

Выбираем, какие отделы ИИ может использовать

Две коробки на этой панели - белый список. Отделы, перемещенные вправо, единственные, куда ИИ может направить или открыть билеты. Все, что осталось слева, невидимо для него, даже если отдел существует и укомплектован. Начните сужать и добавьте отделы по мере их укомплектации.

💡
Если ни один отдел не включен, OpsIQ возвращается к устаревшей маршрутизации в каждом департаменте, который он может найти.

Кто получает эскалацию

Это та часть, которую большинство людей ожидают настроить и не нуждаются. Когда ИИ эскалирует чат, OpsIQ переписывает людей, прикрепленных к этому отделу. Вы управляете этим списком один раз, на странице «Команда и департаменты», и за ним следуют как эскалация билетов, так и эскалация чата.

Члены группы Департамента

Каждый активный администратор, прикрепленный к отделу, получает свою копию. Приостановленные и отключенные аккаунты пропускаются.

Главный администратор

Используется, когда члены команды не прикреплены, поэтому эскалация все еще достигает кого-то.

Никто не прикреплен

Доставка невозможна. На панели маршрутизации указано, что отдел красным цветом и ИИ не сообщает посетителю о том, что человек был уведомлен.

⚠️
Собственный адрес электронной почты департамента намеренно никогда не используется в качестве получателя. Этот адрес является почтовым ящиком для входных билетов, одна входящая почта сопоставляется с открытыми билетами. Отправленная туда эскалация будет возвращена обратно как новый билет, а не достигнет человека.

Отдел по сбору мусора

Именно один отдел несет на себе всеобщую отметку. Он получает чаты, которые ИИ не мог уверенно разместить, и это последнее средство, а не обычный путь.

1
Ясные сигналы побеждают

Биллинговая формулировка переходит в биллинговый отдел, хостинг и формулировку ошибки — в технический, покупка формулировок — в продажи.

2
Классификатор ИИ пытается сделать следующий шаг

Если ключевые слова неубедительны, модель читает разговор и выбирает из включенных отделов.

3
И тогда все

Только когда оба приходят пустыми, все отделы получают чат.

4
Охранник продаж

Если все зацепки в отделе продаж, и посетитель не показал сигнал покупки, OpsIQ ищет поддержку или технический отдел вместо этого, так что обычные вопросы поддержки не накапливаются в продажах.

Что рассказывает посетитель

Если письмо с эскалацией выйдет, ИИ сообщит посетителю, что команда была уведомлена. Если он не может выйти, ИИ скажет что-то честное и предложит им оставить сообщение в чате. Он не будет утверждать, что человек был предупрежден, когда не было отправлено электронное письмо.

В панели говорится: «Никто не уведомит» департамент+

К нему никто не прикреплен. Откройте Team и Departments, приложите хотя бы одного активного администратора, затем перезагрузите страницу настроек. Панель читает в прямом эфире.

Могут ли эскалации в чате пойти куда-то, кроме команды?+

Да. Пользовательский адрес, ранее сохраненный для отдела, по-прежнему перекрывает список команд. Новые настройки должны прикреплять людей к отделу вместо этого, поэтому есть одно место для обслуживания.

Почему мой бродяга проскочил?+

Проверьте, является ли это отделом продаж. Если это так, и посетитель не показал сигнал покупки, OpsIQ маршруты в службу поддержки или технический отдел нарочно.

Поддержка

Электронные почтовые ящики и черновики

OpsIQ может подключаться к почтовым ящикам электронной почты для автоматического создания билетов из входящей электронной почты и отправки ответов в виде электронной почты.

Электронная почта
Email для билетаIMAP почтовый ящик слева, подаваемый входящие электронные письма в резьбовый билет с AI-драфтом ответа справа.Электронная почтарабочее пространство[email protected] · IMAPЗапрос на возврат средств[email protected]Не могу войти[email protected]Копия счета-фактуры[email protected]Билет #1042Электронная почта · БиллингЯ бы хотел получить возмещение задублированный заряд...ПроектОтзывы и отправка ответа1INGESTIMAP и пересылка в2TO TICKETSавтоматически3AI DRAFTSОтветы на обзор
Переведите электронную почту через IMAP (или переадресацию), превратите каждый в резьбовый билет и дайте ИИ подготовить ответ для рассмотрения.

Подключение почтового ящика

Протокол

IMAP (большинство провайдеров) Gmail API Google Workspace или Microsoft Graph (Outlook) 365).

Необходимые настройки

Хост, порт, шифрование (SSL/TLS), имя пользователя, пароль или пароль приложения, папка (обычно INBOX).

Картографирование департаментов

Картографируйте почтовый ящик в билетный отдел. Электронные письма на [email protected] создают билеты в отделе «Поддержка».

Настройка Gmail (шаг за шагом)

1
Включить 2-Step Verification

Перейдите в учетную запись Google > Безопасность > 2-Step Verification и включите его.

2
Создайте пароль приложения

Перейдите в учетную запись Google > Безопасность > Пароли приложений. Выберите «Почта» и «Другие» (OpsIQ"Копировать 16-символический пароль.

3
Введите OpsIQ

Перейдите в Email > Mailboxs > Добавить. Настройте хост: imap.gmail.com Порт: 993 Шифрование: SSL Имя пользователя: [email protected], пароль: Пароль приложения.

4
Тест

Если это удастся, OpsIQ начнет опрос новых электронных писем с настроенным интервалом.

Outlook 365 настройка

1
Проверить IMAP включено

В настройках Outlook > Mail > Sync email, убедитесь, что включен IMAP.

2
Используйте пароль приложения или современный auth

Если MFA включен, создайте пароль приложения. В противном случае используйте свой обычный пароль.

3
Введите OpsIQ

Ведущий: outlook.office365.com Порт: 993 Шифрование: SSL Имя пользователя: [email protected].

cPanel Настройка веб-почты

1
Найти IMAP

в cPanel > Учетные записи электронной почты, нажмите свою учетную запись электронной почты для IMAP настройки.

2
Введите OpsIQ

Ведущий: обычно mail.yourdomain.com или имя хоста вашего сервера, порт: 993 (SSL или 143 (STARTTLS), имя пользователя: полный адрес электронной почты.

Проекты электронной почты AI

Когда автоответ устанавливается в режиме «Проект», ИИ генерирует черновики ответов, которые появляются в очереди Drafts.

Обзор

Прочитайте проект и проверьте точность.

Редактировать

Измените текст, тон или контент перед отправкой.

Отправить

Утвердить проект и отправить его в качестве ответа по электронной почте.

выбросить

Опустить проект, если он не является целесообразным.

Автоотправка

Если уверенность достаточно высока и включена автоотправка, черновики отправляются автоматически после настраиваемой задержки.

Почему электронные письма не конвертируются в билеты?+

Проверить: (1) Является ли почтовый ящик подключенным и здоровым? Ищите зеленый статус в электронной почте > Почтовые ящики. (2) Работа с кронами работает? Для опроса по электронной почте нужен крон. (3) Отфильтровывается или перемещается в папку, отличную от INBOX?

Можно ли использовать несколько почтовых ящиков?+

Да, каждый почтовый ящик можно отобразить в другом отделе. [email protected] идет на поддержку, [email protected] Идет к Биллингу.

Поддержка

Удовлетворенность клиентов (CSAT)

CSAT измеряет удовлетворенность билетами и чатом, выявляет неприятные ответы и сравнивает результаты ИИ и человека.

Экран продукта
Удовлетворенность клиентовСтраница CSAT сочетает в себе карты оценки, отслеживание детракторов, комментарии, сбои в работе отдела и агента и обратную связь чата.Удовлетворенность клиентоврабочее пространствоОтветы386AVERAGE4.6POSITIVE91%ЖИВОЙ ВИДЕО РАБОТЫПоследующие меры в отношении детракторов12 Реакции оценены 1–2ОбзорОпросы билетовОтправлено 24h после закрытияавтоматическийОтзывы о чатеИИ 4.5 · Человек 4.7сравниватьАгентский взглядОценка и ответный счетТренер1WATCH AVERAGEИспользуйте тренд, а не один балл2FOLLOW DETRACTORSПрочитайте комментарий3COMPARE FAIRLYИИ и человек
Страница CSAT сочетает в себе карты оценки, отслеживание детракторов, комментарии, сбои в работе отдела и агента и обратную связь чата.

Ticket surveys are scheduled after closure (normally 24 hours later). A positive response is a score of 4 or 5. Use the detractor queue for scores of 1 or 2 and read the ticket/conversation before contacting the customer.

Отзывы в чате сообщаются отдельно для бесед, разрешенных ИИ и управляемых человеком. Для ранжирования агентов или моделей не следует использовать низкие размеры выборки.

Поддержка

Команда e-mail транслирует

На странице платформы электронной почты авторизованный оператор может отправить одноразовое сообщение всем активным агентам, выбранным агентам или отделу и просмотреть историю отправки.

Экран продукта
Платформа электронной почтыКомпозитор электронной почты команды показывает аудиторию, тему, сообщение и историю доставки в прошлом.Платформа электронной почтырабочее пространствоРЕЦИПИТЕЛЬ12DELIVERED11несостоявшийся1ЖИВОЙ ВИДЕО РАБОТЫАудиторияВсе активные агентывыбранныйСубъектИюльская поддержка ротаГотовыПосланиеГрафик и записки об эскалацииГотовыИсторияПредыдущие трансляции и результатВидишь?1CHOOSE PEOPLEВсе, выбранные или команда2WRITE CLEARLYТема и сообщение3REVIEW HISTORYПодтверждает результат
Композитор электронной почты команды показывает аудиторию, тему, сообщение и историю доставки в прошлом.

Эта страница предназначена для внутренних оперативных сообщений, а не для маркетинга клиентов. Выберите наименьшую правильную аудиторию, предварительно просмотрите имена и адреса, затем отправьте. Доставка использует настроенный исходящий путь электронной почты и записывает результат.

Поддержка

Почтовые ящики, доставка и входящая электронная почта

Настройте, как OpsIQ отправляет электронную почту, превращает входящие сообщения в билеты и доказывает, что отправитель готов.

Экран продукта
Настройки электронной почтыНастройки электронной почты сочетают в себе исходящую маршрутизацию, от идентификации, приема почтового ящика, проверки доставки и тестовой электронной почты.Настройки электронной почтырабочее пространствоВнеземнойSMTPMAILBOXES3ДЖОНПассажирЖИВОЙ ВИДЕО РАБОТЫПредпочтительный разъемSMTP / разъем провайдерасконфигурированныйОтличие от идентичностиSupport <[email protected]>ГотовыIMAP почтовый ящик[email protected] INBOXопросДоставкаSPF · DKIM · DMARCПассажир1CHOOSE OUTBOUNDКоннектор или SMTP2CONNECT INBOXIMAP или трубка3ТестОтправить и проверить
Настройки электронной почты сочетают в себе исходящую маршрутизацию, от идентификации, приема почтового ящика, проверки доставки и тестовой электронной почты.

Исходящий email

Полные администраторы могут выбрать предпочтительный разъем электронной почты. OpsIQ возвращается в конфигурацию SMTP Установить узнаваемое имя / адрес, отправить тест и проверить 24- часовые показатели успеха/неудачи.

Почтовые ящики

IMAP почтовый ящик нуждается в имени, адресе электронной почты, целевом отделе, хосте, порту, режиме безопасности, имени пользователя, пароле, папке, состоянии опроса и выборе сертификата. Опрос сейчас Проверить прием пищи перед ожиданием кроны.

Мгновенная труба

На одном и том же сервере почтовая труба может передавать необработанное сообщение RFC822 напрямую. Удаленный почтовый сервер может POST-необработанный сигнал на защищенную входящую конечную точку с помощью своего токена. Оба пути входят в один и тот же трубопровод дедупликации, резьбы и маршрутизации билетов.

Доставка

Проверка SPF/DKIM/DMARC является консультативным доказательством для настроенного Из домена. Зеленая проверка не гарантирует размещение входящих сообщений, но перед отправкой производственных сообщений должен быть исправлен сбой.

Поддержка

Поддержка Portal Studio

Поддержка Portal Studio разрабатывает и публикует опыт поддержки, ориентированный на клиента, без необходимости использования внешних имиджевых активов.

Экран продукта
Поддержка Portal StudioPortal Studio показывает отзывчивый предварительный просмотр наряду с темой, навигацией, знаниями, билетом, помощником, формой, нижним колонтитулом и CSS Контроль.Поддержка Portal Studioрабочее пространствоTEMPLATEсовременныйПРЕВОСПЕЧАНИЕрабочий столГосударствоПроектЖИВОЙ ВИДЕО РАБОТЫТемаЦвета брендов и типографикаРедактироватьНавигацияЗнания, билеты, ассистентРедактироватьФорма билетаПоля, маршрутизация и копированиеРедактироватьпубликоватьПроверяйте и живитеОбзор1CHOOSE TEMPLATEНачнем со структуры2PREVIEW SIZESDesktop для мобильных устройств3PUBLISH SAFELYОбзор затем выпустить
Portal Studio показывает отзывчивый предварительный просмотр наряду с темой, навигацией, знаниями, билетом, помощником, формой, нижним колонтитулом и CSS Контроль.

Используйте шаблон в качестве отправной точки, затем настройте тему, макет, навигацию, поиск знаний, форму билета, помощника, нижний колонтитул, бренд, поведение билетов, пользовательские CSS и общие настройки. Предварительный просмотр рабочего стола, планшета и мобильного телефона перед публикацией.

Поддержка

Пробелы в знаниях

Очередь «разрыва в знаниях» собирает вопросы клиентов, на которые ИИ не мог ответить уверенно, чтобы команда могла улучшить охват.

Экран продукта
Пробелы в знанияхОчередь пропущенных или недоверчивых вопросов отслеживает, решила ли команда их.Пробелы в знанияхрабочее пространствоOPEN GAPS28REPEATED9RESOLVED116ЖИВОЙ ВИДЕО РАБОТЫМиграционные ограниченияЗапросить 14высокийПоддержка выходныхЗапросить 8среднийСроки возвратаЗапросить 6среднийAPI регионЗапросить 3низкий1REVIEW QUESTIONСмотрите контекст разговора2CHOOSE FIXСтатья или скорая3RESOLVEПроверьте следующий ответ
Очередь пропущенных или недоверчивых вопросов отслеживает, решила ли команда их.

Откройте пробел, чтобы прочитать оригинальный вопрос и ближайший разговор, затем выберите правильное исправление: обновите существующую статью, создайте новую статью знаний, добавьте бизнес-факт, исправьте данные разъема или измените инструкции по эскалации. Пометьте, что это разрешилось только после того, как оценка или реальный тест возвращает приемлемый ответ.

Поддержка

Управление страницами статуса

Страница управления статусом сообщает о состоянии службы и инцидентах с использованием компонентов, текущих состояний и обновлений.

Экран продукта
Управление статусомУправление статусом перечисляет компоненты и инциденты, чтобы операторы могли публиковать четкую информацию об услугах с указанием времени.Управление статусомрабочее пространствоOVERALLОперационныйСОГЛАШЕНИЯ7INCIDENTS1ЖИВОЙ ВИДЕО РАБОТЫСайтОперационныйЗеленыйWHMCSПониженное исполнениеСмотри.Проглатывание электронной почтыОперационныйЗеленыйТекущий инцидентAPI латентное расследованиеОткрыть1UPDATE COMPONENTВыберите четкое состояние2POST INCIDENTОбновления с временными метками3RESOLVEЗакрыть резюме
Управление статусом перечисляет компоненты и инциденты, чтобы операторы могли публиковать четкую информацию об услугах с указанием времени.

Последовательно использовать компоненты состояний. Когда инцидент затрагивает клиентов, опубликовать первоначальное уведомление, добавить обновления с отметкой времени как факты меняются и закрыть с кратким резюме разрешения. Не использовать страницу состояния в качестве внутреннего журнала отладки; чувствительная диагностика принадлежит в OpsIQ и серверных журналов.

ИИ

Настройте свой AI

Конфигурация ИИ — это то, где вы выбираете поставщика ИИ, модель и средства контроля затрат. OpsIQ Поддерживает несколько провайдеров: Claude Anthropic), GPT-4o (OpenAI), Gemini (Google) и Grok (xAI). Вы можете использовать свой собственный API ключ BYOK) или управляемый ИИ, если он имеется в вашем плане.

Настройка AI
Конфигурация AIПанель настроек AI: переключатель управляемых ИИ / BYOK, селектор модели и ежемесячный счетчик токенов.Конфигурация AIрабочее пространствоКонфигурация AIпоставщикУправляемый AIВаш ключ (англ.)BYOK)Модельхладнокровие · сбалансированныйЕжемесячный бюджет AI62%1TWO MODESУправляемый ИИ или BYOK2PICK A MODELСкорость vs глубина3BUDGETSТокены Caps & Cost Control
Выберите управляемый ИИ или свой собственный ключ, выберите модель скорости и глубины и ограничьте ежемесячные расходы с помощью токена.

Выбираем поставщика

Claude (Anthropic)

Сильные рассуждения, аккуратность с фактами, умение следовать сложным инструкциям. Модели: клод-соннет-4-20250514 Клод.3.5-sonnet. Лучше всего для: беседы поддержки, технические вопросы, подробный анализ.

GPT-4o OpenAI)

Быстрый, творческий, хорошие общие знания. Модели: gpt-4o, gpt 4o-mini. Лучше всего для: быстрых ответов, творческого письма, широких вопросов знаний.

Gemini (Google)

Хорошие фактические вопросы, поддержка на нескольких языках.gemini-2.0-вспышка,gemini-1.5 Лучше всего для: многоязычная поддержка, фактический поиск.

Грок (xAI)

Быстрые, сжатые ответы. Модели: grok-3-mini-fast. Лучше всего для: быстрых ответов, случайного тона.

BYOK против управляемых ИИ

BYOK (принесите свой ключ)

Вы предоставляете свой собственный ключ API от провайдера. Вы платите поставщику напрямую. Полный контроль над выбором модели и использованием.

Управляемый AI

Искусственный интеллект предоставляется как часть вашего OpsIQ Нет, план. API Использование измеряется с учетом кредитного баланса ИИ вашего плана.

Пошаговая настройка

1
Перейти к AI Configuration

В админ-сервере OpsIQ перейдите в Настройки > Конфигурация AI.

2
Выберите поставщика

Выберите своего поставщика ИИ из выпадающего списка.

3
Введите API ключ

Если использовать BYOK Войди в свой API Для управляемых ИИ это обрабатывается автоматически.

4
Выберите модель

Выберите конкретную модель для использования. Меньшие модели быстрее и дешевле. Большие модели дают более качественные ответы.

5
Испытательное соединение

Нажмите «Подключение к тесту» для проверки ключа API и модели. Зеленая контрольная метка означает успех.

6
Спасти

Нажмите Save, чтобы активировать конфигурацию AI.

Контроль за расходами

Ежемесячный бюджет

Установите максимальные ежемесячные расходы на токены ИИ. Когда бюджет достигнут, функции ИИ изящно ухудшаются (более короткие ответы, отсутствие автоматического ответа), а не полностью прекращаются.

Предельный токен для разговора

Максимальный токен за один разговор. Предотвращает бесконтрольные разговоры от чрезмерного потребления кредитов.

Низкий баланс

Когда ваш кредитный баланс AI падает ниже порога (по умолчанию: 50,000 токены), в админ появляется предупреждение.

Конфигурация рабочего пространства

Конфигурация ИИ — это per-workspace. Если вы управляете несколькими сайтами, то каждое рабочее пространство может использовать другого провайдера, модель и бюджет. Рабочее пространство наследует глобальные дефолты, если не переопределено. Для настройки каждого рабочего пространства: переключиться на рабочее пространство, затем перейти к AI Configuration и сохранить там настройки.

Получение API ключей

Anthropic (Claude)

Пойти console.anthropic.com > API Ключи > Создать ключ. Копировать ключ, начиная с "sk-ant-".

OpenAI (ГПТ)

Пойти platform.openai.com > API Ключи > Создайте новый секретный ключ. Копируйте ключ, начинающийся с "sk-".

Google.Gemini)

Пойти aistudio.google.com Получить API Ключ. Создай ключ для своего проекта. Скопируй ключ.

xAI (Греция)

Пойти console.x.ai > API Ключи, создай и копируй ключ.

Тестирование вашей настройки AI

Сценарий:
После ввода ключа API нажмите «Подключение к тесту». Вы должны увидеть зеленую галочку и образец ответа от ИИ.
Что делать:

Если тест провалится: (1) Проверь это API Ключ правильный (без дополнительных пробелов). (2) Убедитесь, что ваша учетная запись выставлена с поставщиком. (3) Убедитесь, что название модели действительно. (4) Если вы используете управляемый ИИ, убедитесь, что ваша лицензия активна.

Какой провайдер лучше?+

Нет одного лучшего провайдера. Claude отлично подходит для общения в службе поддержки. GPT-4o быстр и универсален. _Gemini хорошо работает с несколькими языками. Попробуйте каждый из них и посмотрите, какой из них приносит наилучшие результаты для вашего конкретного случая использования.

Можно ли сменить провайдера позже?+

Да. Измените провайдера и API ключ в любое время. Существующая история разговоров сохранена. ИИ будет использовать нового провайдера для всех будущих разговоров.

Что происходит, когда у меня заканчиваются кредиты?+

ИИ изящно деградирует: ответы становятся короче, автоответы останавливаются, а администратор показывает предупреждение с низким балансом. Слежение за ядром, билеты и CRM продолжают работать без ИИ.

ИИ

Умный и дешевый клиентский чат

Набор элементов управления, которые делают ваш клиентский чат либо умнее (это приводит к тому, что через учетную запись клиента он работает как агент), либо дешевле (он отправляет ИИ меньше или отвечает за меньшие шаги). Каждый элемент управления по умолчанию и является независимым, включив его, никогда не меняет никакого другого поведения. Большинство из них живут в разделе «Настройки» > «Клиентская чат» > Поведение; некоторые находятся на «Настройка вашего ИИ» и «Обучение вашего ИИ».

Умные ответы (Agent Mode)

Обычный чатбот отвечает на один вопрос с одного взгляда. Агентский режим Включая, помощник может сделать несколько проверок только для чтения в один оборот и перекрестно ссылаться на них, например: «У меня есть открытые билеты, и достаточно ли моего баланса для следующего обновления?» - отвечает в одном ответе с математикой.

Агентский режим

До нескольких просмотров только для чтения на поворот, перекрестные ссылки перед ответом. Включите, когда у вас есть подключенная платформа (WHMCS, Shopify, Stripe, Zendesk и т.д.). Off = сегодняшнее поведение в режиме одиночной просмотра, без изменений.

Глубина мышления для ответов агента

Насколько сильно модель мотивирует сложные повороты (низкий/средний/высокий). Начните с низкого; большинство вопросов поддержки обрабатываются хорошо там.

Модель агента

Связывается более сильная модель только для сложных агентских поворотов, поэтому повседневный чат остается на легкой, дешевой модели и только жесткие повороты платят за глубину.

План наперед · однопроходные ответы (бета)

Крошечный шаг планирования решает, какие поиски нужно провести и нужна ли база знаний, затем отвечает в ОДНОМ основном вызове вместо нескольких шагов. Подзадача в режиме Агента. Она не может быть включена, если режим Агента не включен. То же качество ответа, меньше звонков по многочастным вопросам.

Разговор и понимание

Долгосрочная память (бета)

Сохраняет краткое резюме старых сообщений (имена, номера билетов / счетов-фактур, суммы, решения), поэтому помощник остается последовательным в очень длинных чатах без пересылки всей стенограммы.

Терпимость к деспотизму

Читает небольшие опечатки («мои открытые билеты», «неоплаченные счета») в качестве намеченных слов, поэтому правильная информация найдена вместо пропущенной. Работает с каждой подключенной платформой. Выключен по умолчанию; полезен для мобильного чата.

контекст бережливого счета

Только прикрепляет снимок счета клиента, когда вопрос фактически касается их счета (баланса, счетов-фактур, билетов, услуг), пропуская его по общим вопросам. Снижает стоимость без потери качества. Помощник все равно может получить счет вживую, когда ему нужен поворот.

Экономия средств

Пропустить поиск знаний по приветствиям (бета)

"Привет", "спасибо" и "ок" не запускают поиск по базе знаний, эти ответы никогда его не используют. Любое сообщение с реальным контентом все еще ищет как обычно.

Самый длинный ответ (токены)

Длина ответа является самой дорогой частью звонка, поэтому разумный предел (около 500 для поддержки) - это единственный наиболее эффективный контроль стоимости чата.

Настройка вашего AI

Глубина мышления (чат клиента и администратора)

Как много думает модель перед ответом (минимально к высокому). Поддерживайте чат клиента на минимальной / низкой скорости; резервируйте более высокие настройки для анализа и админ-копилота.

Per-AI модель (на работу)

Каждая поверхность ИИ (живой чат, черновики билетов, резюме, анализ, админ-копилот, рекламные акции, Site Intelligence и многое другое) может работать по своей собственной модели. Свет там, где важна скорость, сильный там, когда важно качество. Бланк на поверхности = по умолчанию для этой работы провайдера.

Контроль стоимости чата от Admin

Админ-копилот может сохранять ограниченную рабочую память и загружать только те инструменты, которые нужны для решения вопроса (бережливые инструменты), а не каждый инструмент на каждом шагу.

Тренируйте свой ИИ

Инструкции по сжатию

Ваши инструкции отправляются на каждом шагу, поэтому их длина является постоянной стоимостью. Кнопка Compress переписывает слот, чтобы сказать то же самое меньшим количеством слов. Она отказывается переписать, если она сбросит какое-либо {variable} или правило, и сообщает о том, что она защищена, поэтому она никогда молча не меняет значение.

«Что уже в мозге» (I️)

Показывает, что OpsIQ уже знает о вашем бизнесе в каждом слоте, поэтому вы можете удалить все, что вы повторяли в своих собственных инструкциях.

💡
Куда уходят деньги? Для короткого чата поддержки вход (инструкции + данные учетной записи + история, отправленные каждый поворот) обычно стоит больше, чем короткий ответ, кэширование и постный контекст помогают большинству. Для длинного контента доминирует выход. Там окупается ограничение длины ответа и более низкая глубина мышления. См. Настройте свой ИИ для быстрого кэширования, что делает большую повторяющуюся часть каждого поворота дешевой.
Изменятся ли эти ответы, как уже ответил чат?+

Нет, каждый контроль по умолчанию выключен и независим. Включение только добавляет его поведение; выключение возвращает чату именно то, как он работал раньше.

Какой приказ мне их включить?+

Запустите ежедневный чат на легкой модели и прикрепите более сильную модель Агента. Затем, если у вас есть подключенная платформа, включите режим Агента, затем Планируйте вперед, затем память с длинным разговором. Затем постный контекст, пропуск KB-для получения степени и кепка ответа. Наконец, сжимайте свои инструкции. Посмотрите несколько реальных чатов после каждого изменения.

Набор Admin Agent: веб-поиск, рунбуки, миссии, передача файлов

Чат Admin AI - это работающий инженер, а не просто поле вопросов. Он может исследовать исправления в Интернете, хранить библиотеку ваших операционных процедур, патрулировать ваши серверы по расписанию и перемещать файлы. Большая часть этого обусловлена тем, что вы запрашиваете его в чате; одна вещь, которую вы настраиваете впереди, - это какой поставщик веб-поиска он использует, на странице Настройка вашего ИИ.

Поиск по веб-странице

построенный в

Агент ищет в Интернете документы, сообщения об ошибках и текущую информацию во время работы. Из коробки это использует DuckDuckGo, который не нуждается ни в ключе, ни в настройке.

Рукописи

В чате

Сохраненная библиотека ваших процедур («как мы делаем X здесь»). Агент записывает одну из них после выполнения сложной работы и следует за ней в следующий раз, поэтому ноу-хау выживает в конце чата.

Миссии

запланированный

Планируется только для чтения патрулей. "Каждое утро проверяйте дисковое пространство и журналы ошибок и сообщите мне." Находки приходят на ваш звонок администратора.

Передача файлов

В чате

Попросите файл журнала и получите частную ссылку на загрузку или один файл скопирован с одного подключенного сервера на другой. 5 MB.

Admin Agent Web Search (Настройка вашего ИИ)

Поисковый провайдер

По умолчанию DuckDuckGo: бесключевой, бесплатный, работает на каждой установке. Brave Search, Tavily и Serper.dev (Результаты Google обычно дают лучшие результаты, но каждый из них должен иметь более высокий результат). API Если ключ от этого провайдера не работает по какой-либо причине (плохой ключ, израсходованная квота, проблемы с сетью), этот поиск автоматически возвращается в DuckDuckGo, поэтому поиск никогда не становится темным.

Поиск по API ключу

Ключ для выбранного вами провайдера, нужен только для Brave, Tavily или Serper. После сохранения он маскируется и никогда не отображается на странице снова; вставьте новый, чтобы заменить его. Заключенный поставщик становится активным только тогда, когда сохранены как провайдер, так и его ключ.

Рукописи

Когда агент только что проработал работу, которую вы хотите сделать снова так же, скажите: «Сохранить это как рунбук под названием ночной уборки». С этого момента он видит рунбук по имени в каждой сессии, и когда вы просите о работе по имени (или описываете ее), он поднимает шаги и следует за ними. Вы можете попросить его перечислить, обновить или удалить рунографии в любое время.

💡
Руководящий документ - это руководство, а не бесплатный пропуск. Когда агент следует за ним, каждый шаг, который изменит сервер, все равно проходит через ваш текущий режим разрешения и показывает обычные карты одобрения.

Миссии

Миссия - это повторяющаяся работа, которую агент выполняет самостоятельно: почасовая, ежедневная в установленный час или еженедельная в определенный день. Миссии читаются только по дизайну. Они могут читать серверы, данные и Интернет, но они никогда не могут ничего изменить; они исследуют и сообщают. Когда миссия заканчивается, результаты приземляются как уведомление на ваш звонок администратора. Скажите "запустите утренний патруль сейчас", чтобы вызвать один по требованию, или попросите агента перечислить, приостановить или удалить миссии.

⚠️
Миссии запускаются с OpsIQ cron, поэтому его необходимо настроить (см. Cron и автоматизация). Одноразовый «запуск» из чата работает даже между кронами, запущенными на большинстве серверов.

Перемещение файлов

Запросите файл («получить мне сегодняшний журнал ошибок с веб-сервера»), и агент организует его и отвечает частной ссылкой для загрузки. Ссылка работает только для администраторов с подписью и истекает примерно через день. Файлы ограничены по 5 MB; для чего-то большего попросите агента сначала сжать или обрезать его на сервере.

Агент также может скопировать один файл между двумя подключенными серверами, снова до 5 MB. Запись на адресате обрабатывается так же, как и любое другое изменение, которое он делает: в режиме запроса вы сначала получаете карту одобрения, существующий файл резервируется, а копия является обратимой. Для безопасности содержимое файла перечитывается из источника в момент подачи копии, а не взято из чата.

ИИ

Тренируйте свой ИИ

Обучение ИИ - это то, где вы учите OpsIQ как вести себя. Вы пишете подсказки, которые определяют личность, границы, фокус знаний и правила эскалации. Думайте об этом как о написании учебного пособия для нового агента поддержки.

Поезда AI
Тренируйте свой ИИРедактор инструкций ИИ с вкладками Customer/Admin и простым английским тоном, всегда и никогда не правил.Тренируйте свой ИИрабочее пространствоКлиентский ИИАдминистрировать AIтонДружелюбный, лаконичный, никогда не нажимает.ВсегдаПредложите людскую помощь для выставления счетов.НикогдаОбещайте возврат без проверки счета.1TWO MANUALSКлиент и администратор AI2PLAIN ENGLISHТон, всегда, никогда3GROUNDEDПлюс ваша база знаний
Обучите ИИ, как новый наемный работник, руководство по работе с клиентами и администраторами, написанное на простом английском языке (тон, всегда, никогда), основанное на вашем KB.

Два учебных направления

Клиентский AI-подсказка

Контролирует, как ИИ разговаривает с вашими клиентами в виджете чата. Это самый важный момент для правильного решения.

AI Quick

Контролирует, как ИИ помогает вашей команде администраторов на панели управления оператором. Это обрабатывает внутренние запросы и выполнение действий.

Написание отличного клиента AI Quick

Ваш клиентский запрос AI должен охватывать эти области:

1
Идентичность

Дайте ему имя, роль и личность. Пример: «Вы Луна, дружелюбный и знающий помощник по поддержке клиентов в Acme Store».

2
Тон и стиль

Пример: "Будьте профессиональными, но теплыми. Используйте простой язык. Избегайте жаргона. Сохраняйте краткие ответы"2-3 пункты max".

3
Границы знаний

Что он должен знать и чего не должен знать? Пример: «Вы знаете о наших продуктах, ценообразовании, доставке и политике возврата. Вы НЕ знаете о продуктах конкурентов или решениях внутренней компании».

4
Правила эскалации

Пример: «Эскалация агента-человека, когда клиент просит возврат денег, упоминает судебные иски, сообщает о проблеме безопасности или задает один и тот же вопрос три раза».

5
Вещи, которые никогда не делают

Пример: "Никогда не обещай возврата. Никогда не делись внутренними формулами ценообразования. Никогда восполняй характеристики продукта, которых нет. Никогда и не давай медицинских, юридических или финансовых советов".

Пример подсказок

Пример клиента AI prompt · интернет-магазин
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
Пример клиента AI prompt · хостинговая компания
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

Уточнение вашего подсказки с течением времени

1
Запуск с основами

Начни с идентичности, тона и ключевых границ. Не пытайтесь охватить все в первый день.

2
Еженедельник AI History

Читайте разговоры, в которых ИИ давал неправильные или неоптимальные ответы.

3
Обновить Быстрый

Добавьте конкретные правила для повторяющихся проблем. Пример: если ИИ продолжает обещать возврат средств, добавьте «Никогда не обещайте возврата. Скажите, что вы перерастете в платежную команду».

4
Добавить знания

Если ИИ не может ответить на вопрос, добавьте ответ в Базу знаний вместо того, чтобы пытаться подогнать все в нужное русло.

⚠️
Держите подсказку в 2,000 словах. Слишком длинные подсказки могут сбить с толку ИИ и увеличить стоимость токенов. Вместо этого поместите подробную информацию в Базу знаний.
В чем разница между оперативной и информационной базой?+

Быстрый определяет личность, границы и правила. База знаний предоставляет фактическую информацию (детали продукта, цены, политики). ИИ читает оба, но быстрый формирует поведение, в то время как КБ дает ответы.

Могу ли я получить разные предложения для разных отделов?+

Если вам нужно различное поведение ИИ для разных отделов, используйте базу знаний для предоставления информации о конкретном отделе и упомяните контекст отдела в своем запросе.

ИИ

История ИИ

История ИИ показывает каждый разговор, который ИИ имел с клиентами и администраторами. Используйте его для аудита производительности ИИ, поиска неправильных ответов и выявления пробелов в обучении.

История ИИ
История ИИЖурнал ИИ поворачивается с помощью значков типа, вопроса и ответа, времени отклика и результата.История ИИрабочее пространствоКаждый поворот, записанныйболтатьВ: Где мой заказ?A: отправлено сегодня, отслеживание UPS...0.9sответбилетПроект ответа на T-12345подтверждение возврата, составленное1.4sdraftedадминОбобщи билеты на этой неделе12-line резюме2.1sсделанныйболтатьQ: Отменить планпередано человеку0.7sescalated1EVERY TURNБыстрый ответ, действие2SEARCHABLEФильтр и экспорт3OWNER-ONLYПолный контрольный след
Каждый поворот ИИ (чат, проект билета, действие администратора) записывался с точной подсказкой, ответом, продолжительностью и результатом.

Что показывает каждый разговор

Дата и время

Когда разговор состоялся.

Идентификационные данные клиента

Имя и адрес электронной почты, если они известны, в противном случае IP и страна.

Канал

Виджет чата, автоответ на билет, черновик электронной почты или админ AI.

Сообщения

Полная расшифровка разговора: сообщения клиентов и ответы ИИ.

Использование маркеров

Высокое использование токенов может указывать на то, что ИИ дает слишком многословные ответы или разговор идет по кругу.

Принятые меры

Любые действия ИИ, выполняемые во время разговора (выглядел заказ, создал билет и т. д.).

Рейтинг

Если включена CSAT, рейтинг удовлетворенности клиента для этого разговора.

Поиск проблем

Поиск по ключевому слову

Поиск конкретных тем, чтобы увидеть, как ИИ обрабатывает их. Пример: поиск «возврата», чтобы проверить, следует ли ИИ вашей политике возврата средств.

Фильтр по рейтингу

Показывайте только разговоры с низким рейтингом, чтобы сосредоточиться на недовольных клиентах.

Фильтр по каналу

Показать только автоматические копии билетов для аудита автоматизированных ответов отдельно от чата.

Сортировка по использованию токенов

Разговоры с высокими токенами могут указывать на проблемы: ИИ грохочет, ходит по кругу или не отвечает на вопрос.

Недельный аудит рутины

1
Проверить низкорейтинговые разговоры

Прочитайте полную стенограмму. Что пошло не так? Это был пробел в знаниях, вопрос с тоном или неправильный ответ?

2
Проверить высокотокенные разговоры

Это может указывать на путаницу. Повторялся ли ИИ? Не понял ли он вопрос?

3
Обновление подготовки

Для пробелов в знаниях добавьте статьи в Базу знаний. Для проблем с поведением обновите запрос ИИ. для повторяющихся неправильных ответов добавите явные правила коррекции.

Поиск пробелов в знаниях

Сценарий:
Вы ищете в истории ИИ «установку» и находите разговоры 15, где ИИ сказал: «У меня нет конкретных инструкций по установке этого продукта».
Что делать:

Это означает, что в вашей Базе знаний отсутствуют руководства по установке. Создайте статьи базы знаний для каждого этапа установки продукта. После их добавления проверьте, задав вопросы об установке ИИ.

ИИ

Искусственный интеллект

AI Insights автоматически анализирует модели разговоров и выявляет практические результаты: общие вопросы, тенденции удовлетворенности, пробелы в знаниях и шаблоны эскалации.

Искусственный интеллект
AI Insights (Интеллектуальный центр)The Intelligence Hub: A AI Today's Brief, Smart Alerts, инструмент Score-a-Lead / Analyse-a -Page и график 14 Day Traffic Pattern.Искусственный интеллектрабочее пространствоСегодняшнее затишьеПробки 12%; 3 горячие зацепки; 2 Сделки нуждаются в продолжении.Умные оповещенияОшибки проверки набрали оборотыОтскакивайте на /pricingНовый горячий свинец из СШАДоходы в преддверии прошлой неделиОценка лида / Анализ страницыIP или URL…Беги.14-Дневной шаблон трафика1Сегодняшнее затишьеИИ пишет утреннее резюме2SMART ALERTSАномалии всплыли3ON DEMANDЗадать зацепку · проанализировать страницу
Настоящий интеллектуальный центр: написанный ИИ «Сегодняшнее краткое изложение», «Умные предупреждения об аномалиях», оценка потенциальных клиентов по требованию и анализ страниц, а также шаблон трафика 14 день.

Что показывает интуиция

Главные вопросы

Наиболее часто задаваемые вопросы. Если "Как мне сбросить пароль?" - это #1, вашей базе знаний необходимо видное руководство по сбросу пароля.

Тенденции удовлетворенности

С течением времени показатели CSAT. Улучшается или снижается удовлетворенность ИИ? Внезапные падения могут указывать на изменение базы знаний, которое что-то сломало.

Разрешение вопроса

Какой процент разговоров ИИ решает без вмешательства человека? 70% Хорошо. Ниже 50% Это означает, что ИИ нуждается в большей подготовке.

Причины эскалации

Почему разговоры передаются людям. Общие причины: клиент запросил человека, ИИ не смог ответить, чувствительная тема, вопрос выставления счетов.

Пробелы в знаниях

Темы, где ИИ часто говорит «я не знаю» или дает ответы с низкой уверенностью.

Средняя продолжительность разговора

Очень длинные разговоры (10+) могут указывать на то, что ИИ не понимает вопрос.

Использование идей для улучшения

Сценарий:
AI Insights показывает, что 23% эскалаций - это "Заказчик спросил о гарантии", и ИИ не смог ответить.
Что делать:

Это явный пробел в знаниях: (1) Напишите полную гарантийную статью в Базе знаний, охватывающую все условия гарантии, процесс подачи исков и исключения. (2) Обновите AI, чтобы ссылаться на гарантийную информацию. (3) Следите за AI Insights на следующей неделе, чтобы увидеть, уменьшится ли увеличение гарантий.

ИИ

Игровой автомат AI Playbook

Admin AI (Спросить)OpsIQ Помогает вашей команде управлять OpsIQ Вы можете попросить его искать данные, объяснять функции, обобщать билеты и выполнять действия платформы.

Администрировать AI
Игровой автомат AI PlaybookСпроси-OpsIQ командная строка с картой действий платформы, предлагаемой ИИ, показывающей параметры и подтверждающей/отменяющей.Задать вопрос OpsIQрабочее пространствоЗадать вопрос OpsIQПриостановить обслуживание просроченного счета #4821ИИПредложенные меры: приостановить_сервисСчет: #4821 (задержка) $120)Платформа: WHMCS · обратимая · провереннаяПодтверждаюотменять1ASK ANYTHINGАнглийский язык команды2PROPOSE FIRSTДействие, которое показано перед запуском3YOU CONFIRMScoped & Audited (проверено)
Скажите администратору ИИ, что вы хотите на простом английском языке; он предлагает точное действие (обратимое, обратимые, проверенные) и ждет вашего подтверждения.

Что может сделать Admin AI

Ищите данные

Спроси: "Покажи мне все билеты из [email protected]"или" Что такое статус заказа #ORD-5523?"

обобщать

Спросите: «Подведем итоги последних 10 билетов» или «Какие основные проблемы поддержки на этой неделе?»

Объяснять особенности

Спросите: «Как я настраиваю автоответ?» или «Что означает карта отказов?».

Исполнять действия

Спроси: "Создать билет на [email protected] О выставлении счетов" или "Близкий билет Т-12345"

Платформенные запросы

Спросите: «Сколько посетителей мы получили вчера?» или «Каков наш доход в этом месяце?».

Примеры разговоров

Ищу клиента

Сценарий:
Админ спрашивает: «Найдите клиента [email protected] и покажите мне его недавнюю деятельность».
Что делать:

ИИ просматривает клиента по всем подключенным источникам данных: сеансы посетителей, билеты, разговоры в чате, заказы и контакты CRM. Он возвращает резюме недавней деятельности со ссылками на каждый элемент.

Получить ежедневное резюме

Сценарий:
Админ спрашивает: «Что случилось сегодня?»
Что делать:

ИИ резюмирует: "Сегодня у вас было 245 посетителей (до ) 12%), 8 новые билеты (3 урегулировано МА), 2 новых заказов в общей сложности $198, и 1 чат эскалация о задержке доставки."

Исполнять действие

Сценарий:
Админ спрашивает: «Изменить билет T-5523 приоритет на срочный»
Что делать:

ИИ подтверждает: «Я изменю приоритет T-5523 с Нормального на Срочный. Это повлияет на таймер SLA. Подтвердить?» Вы подтверждаете, и действие выполняется.

💡
Admin AI выполняет только действия, зарегистрированные в Реестре действий. Он не может изобретать действия или системы доступа за пределами OpsIQ.
ИИ

Сценарии клиентского ИИ

Этот раздел охватывает общие сценарии ИИ, ориентированные на клиента, с ожидаемым поведением и советами по обучению.

Клиентский ИИ
Сценарии клиентского ИИБиблиотека вопросов клиентов в сочетании с ожидаемым поведением ИИ и тегом результатов для каждого.Сценарии клиентского ИИрабочее пространствоСценарная библиотека · ожидаемое поведение ИИ«Где мой заказ?»Проверить заказ через разъем, дать отслеживаниеРешиться«Хочу получить возврат»Признать, никогда не обещай – рука человекуОтпуск"Служба не работает?"Проверить статус, сообщить о текущем состоянииСтатус«Отменить мой счет»Подтвердить намерение, затем направить к человекуПодтверждаю1SCENARIOSОбщие вопросы2EXPECTEDКак ИИ должен ответить3ТестНайти пробелы в обучении
Библиотека реальных вопросов клиентов и то, как ИИ должен обрабатывать каждый из них, чтобы проверить ваше обучение и найти пробелы.

Сценарная библиотека

Расследование статуса приказа

Сценарий:
Клиент: «Где мой заказ #12345?»
Что делать:

Ожидаемое поведение ИИ: (1) Просмотрите заказ через разъем платформы. (2) Отчет о текущем состоянии (обработка, отгрузка, доставка). (3) Включите номер отслеживания, если он доступен. (4) Если заказ задерживается, признайте и предоставьте оценочные сроки. (5) Никогда не изобретайте информацию отслеживания.

Запрос сброса пароля

Сценарий:
Клиент: «Я забыл пароль и не могу войти»
Что делать:

Ожидаемое поведение ИИ: (1) Предоставьте шаги сброса пароля из базы знаний. (2) Включите ссылку сброса или путь страницы. (3) Обратите внимание, что перезагрузка электронной почты может занять несколько минут. (4) Предложите проверить папку спама. (5) Если клиент все еще не может перезагрузиться, перерастайте в человека.

Запрос на предоставление услуг

Сценарий:
Клиент: «Можете ли вы добавить темный режим в мобильное приложение?»
Что делать:

Ожидаемое поведение ИИ: (1) Спасибо им за предложение. (2) Объясните, как обрабатываются запросы на функции (зарегистрированные, рассмотренные, приоритетные). (3) Не обещайте, что функция будет построена. (4) Если существует аналогичная особенность, упомяните об этом.

Споры по поводу счетов

Сценарий:
Клиент: «Мне было предъявлено обвинение, но мой сервис не работает»
Что делать:

Ожидаемое поведение ИИ: (1) Признайте разочарование. (2) Проверьте статус сервиса, если это возможно. (3) Эскалация в отдел выставления счетов со всеми деталями. (4) Не обещайте возврата. (5) Установите приоритет билета на высокий.

Вопрос вне темы

Сценарий:
Клиент: «Какая сегодня погода в Лондоне?»
Что делать:

Ожидаемое поведение ИИ: (1) Вежливо перенаправляйте. "Я ваш помощник по поддержке и могу помочь с вопросами о наших продуктах и услугах. Для получения информации о погоде попробуйте метеорологическую службу" (2) Спросите, есть ли у вас вопрос о продукте.

Как проверить поведение клиента?+

Откройте свой сайт в частном браузере / инкогнито и пообщайтесь с ИИ как клиентом. Попробуйте общие вопросы, крайние случаи и состязательные сценарии. Проверьте, что ИИ следует вашим быстрым правилам и правильно использует контент базы знаний.

ИИ

База знаний ИИ

База знаний — это библиотека статей, которые ИИ использует для ответа на вопросы. Когда клиент что-то задает, ИИ ищет базу знаний по соответствующим статьям и использует их для получения точного, обоснованного ответа.

База знаний
База знанийИсточники, поступающих в хранилище знаний, а затем ИИ, генерирующий обоснованный цитируемый ответ.База знанийрабочее пространствоИсточникиСайт WEB скачатьПомогите статьиFAQИмпортные документыЗнанияСемантическое + ключевое словоИИОснованный ответс цитируемым источником."Возврат денег 3–5"Дни бизнеса".1INGESTCrawl, FAQ, импорт2RETRIEVEСемантический + ключевое слово3GROUNDEDОтветы на ваш контент
Прокрутите свой сайт и импортируйте документы в базу знаний; ИИ извлекает правильные фрагменты и ответы, обоснованные и цитируемые.

Как это работает

1
Клиент задает вопрос

«Какова ваша политика возврата?»

2
ИИ ищет базу знаний

OpsIQ находит статью «Политика возврата», сопоставляя ключевые слова и смысл.

3
ИИ генерирует ответ

ИИ читает статью и пишет ответ на естественном языке, основываясь на содержании статьи.

4
Клиент получает точный ответ

Ответ основан на вашей фактической политике, а не на данных об общей подготовке ИИ.

Создание хороших статей

Одна тема в статье

Напишите отдельную статью по каждой теме: политика возврата, тарифы доставки, настройка учетной записи, сброс пароля. Не комбинируйте несвязанные темы.

Пишите как часто задаваемый вопрос

Начните с вопроса, который задают клиенты, затем дайте ответ. Это помогает ИИ сопоставлять вопросы со статьями.

Будьте конкретны

«Возврат должен быть инициирован в течение 30 дней доставки» лучше, чем «У нас есть политика возврата».

Включая крайние случаи

Что насчет международных доходов? Что насчет цифровых продуктов? Что о предметах, купленных в продаже? Покрыть исключения.

Держите текущий

Ежеквартально просматривайте статьи. Удалите устаревшую информацию. Обновите цены, политику и процедуры при их изменении.

Стартовые статьи, которые вы должны написать

Отгрузка и доставка

Стоимость доставки, сроки поставки, отслеживание, международная доставка и задержки обработки.

Возврат и возврат

Окно возврата, условия, процесс, сроки возврата и исключения.

Управление счетами

Сброс пароля, изменение электронной почты, удаление учетной записи и экспорт данных.

Цены и выставление счетов

Описание плана, цикл выставления счетов, способы оплаты, счета-фактуры и валюта.

Руководство по продуктам

Как использовать каждый продукт или функцию. Пошаговые инструкции со скриншотами.

устранение неполадок

Общие проблемы и решения, сообщения об ошибках и их исправления.

Контактная информация

Рабочие часы, каналы поддержки, время отклика и пути эскалации.

Правовые вопросы и соблюдение

Резюме политики конфиденциальности, резюме условий обслуживания, GDPR запросов данных.

Знание о соединении

Каждый разъем может вносить знания в ИИ. При включении разъединения его встроенные статьи знаний (каталог продуктов, общие вопросы, устранение неполадок на платформе) автоматически доступны для ИИ. Вы можете переключать знания о разъединении на разъезд в настройках разъета.

Токен бюджет

База знаний имеет настраиваемый потолок токенов (по умолчанию: 32,000), который контролирует, сколько контекста знаний отправляется в ИИ за разговор. Если ваша база знаний очень велика, ИИ выбирает наиболее релевантные статьи в рамках этого бюджета. Увеличьте потолку, если ИИ не находит соответствующие статьи; уменьшите его, если вы хотите снизить затраты на токены.

Сколько статей я должен иметь?+

Начнем с 5-10 Добавьте больше по мере выявления пробелов в истории ИИ и AI Insights. Большинству предприятий нужны 20-50 Статьи для всестороннего освещения.

Можно ли импортировать товары из другой системы?+

В настоящее время статьи создаются вручную в OpsIQ. Вы можете копировать содержимое из существующих часто задаваемых вопросов, справочных центров или документов.

В каком формате должны быть статьи?+

Простой текст работает лучше всего. ИИ понимает естественный язык лучше, чем структурированный HTML или разметка. Пишите так, как вы бы объяснили клиенту.

ИИ

Оценка ИИ и Сторожевая башня

Оценка превращает критические вопросы клиентов в повторяемые тесты на качество ответов, цитаты, эскалацию и безопасность действий.

Экран продукта
Оценка ИИОценка ИИ перечисляет золотые тестовые случаи, требуемое поведение, последние результаты и запланированные запуски Watchtower.Оценка ИИрабочее пространствоSETS6CASES84PASS RATE96%ЖИВОЙ ВИДЕО РАБОТЫПолитика в области судоходстваТребуемая цитатаПассажирЗапрос на возврат средствТребуется подтверждениеПассажирНеподтвержденное требованиеЗапретное действиеПассажирВопрос миграцииОжидаемый источник отсутствуетпровал1CREATE CASESЗолотые входы и правила2RUN SAFELYСухой бег или живой эвал3WATCHРасписание ежедневно или еженедельно
Оценка ИИ перечисляет золотые тестовые случаи, требуемое поведение, последние результаты и запланированные запуски Watchtower.

Полные администраторы могут создавать наборы оценок с быстрыми, ожидаемыми ярлыками источников, необходимыми цитатами, правилами подтверждения личности, ожиданиями эскалации и запрещенными действиями. Запускать набор напрямую, запускать его или воспроизводить выбранную историю.

Сторожевая башня планирует ежедневные или еженедельные проверки через cron и запускает ограниченное количество случаев (до восьми на запланированный проход). Просмотр сбоев вместе с поставщиком/моделью, версией запроса, версии знаний, предлагаемых действий и стоимости перед изменением поведения производства.

ИИ

Языки и перевод

Языки управляют переводом текста, обращенного к клиенту, и поведением, используемым при OpsIQ, которое следует за языком клиента.

Экран продукта
ЯзыкиНа странице Языки отображаются исходный язык, переведенные языки, состояние проекта / живого состояния и поведение на языке клиента.Языкирабочее пространствоИсточниканглийскийLANGUAGES4жить3ЖИВОЙ ВИДЕО РАБОТЫфранцузскийИнтерфейс и контентЖивинемецкийИнтерфейс и контентЖивииспанскийПроект переводаПроектСледуйте за клиентомОтвет на обнаруженный языкНад1SET SOURCEОригинальный язык оператора2ADD LANGUAGEПереводить в фоновом режиме3PUBLISHПроект или жить
На странице Языки отображаются исходный язык, переведенные языки, состояние проекта / живого состояния и поведение на языке клиента.

OpsIQ переводит введённый оператором текст, обращенный к клиенту. Установите исходный язык правильно перед созданием переводов, добавьте целевые языки, затем просмотрите черновики перед публикацией. «Следуйте за языком клиента» управляет языком ответа; перевод интерфейса виджета контролирует его кнопки, метки и системный текст.

Объем перевода может быть только черновой или живой. Не полагайтесь на машинный перевод для юридического, возврата, безопасности или текста без человеческого рассмотрения.

Каждое место, которое содержит вашу собственную формулировку, перечислено с его количеством сообщений: сообщения в чате клиентов, рекламные акции, проактивные сообщения, потоки чата, экскурсии, объявления, тизер-пузыри и т. Д. Опросы и формыПоверхность опроса полностью охватывает каждый опубликованный опрос: заголовок, каждый вопрос, каждый вариант ответа, кнопки, приветственная и благодарная копия, хром страницы и страницы результатов. Ключи привязаны к идентификатору вопроса и значению опции, поэтому переупорядочение вопросов или вариантов никогда не теряет перевод и переформулирование одного сообщения перетранслирует только это сообщение. Опубликованные живые опросы предлагаются по умолчанию; черновики присоединяются, когда вы расширяете область применения.

Опрос электронной почты после чата следует за языком, на котором посетитель действительно общался, при условии, что язык является одним из тех, которые вы предлагаете здесь; в противном случае он использует ваш системный язык. Его шесть редактируемых полей также переведены на эту страницу, и поведение имеет свой собственный переключатель в настройках клиентского чата.

Билеты и сообщения портала Охватывает тип оператора фиксированного текста один раз, и каждый клиент затем получает на этом одном языке: подтверждение билета, открытое, закрытое и подтверждение обратной связи, выписки из отдела и приветственную линию портала. (Автоответ AI не нуждается ни в чем из этого, он уже отвечает на языке клиента) С помощью Почтовые клиенты на своем языке включенный в OpsIQ Написание, электронное письмо с билетом решает язык получателя в этом порядке: язык, который они выбрали на портале или в справочном центре (перенесли на билет), местоположение в их контактной записи, затем язык, на котором они написали, обнаруженный локально по диапазону сценариев и маркерным словам, без внешнего вызова. Используются только языки, выбранные на странице Языки, поэтому функция инертна до тех пор, пока не будут добавлены языки. HTML Обёртка электронной почты намеренно не переводится: это разметка, а не проза. Персональная электронная почта (уведомления, оповещения отдела, аналитические сводки, плановые отчёты, еженедельный дайджест) всегда использует системный язык.

PeopleOS HR

PeopleOS: операционная система для управляемой рабочей силы

Запустите жизненный цикл сотрудника от реквизиции до оффбординга с мобильным самообслуживанием, рабочими процессами, подкрепленными доказательствами, типизированной интеграцией и контролем человека над чувствительными решениями.

Интерактивная карта
PeopleOS Lifecycle Command Center (командный центр жизненного цикла)Трехмерная панель инструментов PeopleOS, связывающая рекрутинг, сотрудников, заработную плату, обучение и управляемый ИИ.Командный центр PeopleOSЖИВОЕ ПОСЛЕДНИЕНарод248Открытые колеса12Контролирующие ворота15 / 15ЖИЗЛОЖЕНИЕнабиратьНанятьрастиВознаграждениеПереходный периодОдин рецептИдентификационные + трудовые доказательстваЧеловеческий контрольОбращение, исправление, поглощениеДокажи этоИтоги и обнародование доказательств
PeopleOS сохраняет жизненный цикл, элементы управления и доказательства на одной регулируемой записи.

Администраторы

оперировать

Управляйте людьми, организацией, набором персонала, погрузкой на борт, документами, отпуском, сверкой заработной платы, льготами, производительностью, обучением, отношениями с сотрудниками, аналитикой и управлением.

Сотрудники и руководители

Самообслуживание

Используйте мобильный портал для личных записей, запросов, документов, входа на борт, времени, объяснений оплаты, обучения, информации о компании и прав.

Разработчики

расширять

Используйте куратор hr.* Меры и рассмотренные platform.hr.* Операции по одному контракту плюс типизированные классы разъемов. Сгенерированный индекс в разделе PeopleOS API перечисляет каждый со своим охватом.

⚠️
PeopleOS не является регистром заработной платы, юридическим консультантом, бюро проверки биографических данных или поставщиком удостоверений личности. Сертифицированные внешние системы сохраняют эти обязанности. Зеленая техническая проверка никогда не создает юридического одобрения или доказательств поставщика.

Как получить PeopleOS HR

PeopleOS HR входит в план Enterprise. На каждый другой платный план это надстройка: открывается владелец счета Аккаунт → Добавления и токены, выбирает уровень PeopleOS HR и либо начинает бесплатную пробную версию, либо добавляет ее напрямую. Уровни различаются по количеству людей и количеству рекрутинга, собеседования и активности ИИ, которые они несут. Цены и ограничения устанавливаются на счете, а не вписываются в продукт, поэтому см. текущие уровни на странице WEB Ценовая страницаЧто делает модуль, поверхность за поверхностью, на Страница продуктов PeopleOS HR.

Кто может добавить

Бесплатный план не может добавить его, а платный план, который все еще находится в процессе собственного плана, должен ждать, пока этот процесс закончится.

Бесплатный судебный процесс

Судебный процесс проходит на выбранном вами уровне. Когда он заканчивается без покупки, право удаляется и ничего не взимается. Ничто не удаляется: записи снова появляются в момент добавления дополнения.

Когда он не принадлежит

PeopleOS HR не отображается на боковой панели, в палитре команд, настройках или в приложении. Прямая ссылка на страницу HR предлагает дополнение вместо страницы.

Достижение уровня кепки

Когда предел уровня достигнут, страница предлагает следующий уровень. Редактирование или удаление того, что уже существует, никогда не блокируется.

Самостоятельно установленные установки

Право перемещается в лицензии. Добавьте дополнение на свой OpsIQ аккаунт, и установка заберет его при следующей проверке лицензии.

Первая неделя установки

Все ниже — это реальный экран, и разработчику здесь не нужен.

1
Включите модуль

Открыть PeopleOS → КАДРОВЫЕ РЕСУРСЫДоска флага начинается с главного выключателя, PeopleOS HRВыключая его без HR-страницы или поверхности сотрудника. Включение переключателя является подтверждением двух кликов; выключение одного - один клик. Переключатели AI под ним (рисунок помощи, скрининг приложений, автономные помощники, интервью с ИИ, автоматическая отправка предложения, проверка личности) остаются в стороне до тех пор, пока вы не решите.

2
Пусть Setup Copilot делает конфигурацию

Открыть PeopleOS → Настройка Copilot и сказать, что вы хотите на простом языке: политика отпуска с его днями и уведомлением, государственные праздники для страны, категория дел с ее SLA, лимит расходов, шаблон входа, ежемесячный импульс. Вы получаете план обратно с тем, что он понял и что предполагал. Ничто не работает до тех пор, пока вы не подтвердите; шаг среднего риска нуждается в втором человеке; каждый запуск оставляет квитанцию.

3
Назовите портал для сотрудников

Открыть PeopleOS → Frontline → Дизайн входаНа самохостинге установки портал живет в /hr/<address>; Адрес порта Переименовывает его сразу и старые ссылки входа продолжают работать, потому что старый адрес переадресован. /hr на вашем рабочем пространстве хост и не нуждается в адресе.

4
Опубликуйте свой сайт карьеры

Открыть PeopleOS → РекрутингКаждая публикация, которую вы публикуете из одобренного реквизита, появляется на странице публичных карьер; ссылка Откройте страницу публичных карьер В верхней части рекрутинга показано, что именно видит кандидат.

5
Зарегистрируйте киоск для общих устройств

Открыть PeopleOS → Линия фронта → Киоски и выбрать Зарегистрируйте киоскТокен устройства отображается один раз; откройте страницу киоска на планшете или ПК (она находится в открытом доступе). /kiosk на хост портала) и вставить его. Люди заходят с рабочими электронными письмами и PIN-кодом или с кодом значка, который хранится у них на портале. Отзыв киоска сразу же останавливает устройство.

6
Решите, что сотрудники могут сделать для себя

Открыть Настройки → HRКаждая власть самообслуживания (записи, запросы, документы, отпуск, объяснения оплаты и т. д.) устанавливается только для каждого сотрудника, менеджеров или одной команды и команд под ней. Каждая запись изменений, кто ее сделал и почему, и выключенная вами мощность объясняется работнику, а не молча пропадает.

7
Добавляйте людей и предоставляйте им доступ

Над PeopleOS → Люди Предоставить доступ к порталу только после того, как у человека есть действительная электронная почта и предполагаемые трудовые отношения; приглашение выходит с одного экрана и начинается с поездки, которую вы настроили.

Жизненный цикл

План и набор

Создавайте утвержденные заявки, публикуйте рабочие места, получайте заявки через безопасные веб-хуки с повторным запросом, обзоры структуры, расписание интервью, записывайте решения, выдавайте предложения и нанимайте.

Взаимодействие и обеспечение

Создавайте подтвержденные доказательствами поездки на борту, собирайте правильную версию документа, запрашивайте оборудование, предоставляйте утвержденные шаблоны доступа и обеспечивайте доступ к порталу без сидений.

Работать и расти

Управляйте отпуском, графиками, объяснениями оплаты, преимуществами, расходами, целями, отзывами, обзорами, обучением, навыками, внутренними возможностями, преемственностью и аналитикой рабочей силы.

Поддержка и защита

Обеспечить частную поддержку персонала, регулируемые дела об отношениях с сотрудниками, юридические трюмы, запросы данных, исправление, объяснение, апелляцию и независимый обзор.

Переодеться и уйти

Используйте изменения в занятости, которые датируются по состоянию на дату вступления в силу, отмените доступ, восстановите оборудование, примирите внешних поставщиков, применяйте удержание и сохраняйте необходимые доказательства.

Доступ и личность

Каноническое лицо владеет записями о занятости и проверенными внешними аспектами идентификации. Электронная почта является изменчивыми контактными данными, никогда не является постоянным ключом идентификации. Считывания на портале являются самопроверенными; просмотры менеджеров и администраторов требуют явных разрешений. API объемы слоя поверх разрешений маршрута и никогда не обходят их.

Добавить нового работника

Сценарий:
Создайте человека, назначьте его на работу и менеджера, предоставьте доступ к порталу, а затем откройте путешествие на борту.
Что делать:

Используйте сухой и идемпотентный режим для API пишет. Подтвердите, что у человека есть действительная электронная почта и предполагаемые трудовые отношения перед отправкой доступа.

Решить дубликат идентичности

Сценарий:
Две внешние системы по-разному идентифицируют одного и того же работника.
Что делать:

Свяжите оба проверенных аспекта с каноническим человеком и устраните конфликт явно. Не объединяйте записи только потому, что два изменчивых значения электронной почты совпадают.

PeopleOS HR

Рабочие процессы HR и портал сотрудников

Как работает каждая основная область PeopleOS и что видят сотрудники после входа в систему.

Люди и организация

Сохранение канонического человека, занятости, типа работника, менеджера, команды, местоположения, навыков, документов и эффективной структуры организации.

Рекрутинг и предложения

Переход от утвержденного реквизита к размещению, заявлению, структурированным доказательствам, интервью, решению, предложению и найму с размещением и маршрутами апелляции.

На борту и документы

Назначьте заказанные шаги для конкретного владельца; собирайте, просматривайте, подписывайте, истекайте, храните и удаляйте документы с версией и доступом к доказательствам.

Время, отпуск и расписание

Определите типы отпусков, балансы, запросы, утверждения, праздники, доступность, календарные события и примирение.

Оплата, льготы и расходы

Объясните оплату труда, одобренные вручную мероприятия для работников, чтобы начислить заработную плату, согласовать исключения, управлять правом на получение пособий и регулировать возмещение.

Производительность и рост

Управляйте целями, регистрациями, отзывами, обзорами, калибровкой, обучением, навыками, наставничеством, внутренними возможностями и преемственностью.

HR-служба и отношения

Дайте сотрудникам частную поддержку, сохраняя при этом недовольство, дисциплину, осведомителя и запечатанные доказательства в специальных границах разрешения.

Аналитика и планирование

Используйте показатели рабочей силы, планы численности персонала, ориентиры и показатели опыта, полученные из записей; никогда не делайте вывод об отсутствии результатов в качестве успеха.

Карта портала для сотрудников

Обзор

Нуждается в вашем внимании, изменениях с момента последнего визита, открытых запросах, предстоящих событиях, на борту прогресса и анонсов.

Профиль и записи

Занятость, проверенная запись, документы, разрешения, запросы на конфиденциальность и запросы на исправление.

Поддержка HR и задачи

Частные разговоры, запросы, действия, требующие выполнения сотрудником и принадлежащими компании задачами показаны отдельно.

Ваши первые дни

Подтвержденная доказательствами временная шкала посадки с владельцем, надлежащее состояние, завершение и заблокированная работа.

Время и уход

Балансы, запросы на отпуск, доступность, расписания и календарные последствия.

Навыки и рост

Обучение, доказательства навыков, цели, обратная связь, наставничество и внутренние возможности.

Моя зарплата, объяснил

Информация о компенсации и выверке заработной платы на простом языке, которую сотруднику разрешено видеть.

Компания

Каталог и организационная диаграмма, ограниченные информацией, которую коллеги выбрали или политика позволяет им делиться.

Права и решения

Объяснения, апелляции, согласие, исправление, запросы на доступ и удаление.

💡
Портал является мобильным. Карта аккаунта остается доступной, навигация и контент прокручиваются независимо на широких экранах, а мобильная навигатора накладывается не на толкание или покрытие страницы. Длинная пояснительная копия принадлежит доступным инструментам или компонентам раскрытия информации.

Безопасная операционная последовательность

1
Настройка политики и разрешений

Установите юрисдикцию, роли, пути утверждения, сохранение, согласие и элементы управления перед загрузкой живых записей.

2
Подключение внешних поставщиков

Установите соответствующий подписанный пакет, введите учетные данные с наименьшими привилегиями и пройдите тесты на подключение и соответствие.

3
Бег в песочнице или тени

Осуществлять полный рабочий процесс с детерминированными данными и сравнивать ожидаемые доказательства, прежде чем обеспечить выполнение реального поставщика.

4
Освобождение под двойным контролем

Другой авторизованный рецензент рассматривает поставщика, безопасность, конфиденциальность, юридические, справедливые и доступные доказательства.

PeopleOS HR

ИИ, справедливость, видео и юридический контроль

PeopleOS рассматривает автоматизацию как управляемый путь: разрешение политики, попытка исполнения, результат поставщика и доказательства являются отдельными фактами.

ИИ и агентский контроль

Каждый агент использует зарегистрированные типизированные инструменты с целью, юрисдикцией, классом риска и максимальной автономией. Человеческий захват, автоматические выключатели, инциденты и изменения юрисдикции прекращают выполнение. Поправки могут формировать предлагаемый набор данных, но ничего не обучать до тех пор, пока другое уполномоченное лицо не завершит проверку конфиденциальности.

справедливость

Определите когорты, минимальные правила выборки, метрики, идентификационные данные и юридически опубликованную оценку. Пропущенные данные остаются пропавшими; они никогда не преобразуются в пропуск.

Пояснения и обращения

Построить объяснения на основе закрытых доказательств решений и политики. Отправить обращения к независимому человеку и сохранить доказательства результатов.

Юрисдикции

Освободите пакеты страновых политик только с именем ответственного законного владельца, приведенными юридическими источниками и прохождением тестов. Изменения в законодательстве о высокой степени тяжести приостанавливают затронутые полосы движения.

Закон ЕС об ИИ

Сохранение системного инвентаря, класса риска, оценки воздействия на основные права, уведомлений, надзорных органов, учета и доказательств.

Граница видеосъемки

Положение не является участием

hr.interview.room.provision Создает место встречи. hr.interview.room.connect СМИ могут дойти до работника.

Конкретное согласие

Запись, транскрипция и биометрическая живость - это отдельный выбор. Отмена применяется к выбранной цели.

Нет никакого анализа внешности

Видеоконтракт не имеет поля или метода для эмоций, внимания, привлекательности, расы, инвалидности или внешнего вида.

Человеческие и текстовые маршруты

Рецензент может взять на себя постоянное участие в сессии, и текстовый маршрут размещения остается доступным.

Сохранение и удаление

Разъем сообщает о зашифрованном транспорте, активной политике удержания и ссылках на носители провайдера и должен поддерживать поддающееся проверке удаление.

Созданный дом, отсутствующий

Сценарий:
Зум-комната URL существует, но медиамост не доставил аудио/видео собеседнику.
Что делать:

Покажите встречу как предусмотренную, а участие ИИ - как ложное. Держите доступ к человеческому интервью и текстовым путям размещения.

В Callback сказали, что чек пройден

Сценарий:
Подписанный бэк-чек вебхук сообщает о завершении.
Что делать:

Запишите обратный звонок как подсказку, затем запросите у провайдера. Только аутентифицированный ответ на статус может обновить проверку.

🚫
Оценка технической доступности может быть записана ее оценщиком, но для аттестации WCAG требуется отдельное лицо. Доказательства поставщика, юридическое освобождение и доказательства справедливости также требуют их подлинных названных владельцев.
PeopleOS HR

PeopleOS API и разработка разъемов

Используйте General API для управляемых операций с персоналом и типовых контрактов на разъемы для авторитетных внешних систем.

Общие API Источники истины

Отправить JSON POST /api/v1.phpОбнаружение бегущей поверхности через meta.actionsOpenAPI в /api/v1/openapi.php, и Postman на /api/v1/postman.phpСгенерированный индекс ниже несет точное количество курируемых hr.* действия и рассмотренные platform.hr.* Операции в этой сборке, поэтому ничего на этой странице не печатается вручную.

Перечислить людей
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}'
Сухой бегущий письмо
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}'

Использовать hr.read или hr.write Маршрут администратора-мишени по-прежнему проверяет свое собственное разрешение. Для записи требуется стабильный ключ идемпотентности; для записи с высоким риском требуется подтверждение. Повторите временные отказы с тем же состоянием восстановления ключа и запроса после неопределенного тайм-аута.

Все действия HR.*

48 curated hr.* actions (22 reads, 26 writes) and 484 reviewed platform.hr.* operations, out of 2420 named actions in this build. Generated from the action registry, the same source as meta.actions, OpenAPI and Postman.

Люди, организация и идентичность (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.

Реквизиции и публикации (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.

Уйти, учиться и рынок коннекторов (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.

Сертификация соединителей и здоровье (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.

Залы для собеседования (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.

Агенты и полосы жизненного цикла (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.

Юрисдикция (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.

Решения и апелляции (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.

Качество (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.

Разговоры рабочей силы и удержание (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.

Готовность и освобождение (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).

Классы соединений

рекрутинг

hr_job_board, hr_background_check, hr_identity_verification, hr_assessment и hr_tax_right_to_work.

Наем и посадка на борт

hr_esignature, hr_calendar, hr_video и hr_equipment_it.

Операции на рабочем месте

hr_payroll, hr_benefits, hr_learning, hr_expense_payment, hr_directory и hr_data_warehouse.

Коммуникация

hr_messaging Договор не содержит метода чтения сообщений сотрудника.

Конечные точки шлюза провайдера

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

Шлюз требует HTTPS, блокирует небезопасные/частные цели, проверяет штифты DNS результаты, не следует перенаправлениям, ограничивает размер ответа, требует JSON, несет детерминированную идемпотенцию и поддерживает временные метки HMAC Веб-хуки - это всегда подсказки, за которыми следует повторный запрос провайдера.

Входящие двери webhook

Три публичные двери получают обратный вызов поставщика: POST /opsiq/ajax_api.php?ajax=hr_connector_webhook (поля) connector_class, connector_key, topic), ?ajax=hr_esign_webhook (connector_key, offer_uuid, provider_ref) и ?ajax=hr_check_webhook (check_uuidКаждый проверяет тело через сертифицированный разъем, сжигает доставку, поэтому повторная запись умирает и записывает только ожидающий повторный запрос; собственный ответ провайдера изменяет запись. Каждый отказ является одним и тем же общим ответом нарочно. Сегодня PeopleOS не предоставляет исходящих событий веб-хука: webhooks.events.list В ней нет ни названия, ни власти. hr Семья, так что опросите hr.* читать или использовать hr.connectors.health.

Подробные ссылки

Полный справочник по PeopleOS

Читать doc/contracts/PEOPLEOS_HR.md в самостоятельной установке для каждого оператора, API, разъем, webhook и правило выпуска.

Контракт с разработчиком Gateway

Пакет Marketplace содержит README.md, DEVELOPER.md, connector_contract.json, hr_profile.json и подписанный файл манифест.

PeopleOS HR

Испытания и готовность к производству

Заявка на запуск рассчитывается из доказательств. Готовность к пакету, сертификация поставщика, юридическое утверждение, оценка справедливости и аттестация доступности преднамеренно отделены друг от друга.

1
Проверка кода и контрактов

Запуск синтаксиса PHP, HR PHPUnit, маршрут/API паритет, OpenAPI/Postman чеки, пакетный манифест и JSON Проверка схемы.

2
Упражнение полных рабочих процессов

Рекрутинг тестов, обзор ИИ, интервью / видео, включение, подписи, отпуск, заработная плата, портал, уведомления, модальности и пути отказа разъемов.

3
Тестовый отзывчивый и доступный UI

Приводите макеты настольных компьютеров, планшетов и телефонов; клавиатура, фокусировка, метки, контрастность, перелив, подсказки инструментов, диалоги, прокрутку уведомлений и независимую навигацию.

4
Собрать внешние доказательства

Используйте реальные обходные пути и удаление провайдера, публикации правовой политики, репрезентативные данные о справедливости и независимую аттестацию WCAG.

5
Освобождение под двойным контролем

Рецензент, отличный от отправителя, утверждает разъем и выдает доказательства. Отмените или переключите разъединитель, если его доказательство истекает.

Что означает каждый результат

Подписанный пакет

Файлы не изменились с момента авторизованной подписи пакета. Это не доказывает, что работает сторонний аккаунт.

Песочница прошла мимо

Детерминистическое поведение и переходы состояний соответствуют. Это не доказывает реального поставщика, срок проживания или удаление.

Сертифицированный производственный соединитель

Конкретный счет рабочего пространства прошел пять обязательств стороны поставщика под двойным контролем.

Технический отчет WCAG

Автоматизированные и оценочные доказательства существуют для названных поверхностей. Это не аттестация от второго лица.

Запуск готов

Все необходимые ворота являются зелеными одновременно, и никакие доказательства не истекают, не отменяются, отсутствуют или противоречат здоровью.

⚠️
Никогда не создавайте проходящую юридическую, справедливую, провайдерскую или независимую аттестационную запись только для того, чтобы очистить ворота. Запишите блокировщик и владельца вместо этого. Вид готовности ценен именно потому, что он отказывается от необоснованных претензий.
Почему установлен разъем, но он все еще недоступен?+

Установка доказывает наличие пакета. Включите его, сохраните реальные учетные данные с наименьшими привилегиями, пройдите тест на подключение, а затем предоставьте соответствующий объем производства учетной записи PeopleOS с использованием подлинных доказательств поставщика и другого рецензента.

Почему веб-хук не изменил запись?+

Обратный вызов может быть действительным, но только подсказкой. Проверьте входящие данные веб-хука, конечную точку статуса провайдера и результат сверки. PeopleOS меняет авторитетное состояние только после повторного запроса.

Где находится полный машиночитаемый HRAPI?+

Вызовите meta.actions и filter для hr. и platform.hr /api/v1/openapi.php и /api/v1/postman.php. Они генерируются из одного и того же реестра времени выполнения.

Поддержка

Центр помощи

Ваш справочный центр - это сайт самообслуживания, построенный из публикуемых вами статей. Клиенты могут читать и искать его на своей собственной публичной странице и прямо внутри виджета чата, чтобы они могли самостоятельно найти ответы до того, как они когда-либо откроют разговор. Все в нем исходит из вашей базы знаний, поэтому тот же контент, который лежит в основе вашего ИИ, также дает вам общественную помощь.

Где ваши клиенты видят это

Собственная публичная страница

Чистый, доступный для поиска сайт помощи в /help.phpКлиенты просматривают по категориям, ищут и открывают любую статью. Вы можете дать ей свое имя и стиль.

Внутри виджета чата

Справка в виджете чата, чтобы клиенты могли искать ваши статьи, не выходя из чата. Если им все еще нужен человек, они находятся на расстоянии одного касания от начала разговора.

Включи его.

1
Откройте страницу Help Center

Иди к нему Config, then Help Center Включите свой админ и включите Позволяет общественному центру помощи.

2
Дайте ему имя и посмотрите

Установите имя справочного центра, которое отображается в заголовке и вкладке браузера, и выберите визуальный стиль. Вы можете отключить верхнюю навигацию для чистой страницы без меню.

3
Опубликовать некоторые статьи

Ничего не видно, пока вы не опубликуете статьи. Следующая часть рассказывает о том, как это сделать.

Опубликовать статьи в Центре помощи

Статьи живут в вашей базе знаний. Статья появляется в справочном центре после ее публикации и гласности. Есть несколько способов сделать это:

Опубликовать одну статью

Откройте статью, пометьте ее опубликованной и включите опцию показать ее в справочном центре.

Опубликовать все сразу

Используйте Опубликовать все Кнопка, чтобы нажать весь опубликованный набор в Центр помощи одним щелчком мыши, вместо того, чтобы делать их по одному за раз.

Превратите FAQ в статьи

У вас уже есть FAQ? Опубликовать все, чтобы помочь Они превращают их в статьи помощи, чтобы они сидели рядом со всем остальным.

Импорт существующей базы знаний

Переезжает из другого справочного стола? Импортный КБ Кнопка на вкладке Статьи приносит вам существующую базу знаний. У вас есть три способа указать ее на ваш контент:

Вставить URL

Дайте ему адрес вашего текущего центра поддержки. Если он распознает платформу (например, Zendesk), он считывает точную категорию дерева с этой платформы. В противном случае он сканирует сайт и восстанавливает структуру со страниц, импортируя только реальные статьи и пропуская вход в систему, цены и контактные страницы.

Выберите подключенное приложение

Если платформа уже подключена к этому рабочему пространству и у нее есть база знаний, она отображается в выпадающем разделе. Импорт из подключенного приложенияВыберите его и импортируйте, не требуется URL или пароль. Приложение указывается только после подключения и настройки.

Скачать CSV

Нет прямого сайта, чтобы указать на? title, categoryи body колонны. Parent / Child в колонке категорий для построения вложенных категорий.

Как бы вы ни выбрали, вы получаете Предварительный просмотр: найденные статьи, сгруппированные по категориям, каждая с флажком, чтобы вы могли бросить все, что вам не нужно. Ничего не сохраняется до тех пор, пока вы не нажмете Импорт. Унтер весь импорт в один клик, или повторно синхронизировать a URL или импорт подключенного приложения позже для включения новых и измененных статей.

💡
Разработчики: любой разъем может рекламировать свою базу знаний к этому выпадающему, объявив о том, что kb_capabilities блок в его settings.json тип kb_sourceс одной adapter и а base_templateСм. раздел "Коннекторы" и ссылку на "платформа-коннектор".

Организуйтесь с AI

Опрятный центр помощи легко просматривать и легче искать. Организуйтесь с AI Кнопка убирает за вас. В один клик она читает ваши опубликованные статьи, сортирует их по разумным категориям и добавляет теги. Она создает категорию, когда ей это нужно, повторно использует категорию, которая уже подходит, и пропускает все, что вы уже организовали, так что вы можете запустить ее снова в любое время, когда вы добавляете новые статьи. Пусть ИИ сгруппируется в подкатегории В настройках Help Center, и он также может подавать статьи под вложенными Parent / Child категории, что удобно сразу после импорта базы знаний, которая имела подразделы.

💡
Категории дают клиентам возможность просматривать, а теги обостряют поиск как на публичной странице, так и в виджете. Вы можете переименовать или перенести вещи после этого. ИИ дает вам сильную отправную точку, а не установку, с которой вы застряли.

Помощник центра внутри вашего виджета чата

Вы можете показать справочный центр прямо внутри виджета чата, чтобы люди искали ответы перед тем, как отправить вам сообщение. В настройках виджетов чата выберите место, где появляется ссылка на помощь:

В заголовке

Небольшой значок помощи в верхней части виджета.

Внизу, на дне

Смс-ссылка под окне сообщения, например "Справочный центр браузера". Вы можете изменить формулировку.

Оба места

Покажите его в заголовке и внизу для большей видимости.

Справочная ссылка имеет собственный цветовой контроль под настройками виджета Внешний вид. Оставьте его на Ни одного Чтобы соответствовать цвету вашей пусковой установки или выбрать твердый цвет или градиентВесь опыт помощи следует за темой виджета, поэтому он всегда выглядит как часть вашего бренда.

Поместите свой центр помощи на ваш собственный веб-адрес

Из коробки ваш центр помощи уже имеет чистый, общий адрес (например, в вашем доме). /help/your-help-centerТы можешь пойти еще на один шаг и подавать его под свою защиту. собственный доменТак, клиенты и поисковые системы видят в нем часть вашего бренда. yourdomain.com/help или help.yourdomain.comВсе продолжает работать на вашем домене: ссылки, изображения, поиск и рейтинги статей.

Под вашим основным сайтом

В Конфиг, затем Центр помощиОткрой встраивать Закладка и найдите «Показать центр помощи по собственному веб-адресу». Выберите настройку (Cloudflare, Nginx или Apache), скопируйте готовый блок и вставьте его на свой сайт. Руководство по установке Кнопка рядом с ним с точными шагами.

На поддомен

Предпочитать help.yourdomain.comНа той же панели есть опция поддомена. На Cloudflare поддомен является наиболее надежным маршрутом, и он дает вам чистый адрес без ничего после него.

💡
использовать Cloudflare Он управляет только своим Работником по адресу, который проксирован через Cloudflare Ваш основной домен часто указывает прямо на ваш веб-сайт, поэтому правило, размещенное на главном домене, может спокойно ничего не делать. Надежный способ - это прокси-субдомен, подобный help.yourdomain.comРуководство по установке проведет вас через одну запись DNS и маршрут.
Хорошо для SEO. Как только ваш центр помощи находится на вашем собственном домене, поисковые системы индексируют ваши статьи под вашим брендом. Каждая страница объявляет свой правильный адрес и карта сайта перечисляет их, поэтому одна и та же статья никогда не индексируется дважды.
💡
Используя ссылку in-widget help? В настройках виджета чата "Открыть в центре помощи", установите Куда идет ссылка то Собственный домен центра помощи И введите тот же адрес. Тогда эти ссылки на статьи открываются и на вашем домене, а не на OpsIQ адрес.

Посмотрите, как работает весь ваш центр помощи

Помимо одностационарных голосов, у Центра помощи есть свои собственные. аналитикаПереключите его в настройках Help Center и он тихо записывает, как люди используют вашу помощь: наиболее просматриваемые статьи, что они ищут, и поиски, которые вернулись пустыми (готовый список для записи), самостоятельно разрабатывая страну посетителя и устройство, поэтому ему не нужен установленный виджет чата для отчета. оба Помещает вашу помощь, публичную страницу и встроенную в виджет помощь, а также вместе, так что вы можете увидеть, сколько на самом деле используется каждая из них.

💡
Аналитика остается в рабочем состоянии до тех пор, пока вы не включите ее и не сможете анонимизировать адреса посетителей IP.

Выберите то, что появляется в каждой части страницы

Каждый раздел справочного центра (категории на главной странице, популярные статьи, список статей на странице категории и многое другое) имеет свое простое правило. все предметы, а номер, the последнийили только те, которые вы особенность Когда правило ограничивает список, клиенты все еще получают ссылку «Показать все», поэтому ничто не является недосягаемым.

Вы также определяете, как будут выглядеть голоса за полезность: скрытые, "12 из 14 Настройка минимального количества голосов останавливает совершенно новую статью, показывающую неловкое "0 из 0".

Смотрите, какие статьи работают

Каждая статья показывает Это было полезно? Каждое да или нет подсчитывается на статью, так что вы можете увидеть с первого взгляда, какие статьи хорошо отвечают на вопросы и какие из них нуждаются в переписке. Повторные голоса от одного и того же посетителя игнорируются, поэтому подсчеты остаются честными.

Текст и этикетки

Вы можете изменить заголовки и ярлыки в справочном центре, чтобы соответствовать вашему голосу. Оставьте любое поле пустым, и оно вернется к разумному по умолчанию, поэтому вы только редактируете формулировку, которую действительно хотите изменить.

Каждый материал, который вы публикуете здесь, является тем же контентом, который ИИ использует для ответа на чаты и билеты, поэтому улучшение одной улучшает другую.

Общие вопросы

Нужно ли писать отдельный контент для Центра поддержки?+

Нет. Он построен из тех же статей базы знаний, которые ИИ уже использует. Опубликовать статью один раз и она может служить обоим.

Можно ли сохранить некоторые статьи внутри?+

Да, только статьи, которые вы публикуете и отмечаете в справочном центре. Все неопубликованные материалы остаются вне его.

Смогут ли клиенты достучаться до человека?+

Да, ссылка на виджет-помощь находится в стороне от начала разговора, так что самообслуживание никогда никого не ловит.

Рост и SEO

Site Intelligence (SEO)

Site Intelligence - это встроенный набор SEO и поисковой видимости OpsIQ. Он сканирует ваш сайт, как поисковая система, отслеживает, где вы ранжируете, исследует ключевые слова, просматривает обратные ссылки и конкурентов, сканируется ваше присутствие на локальной карте, проверяет скорость страницы и превращает все это в готовые к работе отчеты, с аналитиком ИИ, который объясняет, что исправить и может подготовить исправления. Это премиум-функция; при включении он появляется как Site Intelligence на боковой панели. Данные каждого домена остаются отдельными, скачивает, ранжируется и отчеты никогда не смешиваются между доменами.

Сайт разведки
Информационная панель Site IntelligenceПанель инструментов SEO, показывающая оценку здоровья сайта, отслеживание ранга ключевых слов и тенденцию трафика.Сайт разведкиyoursite.com86Здоровья сити3 критические вопросыОтслеживание ранга ключевых словИнтерьерный справочник#3Live Chat Saas#7CRM для агентств#12Органические клики1КРАУЛЬНайти технические проблемы2ТРЕЙКРанги, ключевые слова, обратные ссылки3АНАЛИСТОбъяснения и проекты исправлений
Обзор Site Intelligence: оценка состояния сайта от последнего сканирования, отслеживание рейтинга ключевых слов в реальном времени, тенденция органических кликов и трехступенчатый цикл: сканирование, отслеживайте, позвольте ИИ нарисовать исправления.

Получение Site Intelligence

Сайт Intelligence является частью планов, которые его несут. На плане, который этого не делает, он работает точно так же, как PeopleOS HR: открывается владелец аккаунта Аккаунт → Добавления и токены, выбирает уровень Site Intelligence и начинает бесплатную пробную версию или добавляет ее прямо. Бесплатный план или платный план, все еще находящийся в процессе собственного плана, не может добавить его. Пока он не принадлежит, пакет скрыт с боковой панели, а прямая ссылка предлагает дополнение; когда достигается предел уровня, страница предлагает следующий уровень; когда пробная версия заканчивается без покупки, право удаляется и ничего не взимается. Уровни и цены живут на счете, поэтому посмотрите текущие уровни на странице WEB Ценовая страница.

Запуск крауна · Начните здесь

Сканирование - это OpsIQ посещение ваших страниц так, как это делает поисковая система, чтобы найти технические проблемы: неработающие ссылки, недостающие заголовки, тонкий контент, медленные страницы, проблемы с индексацией.

1
Начинай ползать

В обзоре нажмите, чтобы начать сканирование. OpsIQ очередей и работает через ваши страницы в фоновом режиме; индикатор состояния показывает прогресс.

2
Читайте доклады

Когда он закончится, откройте вопросы и список страниц. Каждая проблема сгруппирована по степени тяжести, чтобы вы сначала занялись самыми большими победами.

3
Пусть ИИ поможет

Аналитик ИИ дает краткое изложение того, что не так и почему это важно, и может генерировать предлагаемые исправления, которые вы просматриваете перед применением.

Что отслеживает Site Intelligence

Crawls & Site Health (альбом)

Сканируйте страницы на предмет технических проблем SEO и перечисляйте каждую страницу с ее проблемами. Перезапустите в любое время или запланируйте его.

Отслеживание ранга

Добавьте ключевые слова, о которых вы заботитесь; OpsIQ проверяет, где ваш сайт ранжируется и отслеживает движение с течением времени.

Исследование ключевых слов

Откройте для себя новые идеи ключевых слов, чтобы нацелиться, с помощью тренера ключевых слов AI, который поможет расставить приоритеты.

Обратные ссылки

Посмотрите, кто ссылается на вас, обновите список и откажитесь от ссылок, которые вы не хотите ассоциировать с вашим сайтом.

Конкуренты

Добавьте домены конкурентов и сравните свою видимость с их, с анализом конкурентов ИИ.

Локальная (карта) сетка

Сканируйте видимость локального списка по географической сетке, чтобы увидеть, где вы отображаетесь на карте, а также инструменты Google Business Profile.

Скорость страницы

Запустите проверку скорости страницы, чтобы вы могли исправить медленные страницы, которые повредили рейтингу и конверсиям.

Контент

Создавайте краткие и черновые материалы, направленные на ключевые слова, на которые вы ориентируетесь.

Доклады

Создавайте печатные, готовые к работе отчеты обо всем вышеперечисленном.

Подключите Google для получения точных данных

Два разъема Google превращают оценки в реальные цифры:

Консоль поиска Google

Поиск

Выберите точные запросы, клики и показы отчетов Google для вашего сайта, сопоставьте свою собственность и возможности ранжирования поверхности прямо из собственных данных Google.

Google Analytics 4

Трафик

Привносите данные о трафике и вовлеченности вместе с данными SEO, чтобы отчеты показывали видимость и поведение.

Запланированные обновления и отчеты с белыми метками

Вам не нужно запускать все вручную. Запланированные обновления повторно запускают сканирование, проверки рангов, проверки ключевых слов, обновления обратных ссылок, сканирования локальной сети и генерацию отчетов по каденции (ежедневно или еженедельно в зависимости от плана и объема). Они проходят через OpsIQ cron, см. Раздел Cron и автоматизация. Сгенерированные отчеты экспортируются как печатные, готовые для клиентов документы: агентства отправляют каждому клиенту регулярное обновление SEO, и поскольку данные каждого домена являются отдельными, каждый клиент всегда видит свои собственные.

Некоторые функции Site Intelligence вызывают внешних поставщиков данных и ИИ через OpsIQ Настроенный поставщик. Они работают из коробки, когда включен пакет для вашего плана. Если обновление не запускается, подтвердите OpsIQ cron работает (см. Cron и автоматизация).
Нужно ли добавлять что-либо на свой сайт для отслеживания SEO?+

Сканирование, отслеживание рангов, исследование ключевых слов и обратные ссылки работают без прикосновения к вашему сайту. Для трафика и точных данных поиска подключите Google Search Console и GA4.

Можно ли отследить более одного домена?+

Да. Добавьте каждый домен отдельно; их сканы, рейтинги и отчеты остаются полностью изолированными друг от друга.

Как часто я должен ползать?+

Еженедельный список достаточно для большинства сайтов; сканируйте по требованию после большого изменения контента или структуры. Установите график, чтобы вы никогда не забывали.

Рост и SEO

Авто-реализация (SEO Агент)

Auto-Implement - это часть Site Intelligence, которая на самом деле применяет исправления, которые рекомендует аналитик сканирования и ИИ, вместо того, чтобы только советовать вам. Агент работает строго из того, что уже найдено Site Intelligence (он никогда не сможет придумать изменение) и проводит каждое исправление через один и тот же безопасный цикл: сухой предварительный просмотр, ваше одобрение в шаге, запись в реальном времени, автоматический снимок и повторный просмотр, который доказывает, что количество открытых выпусков снизилось. Это функция с управляемым AI; она появляется как действие автоматического внедрения (ракета) внутри раздела Site Intelligence и выключается до тех пор, пока вы ее не включаете.

Автоматическое осуществление
Автоматический SEO агентПоток, показывающий рекомендуемые исправления SEO, перемещается через предварительный просмотр, одобрение и живое письмо с повторным просмотром.Автоматическое осуществлениеyoursite.comРекомендуемые исправленияAdd missing <title>утвержденныйРемонт robots. txtутвержденныйОтправьте файл sitemap.xmlобзорДрай-Рун Превью (рассказ)+ <title>AI Helpdesk - OpsIQ</title>+ <meta name=description ...>- <title>Home</title>одобрятьСкипДокажите это - Re-CRAWLОткрытые вопросы 124Снимок сохранен1ПРЕВОСПЕЧАНИЕСухой дифф каждого фикса2Продюсер и авторSSH или размещенный API3Доказательство и ROLLBACKRe-crawl + скриншот
Как проходит сеанс: агент перечисляет исправления, которые уже рекомендованы Site Intelligence, показывает сухой дифф каждого из них, применяет те, которые вы одобряете. SSH или воспользовавшись API Снимки перед каждой записью и повторные сканы, чтобы доказать, что количество открытых выпусков упало.

Что может измениться

Агент только применяет исправления, которые уже рекомендованы Site Intelligence (или аналитиком ИИ) для этого домена.

Конфигурация сервера

sitemap.xml, robots. txt и перенаправление канонических правил заголовка в . htaccess (Apache / LiteSpeed) или конфигурацию nginx.

Перенаправить цепи

Сворачивает цепочку многохоповых перенаправлений вниз до одного прыжка прямо в конечный URL, внутри того же блока управляемых . htaccess, поэтому скорость и значение ссылки перестают просачиваться через дополнительные прыжки.

Page <head>

Отсутствие или слабые заголовки страниц, метаописания, канонические теги и блоки структурированных данных (схемы).

WordPress SEO

Yoast, Rank Math и SEOPress titles & meta, а также альтернативный текст изображения, применяемый через WP-CLI на SSH Путь или отдых API На проложенном пути.

WordPress структурированные данные

Добавить JSON- LD (схема) на страницах, в которых его нет. SSH Путь небольшой управляемый помощник (обязательный плагин) печатает разметку, чтобы она работала с или без плагина SEO; на размещенном пути ваш плагин SEO несет его.

Внутренние связи

Добавляет одну релевантную внутреннюю ссылку внутри существующего контента WordPress, чтобы спасти страницы-сироты и подключить связанные сообщения. Одна ссылка на страницу, никогда не в заголовке, существующей ссылке или шорткоде, и всегда сначала одобрена вами.

Тонкий контент переписывает

Проекты полного замещения контента для тонких страниц (включаются опцией сканирования, см. ниже). Каждый черновик рецензируется и утверждается вами до того, как что-либо публикуется, а старый контент сохраняется, чтобы его можно было восстановить.

Кэш страницы (WordPress)

Включает кэширование страницы W3 Total Cache, когда сканирование обнаруживает проблемы со скоростью и этот плагин установлен, поэтому страницы обслуживаются быстрее.

Shopify SEO

Заголовки и описания SEO продукта и коллекции, страница и статья блога SEO, а также 301 перенаправлять, через Shopify Админ API.

Webflow SEO

Заголовок страницы SEO и мета-описание через Webflow Данные API v2.

Подготовьте исправления автоматически (два варианта сканирования)

Панель Site Intelligence Configure для домена (его настройки сканирования) имеет два варианта, которые определяют, сколько агент выстраивается для вас заранее. Оба по умолчанию отключены и оба используют кредит ИИ, поэтому вы включаете их только тогда, когда хотите, чтобы эта работа была выполнена для вас.

Автоподготовка ИИ исправляет после каждого сканирования

Каждый скан также пишет конкретное содержание исправления (титулы, метаописания, альтернативный текст, схема, перенаправления) для того, что он нашел, поэтому исправления готовы рассмотреть и применить момент завершения сканирования вместо того, чтобы генерироваться позже по требованию.

Переписывается контент ИИ (тонкие страницы)

Агент может составлять полный замену контента для тонких страниц. Ничто никогда не публикуется самостоятельно: каждый черновик появляется как изменение, которое вы просматриваете бок о бок и одобряете или отвергаете, предыдущий контент сохраняется таким образом, что он обратим, и он ограничен несколькими страницами за пропуск. Использует кредит ИИ на проект.

💡
Все изменения проходят через одно и то же одобрение, моментальный снимок и откат, как и любое другое исправление, поэтому включение их никогда не оживляет ничего само по себе.

Два способа, которыми он соединяет

SSH / SFTP путь

самоуправляемый

Для сайтов на вашем собственном сервере агент подключается через SSH/SFTP используя учетные данные, которые вы храните, редактируете конфигурацию сервера и файлы страниц напрямую и запускает WP-CLI для WordPress Лучше всего, когда у вас есть доступ к оболочке и вам нужен полный контроль над файлами.

Хостинг.API Путь (нет) SSH)

Без снаряда

Для платформ, которые не позволяют SSH Полностью агент работает через официальное лицо.API соединитель, WordPress (REST + Пароли приложений), Webflow (Данные API v2) и Shopify (Админ)API На хосте ничего не установлено.

💡
Wix и Squarespace не имеют публичного SEO-записи API, поэтому на этих платформах Auto-Implement работает в консультативном режиме: он показывает вам точное изменение (точный заголовок, мета или настройка) для вас, чтобы применить вручную.

Включите разъемы

Агент достигает каждой платформы через разъем:

построенный в

Shopify и WordPress соединительные шлюпки с кораблем OpsIQ Просто включите их под Connectors и добавьте учетные данные магазина / сайта.

С рынка / The Marketplace

Webflow, Wix и Squarespace устанавливаются из Connectors → Marketplace, затем подключаются таким же образом.

Как проходит сессия

1
Выбери фиксы

Открытый авто-реализатор (ракета) из раздела Site Intelligence. В нем перечислены проблемы, которые уже обнаружил сайт Intelligence, что он может исправить на этом домене.

2
Просмотреть каждое изменение

Для каждого исправления агент показывает сухой дифф (точно, что он напишет), прежде чем что-либо коснется живого сайта.

3
Утвердить шаг за шагом

Вы одобряете (или пропускаете) каждое изменение индивидуально. Ничто не применяется без вашего явного согласия на этот шаг.

4
Он пишет, а затем снимки

При одобрении агент делает живые изменения SSH или воспользовавшись API и сначала сохраняет снимок, поэтому любое изменение может быть откатано назад.

5
Докажи это, живи

Применяя каждое изменение, агент немедленно перепроверяет эту страницу и показывает вердикт «фиксированный живой», поэтому вы смотрите, как каждый фиксируется на странице в реальном времени. В конце он повторно просматривает весь сайт и подтверждает количество открытых вопросов, которое упало.

Безопасность и выставление счетов

только SEO

Агент может делать только то, что рекомендовано для этого домена. Он не может вносить произвольные изменения на ваш сайт или сервер.

Поэтапное утверждение

Каждая статья рассматривается как дифф и применяется только после того, как вы одобрите этот конкретный шаг.

Снимок и откат

Перед каждой записью сохраняется снимок, поэтому любые изменения могут быть возвращены.

Живое доказательство шага

Каждая измененная страница перепроверяется в момент написания и получает вердикт «фиксированный живой», поэтому исправление подтверждается против живой страницы сразу, а не только при закрытии повторного сканирования.

Контент никогда не публикуется автоматически

Внутренние ссылки и переписывание контента на тонких страницах имеют более высокую отдачу, поэтому они всегда показываются вам для одобрения и никогда не применяются автоматически, независимо от режима работы.

Только управляемый ИИ

Авто-реализация работает на управляемых ИИ; она блокируется, когда рабочее пространство использует свои собственные (BYOK) ключи.

Биллинг

Токены AI обычно оплачиваются по мере их использования, плюс одна фиксированная плата за использование в течение сеанса автоматического внедрения, оба из одного и того же кредита с управляемым ИИ.

Авто-реализация отключена по умолчанию. Включите ее на странице конфигурации AI (карта автоматического внедрения) и убедитесь, что разъем для вашей платформы подключен первым.
Изменится ли что-то без спроса?+

Нет, каждое изменение предварительно рассматривается как сухой дифф и применяется только после того, как вы одобрите этот точный шаг. Снимок сохраняется перед каждой записью, чтобы вы могли откатиться назад.

Нужен ли мне SSH?+

Не включай. WordPress, Shopify или Webflow Они работают через своего чиновника APIs Без доступа к оболочке. SSH Это только один из двух путей, используемых, когда вы хотите, чтобы агент редактировал конфигурацию сервера и файлы непосредственно на вашем собственном сервере.

Откуда мне знать, что это сработало?+

После применения утвержденных исправлений агент повторно просматривает сайт и показывает количество открытых вопросов до и после, поэтому вы можете подтвердить, что исправления уменьшили проблемы.

Будет ли он переписывать или публиковать контент страницы самостоятельно?+

Нет. Переписывание контента ИИ отключается до тех пор, пока вы не включите его в опции сканирования, они ограничены несколькими тонкими страницами за пропуск, и каждый черновик показан вам для одобрения рядом перед тем, как что-либо будет опубликовано. Предыдущий контент сохраняется, поэтому перезапись всегда может быть возвращена.

Могу ли я использовать его с помощью собственных ключей?+

Авто-реализация только управляется ИИ и блокируется под BYOK. Он выставляет токены AI обычно плюс один фиксированный сбор за использование за сессию, из того же кредита управляемый ИИ.

Рост и вовлеченность

Студия Survey Studios

Survey Studio — это рабочее пространство для создания редактируемых опросов, которые можно предоставлять в виде богатой отдельной страницы, виджета веб-сайта или встроенного вставки. Текущий продукт также обеспечивает размещение ссылок, предварительный просмотр подписанных черновиков, частные приглашения, обмен QR-кодами, просмотр ответов и аналитику по сфере охвата опроса. Виджет веб-страницы является одним из вариантов доставки; он не определяет опрос.

⚠️
Граница между текущим и целевым: Премиум-создание и предварительный просмотр, Connector Builder survey Возможности и граница реестра / здравоохранения, принадлежащая Survey, доступны сейчас. Survey Studio по-прежнему нуждается в независимой архитектуре многоразового развертывания, шлюзе идентификации опросов с подписью токена, нацеливании / переменной проводке, потоке отправки CRM Outreach и типизированном коде. surveys.* API.

Создать опрос

1
Выберите, как люди будут его принимать

Нынешний мастер предлагает автономные страницы и ссылки, виджет веб-сайта и встроенное встраивание. Утвержденный целевой поток начинается с типа опроса и позже добавляет CRM-письмо, частные ссылки и QR-развертывания в качестве первоклассных вариантов.

2
Выберите цель

Выберите NPS, CSAT, CES, обратную связь с продуктом, после покупки, отмены, входа на борт, веб-сайт, событие, вебинар, поддержку, свинец / демонстрацию, пробную версию, отзыв, исследование, сотрудник, прием или общую обратную реакцию.

3
Используйте полный шаблон или начните с нуля

В текущем каталоге есть готовые редактируемые стартеры, сгруппированные по назначению. Выбирая шаблон, создается скопированный черновик: изменение вашего опроса не меняет стартера или другого опроса.

4
Настройка или быстрый обзор

Настройка открывает каждый вопрос, дизайн, поведение и контроль доставки. Быстрый обзор открывает тот же проект при окончательной проверке клиент-просмотр. Ничто не публикует или отправляет автоматически.

Выбор доставки и текущее поведение

Отдельная страница и ссылка

Адаптивная фирменная страница с собственным URL. Используйте частные приглашения и истечение срока действия, когда каждому получателю нужна контролируемая ссылка.

Виджет сайта

Он может использовать страницу, географию, устройство, посетителя, дату, выборку, охлаждение, правила посещения и квоты. Он по-прежнему поддерживается устаревшим мостом с активными виджетами при построении архитектуры развертывания.

Встроенный inline

Ответный опрос, размещенный внутри страницы, портала, продукта или центра помощи. Не требует Студии Промоушен.

Электронная почта

Сегодня студия может генерировать приглашения HTML и частные ссылки. Сквозная отправка из CRM-контактов/сегментов, с согласия, подавлением, планированием, повторным запросом и корреляцией ответов, является утвержденной целью интеграции CRM Outreach.

Дизайн предприятия и предварительный просмотр

Страницы опроса имеют темы, принадлежащие Survey и семейства Page-layout, адаптивные элементы управления, приветственную копию и копию завершения, а также подписанный предварительный просмотр проекта. Дизайнерский предварительный обзор находится на полной ширине ниже редактора, а не узкой боковой рельс. Он использует реально размещенную среду выполнения в песочнице кадра и поддерживает ширину рабочего стола, планшета и телефона; трафик предварительного просмотра не пишет ответы или аналитику.

💡
Survey Studio не зависит от Promotion Studio. Ориентация на время выполнения, личность, активы, рендеринг и аналитика должны принадлежать Survey. Контент продвижения может быть повторно использован только через явную одноразовую копию / импорт, который создает отдельные данные опроса; более поздние редактирования промоакции не должны иметь никакого эффекта.

Полная форма продукта

Независимые развертывания

Живи

В одном опросе могут быть отдельно отредактированы страницы, виджеты, встраивания, CRM-почта, частные ссылки и QR-развертывания, каждое со своим состоянием, дизайном, аудиторией и аналитикой. Каждый опрос может быть приостановлен, отключен или удален.

CRM Outreach и кампании

Живи

Создайте проверенную аудиторию из сегментов CRM и разъемов, способных к опросу, заморозьте ее в неизменяемой версии, выдайте по одному подписанному приглашению каждый и отправьте через прикрепленный исходящий разъединитель электронной почты с доказательством доставки по приглашению.

Полевой комплект и проверка

Живи

Слайдеры, выбор изображений, загрузка файлов, подпись, адрес, телефон, заголовки и богатый текст с длиной мин/макс, электронная почта/URL/number presets, пользовательский текст ошибки и предварительный заполнение запроса URL параметров.

Логика, формулы, результаты

Живи

И / или группы состояний, правила ветвей, безопасный движок формулы над ответами и полосы результатов, которые несут свою собственную страницу результата: забитая викторина приземляется на свой вердикт.

Язык, киоск, префит

Живи

Язык посетителя раскрывающийся список только языков с реальными переводами, режим киоска для общих планшетов (большие цели, авто-перезагрузка, отсутствие перенаправлений), сборщик ссылок предварительного заполнения и редактируемый безопасный значок и нижний текст.

Версия A/B тестирования

Живи

Опубликовать версию претендента на любое развертывание с разделением трафика. Посетителям назначаются липкие, ответы штампуются с версией, фактически обслуживаемой, а в таблице сравнения показаны ответы, завершение и средний балл за версию. Продвигайте победителя одним щелчком мыши.

Недельный дайджест

Живи

Еженедельное электронное письмо с последними 7 днями опроса KPI, самыми загруженными опросами, импульсом обратной связи и последним брифингом по ИИ, отправленным через прикрепленный исходящий разъем.

Управление

Живи

Список доступа для каждого опроса ограничивает, кто может редактировать, публиковать или удалять опрос. Опубликовать одобрение (четыре глаза) требует второго администратора, чтобы выпустить точный проект; редакция сбрасывает утверждение. Проект ссылок на акции позволяет рецензенту увидеть реальный проект без входа в систему.

Платформа для разработчиков

Живи

Контракт на подключение 2.2, типизированные опросы.* и обратная связь.* api/v1, канонический опрос.* события, прочные подписанные веб-хуки с форматами ретрансляции Slack и Google Sheets и один ответ PDF Экспорт.

Рост и вовлеченность

Аналитика опросов и обратная связь - это разные продукты

Survey Analytics объясняет, как опрос сам по себе достигает людей и выполняет. Обратная связь объясняет, что клиенты сказали во всех разрешенных источниках и что бизнес должен с этим делать. Два продукта связывают друг с другом, но не делятся или переписывают аналитическую правду.

Аналитика опросов

Вводимые из индивидуального опроса в Survey Studio, а не из глобальной боковой навигации. Он измеряет приемлемость, экспозицию, поведение триггера, запуски, завершение, оставление, трение вопросов и ответвлений, сроки, результаты развертывания / кампании / версии и надежность выполнения.

Обсуждение Feedback Overview & Inbox

Один доступный для получения разрешений хронологический канал для заполненных ответов на опросы, устаревших виджетов обратной связи, чата и билета CSAT, отзывов о билетах, рейтингов AI-ответов клиентов, полезных голосов базы знаний и утвержденных внешних / пользовательских источников.

Аналитика обратной связи

Анализирует значение клиента: оригинальные метрические тенденции, темы / темы, чувства, эмоции, намерения, срочность, запросы, жалобы, похвалы, сегменты путешествий / продуктов / услуг / команд, недоброжелатели и результаты замкнутого цикла.

Владение данными

Ответы на опрос остаются авторитетными в хранилище обзоров. Обратная связь хранит восстановленную исходную ссылку и полученные сигналы, а затем загружает разрешенные доказательства по требованию. Один завершенный ответ на опрос становится максимум одним элементом обратной связи.

⚠️
На текущей странице обратной связи по-прежнему есть браузер ответа на опрос и отдельный устаревший почтовый ящик виджета, а его итоговые показатели ИИ еще не используют полную нормализованную модель источника. Единый обзор / Входящие / Аналитика / Источники и здоровье - цель реализации.

NPS, CSAT, CES, звезды, большие пальцы и полезность всегда должны сохранять свой оригинальный метод, масштаб, образец, окно даты и знаменатель.

Рост и SEO

Студия Продвижения

Студия продвижения превращает ваш сайт в движок конверсии. Дизайн всплывающих окон, баннеров, слайдов, верхних / нижних баров, полноэкранных поглощений, встроенных блоков и даже переадресаций на основе страны, а затем показывает правильное сообщение нужному посетителю в нужный момент. Все доставляется через виджет OpsIQ уже на вашем сайте, поэтому нет ничего дополнительного для установки. Вы разрабатываете и сохраняете кампании в любое время; они показывают только после того, как вы публикуете их, и студия включена для вашего рабочего пространства.

Студия Продвижения
Промоутер студии DesignerДизайнер визуальной кампании с палитрой блоков, всплывающим окном на холсте и панелью таргетинга.Студио-промоушен - ДизайнерБЛОКСxДобро пожаловать, {first_name}!Выберите 15% из вашего первого заказаSAVE15Заявить мой купонВЫСТУПЛЕНИЕСтранаСША, CAтриггернамерение выйтиA/B разделение50 / 50публиковать1РЕЗЮМЕПеретаскивайте блоки на холст2ТАРАЖСтрана, страница, аудитория3Извините.Победитель A/B + AI-проницательность
Визуальный дизайнер: палитра блоков слева, ваша кампания на холсте (здесь всплывающий купон с использованием токена {first_name}), а таргетинг + панель публикации справа.

Большая картина

Кампания

Что?

Одна акция: всплывающее окно, баннер, бар, слайд-ин, полноэкранный, встроенный блок или гео-перенаправление. У каждой есть цель: продажи, лидерство, регистрация, чат, опрос, объявление.

Дизайн и версии

Как

Каждый сейв создает новую версию, так что вы всегда можете откатиться назад.

целенаправленный

Кто?

Кто его видит: страна, страница, устройство, источник трафика, возврат по сравнению с новым, расписание и (с разъемом) ваши зарегистрированные клиенты.

Триггеры

Когда

Когда он появляется: мгновенно, при задержке, на прокрутке, на выходе-намерение, при бездействии, на клике, после N страниц или из чата / билетной активности.

Аналитика

Результаты

Живые впечатления, клики, конверсии, воронка выпадения, разделение страны / страницы / устройства, победители A / B и понимание ИИ.

Запустите свой первый промоушен в 5 Шаги

1
Начните с шаблона или пустой

Откройте студию промоакций и нажмите Новая кампания, или выберите готовый дизайн из галереи Шаблонов. В дизайнере открывается черновик.

2
Разработай его.

Перетаскивайте блоки, заголовки, текст, кнопки, изображения, значки, статистику, обратный отсчет, формы, купоны, видео, рейтинги, спин-колеса. Цвета стилей, градиенты и 3D эффекты с ползунками. Предварительный просмотр рабочего стола / планшета / мобильного устройства и используйте бесплатный переезд для размещения чего угодно в любом месте.

3
Персонализировать

Тип токенов как {first_name}, {country} или {company} В любое время они становятся настоящими ценностями посетителя.

4
Цель и триггер

Выберите, кто его видит (страна, страница, устройство, аудитория) и когда он загорается (задержка, прокрутка, намерение выхода). Оставьте правило пустым, чтобы означать всех.

5
Проверить, а потом опубликовать

Нажмите кнопку Проверить, чтобы быстро сканировать перед запуском, затем Опубликовать. Он начинает работать в течение нескольких секунд и начинает собирать аналитику.

Блоки, которые вы можете построить

Контент

ядро

Заголовок, абзац, список, цитата, изображение, иконка, значок, статус, делитель и пробел, строительные блоки любого сообщения.

Призыв к действию

ядро

Кнопки с реальными действиями: откройте ссылку, запустите чат, создайте билет, скопируйте купон или перейдите на страницу.

Срочная необходимость и захват

Премиум

Таймеры обратного отсчета, формы (электронная почта / телефон / текст), купонные выписки и видеовкладки.

Игровые автоматы и обратная связь

Премиум

Колеса спин-к-вину, скретч-карты, NPS / звездные рейтинги и многоступенчатые воронки.

Складывание и эффекты

Премиум

Колонки, прогресс-бары, социальная доля, тикеры социального доказательства, да / нет двухэтапные викторины и 3D эффекты, наклон, свечение, параллакс, стекломорфизм.

Токены персонализации

Введите любой из них в заголовки, абзацы, кнопки, значки, статистику, списки или цитаты. Они заменяются на живые данные посетителя в момент показа акции (всегда очищаются для безопасности):

Доступные токены
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)

Целевая ссылка

Страна и местоположение

Показать только в (или спрятать от) выбранных стран, городов или часовых поясов через GeoIP. Отлично подходит для конкретных регионов предложений или гео-перенаправления.

Страницы и URLs

Ограничьте определенные страницы, используя равные / Start-with / содержит / regex и исключите страницы.

Устройство

Настольный компьютер, планшет или мобильный телефон, например, тонкая панель на мобильном устройстве, модаль на рабочем столе.

Тип посетителя

Новый, возвращающийся, известный (в вашем CRM) или анонимный; сегменты CRM, этап жизненного цикла, лид-счет или язык браузера.

Источник трафика

UTM (utm_source, utm@campaign) или ссылающийся сайт, например, только посетители из определенного объявления.

Расписание и частота

Даты начала/конца, окна времени суток и как часто человек может видеть его (за сеанс, в день, после закрытия / нажатия / конвертации).

A/B трафик разделился

Покажите проценту посетителей и запустите варианты «голова к голове»; один и тот же человек всегда видит один и то же вариант.

Аудитория (logged-in)

С включенным разъемом, ориентируйтесь на состояние живой учетной записи, например, клиенты с неоплаченными счетами или активные подписчики.

Триггеры

Выберите, как выглядит акция: Сразу после задержки, на глубине прокрутки, на выходе-намерение, при холостом режиме, на щелчке элемента, после просмотра ряда страниц, на бланке формы или от активности чата / билета. Разработчики могут уволить одного из своего собственного кода с помощью window.OpsIQPromo.fire('event').

Клиенты, зарегистрированные в системе Target Logged-in (коннекторы)

Это то, что делает OpsIQ Специальные рекламные акции: подключите платформу WHMCS (или любой разъем, который поддерживает аудиторию) и студия могут ориентироваться на посетителей по состоянию их учетной записи в реальном времени.

1
Включите разъем аудитории

Under Connectors, включите тот, который раскрывает факты аудитории WHMCS Клиенты надежно распознаются при входе на эту платформу, OpsIQ Никогда не доверяйте электронной почте.

2
Добавить правило аудитории

В разделе кампании Таргетирование > Аудитория установите требование о входе в систему и добавьте правила, например неоплаченные счета-фактуры >= 1, подписка просрочена или кредит на счету > 0.

3
Персонализация с их данными

Используйте токены, такие как {first_name} или {balance_due} Напоминание "У вас есть просроченная счет-фактура" пишет само себя.

Целевой таргетинг аудитории безопасен: если разъем не может подтвердить факт (или посетитель не вошел в систему), рекламная акция просто не показывает, поэтому предложение с целью выставления счетов никогда не доходит до неправильного человека.

Связанная коммерция (студия супердержавы)

Карты товаров из вашего магазина

Живые данные

Блок продукта тянет реальные предметы (имя, цена, цена продажи, изображение, ссылка) прямо из WHMCS, WooCommerce, Shopify или ваш OpsIQ Кликните «Сохраняйте свежесть», и карта обновляет свою цену с платформы каждый час во время публикации.

Купоны, предоставляемые магазином

купоны

Блок купона может создать реальный код скидки в вашем магазине, когда вы публикуете, поэтому код, который показывает посетитель, всегда работает при оформлении заказа.

Доход от заказов и правды

Атрибуция

Реальные заказы с ваших платформ сопоставляются с кампаниями почасово (с помощью кода купона или электронной почты руководителя), поэтому доход, который вы видите, зависит от фактических продаж, а не оценок.

Реальные социальные доказательства

Доверие

Социально защищенный тиккер может вести с подлинными недавними заказами («Заказанный Ada Стартер План · 2h ago»), только имя и пункт, никогда не электронные письма или суммы.

Эксперименты и путешествия

A/B-варианты и автопобедитель

Разделите трафик между вариантами дизайна; пусть студия автоматически продвигает статистического победителя или передает трафик бандитскому оптимизатору, который перемещает посетителей к тому, что преобразуется в качестве доказательства.

Подъём в упор

Зарезервируйте кусочек посетителей, которые ничего не видят, чтобы вы могли доказать, что сама кампания вызывает подъем.

Варианты сегментов

Разный контент на одну аудиторию в рамках одной и той же кампании (мобильные посетители, большие тележки, возвращающиеся клиенты) каждый сегмент получает свою версию.

Эксперименты с триггером

Варианты также могут проверять, когда появится: немедленное vs замедленное vs намерение выйти из игры, измеренное «голова к голове».

Путешествия (цепь)

Цель — то, что кто-то сделал с другой кампанией («видел кампанию А, но не конвертировал») для создания многоступенчатых последовательностей продвижения.

тизер

Маленькие посетители могут снова открыться после закрытия кампании, поэтому закрытый всплывающий окно никогда не исчезнет навсегда.

Знай, что случилось

Нажмите тепловую карту

дизайнер

В дизайнере переключите тепловую карту, чтобы нарисовать реальных посетителей, щелкающих по каждому блоку вашего дизайна.

Шаговая труба

Воронки

Многошаговые кампании показывают, где именно люди падают, экран за экраном.

Сравнение кампаний

Студио

Составьте до четырех кампаний бок о бок (впечатления, клики, конверсии), наилучшее значение выделено.

Недельная история и дайджест

ИИ

Каждый понедельник в ваших уведомлениях попадает дайджест; кнопка «📖 Weekly story» пишет резюме на простом языке с последующими шагами, когда вы этого хотите.

Работать комфортно

AI Copilot и идеи

Пообщайтесь с дизайнерским копилотом, чтобы отредактировать холст («сделать заголовок срочным, добавить обратный отсчет»), получить идеи кампании из ваших собственных данных о трафике, перевести кампанию на страну или автоматически исправить низкий рейтинг дизайна.

Бренд Кит импорт

Одна команда читает ваш сайт и предлагает ваши настоящие цвета бренда и шрифты; сохраните, и каждый выборщик будет вести с ними.

Многоэкранные воронки

Шаги блоков получают истинное редактирование на экран: вкладки для каждого экрана, добавить или переупорядочить экраны, и предварительный просмотр следует за ними.

Названы версии и присутствие

Назовите важные версии («Кандидат на запуск»), восстановите любую из них и посмотрите предупреждение, когда товарищ по команде редактирует ту же кампанию.

Устройства Strip & Rulers

См. настольные, планшетные и мобильные устройства бок о бок в одном представлении; переключайте пиксельные линейки для точного размещения.

Хостинг страницы и каналов

Каждая кампания также может быть отдельной размещенной страницей для био- и QR-кодов, последовательности капель электронной почты для захваченных потенциальных клиентов или черновиком веб-толчка с одним щелчком мыши.

Безопасность предприятия

Опубликовать окна замораживания (периоды заморозки), аварийный переключатель паузы, утверждения, аудиторский след и откат версии.

Нужно ли добавлять код на свой сайт?+

Промоакции предоставляются тем же виджетом OpsIQ, который вы уже установили.

Увидят ли посетители один и тот же всплывающий огонек снова и снова?+

Нет. Установлены ограничения частоты (за сеанс/день, или остановка после того, как кто-то закроется, щелкнет или преобразует). Применяются разумные по умолчанию.

Кто может публиковать?+

Издательские, паузные, архивные и откатные работы ограничены владельцами рабочих мест и полными администраторами. Любой член команды может создавать и проектировать проекты.

Рост и SEO

Дизайнер продвижения

Promotion Designer - это адаптивный редактор блоков для создания, обзора, версионного копирования и публикации опыта кампании.

Экран продукта
Дизайнер продвиженияДизайнер сочетает в себе живое полотно, предварительные просмотры устройств, блоки, переменные персонализации, комментарии и историю версий.Дизайнер продвижениярабочее пространствоVIEWPORTрабочий столВЕРСИЯv12ГосударствоПроектЖИВОЙ ВИДЕО РАБОТЫБлок героевЗаголовок, СМИ и CTAРедактироватьБлок предложенияСкидка и крайний срокРедактироватьперсонализацияКонтактные и агитационные переменныеГотовыПроверка запускаКомментарии и подтверждениеОбзор1BUILD BLOCKSРедактировать live layout2ПРЕВОСПЕЧАНИЕНастольный, планшетный, мобильный3PUBLISHВерсия для релиза
Дизайнер сочетает в себе живое полотно, предварительные просмотры устройств, блоки, переменные персонализации, комментарии и историю версий.

Используйте блоки для составления опыта, предварительного просмотра каждого поддерживаемого порта просмотра и вставки утвержденных переменных персонализации. Проверка комментариев и происхождения AI-медиа перед запуском. Сохранение создает версии, чтобы предыдущий дизайн можно было проверить или восстановить.

Рост и SEO

Шаблоны продвижения

Шаблоны предоставляют доступную для поиска, классифицированную стартовую галерею для кампаний Promotion Studio.

Экран продукта
Шаблоны продвиженияГалерея шаблонов фильтрует макеты премиум-класса и применяет цвета бренда рабочего пространства, когда шаблон становится черновиком.Шаблоны продвижениярабочее пространствоКатегорияпреобразованиеRESULTS24БрендприкладнойЖИВОЙ ВИДЕО РАБОТЫПредложение на выходМодаль срочности и CTAПредварительный просмотрПриветствуем новых посетителейСписок баннеров и льготПредварительный просмотрЗапуск продуктаГерой, доказательство и обратный отсчетПредварительный просмотрЗапрос обратной связиКомпактный опрос подскажутПредварительный просмотр1FILTERКатегория и поиск2ПРЕВОСПЕЧАНИЕОсмотрите полный дизайн3USEСоздать фирменный проект
Галерея шаблонов фильтрует макеты премиум-класса и применяет цвета бренда рабочего пространства, когда шаблон становится черновиком.

Поиск или фильтр по категориям, загрузка дополнительных результатов, предварительный просмотр всего опыта, затем выбор Используйте шаблонНовая кампания остается черновиком и может быть изменена в Промо-дизайне до публикации.

Рост и SEO

Аналитика продвижения

Аналитика продвижения соединяет показы и клики с конверсиями, контекстом аудитории, результатами действий разъема и обучением кампании.

Экран продукта
Аналитика продвиженияПромо-аналитика показывает производительность заголовков, аудиторию и сбои в работе, приводит к результатам экспорта и разъема.Аналитика продвижениярабочее пространствоIMPRESSIONS42.8kКТР6.4%CONVERSIONS814ЖИВОЙ ВИДЕО РАБОТЫСтранаВеликобритания · 31%РаспадСтраница/pricing · 22%РаспадтриггерНамерение выйти · 44%РаспадДействие в соединенииКупон создан · 97% успехИтоги1Извините.Впечатления от преобразования2SLICEСтраница, страна, устройство3LEARNПрименять прозрение
Промо-аналитика показывает производительность заголовков, аудиторию и сбои в работе, приводит к результатам экспорта и разъема.

Прочитайте показы, рейтинг кликов и конверсии вместе. Разбейте результаты по странам, страницам, триггерам и устройствам; экспортируйте захваченные лиды при необходимости. Результаты действия подключения показывают, действительно ли обещанное последующее продвижение выполнялось. Обзоры ИИ и обучения следует рассматривать как гипотезы для проверки, а не автоматическое доказательство.

Рост и SEO

Объявления

Объявления публикуют сообщение в области уведомлений виджета с дополнительным таргетингом, расписанием и призывом к действию.

Экран продукта
ОбъявленияРедактор объявлений включает контент, CTA, аудиторию, сегмент, правило страницы, активные даты и визуальный стиль.Объявлениярабочее пространствоактивный3AUDIENCEСегментШедулеДжул 22–29ЖИВОЙ ВИДЕО РАБОТЫНазваниеПланируемое техническое обслуживаниеГотовыКонтентMarkdown сообщениеГотовыТАЧитать обновлениефакультативныйПравилоЦеновые страницы · активные клиентыЦель1WRITEНазвание и Markdown2ТАРАЖАудитория, сегмент, страница3ШедулеАктивное окно
Редактор объявлений включает контент, CTA, аудиторию, сегмент, правило страницы, активные даты и визуальный стиль.

Выберите всех посетителей, подписавшихся или новых; необязательно сузьте аудиторию с помощью контактного сегмента и правила страницы. Установите активный-от/активный-до даты и активного флага. Премиум-стили пресеты и цвета изменяют представление, но не заменяют четкий контент.

Рост и SEO

Толкать кампании

Push-кампании отправляют уведомления браузера подписавшимся посетителям после того, как они покинули сайт.

Экран продукта
Толкать кампанииТолчок композитора показывает охват подписки, содержание, СМИ, действия, целевые правила и состояние расписания.Толкать кампаниирабочее пространствоSUBSCRIBERS8,214отправлено31.6kCLICK RATE5.8%ЖИВОЙ ВИДЕО РАБОТЫНазваниеВаша тележка ждетГотовытелоВозвращение сегодня бесплатноГотовыТАОткрытый вагонГотовыРасписаниеОтправить сейчас или по расписаниюПроект1PREPARE PUSHНазвание, тело, икона2ТАРАЖАудитория, сегмент, страница3SENDТеперь расписание или проект
Толчок композитора показывает охват подписки, содержание, СМИ, действия, целевые правила и состояние расписания.

Настройка клавиш Web Push сначала в настройках Web P push. Кампания может включать заголовок, тело, иконку, изображение героя, значок, CTA и до двух кнопок действия; постоянное уведомление остается до тех пор, пока посетитель не взаимодействовал.

Целевой охват аудитории, дополнительный сегмент контактов и правило страницы. Сохранить черновик, запланировать его или отправить немедленно. Используйте подписку и щелкните метрики для оценки охвата. HTTPS и правильно размещенный сервисный работник необходимы на встроенных сторонних сайтах; см. Web Push на сторонних веб-сайтах.

Рост и SEO

Проактивные сообщения

Проактивные сообщения автоматически доходят до пользователя в тот момент, когда его поведение соответствует правилу, прежде чем он спросит. Вы строите каждое из них как правило с тремя частями: что должно произойти, когда оно должно загореться и как часто. Все доставляется через виджет OpsIQ уже на вашем сайте.

активный
Проактивные сообщенияКомпозитор проактивного правила в трех частях: выберите действие (чат, баннер, тур, push, электронная почта), добавьте условия и установите частотное охлаждение.Проактивные сообщениярабочее пространство1 - действиеСообщение чатаБаннерТурТолкатьЭлектронная почта2 Условияpage = /pricingВремя на странице > 20sвозвращать3 частотаОдин раз в сессииСтатус1действиеЧат, баннер, электронная почта, push...2CONDITIONSСтраница, время, счет, возвращение3ВЫСТОЯНИЕОхлаждение на одного посетителя
Каждое проактивное правило состоит из трех вариантов: что происходит (чат, баннер, тур, push, электронная почта, веб-хук), когда (условия) и как часто (охлаждение).

Три части одного правила

1
Что должно произойти (действие)

Покажите пузырь чата или баннер на странице, начните экскурсию, отправьте веб-толчок или электронную почту, назначите отдел или запустите веб-хук. {{visitor_name}} и {{page_title}} Стать реальными ценностями.

2
Когда следует стрелять (условия)

Узкий, который запускает его: страница /URL, время на странице, глубина прокрутки, счетчик лидов, возвращение против нового, праздный. Без условий правило срабатывает для каждого посетителя. Добавьте хотя бы один для таргетинга. Условия сочетаются с И.

3
Как часто (частота)

Установите охлаждение, чтобы один и тот же человек не приставал, например, один раз за сеанс или один раз в день. Каждое правило имеет статус включено / выключено.

⚠️
Рабочее пространство переключателя «Правила работы / холостого хода почасово» позволяет действиям на стороне сервера (электронная почта, push, webhook, присваивать) выполняться в графике для известных контактов, которые в настоящее время не находятся на странице, поэтому вы можете автоматически отправлять по электронной почте пустые горячие лиды. OpsIQ Оставьте это, если вы хотите только живые подталкивания.
Будет ли огонь для всех?+

Добавьте хотя бы одно условие (страница, ведущий балл, возвращение...) для таргетинга нужных посетителей.

Как это связано с потоками и турами?+

Они работают вместе: проактивное правило может начать экскурсию, а поток чат-ботов может быть вызван проактивным правилом. Начните с одного правила сообщения в чате, затем наложите другие.

Рост и SEO

Чатботы потоки

Chatbot Flows скрипт разветвляет разговоры внутри вашего виджета чата (приветствия, ответы на ключевые слова, управляемые пути) без кода. Поток - это набор связанных шагов (узлов): вы задаете вопрос, посетитель выбирает опцию, и поток отправляет их по соответствующей ветви. Только активные потоки работают на вашем сайте.

Как это работает
Чатботы потокиПотоковое полотно: приветственный узел разветвляется на три кнопки опции, каждая из которых приводит к следующему шагу, порядку поиска или руке человеку.ПриветствуюКак я могу помочь?Отследить мой заказВопрос о биллингеРазговор с человекомПоищи заказ→ Человеческий агентТриггеры: приветствие · Ключевое слово · Руководство · После-детали · В чате
Чатботы потоки

Flow vs. AI - когда использовать

Используйте поток

Когда путь предсказуем и вы хотите, чтобы он был одинаковым каждый раз: шаги бронирования, мастер возврата, «какой план?» выборщик, сбор электронной почты перед передачей.

Используйте AI

Когда вопросы открыты, «работает ли это с моей установкой?», ИИ-клиент чата отвечает на ваши обученные знания. Поток может передать ИИ (или человеку) на любом этапе.

Триггеры

Приветствую

Запускается как сообщение открытия, когда посетитель впервые открывает чат.

Ключевое слово

Запускается, когда посетитель вводит слово, которое вы перечислили (например, возврат средств, ценообразование, отмена).

После деталей / После задержки

Начинается после того, как контактные данные будут переданы или установленное время в разговоре.

В конце чата / Проактивный

Запускается по мере завершения чата (например, рейтинг) или начинается с правила проактивного сообщения.

Постройте один в четыре шага

1
Создайте поток

Нажмите New Flow, назовите его, выберите тип триггера (и ключевые слова, если ключевое слово), сохраните. Он начинает отключаться.

2
Откройте холст

Нажмите Edit Canvas. Визуальный конструктор, где вы добавляете шаги (сообщения, вопросы с кнопками, ветвями) и подключаете их.

3
Добавить ветки и подачу

Для каждого выбора нарисуйте ветку для следующего шага. Окончайте пути, разрешив, передав ИИ или перейдя к человеку.

4
Позволить ему

Нажмите Enable. Поток немедленно переходит в ваш виджет. Отключите любое время, не теряя дизайн.

Заменяют ли потоки ИИ?+

Нет, они работают бок о бок. Используйте потоки для предсказуемых путей и ИИ для открытых вопросов; поток всегда может передаться либо тому, либо другому.

Рост и SEO

Экскурсии с гидом

Экскурсии - это пошаговые переходы, которые указывают на части вашей страницы с пузырьками речи и прожектором, направляя посетителя через бортовую или новую функцию. Они полностью тематические и построены в визуальном дизайнере с живым предварительным просмотром. Тур проходит только тогда, когда он отмечен Активным.

Как это работает
Экскурсии с гидомПотускневшая страница с кольцом прожектора вокруг кнопки Add-deal и тематическим пузырем речи 1 из 4 С помощью следующей кнопки.+ Добавить сделкуШАГ 1 из 4Создайте свою первую сделкуНажмите здесь, чтобы добавить сделку к вашему трубопроводу.Следующий →
Экскурсии с гидом

Как строится тур

Шаги

Каждый шаг нацелен на элемент и показывает пузырь с вашим текстом. Добавьте столько остановок, сколько нужно для прохождения, и закажите их.

Пресеты и тема

Начните с предустановленного или создайте свой собственный пузырь (цвета, градиенты, прожектор) с живым предварительным просмотром справа.

триггер

Необязательно связывайте Проактивное правило, чтобы тур автоматически начинался при пожаре этого правила (например, первое посещение панели приборов возвращающимся посетителем).

Активное переключение

Тур может быть запущен только в то время, когда актив тикает. Не тикай, чтобы снять его без удаления.

Постройте один в четыре шага

1
Новый тур

Нажмите «Новый гид», назовите его и необязательно связать Проактивное правило, чтобы оно начиналось автоматически.

2
Добавить шаги

Добавьте каждую остановку: выберите элемент, на который она указывает, и запишите текст пузыря. Переупорядочите до тех пор, пока не прольется путь.

3
Разработай его.

Выберите предустановку или стиль пузыря самостоятельно. Живой превью показывает именно то, что видят посетители.

4
активировать

Откройте Active и сохраните. Тур теперь может запускаться на собственном спусковом крючке или начинаться с правила Proactive Message.

Как начинаются туры?+

На своем собственном триггере или через действие «Направляемый тур» правила Проактивного сообщения, чтобы вы решили, какие посетители видят, какой тур и когда.

Рост и SEO

Цели конверсии

Цели конверсии превращают интересующую вас активность (событие входящего веб-хука, сообщение чата, разрешение билета) в записанное преобразование с полной атрибуцией. Когда активация загорается, OpsIQ регистрирует преобразование против контакта и связывает его с кампаниями, сегментами и источниками, которые привели туда.

Как это работает
Цели конверсииЦелевой поток: событие, получившее название pay. succeeded webhook, становится зарегистрированным конверсией «покупка» стоимостью $49, приписываемым его источнику и кампании, с помощью чипов быстрого запуска выше.Быстрое началоПокупка StripeДемо забронированоПодписка на новостную рассылкуpayment.succeededвходящий webhookпреобразование«Покупка» · $49приписываемыйИсточник: Кампания
Цели конверсии

Определить цель в три шага

1
Выберите триггерную активность

Нажмите Новая цель конверсии. Выберите тип активности, который считается конверсией, или используйте предустановку Quick-start, покупку Stripe, зарезервированную демонстрационную версию, регистрацию в новостном бюллетене или начало подписки.

2
Назовите его и установите значение

Дайте конверсии имя (покупка, демо_забронированная, регистрация) и необязательно фиксированное значение и окно атрибуции.

3
Спасти

С этого момента, когда активация загорается, OpsIQ записывает конверсию против контакта с атрибуцией к предыдущим касаниям.

Цели уже подключены к входящим веб-хукам: любая цель, спусковой механизм которой соответствует типу входящего события, автоматически загорается в момент приземления события. Используйте страницу Входящих веб-хоков для подключения Stripe, Calendly или любой системы, которая может POST JSON.
Что может быть конверсией?+

Любая зарегистрированная активность: входящее событие веб-хука (payment. succeeded), захват электронной почты в чате, разрешение на билет, все что угодно на линии контактов.

Аналитика

Настраиваемые приборные панели

Пользовательские панели управления позволяют вам создавать свой собственный взгляд на метрики, которые имеют значение, вместо того, чтобы полагаться только на стандартный обзор. Добавьте нужные виджеты, перетащите и измените их в понравившуюся компоновку, сохраните ее и поделитесь ею со своей командой.

Настраиваемые приборные панели
Настраиваемые приборные панелиСтроитель приборной панели с KPI и графиком виджетов, пунктирной зоной падения и кнопкой Add-widget.Настраиваемые панели инструментоврабочее пространствоМоя приборная панель+ Добавить виджетВизитёры2,481Ревеню$8.2kТРЕЙФИКПовесьте здесь виджетТОПовые страницы/pricing/docs/signup1ADD WIDGETSВыберите метрики и диаграммы2ARRANGEДраги и изменения размера3делитьсяС вашей командой
Создайте свою собственную доску: добавьте KPI, диаграмму и список виджетов, перетащите их в нужный макет, а затем поделитесь им с командой.

Постройте один в три шага

1
Добавить виджеты

Нажмите Добавить Виджет и выберите метрику или диаграмму, которую вы хотите отслеживать. Повторяйте для всего, что вы хотите на доске.

2
Устройте планировку

Перетаскивайте виджеты, чтобы переместить и перетащить их края, чтобы изменить размер. KPI наверху, диаграммы ниже. Что бы ни читалось лучше всего.

3
Сохранить и поделиться

Сохраните панель инструментов и поделитесь ею со своей командой, чтобы все смотрели одинаковые номера.

Держите отдельные доски для отдельных рабочих мест (доска «дневного взгляда» с живыми счетами и доска «ежемесячного обзора» со диаграммами трендов), чтобы каждая из них оставалась сосредоточенной.
Рост и SEO

Пропагандистские кампании

Аутрич - это OpsIQ? 1:1 и объемный механизм электронной почты: составьте персонализированное сообщение или запустите кампанию CRM сегмент, с обнаружением ответа, контролем времени отправки, отслеживанием открытых / щелчков, пикселем отслеживания и отказом от подписки в один клик. Он соответствует требованиям CAN-SPAM / CASL.

Пропаганда
Пропагандистские кампанииЭкран Outreach с вкладками Composer/Campaigns/Templates/Replies и таблицей кампаний, показывающей отправленную, открытую и ответную скорость.Пропагандарабочее пространствоКампаниикомпозиторШаблоныОтветыКЕМПАЙГНотправленоОткрытьОтветитьИюньский бюллетень1,20048%7%Последующие меры в связи с судебным разбирательством34062%14%Обратный выигрыш82039%5%Автоматическое обнаружение ответов останавливает последующие действия · Отменить подписку на каждый отправитель одним щелчком мыши11:1 & BULKСоставление или кампания2TRACKEDОткрывает, кликает, отвечает3COMPLIANTНеподписанный встроенный в
Двигатель Outreach: Отправить 1:1 или запускайте кампании в сегменте, отслеживайте открытия и ответы и оставайтесь совместимыми со встроенным обнаружением отказа от подписки и ответа.

Четыре вкладки

композитор

Написать персонализированный 1:1 e-mail с {tokens} от контакта и CRM.

Кампании

Отправляйте в сегмент CRM, запланированный или текущий, с ограничениями и контролем времени отправки.

Шаблоны

Шаблоны многоразовых сообщений для повторной аутрич-пропаганды.

Ответы

Ответы на обнаружение записей и автоматические остановки последующих действий для всех, кто ответил.

Как проходит кампания

1
Выберите аудиторию

Выберите сегмент CRM (или загрузите список). Подавление и согласие применяются автоматически.

2
составлять

Напишите сообщение с помощью токенов персонализации; предварительный просмотр против реального контакта.

3
Расписание и отправка

Отправляйте сейчас или в лучшее время. Открывается запись пикселей отслеживания; относят клики и ответы.

Пропаганда - это согласие и подавление, включает в себя отписку на один клик на каждом отправлении и следует CAN-SPAM / CASL. Ответы автоматически останавливают дальнейшие наблюдения.
Аналитика

Запланированные доклады

Запланированные отчеты отправляют по электронной почте выбранную метрику, установленную для выбранных получателей по расписанию (ежедневно, еженедельно или ежемесячно) в виде печатной белой метки. PDF Установите его один раз, и отчет автоматически попадет в почтовые ящики. OpsIQ Крон.

Запланированные доклады
Запланированные докладыЭкран с запланированными отчетами: таблица отчетов с их расписанием, получателями и временем последней отправки плюс кнопка «Сохранить отчет».Запланированные отчетырабочее пространствоЗапланированные доклады+ Сохранить отчетСообщениеШедулеРЕЦИПИТЕЛЬПоследний разНедельный трафикМонмон 9:00[email protected]2-я агаОтчет клиента SEOежемесячно[email protected]Юн 1Резюме продажежедневно[email protected]todayДоставка в виде белой метки PDF через OpsIQ крона1AUTOMATEDЕжедневно · еженедельно · ежемесячно2Белый лабельPDF для клиентов3РЕЦИПИТЕЛЬПо электронной почте по расписанию
Установите отчет один раз (метрический набор, диапазон, график, получатели) и OpsIQ Электронная почта с белой маркировкой PDF автоматически в вашей каденции.

Создайте отчет

1
Выберите, что отправить

Выберите набор показателей (трафик, SEO, продажи, поддержка ...) и диапазон дат.

2
Установить расписание и получателей

Ежедневно, еженедельно или ежемесячно, в выбранное вами время, одному или нескольким получателям электронной почты.

3
Спасти

Отчет генерирует и отправляет сами по расписанию, без ручного шага.

💡
Запланированные отчеты, выполняемые через OpsIQ cron, если отчет не поступает, подтверждают запуск Cron (см. Cron и автоматизация).
Конфиденциальность

Конфиденциальность и соблюдение

Страница конфиденциальности и соблюдения является единственным местом, где аудитору вы можете ответственно обрабатывать персональные данные: регистр согласия, журнал доступа администратора, политика резидентности и хранения данных и готовая к печати DPA в одном вкладке.

Конфиденциальность и соблюдение
Конфиденциальность и соблюдениеЭкран конфиденциальности и соответствия: вкладки для реестра согласия, журнала доступа, резиденции и DPA, с таблицей регистров согласия грантов и отзывов по каналу.Конфиденциальность и соблюдениерабочее пространствоРеестр согласияЛогин доступаРезиденцияDPAСвязатьсяКаннелдействиеДата[email protected]электронная почтадопущенныйЮн 12[email protected]pushотмененныйЮн 10[email protected]marketingдопущенныйЮн 9Поисковое подтверждение каждого согласия на предоставление и отзыв по каналу1СОДЕРЖАНИЕДоказательство каждого гранта2ACCESS LOGКто трогал данные3DPAПечатный шаблон
Один экран, готовый к просмотру: доступная для поиска книга согласия (гранты / отзывы по каналу), журнал доступа, который касался данных, настройки резидентства / удержания и печатная DPA.

Четыре вкладки

Реестр согласия

Запись с возможностью поиска каждого согласия, предоставленного и аннулированного, по контакту, каналу (электронная почта, push, SMS, in-widget), действию, источнику и дате.

Логин доступа

Кто в вашей команде просматривал, редактировал, экспортировал, стирал или отправлял данные контакта администратору, контакту, действию, указанному разуму и IP.

Резиденция и удержание

Объявите, где хранятся данные этого рабочего пространства, укажите, сколько дней строк активности (0 = навсегда), и запишите контроллер данных и DPO.

DPA шаблон

Добавление для обработки данных, которое заполняется вашим контроллером, адресом, DPO, резидентством и сохранением. Печать или сохранение как PDF.

Конфиденциальность и соблюдение пар с Cookie-студией согласия (которая собирает согласие) и Экспортной страницей (которая производит копию данных для DSAR).
Коннекторы

Подключите свои платформы

Связь с подключением OpsIQ на внешние платформы: магазины электронной коммерции, системы выставления счетов, платежные процессоры, поставщики электронной почты и пользовательские APIs После подключения ИИ может просматривать заказы, данные клиентов, подписки и многое другое и принимать меры с вашего одобрения.

Как это работает
Коннективный центрOpsIQ ядро подключено к WHMCS, Shopify, Stripe, WooCommerce, SendGrid и Google Бизнес-профиль, в каждом из которых отображается состояние подключения.WHMCSShopifyStripeWooCommerceSendGridGoogle BPOpsIQКоре1PLUG IN25+ предварительно построенные разъемы2AI CONTEXTРеальные данные платформы3ACTIONSСделано с вашего одобрения
Коннекторы

Корабли с OpsIQ

Они присутствуют в момент установки и требуют только их учетных данных.

WHMCS

Биллинг

Веб-хостинг выставления счетов: клиенты, услуги, билеты, счета-фактуры, домены, серверы.

Shopify

Электронная торговля

Электронная коммерция: заказы, клиенты, продукты, инвентарь, платежи, веб-хуки.

WooCommerce

Электронная торговля

WordPress электронная торговля: заказы, клиенты, продукты, купоны, доставка.

WordPress

СГС

Контент и пользователи в a WordPress Сайт.

Площадь

Платежи

Платежи и точка продажи: заказы, клиенты, каталог.

osCommerce

Электронная торговля

Наследие электронной коммерции: заказы, клиенты, продукты.

Отель Botble

Мост

А Botble Сайт отеля CMS через подписанный OpsIQ Реализация эталона для платформы без API.

Zendesk

Поддержка

Helpdesk: билеты, пользователи, организации, комментарии.

Бизнес-профиль Google

Маркетинг

Местный бизнес: отзывы, посты, вопросы и ответы, идеи. Использует OAuth.

Календарь Google

Производительность

Календарь и события. Использует OAuth.

Gmail и IMAP

Электронная почта

Почтовые ящики: входящая и исходящая почта, синхронизация адресной книги.

SendGrid

Электронная почта

Доставка электронной почты: отправка электронных писем и управление шаблонами.

Mailgun

Электронная почта

Доставка электронной почты: отправка электронных писем через Mailgun.

Slack, TelegramLINE, X DM

сообщение

Каналы обмена сообщениями для входящих и исходящих разговоров.

Мета-каналы

сообщение

Facebook Messenger, Instagram DM и WhatsApp.

Интеллект сайта (GA4, Консоль поиска)

Аналитика

Аналитика и данные поиска для пакета SEO.

Обогащение сайта и CRM импорт

CRM (управление связями с клиентами)

Обогащение компании и объемный импорт клиентов.

Доступно с рынка

Это опубликованные пакеты, не являющиеся частью установки. Установите один из Коннекторов Marketplace и он скопирован в папку живых коннекторах, после чего ведет себя точно так же, как те, что выше.

Stripe

рыночная площадка

Платежи: сборы, клиенты, счета-фактуры, подписки, выплаты, споры.

BigCommerce

рыночная площадка

Электронная коммерция: заказы, клиенты, продукты, категории, бренды.

Magento 2

рыночная площадка

Электронная коммерция: заказы, клиенты, продукты, категории, инвентарь.

PrestaShop

рыночная площадка

Электронная коммерция: заказы, клиенты, продукты, правила тележки, перевозчики.

OpenCart

рыночная площадка

Электронная коммерция: заказы, клиенты, продукты, категории.

Amazon SES, Postmark, Отправить

рыночная площадка

Транзакционная доставка электронной почты.

Jira, линейный

рыночная площадка

Отслеживание проблем и проектов.

Microsoft Calendar, Outlook Mail

рыночная площадка

Встречи, календари и почта.

DocuSign, Аполлона, СерпАпи, Google Analytics

рыночная площадка

Подпись, поиск, поисковые и аналитические данные.

Webflow, Wix, Squarespace

рыночная площадка

Платформы для сайтов.

💡
Список разъемов перемещается по мере публикации пакетов. Авторитетным списком для ВАШЕЙ установки является страница Connectors: там указано, что обнаружено временем выполнения, а вкладка Marketplace показывает, что можно добавить.

Установка разъема

1
Иди к коннекторам

Перейдите к коннекторам в боковой панели администратора.

2
Найдите разъем

Просмотрите список или поиск. Коннекторы сгруппированы по категориям.

3
Позволить ему

Нажмите на разъем и переключите Enable.

4
Введите учетные данные

Заполните необходимые поля: API ключ, URL, токены и т. д. Каждый разъем имеет конкретные требования, задокументированные на панели настроек.

5
Испытательное соединение

Нажмите "Проверить соединение". Зеленый результат означает, что разъем может достичь внешней платформы. Красный результат показывает ошибку.

6
Конфигурация функций

Выберите, какие функции включить: синхронизация знаний, синтетика веб-хуков, действия ИИ. Не все разъемы поддерживают все функции.

Какие разъемы дают

контекст

ИИ может просматривать данные клиентов, заказы, подписки и многое другое через разъем. Когда клиент общается с ним, у него есть реальные данные платформы для ссылки.

Контекст AI (авторы соединителей)

Контекст-провайдер вашего разъема передает билету - AI сводку учетной записи владельца билета. customer_id когда известно; в противном случае, на билете автозаполняется, где флаг ctx customer_trust_email Это правда, посмотрите на счет customer_email (проверенный отправитель билетов). Удаленные платформы выставляют /context/customer-by-email Это то, что делает цитату ИИ реальным балансом / счетом-фактурой вместо того, чтобы сказать «пожалуйста, войдите».customer_sections, customer_allow_credit) и строго читать, никогда не раскрывать секреты.

Каталог клиентов (авторы соединителей)

Ваш разъем IdentityProvider предоставляет три универсальных поиска билетов: lookupCustomerById() (карточка клиента), lookupCustomerServices() (таблица товаров/услуг) и listCustomers($query,$limit): "Поиск клиента или тип электронной почты" на родном Compose-New-Ticket формы. {id, external_id, name, email, company, phone, platform, platform_label}. Удаленное правило: Если ваши клиенты живут в другой базе данных или сервисе, возьмите их с собой на платформу.API В этих методах никогда не читайте таблицы другой системы напрямую (в таблицах других систем). OpsIQ DB - это пустые заполнители, поэтому местное чтение возвращает пустой пикер. Введите удаленный путь в настроенном виде API URL; сохраняйте локальное чтение только в качестве резервного копирования с тем же DB.

Билеты на электронную почту, обнаружение и маршрутизация (авторы соединителей)

Когда входящая электронная почта становится родным билетом, OpsIQ обнаруживает отправителя по телефону. lookupCustomerById(0, ['email'=>$sender]) на каждом разъеме; первый матч «владеет» клиентом и его platform Слизняк наносится на ticket.created Событие как _pipe_owner_platform (пустота = гость).WHMCS Электронная почта открывает билет в WHMCS (WHMCS нумерация, отраженная как одна), в то время как неизвестный отправитель остается родным гостем. Если ваш разъем отражает билеты на родную платформуВаша ticket.created Руководитель должен входить в это: if (array_key_exists('_pipe_owner_platform',$payload) && $payload['_pipe_owner_platform'] !== '<your-slug>') return;Ключ отсутствует на не-пиповых (чат/ручные/ИИ) билетах, поэтому те зеркала, как и раньше. Per-department control живет под командой & Departments → Открытые билеты по электронной почте (только для всех / Клиентов / Off).

Меры

ИИ может выполнять действия через разъем: создавать билеты, обновлять заказы, отменять подписки, все с вашего одобрения через Trust Layer.

Знания

Коннекторы вносят статьи о знаниях для конкретной платформы в ИИ. Shopify разъем добавляет устранение неполадок в электронной коммерции; WHMCS Разъем добавляет знания хостинга.

Импорт базы знаний (авторы соединительных устройств)

Если на вашей платформе размещена база знаний, объявите kb_capabilities блокировать settings.json тип kb_source) и ваш разъем появляется в редакторе справочного центра Импорт KB → Импорт из подключенного приложения выпадающий, когда он включен и настроен в рабочем пространстве. Декларативный, без метода реализации: назовите встроенный adapter (zendesk для точного дерева справочный центр API, или crawl для любого сайта КБ и base_template такой как https://{subdomain}.zendesk.com, который OpsIQ заполняет из сохраненных настроек вашего разъема. Кредентиалы никогда не покидают сервер; браузер только отправляет слаг разъединения. Чтобы поддержать новую платформу, добавьте opsiq_kb_<platform>_manifest() Адаптер и ссылка на него по имени. connectors/PLATFORM_CONNECTORS.md §5.

Вебхуки

Некоторые разъемы регистрируют веб-хуки с внешней платформой для уведомлений о событиях в реальном времени (новые заказы, обновления билетов и т. д.).

Отслеживание продаж

Разъемы электронной коммерции подают данные о доходах в панель продаж для атрибуции и аналитики.

💡
Коннекторы связаны с рабочим пространством. Каждое рабочее пространство может иметь разные разъемы, включенные с различными учетными данными.WHMCS Рабочее пространство использует WHMCS разъем; а Shopify Рабочее пространство использует Shopify разъем.
Можно ли использовать несколько разъемов одновременно?+

Да. У вас может быть Shopify для заказов и Stripe для платежей в одном рабочем пространстве. ИИ объединяет данные со всех включенных разъемов.

Что делать, если платформа не указана?+

Используйте Connector Builder для создания пользовательского разъема для любой платформы с REST API или проверьте Marketplace на наличие подключений, построенных сообществом.

Работают ли разъемы с саморазмещаемым OpsIQ?+

Да. Коннекторы работают одинаково как в облачных, так и в самохостинговых изданиях.

Коннекторы

Контракт на продажу и выставление счетов

Каждый разъем для торговли использует один и тот же контракт на нейтральное событие. WHMCS является эталонной реализацией, но SaaS Bridge, магазины, поставщики платежей, разъединители рынка и пакеты Connector Builder должны подчиняться одним и тем же правилам.

Что должен публиковать каждый коммерческий разъем

Один авторитетный регистр

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.

Стабильная идентификация источника

Платформа представляет собой слаг реестра разъемов, такой как whmcs, shopify или opsiq_saas. traffic_source содержит проверенную атрибуцию приобретения при поставке; в противном случае используйте тот же слаг, что и резервный. идентификаторы магазина, а не ярлыки отображения. OpsIQ Решает дружественное имя разъема в UI.

Императивность

event_id должен быть детерминированным. Карта, по крайней мере, одного неизменного заказа_ref, invoice_reph или subscription_reF, чтобы веб-хук перезаписывал и заполнил те же события вместо создания дубликатов продаж. service_re f идентифицирует затронутый продукт или услугу, когда он существует.

Источник Timesamp

- в момент оплаты или экономического события, о котором сообщает платформа-источник. Никогда не заменяйте исторические даты платежа временем импорта.

Деньги и FX

Отправьте исходную сумму и действительную трехбуквенную валюту ISO. Если настройка разъема позволяет конвертировать OpsIQ FX, отчетность преобразуется в валюту отчетности рабочего пространства; в противном случае отчеты сохраняют валюту магазина или платежной платформы. Код разъединения не должен жестко кодировать валюту отчетности или обменный курс.

Доказательный жизненный цикл

Используйте новый, продление, обновление, возврат, кредит или неизвестно. Классифицируйте по причине счета-фактуры, подписке или отношениям обслуживания, типу строки позиции или другому авторитетному источнику поля. Повторная покупка тем же клиентом автоматически не является продлением.

Граница продаж

В раздел «Продажи и конверсии» относятся только положительные оплаченные новые, продления, обновления или законно неизвестные коммерческие расписки. Возвраты отражаются в отчетах по возвратам и анализу чистых доходов. Кредит на счет, пополнения кошелька, пополнений токенов и добавление средств остаются событиями бухгалтерской книги и никогда не учитываются как продажи, конверсия, объем заказа или выручка от продаж.

CRM остается отдельной

Сделки CRM представляют собой конвейерную и сбытовую деятельность. Они не являются платформой для торговли, если только подключенная платежная или магазинная платформа не выдает реализованный оплаченный заказ или счет-фактуру через этот контракт.

Каждый платежный сигнал открывает строку

Не зависит от одного названия события. Когда платформа отправляет несколько подтверждений одного платежа (счет-фактура, оплаченный заказ, добавленная транзакция, завершенная оплата), любой из них может открыть строку реестра после того, как платформа подтвердит продажу; отпечаток продажи сжимает братьев и сестер в одну строку.

Запланированное примирение (Договор) 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.

Полученные проекции

Опсики и резюме панели инструментов - это проекции совместимости, перестроенные из реестра. Коннекторы не должны рассматривать проекцию как финансовый источник истины. Пересмотр контрактов может повторно оценивать полученные строки без удаления основной истории выставления счетов.

Удаленная граница платформы

Удаленный разъем считывает свою платформу через настроенный аутентифицированный API. Он никогда не должен зависеть от таблиц баз данных одного сервера. Точный аутентификационный доменный сайт_key поставляется ConnectorRegistry и должен применяться к каждой записи в регистре и заполнение. Рабочее пространство или область группы только для агрегации времени чтения; он никогда не должны расширять владение сохраненными событиями.

Канонический пример платного события

Нормализованное торговое мероприятие
{
  "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"
}

Коннектор сборщик карт

Когда в Connector Builder включены продажи и выставление счетов, сумма карты, валюта, статус источника и дата источника плюс по крайней мере один заказ, счет-фактура или ссылка на подписку. Тип карты Lifecycle_type, когда API раскрывает авторитетные доказательства жизненного цикла. Созданный SalesIngest проходит каждую строку через тот же нормализатор CommerceEventRegistry, используемый встроенными и рыночными разъемами.

⚠️
Кредиты и дополнительные фонды намеренно сохраняются для истории выставления счетов, контекста баланса клиентов и анализа реестров. Исключение их из продаж не удаляет их; это только предотвращает их от повышения эффективности торговли.

Lifecycle_type решает, что станет CRM-сделкой

lifecycle_type OpsIQ читает его, чтобы решить, входит ли продажа в конвейер CRM, поэтому каждый разъем продаж принимает решение о трубопроводе, намерен он или нет.

новый

Открытие сделки с закрытым капиталом (новый бизнес).

обновление, модернизация

Ни одна сделка нового бизнеса — возобновление конвертируется по другой кривой вероятности и смешивание их искажает оба прогноза.

Возврат, кредит

Никогда не открывай сделку, ни в каком режиме. Деньги, возвращенные клиенту, - это не выигрыш.

Опущенный / Неизвестный

Только выручка. Продажа регистрируется, но никогда не доходит до трубопровода.

Одна продажа, один ряд реестра: личность - это продажа, а не событие

Не совпадай на event_id И вставьте себя. event_id is platform:eventName:externalIdкоторая отвечает: «Мы уже обработали эту доставку» и не может ответить: «мы уже зарегистрировали эту продажу». Платформа, которая объявляет один платеж дважды — как invoice.paid И снова как payment.completed — чеканит два ида и получает одни и те же деньги дважды, не с чем сталкиваться и нечего предупреждать.

💡
Найдено на контрольной установке: шесть счетов-фактур с тремя строками регистра каждый, из трех кодовых путей с использованием трех различных схем event_id. Все они имели 0.00, поэтому не было обнаружено никаких ошибок, и любой более поздний процесс восстановления реальных сумм подсчитал бы один платеж три раза.

Вместо этого позвоните в разделяемую запись. Core вычисляет фирменный стиль продажи (sale_fingerprint), соответствует существующему ряду на нем, сохраняет оригинал event_id на обновлениях и фильтрах к реальным столбцам:

Единственный поддерживаемый способ написания книги продаж
\OpsIQ\Commerce\CommerceEventContract::upsertSaleRow('opsiq_sales_events', $row);
Продажа, много событий

invoice. paid, payment. completed и sale. completed для одного счета-фактуры поделитесь одним отпечатком пальца и обновите один ряд.

Возврат денег остается раздельным

Возврат счета-фактуры сохраняет свою собственную личность, поэтому он никогда не может перезаписать платеж, который он возвращает.

Нет ссылки, нет отпечатков пальцев

Ряд, не имеющий ни заказа, ни счета-фактуры, ни подписки, ни ссылки на сервис, не получает никаких отпечатков пальцев, поэтому два несвязанных ряда никогда не сталкиваются только потому, что оба отсутствуют идентификатор.

Справочный приоритет

invoice_ref, далее order_reph, затем subscription_reF, потом service_refe — сначала самый сильный, поэтому одна продажа сохраняет стабильную идентичность.

Книга-приложение: никогда не переписывайте продажу

Возврат, отмена или исправление - это Новая датированная записьНикогда не меняйте строку, она исправляет. Переписывание платежа в возврат выглядит аккуратно и нарушает три вещи одновременно:

Это разрушает валовой доход

Валовые продажи и ставка возврата перестают быть отделимыми, а ставка возвратов - это метрика, которую можно сообщить об изменении.

Он записывает разворот в неправильный период.

Мартовское возмещение январской продажи должно уменьшить март. Переписывая янтарный ряд, молча пересчитывает закрытый период.

Это нарушает аудиторский след

Поправки - это контраверсии, именно так работает бухгалтерия двойного ввода в течение пяти веков.

Таким образом, разъем сообщает об обратном повороте, а не применяет его: возврат refunded_at и refund_amount Вместе с собственным жизненным циклом продажи и пусть звонящий напишет возврат как свой собственный ряд, датированный моментом возврата. Они никогда не могут столкнуться, потому что отпечаток продажи отделяет возврат от продажи.

💡
Тот же принцип применяется и к суммам. Не «восстанавливайте» сохраненную сумму до текущей стоимости платформы: счет-фактура, урегулированный с кредита счета, законно зарегистрированный 0 в момент оплаты, а деньги уже были записаны, когда клиент пополнил. Восстановление номинальной стоимости учитывает его дважды.

Договор классификации

OpsIQ определяет жизненный цикл один раз, in \OpsIQ\Commerce\SaleLifecycleClassifierРазъем объявляет только то, из чего собственной платформе Слова означают что, реализуя \OpsIQ\Connectors\SalesLifecycleConnectorInterface::salesLifecycleVocabulary()И затем вызывает общий классификатор. Не реализуй рассуждения заново.

Объявить словарный запас, делегировать решение
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,
]);
💡
Прецедент фиксируется и делится: явный, затем возвращается / отменяется, затем кредит, затем обновление, затем порядок, затем повторяющийся, затем приобретение, затем неизвестно. Обновление находится выше проверки заказа, потому что платформы тоже поднимают заказ на обновления; повторяющиеся сидят ниже него, потому как первый счет-фактура новой подписки несет повторяющийся тип строки. На двусмысленной продаже без ордера классификатор опирается на доход и вдали от трубопровода.

Объявить весь словарный запас платформы

Это провал, который стоит больше всего и выглядит наименее неправильным.WHMCS соединитель сопоставлен ['hosting','addon','domain'] - список, который читается как полный. WHMCS не выделяет голого Domain тип для реальных доменных линий; он излучает DomainRegister, DomainRenew, DomainTransfer, PromoHosting, PromoDomain, DomainAddon* и UpgradeВсе они прошли список, чтобы unknown1,288 счета, три года без ошибок и не строка журнала.

Каждый новый клиент импортирует свою историю через соединительный заполнительТаким образом, ошибка классификации не влияет на одно рабочее пространство - она затрагивает каждое рабочее пространство, которое когда-либо находилось на борту через этот разъем, в тот момент, когда они впервые смотрят на свой конвейер. Возьмите словарь из документации платформы или перепись живых данных и сопоставьте растущие семьи по: префикс Так что брат, которого никто не видел, классифицирует своих родственников вместо того, чтобы исчезнуть.

💡
Практическая проверка: посчитайте, сколько ваших собственных строк приземляется на неизвестное. Здоровый разъем продаж классифицирует почти все. Постоянный поток неизвестных практически никогда не представляет собой данные, которых у вас нет — это словарь, который разъезд никогда не учился читать.

Ремонт импортной истории

Каждый отправленный OpsIQ разъем продаж реализует это — 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() Используя все, что за запись принести ваш разъем уже имеет. tools/crm_backfill_sales_lifecycle.php Затем ремонтирует импортированную историю вашего разъема без кода для каждого разъединения: по умолчанию выполняется сухой запуск, резервируется и проверяет счет строк перед записью, обратимый через отмену реестра, и он никогда не пишет неудачное чтение в качестве ответа.

💡
Если ваш разъем не может перечитать прошлые записи - разъединитель только для веб-хука не может - не заглушить метод. Заглушка, возвращающая неизвестное, хуже, чем отсутствие реализации: заполнение заднего ряда перепишет хорошие строки как несекретные и сообщит об успехе. Реализуйте только интерфейс лексики.
💡
Подробные ссылки на пакеты остаются доступными в разъемах/CONNECTOR_EVENTS.md и соединители/PLATFORM_CONNECTORS.md в самохостинговых дистрибутивах.
Коннекторы

Контракт на путешествие

Journey Intelligence принимает один конверт событий с нейтральной платформой из виджета браузера, встроенных разъемов, SaaS Bridge, пакетов маркетплейса и выходного кода Connector Builder. На краю переводятся имена для конкретной платформы; воронка, атрибуция и код Site Intelligence потребляют только канонические события.

Изоляция и граница доверия

Точный ключ peer-domain

Каждое событие связано с аутентифицированным доменным сайтом_key. Разъем должен взять этот ключ из ConnectorRegistry или его аутоентифицированной конечной точки, никогда не от недоверенного органа запроса. Домены ведут отдельные записи; группа доменов является только агрегатом времени чтения.

Неустойчивая идентичность

event_id требуется для разъемов и должен быть детерминированным для того же родного события. Retries, webhooks и backfills обновляют одно событие, а не дублируют путешествие или продажу.

Родное и каноническое имя

Сохраните source_event_name для получения доказательств и устранения неполадок, а затем сопоставьте его с event_name_canonical.

Серверные доказательства выигрывают

Наблюдение за браузером может начать или вывести путешествие. Аутентичные события разъема подтверждают регистрацию, вход в систему, оплату, покупку, обновление, возврат и другие конечные результаты. Действительный токен корреляции с сайтом является самым сильным соединением; недействительный токет отвергается, а его встроенным идентификаторам не доверяют.

Конфиденциальность

Отправляйте только идентификаторы и поля, необходимые для заявленного путешествия. Уважайте согласие, маскируйте и настройки хранения. Никогда не размещайте учетные данные, данные карты, секреты аутентификации или частные тела сообщений в свойствах.

Канонический конверт

Конверт с путешествием
{
  "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"}
}

Каноническая таксономия

Поддерживаемые семьи включают в себя страницу участия / события CTA; регистрацию учетной записи, вход в систему, MFA и сброс пароля; этапы лидирования и формы; продукт, корзина, оформление заказа, оплата, покупка, подписка, обновление и возврат; показы продвижения и конверсии; мероприятия в центре поддержки, чат и билеты; события безопасности; и пользовательские события с пробелами имен. account.signup.succeeded, account.login.succeeded, lead.form.succeeded, commerce.payment.succeeded, commerce.purchase.completed, commerce.subscription.renewed и commerce.refund.completed.

Выводы браузера, подтверждение и отказ

Виджет может работать без разъема, наблюдая структуру страницы, действия формы, результаты DOM и журнал путешествия посетителя. Это доказательство остается явно оцененным как наблюдаемое или выведенное. Разъем добавляет авторитетное подтверждение сервера и может соотносить его с той же попыткой браузера. Отказ сначала хранится в качестве кандидата; он становится заброшенным только после окна бездействия, установленного в пользовательском интерфейсе, и только тогда, когда не существует последующего восстановления или успеха.

Атрибуция и поступления

Атрибуция предпочитает действительный подписанный корреляционный токен, затем точную ссылку на путешествие, попытку, сессию или коммерцию, затем согласованный график идентификации и, наконец, ограниченное поведенческое соответствие. Непревзойденные продажи остаются неатрибутированными. Весы многоканального реестра должны составлять 1. Приписываемый доход от Site Intelligence читает эту книгу; кредиты, пополнения кошелька, пополнение токена и добавления средств никогда не являются конверсиями покупки. Поведение Connector FX остается контролируемым этой установкой разъема.

⚠️
Модель атрибуции, окна с обратным обзором, обработка прямого трафика, минимальная уверенность, тайм-аут отказа и определения воронки являются политикой пользовательского интерфейса.

Проявитель коннектора и строитель

Декларация о путешествии в разъездах
{
  "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"
    }
  }]
}

Объявляйте только возможности, которые действительно предоставляет пакет. Коннекторный конструктор проверяет отображение и генерирует тот же платформенно-нейтральный адаптер, используемый сторонними пакетами. Проглатывание путешествия принимает одно событие или ограниченную партию 100 через созданную аутентифицированную конечную точку интеграции.

💡
Торговый реестр остается финансовым источником истины. Мост «коммерция-путешествие» публикует подтвержденные сервером результаты и согласовывает атрибуцию после существующего идемпотентного роста бухгалтерского учета, поэтому один платеж никогда не становится двумя продажами.
Коннекторы

Как работают действия ИИ

Каждый разъем объявляет набор действий: то, что ИИ может сделать через внешнюю платформу. Действия — это мост между «ИИ говорит» и «Ай делает».

Действия ИИ
Как работают действия ИИЗапрос клиента отображается на карте действий типа удаления, затем контрольный список: проверено разрешение, вы подтверждаете, API вызван.Как работают действия ИИрабочее пространство«Отменить подписку»клиентИИcancel_subscriptiondeleteподтверждение необходимогоparams: subscription_id (из контекста)Типы действийreadписатьdeleteПроверка разрешений и ролиВы подтверждаете действиеAPI вызванный результат1DECLAREDКаждый разъем перечисляет действия2GATEDРазрешение + подтверждение3THEN RUNAPI Call, Результат
Запрос становится объявленным действием (типичным чтение/запись/удаление), которое проверяется, подтверждается, затем выполняется и сообщается.

Жизненный цикл действия

1
Клиент просит что-то

"Отмените подписку". Искусственный интеллект определяет, что это требует действия "отмена_подписки".

2
ИИ проверяет разрешения

Разрешено ли это действие? Включено ли оно? Имеет ли действующий пользователь правильную роль?

3
ИИ собирает параметры

Для этого требуется идентификатор подписки. ИИ просматривает его из контекста клиента или спрашивает у него.

4
Подтверждение

Для деструктивных или высокоэффективных действий ИИ запрашивает подтверждение перед выполнением.

5
Казнь

Действие вызывает внешнюю платформу API.

6
Результат

ИИ сообщает результат клиенту.

Типы действий

Читать далее

Проверяйте данные, ничего не меняя. Примеры: list_orders, get_customer. Безопасно, подтверждения нет необходимости.

Пишите действия

Создавать или изменять данные. Примеры: create_ticket, update_order. Может потребоваться подтверждение.

Исключить действия

Удалить данные. Примеры: отмените_подписку. Всегда требуйте подтверждения.

HTTP-действия

Объявлено в действиях.json родовой API Звонки определены декларативно.

Теги возможностей

Факультативное поле «способность» в действиях.json, тег класса с нейтральным коннектором (например, «билеты» для чтения / просмотра билета, «ticket_create» для открытия билета).OpsIQ Ворота всего класса равномерно через каждый разъем: билет читает выпадение из ИИ, когда оператор отключает AI Ticket Awareness, и создание билетов зарезервировано для OpsIQ собственный композитор (так что инструмент создания разъема не может дублировать его). Объявите это, и ваш разъём соответствует.OpsIQ Коннектор Строитель показывает это как выпадение способности за действие.

Код действий

Реализован в PHP в классе разъемов. Полный контроль над логикой.

Пример определения действия
{
  "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" }
    }
  }
}
Коннекторы

Построить разъем

Коннектор Builder позволяет создать полный разъем для любой платформы с REST API.

Построить разъем
Конструктор соединенийФорма разъема без кода: имя, тип аута, база URL, отображение действия, прохождение теста и кнопка публикации.Конструктор соединенийрабочее пространствоКонструктор соединенийИмяМоя платформаАутаOAuth 2.0(PKCE)База URLhttps://api.example.com/v2МерыGET/customers →List_customersПроверка прошлаРазъем пакета1NO-CODEНазвание, аут, база URL2ANY APIКлюч, Bearer, Базовый, HMAC, _OAuth3PUBLISHInto /connectors/<slug>/
Направьте строителя в любой REST API Установите аут, база URL и действия, протестируйте его и опубликуйте рабочий разъем.

Полный провайдер API покрытия

Каждый сгенерированный API Разъем может обнажить отдельные родные API Чтение и родные API Кураторские действия остаются предпочтительными; нативные действия охватывают конечные точки провайдера, добавленные позже. JSON Форма, XML необработанные и многочастные тела, ограниченная пагинация;API-версия заголовков и идемпотентности при сохранении учетных данных внутри настроек разъема рабочего пространства.

⚠️
Маркетплейсы поставляются из /marketplace_connectors а также в комплекте /connectors. Увеличьте пакетную версию, восстановите контракт и документацию, проведите тесты на соответствие, затем переподпишитесь и опубликуйте новую версию Marketplace.

Мастер-строитель Connector Builder

У волшебника шесть ступеней, показанных как вкладки поверх. Вы можете свободно прыгать между ними и Сохранить проект В любом месте вы сохраняете свою работу.

1
Идентичность и профиль

Имя, слаг, описание и значок, затем выберите профиль контракта: Standard API, Commerce, Helpdesk, Mailbox, Site Intelligence, SaaS Bridge, Local PHP Platform или Платформа без API когда платформа не обслуживает ничего вызывающего и OpsIQ должна установить мост. Профиль выбирает полную точку запуска возможностей; вы все равно можете настроить отдельные возможности.

2
Аута

Выберите шаблон аутентификации, который использует платформа, и заполните ее поля. Введите здесь также реальные учетные данные тестирования: они используются для теста соединения на следующем этапе, и они не хранятся после публикации.

3
Тест

Введите API Основание URL и проверить конечную точку, затем выполните тест реального подключения с использованием учетных данных из шага 2. Сделайте это до определения любых действий, если auth или base URL неправильно, каждое действие, которое вы напишите после этого, потерпит неудачу по той же причине и вы будете отлаживать что-то не то.

4
Меры

Определите каждую операцию: имя, метод HTTP, путь конечной точки, параметры, отображение поля отклика и настройки надежности, описанные ниже. Вы можете запустить каждое действие индивидуально против живого API с этого шага.

5
Триггеры

Карта событий webhook, которые ваша платформа отправляет на OpsIQ События, которые происходят на вашей платформе, могут начать работать в OpsIQ.

6
Обзор, контракт предприятия и публикация

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>/.

⚠️
Издание НЕ запускает пакет соответствия. Публикация только подтверждает форму волшебника и издает предупреждения, которые не блокируют. Полный набор - манифест, файлы возможностей, контракт токена идентификации и проверка моста-сниппета - работает, когда вы нажимаете Dry-run и снова во время установки. Нажмите Dry - Run перед отправкой каждый раз.

Что делает издатель, что форма не показывает вам

Пять моделей поведения генератора удивляют людей. Ни один из них не является ошибкой; все они будут стоить вам дня, если вы встретите их случайно.

Один из вопросов решает, будет ли платформа обслуживать API?

Ответить на шаг 1 путем выбора режима доступа к данным (или "Платформы без использования"); API"Профиль. API режим объявляет native_api and emits the <slug>_api_call passthrough. Bridge mode declares platform_bridge Вместо этого, штрихи native_api Даже если более старый спецификатор нес его, поэтому манифест, генерируемый класс и экспертные документы не могут не согласиться. ai_brain_aware Добавляется в любом случае.

SILENCE MEANS «У него есть API»

Конструктор следует за вашим ответом; он не вырабатывает правду сам по себе, и по умолчанию, когда ничего не сказано, API Итак, нет-API платформа должна АКТИВНО сказать так — выберите "Платформа без API" профиля, установить доступ к данным для моста, или отметить 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.

Тест на подключение по умолчанию GET /ping

Если вы оставите путь проверки пустым, Строитель пишет: /ping into the generated connector and into profile.json's test block. Almost no real platform serves that route, so Test Connection fails with HTTP 404 on every install and reads like a customer misconfiguration rather than a package defect. Set a verify path that your platform actually answers. For a bridge connector, point it at your own diagnostics endpoint — it proves the whole chain in one call: the bridge is deployed, the key matches, and the bridge can reach the database.

Переиздание все еще переписывает ваши рукописи

Возможности теперь следуют за ответом доступа к данным, поэтому те больше не дрейфуют. Все остальное сгенерировано по-прежнему: редактировать ContextProvider. php или любой другой излучаемый файл и следующая публикация заменяет его. Единственным защищенным исключением является мостовый файл — мастер только перезаписывает мост, несущий свой собственный маркер, поэтому рукописный остается в одиночестве.

Восстановление удаляет файлы

Отключите функцию, и следующая публикация удаляет файл поставщика. Ручные редактирования любого сгенерированного файла - ContextProvider.php прежде всего - перезаписываются без предупреждения. Сначала копируйте настройки или возьмите на себя ответственность за пакет, удалив .opsiq- Строитель.json И тогда колдовство рассеется.

Release_status всегда является предварительным просмотром

У мастера нет контроля над ним. Пакет, предназначенный для отправки, поскольку производство должно изменить статус Release_status вручную в настройках.json— и это редактирование нарушает подпись, поэтому переподпишитесь позже.

Подпись доказывает целостность, а не происхождение

Пакеты строителя подписаны с помощью собственного симметричного ключа этой установки. Это обнаруживает подделку. Это не доказывает, кто написал пакет, и любая установка, держащая тот же ключ, может производить ту же подпись. Относитесь к локально подписанному пакету как к самоподписанному.

Столкновения слизней проверяются только на одном дереве

Издательство отказывается от слизняка, который уже существует под/connectors/.Он не смотрит на/marketplace_connectors/,Таким образом, рукописный пакет первой партии с тем же слизняком может оказаться затененным.

💡
У мастера нет этапа, создающего знания. Файл знаний, описывающий вашу платформу, генерируется для вас из имени, описания, типа аута и действий, которые вы определили, и он загружается в ИИ при включенном разъеме.

Определение действия (шаг) 4)

Каждое действие имеет следующие настройки. Требуются только первые четыре; остальные контролируют, кто может его запускать и насколько тщательно.

Ключ действия и этикетка

Ключ — это то, что называет ИИ; этикетка — это что читает человек. Ключи автоматически прокладываются по пространству имен с помощью соединительного шлюза, поэтому два разъема могут иметь «список_порядок» без столкновения.

HTTP метод

GET, POST, PUT, PATCH или DELETE.

URL Путь

Прилагается к базе URL Используй. {name} для держателей, например /opportunities/{id}/stage

Параметры

Для каждого параметра вы также выбираете, куда он идет: тело, путь, запрос или заголовокПараметр пути заполняет {placeholder}; параметр запроса прилагается к URL.

Картографирование ответов

Скажите, какое поле в ответе JSON означает то, что является именем клиента, которое является электронной почтой, которая является общим объемом заказа. Это то, чтобы ИИ мог читать данные вашей платформы, а не гадать на нем.

Кто может использовать

Ваша команда (административный ИИ), подписавшиеся клиенты (клиентский чат) или письменный помощник. Действия клиента выполняются только для подписанного клиента, и поля идентификации автоматически блокируются для них, поэтому один клиент не может спросить о другом.

Требует подтверждения

Человек должен одобрить, прежде чем действие будет запущено.

разрушительный

Отмечает действие как удаление или изменение состояния. Используется для предупреждения перед запуском.

Требуемое разрешение

Администратор должен иметь это разрешение, чтобы ИИ мог выполнять действия от его имени; полные администраторы всегда проходят. Выберите из 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_email или none, что означает любой проверенный администратор.

Описание / AI hint

Необязательно, но стоит писать. Он сообщает ИИ, когда нужно достичь этого действия, например: «Используй это, когда администратор просит изменить стадию сделки». Хорошим намеком является разница между действием, которое ИИ использует правильно, и тем, которое он игнорирует.

способность

Дополнительный тег класса, либо билеты (прочтение или поиск билета), либо ticket_create (открывает билет). Tagging позволяет OpsIQ закрывать весь класс сразу, например, скрытый билет читается, когда оператор отключает осведомленность о билете AI.

Путь к листу

Для конечных точек, возвращающих список, пунктирный путь к массиву, например данные или data. items

Путь ошибки

Факультативное поле тела, присутствие которого означает отказ вызова, например error.message, полезное для APIs Вернуть HTTP 200 О неудаче.

Запускай.

Каждое действие может быть запущено против живого API с этого шага, поэтому вы можете исправить неправильный путь или имя поля, прежде чем кто-либо другой использует его.

⚠️
Любое действие с использованием POST, PUT, PATCH или DELETE начинается с требования разрешения на интеграцию в систему управления. и Это преднамеренное действие по записи не закрывается, вместо того чтобы позволить ИИ изменять ваши данные без присмотра. Вы можете изменить оба действия, но измените их сознательно.
💡
Чтобы быть вызванным из чата клиента, действие должно быть только для чтения: оставьте оба Требует подтверждения и Разрушительный тик. Действие клиент может вызвать, что также изменяет состояние не то, что мастер позволит вам отправить случайно.

Получение веб-хуков (шаг 5)

Шаг Triggers дает вам веб-хук URL для регистрации на вашей платформе и проверяет каждый запрос, который поступает на нее.

Заголовок подписи

Заголовок вашей платформы обозначается, например, X-Hub-Signature-256.

Алгоритм подписи

HMAC-SHA1, HMA C-SHA256 или HMA-SHA512.

Схема подписи

Простой, простой шестнадцатеричный или базовый 64 дайджест. Или в стиле Stripe формат t=...,v1=... используется Stripe и несколькими платформами, которые его скопировали.

Префикс подписи

Некоторые платформы префиксируют дайджест, например sha256=. Оставьте его пустым, если ваш нет.

Картографирование событий

Картируйте каждое событие, которое ваша платформа отправляет на OpsIQ событие, на котором она должна подняться.

Авторегистрация webhook

Если у вашей платформы есть API для управления собственными веб-хуками вам не нужно регистрировать URL Открывай. Авторегистрируйте этот веб-хук на включенной и указать на два действия, которые вы определили в шаге 4:

Создание Webhook Action

Вызов, когда администратор включает разъем. Вы даете имя параметра, который несет URL, необязательно тот, который переносит список событий, и путь в ответе, который содержит идентификатор нового веб-хука.

Удалить действие Webhook

Вызванный, когда разъем отключен, с использованием идентификатора, захваченного выше, поэтому отключение разъединения также останавливает отправку вашей платформы в тупиковую точку.

Возможности, которые можно включить

Профили и возможности определяются Контрактом на коннектор 2.2. Сгенерированные и декларативные возможности излучаются непосредственно; корпоративные возможности генерируют EnterpriseExtension.php каркас с проводкой жизненного цикла во время выполнения.

Меры

Операции ИИ могут выполняться на вашей платформе: список заказов, поиск клиента, оформление возврата средств.

Триггеры

Получите веб-хуки с вашей платформы и превратите их в OpsIQ события.

Билеты на ИИ

AI Triage и ответ Copilot на билетах, которые остаются на вашей платформе. Выберите конечную точку, которая возвращает один билет с его ответами и сопоставьте поля; OpsIQ читает нить через него.

Почтовый ящик и контакты

Покажите почту клиента на их временной шкале, отправьте от сделки и синхронизируйте свою адресную книгу в OpsIQ CRM.

Клиент импортирует

Страница через список клиентов и импортировать каждый из них в качестве OpsIQ Вот как работает кнопка "Импорт".

контекст

Перетаскивайте живые данные с вашей платформы в каждый разговор ИИ.

Идентичность

Выясните, кто из ваших клиентов является посетителем, и покажите их профиль и покупки на билете.

Продажи и выставление счетов

Доходы от кормов и показатели MRR в OpsIQ приборные панели.

Входящие билеты

Превратите билеты и электронные письма, которые ваша платформа доставляет с помощью веб-хука, в OpsIQ потоков поддержки.

Исходящие ответы

Пост OpsIQ отвечает обратно на платформу, на которой возникла нить.

Синхронизация пользователей

Импортируйте свои учетные записи в OpsIQ пользователей администратора.

Синхронизация отделов

Импортируйте свои службы поддержки в OpsIQ.

Целевой маркетинг и кормление продуктов

Пусть рекламная студия ориентируется на факты, которые вы знаете о человеке, и превращает ваши реальные продукты в рекламу.

Разработчик Survey Studio

Выявление проверенных сервером фактов опроса, ускользающих переменных и ограниченных страниц получателей CRM Outreach через выделенный SurveyProvider. php. Это не повторное использование времени выполнения промоакции.

Native IP Блокировка

Когда OpsIQ блокирует IP Назовите свой собственный блок платформы API Таким образом, блок также выполняется.

Меры безопасности

Получить блокировку-IP Сигналы угрозы от OpsIQ.

Знание платформы для ИИ

Каждый разъем, который вы создаете, содержит краткую ссылку на то, что представляет собой ваша платформа и какие действия она выполняет. ИИ администратора OpsIQ читает его всякий раз, когда ваш разъединитель включен, поэтому он понимает вашу платформу, а не просто видит список названий действий.

API Прохождение

Ваш разъем всегда получает вызов общего назначения, чтобы ИИ мог достичь конечной точки, для которой вы не определили типизированное действие. Используйте типизированные действия там, где вы можете; это аварийный люк.

Канонический контракт на подключение 2.2

Версия контракта: 2.4 · 57 capabilities · 8 profiles.

Профили коннекторов

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.

Канонические возможности

действия

Universal actions. Capability version: 1.0. Mode: generated. Runtime methods: registerActions. Package files: actions.json.

триггеры

Inbound event triggers. Capability version: 1.0. Mode: generated. Runtime methods: handleWebhook. Package files: actions.json.

веб-хук

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.

контекст

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.

личность

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.

выставление счетов

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.

торговля

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 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.

местный

Local search/location data. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.

сео

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.

аналитика

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.

⚠️
Спецификации строителя остаются авторитетным источником. В создаваемых точках расширения помещают бизнес-правила, специфичные для платформы; жизненный цикл пакетов, очереди, работники, миграции и тесты соответствия остаются управляемыми строителем.

Настройка надежности на каждое действие

петли

Сколько раз повторять неудавшийся звонок, с обратной связью, которая удваивает каждую попытку. Только тайм-ауты, ошибки 429s и 5xx повторно; 4xx - это ошибка вашего запроса, и повторение этого просто сожжет ваш предел скорости.

Ограничение по ставкам

Потолок в минуту для этого действия, поэтому занятый триггер не может забить вашу платформу. Оставьте его на 0 без ограничений.

тайм-аут

Как долго ждать, пока платформа не сдастся?

Подтверждение

Требуйте, чтобы человек одобрил действие до того, как оно будет запущено.

Типы аутентификации

Шаг вперед. 2 Выберите тот, который соответствует вашей платформе. API Документация, генератор испускает для него правильный HTTP-клиент.

API ключ в заголовке

Статический ключ, отправленный в виде фиксированного заголовка, например X-API-Ключ. Вы даете имя заголовка и ярлык, который должна показать форма администратора. Это отправляет ключ только в качестве заголовка; если ваш API Вместо этого, ожидая ключ в качестве параметра запроса, используйте пользовательские заголовки или разъем с полным кодом.

Bearer токен

Token sent as Authorization: Bearer <token>. Common for modern APIs.

Основной аут

Имя пользователя и пароль, base64-кодированный в заголовке авторизации. Вы выбираете ярлыки, которые отображаются в обоих полях на форме администратора.

Подписанный HMAC

Открытый ключ плюс секрет, с подписью тела запроса. Вы даете заголовок подписи, заголку ключа и заголок метки времени, который ожидает ваша платформа.

OAuth 2.0 (удостоверения клиентов)

Сервер-сервер, без взаимодействия с пользователем и перенаправления. Вы даете токену URL и дополнительный объем; администратор предоставляет идентификатор клиента и секрет. Используйте это, когда ваша платформа выдает учетные данные приложению, а не человеку.

OAuth 2.0 (Кнопка подключения)

Поток кода авторизации с PKCE, для Stripe Shopify Приложения в стиле Slack и QuickBooks. Вы даете разрешение URL, токен URL после публикации администратор нажимает Connect на разъем, авторизуется на вашей платформе и OpsIQ сохраняет токен обновления и монетный дворы доступ к токенам по требованию. URI Чтобы зарегистрироваться в вашем OAuth Приложение отображается на странице настроек разъема.

Заголовки на заказ

Свободная форма JSON Карта заголовка для всего, что не покрывается шаблонами выше, например {"X-API-Ключ":{api_key}"X-Tenant":{tenant_id} Каждый заполнитель становится полем на форме администратора.

💡
PKCE применяется только к потоку кнопки Connect. Поток клиентских учетных данных не имеет перенаправления и шага пользователя, поэтому PKce не относится к нему.

Стили инициации

Оффсет

Использует смещенные и предельные параметры. Пример: ?offset=100&limit=50.

Страница

Использует номер страницы. Пример: ?page=3&per_page ==50.

Курсор

Использует маркер курсора из предыдущего ответа.

Заголовок ссылки

Использует заголовок ответа Link с rel="next".

Advanced: пользовательский PHP код

connector. php возвращает экземпляр. Он не объявляет именованный класс, на который охотится OpsIQ. Названия методов ниже - те, которые требуются интерфейсу Connector; получение одного неправильного является фатальным при загрузке, а не предупреждением.

connector. php — реальный контракт, минимальный и управляемый
<?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.

Зеркальные билеты в родную систему билетов

Когда ваша платформа владеет билетом, зеркально отобразите его в OpsIQ из вашего разъема с помощью помощника по проглатыванию билетов, который ваш разъединитель наследует (создайте новый билет, добавьте ответ для последующих действий). subscribers() метод, ticket.created, ticket.replied, ticket.updated, ticket.deletedАвтоответ, эскалация, SLA и CSAT - все это зацепляет одни и те же события, поэтому вы наследуете их без дополнительного кода.

Если вы будете управлять ticket.deletedВы также управляете слияниями. Удаление объединенного билета несет merged_into не отправляется на разъем, который заявляет ticket_mergeСлияние приходит однажды как ticket.merged Вместо этого, чтобы вы могли слиться на своей платформе, а не закрыть объединенный билет там. Возможность слияния билетов (контракт) 2.4).

Скажите, кто написал вступительное сообщение

Билет всегда есть для Клиент, но сообщение об открытии может быть написано персоналАгент, открывающий билет от имени клиента или проактивно обращающийся к нему. Каждый справочник поддерживает это, поэтому он является частью универсального ticket.created Контракт, а не то, что каждый разъем решает в частном порядке.

author_type

клиент (по умолчанию) или администратор. Опустить его и клиент предполагается.

author_id

Идентификатор персонала, когда author_type=admin. Никогда не идентификатор клиента.

author_name

Агент или название отдела. Возвращается к "Сотруднику".

author_email

Адрес агента. Никогда не клиент один. Сообщение персонала под электронной почтой клиента является ошибкой отчетности и аудита.

Это не косметический. Потребители читают author_type Чтобы решить, чья это очередь. Написанное сотрудниками открытие сообщило о том, что client оставляет право автоответчика отвечать на сообщение, написанное вашим собственным агентом, и делает эхо вашей платформы этого открытия похожим на свежее сообщение клиента, которое затем приземляется как дубликат и переворачивает билет в ответСопоставьте сигнал вашей платформы на нем в разъеме нормализатор событийНикогда не в пользу потребителей.

Централизованная блокировка

Когда агент блокирует отправителя, это относится ко всем каждый канал сразу (электронная почта, чат, портал, виджет и каждый соединитель-близнец), потому что блок выполняется централизованно, прежде чем любой разъем увидит сообщение. Ваш разъединитель наследует его, ничего не делая. Нет никакой входящей работы для реализации и нет способа сделать это неправильно.

Факультативная половина — это вылетать- сообщать вашей платформе, что клиент был заблокирован здесь. Реализовать его только в том случае, если ваша платформа может выразить нечто эквивалентное.

Возможности()

Включите block_registry И класс должен реализовать BlockRegistyInterface. Флаг - претензия; интерфейс - гарантия. Реестр требует и того, и другого.

blockSender($b)

Получает вид (email |domain |ip), значение, разум, admin_id, истекает_at, site_key. Возврат [результат, деталь?, пульт_ref?].

unblockSender($b)

Та же полезная нагрузка, обратная. Должно быть идемпотентная. Разблокировка чего-то никогда не блокируется - это нооп, а не ошибка.

isSenderBlocked($b)

Для примирения, так дрейф сообщается, а не обнаруживается клиентом. Возврат [результат заблокирован?].

Результатные ценности

хорошо

Применяется на вашей платформе. Включите remote_ref, когда у вас есть идентификатор, заслуживающий записи.

noop

Уже в запрашиваемом государстве.

unsupported

У вашей платформы нет эквивалентной концепции.

неудачный

Ты мог бы сделать это, и все пошло не так. Включи детали; они попадают в аудиторский след.

Упадок – это правильный ответ. Многие платформы не имеют концепции «блокировать этого отправителя» и предлагают только приостановку ACCOUNT, которая останавливает выставление счетов, входы в систему и услуги, а не просто поддержку почты. Картирование «агент заблокировал спам-адрес» на «закрыть учетную запись этого клиента» позволило бы одному блоку с неправильным щелчком мыши прекратить обслуживание платящего клиента. Если это единственный рычаг у вас есть, возвращайте unsupported И оставь его в покое.

Спад также охватывает случай, когда платформа может Сделай это, но не позволишь. WHMCS, а не функция: рычаг, который существует только в пользовательском интерфейсе администратора платформы, является рычагом, которого нет у вашего разъема.

Пример работы · Zendesk (справочная реализация)

Читать connectors/zendesk/connector.php alongside this. It is short, and every branch below is a decision you will face too.

Электронная почта → ok

Щелкните /api/v2/users/{id} Приостановленные запросы конечного пользователя отклоняются к приостановленным билетам вместо открытия одного, действительно та же идея, что и блокировка отправителя, и это не останавливает выставление счетов, потому что у конечных пользователей Zendesk их нет. возвращает идентификатор пользователя как remote_ref.

Доменная → Неподдерживаемая

Zendesk CAN приостанавливает целый домен, но только через приостановку: ключевое слово в блок-списке Admin Center textarea, и ни один API не пишет это поле.

ip →неподдержанный

Блок IP не существует.

Неизвестный адрес → noop

Zendesk не может предварительно приостановить адрес, который он никогда не видел. Ничего не сделать - это не провал, а местный блок все равно останавливает билет.

Агент или администратор → неподдерживаемый

Отказ. Приостановка работы персонала выведет коллегу из справочной службы. Адрес сотрудника, попадающего в блок-лист, с гораздо большей вероятностью будет ошибкой, чем инструкция, проверьте роль, прежде чем действовать по ней.

Последний ряд стоит копировать. Контракт не может остановить вас от наложения блока на что-то разрушительное, поэтому каждый разъем должен сам решить, от чего он будет отказываться. detail Оператор умеет читать, бьет повинуясь.

Сообщите честно. Обратите внимание, как мало таких строк okЭто правильный результат, а не пробел: блок домена все еще работает (он выполняется в ядре в момент его написания); он просто не может быть отражен наружу. ok Если вы не сделали этого, то сообщите оператору о том, что блок достиг вашей платформы, когда он никогда не покидал OpsIQ.

Правила

Местный блок всегда побеждает.

Она написана до того, как вас вызовут и выдержит все, что вы вернете. Вы не можете помешать оператору заблокировать кого-то.

Никогда не бросай

Бросок рассматривается как неподдерживаемый и записывается. Возвращение провалилось с деталью, поэтому причина выживает.

Будьте идемпотентом

Один и тот же блок может быть объявлен более одного раза.

Быстро вернуться

Вентилятор синхронизирован с кликом оператора. Очередь медленная работа, а не удерживание запроса открытым.

Не перезванивайте

Никогда не переблокируйте OpsIQ от вашего обработчика. Реестр пропускает исходный разъем, но второй прыжок зацикливается.

Каждое объявление пишется для opsiq_block_registry_log (операция, вид, значение, разум, админ, происхождение, слизняк разъема, результат, детали и временная метка), чтобы оператор мог видеть блок, прибывший с вашей платформы, а не от агента, и что каждый разъединитель сделал с этим.

Нажимайте на вложения правильно

Рука за руку attachments Массив для создания()/addReply(). Каждый элемент несет файл в одной из трех форм:

content_b64

База 64 байтов RAW файла, используется для файлов за auth (большинство входящих случаев). OpsIQ декодирует его и повторно размещает файл для вас.

url/source_url

Публичный httpsURL(например, а)Zendeskcontent_url. Должен быть https; перед его хранением проходит SSRF/letlist check.

stored_path

Сохраненная ссылка на файл, которую вы уже написали (что производит загрузчик композитора).

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 Только имена файлов (не байты), поэтому надежный входящий шаблон: прочитайте байт, где ваш код уже работает (внутри платформы или с полезной нагрузки веб-хок), базовые 64 и отправьте их как content_b64 на мероприятии.

Outbound (OpsIQ → Ваша платформа) Когда агент прикрепляет файл, ticket.replied Полезная нагрузка дает вам файлы ответа как stored_path предметы под OpsIQ Прочитайте их и нажмите в собственном формате вашей платформы, а также проверьте документы платформы, кодирование имеет значение: WHMCS хотеть base64_encode(json_encode([[name,data]])) (JSON, не сериализуется); Zendesk загружает байты в /uploads.json Для того чтобы установить comment.uploads; Gmail отправляет многочастное/смешанное RFC-822 сообщение base64url-кодируется в raw; Amazon SES inbound attachments need the S3 receive action (the SNS path caps at 150 KB).

Удаленные платформы: API + webhook, никогда таблицы других приложений

Если ваша платформа является отдельное приложение или база данных (хостируемый SaaS, удаленный WHMCS, другой DB на одном сервере), Никогда не записывайте свои таблицы напрямую.: кросс-база данных записывает земли на любое соединение, которое активно и бесшумно пропускает реальные строки. вылетать = вызов подписанного REST платформы API (реплики, статус, отдел, удаления); входящий = платформа POSTs подписанный веб-хук, ваш handleWebhook() Проверяет и увольняет ticket.* Чтобы остановить зеркальную петлю, пометьте то, что вы нажимаете маркером происхождения (например). mirror_origin:'opsiq'); платформа перекликается с ним на веб-хук, и ваш входящий обработчик пропускает свои собственные эхо. OpsIQEvents::isMirroredEvent() На вершине каждого хозяина.

Зеркальный статус, приоритет и отдел

Ответ автоматически перемещается, а агент Ответ: → answered, a клиент Ответ: → customer_reply; зеркально, что таким же образом. Для явных изменений подписаться на ticket.updated читать payload['changes'] (например). {status:'closed'}).

Статус: OpsIQ Канонический набор - это open, customer_reply, answered, in_progress, pending, closedДержите небольшую двустороннюю карту в словаре вашей платформы и убедитесь, что ваша колонка действительно принимает значения, которые вы пишете. ENUM Отсутствие значения тихо падает до нуля в некоторых базах данных. Департамент: OpsIQ Department ID не имеет смысла на вашей стороне. Никогда не посылайтеОтправить дескриптор ()name, email и slug) и решить его против ваших собственных отделов по электронной почте → имя → слизняк, так что «Биллинговый департамент» приземляется в твой Биллинговый отдел вместо общий- Попробуй оба. ticket.escalated и а department_id изменение ticket.updated.

💡
Статус/приоритет/субъект/отдел/удалить зеркальное отображение блокируется переключателями на разъединитель (mirror_status_changes, mirror_priority_ changes, reflect_subject_ changes, mirror@department_change, mirror+deletes) OpsIQ Подключатели, помощники MirrorOptions. Вставьте этот блок в свои настройки.json и каждый разъем «клетка-зеркало» считывает переключатели одинаково.

Связать билет с продуктом / услугой

Если клиент выбрал конкретный продукт при открытии билета, нажмите подсказку, чтобы агент увидел сфокусированную карту обслуживания (с модалью «просмотр других продуктов» одним щелчком мыши для остальных).

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

Сервисный код платформы, например. WHMCS S396 (служба)396 D11 (домен)11). OpsIQ Разлагает необязательную букву типа + идентификатор и соответствует вашему списку услуг, с защитой типа, поэтому доменный код никогда не совпадает с продуктом одного и того же идентификатора.

related_domain

Доменное имя; сопоставлено как подстрочная строка с деталями / доменом каждой службы.

💡
Постройте список прикреплений один раз, в форме выше и OpsIQ Обсуждение The Rest: Hosted URLs Проходят через них, а содержимое base64 хранится и размещается для вас. Вам никогда не нужно писать на платформе обработку файлов.
⚠️
Ключи действия - это строчные буквы, цифры и подчеркивания 3 то 80 символы, а также позволяет точки; магазин действий принимает 2 то 100 символы без точек, поэтому придерживайтесь букв, цифр и подчеркиваний, и вы удовлетворяете оба. Добавление действия не создает никакого маршрута AJAX, поэтому нет ничего, чтобы регенерировать - повторно сохранить разъем и он синхронизирован.

Пусть ИИ создаст его для вас

Вам не нужно заполнять шесть шагов вручную. Опишите разъем своими словами, и ИИ OpsIQ нарисует всю спецификацию, прогоняет ее через тот же валидатор, который использует мастер, и показывает вам план перед тем, как что-либо будет записано на диск. Есть два места для этого, и они производят один и тот же пакет.

В волшебнике

Открыть Коннектор→+ Добавить разъем→Строить разъемНа шаге 1 вы увидите ✨ Постройте это для меняВведите, для чего предназначен разъем — платформа, что OpsIQ Что следует читать и что писать, и кто им пользуется — добавьте API Если вы знаете его, нажмите на него. Волшебник заполняет каждый шаг черновика, и вы просматриваете и редактируете так же, как если бы вы напечатали его 6 Та же самая панель выглядит как ✨ Уточнение с помощью AI, так что вы можете попросить изменить («также читать счета») вместо редактирования полей.

Попросите меня спросить OpsIQ

Открой. Задать вопрос OpsIQ Копилот в любом месте администратора и говорить, что хочешь. Тебе никогда не нужно называть действие или знать, что волшебник существует.

1
Попроси об этом.

Например: «Создай мне соединитель для Trello. Он должен перечислять мои доски и списки, читать карты и создавать карточки на доске. Trello использует ключ API плюс токен». Копилот отвечает предложением и показывает Нарисуйте этот разъем Ваше сообщение - это краткое, так что поставьте платформу, прочтите и запишите в ней.

2
Подтвердить проект

Копилот разрабатывает спецификацию, проверяет ее и отвечает планом: что делает разъем, действия, которые он будет выставлять (записи отмечены), предположения, которые она сделала, и вопросы, на которые вам все еще нужно ответить - обычно, какие учетные данные предоставить. Проект припаркован под идентификатором и остается доступным для 24 часов.

3
Скажи "создай его".

Копилот показывает строить 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
Введите учетные данные и включите

Новый разъем опубликован, но НЕ включен и не содержит секретов. Откройте его настройки, введите ключ или токен API, нажмите ТестТогда в состоянииПока ты не сделаешь, это ничего не сделает.

💡
Обе карты нуждаются в вашем клике. Шаг черновика вообще ничего не пишет; шаг сборки отмечен разрушительным и всегда задает вопрос. ИИ не может опубликовать разъем, включить его или ввести учетные данные самостоятельно.

Что такое ИИ и что ему не разрешено делать

Валидатор — это стена

Разработанная спецификация проходит точно такую же проверку () используется кнопкой «Опубликовать» мастера. Если она не проходит, ИИ получает ошибки и пытается снова, до трех раз, а затем отказывается в собственных словах валидатора. Проект, который терпит неудачу, никогда не становится пакетом.

Он не пишет никаких верительных грамот

В проекте именуется шаблон аутентификации и поля настроек; он никогда не изобретает ключ, токен или секрет. Вы заполняете их позже на странице настроев разъема.

Отвечает на вопросы, а не догадки

Все, что он не мог знать — идентификатор вашего аккаунта, регион, который из двух конечных точек раскрывает ваш план, возвращается как вопрос к плану, а не молчаливое предположение.

Изобретенная конечная точка громко терпит неудачу

ИИ говорят никогда не изобретать пути, но ни одна модель не идеальна. Неправильный путь публикуется как действие, которое проваливает свой живой тест на шаге Действий или в первый раз, когда он запускается — это никогда не молчаливый успех.

Пакет является обычным

То, что он производит - это обычный пакет Builder: те же сгенерированные файлы, тот же контракт, та же подпись, редактируемый в мастере, удаляемый со страницы Connectors. Отдельного типа "AI-разъема" нет.

Ваша модель делает черновик

Качество следует модели, настроенной в соответствии с настройками → AI. Маленькая дешевая модель создает правильный, но простой разъем и задает больше вопросов; более сильная модель получает больше конечных точек правильно с первого раза. Измените ее под конфигурацией ИИ; ничего больше не должно измениться.

⚠️
Копилот может выполнять только действия, которые эта установка фактически зарегистрировала. Если действия разъемного строителя отсутствуют — план, который не включает их, или роль без них manage_connectors — копилот говорит так, вместо того чтобы предлагать карту, которая не сработает при нажатии.
Коннекторы

Продажа через чат: карта роли коммерции

Коннектор, который может продавать — платформа магазина, система бронирования, платежной системы — заявляет, какие из его СОБСТВЕННЫХ операций отвечают каноническим ролям OpsIQ. Заявите это и коннектор появится в Настройки → Чат с клиентом → Продажа через чат автоматически; прекратите объявление и он исчезнет. Нет списка для регистрации.

Файл: commerce_roles.json

Декларация живет в собственном файле на корне пакета. Наличие файла является претензиейОн не может жить в connector_contract.jsonЭтот файл регенерируется упаковочными инструментами, и его схема отклоняет неизвестные ключи, поэтому блок с добавлением вручную не будет валидироваться, а затем перезаписываться.

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"
    }
  }
}

Правила и почему существует каждый

Роли – это закрытый словарь

OpsIQ никогда не выводится из названия действия. Незадекларированная роль не существует — объявление является целым контрактом.

Операция должна быть одним из ваших действий.

Каждая операция должна существовать в вашем actions.jsonОпечатка объявляет о возможности, которая не может работать, и она появляется на экране клиента как «Я могу проверить это для вас», за которой ничего не следует.

Роль чтения никогда не указывает на разрушительную операцию.

Роли чтения (каталог, доступность, цитата, поиск заказа) должны отображаться на операции, которые ничего не меняют на вашей платформе.

Роль записи никогда не отображается в общую операцию записи

картографирование order_create Вставить в сырой столик — record.create, db.insert, recordCreateЛюбой орфографический текст, любой разделитель — отклоняется структурно. Ряд написанных напрямую обходится с ценообразованием вашей платформы, блокировкой акций и подтверждением почты, создавая заказ, в который ваша собственная система не полностью верит.

Роль письма объявляет операцию восстановления

Идемпотентный поиск, который отвечает: «Я написал землю?». Самый опасный тайм-аут — это тот, который после того, как ваша платформа уже создала заказ; без поиска восстановления единственными вариантами являются повторная слепота или потеря его.

Платежные роли, связанные с провайдером, несут три дополнительных обязательства

Пакет, который напрямую общается с поставщиком платежей, также должен быть объявлен. payment_profile (валюты, страны, методы и окружающая среда — незаявленная среда – это то, как интеграция теста принимает оплату в реальном времени; webhook_verify (реальная схема подписи провайдера; общий секретный сравнительный результат не принимается) и event_map (события предоставляются каноническим). Торговый разъем, который реализует только record_payment получает уже проверенные канонические платежные доказательства; он не должен притворяться шлюзом.

Объясните, как клиенты могут заказать из подключенного магазина

Торговый разъем и платежный шлюз - это разные контракты. Подключенный магазин клиент заказВыберите самый глубокий режим, который может доказать платформа. Выбор упакован внутри подписанного commerce_roles.json; Хранить и клиентский чат перечитывать его во время исполнения. Удаление роли или отключение / удаление разъема, таким образом, аннулирует ранее представленное предложение вместо того, чтобы оставить устаревшие полномочия позади.

catalog_only

Карты catalog_search или catalog_getOpsIQ может искать и объяснять продукты, но не может показывать исполняемый заказ или подтверждение заказа. Каждый пакет остается по этому истинному умолчанию до тех пор, пока его собственные напечатанные цитаты и действия проверки / заказа не пройдут более глубокий контракт и сертификацию Marketplace; никогда не выводите транзакционную поддержку из названия платформы.

platform_checkout

Также карты quote и platform_checkoutТорговое действие, а не ядро OpsIQ, возвращается checkout_url, checkout_reference URL должен быть HTTPS, его имя хоста должно совпадать customer_ordering.checkout_hosts HTTPS-хост, полученный из checkout_host_settingИ цитата может жить не более чем 15 минута. Продукция пермалинк, локально собранная тележка URL или вернуться URL Это не выданная торговцем возможность оформления заказа.

direct_order

Также карты quote, order_create и order_getс order_create.recovery. Core обновляет котировки непосредственно перед выполнением, поставляет ключ идемпотентности, а также запрашивает операцию восстановления после каждого неизвестного исхода до любой повторной попытки. payment_flow=opsiq_gatewayКроме того, он должен быть картой record_payment с авторитетной операцией восстановления / возврата. OpsIQ активно проверяет транзакцию шлюза, сопоставляет сумму, валюту, ссылку на продавца и заказ, пишет ссылку поставщика один раз, а затем читает счет-фактуру / заказ продавца обратно. mark_invoice_paid Переключатель статуса отклоняется, поскольку не содержит доказательств оплаты. В действиях по созданию должны учитываться собственные ценовые требования платформы, логика бизнеса в отношении акций и заказов; в необработанных базах данных отказывают.

Проверка личности и что может изменить оператор

Когда OpsIQ владеет платежом, клиент чата должен связаться с вами. email_otp перед созданием команды — OpsIQ отправляет по электронной почте код из _6 цифр и просит его. Это не то, от чего коннектор отказывается; это уровень гарантии, который требует ядро выполнения order_create.

Исключением является тот, кто контролирует

Оператор может принять непроверенный адрес ТОЛЬКО там, где заявляется ваш разъем. fulfilment_presence: customer_presentГость отеля должен прибыть, поэтому неправильный адрес неправильно направляет квитанцию и номер все еще там. remote_delivery - отгружены, обеспечены, загружены - и проверка требуется независимо от того, что оператор устанавливает, потому что значение оставляет на силе только этот адрес. minimum_assurance или reversibility: irreversible Также устраняется возможность оператора пропустить его.

Как долго длится код

Тридцать минут по умолчанию, настраиваемый оператором 5 минуты до 24 Клиент видит обратный отсчет в реальном времени собственный Истекший код говорит так ясно и предлагает новый, а не сообщает о недействительном коде — клиент, набравший правильный, но старый код, не сделал никакой ошибки и сказал им, что они отправили их по тому же циклу.

Что должен предоставить клиент: поля клиента

Имя и адрес электронной почты всегда требуются и собираются первыми. address, phone и company as required или optional Чтобы соответствовать бизнесу: магазин, который отправляет посылки, объявляет адрес необходимым; отель заявляет, что требуется телефон, поскольку гость, которого он не может позвонить, не имеет контакта с бронированием. Помощник просит их в разговоре перед цитированием и OpsIQ отказывается размещать заказ, в котором отсутствует требуемое поле. Строитель пишет нормированную карту, базовая линия включена, поэтому контракт на диске ясен.

Когда создается счет: account_timing

at_order (по умолчанию) позволяет заказу написать создать учетную запись покупателя. before_quote Когда цена вашей платформы на ваш счет — WHMCS налоги по собственному профилю клиента и котировкам в валюте клиента — и OpsIQ Создайте аккаунт через свой customer_create действие, как только необходимые поля известны, затем запрашивает котировки для этого счета, поэтому карта подтверждения несет общую сумму, которую вы фактически начислите. account_flow: connector_signup.

Помощник берёт, не читает: client_tools

При заказе на "Создать" помощник никогда не читает вставленный каталог. Он называет три инструмента - commerce_catalog_search (пустая анкета – это обзор семейств продуктов, результаты за пределами списка указаны по названию). commerce_catalog_get для одного предмета в полном объеме и commerce_quote, который мятит подписанную карточку подтверждения серверной стороной через те же стены, что и путь разъема всегда имел. Один инструмент на глагол, ваш разъединитель как параметр, поэтому магазин с шестью разъединителями получает три инструмента, а не восемнадцать. client_tools Ограничивает по умолчанию; отсутствие означает каждый нанесённый на карту, и catalog_only Подтверждение никогда не цитирует. Подтверждение - это никогда не инструмент: кнопка карты в сети, номер карты на канале и ничего из модели говорит тратит деньги. На канале клиент отвечает с NUMBER на карточке - что само по себе подтверждает, когда предлагается один вариант оплаты, а номер плюс имя платежа, когда их несколько. Номер - единственное, что должно быть точным: слово "подтверждать" является необязательным, интервалы, окружающие слова и пунктуация игнорируются, а название платежа совпадает, однако оно написано. Число, которое не соответствует живой цитате в этом разговоре - обычный чат, поэтому клиент, набравший номер дома, отвечает, а не отказывается. Вся карта — количество, сумма, варианты оплаты, инструкция по ответу и срок действия — написана на языке ЗАКАЗЧИКА при обнаружении языка чата (Настройки → Клиентский Чат), а не в рабочем пространстве.

Какие предметы из каталога должны иметь

id, nameБезопасный клиент summary, a category или семейство продуктов (так слово клиента находит предмет, имя которого является кодом), currency, unit_amount_minor, availableи input_schema Поиск оценивает слова клиента по имени, семье, циклу и резюме.

Откажитесь от причины, по которой клиент может действовать

Возвращение {"success":false,"error":"…","missing":["domain"],"retryable":true} когда значение неверно или отсутствует отказ, который называет missing или retryable До клиента дословно доходит; голый отказ остается общим, поэтому ничего внутреннего не просачивается.

Геовалюта и аварийная остановка

Когда оператор включает валюту Geo (Client Chat → Behaviour), клиент читает цены в своей собственной валюте на каждой поверхности - текст чата, веб-карта, текстовая карта канала и валюта открытия магазина - с помощью собственного магазина FX платформы. Ваша цена никогда не заменяется: карта показывает фигуру посетителя рядом с общей суммой магазина, а шлюз обрабатывает именно ту сумму, которую он отображает. Пауза на все продажи (Настройки → Commerce) - это выключатель убийства: каталог, цитаты и поиски остаются открытыми; предложение и подтверждение остановки на каждом канале.

При продаже через чат не ведут себя

Торговец не мог быть достигнут

Упаковка пакета сломана: файл был отредактирован после подписания. Переиздать пакет. Установленная рыночная копия никогда не редактируется на месте; обновить его с панели рынка.

Заказ в этом магазине сейчас приостановлен

Выключатель включен. Настройки→Торговля→Приостановить все продажи.

Заказ пока не доступен на этом канале.

Канал не тикается под Где клиенты могут купить. Журнал сервера называет канал. Помощнику говорят в начале разговора, поэтому он отвечает на вопросы и цитирует цены каталога, но никогда не собирает детали или выдает код подтверждения, который он не мог бы выполнить на этом канале.

Помощник описывает предмет, но карточки не появляется.

Инструмент цитаты отказался. Каждый звонок регистрируется как [opsiq][commerce][client_tool] с причиной: неправильный идентификатор товара, поле, которое товар не декларирует, принятый домен или собственный отказ продавца. Прочитайте журнал, прежде чем доверять перефразированию помощника.

Помощник говорит, что не видит продукты.

Страница принадлежит другому рабочему пространству. Каждый виджет веб-сайта принадлежит одному рабочему месту, и разъем магазина должен быть включен там.

Ответ вместо ответа

«Расскажите мне немного больше о том, что вам нужно» означает, что поставщик ИИ называет себя неудачником; история ИИ показывает точную ошибку под этим поворотом.

Редактирование разъема не отображается в чате

Рабочий перерабатывает изменения кода в течение минуты, но разговор воспроизводит свою последнюю карту.

Нигерийский посетитель видит доллары, хотя гео-валюта на

Проверьте, что гео-IP База данных сконфигурирована (Client Chat) → Гео) и что валюта посетителя имеет ставку FX; без ставки OpsIQ Показывает цену магазина, а не неправильное число.

Ваша общая сумма - единственная цифра, которая перемещает деньги.

Цитата несет unit_amount_minor, quantity и total_amount_minorИ заманчиво считать третье выводимым из первых двух. Это не так, и предполагая, что оно уже стоило клиенту реальных денег.

quantity это то, что выбрал КЛИЕНТ — одна комната, одна лицензия, один полис. Ваш множитель может быть чем угодно OpsIQ никогда не видит: ночи, места, циклы оплаты, расстояние, вес, уровни. Отель предлагает один номер на три дня в качестве количества 1, единица 105,000, всего 315,000. OpsIQ умноженная единица на количество для цены карточки подтверждения, показанного гостю 105,000, а затем заряжал 315,000 Согласие на одну цифру и взимание другой - худшая вещь, которую может сделать этот контракт.

Правило

total_amount_minor Это единственная фигура OpsIQ показывает, подписывает, обвиняет и примиряет против. unit_amount_minor Если ваша сумма не совсем то, что вы хотите заряжать, ваша цитата ошибочна — OpsIQ не исправит ее, потому что общая сумма, которая была скорректирована, является той, которую вы никогда не согласились соблюдать.

Что это означает для вашего действия цитаты

Примените свои собственные ночи, уровни, скидки, налоги и сборы, прежде чем ответить. Если ваша линия не согласуется - умноженная на единицу целое число никогда не равняется вашей общей - OpsIQ рассматривает все это как одну линию по ее реальной цене, а не придумывает разбивку, которая ни к чему не примиряется.

Шесть ответов, которые сделают этот контракт подходящим для любой отрасли

Вышеприведенная декларация начиналась как декларацией магазина: купи вещь, плати сейчас, она твоя, можешь отменить. Каждый из этих четырех - предположение, которое не разделяет какой-то реальный бизнес. Банк, перемещающий деньги, не может отменить его. Страховщик не может сказать "подтверждено", пока не посмотрит андеррайтер. После этого счет торговца. Клиника выставляет счета кому-то, кто не является пациентом. Невозможно так сказать, эти предприятия либо искажают свой собственный процесс своим клиентам, либо вообще не могут подключиться.

Таким образом, транзакционный разъем отвечает на шесть дополнительных вопросов. Каждый из них по умолчанию строго читает — говорить ничего всегда безопасно и никогда не дозволено, потому что ничего не говорить – это то, что делает автор, когда он не рассмотрел вопрос.

transaction_kind

purchase, booking, subscription, bill_payment, transfer, application, top_up, renewalСловарь, а не поведение: он решает слово, которое читает ваш клиент. Называя банковский перевод «заказом», помощник звучит так, как будто он не понимает бизнес, на котором он говорит, и никакое количество правильной сантехники не восстанавливается от этого. purchase.

decision_mode

immediate или deferredВыбери. deferred для всего, что идет на андеррайтинг, оценку кредита, рекомендации, прием или комитет. OpsIQ тогда говорит представленный Вместо того, чтобы подтвержденоРассказывая кому-то, что их приложение подтверждено, пока оно сидит с человеком, является самой разрушительной вещью, которую помощник чата может сделать для регулируемого бизнеса, и это поведение по умолчанию каждого потока в форме розничной торговли. immediate.

payment_timing

on_confirmation, deposit_then_balance, invoice_later или no_paymentЭто решает, открывает ли OpsIQ страницу оплаты. вообщеПоэтому нельзя делать вывод из payment_flow - Это говорит кто Деньги берут, это говорит Когда и когдаПосле этого работайте со счетом-фактурой, и заявки, которые ничего не стоят, заканчиваются подтверждением вместо того, чтобы попасть в список шлюзов, который пуст или ошибочен.

reversibility

reversible или irreversibleСамое главное, что говорит финансовый разъем. Комната может быть освобождена и посылка может вернуться; завершенный перевод не может - нет отмены, деньги находятся на другом конце, и единственное средство правовой защиты - попросить незнакомца вернуть его. irreversible автоматические силы cancellation_flow то none и запрещает любому оператору, устанавливающему пропуск проверки личности, Что бы ни говорилось в декларацииДва поля, несогласных с этим, не являются состоянием для решения во время выполнения, в зависимости от того, что читается первым. reversible.

cancellation_flow

none, platform_only или connector_cancelРоли отмены уже существовали без правила о том, кто мог бы их достичь, и две неправильные догадки терпят неудачу в противоположных направлениях: угадай открытое сообщение в чате отменяет платное бронирование без указанной платы; угадаешь закрытое, а клиенту, который хочет отменить, говорят позвонить. connector_cancel дополнительно требует cancellation_quote и order_cancel с восстановлением — OpsIQ никогда не отменяет, прежде чем сказать, сколько это стоит. none.

fulfilment_presence

customer_present или remote_delivery. Непроверенный адрес электронной почты может стоить кому-либо что угодно. Гость отеля должен прибыть, поэтому неправильный адрес неправильно направляет квитанцию и комната все еще там; размещенная посылка, выделенный сервер или ссылка на загрузку оставляет только силу этого адреса. Это то, что делает настройку «пропустить проверку электронной почты» оператора доступной вообще.И это объявлено вами, а не выбрано ими — так что рассуждения отеля никогда не могут быть унаследованы разъемом, который отправляет товары. remote_delivery.

minimum_assurance и disclosure (необязательно)

minimum_assurance Пусть вы требуете больше Идентификационное подтверждение, не менее необходимое для OpsIQ - банк, требующий увеличения суммы перевода, выполняет контракт. Установка его также лишает оператора возможности пропустить проверку вашего разъема, поскольку собственное решение о риске коммерсанта превосходит удобство оператора. disclosure показана формулировка перед Кнопка подтверждения, за плату или право охлаждения вы должны представить; без нее регулируемые предприятия контрабандой вводят необходимую формулировку в название продукта.

notify_flow

platform_automatic, platform_triggered или noneКогда OpsIQ Принимает оплату, ваш собственный кассовый сбор никогда не работает, поэтому независимо от того, что он обычно отправляет по электронной почте, никогда не срабатывает. Запись платежа означает оплаченный заказ; она не обязывает платформу никому рассказывать. platform_triggered требует order_notify роль с восстановлением, и OpsIQ запрашивает только после того, как платеж в обратной стороне доказывает, что деньги записаны. none делает подтверждение на стороне OpsIQ обязательным, потому что в противном случае платящий клиент ничего не слышит. none.

Тот же контракт, девять не связанных между собой предприятий

Каждый контракт честно отвечает за разные отрасли, при этом OpsIQ ничего не знает о них.

Один контракт, девять отраслей
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
Платное мероприятие, поставляемое на платформы

После того, как нативный платеж в магазине активно проверяется и совершается, OpsIQ эмитирует payment.completed с order_id, payment_id/provider_ref, gatewayТочно amount_minorISO currencyКлиент, линейные элементы, канал и paid_atТорговый разъем должен сохранять эти доказательства через record_payment и прочитайте его обратно; разъем для кассового сбора потребляет свое собственное авторизованное платное событие и не должен получать дубликат платежа.

ИИ — это предложат, а не источник власти

Модель может выбрать заявленный продукт и количество, но не может выбрать название операции, отчеканить кассу URL или создать состояние продавца из текста. Заказчик получает точную подписанную карту и должен нажать кнопку подтверждения. Это подтверждение связано с рабочим пространством, разъемом, предметом, количеством, котировками, валютой, потоком и истечением срока действия.

Социальные клиенты сохраняют тот же поток без электронной почты

WhatsApp, Messenger, Instagram, Telegram, LINE, SMS и X используют учетную запись проверенного поставщиком канала в качестве идентификатора клиента. Предложение подписано к этой учетной записи канала и подтверждение все еще проходит через тот же свежий котировки, запасы, idempotency, оплаты и восстановления контроля. Социальный клиент использует точное одноразовое действие подтверждения сделано в их разговоре; обычное проза, такие как “да” никогда не заказывать власти.

История заказов следует за точной ссылкой на личность, никогда не догадывайтесь по электронной почте

Нативные заказы индексируются непрозрачным идентификатором канала, поэтому ИИ может ответить «где мой заказ?» без запроса номера электронной почты или заказа. Для истории подключенного магазина свяжите идентичность канала с рабочим пространством CRM/клиентской записью и внедрите авторитетный поиск клиента / заказа в разъеме. Поставщики контекста клиентов получают эту сохраненную ссылку; они не должны выбирать учетную запись из отображаемого имени или электронного письма, введенного в чат. С одним соответствующим заказом ИИ отвечает напрямую; с несколькими он суммирует совпадения и спрашивает, какой из них; ни один из них не говорит, что история не связана.

Сделайте полезную нагрузку универсальной: типизированные поля и идентификатор, принадлежащий серверу

Core не содержит WHMCS, отеля, SaaS, магазина, банка, продукта, маршрута или филиала поставщика. parameters Разъем бронирования может объявлять даты и гостей; разъем выставления счетов может обнародовать цикл; будущий разъединитель предприятия может объявить свои собственные безопасные поля. OpsIQ санирует примитивные элементы управления и отправляет собранные значения только на отображенное действие разъединения.

Тип действия цитаты
{
  "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"}]}
  ]
}

Для clients_onlyустановленный customer_ordering.identity_parameter параметр действия, который получает внешний идентификатор клиента разъема. Это поле никогда не отображается клиенту и любое значение, предоставленное абонентом, удаляется; OpsIQ впрыскивает только идентификатор из проверенной ссылки на разъединитель. Гостевой кассовый лист оставляет его пустым. Введенное электронное письмо является доказательством для объявленного поиска гостя, а не авторизации и не органа покупки.

Сгруппированные домены: Учетные записи и конфигурация разъема принадлежат основному рабочему пространству портала группы. Однако токен идентификации должен быть подписан для точного сайта-члена, который встраивает виджет, используя секрет веб-хокера этого участника. OpsIQ проверяет эту поверхность сначала и только затем решает торговлю и связанного клиента через первичный пакет группы. Никогда не заменяйте ключ сайта-участника основным ключом и никогда не копируйте основной секрет на сайт-член.

Канонические конверты разъем должен вернуть

Каталог
{
  "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"}
  }]}
}
Цитата
{
  "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"
  }
}

Реакция проверки платформы повторяет действительную каноническую цитату и добавляет HTTPS. checkout_urlCore обновляет котировки при подтверждении и сравнивает валюту, общий и стабильный выбор точно. Разъем переводит свой ответ платформы в эти конверты; ядро никогда не переводит поля поставщиков или конструирует торговца URL.

Сделайте построенный оператором шлюз доступным в родном магазине и чате

Возможность оплаты сама по себе не ставит шлюз перед клиентами. Платежный шлюз Native Store Блок в Connector Builder. Он добавляет явный контракт на версию, отображает создание кассы и активный поиск платежей, а также перечисляет домены кассовых сборов, размещенные у провайдера. Как только разъем установлен, включен и выбран в настройках Commerce, тот же шлюз появляется в общедоступном магазине, модальном магазине , клиент-чат и автономной кассовой ставке. Ни один слаг провайдера не закодирован.

Контракт с шлюзом 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"]
    }
  }
}
Канонический контроль выход

Карты действий Checkout checkout_url Когда у поставщика есть один, session_idURL должен быть HTTPS, не содержать учетных данных и соответствовать разрешенному хосту.

Канонический статус выходной

Действия по статусу выполняет свежий провайдер API поиска и карт paid как настоящий булеан, amount_minor как целое число, currency в виде трехбуквенного кода ISO, и provider_refОбратная URL, строка запросов, полезная нагрузка клиента или «подтвержденная» инструкция с разъемом никогда не является правдой оплаты.

Факультативный договор возврата

Если шлюз поддерживает возврат средств, карта payment_refund и его восстановительные действия. Создание возврата возвращается строго accepted и completed Булевы плюс provider_ref; восстановление выполняет поиск поставщика и возвращается statusБез обоих действий OpsIQ не рекламирует возврат средств на разъем.

Кто подтверждает приказ

Коннектор никогда не пишет OpsIQ Статус заказа. OpsIQ Точно сравнивает возвращенную сумму и валюту и записывает ссылку на поставщика; только тогда ядро выполняет переход, проверенный поставщиком.

В Connector Builder, тик торговля, нарисуйте роли и настройте либо Подключенный магазин клиент заказ, Платежный шлюз Native Storeили и то, и другое, когда соединитель действительно предоставляет оба контракта. Мастер подтверждает декларацию и пишет commerce_roles.json. Публикация по-прежнему использует обычный процесс проверки и подписи Marketplace; этот контракт никогда не обходит проверку пакета или делает разъем неустановляемым. Проверяйте любой пакет вручную с помощью php tools/verify_commerce_contracts.php.
💡
Транспорт - это http для удаленного API или bridge для проведения операции на развернутом мосту (см. NO-API Ниже приводится схема. Роли являются транспортно-агностическими; время выполнения просто нуждается в указанном транспорте, чтобы он мог спаривать мост.
Коннекторы

Продажа через чат без разъема: действия и триггеры

Приведенный выше коммерческий контракт не требует пакета разъемов. Если ваша платформа является вашей собственной - пользовательский бэк-офис, внутренняя API, система, для которой никто не поставляет разъединитель - вы можете достичь того же самого продающего оборудования с двумя инструментами, которые вы уже используете для интеграции чего-либо еще: пользовательские действия (ваши конечные точки HTTP, определенные на странице действий) и триггеры (веб-хуки событий). Тот же самый контракт, та же карта, таже гарантия личности, то же самое ядро платежа, те же квитанции. Единственное, что отсутствует, это пакет, потому что нет никакого кода третьей стороны, чтобы подписать.

Как они сочетаются

Вы создаете одно пользовательское действие на роль в торговле — каждая из них является простой конечной точкой HTTPS на вашей стороне. AI & Automation → с его URL, заголовком и параметрами. Затем вы сохраняете одно объявление, которое отображает роли для этих действий. С этого момента ваш магазин появляется в чате точно так же, как поддерживаемый разъемом: цитаты из AI твой действие котировки, отображается карта подтверждения, клиент проверяет свою электронную почту, звонит ядро заказа твой действие заказа с ключом идемпотентности, OpsIQ принимает оплату через шлюзы рабочего пространства; твой В книге действий по оплате записей ничего не говорится об опыте клиентов.

Декларация

Сохраните JSON в качестве настройки рабочего пространства commerce_custom_integration (Настройки → расширенные настройки, или через REST-настройки API). Это та же форма, что и пакета commerce_roles.json Торговый узел, с action Назовите ваши пользовательские ids:

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"
  }
}

Наконец, добавьте custom_commerce к разъемам, включенным для продажи в настройках→Клиентский чат→Продажа через чат. Вход перепроверяется каждый запрос, и он отказывается с названными причинами, а не молча прячет ваш магазин: роль, которую ваш режим требует, чтобы карты ни к чему, роль записи без действия восстановления (§15.7 - запись, результат которой нельзя повторно спросить, отказано), действие, которое было удалено или отключено с момента сохранения.

Что должно делать каждое действие

Вернуть конверт разъема

Ответить {"success": true, "data": { ... }} - или {"success": false, "error": "a sentence a customer may read"}Ваши действия Путь к успеху Он должен указывать на конверт.

Цитата: Всего, в незначительных единицах

Возвращение quote_id, product_name, quantity, unit_amount_minor, total_amount_minor, currency, selection, selection_summary, expires_atВсе в разделе «Ваша общая сумма является единственной цифрой, которая перемещает деньги» выше применяется дословно: налоги, сборы и мультипликаторы входят в вашу общую сумму, потому что ваша общая сумма - это то, что подписано, показано и взимается.

Орден «Создай: почитай ключ идемпотентности»

Вы получаете idempotency_key, подписанный total_minor и currency, проверенный customer_email, и ваши собственные параметры котировки. Храните ключ с заказом; если вы уже создали заказ для него, верните этот заказ вместо второго. Проверьте деньги - если ваша система ценит заказ иначе, чем подписанный общий, откажитесь повторно, а не подзарядки. reference Ваша платформа распознает

Восстановление: ответ о ОДНОМ пиши

order_by_key Получает ключ идемпотентности и ответы {"found": true, "order": {...}} или {"found": false}. found:false is a promise — OpsIQ может перепроверить запись на прочность. Реклама о статусе или список недавних заказов не является ответом об одной записи.

Рекордная оплата: собственный путь урегулирования

Получает идентификатор транзакции шлюза в качестве ключа идемпотентности плюс ссылку на ваш заказ после того, как OpsIQ активно проверил сумму и валюту с шлюзом. Отметьте заказ, оплаченный по собственной логике вашей платформы - увольняйте свои собственные электронные письма, уменьшайте свои акции. platform_notified: true Если ваша платформа отправляет электронную почту самому клиенту.

Входные данные карты поступают из ваших параметров действия

Любой параметр, который вы заявляете в своем QUOTE-действии (за пределами идентификационного параметра), который не был собран ИИ, отображается на карточке подтверждения как вход, который клиент заполняет сам — домен, дата, место.

Триггеры: слушайте свои собственные продажи

Два события загораются в совместно используемом автобусе событий, поэтому ваши веб-хуки и автоматики слышат каждую продажу чата, где бы она ни выполнялась:

commerce.order.created

момент приземления заказа на стороне продавца, до оплаты — справочник, разъем (или custom_commerce), сумма, валюта, электронная почта клиента, thread id.

commerce.payment.confirmed

Точно один раз за заказ, когда шлюз активно проверяет платеж. Он подает то же требование, которое предотвращает дублирование квитанций, поэтому он не может удвоить ваш веб-хук.

Когда нужно переходить на разъем

Интеграция на заказ - это конфигурация рабочего пространства: она обслуживает ВАШ магазин, в ВАМ рабочем пространстве. В тот момент, когда вы хотите распределить интеграцию - другие рабочие места, рынок, редактирование, подписание, платные установки - упаковывайте те же действия и ту же декларацию, что и разъем. Контракт не меняется; только обертка делает.

Коннекторы

Подключите платформу, которая не имеет API (мостовой шаблон)

Многие реальные платформы не поддерживают REST API Система управления контентом отеля, старая система расчетов, специальный внутренний инструмент. Вы все еще можете написать полный OpsIQ connector for one: коннектор отправляет один файл PHP, который оператор сбрасывает в свой собственный публичный webroot, и этот файл ЕСТЬ. API. Эта страница представляет собой весь шаблон, с правилами, которые делают его безопасным для запуска и причиной каждого правила.

Форма его

Обычный разъем вызывает чужой API. Разъем моста приносит свой собственный. Ничего больше не меняется: те же действия, те же поставщики контекста, тот же контракт идентификации, та же макет пакета.

1
Вы пишете один 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
Оператор копирует его в свой webroot.

Рядом с собственным index. php платформы нет кода платформы, плагин не установлен, ничего для поддержания обновлений платформы.

3
Панель разъема передает им файл

Ваша настройка.json объявляет webhook_help. snippet_template. Страница разъема отображает его в виде копируемого файла с уже заменёнными живыми настройками, поэтому нет ничего для ручной редактирования.

4
OpsIQ называет его сервер-сервер

Ваш клиент.php отправляет запросы GET с общим ключом в X-Opsiq- Заголовок Бридж-Ки URL Настройка - это корень сайта платформы.

Коннектор Строитель может генерировать это для вас сейчас. Выберите "Платформу без API"профиль (или набор доступа к данным моста) и он излучает файл моста, фрагмент соответствующей панели и типизированные действия, которые читают и пишут через него - для приложения Laravel считывающего его .env, для WordPress чтение wp-config.php или с учетными данными, которые вы вставляете для чего-либо еще. Режим моста фиксирует аутентификацию OpsIQ Протокол моста: разъем безопасно генерирует api_key Когда это возможно, отправляйте его как X-Opsiq-Bridge-Keyи связывает эту же сохраненную стоимость с OPSIQ_BRIDGE_KEY в копируемом файле. Рукописный автор только тогда, когда ваша платформа не является ни одной из них, или когда вам нужно поведение сгенерированный мост не покрывает. Ручно-письменный мост безопасен для мастера: он только перезаписывает мостовый файл, несущий свой собственный маркер.
💡
Все на этой странице показано в PHP против MySQL, потому что это эталонная реализация и единственная комбинация, которую полностью поддерживает упаковочный конвейер. Сам шаблон является языково-агностическим и моторно-агнозическим: см. «Мост на других языках и другие базы данных» для шлюза в Node, Python, Go, Ruby, .NET и Java, запрос интроспекции для PostgreSQL, SQL Сервер, SQLite Оракул и его MongoDB эквивалент — наряду с ограничением упаковки, которое определяет, как мост без ПНД достигает оператора.

Модель безопасности и почему существует каждое правило

Этот файл находится в открытом веб-корне за одним общим ключом. Этот единственный факт приводит к каждому правилу ниже. Не расслабляйте ни одно из них, чтобы сделать ваш мост проще.

Звонящий никогда не поставляет SQL

Ни пункт WHERE, ни фрагмент ORDER BY, ни параметр необработанного запроса «только один раз». Звонящий называет таблицу, столбец и значение; ваш файл создает заявление. В тот момент, когда вызывающий может внести SQL текст, один общий ключ становится произвольным выполнением базы данных.

Названия таблиц и столбцов проверяются на соответствие информационной схеме

Идентификаторы не могут быть связаны как параметры, поэтому их нужно проверять. Прочитайте реальный список таблиц и столбцов для этой базы данных и откажитесь от чего-либо, что не находится на ней. Идентификация, которая не является реальным объектом этой схемы, тогда не может достичь запроса вообще - что делает его безопасным для раскрытия каждой таблицы.

Каждое значение является связанным параметром

Без исключения, включая значения внутри поиска. Валидируемые идентификаторы плюс связанные значения - это пара, которая делает поверхность полной и поверхность впрыска nil.

Чтения универсальны, записи разрешены

Смотрите следующий блок. Это правило, которое люди больше всего хотят пропустить.

Секретные колонки отредактированы на прочитанное и отклонены на письменное

Сопоставьте на столбце NAME: password, remember_token, secret, api_key, private_key. Replace the value with a placeholder on the way out. Refuse the write completely on the Way in — запись необработанного хеша пароля не является операцией, это футган. Отправьте оператора в собственный поток паролей платформы.

Удаления однорядные, по первичному ключу

Никогда не удаляйте по объему, никогда не удаляйтесь фильтром. Большая утилизация - это то, как умирает база данных. Если кому-то действительно нужна такая база данных, он может сделать это на платформе.

Чтения сложены в ряд

Закрепить предельный параметр жестким потолком. Убегающий запрос не должен быть в состоянии сбросить базу данных через сообщение чата.

Не закрывается до тех пор, пока не будет установлен ключ

Неконфигурированный мост отвечает 403 на все. Мост, который полезен до того, как он сконфигурирован, является мостом, который был полезен незнакомцу.

Сравнение ключей в постоянном времени, ключ в заголовке

Hash_equals, never ==.Ключ идёт в X-Opsiq-Bridge-Key, а не строка запроса, поэтому она остается вне журналов доступа, прокси-логов и заголовков рефереров.

Пойдем только

Один метод, одна форма, ничего не провозить в тело. Все, что делает мост, выразимо как GET с проверенными параметрами, и OpsIQ является единственным звонящим.

Читать универсально, писать в разрешенном списке — и почему

Это правило, с которым спорят, поэтому здесь рассуждения в полном объеме. Помощник должен иметь возможность видеть всю платформу: это то, что делает ее полезной, и чтение не может ничего уничтожить. Писания разные. Этот файл находится в публичном веб-корне за ОДН общим ключом. Если этот ключ утечка, неограниченное поле записи делает утечку эквивалентной полному управлению базой данных - новый пользователь администратора, пустая таблица бронирований. Разрешенный список означает, что просочившийся ключ все еще не может достичь таблицы, которую оператор никогда не включал.

⚠️
Карта одобрения OpsIQ открывает доступ к ИИ, а не к ключу. Разрешение администратора на разрушительное действие - это контроль над помощником. Это не контроль над тем, кто держит ключ моста. Это две разные угрозы, и список разрешений - ответ на вторую.
Ручка, обращенная к оператору, с моста 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';

Две детали в чеке ниже легко ошибиться. Название таблицы прибывает уже RESOLVED, неся префикс таблицы установки, а оператор пишет список разрешений без предварительной настройки, потому что это то, что они естественным образом наберут. Сравните оба пути или префиксированная установка молча ничего не позволяет и каждая запись прерывается. И отказ должен объяснить себя, потому как человек, читающий ее, является администратором в окне чата, а не разработчиком со следом стека.

Проверка списка разрешений, дословно с сайта marketplace_connectors/botble/bridge/opsiq-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);
};

Ворота, в полном объеме

Четыре чека в этом порядке, прежде чем что-либо коснется данных. Копируйте заказ и проверки.

Четыре воротных чека, по порядку
<?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. */

Проверка идентификаторов на соответствие информационной схеме

Это та часть, которая превращает "помощник может добраться до любого стола" из безрассудного в безопасный. Решите имя стола звонящего против реальной схемы, переносите недостающий или дополнительный префикс стола и возвращайте нуль за что-нибудь еще. Все ниже по течению затем работает с именем, которое, как доказано, существует.

Проверка и редактирование идентификатора, дословно с моста Botble
/** 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;
};

Читать op и писать op, полный

Обратите внимание, что связано и что проверено. Колонка фильтра проверяется по реальному списку столбцов, а затем интерполируется как идентификатор; ее значение ограничено. Предел зажимается. Ряды отредактированы на выходе. Обновление отказывается от основного ключа и любой колонки auth, а штампы обновляются_at при наличии таблицы.

Прочитайте любую таблицу — проверенные идентификаторы, связанные значения, заглавные строки
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,
    ]]);
}
Напишите одну строку — таблица с разрешенным списком, отклонённые колонки auth, один ряд по первичному ключу
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)),
    ]]);
}

Выживание различий в схеме

Версии платформы отличаются. Колонки двигаются, переименовываются или отсутствуют. Мост, предполагающий работу одной схемы на одной установке. Проверяйте и адаптируйтесь вместо этого: выберите только существующие здесь колонки, переносите приставку таблицы и попробуйте правдоподобные орфографии ссылки.

Допуск схемы, от моста 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));
💡
Дайте вашему мосту op=diag, который сообщает только STRUCTURE — какие таблицы решены, какие столбцы в главной таблице есть, и ФОРМА новейшей ссылки с каждой цифрой замаскирована. Она имеет ключ-схема, как и все остальное, и она превращает «поиск ничего не находит» из билета поддержки в десятисекундный ответ. Никогда не позволяйте ей возвращать реальные записи.

Унифицированные ошибки и ловушка переписи

Одна форма для всего

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.

Не найденный и не совпадающий должны быть идентичными

На поверхности поиска ссылка, которой не существует, и ссылка, доказательство которой не соответствует, должны давать одинаковый ответ. Различные ответы превращают ваш мост в оракул, который подтверждает, какие ссылки являются реальными, что является бесплатным экспортом списка клиентов для любого пациента.

Никогда не сообщайте причину посетителю

Мост может быть точным с OpsIQ. То, что доходит до посетителя, определяется OpsIQ, в одном случае отказа.

Копируемый файл в панели разъема

Оператор никогда не открывает ваше хранилище. Они открывают панель коннектора в OpsIQ и нажмите Копировать. Эта копия происходит из настроек.json, и это должна быть та же программа, что и bridge/*.php.

Setments.json — вход панели для разъема моста
{
  "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 выживает при регенерации

Объявляйте каждое сгенерированное секретное задание явно. Синхронизирующий инструмент восстанавливает панельную копию отгруженного моста, а затем восстанавливает OPSIQ_BRIDGE_KEY = {{setting:api_key}} Без этого обновления можно точно скопировать файл пакета без ключа и бесшумно удалить развертываемый заполнитель ключа оператора. Коннекторный конструктор автоматически излучает этот связывающий материал для генерируемых пакетов мостиков.

Другие заполнители заменены серверной стороной

Независимо от этого,{webhook_url}, {webhook_path}, {webhook_secret}, {site_key}, {base_url}и{slug}Они заполняются до того, как панель когда-либо увидит фрагмент.

Webhook_help может быть одним объектом или списком

Список дает вам несколько фрагментов в одной панели, например, файл моста и отдельный крюк реле.

🚫
Не сохраняйте фрагмент от руки. Мостовой файл и панельная копия - это две копии одной программы, и они Дрифтируют - мост был модернизирован и его панельной копии не было, поэтому любой, кто переустановил и скопировал с панели установленный старый мост и бесшумно потерял каждую новую возможность. Ничего не обнаружило: соответствие прошло, подписи прошли, тесты прошли.
Сохраните две копии идентичными
# 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.

Что должен показать мост

Формированные операции и универсальная поверхность данных вместе. Формируемые возвращают аккуратные, специально построенные ответы на вопросы, которые люди действительно задают; универсальные охватывают все остальное, поэтому помощник никогда не застревает.

Формированные чтения

Статистика, основной список объектов с фильтрами, один объект со связанными строками, каталог того, что продается, поиск клиентов с историей. Они дают ИИ хороший ответ в одном вызове вместо пяти.

Формированный пишет

Два или три состояния изменения, которые имеют значение — установить статус, отменить. Сохранить принятые значения допустимыми.

Типовая торговля

Для продаваемой платформы раскройте специально построенный каталог, котировки, кассовые/заказные и платежные операции, а затем нанесите их на карту. commerce_roles.json с transport: bridgeНикогда не отображайте роль записи в коммерции на универсальную поверхность.

Универсальное открытие

таблицы (с подсчетом строк) и описанием (колонки, типы, первичный ключ, а также читаемые и записываемые флаги на колонку). Вот как помощник узнает платформу, которую вы не ожидали.

Универсальное чтение и письмо

Запрос, запись. get, record. create, record,update, record

Идентификационные данные перед ключевыми воротами

Идентификационные зонды называются ADMIN'S BROWSER, однородного происхождения, поэтому они не могут отправить пользовательский заголовок. Их аутентификация - это сама сессия платформы. Поместите их перед ключом-воротом, держите их подальше от всех данных записи и никогда не позволяйте им вернуть секрет. Посмотрите страницу идентификации разъема.

диагностика

op=diag, structure only, masked.

Карта роли моста в торговле
{
  "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"
    }
  }
}
💡
Каноническая роль контролирует последовательность и полномочия; работа моста сохраняет собственную типизированную полезную нагрузку платформы. Отель может потребовать прибытия, отъезда и гостей, WHMCS может потребоваться существующая регистрация клиента или принадлежащего разъему, а платформа SaaS может потребовать платежного цикла. Ядро никогда не жестко кодирует эти поля. Мост должен вызывать бизнес-услуги платформы, поэтому акции, налоги, счета, почта подтверждения и крючки все работают.
⚠️
record_payment Принимайте только проверенные сервером доказательства поставщика: точный заказ, продавец, сумма, валюта ISO, ссылка на поставщика, свежая верифицированная метка времени и ключ идемпотентности. Проведите его через платеж / счет-фактуру платформы API, затем верните авторитетный ордер или обратный счет-счет. Неизвестный результат должен запустить восстановление перед любой повторной попыткой.
💡
Разъем только для чтения не нуждается в разрешении. Если ваша платформа всегда отвечает на вопросы, отправьте мост без операций записи и весь класс риска записи исчезнет. Добавьте записи, когда кто-то их просит.

Проверка перед отправкой моста

Мост отказывается от всего без набора ключей

Проверь его. Переименуйте константу в пустую и подтвердите все ответы op 403.

Неправильный ключ отклоняется в постоянное время.

hh_equals, а ключ читается только из заголовка.

В выдуманном столе отказано

И настоящее имя таблицы с неправильным приставкой все еще решает.

Колонка паролей никогда не появляется в прочтении

И письмо, в котором имя одного отказано с объяснением.

Писать на стол вне списка разрешений отказано.

С помощью сообщения оператору сообщается, как его расширить.

Отрывок панели соответствует файлу моста

php tools/sync_connector_bridge_snippets. php сообщает об этом шаг за шагом.

Переустановки разъема недостаточно

Если ваш пакет отправляет файл моста, оператор, обновляющий разъем, должен также переместить этот файл в свой веб-рут. Скажите это в корпусе панели и в вашем CHANGELOG, каждый выпуск.

Коннекторы

Загрузка собственной платформы с моста

Мост, который только читает, может говорить SQL. Мост, создающий вещи на платформе (заказ, бронирование, оплаченный счет), должен пройти через собственный уровень приложения платформы, и безголовая загрузка этого слоя - это то, где живет каждый тонкий сбой в этом шаблоне. Все ниже было изучено трудным путем на живой интеграции, каждое правило против реального дефекта, который нигде не вызывал ошибок.

Строка в базе данных не является приказом.

Raw INSERTs создают теневую запись

Появляется строка, администратор перечисляет ее, и она до сих пор не является записью, которую платформа считает созданной: нет родного номера ссылки, нет крючков модели, нет событий, нет счета-фактуры, нет электронной почты клиента, нет рабочей связи с клиентом. Клиент цитирует ссылку, которую Платформа никогда не выдавала сотрудникам, которые не могут найти ее. Создайте через собственную службу платформы; если он только разоблачает услугу после оплаты, создайте график, который он ожидает, и передайте по шву, который она определяет.

Никогда не переоформляйте нумерацию платформы

Два образца эталонного формата позволяют легко воспроизводить, а воспроизведение его — одно и то же теневое запись на один уровень ниже: в день изменения платформы каждая из ваших записей неверна и ничто вас не предупреждает. Позвоните ее генератору (отражение достигает нестатического) и прочитайте сохраненное значение обратно, а не доверяйте тому, что вы отправили.

Колонки платформ сохраняют значения платформы

Перед тем, как хранить что-либо из своего в колонке платформы, найдите каждого читателя. Колонка с именем свободного слота может быть несущей: по справочной интеграции, transaction_id Оказалось, что токен, который клиент отправил по электронной почте, «просмотр вашего бронирования» ссылка решает через: дайджест идемпотентности, хранящийся там, тихо разбил каждую гостевую ссылку. Держите свою бухгалтерию в принадлежащем мосту столе: UNIQUE (операция, idempotency_key) является охраной повтора, ограничение отказывает одновременному двойнику, и поиск восстановления читает ту же таблицу, которую написал создатель: MySQL DDL совершает открытую транзакцию.

События, слушатели и ловушка двойной почты

Прочитайте источник службы перед отправкой ее событий

Если служба платформы, которую вы вызываете, уже отправляет событие, отправка его сама посылает клиенту два письма с подтверждением и генерирует две счета. Если ничего не слушается, отправки не отправляют ни одного. Ни один отказ не вызывает ошибки. Отразите метод, разрежьте его исходные строки и прочитайте, что он на самом деле делает: догадка на основе имени и даже регекс над телом оба ошиблись, прежде чем источник урегулировал это.

GetListeners () скрывает правду; getRawListerers() говорит об этом

Laravel заворачивает слушателей классов в закрытия, поэтому getListeners() сообщает [email protected] для всего. getRawLis Listeners(), называет фактические классы. Никогда не отправляйте мероприятие, чьих слушателей вы не можете назвать.

ShouldQueue не означает «бегать позже».

С queue=sync (по умолчанию на многих производственных установках) очерченный слушатель запускает INLINE в вашем запросе моста URL Дефект в багажнике попадает в почтовый ящик клиента. Проверьте конфигурацию ('queue.default'), прежде чем рассуждать о том, где что-либо работает, и посмотрите на работу /failed_jobs Прежде чем предположить, что в этом замешан работник.

Охрана возвращается с собственным состоянием платформы

Служба, которая отправляет без каких-либо условий, должна называться точно один раз. Маркер, который не может дрейфовать, - это собственное состояние записи платформы (только звоните, пока запись еще находится на рассмотрении), а не параллельный «отправленный» флаг, который может с ним не согласиться.

Безголовый бут - это не веб-бут

Зарегистрируйте, что регистрирует веб-загрузка

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, а не только маршрутизатор

Захваченные точки запроса на вашем скрипте моста, так что маршрут(), url() и актив() генерировать site.com/public/opsiq-bridge.php/checkout/TOKEN: клиентская ссылка через JSON - endpoint. forceRootUrl(config('app).url*) фиксирует генератор; диск STORAGE имеет свой собственный корень, поэтому эмблема электронной почты остается неработающей до тех пор, пока файлосистемы.disks.public.url устанавливается также (решается лениво, поэтому установка его на загрузочных работах и только тогда, когда пустой или относительный сценарий: CDN оператора) URL Это не ваше право переусердствовать.

Обещай, прежде чем сдашь

Сервисы платформы читают через собственное соединение и не могут видеть вашу открытую транзакцию. Позвонив перед совершением, сервис после оплаты не находит завершенную оплату, тихо оставляет запись неоплаченной и все еще увольняет ее события, поэтому клиент получает по электронной почте запись, которую платформа считает неоплатной. Совершите граф, затем позвоните.

Правила честности

Никаких теневых откатов

Если нативный путь недостижим, откажитесь с повторной ошибкой ДО того, как будут двигаться деньги. Никогда не изобретайте ссылку, никогда не обновляйте статус, чтобы сделать полуинтегрированный отчет законченным. Проверенный платеж, чья нативная обработка потерпела неудачу, идет на выверку как needs_attention: деньги реальны, государство честно «оплачено, еще не обработано».

Сообщайте факты, а не ваше заявление

"Служба запущена" и "клиенту сказали" - это разные факты: эталонная интеграция отправляла полностью выглядящее электронное письмо с каждой заготовкой поля, в то время как прогон флаг сказал правду. Верните их отдельно (обработка завершена, уведомление предпринято), сохраняйте per-call platform_notified Это заставляет OpsIQ Подтверждение резервного копирования всякий раз, когда платформа не обрабатывает и никогда не требует доставки: почтовый ящик не просматривается с сервера.

Измеряйте, затем пиши

Погрузите в мост зонд возможностей только для чтения: существование класса, подписи метода, срезы источников методов, которые вы собираетесь вызывать, необработанные слушатели, водитель очереди и (когда на вопрос можно ответить, назвав безвредную функцию) сам живой вызов. Пять теорий об одном пустом электронном письме умерли от измерений до того, как источник урегулировал его. Облачный зонд стоит копии файла; неправильное письмо на живой платформе стоит клиенту.

Коннекторы

Мост на других языках и в других базах данных

Рисунок моста не является шаблоном PHP OpsIQ Звонки - это конечная точка HTTP, поэтому файл может быть Node, Python, Go, Ruby, .NET или Java, а магазин за ним может быть любым SQL двигатель или MongoDB.Что такое PHP-образный конвейер, так это упаковочный конвейер, и это ограничение решает, как ваш мост достигнет оператора. Сначала прочитайте раздел доставки: именно эта часть удивляет людей.

Что на самом деле требует разъем

Это весь контракт, в нем нет названия языка.

Транспорт

HTTPS. Один запрос GET на звонок. Ни тела, ни другого метода.

аутентификация

Общий секрет в X-Opsiq-Bridge-Key Заголовок запроса, сравниваемый в постоянное время. Не параметр запроса и не файл cookie, не базовый аут.

Параметры

Запросить струну. op Назовите поверхность, do Назовите операцию, остальное аргументы этой операции.

Ответ

JSON. {"success":true,"data":{...}} или {"success":false,"error":"snake_case_reason"}Приложение Content-Type/json, без кэширования.

Коды состояния

200 О успехе. 403 неконфигурированный или неправильный ключ, 404 Не найдено, 405 неправильный метод, 400 Плохой аргумент, 501 Не поддерживается этой схемой.

Это все

Ни фреймворка, ни времени выполнения, ни библиотеки OpsIQ на вашей стороне. Если она может служить этому, то это может быть мостом.

Доставка: что может жить в мосту/, а что не должно

Подписанный пакет охватывает фиксированный список расширений файлов, а файл за пределами этого списка остается вне ZIP. Мост на языке, который не охватывает список, поэтому не может поставляться внутри пакета - но он больше не может исчезнуть и на вас 26 август 2026 файл в bridge/ Пакет, который будет падать, является отказом жесткого соответствия, поэтому пакет отказывается проходить, а не устанавливать без моста в нем.

Как обрабатываются мост/папка во время сборки
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 и JavaScript - полностью поддерживается

Файл поставляется в подписанном ZIP, и проверяющий фрагмент удерживает вашу панельную копию байт-идентичной ему, какой бы из двух он ни был. Проверка дрейфа считывает каждый файл в мосте /, а не только PHP-файлы, поэтому модернизированный мост со устаревшей панельной копией не создает сборку на любом языке.

Все остальное — доставить только через панель

The panel snippet is plain text with no idea what language it holds, so it works for any stack. Put the whole program in webhook_help.snippet_template, name the file in snippet_filename, and do NOT leave a copy in bridge/ — conformance will refuse the package rather than ship it hollow. Say plainly in webhook_help.body that the operator copies this file rather than getting it from the package.

Если вам действительно нужен другой язык в пакете

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.

💡
Назовите файл в webhook_help.snippet_filename Каждый раз, когда ваша посылка перевозит более одного моста. Вот как проверяющий знает, к какому мосту принадлежит панельная копия; без нее двусмысленное сопряжение сообщается в качестве предупреждения о соответствии и этот фрагмент остается непроверенным.
⚠️
Суть проверки дрейфа в том, что файл моста и его панельная копия являются двумя копиями одной программы и будут расходиться. php tools/sync_connector_bridge_snippets.php --applyЗатем переподпишите пакет.

Ворота на шести языках

Те же четыре проверки в одном и том же порядке везде: отказ закрыт без ключа, один метод, сравнение ключей постоянного времени из заголовка, затем подключите. Единственная реальная ловушка - это сравнение, и это другая ловушка на каждом языке.

⚠️
Сравните SHA-256 Это правильно в каждом языке, и это обходит тот факт, что несколько компараторов постоянного времени либо бросают, либо протекают на несоответствие длины - время Node's timeSafeEqual поднимает Ошибку диапазона, когда буферы различаются по длине, которая превращает неправильный ключ в неверный ключ 500 Вместо а 403.
Node. js — ворота
// 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 — ворота
# 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 и Java — одно и то же сравнение
// 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)));
}

Проверка идентификаторов в каждом движке базы данных

Свойство безопасности не меняется: название таблицы или столбца, поставляемого абонентом, должно быть проверено на реальную схему перед интерполяцией, и каждое значение должно быть связанным параметром. Различаются только запрос интроспекции, характер цитирования и пункт подачи.

MySQL и MariaDB

Таблицы: SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ?Колонны: то же самое против information_schema.COLUMNS с AND TABLE_NAME = ?Цитаты с запинками, удвоение любой задней галочки внутри. LIMIT n OFFSET m.

PostgreSQL

Те же виды информации_схем, имена нижних регистров, WHERE table_schema = $1 обычно publicЦитаты с двойными цитатами, удвоение любой двойной цитаты внутри. LIMIT n OFFSET mСледите за правилом складывания: нецитированный идентификатор складывается в нижний регистр, поэтому сравнивайте случай-бесчувственно при решении имени.

SQL Сервер

Та же информация_ШЕМА просмотров. Цитаты с квадратными скобками, удвоение любой закрывающей скобы внутри. Подачу нужно заказывать по: ORDER BY [id] DESC OFFSET @o ROWS FETCH NEXT @n ROWS ONLY.

SQLite

Таблицы: SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'Колонны: SELECT name FROM pragma_table_info(?) - использовать эту форму, оцененную таблицей, потому что голая PRAGMA table_info(x) Заявление не может взять связанный параметр и приглашать интерполяцию строк, есть именно дыра, которую вы пытаетесь закрыть. Цитата с двойными цитатами. Страница с LIMIT n OFFSET m.

Окружающий

Таблицы: SELECT TABLE_NAME FROM ALL_TABLES WHERE OWNER = :ownerКолонны из ALL_TAB_COLUMNS. цитировать с двойными цитатами и запоминать нецитированные папки идентификаторов в случае UPPER, противоположные PostgreSQL. OFFSET :o ROWS FETCH NEXT :n ROWS ONLY на 12c и позднее.

MongoDB

Нет SQL, поэтому нет интерполяции идентификаторов и никаких связанных параметров — другая дисциплина для одной цели.

Запрос интроспекции на двигатель
-- 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;
💡
Решите, затем используйте имя RESOLVED. Никогда не передавайте орфографию звонящего на запрос даже после его проверки - посмотрите настоящее имя в списке, который вы прочитали из схемы, и интерполируйте это. Это ничего не стоит и закрывает разрыв между «это имя что-то совпало» и «это название, которое я собираюсь запустить».

MongoDB: Те же правила, без SQL

Нет ни одной строки запроса, чтобы ввести, поэтому люди предполагают, что нечего охранять. Есть: документ фильтра. Пропуск вызывающего вызова JSON прямо в find() Пусть звонящий отсылает {"$ne": null} или {"$gt": ""} где вы ожидали значение, и тихо подбирали каждый документ. Создайте фильтр самостоятельно.

MongoDB — список разрешений для сбора, скалярный фильтр, проекция в виде редактирования
// 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();
Имена коллекций взяты из списка

Это ваша информационная схема. Разрешите написание звонящего против него и используйте решенное имя.

Принудить каждое значение фильтра к скалярному

Струна () или число () вокруг нее - это вся защита от инъекции оператора. Документ, где вы ожидали значение, является эквивалентом NoSQL бродячей цитаты.

Проекция — это правило редактирования

Исключите секретные поля в проекции, чтобы они никогда не покидали сервер, а не удаляли их из результата.

Удаление остается единственным документом по _id

Удалить один с разрешенным _id. Никогда не удаляйте много, и никогда фильтр вызывающего повлиял.

Писать в разрешенном списке

То же рассуждение, что и SQL: назовите сборники, к которым может прикоснуться письмо, а остальные откажитесь с объяснением.

Конечная точка идентичности на других языках

Зонд идентификации — это другая половина моста, и он также является HTTP. Блок подписи идентичен на всех языках: base64url полезная нагрузка, HMAC-SHA256, что строка, соединиться с точкой.

Не записывайте это вручную с нуля. Настройки, Портал поддержки несет готовый маршрут на один язык для портала (одноразовый, двухминутный токен). Удаленные сайты, ваш сайт, коды, C. Признание зарегистрированных клиентов автоматически переносит версию чата на язык (одночасовой токены плюс обработчик обновления). Возьмите подписчика из вкуса, который соответствует вашему стеку.
Что изменится, когда вы повторно используете его

Эти фрагменты создают токен передачи PORTAL, который намеренно более строгий: он несет jti и single_use:true и живёт около 120 секунд, поскольку он движется в направлении URL. Идентификационный токен моста или виджета не имеет ни одного из этих свойств и использует более длинный период эксперимента, от минут до часов.

Что остается прежним

site_key, iat, exp и аутентификация на высшем уровне: истинность, плюс администратор или клиент с идентификатором и именем пользователя или электронной почтой.

Обе формы токенов проверяют

Работает трехчастный JWT с знаком HS256, а также двухчастная база base64url плюс шестнадцатеричная HMAC, которую выделяет ссылка PHP. Используйте любую библиотеку вашего языка, которая делает это естественным — библиотека JWT обычно является более коротким путем вне PHP.

Никогда не печатайте его в браузере

Подписание клиентской стороны означает доставку секрета сайта каждому посетителю.

Выбор, честно

Платформа называется PHP

Напишите мост в PHP. Он поставляется в пакете, он проверен на дрейф и может загрузить собственную платформу для чтения живой сессии для зонда идентификации. Ничто другое не дает вам все три.

Платформа является узлом

Корабли, знаки и сигналы . js моста проверяются точно так же, как PHP-модель.

Платформа Python, Ruby, Go, . NET или Java

Доставить через панель фрагмент и сказать так в корпус панели; не оставляйте файл в мост/, где соответствие откажет пакет. Разъем иначе совершенно нормально: действия, контекст провайдеров, идентификатора и гостевых поисков все работают одинаково, потому что ни один из них не волнует, что отвечает на вызов HTTP.

Вы не можете запустить процесс на хосте платформы

Тогда модель моста не является правильным инструментом. Мост существует, чтобы достичь платформы изнутри своего хоста. Если вы можете добраться до него только снаружи, вы пишете обычный разъем API против любой поверхности, которую он обнажает.

⚠️
Еще одно ограничение, которое стоит спланировать: зонд идентификации должен прочитать сеанс входа в платформу, что обычно означает работу внутри собственного процесса платформы или, по крайней мере, на ее хосте с доступом к его магазину сессии. Мост, написанный на другом языке от платформы, может обслуживать данные удобно и все еще может бороться за ответ op = admin_identity. Если это ваш случай, отправьте мост данных на вашем языке и датчик идентичности в платформе.
Коннекторы

Дайте помощнику обе половины: действия и контекст

Это единственная наиболее распространенная вещь, отсутствующая в разъеме, который «работает, но бесполезно». Действия позволяют ИИ делать вещи. Секции контекста позволяют ему ЗНАТЬ вещи. Разъему нужны оба, и на большинство вопросов, которые задает администратор, отвечает контекст, никогда действие. Разъём с совершенными действиями и ни один поставщик контекста не будет правдиво сообщать, что он ничего не видит.

Две половинки

Действия — как ИИ делает вещи

Объявлено в действиях.json или возвращено регистром (Акциями). Модель выбирает один из них, заполняет его параметры и OpsIQ Действия для глаголов: отменить бронирование, открыть билет, изменить статус.

Секции контекста — как ИИ знает вещи

Собранные поставщиком контекста до запуска модели. "Сколько заказов в этом месяце", "кто мои новейшие клиенты", "что мы продаем" - все решаются с помощью поиска по контексту и никогда не касаются действия вообще.

⚠️
Симптом отсутствующего провайдера: помощник отвечает «No enabled connector supplied this context section» при установке, включении и прохождении теста на подключение. Ничего не регистрируется, ничего не происходит ошибок. Это сообщение означает, что ни один провайдер не запрашивал этот раздел.

Словарь универсального раздела

OpsIQ просит разделы по общему названию. Ваша задача - решить, что каждый из них означает на вашей платформе и ответить на него. Бронирование отеля - это заказ отеля; номер - это то, что продает отель. Карта, не придумывайте.

Заказы / Deuild_Orders

Независимо от того, какая транзакция находится на вашей платформе: заказы, бронирования, резервирование, рабочие места, отправки. отложенные_заказы - это тот же список, который фильтруется для незаконченных.

клиенты

Список клиентов.

products

Что продает платформа: продукты, комнаты, планы, услуги.

выставление счетов

Доходы и денежные суммы плюс счета по штатам.

билеты, услуги, домены, серверы, деятельность

Используйте их, когда ваша платформа действительно имеет их. Не навязывайте отображение - раздел без ответа лучше, чем неправильный.

Все, что у вас есть на платформе

Провайдер, который объявляет разделы (): ['лицензии', 'отгрузки') слился в список разрешений универсального поиска, поэтому поиск на платформе становится доступным без каких-либо основных изменений.

Ошибка, которая стоит одного дня

Провайдер контекста должен реализовать интерфейс. Реестр проверяет его, поэтому класс, который просто смотрит правильно, пропускается - без ошибок, где угодно.

ContextProvider. php — контракт, из справочного пакета 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 '';
    }
}
Зарегистрируйте его от разъема

Внедряйте ContextConnectorInterface и возвращайте своих поставщиков из контекстных провайдеров. Класс разъема также может непосредственно реализовывать ContextProviderInterface, а также быть зарегистрированным как он сам.

Возвратить простой текст, а не JSON

build() возвращает текстовый блок, который сцеплен в подсказку. Напишите его для читателя: заголовок, затем по одной строке на строку.

Возвращение вместо того, чтобы бросать

Поймайте свои собственные исключения. Провайдер, который бросает, зарегистрирован и пропущен, но возвращение - это контракт.

Строитель не может написать разделы () для вас

Созданный ContextProvider. php поставляется секциями(): массив { Return []; } и у мастера нет поля для него. Заполните его вручную - и помните, что переиздание от мастера ОВЕРУРИТЕСЬ файл. Копируйте свои правки сначала.

⚠️
Укажите истинное значение TOTAL, а не число строк, которые вы отправили. Страница - это не сумма. Провайдер, который перечисляет двадцать строк без указания этого, получает уверенный ответ ассистента "у вас есть 20 бронирования", когда платформа удерживает 669. Одна дешёвая COUNT и одна явная строка — "TOTAL в файле: 669 (в этом списке отображаются самые последние 20 только)" — это вся поправка, и уверенно неправильный подсчет хуже, чем отсутствие подсчета.
Блок раздела, который нельзя пересчитать
$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);

Назовите свои действия так, чтобы OpsIQ мог отличить чтение от записи

OpsIQ классифицирует действие СЛОВА в его action_id, и оно намеренно консервативно: все, что он не может распознать, рассматривается как письмо и требует карточки одобрения.

1
является деструктивным или требует подтверждения выигрыша

Если таковой установлен, то действие всегда нуждается в одобрении. Объявить их честно — вот что выявляется на карте одобрения администратора.

2
Слово в любом месте идентификатора делает его письменным.

Добавить, создать, открыть, обновить, изменить, изменить , удалить, удалить , отменить, прекратить, активировать, одобрить, отклонить, отправить, пометить, сбросить, захватить, закрыть, вновь открыть, назначить, отменить , предоставить, включить, отключить, выпустить, выдать, применить, зарядить, оплатить, предоставление, обновить , обновиться, объединить, переместить, передать, обострить, флаг, регистрировать, нажимать, импортировать, запускать, запускать, останавливать, перезапускать и еще несколько.

3
Прочитанное слово делает его прочитанным.

Получить, список, поиск, найти, показать, принести, подсчитать, посмотреть, описать, прочитать, экспортировать, предварительное просмотр, тест, пинг, статус, резюме, подробность, недавний, история, проверка, журнал, статистика, показатели, обзор, доход, разбивка, отчет, аналитика, баланс, использование, квота, снимок, выводы, корм, черновик, сортировка, классификация, предложение.

4
Тогда метод HTTP решает

ГОЛОВА, ВЫБОРЫ и ОПЦИИ читаются.

5
В противном случае это будет письмо

Непризнанное означает, что требуется одобрение.

⚠️
Перед чтением слов проверяйте слова для записи, поэтому смешанное имя, такое как get_and_sync_orders, классифицируется как ПИСАНИЕ. Выберите один глагол, поместите его первым и сохраните в чистоте: list_order, get_customer, search_bookings, cancel_bookING, set_order_status.

Объявлять native_api, если платформа действительно имеет

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.

Строитель решает это из вашего ответа на доступ к данным.

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.

Рукописные пакеты должны все еще получать его правильно

Если вы сами пишете манифест, заявите точно о родном_api или платформе_bridge. Conformance рассматривает платформу_b Bridge как аварийный люк, который должен иметь соединитель моста, и Строитель отказывается от спецификации, которая утверждает, что платформа_b bridge на разъеме API.

Держите i_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.

Научите админ-мозг вашей платформе

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

Что это за платформа, как формируются ее данные, как называются ее объекты и причуды, которые иначе заставили бы помощника догадаться. Напишите ее компетентному коллеге, который никогда не видел платформу.

ai_api_reference.md

Для соединителя моста это ваша операция и словарь с их параметрами, а не таблица конечных точек REST.

Бюджет

грубо 6,000 символы, хранящиеся на разъеме, и о 24,000 символы для всего блока на каждом включенном разъеме. Поверх колпачка пер-коннектора ваш файл усечен; будьте краткими до того, как будет усечитель.

Точность оплата

Эти файлы — разница между помощником, использующим универсальные инструменты таблицы и ответом из неправильного раздела, потому что ничто не говорило о существовании этих инструментов.

💡
Оба файла должны быть в пакете INSTALLED, а не только в вашем дереве-источнике. Они являются обычными файлами пакета, поэтому они покрываются подписью и отправляются в ZIP - что также означает редактирование одного после подписания сломает печать.
Коннекторы

Идентификацию через разъем: администратор, клиент, портал

Один подписывающий контракт обслуживает три поверхности. Задача коннектора заключается в том, чтобы превратить "того, кто вошел на платформу" в подписанный токен, который OpsIQ может проверить, а затем представить проверенного субъекта в виде _OpsIQ. Коннектор никогда не аутентифицирует никого — это делает платформа, и подпись содержит это утверждение.

Три поверхности, один подписчик

Администрирование — ваш персонал, внутри вашего бэкэнда

Виджет загружается внутри панели администратора платформы, и каждый сотрудник соответствует своему агенту OpsIQ. Полное прохождение на странице виджета администратора.

Клиент — подписанный клиент, в чате клиента

Это то, что позволяет зарегистрированному клиенту получить свою учетную запись Whole вместо анонимного поиска: каждый заказ, полная информация и любые действия по самообслуживанию, которые вы разрешаете.

Portal — глубокая ссылка на портал поддержки

Те же утверждения плюс jti и single_use, с 120-вторая жизнь, потому что жетон путешествует в URL и должны быть потрачены один раз. Нет ручной прокат этот: Настройки, Портал поддержки несет готовый фрагмент на язык, и платформа создает его для вас, когда зона учетной записи работает на этом сервере.

Договор на грузоподъемность

Это утверждения, которые проверяют проверяющие. Здесь нет ничего необязательного, какой бы частичный пример ни предлагался в другом месте.

site_key

Высший уровень. Должен равняться ключу сайта запроса, или же токен отклоняется.

хвойный и экс

Верхний уровень, секунды. exp должен быть в будущем и после яда. Токен больше чем около минуты в будущем отказано. Держите жизнь короткой — минута до часов.

Аутентификация: True

На верхнем уровне, кроме exp. Утверждение вашей платформы о том, что в систему вошел настоящий человек.

платформа

Лучший уровень. Короткий слизняк, называющий происхождение. Рекомендовано, и он позволяет поставщику идентификаторов разъема сообщать свои собственные токены с другой платформы.

администратор или клиент

Объект, назвавший объект. Он должен нести непустую идентификатор и имя пользователя или электронное письмо — ворота доступа per-admin совпадают с ними. Включите оба, когда у вас есть оба.

Монетный двор, дословно с моста 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);

Два верификатора и неудачи, которые они вызывают

У OpsIQ есть два маркерных верификатора, и они не были идентичны. Зная это, вы спасаете себя после обеда, потому что симптом выглядит совсем не так, как причина.

У виджета admin есть свой собственный проверяемый

opsiq/embed/admin_ajax. php имеет локальный верификатор, который принимает аутентифицированный флаг в любом положении. Список разговоров, история и непрочитанные все проходят через него, поэтому они прекрасно аутифицируются.

Общий верификатор более строгий

opsiq/includes/customer_identity_token_verify.php сидит за потоком чата и ядра AJAX API. Он исторически требовал флаг на ТОП-уровне.

Симптом

История и разговоры работают. Каждый чат поворачивает ответы "требуется вход администратора". Он читается точно как ошибка сессии и не является: токен отсутствует флаг верхнего уровня.

Что такое текущее ядро

Теперь он принимает флаг на верхнем уровне ИЛИ внутри предмета, поэтому контракт однородный. Старые ядра читают только верхний уровень. Избавьтесь от канонической формы и ваш пакет работает над каждым выпуском.

Теперь это проверено машиной. Любой файл в вашем пакете, который мнит токены идентификации, статически сканируется против контракта, и полезная нагрузка, от которой отказывается платформа, не соответствует точному файлу и строке. Запустите его самостоятельно: php tools/verify_identity_contracts. php.

Подписанные клиенты в клиентском чате

Две вещи должны быть правдой. Ядро должно штемпельировать проверенного клиента, и ваш разъем должен его представить.

1
Ваш мост или конечная точка мяты клиент токен

Тот же подписчик, что и администратор, с темой клиента. Прочитайте клиента из собственной сессии платформы. Если ваша платформа выдает клиентам знак защиты от администраторов, прочтите охрану, которую вы хотите, и никогда не возвращайтесь к предметам - так клиент будет передан токен администратора.

2
Проверка и печать его

На действительном токене ядро штамповывает проверенный предмет в сеанс. Ваш провайдер читает подтвержденную личность; она никогда не аутентифицируется.

3
Ваш поставщик удостоверений личности представляет его

DECTETCUSTOMER() возвращает OpsIQ Форма. Она должна быть реализована OpsIQ\Platform\IdentityProviderInterface, или реестр бесшумно пропускает его — та же ловушка, что и контекстный провайдер.

4
Ваши действия, связанные с клиентом, принимают customer_id

И OpsIQ запирает его на верифицированную личность перед выполнением. Модель не может его предоставить.

IdentityProvider. php — прочитайте проверенную личность, представьте ее в форме 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;
    }
}

Действия, спровоцированные клиентом: два замка, оба требуются

Модель никогда не должна выбирать, чьи данные она читает. OpsIQ обеспечивает это на своей стороне, и ваша платформа также должна обеспечивать его соблюдение на другой стороне. Один замок является ошибкой вдали от утечки; два замка являются контрактом.

Замок 1 — OpsIQ перезаписывает параметры идентификации

Перед запуском действия customer-chat, OpsIQ заменяет каждый идентификаторный параметр на VERIFIED идентификатор посетителя: client_id, clientid, user_id (пользователь), userid (участник), customer_id и account_id берут проверенный числовой идентификатор; client_identifier, customer_identifyer, account_identifier берут его в виде строки; email, client_email, customer _email, user _email берут подтвержденный адрес электронной почты.

Lock 2 — ваша платформа перепроверяет каждый запрос

Возьмите удостоверение личности, которое вам дали, и добавьте его в пункт «Где» каждого прочтения и каждой записи на этой поверхности. Никогда не доверяйте ссылке в запросе самостоятельно. Зарегистрированный клиент, спрашивающий о чужом заказе, должен вернуться пустым, а не запрещенным.

Назовите параметры, чтобы блокировка 1 могла их найти

Назовите его customer_id, а не cust или ref. Параметр OpsIQ не распознает параметр, который он не может заблокировать.

⚠️
Дайте подписанному клиенту поверхность его собственных операций, отдельно от админ-операций, даже когда SQL выглядит одинаково. Две поверхности с разными правилами остаются честными; одна поверхность с флагом становится утечкой в день, когда кто-то редактирует не ту ветку.

Zero Page Wiring: зонд, объявленный разъемом

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.

json — настройка зонда
{
  "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."
}
Зонд вызывается браузером

Однородный, поэтому он не может нести пользовательский заголовок. Его аутентификация - это сессия платформы. Поместите его AHEAD вашего ворот с ключом от моста, держите его подальше от записи данных и вообще ничего не возвращайте для зарегистрированного посетителя.

Отвечает фиксированной форме

{"success":true,"authenticated":true,"admin":{...},"identity_token":"..."} — and {"success":false,"authenticated":false,"error":"..."} when nobody is signed in.

Нет долгоживущего секрета в источнике страницы

Только подписанный, истекающий токен.

Полная реализация конечных точек для Laravel,WordPress, WHMCS, Symfony и простой PHP, плюс с трудом выигранные спецификации Laravel и порядок устранения неполадок находятся на странице виджета администратора. Они представляют собой один и тот же код для предмета клиента: измените защитную защиту, которую вы читаете, и ключ темы, который вы подписываете.

Коннекторы

Издание: редактирование папки не является публикацией

Самый распространенный способ потерять день - отредактировать разъем под маркетплейс_коннекторы/, переустановить его и не найти ничего измененного. Установки не читают эту папку. Они извлекают подписанный ZIP из каталога рынка. Издание - это последовательность, которая вносит ваши изменения в этот ZIP.

Почему редакция ничего не сделала

marketplace_connectors/<slug>/ is the SOURCE

Там, где ты работаешь, ничего не устанавливается.

Каталог содержит подписанный ZIP

Установка загружает ZIP, проверяет подпись и распаковывает ее. Пока вы не перестроите ZIP-пакет, каждая установка продолжает получать старый пакет.

The Connector Builder выходит в другом месте

It writes into /connectors/<slug>/ on this install. That is a local connector, not a marketplace release. The two paths do not overlap.

Последовательность высвобождения

1
Перемешайте версию в двух файлах

настройки.json и connector_contract.json. Соответствие сравнивает их и терпит неудачу, если слой, версия или набор возможностей не совпадают. Добавьте запись CHANGELOG.md пока вы находитесь там — это необходимый файл.

2
Повторно синхронизировать фрагмент моста

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
Повторно подписывать каждый пакет

php tools/resign_all_connectors. php — подпись покрывает хэши файлов, поэтому ЛЮБОЕ редактирование отменяет его. Подпишитесь последним, после того как каждый файл будет окончательным.

4
Экспорт ключа подписи, затем семена

Сеятель подписывает каждый пакет, когда он создает ZIP, и работает в контексте, где ключ не может быть прочитан из настроек - поэтому он должен поступать из окружающей среды.

5
Перезагрузите файл моста, если вы отправляете один

Переустановка разъема обновляет пакет. Он не касается копии, сидящей в веб-корне оператора. Скажите им, на панели и в журнале изменений.

Весь выпуск, в порядке
# 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
⚠️
Почему экспорт не является опциональным: подписывающий ищет ключ в OPSIQ_CONNECTOR_SIGNING_KEY сначала, а затем в параметре connector_signing_key. Сеятель работает на SaaS bootstrap и tools/sign_connector. php ничего вообще не загружает, так что в обоих параметрах reader не существует — без переменной среды нет ключа, и вы получаете "No signing key available" или каждый пакет сообщает о том, что signing_failed. Только tools/resign_all_connectors. php загружается OpsIQ и может самостоятельно найти ключ.

Что на самом деле корабли

Только файлы, которые покрывает подпись

ZIP построен из собственного списка файлов подписавшего, поэтому бродячий файл, сидящий в папке пакета, не отправляется. Это преднамеренно: неподписанный файл, используемый для передачи клиентам.

Покрытые расширения

php, json, js, css, мд, txt, html, sh, svg, png, jpg, jpeg, gif, webp, ico, yml, yaml — рекурсивно, включая bridge/ и tests/. signature.json сама исключается из хэшей и затем добавляется в ZIP, чтобы установки могли проверить.

Все остальное сообщается как не_упакованное

Просмотрщик называет каждый файл, который он оставил. Прочитайте этот список. Файл, который вы ожидали отправить туда, означает неправильное расширение или неправильную локацию - а не молчаливый успех.

Редактирование любого закрытого файла нарушает печать

Включая файл Markdown, переподпишите этот пакет.

Необходимые файлы в распространяемом пакете

connector.php

Необходимо вернуть экземпляр интерфейса Connector.

settings.json

Манифест: слаг, имя, версия, manifest_version, совместимость, возможности, connector_contract_version.

connector_contract.json

Контракт машиночитаемый. Его слаг, версия и набор возможностей должны быть идентичны настройкам.json.

README. md, DEVELOPER. md

Все три проверены на наличие и минимальный размер. DEVELOPER. md нуждается в реальном контенте, а не в заглушке.

Файл на заявленную способность

Каждая из возможностей именует ожидаемый файл — ContextProvider. php для контекста, IdentityProviders. phP для идентификации, GuestLookupProvidor. phps для guest_lookup и т. д. — если разъем не реализует встроенную возможность.

Ничего, что выглядит как подтверждение

Conformance сканирует три файла Markdown на наличие секретных значений и закрытых ключей, а затем не удается.

Проверьте его, прежде чем отправить

Полный набор соответствия - это тот же самый, который запускается при установке. Он проверяет манифест против канонического контракта, что время выполнения и возможности манифеста согласны, что каждая заявленная способность имеет свой файл и свои методы, контракт токена идентичности в каждом файле чеканки, матч мост-сниппет, гигиена гостевой записи, уникальность действия и безопасность подтверждения и подпись пакета.

Пробейте все четыре перед каждым выпуском
# 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
💡
Одна ошибка ожидается, и это не проблема: проверка подписи пакета сообщает предупреждение, пока вы все еще редактируете. Она очищает момент повторной подписи. Каждая другая неудача является реальной.
Коннекторы

Упаковка разъема и ссылка на жизненный цикл

Это контракт на уровне источника для создания разъема, который OpsIQ может обнаруживать, конфигурировать, проверять, включать, выполнять, тестировать, подписывать и распространять.

Ссылка разработчика
Пакет для подключенияКоннекторный пакет имеет требуемую реализацию и манифест, с дополнительными действиями, рецептами, знаниями, активами и подписными метаданными.Пакет для подключенияdeveloperMANIFESTv1ЖИЗЛОЖЕНИЕуправляемыйрабочее пространствоСкорпионЖИВОЙ ВИДЕО РАБОТЫconnector.phpКласс подключения / заводтребуемыйsettings.jsonСхема манифестов и настроектребуемыйactions.jsonОпределения действийфакультативныйsignature.jsonМетаданные подписи пакетаВыпуск1DECLAREЯвление и возможности2IMPLEMENTЖизненный цикл и поставщики3КАЛЬДИДАТТест, знак, пакет
Коннекторный пакет имеет требуемую реализацию и манифест, с дополнительными действиями, рецептами, знаниями, активами и подписными метаданными.

Минимальный пакет

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

Явный контракт

settings.json Использование явной версии 1. Валидатор ожидает слаг, имя, версию, manifest_version, совместимость, описание и возможности. opsiq_min и opsiq_maxСтатус освобождения является одним из производство, бета, предварительный просмотр или шаблон; зрелость возможностей использует уровни L1-L6. Пакеты наследия могут быть нормализованы с предупреждениями, но новый пакет должен проходить без предупреждений.

Интерфейс основного соединителя

  • Идентичность и настройка: slug(), name(), description(), capabilities(), settingsSchema(), testConnection().
  • Жизненный цикл: onEnable() и onDisable()Инвалидность должна быть неразрушающей; очистка данных — это отдельная преднамеренная операция.
  • Входящий/синхронный: handleWebhook(), poll(), backfill()Опрос обрабатывает дополнительную работу; история импорта заполнителей и должна быть безопасной для повторения.
  • Поддержка: pushReply() где платформа принимает ответы.
  • Меры: registerActions() Поставляет исполняемые контракты.
  • Безопасность: securityCapabilities(), syncBlockedIp(), removeBlockedIp(), testSecuritySync().

Абстрактная база также предлагает необязательное пополняемое заднее сальдо, список клиентов, обнаружение / создание учетной записи электронной почты, подписчики, обнаружения администратора / клиента, поставщиков выставления счетов / контекста / идентификации, извлечение ответа, повторение HTTP-звонков, доступ JSON_, нечеткий рейтинг и помощники по пагинации.

Возможности и аутентификация

Поддерживаемые имена возможностей включают действия, триггеры, контекст, удостоверение личности, продажи, расчеты, 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 и ai_tickets. API ключ, носитель, базовый, HMAC, OAuth 2 учетные данные клиента, OAuth 2 авторизационный код и пользовательские шаблоны аутентификации.

Жизненный цикл регистра

  1. Discovery загружает пакет и проверяет его манифест.
  2. Конфигурация хранится в рабочем пространстве; секреты зашифрованы.
  3. Тест на подключение подтверждает учетные данные без включения разъема.
  4. Включите звонки onEnable(), синхронизирует определения действий и может начать начальный заполнение.
  5. Опрос / веб-хук / исполнение подписчика всегда несет контекст рабочего пространства.
  6. Звонки инвалидов onDisable() и прекращает деятельность без удаления импортируемых данных.
  7. Чистка — это отдельная явная операция.

Правила корректности

  • Используйте ключ рабочего пространства/сайта в каждом запросе на чтение, запись, кэширование, дедупликацию и поиск по webhook.
  • Сделать действия backfill, webhook ingestion и write idempotent. Запись внешнего ID/event ID везде, где платформа его предоставляет.
  • Для удаленных систем используйте их API Никогда не предполагайте, что их таблицы баз данных существуют. OpsIQ связь.
  • Возврат структурированных, безопасных для клиента ошибок. Никогда не раскрывайте секреты, следы поставщика или существование другого рабочего пространства.
  • Объявлять только возможности, которые пакет фактически реализует. actions.json Каталог не делает действие пригодным для использования, пока разъем не установлен, включен, настроен и его соединение является действительным.

Испытание и освобождение

Запуск PHP lint, проверка манифеста, тесты на подключение, тесты схемы действий, тесты сигнатур / повторов веб-хокинга, тесты изоляции рабочего пространства, тесты обратного заполнения, тесты отключенного соединителя и тесты отказа / повтора. Затем должен быть подписан и проверен пакет рынка, включающий документацию установки / разрешений / веб-книги и указать его истинный статус выпуска. Плитка разъема и манифест являются авторитетным сигналом доступности.

Коннекторы

Рецепты Connector

Пошаговые рецепты для общих настроек разъема.

Рецепты
Рецепт ConnectorРецепт настройки Shopify в качестве контрольного списка: создать приложение, предоставить области применения, вставить маркер и тест, включить веб-хуки, разместить тестовый заказ.Рецепт ConnectorShopifyРецепт · Shopify с помощью веб-хуковСоздайте пользовательское приложение в Shopify adminГранты: read_orders, read_customersВставить домен магазина + токен, щелкнуть ТестВключить синхронизацию Webhook (заказ авторегистрации)Поместите тестовый заказ → появляется в Продажи в 30s1STEP BY STEPРецепты копирования пасты2REAL PLATFORMSShopify · WHMCS · Stripe· GBP3ВЕРИФИЯПорядок тестирования показывает в 30s
Каждый рецепт представляет собой контрольный список, который вы следуете сверху вниз, здесь Shopify с веб-хуками заказа в реальном времени, проверенными тестовым заказом.

Рецепт: Shopify с веб-хуками в реальном времени

Сценарий:
Цель: Связь Shopify синхронизация автоматического заказа и GDPR соблюдение.
Что делать:

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.

Рецепт: WHMCS интеграция

Сценарий:
Цель: Связь WHMCS Таким образом, ИИ может искать клиентов, услуги, билеты и счета-фактуры.
Что делать:

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.

Рецепт: Stripe платежи

Сценарий:
Цель: Отслеживайте платежи Stripe и дайте ИИ возможность просматривать транзакции.
Что делать:

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.

Рецепт: Google Business Profile

Сценарий:
Цель: Подключить GBP для управления обзорами, постами и идеями.
Что делать:

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.

Коннекторы

Расширение CRM и Site Intelligence

OpsIQ Подсистемы открыты для расширения. Разъем может подключать новую возможность в CRM или Site Intelligence без изменений.OpsIQ ядро, через реестр возможностей платформы (\)OpsIQ Объявить о возможности, реализовать свой небольшой набор методов, отгрузить разъем,OpsIQ обнаруживает его и подключает к UI, клиент 360 Сроки и подсказки по установке.

Расширение CRM и SI
Возможности платформыРазъем на левой шине питания (CRM, Site Intelligence, Analytics), обнаруженный регистром возможностей.Возможности платформырабочее пространствоВаш разъемОбъявляют о возможностяхCRM (управление связями с клиентами)календарь · обогащение · подпись · платежи · почтовый ящикСайт разведкиlocal_listing · Rank_data (недоступная ссылка)Аналитикаweb_analytics · отчет и проглатываниеCapabilityRegistryОбнаруживает его и проводов UI + временная шкала1DECLAREВозможности, а не основные правки2PLUG INCRM · SI · Аналитические автобусы3AUTO-WIREDUI, Timeline, Быстрые
Разъем объявляет возможности (календарь, обогащение, ранжирование данных, аналитика ...) и OpsIQ автоматически подключает их к CRM и Site Intelligence, без каких-либо изменений ядра.

Объявлять о возможностях

Декларативный (настройки.json)

Добавить <domain>_capabilities массив, лучше всего для разъемов без кода/рынка. Домены: crm, site_intelligence.

В коде (connector. php)

Осуществление crmCapabilities() / siCapabilities() Возвращаются те же дескрипторы.

Объявить поставщика календаря CRM (settings.json)

Сценарий:
Цель: сделать так, чтобы разъем календаря появился в панели CRM Schedule-meeting.
Что делать:

"crm_capabilities": [ { "type": "calendar", "label": "Calendar (Acme)", "actions": ["createEvent","listEvents","freeBusy"], "requires_auth": true } ]

Объявить поставщика услуг по анализу сайта (settings.json)

Сценарий:
Цель: подача данных локального списка в Site Intelligence.
Что делать:

"site_intelligence_capabilities": [ { "type": "local_listing", "actions": ["listLocations","listReviews","getInsights"], "requires_auth": true } ]

Автобусы с возможностью и их поверхность

CRM/Календарь

createEvent($settings,$params) → {успех,event_id,html_link,meet_link}; listEvents; freeBusy. Движимый по системе \OpsIQ\CRM\CalendarBridge.

CRM / Обогащение

enrich($settings,$params) →{success,traits}.Driven byOpsIQ\CRM\EnrichmentBridge (также автоматически запускается при подключении провайдера).

цокольный знак

sendForSignature($settings,$params) →{success,envelope_id,sign_url}.OpsIQ\CRM\EsignBridge

site_intelligence/ local_listing

listLocations, listReviews, getInsightsПоставляется через разъем Google Business Profile.

site_intelligence/Rank_data (недоступная ссылка)

keywordRanks($settings,$params) → {success,ranks}. Приводится по \OpsIQ\SiteIntelligence\RankDataBridge. Корабли: SerpApi коннектор.

Аналитика / Web_analytics

report($settings,$params) (синхронизация/экспорт) + ingest($settings,$events) (импорт).OpsIQ\Аналитика\WebAnalyticsBridge. Google Analytics (GA4) разъем. Данные API для отчетов, Measurement Protocol для импорта. Аналитика открыта для разъемов, таких как CRM + Site Intelligence (домен analytics / analytics_capabilities).

Платежи / Payment_Provider

listPayments, customerPayments, createPaymentLinkДвижимый \OpsIQ\Payments\PaYmentsBridge. Показать платежи клиента на CRM График + отправьте платежную ссылку по сделке: Stripe Разъем для платежей. Домен payments / payments_capabilities.

почтовый ящик / email_sync

listMessages + sendMessageДвижимый \OpsIQ\Mailbox\MaILboxBridge. Электронные письма клиента 360 Сроки + отправка электронной почты от сделки. Корабли: Gmail + Outlook/Microsoft 365 Коннекторы. mailbox / mailbox_capabilities.

Shared OAuth приложение + One редирект

Все разъемы Google используют одно приложение через OpsIQ\OAuth SharedGoogleApp. Set google_oauth_client_id/_secret один раз и Календарь, Аналитика, Бизнес-профиль + Gmail вся работа (по полям «(необязательно)» для каждого коннектора переопределяется). URI, <site>/connectors.php?oauth=callback (без слизняка для каждого разъема), потому что Google не раскрывает API Добавить редирект URI в приложение; OpsIQ Восстанавливает разъем из подписанного OAuth state Зарегистрируйте этот сингл. URI Раз и каждый разъем Google (настоящее + будущее) авторизуется без дальнейшей настройки консоли. SharedGoogleApp::resolve(...)х redirect_uri от вашего oauthParams(); никогда не перенаправляйте код на слаг. Разъемы Microsoft делают то же самое через OpsIQ\OAuth\SharedMicrosoftApp (microsoft_oauth_*).

Кнопки импорта имеют потенциал

SHOPIFY импорт (историческая справка) и Импорт клиентов Кнопки показывают ТОЛЬКО для разъемов, которые фактически реализуют их, обнаруженные отражением, поэтому флага не декларировать. backfill() или backfillChunk() Чтобы заработать кнопку импорта; переопределить listCustomers() (возврат {email, first_name, ...} страницы) для получения импортных клиентов. AbstractConnector no-op и кнопка остается скрытой, поэтому пользовательский интерфейс никогда не предлагает импорт разъема.

ИИ в автобусах

Агент CRM предлагает и записывает встречи вне сигналов сделки.OpsIQ\CRM\MeetingProposer → CalendarBridge), а также автообогащает новые учетные записи, цикл «AI управляет CRM», выполняемый через соединительные шины.

Поиск билетов в клиент-чат ()fetchTicket())

Двухуровневый, без существенных изменений

Когда посетитель ссылается на номер билета в клиентском чате («Каков статус Т-клетки?»).000123?"), OpsIQ Разрешает его в два уровня. Уровни 1 читает общий OpsIQ билетный магазин, каждый разъем с inbound_ticket Там он отражает свои билеты, поэтому синхронизированные билеты работают только для всех разъемов с нулевым кодом на разъединитель. Уровни 2 Это живой запасной вариант для старых билетов, которые никогда не были зеркальными: ядро называет опциональным. fetchTicket() на каждом включенном разъеме, который его реализует. duck-typed (обнаружено method_exists()Как будто contextProviders()/audienceCatalog()), так что подписанный ConnectorInterface Нетронутые и разъемы, которые не нуждаются в нем (источники электронной почты / чата, которые создают билеты на родном языке), просто опускают его.

⚠️
Право собственности является обязательным, а ваше право - обязательным. fetchTicket() Получает удостоверение личности зарегистрированного посетителя в $ctx (client_id + client_emailТот же проверенный идентификатор, который использует ИИ в чате клиента. Решите клиент платформы с этого идентификатора и запрашивайте ТОЛЬКО билеты этого клиента, а затем перепроверьте право собственности на запись деталей. null на любой промах, несоответствие или ошибку, никогда данные другого клиента. null Он смягчает свою позицию, говоря: «Не смог найти этот билет».
connector. php, контракт fetchTicket() (ссылка: разъемы/whmcs и разъединицы/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
    }
}

Как платформа использует

открытие

CapabilityRegistry::providers($domain,$type) Список провайдеров с установленным/включенным/готовым статусом (на основе файловой системы; DB только для флага включенного доступа).

Выбор

CapabilityRegistry::active($domain,$type) Вернет первый готовый провайдер с его загруженным разъемом и настройками. Мосты называют это вместо жестких кодирующих слизней.

Уведомление об установке

Там, где функция нуждается в возможности, которая еще не подключена, пользовательский интерфейс показывает однокликовую подсказку Connect / Install, никогда не мертвый контроль.

Полный гид

Видишь? connectors/PLATFORM_CONNECTORS.md (CRM + Site Intelligence) и connectors/CRM_CONNECTORS.md в упаковке.

Коннекторы

Поиск и возврат средств по самообслуживанию клиентов (постройте свой разъем для чата клиента)

Зарегистрированные клиенты могут спросить AI чата клиента о своей собственной учетной записи («мой баланс», «мои заказы», «отвечает ли поддержка на мой билет») и, если бизнес позволяет это, запросить возврат средств. Все это основано на декларациях ВАШЕГО разъема: нет изменений ядра OpsIQ, нет жесткого кодирования платформы. ИИ называет ваши поиски родными инструментами (он не может изобрести их), идентичность заблокирована на стороне сервера для проверенного клиента, а результаты автоматически обрезаются для ИИ.

Объявить клиенту поиск

В твоей actions.jsonДействия, которые можно прочитать только для клиента, могут быть вызваны всеми тремя: "scope":"client", "requires_confirmation":false, "is_destructive":false- Используй. "scope":"both" когда тот же поиск должен быть вызван вашей командой в Admin AI. admin, client, both и system (system не достигает ни AI — только маршруты API и webhook. Все остальное сразу отвергается: проверка пакета терпит неудачу, а действие не устанавливается. writing Область применения — Помощник по написанию обслуживается admin набор действий.

Правило идентификации (обязательное)

Назовите свой идентификационный параметр из стандартного набора. Заблокированный на проверенный цифровой идентификатор: client_id, clientid, customer_id, user_id, userid, account_idЗаперто в этом идентификаторе как строка: client_identifier, customer_identifier, account_identifierЗаблокировано на проверенную электронную почту: email, client_email, customer_email, user_emailOpsIQ блокирует и автоматически заполняет его от клиента, зарегистрированного на платформе; ИИ никогда не видит или выбирает личность. Нестандартное имя закрывается (отклоняется, никогда не просачивается).

Что должно оставаться только администратором

Все, что не подпадает под эту идентичность: fetch-by-bareid (order_id/ticket_id Только в одном, списки магазинов по всему магазину, свободный поиск текста. Это утечки клиентов на любой платформе. Держите их "scope":"admin".

Формирование результата (ответные ключи)

Результаты поиска структурно обрезаются, прежде чем они достигнут ИИ: секретные ключи сбрасываются, длинные строки и списки ограничены, пустые поля обрезаны, а плоская карта шире, чем ключевая крышка, сохраняет свою ключи с ответом первымиДеньги ()credit, balance, amount, total, due, paid- удостоверение личности ()email, *name, phone, company), государство (status, active, expir*, renew*), даты, план/продукт/домен/услуга/подписка/заказ/счет-фактура/билетные поля, валюта, счета и stats/summary/totalsПрактическое руководство: назовите свои поля с этим стандартным словарем и верните поля, которые отвечают на вопрос клиента, а не сырой платформенный сброс 100-ключа; поле, названное за пределами словаря, конкурирует за оставшиеся места и может быть обрезано от очень широких полезных нагрузок.

Возврат средств · что предоставляет ваш разъем

Две необработанные операции, без политики:1) проверка платежа, считываемая фильтруемой по идентификационным данным и ссылке на транзакцию (ваша API и фильтров, например. whmcs_get_transactions; (2) действие по исполнению возврата денег (scope:"admin", requires_confirmation:true, is_destructive:trueникогда не подвергались воздействию клиента, например. whmcs_refund_orderБизнес выбирает оба ключа в Настройках → Клиентский чат; OpsIQ перепроверяет платежную сторону сервера, применяет поле политики бизнеса (количество, возрастное окно, ежемесячный лимит), выдает внутри ящика и подает билет на обзор для всего остального.

No-code конструктор

Редактор действий Connector Builder имеет одинаковые элементы управления: установите «Кто может использовать его» для подписавшихся клиентов, оставьте оба чекбокса и используйте стандартное имя параметра идентификации.

Реализация ссылок

«Самообслуживание клиента» в connectors/whmcs/actions.json, woocommerce/actions.json, oscommerce/actions.jsonПолный контракт в connectors/README.md §8.1–8.2 и ConnectorInterface::registerActions().

Коннекторы

Поиск гостей — пусть посетители отслеживают бронирование, отправку или заказ БЕЗ подписки (guest_lookup)

Отели, курьеры и многие торговые платформы обслуживают клиентов, которые имеют ссылку, но не входят в систему: гость с подтверждением бронирования, получатель с номером отслеживания. guest_lookup Возможность (Connector Contract, режим: сгенерированный) позволяет ВАШЕму разъему обслуживать тех посетителей в клиентском чате AI — нет OpsIQ изменения ядра, отсутствие жесткого кодирования платформы. Ваш разъем заявляет ЧТО доказывает право и ЧЕГО поля видны; OpsIQ Принуждает переключатели, дроссель и униформу отрицать.

Модель доверия

Ссылка + доказательство, никогда не удостоверение личности

Посетитель предоставляет ссылку на запись (сопоставленную с регексом, который вы заявляете) плюс доказательство, которое вы выбираете - обычно электронное письмо в записи. Ваше действие извлечения восстанавливает запись SERVER-SIDE по ссылке; генерируемый поставщик OpsIQ сравнивает доказательство с записью FETCHED. Вводу посетителя никогда не доверяют, и не создается проверенная личность: совпадение дает посетителю право на поля, включенные в список записей, ничего больше.

Единообразное отрицание (без оракула перечисления)

Необнаруженный и несоответствующий доказательствам ответ дает один идентичный ответ. ИИ явно проинструктирован никогда не подтверждать, существует ли ссылка, и никогда не изобретать детали записи. Попытки ограничены скоростью в разговоре + IP по ядру до того, как ваш разъем когда-либо будет рассмотрен.

Двойной вход, оба по умолчанию OFF

Ничто не служит гостям до тех пор, пока бизнес не позволит Оба переключателя: управление рабочим пространством в настройках→Безопасность→«Поиск записей в клиентском чате» (с указанием разрешения и всегда с подтверждением пароля, даже когда необязательное повышение отключено) и собственный разъем guest_lookup_enabled Установка или включение одного только разъема никогда не открывает гостевую поверхность.

Поверхность для гостей

Поставщик регистрируется на guest контекстная поверхность — структурно отделенная от admin и customerСуществующие контекстные провайдеры никогда не консультируются для анонимных посетителей, а гостевой провайдер никогда не советуется для подписанных. Полученный ctx несет сообщение чата, идентификатор потока и заявленное (непроверенное) предварительное электронное письмо посетителя в качестве кандидата на доказательство - никаких полей идентификации.

Объявить его в застройщике

1
Определить действие fetch

На этапе «Действия» добавьте действие только для чтения, которое возвращает ОДНУ запись по ссылке (например). GET /bookings/{booking_number}) и нанести на карту поля ответов с псевдонимами: status, arrival, departure, room_type, customer_email...

2
Тик "Гость ищет"

На этапе возможностей, включить guest_lookupПоявляется выделенная панель: выберите действие извлечения, назовите параметр ссылки, дайте образец ссылки (тело регекса, такое как \bBK-[0-9]{4,10}\b), назовите запись («бронирование») и выберите доказательство — электронная почта в записи (рекомендуется) или нет (только ссылка, для отслеживания курьера только по статусу).

3
Позволяет перечислить видимые поля

Введите точно поля, которые может увидеть гость. Все остальное ГОСТ РАЗМЕЩАЕТСЯ - никогда не отредактировано. Строитель отказывается от полей в форме PII (электронная почта, телефон, адрес, оплата...) в списке разрешений, а пакет соответствия с выходом-ворот перепроверяет то же правило перед публикацией, поэтому ручная редакция спецификации не может прокрасть одно. Обратите внимание, что проверка времени установки охватывает только манифест и подпись, поэтому запустите набор соответствия самостоятельно до отправки. Само поле доказательства никогда не может быть показано.

4
Публикуйте и позволяйте

Строитель излучает GuestLookupProvider.php - каноническая закаленная реализация, идентичная для каждого сгенерированного пакета, и добавляет guest_lookup_enabled Бизнес использует два переключателя, и ИИ чата начинает предлагать поиск, когда посетитель спрашивает о вашем типе записи.

Правила договора

Только статусные поля

Подумайте, «что бы курьер напечатал на странице общественного отслеживания»: статус, даты, номер или категория обслуживания, подсчеты. Имена, контактные данные, адреса улиц, платежные данные и свободные текстовые заметки не имеют места в анонимном чате — Строитель и соответствие оба отказываются от них.

ИИ отвечает только из блока

Созданный провайдер заканчивает свой вывод инструкцией отвечать только из перечисленных полей и предлагать билет на что-либо еще. Подробности не в списке разрешений «не доступны в чате» — по дизайну.

Последующие меры продолжают работать

Провайдер повторно получает ссылку из недавних сообщений посетителя в том же разговоре, поэтому «и когда выписка?» работает без повторного ввода ссылки. Соответствующая ссылка и доказательство электронной почты запоминаются в чате как CANDIDATES, так что последующие действия не задают повторный вопрос. Они только кандидаты: каждый поворот все еще перенастраивает серверную сторону записи и сравнивает доказательство перед выпуском одного поля.

Рукописные пакеты

Торговый пакет может поставляться самостоятельно GuestLookupProvider.php implementing ContextProviderInterface с surfaces(): ['guest']Следуйте контракту сгенерированного шаблона точно - приведите по ссылке, на стороне сервера proof-match, единообразный отказ, вывод только из списка разрешений - и заявите guest_lookup in capabilitiesСоответствие проверяет поверхность гостя и сканирует список разрешений для PII.

💡
Поиск гостей - это контекст только для чтения чата. Они никогда не выполняют действия, никогда не создают личности и никогда не открывают путь самообслуживания клиента выше - этот путь по-прежнему требует проверенного на платформе подписавшегося клиента.
Коннекторы

Целевой аудиторией (promo_audience)

Пусть рекламная студия целевые кампании от LIVE клиента и состояние выставления счетов с ВАШЕЙ платформы: «имеет неоплаченный счет», «заказ на рассмотрении», «подписка отменена». Любой разъем (предустановленный, маркетплейс или тот, который вы строите сами) присоединяется путем реализации двух небольших методов. Никаких OpsIQ основных изменений, никакого жесткого кодирования платформы: ваш разъезд появляется в качестве платформы во вкладке таргетинг студии со своим собственным раскрывающимся изложением фактов, а несколько разъединиц могут быть включены бок о бок.

Промо-аудитория
Целевая аудитория продвиженияПроверенная личность, переданная аудитории разъема Флаги вызова, производящие факты, которые управляют правилом таргетинга, с запиской, закрытой по умолчанию.Целевая аудитория продвижениярабочее пространствоЗарегистрированныйПроверенная личностьФлаги аудитории()Ваш разъемФАКТЫunpaid_invoices = 2Правилонеоплаченные счета ≥ 1Кампания показываетНеисправности закрыты: неизвестный клиент или любая ошибка → кампания остается скрытой.1TWO METHODSАудиторияКаталог + Флаги2LIVE STATEНеоплаченный, незавершенный статус3FAIL-SAFEНикогда не показываться не тому человеку
Ваш разъем отвечает на живые факты выставления счетов для зарегистрированного посетителя; студия нацелена на них и не закрывается, поэтому предложение по выставлению счетов никогда не доходит до неправильного человека.

Как это работает

1
Объявляйте свои факты

Внедряйте в классе коннектора audienceCatalog(), он возвращает ярлык и список ключей, на которые может ответить ваша платформа. Каждый ключ отображается в выпадающем списке студии под вашим именем платформы.

2
Ответ для одного клиента

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
Сделано

Включите разъем. На вкладке Promotion Studio Targeting растет раздел «Клиент и выставление счетов», в котором перечислена ваша платформа; администраторы создают правила, такие как «неоплаченные счета-фактуры» >= 1"; каждый факт также становится переменной персонализации, такой как: {unpaid_invoices}.

connector. php, полный контракт на промо-аудиторию
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'],
    ];
}

Правила договора

Рекламировать возможности

Добавить 'promo_audience' к вашему разъему capabilities() массив, поэтому платформа и рынок перечисляют его как способный к аудитории (открытие также работает из присутствия метода, но объявляя его чистым сигналом). connectors/whmcs Разъем является полной эталонной реализацией.

Ключевое имя

Стройные буквы snake_case, символы 2-_60, соответствующие ^[a-z0-9_]+$. Типы: число, текст, логическое значение. Незаявленные ключи, возвращаемые audienceFlags(), все еще могут использоваться в правилах, но объявляйте все, что вы поддерживаете, чтобы администраторы могли это увидеть.

Идентичность проверяется

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.

Неудачи всегда закрыты

О любой ошибке ()API правило, которого не хватает, делает кампанию НЕ показанной. Всплывающее окно с целью выставления счетов никогда не должно доходить до неправильного человека; OpsIQ Это также соблюдается в правилах игры.

Выступление

Флаги аудитории () вызываются не более одного раза на разъем для просмотра страницы, и ТОЛЬКО когда опубликованная кампания фактически использует правила вашей платформы. Анонимные посетители стоят вам нулевых звонков. 1-2 API звонки; OpsIQ Память в рамках запроса.

Операторы предоставлены бесплатно

Администраторы объединяют ваши ключи с =, !=, >,>=, <, <=, содержит, задан, пуст, вы только поставляете значения.

Токены персонализации

Каждый факт удваивается как переменная в копировании кампании: {unpaid_invoices}, {client_status} Плюс встроенные {first_name} и {client_email} Ценности дезинфицируются перед рендерингом.

No-code рыночные разъемы

Автоматические факты

Декларативный ()JSON-только) разъемы маркетплейса получают promo_audience БЕСПЛАТНО: если ваш разъединитель заявляет о клиентах/пользователях, счетах-фактурах, заказах или ресурсах подписки, OpsIQ Получает customer_status, unpaid_invoices, amount_due, pending_orders, active_subscriptions и subscription_statum из ваших существующих поисковых действий.

Каталог (настройки.json)

Добавить объект audience_capabilities · {"label": "My Platform", "keys": [{"key": «open_carts», "label”: "Open carts", "type": “number"]}, чтобы точно контролировать какие факты (и ярлыки) появляются в студийном раскрывающемся каталоге.

Тестирование вашего провайдера

1
Включить разъем

Коннекторы > ваш коннектор > Включить. Затем откройте вкладку «Целевая кампания». Ваша платформа должна отображаться в разделе «Клиент и выставление счетов (коннекторов)».

2
Постройте правило

Добавьте: Ваша платформа · ключ · >= · 1 и установите «Только для зарегистрированных клиентов».

3
Проверьте оба направления

Войдите на свою платформу в качестве клиента, который соответствует правилу (всплывающее окно должно отображаться) и как тот, кто этого не делает (вставное устройство должно оставаться скрытым).

Запустите кампанию из собственного кода (настраиваемый триггер)

Почему

Помимо встроенных триггеров (задержка, прокрутка, намерение выхода, холостой ход, клик, просмотр страниц, чат / билетная активность), вы можете запустить кампанию из любой точки вашего сайта или интерфейса разъема после успешного этапа оформления заказа, когда тележка заброшена, когда ваш SPA меняет маршрут и т. Д.

Как

Установите триггер кампании для обычай с названием события (например, checkout_failed), затем позвоните в глобальный крюк со своей страницы:

Ваш сайт / коннектор интерфейса 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');
💡
Увольнение события никогда не обходится без таргетинга или частоты. Оно только выпускает «когда». Кампания все равно должна пройти каждое правило (гео, аудитория, согласие, колпачки) перед его показом.
Полное руководство по использованию (проектирование, блоки, аналитика, A / B, публикация) живет в Центре помощи внутри приложения. Занимайтесь → Студией продвиженияВозможность здесь обнаруживается автоматически из любого разъема ENABLED в разъединителях / или marketplace_connectors /. Нет ничего, чтобы зарегистрироваться. Отправьте два метода, а студия сделает все остальное.
Коннекторы

Возможность подключения к обзору (контракт) 2.2)

SHOPIFY survey Возможность позволяет любой платформе поставлять проверенные адаптеры идентификации клиентов, факты аудитории, безопасные переменные и кандидатов-получателей в Survey Studio. promo_audience и не дает права собственности на разъем опросов, ответов, аналитики или доставки электронной почты.

💡
Авторство является полным и пригодным для использования сегодня: Контракт на коннектор 2.2, SurveyConnectorInterfaceвыделенная панель Строителя, сгенерированная SurveyProvider.php, метаданные пакета и изоляция соответствия все судно. Потребление еще не подключено: SurveyConnectorRegistry Реализуется и тестируется, но ни одно время выполнения Survey не называет его еще, поэтому здоровье провайдера не отображается в пользовательском интерфейсе администратора, и ни один опубликованный пакет разъемов не заявляет о возможности. Выпуск Signed-token Survey Identity Gateway, таргетинг и интеграция с переменными, материализация CRM Outreach и первые отгруженные отображения поставщиков остаются отдельными этапами. Создайте против этого контракта сейчас; ожидайте, что время выполнения начнет потреблять его в более позднем выпуске.

Обязанности поставщика

Каталог аудитории и факты

Объявляйте типизированные канонические факты и разрешайте значения только для проверенного сервером объекта, связанного с рабочим пространством order_count, last_order_status, cancelled_order_count, customer_created_at, active_subscription_count, past_due_invoice_count и open_ticket_count.

Переменный каталог и значения

Объявлять переменные типа, чувствительности и допустимого контекста клиентом, учетной записью, заказом, подпиской и поддержкой. Копия опроса требует резервных копий и выхода из выходного контекста.

Получатель пилинга

Опционально перечислять кандидатов на CRM Outreach со стабильными внешними идентификаторами, ограниченными страницами, детерминированными курсорами и метаданными, связанными с согласием. Опрос замораживает выбранную аудиторию перед любой отправкой.

Идентичность

Принять личность только из шлюза идентификации опроса после подписи токена, истечения срока действия, цели, разъема и проверки рабочего пространства. Поставляемая браузером электронная почта, идентификатор, теги или факты выставления счетов никогда не являются авторитетными.

Здоровье бега

SurveyConnectorRegistry предназначен для сообщения о совместимых, заблокированных и недоступных провайдерах без раскрытия настроек, путей, необработанных идентификаторов или сообщений об исключениях, а блокированный провайдер никогда не может быть вызван. Поверхность отчетности еще не отображается в пользовательском интерфейсе администратора: сегодня заблокированный поставщик просто инертен.

Неудачные правила

Незадекларированные ключи, неправильные типы, негабаритные значения, несоответствия тем, тайм-ауты разъемов и неизвестные идентификаторы отвергаются. Правило таргетинга, которое требует недоступных фактов, не соответствует. Страницы получателей ограничены и проверены. Чувствительные ценности никогда не появляются в публичном предварительном просмотре или журналах.

Строитель выпустил ворота

Контракт 2.2 отгружает запись в реестре возможностей, интерфейс, панель отображения обзора, сгенерированная SurveyProvider.php, версия возможностей, ссылка README / разработчика и приспособления соответствия. Коммерция, справочная служба, мост SaaS и локальные профили PHP включают его; Стандартные разъемы API выбирают. Статический шлюз отклоняет поставщика опроса, который вызывает пространство имён Промоушен, таблицу или возможность.

💡
Копия из Промоушен-только импорт: Строитель может перевести совместимые промо-карты один раз, сохранить полную копию и записать происхождение. Удаление или изменение картирования Промо-акции не должно изменять поведение Опроса.
Коннекторы

Возможность обратной связи (контракт) 2.2)

SHOPIFY reply_feedback Возможность зеркально отражает собственные рейтинги по ответу платформы в OpsIQ Звезда, клиент дает ответ сотрудникам внутри WHMCS Клиентская область приземляется на тот же ответ в OpsIQ нить администратора, с тем же чипом, кредитом агента, входом на страницу обратной связи и вычислением команды и производительности в качестве рейтинга, данного на OpsIQ Один склад, один чип, один трубопровод; разъем только переводит.

Путь написания

Есть ровно два пути входа и одна правда. OpsIQ портальные билеты пишутся на родном языке. Платформные билеты текут через разъем, а ядро приземляется каждое событие через ReplyFeedback::recordMirrored(): те же столбцы, правило только для персонала, семантика последнего выигрыша с одним рейтингом на ответ, печать рабочего пространства и индексация голосов клиента портала записи использует. Разъем никогда не пишет строки обратной связи сам по себе.

Соответствие (четыре файла, затем повторное подписание)

1
connector_contract.json

Добавьте запись capabilities. reply_feedback: version 1.0, ReplyFeedbackConnectorInterface, методы replyFeed backCatalog и pullReplyFeed Back, подразумевает inbound_ticket.

2
settings.json

Добавьте ответ_обратная связь в список возможностей. Вот что означает обнаружение разъема.

3
spec.json

Объявить ответ_feedback. modes (опрос и/или webhook) и шкалу рейтинга платформы. Вот что читает вход соответствия.

4
Классы Runtime

Внедрите интерфейс, перечислите ответ_обратная связь в функциях(), затем повторно подпишите пакет.

Обязанности поставщика

Каталог

Объявлять режимы, собственную рейтинговую шкалу платформы (ядро нормализуется до родного) 1-5), и любые токены реакции. Каталог должен соответствовать спецификации.json.

Перевод на тяни

pullReplyFeedback возвращает канонические события: платформенный билет, платформенное ответное удостоверение, рейтинг, необязательную реакцию/комментарий, представленное время и стабильное event_id. Он читает и переводит. Он никогда не пишет.

Императивность

event_id стабилен на основе обратной связи STATE, поэтому переигрываемое событие является безо-оп и измененным перезаписыванием рейтинга (последние победы, такие как портал).

Дисциплина курсоров

Страницы ограничены и детерминированы; курсор, который не продвигается, заканчивает бег. Историческое заполнение стекает как катящееся окно, никогда одно гигантское тяга.

Проверка безопасности

Без конфигурации, возвращайте пустую полную страницу вместо того, чтобы бросать. Бегун соответствия пробует пустыми аргументами.

Неудачная резолюция

Core разрешает каждое событие на локальный ответ с помощью зеркального маркера, который уже маркирует билетное зеркало (см.<slug>:<ticket>:reply:<reply>Событие, которое не может быть решено, отбрасывается, никогда не угадывается; обратная связь только прикрепляется к ответам персонала; и кредит агента всегда исходит от существующего автора ответа. Рейтинг никогда не изменяет авторство. Вот почему способность требует inbound_ticket или ticket_mirror.

Пример: WHMCS

WHMCS хранит рейтинги звезд в зоне клиента на ответ tblticketreplies.rating- Это. WHMCS Коннектор объявляет режим опроса с помощью 1-5 Скала, корабли А ticket_reply_ratings пересылает команду в файле моста и переводит каждую строку в событие, идентификаторы которого соответствуют whmcs:<ticket>:reply:<reply> После обновления разъема перекопируйте файл моста на сервер WHMCS, чтобы новая команда существовала там.

💡
Полный контракт разработчика с интерфейсом, формами событий, правилами нормализации и контрольным перечнем соответствия: doc/contracts/TICKET_REPLY_FEEDBACK_CAPABILITY.md в OpsIQ Прием: оценить ответ внутри платформы, подождать почасового опроса и тот же ответ в OpsIQ отображает чип, страница обратной связи перечисляет его, а переигранное событие ничего не меняет.
Коннекторы

Возможность слияния билетов (контракт) 2.4)

SHOPIFY ticket_merge Возможность делает слияние билетов в OpsIQ слиянием на каждой связанной билетной платформе. Сохраняемый билет платформы получает сообщения объединенных билетов, начиная с каждого вступительного сообщения объединенного билета, вместо того, чтобы только закрываться.

Почему существует

Слияние в OpsIQ перемещает каждое сообщение слитых билетов в сохраненный билет и удаляет слитые билеты 2.4 Разъем, который слышит только ticket.deleted Для каждого билета. WHMCS Закрыли билет и сохранили WHMCS Билет так и не получил того, что клиент написал первым: предмет показал [МЕРГЕД], а содержание отсутствовало.

Что посылает ядро

Ticket. merged (один раз за слияние)

ticket_id, ticket_number, subject и external_ref тикета KEPT; native_table (opsiq_tickets); site_key; sources, старейшие слившиеся тикеты в первую очередь, каждый со своими ticket_ID, ticket _number, subject, external_Ref, client_name, client _email, created_at и messages [{reply_id, author_type, autor_name, created _at, body}]; merged_by; merted_at. Сообщения представляют собой видимый клиенту разговор, записанный до перемещения. Внутренние заметки никогда не включаются.

Ticket. deleted (за объединенный билет)

Все еще запускается, теперь с merged_into {ticket_id, ticket_number, external_ref}. Ядро не передает его соединителю, объявляющему ticket_merge; другие потребители могут отличить слияние от удаления.

Исходящие веб-хуки

Ticket. merged - это событие, которое можно осуществить. Конечная точка SaaS-хука, подписанная на ticket. deleted, также получает ticket. merded, поэтому интеграция построена до того, как 2.4 услышит слияние.

Что делает ваш коннектор

Декларация

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.

Слиться с родным, когда вы можете

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.

В противном случае добавьте приватную записку.

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.

Сообщить о том, что не слилось

Возврат {ok, mode, merged, noted, unmerged, error}. Каждая объединенная копия, которую вы не могли объединить, идет в неслияние, и ядро применяет вашу обычную обработку удаления (закрыть или удалить с помощью mirror_deletes) именно к тем. Режим возврата не поддерживается только тогда, когда платформа не имеет слияния и частной заметки. Транспортный или аут-провал является око = ложным по причине; он записан в Диагностике.

Почитай свои щипцы

Те же самые настройки зеркала, которые запирают другие ворота вашего билета, сливаются.

Слияние, которое начинается на вашей платформе

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.

Перевернутые реализации

WHMCS

MergeTicket (ticketid = сохраненный билет, mergeticketidas = слитые билеты), когда оба находятся в WHMCS; AddTicketNote с транскриптом иначе. Крюк TicketMerge ретранслятора объединяет OpsIQ Копии, когда сотрудники сливаются в WHMCS.

Zendesk

ПОСТ /api/v2/tickets/{id}/merge.json с частными комментариями (до пяти билетов на звонок), а также стенограммой в качестве частного комментария к сохраненному билету, потому что Zendesk Закрывает объединенные билеты, не передвигая своих комментариев.

OpsIQ SaaS мост

ПОСТ /v1/tickets/{id}/merge с source_ids, который перемещает ответы и вложения портала; внутренний ответ несет стенограмму для билетов, которые никогда не были на портале /manage Слияние сливается OpsIQ копии.

Конструктор соединений

ticket_merge производный, никогда не отмечается: сгенерированный пакет объявляет его при связывании созданного им тикета платформы (подписчика ticket. created со ссылкой на тикет), обработке ticket. deleted или объявлении ticket_mirror. Слияния, выберите действие слияния платформы (сопоставьте merge. target_remote_id и merge! source_remotes или merge! source_remotos) и действие частной заметки (составьте note. remote. id и note. body). Сгенерированная функция mergeTickets() использует оба действия. Если ни одно из них не выполнено, Конструктор предупреждает, что сообщения об объединенных тикетах не будут получены платформой.

💡
Полный контракт: doc/contracts/CONNECTOR_CONTRACT.mdПрием: слить два билета в OpsIQ, которые существуют на платформе, затем открыть сохраненный билет на площадке. Первое сообщение объединенного билета там.
Коннекторы

Рынок коннекторов

Marketplace позволяет обнаруживать, устанавливать и публиковать разъемы, созданные сообществом.

рыночная площадка
Рынок коннекторовПоисковая сетка карт разъема сообщества с категориями, кнопками установки и звездными рейтингами.Рынок коннектороврабочее пространствоПоисковые разъемы...CalendlyРасписаниеустанавливать★ 4.8HubSpotCRM (управление связями с клиентами)устанавливать★ 4.6MailchimpЭлектронная почтаустанавливать★ 4.7QuickBooksБухгалтерский учетустанавливать★ 4.5TwilioСМСустанавливать★ 4.9ПонятияДоксустанавливать★ 4.41DISCOVERСоединения сообщества2ВечныйОдин клик3PUBLISHПодпишите и представьте свой
Просмотрите разъемы сообщества, установите в один клик или подпишите и опубликуйте свои собственные, предустановленные и рыночные уровни.

Поиск и установка разъемов

1
просматривать

Перейдите в раздел «Коннекторы»> «Маркетплейс». Поиск по имени, категории или платформе.

2
Обзор

Проверьте описание, поддерживаемые действия и рейтинги.

3
устанавливать

Нажмите Установка. Пакет разъема загружает и устанавливает на marketplace_connectors/.

4
конфигурировать

Включите его в Connectors, введите API и проверьте.

Публикация разъема

1
Строить и тестировать

Используйте Коннектор Строитель. Проверяйте, все ли действия работают.

2
Пакет

Создайте профиль.json Действия.json Знания.json Файлы PHP.

3
знак

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
Представить

Загрузить через поток представления на рынок для обзора.

Два соединительных элемента

Разъемы / Что на самом деле работает

Все здесь в прямом эфире: разъемы, которые поставляются с OpsIQ, все, что установлено на рынке, и все, о чем Connector Builder публикует на этой установке.

Marketplace_connectors/ — где авторизованы пакеты

Издательский источник для сторонних рыночных пакетов. Это не корень открытия: здесь ничего не существует, пока оно не упаковано, подписано, засеяно в каталог и установлено, после чего копия попадает в разъемы /.

💡
Пакет, который вы написали под маркетплейсом_connectors/, не является копией, которая запускается — установка копий в разъемы/, и только эта копия обнаруживается во время выполнения.StripeBigCommerce, Magento2PrestaShop, OpenCart, Amazon SES, Postmark и Resend - все это рыночные пакеты: установите один, прежде чем ожидать его найти в Connectors.
разработчик

API и webhook конструктор

The API Webhook Builder позволяет создавать пользовательские API Конечные точки и слушатели веб-хуков внутри OpsIQ Без написания PHP.

API Разработчик
API и webhook конструкторСтроитель, выбирающий тип триггера (входящий веб-хук, расписание, событие, руководство), который подается в настраиваемое действие.API и webhook конструкторрабочее пространствоПРЕДПРИНИМАТЕЛЬВходящий webhookРасписание (крон)OpsIQ СобытиеРучнойМерыКарта входящих полей →Создать билет / уведомить / позвонить APIСохранить конечную точку1ПРЕДПРИНИМАТЕЛЬСТВАWeb-cook · расписание · событие · руководство2NO RAW PHPПостроенный в UI3действиеКартографические поля, затем бегать
Создавайте конечные точки без исходного PHP: выберите триггер (входящий веб-хук, расписание, событие или руководство), а затем сопоставьте поля с действием.

Триггеры

Событие

Бегите, когда что-то происходит в OpsIQ или когда внешняя система публикует соответствующее событие в вашем веб-хуке URL Введите название события, например ticket.created.

Расписание

Используйте одно из встроенных интервальных событий в качестве названия события: cron. minutely, cron... hourly или cron! daily. На экране Actions and Triggers есть кнопки для них, поэтому вам не нужно их запоминать.

Фраза

Запустите, когда администратор попросит ИИ об этом простым языком. Добавьте фразу, которая должна совпадать, например, найдите клиента.

Входящий webhook

Внешняя система отправляет HTTP POST на ваш сайт. OpsIQ веб-хук URL Любой спусковой крючок, слушающий это событие, загорается.

Иногда только запустите его: условия

Триггер событий может нести условия, поэтому он работает только тогда, когда входящие данные совпадают. Без условий он работает каждый раз, когда событие загорается.

Поле

Путь в данные о событии. Используйте точку для вложенных значений, например customer. email.

Матч все или любой

Выберите, соответствует ли каждое правило или только одно из них.

Текстовые тесты

Равно, не равно, содержит, не содержит, начинается с, является одним из, не один. Матч игнорирует капиталы.

Числовой тест

Числа, написанные как текст, все еще правильно сравниваются.

Тесты присутствия

Он присутствует, отсутствует, пуст, не пуст.

Только на странице инженера по вызову для срочных билетов

Сценарий:
Событие билет. созданное, с одним правилом: приоритет равен срочному.
Что делать:

Акция проходит по срочному билету и пропускается на все остальное.

💡
Если оставить правила пустыми, то триггер будет работать на каждом соответствующем событии, что соответствует поведению до появления условий.

Меры

Отправить webhook

Отправьте HTTP POST на внешний URL с пользовательской полезной нагрузкой.

Создать билет

Создайте билет поддержки с указанным отделом, темой и сообщением.

Отправить e-mail

Отправьте электронное письмо с пользовательским шаблоном.

Обновление рекорда

Обновление клиентской, билетной или CRM-записи.

Запуск разъема

Выполните зарегистрированное действие от включенного разъема с его правилами разрешения и подтверждения разъединения.

Беги. OpsIQ Генерал API действие

Полный каталог называется General API. Поля, области применения, разрешения, подтверждение, идемпотентность и поддержка сухих работ исходят из контракта на прямое действие; рабочий процесс выполняется в пределах сохраненного рабочего пространства и контекста администратора.

Отправить запрос API

Используйте коннектор Native API Прочитай или подтверди API Напишите действие, когда конечная точка провайдера не имеет кураторского действия.Удостоверения остаются внутри разъема и принимаются только относительные пути поставщика.

Разработчик The Actions & Triggers /api/v1.php, OpenAPI и Postman используют один и тот же ActionContractRegistry, поэтому выбираемое действие не может отклоняться от документации по времени выполнения.
разработчик

Поваренная книга Triggers

Готовые к использованию рецепты триггерного действия для общей автоматизации.

Как это работает
Поваренная книга TriggersПоток рецептов: веб-хук uptime. down проходит производственный фильтр, затем фанаты создают срочный билет и уведомляют Slack.uptime.downмонитор webcookЕсли бы цокfilterСоздаем срочный билетОбъявить Slack #ops
Поваренная книга Triggers

Авто-создание билета из мониторинга

Сценарий:
Система мониторинга отправляет POST, когда сервер выходит из строя.
Что делать:

Trigger: Inbound webhook Condition: payload.status = "down" Action: Create ticket · Dept: Technical, Subject: "Server {{payload.hostname}} down", Priority: Urgent

Уведомление Slack о крупных заказах

Сценарий:
Slack каждый раз, когда клиент делает заказ $100.
Что делать:

Trigger: Event (order.completed) Condition: order.amount > 100 Action: Send webhook to Slack incoming webhook URL with order details

Еженедельный дайджест электронной почты

Сценарий:
Резюме электронной почты руководству каждый понедельник в 9 утра.
Что делать:

Trigger: Schedule (Monday 09:00) Action: Send email with last week's stats pulled from the REST API

Эскалация устаревших билетов

Сценарий:
Если билет не имеет ответа на 24 часов, назначьте команду.
Что делать:

Trigger: Schedule (every hour) Condition: ticket.status = "Open" AND ticket.last_reply_age > 86400 Action: Assign to team-lead, add internal note

разработчик

Создайте свое первое действие

Этот переход создает простое действие разъема с нуля.

Построение действий
Построение действияФорма определения действия: name lookup_order, запрос GET на /orders/{id}, типизированный параметр ID и проход 200 Тест.Новое действиерабочее пространствоНовое действиеИмяlookup_orderПросьбаGET/orders/{id}парамid · строка200 · Приказ найден1DEFINEНазвание, метод, конечная точка2PARAMSТиповые входные данные3ТестLive 200 Результат
Создайте одно действие с нуля. Назовите его, установите метод и конечную точку, заявите типизированные парамсы и протестируйте его на живом 200.

Два вида действий

Перед тем как начать, решите, какой из них вам нужен. Оба настроены на одном экране.

Вызовите внешний API

Это действие посылает HTTP-запрос на вашу платформу. Выберите это, когда OpsIQ нужно связаться и сделать что-то с вашей стороны.

Запуск разъема Action

Действие запускает то, что уже предоставляет установленный разъем. Выберите это, когда работа уже доступна и вы просто хотите запустить ее. Вы выбираете действие разъединения из списка, так что нет ничего, чтобы подключить.

Второй вариант — как вы повторно используете все, что ваши разъемы уже могут сделать без создания чего-либо из них снова: прочитайте нить билета, посмотрите на клиента, импортируйте контакты и так далее.
1
Планировать действия

Пример: "lookup_product". Найдите товар по названию, цене возврата, запасу и описанию.

2
Определить в действиях.json

Добавить определение действия:

json — реальная форма проявления
{
  "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" }
      ]
    }
  ]
}
⚠️
Три вещи, которые заставляют действие вообще не регистрироваться. action_id Требуется и должен быть 2 то 100 символы строчных букв, цифр и подчеркиваний — запись без такового отклоняется сразу. Манифест представляет собой объект с «действиями» LIST, а не карту с закодированным именем действия. А картографирование ответов — это «возвраты» с DOTTED-путями (data.id), а не JSONPath ($.data,id) — нигде в реестре нет ключа «response_mapping», «метод», «конечная точка» или «парамс».
3
Испытание с использованием сухого

На этапе проверки Коннектора нажмите Dry run. Он запускает полный контрольный список соответствия вашей упаковке и, когда вы предоставили учетные данные, делает реальный тест соединения. Он не использует данные выборки.

4
Проверить использование AI

Спросите администратора AI: «Поищите продукт Widget Pro». ИИ должен найти и выполнить действие.

⚠️
Добавление действия к действию.json Не создает маршрут AJAX, поэтому нечего регенерировать. Действия коннектора синхронизируются OpsIQ при включении разъема или сохранении его настроек: повторное сохранение разъёма и появление нового действия. tools/gen_route_registry.php покрывает диспетчерскую службу администратора AJAX и не имеет никакого отношения к действиям разъединения.
разработчик

Конечные точки входящего события

Входящие конечные точки принимают подписанный JSON из другой системы и превращают его в дублированную контактную активность, которая может подавать временные линии, подсчеты баллов и рабочие процессы.

Экран продукта
Входящие конечные точкиКаждый входящий источник имеет свой собственный URL, секретный, картографический и недавний результат деятельности.Входящие конечные точкирабочее пространствоИсточники5ACCEPTED12.4kREJECTED18ЖИВОЙ ВИДЕО РАБОТЫПлатформа для выставления счетовАккаунтные мероприятияздоровыйПриложение для продуктаРегистрация и события использованияздоровыйИдентификатор событияprovider_event_idдеформацияПодписьX-OpsIQ-Inbound-SignatureHMAC1CREATE SOURCEURL и секретный2MAP PAYLOADEmail, событие и ID3ВЕРИФИЯHMAC, который проглатывает
Каждый входящий источник имеет свой собственный URL, секретный, картографический и недавний результат деятельности.

Создайте один источник для системы отправки. OpsIQ генерирует a URL/token and secret. JSON с Content-Type: application/json Подпишите точный необработанный корпус с помощью HMAC-SHA256:

X-OpsIQ-Inbound-Signature: sha256=<hex hmac>

Карта JSON путей для контактного письма, названия события и дополнительного идентификатора события. ID события является предпочтительным ключом дедупликации. Принятая активность входит в контактную временную линию и может повлиять на оценку потенциальных клиентов, сегменты, правила жизненного цикла и рабочие процессы.

Отклоните недействительные подписи перед анализом бизнес-данных. Вращайте секрет, обновляя обе стороны в контролируемом окне; не регистрируйте секрет.

разработчик

Операции Outbound Web-cook

Администрация исходящих веб-хуков создает подписанные подписки, тестирует конечные точки и контролирует асинхронную доставку и повторное использование.

Экран продукта
Исходящие веб-хукиНа странице исходящего веб-хука перечислены конечные точки HTTPS, подписки на мероприятия, здоровье доставки и тест с одним щелчком мыши.Исходящие веб-хукирабочее пространствоENDPOINTS7SUCCESS99.2%Пытаясь4ЖИВОЙ ВИДЕО РАБОТЫЗеркало CRMКонтакты.* и сделка.*здоровыйАвтобус поддержкиБилеты.* и чат.*здоровыйХранилище данных*повторныйИспытаниеПодписанный образец полезной нагрузкиГотовы1SUBSCRIBEHTTPS URL и события2AUTHENTICATEПодпись HMAC3OBSERVEДоставка рельсов и ретрейсов
На странице исходящего веб-хука перечислены конечные точки HTTPS, подписки на мероприятия, здоровье доставки и тест с одним щелчком мыши.

Полные администраторы создают конечную точку HTTPS, выбирают конкретные события или wildcard, безопасно хранят секрет и отправляют тест. OpsIQ подписывает необработанную полезную нагрузку с HMAC-SHA256:

X-OpsIQ-Signature: sha256=<hex hmac>

Проверить подпись перед десерализацией или действием. Доставка асинхронна и автоматически перепроверяется после приблизительного 1 Минута, 5 минуты, 30 минуты, 2 часов и 12 часыИспользуйте рельсы недавней доставки для проверки статуса, кода ответа и подсчета попыток.

Ваш приемник должен быть идемпотентным, потому что любая асинхронная система может перезагрузиться. Возврат 2xx-ответа только после длительного приема.

разработчик

Вебхуки

Webhooks позволяет внешним системам уведомлять OpsIQ Когда что-то происходит (входит) и позволяет OpsIQ Уведомлять внешние системы, когда что-то происходит внутри (внешне).

Вебхуки
Исходящие веб-хукиЭкран исходящих веб-хуков: таблица конечных точек с именем, подписанными событиями, недавними точками статуса доставки и кнопкой Send-test.Исходящие веб-хукирабочее пространствоКонечные точки+ Сохранить конечную точкуИмяСобытияОТДЕЛЕНИЯSlack #sales-alerts (недоступная ссылка)https://hooks.slack.com/…crm. deal. won, orderТестЗеркало CRMhttps://api.acme.com/hookКонтакты.*, Ticket. созданТестZapierhttps://hooks.zapier.com/…chat.startedТест1ENDPOINTSНазвание, события, URL2SIGNEDHMAC + автоответчик3SEND TESTПроверить поставки
Настоящий экран исходящих веб-хоков: каждая конечная точка с ее событиями, недавним здоровьем доставки и тестом Send в один клик, подписанным и проверенным.

Исходящие веб-хуки

Подписка

Перейдите в Настройки > Webhooks. Добавьте конечную точку URL и выберите события для получения.

События

Подписаться на конкретные события или ["*"] Полный список для установки ниже, и webhooks.events.list Возвращается как JSON.

повторный

Неудачные поставки с экспоненциальным обратным выключением. После 15 последовательных отказов конечная точка автоматически отключается.

подпись

Каждая поставка подписывается. X-OpsIQ-Signature carries v2=<hex>и подписанная строка version.timestamp.delivery_id.body - не только тело. Всегда проверяйте и всегда перестраивайте струну точно. См. примеры ниже.

Защита SSRF

OpsIQ не будет передаваться в частную/внутреннюю IPs (127.x, 10.x, 172.16.x, 192.168.x, 169.254.169.254).

Доставка асинхронно

Веб-хуки доставляются через очередь вакансий, а не блокируют операции OpsIQ.

Стабильный идентификатор события

Каждое событие имеет уникальный event_id, который остается неизменным в разных запросах на дедупликацию.

Что приходит с каждой доставкой

X-OpsIQ-Event

Название мероприятия, например ticket.created.

X-OpsIQ-Delivery

Идентификатор доставки. Он остается неизменным в разных повторах - используйте его, чтобы игнорировать дубликат.

X-OpsIQ-Timestamp

Отклоните что-нибудь старше пяти минут.

X-OpsIQ-Signature

Подпись как v2=<hex>Раскол на кусочки =Левая сторона — это версия, правая сторона – это значение, которое вы сравниваете.

X-OpsIQ-Signature-Version

Используемая схема, в настоящее время v2Прочитайте его из заголовка, а не жесткого кодирования, и ваш код будет продолжать работать, если когда-либо будет добавлен v3.

⚠️
Подписанная строка является version.timestamp.delivery_id.bodyХеширование только тела является единственной наиболее распространенной причиной неудачи проверки - каждая подлинная доставка отклоняется, и конечная точка выглядит сломанной.

Проверка доставки

PHP · верифицируйте OpsIQ webhook
<?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 · проверить OpsIQ webhook
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 });
});

Каждое событие, которое может отправить установка

Создан из запущенной сборки, поэтому он всегда соответствует версии, в которой вы находитесь.

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 Этот список возвращается в виде JSON, поэтому ваш код никогда не должен его жестко закодировать.

аналитика (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.

торговля (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.

контакт (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.

смазывать (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.

электронная почта (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.

платеж (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.

безопасность (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.

билет (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.

Как проверить webhooks локально?+

Используйте ngrok для разоблачения локального сервера. Установите конечную точку веб-хука на свой ngrog URL.

Что делать, если конечная точка временно не работает?+

OpsIQ retries с экспоненциальным обратным выключением. Если ваша конечная точка восстанавливается в окне повторного запуска, никакие события не теряются.

разработчик

API-ключи

API Ключи аутентифицируют запросы к OpsIQ ПЕСТ API Каждый ключ имеет ограниченные разрешения.

API-ключи
API-ключиThe API Экран ключей: панель проблем с уровнем доступа и чипами масштаба, рядом со списком существующих замаскированных клавиш с кнопками отзыва.API-ключирабочее пространствоВыдать ключДоступЧитать толькоограниченныйСфера охватаcontacts.readtickets.readevents.writeКлючевой вопросТвои ключиИнтеграция Zapieropq_••••4f2aотозватьМобильное приложениеopq_••••91c7отозватьАналитика экспортopq_••••2db0отозвать1SCOPEDТолько для чтения или ограничен2PER-ACTIONВыберите точные рамки3REVOCABLEВ любое время
Настоящий API Экран ключей: выдайте ограниченный, только для чтения или ограниченный ключ, выбрав точные области применения и отмените любой ключ в любое время.

Создание API ключа

1
Перейти к настройкам > API Ключи

Навигация по API управления ключами.

2
Нажмите Создать ключ

Дайте ему описательное имя.

3
Выберите области

Сферы приходят в пары чтения и записи на область, поэтому интеграция отчетности может быть предоставлена считываниями и ничем другим.

Доступные области применения

Выберите самый узкий набор, который выполняет работу. admin Он удовлетворяет всем требованиям, приведенным ниже, поэтому используйте его только тогда, когда вам действительно нужен широкий доступ.

CRM. read/CRM-Script

Контакты, компании, сделки, мероприятия, сегменты, аутрич, конверсии, жизненный цикл и CRM-вебхуки.

Билеты. Читать / Tickets

Перечислите и прочитайте билеты и их сообщения; отвечайте, обновляйте, открывайте и запускайте операции по очередей.

Разговоры. read / conversations. write

Читайте разговоры в реальном времени и историю сообщений; отправляйте сообщения, назначайте и меняйте статус.

kb. read/kb. write

База знаний.

chat. read/chat-write

Сохраненные шаблоны ответов.

connectors.read

Посмотрите, какие разъемы установлены, что они могут сделать и протестируйте свои учетные данные.

automations.read

Посмотрите на ваши действия, триггеры и их историю.

departments.read

Отделы доступны для маршрутизации.

notifications.read

Уведомления для названного оператора.

analytics.read

Разделы докладов, CSV экспорт и определения плановых отчетов.

site_intelligence.read

Контролируемые сайты и их отчеты по SEO.

files.read

Подписанные ссылки для загрузки вложений.

status.write

Компоненты страницы статуса и инциденты.

писать

Помощники по написанию ИИ: проектировать, обобщать, переводить, переписывать, сочинять, анализировать.

админ

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

💡
Позвоните в Meta. actions с вашим ключом, чтобы узнать, какие именно действия он может выполнять на вашей установке. Это всегда надежнее, чем работать из списка.

Уровень доступа

Все

Ключ может называть все, что позволяют его рамки.

Читать только

От каждой записи отказываются, что бы ни говорили рамки. Самый безопасный выбор для отчетности, приборных панелей и всего того, что никогда не должно изменять данные.

ограниченный

Вы перечисляете точные действия, которые может вызвать ключ. Все остальное отказано даже в пределах допустимого объема.

4
Копировать ключ

Начнем с "opq_". Храните его надежно.

🚫
Никогда не делитесь API ключи в открытом коде, клиентская сторона JavaScript Или управление версиями. Используйте переменные среды.
разработчик

Подключите свой сайт

The OpsIQ Виджет - это JavaScript Сниппет, который вы добавляете на свой сайт для отслеживания, AI-чата, создания билетов и идентификации клиентов.

Как это работает
Подключите свой сайтОднострочный тег сценария слева и справа, веб-страница с пузырем OpsIQ в углу.<!-- paste before </body> --><script src="https://cdn.opsiq.io/w.js" data-site="ws_8a2f" async></script>
Подключите свой сайт

Базовая установка

Основной виджет snippet
<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.

Атрибуты конфигурации

data-site-key

Требуется. Ваш ключ от подключенных сайтов.

data-mode

Факультативный. "чат" (по умолчанию), "билеты", или "обе".

data-position

Факультативный. "внизу справа" (по умолчанию) или "вверху слева".

data-color

Необязательно. Первичный код цвета.

data-greeting

По желанию, первое приветствие.

data-language

Факультативный. Язык пользовательского интерфейса: "en", "es", "fr", "de", "pt", "ar" и т. д.

data-identity-token

Необязательно. Серверный подписанный токен идентификации.

Поддержка SPA

Ручной 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,
}]);

Правила SP

Правила CSP для виджета
script-src 'self' https://your-opsiq-domain.com;
connect-src 'self' https://your-opsiq-domain.com;
frame-src https://your-opsiq-domain.com;
Замедляет ли виджет мой сайт?+

Под 15 KB gzipped загружается асинхронизация после содержимого страницы.

Могу ли я настроить внешний вид?+

Используйте цвет данных для основного цвета. Контактная поддержка опций CSS override.

разработчик

Widget устанавливает рецепты

Руководство по установке для конкретной платформы.

Как это работает
Widget устанавливает рецептыПлатформы для установки карт WordPress, Shopify и Google Tag Manager Каждое слово указывает, куда добавить виджет.ВПWordPressУстановите плагин, введитеКлюч от сайта, сохраняйте.МагазинShopifyВставить фрагмент вТема. liquid перед /body.ГТММенеджер тэговПользовательский HTML тег, все страницы.
Установите рецепты

WordPress

Сценарий:
Добавить на все страницы a WordPress Сайт.
Что делать:

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

Сценарий:
Добавьте в свой Shopify магазин.
Что делать:

Online Store > Themes > Edit Code > Layout > theme.liquid. Paste before </body>. Save.

React / Next. js

Сценарий:
Добавить в React или Next. js приложение
Что делать:

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

Сценарий:
Добавьте в свою клиентскую область WHMCS.
Что делать:

Настройка > Общие настройки > Прочие > Глобальный контент Footer. Вставьте фрагмент. Или отредактируйте шаблон footer. tpl.

Google Tag Manager

Сценарий:
Добавить через GTM.
Что делать:

Создайте пользовательский HTML тег, вставьте фрагмент. Триггер: Все страницы. Опубликуйте.

разработчик

Виджет администратора в вашем бэкэнде (один контракт, любая платформа)

Вставить OpsIQ Административный ассистент — администраторский чат, почтовый ящик и AI Writing — внутри панели администрирования ВАШЕЙ собственной платформы, так что ваша команда никогда не покидает свои инструменты. SSO, это один типовой контракт, реализованный в ~15 строк серверного кода вашей платформы — та же схема, что и в Zendesk, Intercom и Discourse. SSO. Нет никакого плагина для каждой платформы, которого нужно ждать: любой стек, который может вычислить HMAC, может сделать это сегодня.

Step 1 — линия встраивания

из Удаленные сайты→Ваш сайт→Коды, копируйте линию загрузчика и добавляйте ее на страницы панели администратора (футер включает в себя шаблон макета или поле пользовательской JS только для администратора):

Однострочный встраиваемый
<script async src="https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=SITE_KEY&identity_token=TOKEN_FROM_STEP_2"></script>

Шаг вперед 2 — рассказывать OpsIQ Кто входит в систему (подпись сервера)

Только ВАШЕ приложение знает, в каком администраторе подписывается — это не недостаток, а модель безопасности. Ваш сервер генерирует недолговечный подписанный токен из вашей собственной сессии, точно так же, как маркер идентификации посетителя, подписанный с тем же секретом веб-хука сайта:

PHP · Подпишите идентификатор администратора с вашей сессии
<?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.
Per-admin доступ, автоматически

Every admin who logs into your platform is matched individually: OpsIQ's per-admin access gate resolves the token's username + email against one OpsIQ agent (Team page; use the agent's "match emails" list when platform emails differ) and applies THAT agent's workspace, department and inbox permissions. New staff member = add the agent in OpsIQ; no embed changes.

Роли катаются вместе

Любая строка роли, которую отправляет ваша платформа, отображается на OpsIQ сторона атрибуции; авторизация всегда исходит от OpsIQ Агентские записи, никогда не из заявленной роли.

Почему бы не прочитать наш логин cookie?

Браузеры никогда не отправляют cookie-файлы администратора в другое место — ни один поставщик не может «просто обнаружить» ваш домен входа. Каждый серьезный продукт решает это таким же образом: ваш сервер ручается, подписывается.

Нет общего режима на вашем собственном сайте

В хосте OpsIQ нет режима неподписанного или совместного входа: загрузчик остается скрытым до прибытия подписанного токена администратора. Значение токен=... в загрузщике кодов является ключом виджета, который только идентифицирует сайт; он никогда не может никого подписать.

SHOPIFY authenticated Флаг — поставьте его на ТОП-уровень

Этот флаг является утверждением вашего сервера о том, что человек действительно вошел в систему, и OpsIQ отказывается от любого токена без него. "authenticated" => true beside site_key/iat/expИ не только внутри admin Текущий OpsIQ принимает его в любой позиции, но старые версии читают только верхний уровень - и неудача обманчива: список разговоров, история и непрочитанное все аутентифицируют прекрасно, в то время как каждый чат поворачивает ответы «Admin login required» (необходимо войти)Если вы видите именно этот раскол, сначала проверьте этот флаг.

Гигиена токенов

Подпишитесь только на сервере, никогда в браузере JavaScript.сохраняйте экс-короткий (минуты до часов); OpsIQ Отклоняет просроченные и будущие токены, а подпись связывает токен с ключом вашего сайта.

Реализация ссылок

The WHMCS Модуль делает это автоматически WHMCS Административная сессия; Botble Мостовой файл разъема отеля делает это из сеанса Laravel (op=admin_identity). Оба являются просто этим контрактом на диалекте их платформы — копия в зависимости от того, что читается ближе всего к вашему стеку.

Проводка с нулевой страницей (проверка, объявленная соединителем)

Когда ваш разъем OpsIQ сохраняет конечную точку вашей личности в своем admin_identity_probe_url Настройка, линия загрузчика PLAIN - это все, что нужно вашим страницам администратора: виджет обнаруживает зонд от разъема, вызывает его с помощью ключа вашего сайта + токена виджета и автоматически аутентифицирует каждого администратора. data-identity-endpoint атрибут или window.OpsIQAdminIdentityEndpoint.

💡
Секрет подписания заполняется для вас. В удаленных сайтах, вашем сайте, кодах, опции 3, подписи в ваших сотрудниках каждый пример уже содержит собственный секрет этого сайта, поэтому код работает как вставлено: копировать или настраивать нечего. opsiq_whsec_YOUR_SITE_SECRET На своем месте каждый пример ищет OPSIQ_SITE_SECRET (или собственные настройки вашего фреймворка, названные в его примечаниях) сначала на сервере и использует их после установки, так что вы можете перемещать секрет из файла когда угодно, например, чтобы повернуть его без редактирования кода. В любом случае файл запускается только на вашем сервере: никогда не вставляйте его в веб-страницу или браузер JavaScript, и никогда не фиксируйте его в общедоступном хранилище, потому что любой владелец секрета может войти как любой из ваших клиентов или сотрудников. WHMCS и Ботбле не нужно ничего из этого: WHMCS крючок приходит с заполненным секретом, и панель соединителя Botble заполняет его в мост.

Полный код, платформа за платформой

Каждый пример печатает тег Admin Chat только для подписавшегося сотрудника, с добавлением подписанного токена и отвечает на обновление виджета (?opsiq_identity_refresh=1&role=adminс) {"success":true,"identity_token":"…"} или 401. Удаленные сайты, ваш сайт, коды, опция _3, вход в свой персонал печатает тот же самый код с вашего сайта ключ и секрет заполнены.

⚠️
The admin token is the two-part form: base64url(payload), a dot, then the hex HMAC-SHA256 of that base64url text. It is not a JWT, and a JWT is refused. The admin object needs id and email, and exp must be within 24 hours.

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>`)
}

Реализация конечной точки идентификации на Laravel (выигранные ноты)

Если ваша платформа Laravel (Botble, Bagisto, пользовательские приложения), а конечная точка - это отдельный файл, который загружает фреймворк для чтения администратора, три спецификации сэкономят вам часы - каждая из них произвела реальный производственный сбой до того, как она была изучена:

Обязательный запрос перед бутстрапом

Ваши поставщики услуг могут решить request из контейнера во время загрузки. Жизненный цикл Laravel связывает захваченную информацию с первой частью Kernel::handle() - отражать этот порядок: $app->instance('request', Request::capture()) раньше $kernel->bootstrap()Или ты получишь «Целевой класс не существует».

Префикс session-cookie - HMAC keyed

Современный Laravel префиксирует значения cookie с помощью HMAC вычисленных с помощью APP KEY (CookieValuePrefix) - равнина sha1(name."v2") Никогда не может сравниться с ним. CookieValuePrefix::validate($name, $decrypted, $keys), с структурным откатом (40 hex chars +) | на позиции 40). Tell: идентификатор сессии длиннее, чем 40 танков (81 = префикс все еще прикреплен) и сессию, которая загружается только _token В нем.

Где живет логин

Аут-штамп - это login_<guard>_<sha1(guard class)> - для веб-охраны по умолчанию: 'login_web_' . sha1(Illuminate\Auth\SessionGuard::class)Сканируйте любой login_* Цифровой ключ в качестве запасного для пользовательских охранников.

Отладка, как мост

Корабль debug=1 Режим, который называет неудачный STEP и исключение — слепой броск сделал недиагностируемым живое развертывание. Мост Botble (от v1.0.7) является эталоном: маркеры шагов в ядре /bind/bootstrap/decrypt/session/auth/db.

Laravel - полная конечная точка идентификации (копия, установка двух констант, выполненная)
<?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]);
}

Та же конечная точка на других стеках

Меняется только строка «кто вошел в систему?» — блок подписи везде идентичен. Знак на сервере, никогда в JavaScript.

WordPress · WHMCS · Symfony · простой PHP — обмен поиском, сохранение подписчика
<?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]);

Когда не получается — диагностируйте в таком порядке

Widget никогда не появляется, говорит консоль "Токен идентификации администратора требуется"

Конечная точка не вернулась identity_tokenОткройте конечную точку URL непосредственно в зарегистрированном админ-браузере с помощью &debug=1 На Laravel это почти всегда является обязательным для запросов или префиксом cookie-файлов выше.

История и разговоры работают, но каждый ход чата говорит: «Admin login required» (необходимо войти)

Классический раскол. Твой токен не хватает верхнего левеля authenticated флаг — собственная конечная точка виджета принимает токен, общий верификатор за потоком чата отказывается от него. "authenticated" => true beside exp.

"admin не провизирована в OpsIQ" (HTTP 401)

Токен проверен, но его имя пользователя + электронная почта не совпадают OpsIQ Добавить агента в OpsIQ → Команда или добавьте электронную почту платформы к списку адресов электронной почты этого агента, когда он отличается от их OpsIQ е-мейл.

Все 403s из браузера, но работает с завитками

Предполет CORS отклоняет один из заголовков вашего запроса. OPTIONS и перекликаются с запрашивающим происхождением или просто избегают пользовательских заголовков — виджет нуждается только в cookie.

Работал вчера, сегодня провалился

Проверить expВиджет автоматически перепроверяется, поэтому это обычно означает, что конечная точка перестала видеть сеанс — вращение ключа приложения, изменение драйвера сессии или изменение домена cookie.

💡
Виджет администратора скрыт до тех пор, пока не будет решена идентификация, и каждый вызов чата / входящего / данных выполняется на стороне сервера против согласованного OpsIQ Агент, независимо от того, что утверждает страница. Токен разблокирует пользовательский интерфейс; разрешения всегда приходят из OpsIQ.
разработчик

Идентификатор посетителя

Идентификационный номер связывает анонимных посетителей с известными клиентами. При идентификации OpsIQ связывает историю просмотра, чаты и билеты с профилем клиента.

Как это работает
Идентификатор посетителяПоток: пользователь входит на ваш сайт, вы выпускаете подписанный токен идентификации и OpsIQ Объединяют свои сеансы, чаты и билеты в один профиль.Пользователь logs inна вашем сайтеПодписанный токенIDITENCE_TOKEN (HMAC)Один профильsessions+ чаты+ билеты
Идентификатор посетителя

Два уровня идентичности, и когда каждому достаточно

Уровень 1 — неподписанный намек

Вы говорите виджету, кто посетитель с простой JavaScript Объект. Он заполняет электронную почту и идентификатор клиента в журнале посетителей, так что ваша панель приборов показывает входной трафик и сессии присоединяются. Это HINT: любой может отредактировать его в своем браузере, поэтому OpsIQ Никогда не публикует данные учетной записи о ее силе.

Уровень 2 — подписанный токен идентификации

Ваш сервер подписывает недолговечный токен с секретом веб-хука сайта. OpsIQ проверяет подпись и только после этого относится к человеку как проверенному клиенту. Это уровень, который разблокирует ответы учетной записи в чате клиента и поисках разъемов. Используйте его для чего-то, что незнакомец не должен видеть.

⚠️
Уровень 1 Это удобство отображения 2 Если на вопрос можно ответить только для реального владельца счета, вам нужен уровень 2.
💡
Вы не должны писать уровень 2 вручную: Удаленные Сайты → ваш сайт → Коды → C. Входящие клиенты генерируют код подписи и обработчик обновления для PHP, WordPress, Laravel, Node.js, Python, Django,.NET, Rails, Java и Go. WHMCS Крюк и Botble Идентификация говорит о том, кто такой клиент; их заказы или бронирование достигают чата через соединитель (с файлом моста только в тех случаях, когда платформа не имеет. API).

Уровень 1 — неподписанный намек

Установите объект ДО сценария виджета или позвоните в службу идентификации (), как только ваше приложение узнает, кто подписан. Обе формы прочитаны; используйте любую форму, которая соответствует вашей странице.

JavaScript - две поддерживаемые формы
<!-- 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.

Уровень 2 — подписанный сервером токен идентификации

Точно такой же токен контракта, как и виджет администратора, с customer Субъект вместо admin Подпишите его на сервере и передайте виджету. Две детали решают, проверяет ли он, и обе легко ошибиться:

The HMAC Покрывает строку BASE64URL, а не JSON

знак $payload64Нет. $payloadПодписывая сырой JSON, вы получаете токен, который выглядит правильно и каждый раз отклоняется с несоответствием подписи.

base64url, без прокладки

Переводить +/ то -_ и раздеть = Обычная база 64 выживает сегодня; базовая 64url является контрактом и тем, что излучает каждый верификатор OpsIQ.

Аутентификация идет на уровне ТОП

Рядом site_key, iat и expЭто ваше утверждение, что реальный человек зарегистрирован и OpsIQ отказывается от токена без него.

Customer. id является обязательным

Токен, содержащий только электронное письмо, проверяется как подпись и затем молча падает.

Держите экс коротким

Токен - это утверждение сеанса, а не учетные данные для хранения.

PHP - подписывайте токен идентификации клиента (этот точный код проверяется)
<?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>';
🚫
Знак только на сервере. Токен, отчеканенный в браузере JavaScript означает доставку секрета сайта каждому посетителю, что дает любому возможность выдать себя за любого клиента.

Тот же самый контракт, три поверхности

Клиентский чат на вашем сайте

Тема клиента, переданная как identity_token widget. php. Охватываемая выше. Факультативно: с помощью фрагмента А и разъема чат уже проверяет самих клиентов (номер бронирования или заказа с доказательством или код по электронной почте перед заказом). Удаленные сайты, коды, C генерирует код для автоматического распознавания клиентов, уже зарегистрированных на вашем сайте.

чат администратора внутри вашего бэкэнда

admin subject, pass to opsiq/embed/admin_widget. php. Тот же подписчик, другой ключ темы. См. раздел "Виджет администратора в бэкэнде".

Поддержка портала Deep Link

Более строгий вариант: те же утверждения плюс jti и single_use:true, а также 120-вторая жизнь, потому что жетон путешествует в URL Настройки, Портал поддержки имеет готовый фрагмент для вашего языка, и платформа создает его для вас, когда ваша учетная запись работает на этом сервере.

Что делать, если посетитель очищает печенье?+

Они становятся анонимными до тех пор, пока не будут идентифицированы снова. OpsIQ связывает новую анонимную запись с профилем клиента в тот момент, когда появляется подсказка или токен.

Почему мой токен проверяет журнал посетителей, но не на вопросы учетной записи?+

Это и есть уровень 1 Уровень 2 Неподписанный намек заполняет журнал посещений и ничего больше. Ответы на счета требуют проверенной подписи.

разработчик

Вход на портал: код для каждой платформы

Отправьте клиенту, который уже подписался на ваше приложение прямо в ваш портал поддержки, вошел без второго пароля. На этой странице объясняется, как работает передача, каждое требование в токене, настройка и полный маршрут для каждой платформы. Настройки, Портал поддержки печатает тот же код с собственным адресом портала и заполненным ключом рабочего пространства.

Как это работает

1
Клиент нажимает Поддержка в вашем приложении

Ссылка указывает на небольшой маршрут на ВАШЕМ сервере, например /support-portal. Никогда по ссылке, которая уже содержит токен: токены в странице просачиваются через источник страницы, историю браузера и заголовок Реферера.

2
Маршрут проверяет, кто в него входит

Он читает клиента с вашей собственной сессии. Посетитель, который не подписался на него, сначала отправляется в ваш логин и возвращается на маршрут позже.

3
Маршрут подписывает одноразовый токен

Стандартный HS256 JWT подписан секретом подписи этого рабочего пространства, который удерживает только ваш сервер. Он истекает через 120 секунды и может использоваться один раз.

4
Маршрут перенаправляется на портал

На страницу портала клиент пришел, когда портал попросил один (opsiq_portal_return, принимается только внутри вашего адреса портала), в противном случае на портале домой. Ответ несет Реферер-Политика: no-реферер и Cache-Control: no -магазин.

5
Портал проверяет и подписывает клиента в

Проверяется подпись, ключ рабочего пространства, срок действия и одноразовый идентификатор. Клиент найден или создан по электронной почте и его существующие запросы совпадают с ними.

Токен, иск по требованию

site_key

Токен, созданный для другого рабочего пространства, отклоняется даже при правильной подписи.

йет/экс

Выдается и истекает через секунды. Портал токена живет 120 секунд: ему остается пережить только одно переадресацию.

Аутентификация: True

Ваше приложение заявляет, что оно действительно подписало этого человека.

jti + single_use: истинно

Случайный идентификатор и одноразовый флаг. Одна и та же ссылка не может использоваться дважды.

платформа

Бесплатный ярлык для того, откуда пришел клиент (php; wordpress, whmcs... показаны в профиле клиента.

customer. id и customer. email

Идентификатор - это собственный идентификатор клиента вашего приложения; электронная почта - это то, как портал находит клиента и соответствует его запросам.

Имя пользователя / external_id

Факультативное отображаемое имя и id OpsIQ хранит на вашей платформе.

Настройка

1
Копировать маршрут

Настройки, Портал поддержки, Бесшовная входная запись из вашего приложения. Выберите то, на чем работает ваше приложение; код ниже списка имеет ваш адрес портала и ключ рабочего пространства, заполненный пронумерованными заметками для этой платформы.

2
Секрет уже в коде.

Копированный маршрут содержит секрет подписи рабочей области, поэтому он работает как вставленный. Чтобы не включать его в файл, установите на сервере OPSIQ_SITE_SECRET (или параметры вашего фреймворка): это значение используется первым. Никогда не помещайте маршрут на страницу, JavaScript, мобильное приложение или общедоступное хранилище: любой владелец секрета может войти под любым клиентом.

3
Свяжите кнопку поддержки с маршрутом

Например, https://your-app.com/support-portal.

4
Сделайте вход на портале в кнопке используйте свое приложение

Portal Studio, страница входа в систему, используйте логин моего сайта, вашу страницу входа URL: Настройте его на тот же маршрут. Портал добавляет opsiq_portal_return Сама по себе и маршрут возвращает клиента на эту страницу, зарегистрировавшись.

5
Вариант: подписывайтесь везде

Настройки, Портал поддержки, Выйти везде: выписка вашего приложения URL, поэтому при выходе из портала также выдает подпись клиенту из вашего приложения.

6
Тест

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

WHMCS Код не нужен: WHMCS Крюк с удаленных сайтов уже подписывает клиентов на портале и возвращает их на страницу, на которой они были.
💡
Секрет подписания заполняется для вас. В Настройках, Портале поддержки, Безотказном входе в приложение каждый пример уже содержит собственный секрет этого сайта, поэтому код работает как вставленный: копировать или настраивать нечего. Примеры на этой странице показывают opsiq_whsec_YOUR_SITE_SECRET На своем месте каждый пример ищет OPSIQ_SITE_SECRET (или собственные настройки вашего фреймворка, названные в его примечаниях) сначала на сервере и использует их после установки, так что вы можете перемещать секрет из файла когда угодно, например, чтобы повернуть его без редактирования кода. В любом случае файл запускается только на вашем сервере: никогда не вставляйте его в веб-страницу или браузер JavaScript, и никогда не фиксируйте его в общедоступном хранилище, потому что любой владелец секрета может войти как любой из ваших клиентов или сотрудников. WHMCS и Ботбле не нужно ничего из этого: WHMCS крючок приходит с заполненным секретом, и панель соединителя Botble заполняет его в мост.

Полные маршруты, платформа за платформой

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)
}

Когда что-то не так

Портал открывается, но подписывается

Секретный ключ или ключ рабочего пространства не соответствует этому рабочему пространству, токен старше 120 секунд (проверьте часы сервера), или одна и та же ссылка была открыта дважды. Создать подписанную тестовую ссылку: если это работает, сравните претензии вашего токена с примером.

Всегда на портале дома

Обратный адрес не был внутри вашего портального адреса, поэтому он был проигнорирован специально. Сравните его с Порталом URL, показанным в Настройках.

Гости получают ошибку вместо входа в систему

Замените /login в маршруте на реальной странице входа и убедитесь, что ваш логин возвращается к указанному адресу.

Работает только для некоторых клиентов

customer. email или customer. id для них пусто.

разработчик

Клиентский чат: распознайте зарегистрированных клиентов

Необязательно. Большинству сайтов это не нужно: с помощью простого фрагмента чата и разъема, чат проверяет самих клиентов, с номером бронирования или заказа плюс доказательство для поиска и отправленный по электронной почте код перед заказом. Добавьте это, когда вы хотите, чтобы клиент, который уже вошел на ваш сайт распознается автоматически, со всей своей учетной записью. WHMCS уже делает это через свой крюк. Удаленные сайты, ваш сайт, Коды, C печатает тот же код с ключом вашего сайта заполнены.

Как это работает

1
Ваша страница печатает тег чата

Для зарегистрированного клиента виджет URL содержит &identity_token=…, подписанный на вашем сервере; для гостя это простой тег. На странице нет ничего секретного: только токен, срок действия которого истекает.

2
Чат проверяет токен

Подпись, ключ рабочего пространства и истечение срока действия. Затем клиент известен по каждому запросу чата, и ваш разъем может ответить о своих заказах, бронированиях или счетах-фактурах.

3
Чат освежается до того, как час настал

Он вызывает страницу, на которой он находится с?opsiq_identity_refresh=1&role=customer. Ваш код отвечает {"success":true,"identity_token":"…"} при входе клиента в систему или 401 с {"success":false,"login_required":true}, когда они не являются таковыми. Вот почему обработчик обновления должен быть запущен до того, как ваша страница что-либо напечатает.

Чем отличается от портала токен

пожизненный

Один час (exp = iat +) 3600) вместо 120 секунды, потому что он выполняет каждый запрос чата вместо одного перенаправления.

Нет джти или single_use

Один и тот же токен используется для каждого сообщения, пока обновление не заменит его.

То же самое и со всем остальным

site_key, iat, exp, аутентифицировано: true, platform, and customer with required id and email.

💡
Их заказы, бронирование или счета-фактуры доходят до чата через соединитель: тот, который вызывает API, или, когда у вашей платформы нет API, соединитель плюс его файл моста (конструктор соединителей делает один).
💡
Секрет подписания заполняется для вас. В удаленных сайтах, вашем сайте, кодах, C каждый пример уже содержит собственный секрет этого сайта, поэтому код работает как вставленный: копировать или настраивать нечего. opsiq_whsec_YOUR_SITE_SECRET На своем месте каждый пример ищет OPSIQ_SITE_SECRET (или собственные настройки вашего фреймворка, названные в его примечаниях) сначала на сервере и использует их после установки, так что вы можете перемещать секрет из файла когда угодно, например, чтобы повернуть его без редактирования кода. В любом случае файл запускается только на вашем сервере: никогда не вставляйте его в веб-страницу или браузер JavaScript, и никогда не фиксируйте его в общедоступном хранилище, потому что любой владелец секрета может войти как любой из ваших клиентов или сотрудников. WHMCS и Ботбле не нужно ничего из этого: WHMCS крючок приходит с заполненным секретом, и панель соединителя Botble заполняет его в мост.

Полный код, платформа за платформой

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>`)
}

Когда что-то не так

Чат рассматривает зарегистрированного клиента как гостя

Тег был напечатан без identity_token (секрет отсутствует на сервере, поэтому код не закрывается), или ключ рабочего пространства токена или секрет не совпадают.

Сначала его признали, а через час — гостем.

Обработчик обновлений не достигнут: он должен работать до любого вывода, на каждой странице чата.

Обычный чат показывает дважды

Удалите простой тег чата из шаблона: этот код печатает сам чат.

разработчик

Плагины и SDK

OpsIQ обеспечивает SDK Пакеты и плагины для общих платформ.

Как это работает
Плагины и SDKЧетыре пакета: PHP SDK Node.js SDK, WordPress плагин и WHMCS Модуль, каждый со своей установочной командой.PHPPHPSDKКомпозитор требует opsiq/sdkСССNode. js SDKнпм в @opsiq/sdkВПWordPress плагинOne-click install & connect скачатьЧТОWHMCS модульАддон для выставления счетов + ретрансляция билетов
Плагины и SDK
PHPSDK

Композиторский пакет: генерация токенов идентичности, действия API помощников, проверка подписи веб-хука.

JavaScript SDK

Браузерная сторона: отслеживание, идентификация, пользовательские события, контроль чата.

WordPress плагин

Впрыск виджета, идентификация с сеансов пользователя WP, синхронизация WooCommerce.

WHMCS модуль

Полная интеграция: виджет, ретрансляция билетов, идентификация, админ AI.

Shopify расширение темы

Приложение встроено с автоматической идентификацией клиента.

PHP SDK быстрый запуск

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);
разработчик

Обзор API, события и автоматизация без разъемов

Survey Studio предназначена для использования однотипного General. API, внутренний исполнитель, автобус событий и операции веб-хука как остальная часть OpsIQ Это позволяет разработчикам интегрировать с конца до конца без создания упакованного разъема.

⚠️
Статус реализации: в каталоге пока выставлены только platform.get.survey.config и platform.save.survey.config- Это surveys.* и feedback.* семьи ниже являются утвержденным целевым контрактом и должны вернуться unknown_action до регистрации.

Целевые действия семей

Типы, шаблоны и быстрый запуск

surveys.types.*, surveys.templates.* и surveys.quick_launch.* список, предварительный просмотр, инстантирование и проверка полных стартеров.

Опросы и версии

surveys.create|get|list|update|archive|duplicate плюс неизменяемая версия, проверка и публикация действий.

Развертывание и целенаправленная деятельность

surveys.deployments.*, surveys.links.*, surveys.audiences.*, surveys.triggers.* и surveys.variables.*.

Пропаганда и ответы

surveys.invitations.*, surveys.campaigns.*, surveys.recipients.*, surveys.responses.*экспорт, редактирование и аналитика.

Webhooks, импорт и обратная связь

surveys.webhooks.*, surveys.imports.*, feedback.items.*, feedback.analytics.*, feedback.sources.* и feedback.analysis.*.

Поток без коннекторов

1
Создавать и публиковать через Генеральную API

Используйте типизированные опросы.* действия с помощью ключа, привязанного к рабочему пространству. Пишет заявление о разрешении, риске, подтверждении, идемпотентности и сухом поведении.

2
Получите свое деловое событие

Отправьте подписанное событие в входящий веб-хук, например отмену заказа или завершенный этап посадки. Защита повторного воспроизведения дублирует идентификатор события.

3
Картографируйте это в Actions & Triggers

Выберите OpsIQ Генерал API действия, такие как выдача приглашения на опрос или подготовка кампании, а затем картографирование полей из проверенной полезной нагрузки триггера.

4
Подписаться на события опроса

Доставьте документированный бизнес-безопасный опрос.* Подмножество жизненного цикла в конечную точку с подписью, фильтром, повторным просмотром, журналом и авторизованной переигровкой.

Каноническая цель мероприятия

Общий каталог будет охватывать состояние публикации опроса / развертывания, аудиторию и триггерные решения, приглашения, рендер / запуск / частичное / резюме / полное / оставление, редактирование ответа, состояние кампании и сбои доставки. Высокообъемная фокусировка, прокрутка и время вопросов остаются в хранилище Survey Analytics, если явно не задокументированы для фанатов.

Разъем необязателен. Он добавляет многоразовое обнаружение платформы, проверенную личность, факты, переменные и перечисление получателей. Общий API плюс Actions & Triggers/webhooks остается полным путем интеграции для разработчиков, которым не нужен упакованный разъем.
разработчик

ОСТАЛЬНЫЕ API

The OpsIQ ПЕСТ API Позволяет программно получить доступ ко всем функциям платформы.

Как это работает
ОСТАЛЬНЫЕ APIТерминал, показывающий POST на OpsIQ API с ключом Bearer, листингом открытых билетов и страницей JSON Ответ.$ curl -X POST https://your-domain.com/api/v1.php \-H "Authorization: Bearer opq_..."200 ОК{ "data": [{ "id": 4192, "ticket_number": "T-4192","subject": "Card declined", "status": "open" },... more tickets ...], "page": 1, "per_page": 50, "has_more": true }
ОСТАЛЬНЫЕ API

Формат запроса

Отправьте ключ как Authorization: Bearer opq_... или X-OpsIQ-Key: opq_...Используйте один заголовок аутентификации, не оба.

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"
}

Общие действия

API основан на действии: отправьте action Каждое зарегистрированное администратором JSON действие имеет стабильное названное действие. {"action":"meta.actions"} (не требуется ключ) для авторитетного перечня на установку, контракта запроса, метаданных о рисках и объема. platform.routes.* Мост остается только для более старых интеграций.

crm.contacts.list

Перечислите контакты CRM (scope crm. read). Парамы: q, статус, источник, тег, свинцовый балл, лимит.

crm.contacts.upsert

Разрешите или создайте контакт (scope crm. write). Парамы: электронная почта плюс поля, теги, заметки.

crm.deals.list

Перечислите CRM-сделки (scope crm. read). Парамы: status, stage_id, company_id , owner_admin_id.

crm.activities.record

Запись жизненного цикла / деловой активности для контакта (scope crm. write). Парамы: электронная почта или contact_id, событие, стоимость, валюта.

crm.conversions.record

Запись конверсии (scope crm. write). Парамы: contact_id или email, conversion_type, value, currency.

crm.events.list

Опросить поток событий CRM (scope crm. read). Парамы: лимит.

tickets.list

Перечислите билеты (scope ticket. read). Парамы: страница, per_page, сортировка, заказ, статус, приоритет, department_id, assigned_admin_id , client_email, поиск.

tickets.get

Один билет и его сообщения (scope ticket. read). Параммы: Ticket_id или ticket_number, include_messages, messages_limit.

tickets.reply

Отправить ответ на тикет (область tickets. write). Параметры: ticket_id или ticket_number, body, author_type, author _name, internal.

tickets.update

Обновить билет (scope ticket. write). Парамы: Ticket_id или ticket_number, status, priority, subject, department_id, assigned_admin_id.

tickets.open

Откройте билет поддержки (scope ticket. write). Парамы: customer_email, customer_name, Subject, body, priority.

tickets.bulk

Запуск операции очередей навалом (scope ticket. write). Парамы: операция, идентификаторы.

conversations.list

Перечислите разговоры в реальном времени (scope conversations. read). Парамы: страница, per_page, status, assigned_admin_id, client_email, поиск.

conversations.get

Один разговор и его сообщения (scope conversations. read). Параматы: talk_id или thread_key, include_messages.

conversations.messages

Страница истории сообщений (scope conversations. read). Парамы: conversation_id, page, per_page, include_internal.

conversations.send

Отправьте сообщение в разговор (scope conversations. write). Парамы: conversation_id, message, sender_type, internal.

conversations.update

Назначение, повторное присвоение статуса или повторный наименование разговора (scope conversations. write). Парамы: conversation_id, status, assigned_admin_id.

connectors. list/. get/. test

Посмотрите, какие разъемы установлены, что каждый может сделать и работают ли его учетные данные (обзор разъединиц. читать).

automations.actions.list

Действия, которые будет выполнять ваш конструктор действий (обзор автоматизации. read).

automations.triggers.list

Что будет возгораться и на каких условиях (протокол автоматики. читать)

automations.runs.list

История исполнения для отладки интеграции (scope automations. read). Парамы: status, action_key.

departments.list

Отделы, в которые вы можете направить билет (scope Departments. read).

notifications.list

Уведомления для одного оператора (scope notifications. read). Парамы: admin_id (обязательно), unread_only.

analytics.export

Раздел отчета как CSV (scope analytics. read). Парамы: раздел, предустановленный, от, до. Позвоните в Analytics. sections. list для корректных значений.

site_intelligence. sites. list/. reports. list

Мониторинг сайтов и их отчетов по SEO (scope site_intelligence. read).

commerce. products. list/. get

Каталог вашего магазина, стр. (scope commerce. read). Фильтры: активные, категория, поиск. .get Возвращает один продукт с его вариантами.

commerce. orders. list/. get

Заказы на магазин (scopecommerce. read). Фильтры: status, payment_method, channel, customer_email. order_id или его ОРД-ссылка, с элементами линии. Ручка кассы в прямом эфире никогда не возвращается.

commerce.refunds.list

Запросы на возврат средств и их состояние (scope commerce. read).

commerce.quotes.create

Цена товара для клиента (scope commerce. write). store или соединительный слаг. Ничего не создает: ни заказа, ни оплаты. См. раздел Торговля.

Билеты.csat. list/. get/. metrics

Ответы на вопросы удовлетворенности клиентов в виде данных (scope ticket. read). Фильтр по рейтингу, билету, агенту или периоду; .metrics возвращает те же номера, что и приборная панель.

conversations.ratings.list

Чат-общения, которые ваши посетители оценили, с комментарием, что побудило рейтинг и агенту кредитовать (scope conversations. read).

knowledge.articles.list

Страница через ваши статьи в справочном центре (scope kb. read).

knowledge.articles.get

Одна статья справочного центра по id (scope kb. read). Парамы: article_id.

webhooks.events.list

Каждое событие, на которое вы можете подписаться, имеет свою полезную нагрузку. Доступно для каждого плана, поэтому вы можете построить против него перед покупкой.

files.get

Краткосрочная подписанная ссылка для загрузки вложения (scope files. read). Парамы: ссылка, ttl.

security.check

Спросите, является ли IP или электронная почта заблокирована или подозрительна здесь (scope security.read).IP брандмауэр, блок-лист спама билетов и кэшированный вердикт по безопасности. ip По электронной почте.

security.report

Сообщайте о злоупотреблениях в вашей системе (scope security. write). Записанные как событие безопасности, классифицированные Security AI немедленно, и администраторы оповещаются о решениях с высоким риском. Парамы: ip, электронная почта, вид, причина, источник.

security. blocklist. add/. list

Управляйте правилами спама, которые обеспечивает билетный конвейер (scope security. write/security. read). Тот же магазин, что и контроль страницы Билетов «Отправитель блоков». Парамы: вид (электронная почта, домен, ip), стоимость, причина, истекает_часы.

💡
Meta. actions всегда авторитетен. Он возвращает все доступные действия в вашей установке с объемом, который нужен каждому, поэтому вам никогда не придется угадывать или жестко кодировать этот список.

Пейджинг, фильтрация и сортировка

Каждое действие списка использует одни и те же параметры, поэтому вы узнаете их один раз.

Страница / _page

Page number starting at 1, and page size. Default 50, maximum 200. limit and offset are also accepted if you prefer them.

Сортировка / заказ

Поля для сортировки по ас или деск (default desc). Каждое действие принимает фиксированный набор типовых полей; все остальное игнорируется, а не ошибается.

filters

Отправляйте фильтры как объект, или пропускайте фильтр как параметр верхнего уровня. Неизвестные фильтры игнорируются.

Что возвращается

Элементы, страница, per_page, счет, сумма и имеет больше. Продолжайте запрашивать страницы до тех пор, пока не будет больше ложных.

Страница, фильтрованный, отсортированный запрос списка
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
}

ошибки

Каждый отказ возвращается в той же форме, с устойчивой кондицией. code Не сравняйтесь по читабельному человеку. error текст, который может быть переформулирован.

Ответ на ошибку
{
  "success": false,
  "code": "missing_scope",
  "error": "API key missing required scope. Needed one of: tickets.read, admin",
  "request_id": "req_8f2c1a9d4b7e"
}
Недостающий_api_key/invalid_apI_key

Ключ не был отправлен, или ключ неправильный или истек. HTTP 401

missing_scope

Ключ действителен, но не имеет объема, необходимого для этого действия. HTTP 403.

read_only_key/action_restricted (недоступная ссылка)

Ключ только для чтения, или это действие не в списке разрешений. HTTP 403.

unknown_action

Нет такого действия. Вызовите meta. actions для текущего списка. HTTP 400.

Недостающий_параметр/недействительный_парампература

Необходимый параметр отсутствует или значение не принимается. HTTP 400.

not_found

Записи не существует или нет в рабочем пространстве, который может видеть этот ключ. HTTP 404

plan_feature_locked

Ваш план не включает в себя функцию, которой это действие принадлежит. feature, the plan_name в силу и a upgrade_urlПерезагрузка не поможет; план должен измениться. HTTP 402

license_required

Лицензия на установку не активна, поэтому никакие действия не будут выполняться до тех пор, пока она не будет восстановлена.402.

selling_paused

Специфика торговли: магазин выключен, поэтому ничего нельзя процитировать или заказать. HTTP 400

rate_limited

Почасовой лимит для этого ключа исчерпан. HTTP 429.

server_error

Что-то не получилось на нашей стороне. Запрос_id идентифицирует попытку, если вам нужно сообщить об этом. HTTP 500.

Безопасные повторы

Если выписано время, то не можете сказать, приземлилось ли оно. idempotency_key повторение одного и того же вызова возвращает исходный результат вместо выполнения работы дважды.

Идеальный писатель
{
  "action": "tickets.reply",
  "ticket_id": 4192,
  "body": "Thanks, that is now fixed.",
  "idempotency_key": "your-unique-id-for-this-attempt"
}
Сколько длится

Ключ запоминается для 24 против одного и того же действия и API Ключ.

Что ты получишь назад

Оригинальный ответ плюс idempotent_replay: правда, так что вы можете сказать, что это была повторная игра.

Неудачи остаются ретрейблируемыми

Запомнились только успешные записи. Если звонок не удался, отправка его снова с тем же ключом запускает его снова, чего и хочется.

читать

Чтения игнорируют ключ. Повторение чтения безвредно.

Тестирование без изменения ничего

Добавить dry_run: true Ваш ключ, области и параметры проверяются в точности как обычно, затем вызов прекращается до того, как что-либо будет создано или изменено.

Сухой бег: безопасно проверяйте учетные данные и полезную нагрузку
{
  "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."
}
Используйте dry_run, пока вы строите. Это самый быстрый способ подтвердить, что ключ имеет правильные области применения и ваша полезная нагрузка сформирована правильно, без создания тестовых данных, которые вам затем нужно очистить.

Ограничения по ставкам

Ограничение по ключу

Настраиваемый почасовой лимит на API ключ (по умолчанию) 1000 Запросы в час. Установите его на ключ в разделе Настройки,API Ключи.

Когда превышен

HTTP 429 с кодовой скоростью_limited, плюс заголовок Retry-After, сообщающий вам, сколько секунд ждать. Предел сбрасывается в верхней части следующего часа.

Знать, где ты стоишь

Каждый ответ несет X-RateLimit-Limite, X- RateLimit-Remaining и X- RateLimIT-Reset (временная метка Unix). Наблюдайте за Оставанием и замедлением перед тем, как вы закончите, а не ждете отказа.

рассказывать 429 из 401

А. 429 Это значит ждать и пробовать снова. 401 Это означает, что сам ключ неправильный или просрочен, поэтому повторная посадка не поможет, пока вы не исправите ключ.

Предаутентичная охрана грубой силы

Повторяющиеся попытки неудавшейся проверки от одного IP заглушаются отдельно.

Лучшая практика

Отступите, когда Remaining станет низким, и почитайте Retry-After после 429 вместо того, чтобы сразу же повторить.

Версии и стабильность

Текущая версия

v1. Каждый ответ несет X-OpsIQ-API- Версия и Икс.OpsIQ-API Статус, чтобы вы могли подтвердить то, с чем говорите.

Как вас будут предупреждать

Если версия когда-либо выйдет на пенсию, ответы получат стандартные заголовки Deprecation и Sunset, а сообщения meta. actions будут обесценены и sunset_at. Проверьте их в своем мониторинге, и вы никогда не будете удивлены.

Что не изменится

Новые действия и новые дополнительные поля могут быть добавлены в любое время, поэтому игнорируйте поля, которые вы не узнаете, а не выйдете из строя на них.

Полная интеграция, начало заканчиваться

Это весь цикл: найдите работу, прочитайте ее, действуйте по ней и подтвердите то, что вы сделали.

Полный рабочий процесс билета через 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}
💡
Все вышеперечисленное работает одинаково для разговоров: conversations. list, conversations,get, conversationSend и conversations... update следуют одному шаблону, параметрам и форме ответа.

Более популярные примеры

Каждый из них представляет собой полную, бегущую часть реальной интеграции, а не фрагмент.

Страница через каждую запись на трех языках

Правило везде одинаковое: продолжайте спрашивать следующую страницу, пока не появится новая страница. has_more Никогда не угадывай полного.

Python - страница каждого открытого билета
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 - страница через каждый лид
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 - страница в каждом открытом билете
<?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"]));

Обработка каждого отказа API может вернуться

Ветка на codeНикогда в формулировках errorЭта обертка представляет собой весь контракт в одной функции.

Python — клиент, который обрабатывает каждый код ошибки правильно.
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")

Ответить на плохой балл удовлетворенности в течение часа

Читайте низкие баллы, открывайте билет на каждый и никогда не действуйте дважды.

Закройте петлю на несчастных клиентах
# 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.

Процитируйте пункт и действуйте на ответ продавца

Отказ, который подскажет вам, что собирать
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 }
}
⚠️
Показать клиенту totals.total Количество не всегда умножает цену единицы — отель котирует один номер на три ночи — поэтому цифра, которую вы рассчитываете сами, может отличаться от того, что продавец фактически взимает.

Приемник Webhook, который безопасен для запуска в производстве

Проверяйте, раздувайте, быстро отвечайте, затем делайте работу. Поставки повторяются, поэтому одно и то же событие может прибыть не один раз.

PHP · приемник webhook в форме производства
<?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

Планы и права

Каждое действие принадлежит продукту, и ваш план решает, какие функции у вас есть. Если в вашем плане нет функции, действие отвечает на ваши вопросы. 402 — после того, как ваш ключ проверен, так что неаутентифицированный абонент ничего не узнает о вашем плане, и до того, когда что-либо будет создано, поэтому блокировка никогда не происходит наполовину.

Заблокированные планом действия
{
  "success": false,
  "code": "plan_feature_locked",
  "feature": "commerce",
  "plan_locked": true,
  "plan_name": "Growth",
  "upgrade_url": "https://…",
  "request_id": "req_8f2c1a9d4b7e"
}
Как отличить его от проблемы с разрешениями

А 403 Это означает, что ключ слишком узкий — переиздать его с правильным объемом и он работает 402 Это означает, что у ACCOUNT нет функции — ни один ключ не может ее разблокировать, план должен измениться.

Не перезаписывайте 402

Это не временно. Поверхность upgrade_url Тот, кто владеет счетом вместо того, чтобы отступать и пытаться снова.

Область применения Admin не обгоняет ее

Сферы выражают то, что делегировано ключевым эмитентом; план выражает то, сколько приобрела учетная запись. Ключ с администраторской шифрограммой все еще получает 402 для функции, которой не хватает в плане.

Узнать, прежде чем отправиться на корабль

SHOPIFY feature Каждое действие должно быть опубликовано в каталоге действий ниже и в meta.actionТаким образом, вы можете проверить время сборки, а не открывать его в производстве.

Самый быстрый способ увидеть, где находится ключ meta.meОн сообщает о действующем плане, каждой функции, которую он несет, и каждое действие этот ключ не может вызвать с причиной для каждого.

Мета. me - что может сделать этот ключ
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"
    }
  }
}
Сначала позвоните в meta. me, когда интеграция ведет себя по-разному между двумя установками. Он отвечает «почему этот ключ не может этого сделать» в одном запросе, без того, чтобы кто-либо открыл админ.

Цитировать цену

commerce.quotes.create Он не создает ничего — ни заказа, ни платежной сессии, ни удерживаемых запасов — поэтому можно безопасно звонить, пока клиент все еще решает.

Процитировать статью
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"}}
Торговец выигрывает все

Для подключенной платформы общая сумма исходит от этого продавца и никогда не пересчитывается здесь. Количество не всегда умножает единичную цену - отель цитирует один номер на три ночи - так что покажите общую сумму, которую вам дали, а не ту, которую вы разработали.

Отказы говорят вам, чего не хватает

Если продавец нуждается в большем от клиента, вы получаете quote_refused с а missing Список, называя поля для сбора и собственные формулировки продавца показать.

Заказ не является вызовом API

Подтверждение происходит там, где клиент - подписанная карта в чате или собственный кассовый сбор продавца - никогда не проходит через этот API. ordering.

Когда продажа приостановлена

Если магазин выключил продажу, процитируйте ответы selling_paused Вместо того, чтобы покупать то, что никто не может купить.

Другие конечные точки

Почти все, что вам нужно, это один пост для /api/v1.phpЭто исключения, и для чего они нужны.

/api/v1/openapi.php · /api/v1/postman.php · /api/docs/

Машинный контракт и человеческая ссылка. Не нужны ключи, так что вы можете исследовать их до того, как они у вас появятся.

/api/ai_stream.php

Сервер-отправленные события для ответов в чате по мере их генерации. Поток, а не действие JSON.

/api/writing.php

Старая конечная точка написания ИИ. Все, что она делает, также доступно как writing.* /api/v1.php,, где должна быть выполнена новая работа.

/api/inbox_copilot.php

Составление, переписывание и сортировка для ящика билетов, встроенного в ваш собственный администратор.

/api/v1/si/…

Site Intelligence как небольшой REST API — сайты, сканы, проблемы, ключевые слова, доход — для трубопроводов CI, которые хотят начать сканирование после развертывания и прочитать результат.

/api/connectors.php?slug=&token=

Там, где подключенная платформа POST предоставляет вам свои собственные веб-хуки. Токен отчеканен при включении разъема.

/api/integrations/*.php

Механизм интеграции: запуск и подтверждение действий, а также проглатывание продаж, идентификации и событий путешествия. Он использует свой собственный ключевой тип, выпущенный под API & Webhook builder.

💡
Все они подчиняются тем же правилам плана, что и действия. Особенность вашего плана не включает в себя ответы 402 И здесь, в той же форме.

Каждое действие, с тем объемом, который ему нужен

Этот список формируется из каталога, поэтому он всегда соответствует версии, в которой вы находитесь. meta.actions возвращает ту же информацию, что и JSON.

2420 named actions: 804 reads, 1616 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: 606; 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

аналитика (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

болтать (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

торговля (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 demo readiness and merchant go-live readiness

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

смазывать (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.

клиенты (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

электронная почта (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

хр (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

б (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.

метать (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

платформа (926)

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.midmarket.operations

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Midmarket Operations

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.supply.chain

Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Supply Chain

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

безопасность (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

статус (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.

обследования (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.

команда (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

билеты (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

веб-хулиган (1)

webhooks.events.list

Read. Scope: webhooks.read, crm.read, admin. Contract: explicit. List outbound webhook events and their payloads

писать (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.

Доступны ли OpenAPI и Postman?+

Да, созданный OpenAPI 3.0 Документ находится на /api/v1/openapi.php, Коллекция Почтальона находится в /api/v1/postman.php, И человекочитаемые документы разработчика находятся в /api/docs/.

Как работать с более чем одним рабочим пространством?+

Отправьте site_key в орган запроса для выбора рабочего пространства. Ключ, выданный для одного рабочего пространства, остается прикрепленным к нему; ключ с контекстом администратора может выбрать любое рабочее пространство, которое ему разрешено видеть, и отказано за любое, что оно не является.

Какие действия может вызвать только ключ для чтения?+

Установите режим разрешений на ключе read_only, и каждая запись будет отклонена с помощью read_Only_key, поэтому интеграция отчетов не может ничего изменить даже по ошибке.

Почему я не нашел то, что я могу видеть в админ?+

Записи в других рабочих пространствах возвращают не найденную, а не ошибку разрешения, поэтому API никогда не подтверждает, существует ли что-то где-то еще.

разработчик

Безопасность API

Один контракт на безопасность для каждого разъема и интеграции: OpsIQ Что он знает об одном IP или отправителем, и отсылайте назад злоупотребления, которые видит ваша собственная система.

OpsIQ Защищает себя сам: IP Брандмауэр блокирует злоумышленников, билетный конвейер фильтрует спам, а Security AI классифицирует нарушителей и предлагает правила блокировки. API Платежная платформа, клиентский портал или пользовательское приложение могут проверить посетителя, прежде чем доверять ему, и сообщить о том, что он наблюдал, чтобы вся установка узнала с каждой поверхности.

Что вы можете сделать

Проверяйте, прежде чем доверять

security. check отвечает состоянием брандмауэра, любым правилом спама, соответствующим отправителю, и кэшированным вердиктом AI для IP.

Сообщите, что вы видели

security.report записывает наблюдение как событие безопасности, имеет Security AI классифицировать IP сразу же, и предупреждает администраторов, когда вердикт возвращается с высоким риском. Повторяющиеся сообщения группируются в инциденты, точно так же как атаки OpsIQ непосредственно видит.

Правила обмена спамом

Security. blocklist. add и security. b blocklist. list читают и пишут одни и те же правила спама, которые использует страница «Билеты», поэтому блокировка отправителя в одной системе происходит везде.

Сообщение о злоупотреблении со стороны разъема
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"
}

Сферы и безопасность

security.read

Нужны security. check и security. blocklist. list. Безопасно для интеграции отчетности.

security.write

Необходимо для security. report и security. blocklist. add. Отдайте его только системам, в которых вы хотите ввести правила подачи и отчеты.

Ничто не уничтожается молча.

Блок-лист отправителя по-прежнему попадает в спам-вид, где билет можно прочитать и восстановить.

Платформа защищает себя

Собственный сервер IP Адреса никогда не могут быть заблокированы, блокированы или сообщены через это. API Таким образом, неправильно настроенная интеграция не может разрушить платформу.

💡
Отчеканить ключ в разделе Интеграции, затем API Ключи и дать ему только области безопасности, которые ему нужны. Полный контракт запроса для каждого действия находится в meta. actions и OpenAPI документе.
Используют ли эти разъемы автоматически?+

Исходящая синхронизация уже автоматическая: когда блокируется IP, подключенные платформы сообщаются через синхронизацию безопасности разъема. API Направьте свой разъем или пользовательский код на эти четыре действия с ключом, несущим области безопасности.

Где живут правила спама?+

Один магазин. Контроль отправителя страницы «Блок билетов», ИИ-спам в настройках и этот API работают против одного и того же списка блоков, поэтому есть ровно одно место для поиска.

разработчик

События API

Отправляйте пользовательские события с вашего сервера или веб-сайта на OpsIQ для аналитики, экспериментов, триггеров CRM и условий веб-хокинга.

Как это работает
События APIТрек() вызов, отправляющий пользовательское демо_забронированное событие в OpsIQ, которое подает цели конверсии, сегменты и триггеры.OpsIQ. track("demo_booked",{)значение: 0, план: "pro"});Цели конверсииСегментыТриггеры и webhooksБраузер ()OpsIQ.track) или серверная часть POST /v1/events
События API

Браузерные события

Отслеживание событий браузера
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "button_clicked", {
  button: "signup",
  page: "/pricing",
  variant: "green"
}]);

Серверные события

Серверная сторона, запись действий и конверсий против контакта через действие API. crm.activities.record для жизненного цикла/бизнес-деятельности и crm.conversions.record Для конверсий. Нет events.send действие; входящий приемник событий CRM живет на /v1/inbound.php?t=<token> Для систем третьих сторон, которые проталкивают события.

Серверная активность (действие) 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"
}

Конвенция об именах

Отметка

"order. completed" не означает "orderCompleted".

Прошлое время

"button. clicked" не "but button. c click".

Будьте конкретны

«pricing. plan_selected», а не «user_action».

разработчик

Как данные передаются через OpsIQ

Понимание потока данных помогает отлаживать интеграцию и оптимизировать производительность.

Как это работает
Как потоки данныхДанные поступают из виджета и маяка в OpsIQ ядро (CDP, граф идентичности, AI-мозг, аналитика, CRM) затем выходит через веб-хуки и REST API.виджети маякOpsIQ ядроCDP · идентификационный графМозгАналитика · CRMУэбхуксОСТАЛЬНЫЕ API
Поток данных

Входящий поток данных

1
Виджетный маяк

The JavaScript виджет отправляет просмотры страниц, клики и сообщения чата /beacon.php.

2
Проглатывание событий

События, хранящиеся в opsiq_events с site_key, типом события, клиентом и свойствами.

3
Сессионное собрание

Сеанс-строитель группирует просмотры страниц в сеансы (через cron).

4
Разрешение по вопросам личности

При идентификации анонимные записи связаны с профилем клиента.

5
Синхронизация с подключением

Коннекторы извлекают данные с внешних платформ и хранят их в кэше разъема.

6
контекст

ИИ собирает контекст из: истории посетителей, профиля клиента, данных разъема, KB и оперативности.

Исходящий поток данных

1
Пожары событий

Внутренние пожары (ticket. created, chat. message, order. completed).

2
Очередь на работу

Событие, поставленное в очередь за работой.

3
Отправка Web-cook

Отправляйте знаки и отправляйте на все подписанные конечные точки.

4
Повторить неудачу

Неудачные поставки, перепроверенные с экспоненциальным отступлением.

Настройки

Ссылки на настройки

Настройки являются центром управления рабочим пространством. Все нижеприведенное относится к рабочему пространству, в котором вы находитесь, поэтому одна учетная запись может запускать несколько брендов с различными идентификаторами, поведением чата и правилами хранения.

Найти место для установки

В Настройках около шестисот отдельных элементов управления, распределенных по одиннадцати вкладкам, сгруппированным под четырьмя меню.

Настройки поиска (Ctrl + K)

Нажмите Ctrl + K, или Cmd + K на Mac, где угодно на странице «Настройки». Введите простые слова и нажмите Enter, чтобы перейти прямо к управлению. Поиск допускает небольшие опечатки и понимает связанные слова, поэтому планировщик находит Cron, а конфиденциальность находит элементы управления отслеживанием. Он показывает только настройки, которые может открыть ваша роль.

Рабочее пространство и план

Генерал и лицензия.

AI и поддержка клиентов

Администратор AI Assistant, чат клиента, OpsIQ письмо и портал поддержки.

Данные и управление

Отслеживание и конфиденциальность, разрешения и безопасность.

Система

Cron Setup (только для саморазмещения) и Danger Zone.

экономить

Каждая вкладка сохраняет самостоятельно с помощью собственной кнопки Сохранить. Клиентский чат и OpsIQ Написание прикрепляют свои к экрану. Сохраняют перед переключением вкладок; изменения не переносятся поперек.

Глубокие ссылки

Активная вкладка записывается в адрес страницы, поэтому вкладку можно закладывать или отправлять коллеге.

Общий: бизнес-идентификация

Наиболее важная карта на странице. ИИ читает эти значения в каждом ответе, отчете и ежедневном брифе.

Бизнес-название

Используется в отчетах ИИ, ежедневных сводках и формулировках, ориентированных на клиента.

Бизнес-индустрия

Анализ тейлоров, подсчет лидов, брифинги и предварительные задания опроса. Выберите из веб-хостинга, электронной коммерции, SaaS, недвижимости, агентства, консалтинга, здравоохранения, образования, финансов или общего бизнеса.

Язык системной системы

Язык показан любому, кто не выбрал свой. Каждый агент может переопределить его в своем профиле.

Используйте язык браузера

Показывает страницу входа на родном языке посетителя. Как только кто-то выбирает язык там, его выбор выигрывает и это никогда не отменяет его.

Система часовых поясов

Зона, в которой работает вся система: даты, отчеты, расписания и фоновый крон. Используйте часовой пояс операций, а не клиентов.

Общие сведения: GeoIP и Tracking

Путь к базе данных GeoIP2

Полный путь к GeoLite2-City. mmdb. Автообнаруживает первую загрузку через cPanel, Plesk, DirectAdmin, Cloudways, Docker и простой Linux или Windows. Добавить GeoLit2-ASN. mmtb в одну папку для посетителя интернет-провайдера.

Режим Geo Source

Только GeoLite2, GeoLit2 с Cloudflare отставание или Cloudflare Только.Cloudflare Режимы требуют, чтобы сайт был проксирован через Cloudflare, с заголовками местоположения посетителей, включенными для деталей города и региона.

Время сеанса (s)

Бездействие до окончания сеанса посетителя. По умолчанию 14400, что составляет четыре часа.

Интервал обновления в реальном времени (с)

Как часто обновляется Live Feed. По умолчанию 30 секунды.

Активный порог (мин)

Сколько времени посетитель считает живым после загрузки последней страницы. По умолчанию 2 минут. Это выпадение Live Feed, а не продолжительность сеанса.

Сохранение данных (дни)

Удаления, собранные и сгенерированные записи за этот возраст: аналитика, чат, билеты, обратная связь, транзакции, телеметрия ИИ, журналы интеграции и активность CRM. 0 сохраняет все навсегда. Настройки, авторский контент и квитанции о согласии никогда не удаляются.

Когда чат удаляется

Выбирает, сколько удаленного разговора остается на записи: полная запись, запись без разговора или только счет. Удаление всегда скрывает чат от почтового ящика и истории посетителей. Запланированное удержание и Забудьте посетителя всегда удаляют полностью независимо от этого.

Отслеживание трафика ботов

Считает сканеры посетителями. Оставьте; это раздувает подсчет посетителей и искажает каждый отчет.

Обратный опрос popup включен

Показывает виджет обратной связи с посетителями по всему сайту. Отдельно от опросов чата в разделе Client Chat, Support Flow.

Общие: особенности AI

Мастер переключается на каждую поверхность ИИ. Все по умолчанию включено и сохраняется в рабочем пространстве.

AI Triage на билетах

Классифицирует каждый билет по категориям, приоритетам и настроениям и пишет резюме в верхней части билета.

AI Triage: Hover Summary (альбом)

Показывает теги сортировки и резюме в подсказке, когда агент зависает в ряду в списке билетов. Требуется AI Triage.

Inbox Copilot (композитор)

Добавляет черновик ответа ИИ, теплые, короткие, более формальные и апологетические кнопки под коробкой ответов на билеты.

Ask OpsIQ Копилот

Плавающий копилот на каждой странице администратора знает, какой клиент, счет или билет открыты.

Утренний бюллетень

В первый день каждый день копилот представляет срочные билеты, просроченные ответы и чаты ожидания. Воскресенье дает неделю в обзоре.

Общие: деньги, брендинг, резервное копирование

OpsIQ базовая валюта

Все деньги в админ конвертируются в эту валюту для отображения. Коннекторы хранят свою собственную исходную валюту; установите это на разъем.

Автосинхронизация FX ставок

Ставки возврата каждые шесть часов из бесплатного публичного канала без ключа API. Вы можете добавить ручные ставки, которые перекрывают корм. С автоматической синхронизацией валюты без ручного курса остаются не конвертированными.

Включите функции торговли и выставления счетов

Отправляя его, вы открываете страницу продаж и конверсий, карты доходов приборной панели и Live Intelligence Feed. С ней спрятана каждая ценовая поверхность, а страница продаж покидает меню.

Торговый словарь

Учите OpsIQ вашей формулировке: делаете ли вы обновления, слово для продления, что вы продаете и как называются покупатели.

Брендинг и логотипы

Две загрузки, одна для светлых фонов (боковая панель администратора) и одна для темных (страница входа в систему). PNG, JPG, WebP или SVG до 3 MB.

Агент по разведке сайта, допустите частные SSH цели

Агент Auto-Implement SEO подключается через SSH. Частные, обратные и зарезервированные адреса блокируются по умолчанию в качестве меры против SSL. Включайте только саморазмещенные установки, которые должны достичь локального сервера.

OpsIQ Резервное копирование/реставрация

экспортировать все комплектующие и OpsIQ- принадлежащая таблица плюс загруженные файлы.OpsIQ Только конфигурация и записи; это никогда не касается клиентов, счетов-фактур, билетов, услуг, доменов, заказов или транзакций.

⚠️
Сохраните резервную копию, прежде чем использовать что-либо в Опасной зоне. Резервная копия живет в целом, а действия удаления живут в Огненной зоне, поэтому легко добраться до кнопки удаления без экспорта первым.
Настройки

Настройки: Безопасность

Защита входа администратора, учетных записей персонала и данных OpsIQ собирает. Вход клиента на портал поддержки настраивается отдельно.

Защита входного сигнала

Google reCAPTCHA

Остановка ботов и наполнение учетных данных на входе администратора. Выберите v3 (невидимое, забитое) или v2 (чекбокс), установите порог оценки v3 и поставьте сайт и секретные ключи. Эти же ключи повторно используются формой запроса портала поддержки.

Неудачный логин Auto-Lockout

Блокирует адрес после ряда сбоев в окне, на несколько часов. Можно настроить сообщение заблокированной страницы и показать небольшое отвлечение экрана ожидания.

Логин Hardening

Политика паролей с минимальной длиной, отказ от пароля, обнаруженный в известных нарушениях, блокировка учетной записи против начинки учетных данных, обязательный двухфактор для каждого администратора, повторный вход паролем перед опасными действиями и оповещения о входе нового устройства.

Единый вход (OIDC)

Персоналу необходимо войти через поставщика персональных данных. Нужен эмитент URL, идентификатор клиента и секрет клиента. Домены автоматического предоставления, по одному на линию, автоматически создают пользователей при первом входе.

Единый вход (Single Sign-On)SAML 2.0)

Поставщики, которые говорят SAML. OpsIQ Поставляет ответ АСУ URL и идентификатор объекта SP; вы предоставляете идентификатор субъекта IdP, вход в систему URL факультативная регистрация URL и Х.509 Поля атрибутов электронной почты и имени нужны только для нестандартных имён атрибутов.

SCIM Провизия

Создание, обновление и деактивация на основе каталогов OpsIQ счета.OpsIQ снабжает SCIM основание URL; вы генерируете меченые токены здесь, чтобы можно было отозвать один из них, не нарушая остальные.

Угрозы, блокировка и сбор

Outbound Egress Allow-list (англ.)русск.

Ограничения, которые внешние хосты этого разъема рабочего пространства могут вызывать. Совместим с управлением SSH в целом.

Оценка угроз и автоблокировка

Блокирует посетителя, как только его оценка угрозы пройдет ваш порог. 0 отключает его. Смотрите страницу Обзора безопасности в течение недели, прежде чем выбрать номер.

Блокировать сообщение страницы

Сообщение, которое видит заблокированный посетитель, является простым текстом или собственным пользовательским экраном блоков HTML.

Основные веб-витали от реальных посетителей

Измеряет LCP, INP и CLS по реальным сеансам.

Перенесенная, безопасная для повторного использования доставка событий

Пользовательские события стоят в очереди в браузере и доставляются партиями с повторными запросами, уменьшая потери при плохих мобильных соединениях.

Подписанные трекинговые маяки

Реальные встраиваемые виджеты несут вращающийся криптографический токен, поэтому поддельные данные отслеживания могут быть отклонены. Выключены по умолчанию; возможность изменения того, как встраиваются аутентифицирующие средства, поэтому сначала проверьте их.

Предупреждения о безопасности

Выключено по умолчанию. Обнаружение и блокировка работают независимо от того, контролирует ли эта карта, что вам говорят, и сколько ИИ помогает.

Включите оповещения безопасности

Мастер-переключатель для этой карты.

Неудачный порог волны

Сколько неудавшихся входов в систему за короткий период считается волной, на которую стоит обратить внимание.

IP Репутационный интеллект

Добавляет оценку угрозы для посетителей, появляющихся в публичных каналах злоупотребления.

Смотреть сайт

Почасовая проверка безотказной работы и TLS, предупреждение до истечения срока действия сертификата.

Аналитик по безопасности ИИ и брифинги об инцидентах с ИИ

Добавляет объяснимый приговор к подозрительной деятельности, и группы связанные атаки в один читаемый инцидент, а не поток событий.

Политика автопилот

Действует самостоятельно, превращая то, что он узнает из инцидента в предложенное или примененное правило. Отключитесь до тех пор, пока не пересмотрите его предложения и не согласитесь с ними.

Ежедневный дайджест безопасности и еженедельный советник по осанке

Ежедневная пересказка на странице Обзор безопасности и еженедельный контрольный список, показывающий, что защищено и что еще открыто.

Предложения по автоматическому прекращению действия

Предложенное правило блокировки, на которое вы никогда не действовали, истекает само по себе.

DOM Session Replay (перезагрузка сеанса)

Скачать DOM Session Replay

Записи посетителей сеансов для воспроизведения. Когда выключен библиотека повторения никогда не загружается, так что нет никаких затрат на его оставку. Запись отбираются и маскируются под конфиденциальность, а также просматриваются на странице сеанса повтора в разделе Аналитика.

Пропускная способность, максимальный захват, удержание

Какая доля сеансов записывается, как долго может работать одна запись и сколько дней хранятся записи.

⚠️
Сеансовая повторная запись записывает реальных людей, использующих ваш сайт. Сохраняйте частоту выборки и сохранение так же низко, как все еще ответит на ваш вопрос, и раскроете его в своем уведомлении о конфиденциальности.
Настройки

Настройки: Отслеживание и конфиденциальность

Что может собирать OpsIQ и как долго выживает каждый вид записи.

Исключения

Исключены IPs и диапазоны CIDR

Адреса никогда не отслеживались, по одному на линию, точные адреса или диапазоны CIDR. Самый чистый способ держать свою команду вне вашей аналитики, потому что он охватывает всех по этому адресу, а не только администраторов с подписью.

Исключены URL Пути

Узоры страниц никогда не отслеживались, по одной на линию, wildcards со звездочкой. Например /admin/* удерживает весь бэк-офис из журнала посетителей.

Политика хранения данных

Автоматическая чистка по подсистеме в течение нескольких дней. Отдельно от общей настройки хранения данных в целом и от очистки Опасной зоны.

Журналы взаимодействия AI

Телеметрия доверия, содержащая короткие предварительные просмотры запросов и ответов. По умолчанию 90 дней. Это держит наиболее клиентский текст, поэтому сокращайте его сначала при ужесточении конфиденциальности.

События использования AI

Токен с одним вызовом учитывает затраты. По умолчанию 90 дней. Только номера, без содержимого сообщения.

Меры по проверке

Лог о несанкционированном действии и безопасности. По умолчанию 365 дней. Держите это дольше; это ваш след доказательств.

диагностика

Системные медицинские записи. По умолчанию 30 дней.

Вопросы без ответа

Кластеры вопросов, на которые ИИ не смог ответить. По умолчанию 90 дней. Проработать их по вопросам ИИ пропустил страницу до истечения срока действия.

Сторожевые собаки и экспорт

Предупреждения о метрической аномалии

Ежедневное сравнение вчерашнего дня с недавним базовым уровнем, оповещение о том, когда метрика движется больше вашего порога. По умолчанию 35 %. Выключено по умолчанию.

Экспорт в склад

Ночные свалки сеансов, посетителей, просмотров страниц и связанных таблиц для вашего собственного BI-стекла в выбранном вами формате, хранятся в течение нескольких дней.

Настройки

Настройки: Admin AI Assistant

Плавающий помощник, который ваш персонал использует внутри администратора, с живым доступом к клиентам, счетам-фактурам, билетам, серверам и журналам cron.

Включить OpsIQ AI Виджет

На каждой странице администратора отображается кнопка "помощник".

Планировка и поведение

Угловое положение, ширина панели (320 то 600 px), максимальная высота (400 то 900 px), радиус угла (0 то 24), размер шрифта и размытое стекло за панелью.

Показать быстрые чипсы

Кнопки с одним щелчком мыши под заголовком. Самый быстрый способ для большинства сотрудников.

Показать модель Info

Показывает, какая модель ответила и сколько времени это заняло. Полезно при настройке стоимость, шум для повседневного использования.

Входные ворота Per-admin

Только показывает помощник администратора, чей логин и адрес электронной почты совпадают с агентом OpsIQ, назначенным на это рабочее пространство. Владельцы всегда проходят. Используйте кнопку «Проверить мой доступ», прежде чем включить или вы можете заблокировать свою собственную команду.

ИИ Персона

Имя дисплея, слоган заголовка и пользовательское приветственное сообщение, отображаемое при открытии панели.

Умные чипы быстрого действия

Редактируйте этикетку и подсказку для каждого ярлыка, добавляйте свой собственный или сбросьте по умолчанию. Ярлык - это то, что видят сотрудники, подсказка - это что получает ИИ.

Цвета и форма

Форма фишек (таблетки, округлые, квадратные), цвета фишек, тема карты и форма запуска (круглый, squircle, квадратный), с живым предварительным просмотром.

Память разговора

Помощник запоминает историю каждого человека во время сеансов браузера, вплоть до сообщений 120, хранящихся в вашей собственной базе данных.

Настройки

Настройки: клиентский чат

Виджет чата, который используют ваши клиенты, и самая большая область настроек. Шесть подзадач с главным переключателем и Save прикреплены к верхней части вкладки.

Работайте через подзадачи в порядке на новой установке: Идентичность и Копия, Внешний вид, Поведение, Поток поддержки, Обучение Знаниям. Advanced - это инфраструктура и может подождать.

Идентичность и копия

Брендовая идентичность

Имя виджета, слоган, имя ИИ, название, используемое для системных и праздных уведомлений, и как появляются имена агентов. Источник имени агента решает между реальными именами, пользовательским именем или командным лейблом.

В чате приветствие

Два приветствия, одно для всех посетителей и одно для идентифицированных посетителей. Вопрос начинает больше разговоров, чем заявление.

Попп Тизер

Плавающее сообщение перед открытием чата, с собственным именем, размером шрифта и цветами. ИИ может писать тизеры, с элементами управления для того, сколько генерировать, сколько показывать за посещение и разрыв между ними.

Скорая помощь и отдача

Полный сценарий: запрос имени и электронной почты, подтверждения, запрос человека, никаких агентов нет в наличии, билет создан или отменен, передача в ожидании. Около двух десятков отдельных строк в разборной панели.

Статус и неработающие уведомления

Три сообщения, видимые клиентом: агент закрывает чат, посетитель молчал, а агент возвращает ИИ. Избегайте внутренних формулировок, таких как решенные или сортированные.

Композитор и предложения

Заполнитель входа, ярлык кнопки "говорить с человеком" и предлагаемые вопросы для открытия. Три хороших предложения отклоняют больше билетов, чем страница статей.

Пусковая установка, икона и аватары

Иконка Launcher, дополнительная иконка при открытии, размер пусковой установки и изображения для человеческого агента и ИИ.

внешний вид

Тема и стекло

Тематический режим, премиальный цветовой предустановка, интенсивность размытия и непрозрачность плюс переключатели для анимации, разделительные линии, скрытие строки статуса, сокрытие карты ящика сообщения и скрытие кнопки закрытия. Начните с предуставленного; он устанавливает десятки цветов одновременно.

Основные цвета

Запуск, заголовок, панель помощи, ссылки, кнопки, системные уведомления и композитор, каждый с цветом начала и конца для градиентов. Опция по умолчанию игнорирует их и сохраняет прозрачную отделку.

Панель, Пузыри и чипы

Около тридцати пикеров, охватывающих панель, границу, текст, область ввода и каждый тип пузыря (посетитель, ИИ, агент, набор текста, система) плюс чипы внушения и их состояние наведения. Только откройте это для точного сопоставления бренда и проверьте контрастность на тексте пузырька.

Складка и форма

Ширина и высота панели, радиус угла, размер шрифта, положение экрана, форма пусковой установки, стиль пузырьков и показывают ли аватары. Проверьте ширину на телефоне.

поведение

ИИ автоматически отвечает

Мастер-переключатель для ответов ИИ. Выключение означает, что каждое сообщение ждет человека.

Человеческие наблюдения и естественные двойные тексты

Нежное наблюдение, когда посетитель идет тихо, и дополнительное короткое второе сообщение, как человек будет отправлять одно. Настроен с максимальным последующим наблюдением за тишину, сначала задержка, позже множитель, окно присутствия и максимальное окно последовательности. Может быть ограничено рабочими часами и подавлено после простой благодарности.

Typewriter отвечает и отвечает темпом

Независимо от того, набирают ли ответы слово за словом и как быстро отвечает помощник, предварительно установленной или вашей собственной минимальной и максимальной задержкой в миллисекундах.

Живой перевод

Каждый агент читает и пишет на своем языке, а посетитель - на своем.

Возвращение в AI после бездействия агента

Минуты бездействия агента до того, как ИИ возобновит разговор.

Автооткрыть чат

За несколько секунд до того, как виджет откроется. 0 Навязчивый на мобильном; оставить в 0 Если только не проверено.

Умные ответы

Планирование наперед для однопроходных ответов, глубина мышления, необязательная отдельная модель для агентских ответов , показывающая рассуждения посетителям, перенося ошибки, память о длительных беседах, ограничивая помощника только вашим бизнесом, цены в валюте посетителя и то, как появляются ссылки. Только разговоры о вашем бизнесе должны быть включены почти для всех.

Экономия средств

Пропускает поиск знаний по приветствиям, таким как привет и благодарность, и ограничивает самый длинный ответ в жетонах. Обрезки стоят без изменения качества ответа на реальные вопросы.

Языки

Какие языки поддерживает виджет и как он выбирает один для посетителя.

Ответы на счета клиентов

Ответы от зарегистрированного клиента, необязательно загруженные в реальном времени и необязательные загружаемые только при необходимости. Читать-только во всех случаях; Загрузка-когда это необходимо заметно снижает стоимость.

Возврат средств

Помощник просит вернуть деньги, когда помощник собирает детали и передает их человеку.

Разговор и виджет

Продолжение разговоров, продолжение чата на ваших подключенных сайтах, перетаскивание окна, запрос гостей на электронную почту и предоставление вашей команде превратить чат в билет.

Особенности виджета

Emoji picker, вложения с дополнительным режимом только для пасты, понимание изображений AI, встроенные значки, микрофон, кнопка разговора с агентом, звуки посетителей, предварительный просмотр вложений, кноска голосового вызова и изоляция сеанса. Понимание изображения ИИ - это то, что позволяет посетителю вставить снимок экрана ошибки и получить полезный ответ.

Admin Inbox, уведомления и приветственный всплывающий окно

Посетитель приветствует всплывающее окно, а также оповещения ваших агентов: звуки входящих сообщений, уведомления на рабочем столе, шепоты, будь то частный шепчок и интервал опроса входящих данных.

Поддержка потока

Человеческий хэнд-аут

Как назначаются запросы на человека, секунды, которые агент должен ответить, возвращает ли отказ чат ИИ и возобновляется ли ИИ, когда истекает тайм-аут. Настройте это перед тем, как идти в прямом эфире или посетитель, который просит человека, просто ждет.

Рабочие часы

Время открытия, часовая зона и сообщение о закрытых часах. За пределами этих часов ИИ не предложит человека. Отдельный график от рабочих часов билетов в разделе OpsIQ Writing.

Ответы, когда ИИ выключен

Первый ответ на новое сообщение, ответ, когда кто-то уже стоит в очереди и сколько времени до повторения.

Оффлайн форма

Показывает контактную форму вместо чата.

Поиск билетов и уведомления департамента

Осведомленность о билетах ИИ, поэтому посетитель, цитирующий номер билета, получает свой реальный статус и в какие отделы может направить ИИ. Встроенная панель показывает реальных получателей для каждого отдела, решается так же, как их разрешает уведомитель, чтобы вы могли видеть, прежде чем клиент сделает это, что департамент никого не предупреждает.

Помощник центра в чат-виджете

Позволяет посетителям просматривать опубликованные статьи, не выходя из чата. Вы выбираете, где появляется точка входа, нижняя панель этикетки и значок, а также предлагать ли ссылку на полный справочный центр. Отключите по умолчанию.

Рейтинг беседы

Звездный рейтинг срабатывает, когда агент закрывает чат, когда заканчивается передача или после периода бездействия вы устанавливаете. Выберите один или два триггера, не все из них.

Пост-чат обзор

Короткий опрос, когда посетитель закрывает чат, с вашим вопросом, задержкой, правилом времени и ограничением на посещение. Посетители также могут отправить по электронной почте или загрузить стенограмму. На один вопрос получен ответ; три - нет.

Post-Chat Email Survey (англ.)

Последующее обследование по электронной почте после окончания разговора, необязательно на языке, на котором общался посетитель, с контролем над задержкой, темой, введением, вопросом, как ярлыками кнопок, так и линией благодарности.

Ответная реакция

Большие и большие пальцы вверх на каждом ответе ИИ, питая качественные панели приборов.

Архив беседы

Автоархив через несколько дней, авторешение после минут молчания и удаление архивных разговоров через несколько суток. На третьем месте удержание, наряду с General и Tracking.

Обучение знаниям

Что на самом деле знает ассистент, больше ничего в клиентском чате не имеет значения.

Сайт по обучению навыкам

Прочесывает ваш сайт, чтобы помощник мог ответить с него. До десяти начальных ссылок, лимит страницы, глубина ссылки и исключенные папки. Один URL может быть протестирован до полного сканирования. Исключите кассу, учётную запись и пути администратора.

Встраивание

Ключ API, который превращает страницы в поисковый смысл, а не совпадения ключевых слов.

Организаторы AI Knowledge

Один клик, и ИИ считывает каждый часто задаваемый вопрос и сканирует страницу и сортирует их по категориям.

FAQ, проверенные ответы

Пары вопросов и ответов рассматриваются как наиболее приоритетный источник, каждый со статусом, весом и категорией. Поисковый, импортируемый из JSON, и ИИ может написать их из описания вашего бизнеса. Когда помощник что-то не так, напишите часто задаваемый вопрос: он превосходит сканированные страницы, поэтому исправление немедленно.

продвинутый

Производительность и пределы

Интервал опроса, ограничение скорости сообщения и окно, максимальный размер вложения, попытки вложения на окно и разрешенные расширения файлов. Список расширений - это контроль безопасности; держите его напряженным.

Доставка в реальном времени

Мгновенное сообщение и доставка статуса вместо опроса через Pusher, Ably или Firebase с интервалом повторного опроса. Опросы хороши для большинства сайтов.

Push уведомления

Оповещения об устройствах для агентов через Pusher Пучки или _OneSignal, с интересом к устройству.

Веб-пошинг (VAPID)

Браузерный толчок с использованием собственных генерируемых ключей без стороннего провайдера. Создан здесь, а не в Опасной Зоне.

Голос, видео и экранный обмен

Переверните учетные данные, чтобы звонки соединялись через ограничительные сети, используя Cloudflare или Twilio credentials, или ваш собственный ТУРН URL, имя пользователя и полномочия.

Входящие рабочие процессы

Настройки рабочего пространства агента, а не настройки посетителя: SLA первого ответа в минутах, сохраненные виды очередей, ярлыки клавиатуры и палитра команд, поиск во время разговора и билеты клиента в инспекторе.

Каналы обмена сообщениями

WhatsApp, SMS, Facebook Messenger, Instagram, Telegram, X прямые сообщения и LINE, каждый со своим собственным автоматическим коммутатором AI, плюс переключатель политики для действий ИИ на каналах, отказ от ответа и шаблон повторного подключения WhatsApp. Каждый канал приземляется в том же почтовом ящике, что и веб-чат.

Превью Live Widget в нижней части вкладки обновляется при редактировании. Используйте его вместо перезагрузки вашего сайта, чтобы проверить изменение.
Настройки

Настройки: Шаблоны

Каждый e-mail OpsIQ Отправляет, и тот дизайн, который обрамляет их всех. Редактировать формулировки любого сообщения и писать шаблоны для чего угодно OpsIQ Уже не посылает.

Один дизайн, много сообщений

SHOPIFY Глобальный шаблон электронной почты Это обертка: ваш логотип, заголовок, карта, типографика и нижний колонтитул с пустым средним. Каждое сообщение OpsIQ вставляется в эту середину. Редактируйте обертку один раз, и каждое электронное письмо меняется вместе - ответы на билеты, квитанции магазина, сброс пароля, напоминания о бронировании, письма PeopleOS и все, что вы пишете сами.

Без этой обертки невозможно отправить электронное письмо из OpsIQ, оно применяется в одной точке, через которую проходит каждое сообщение, поэтому добавленное позже сообщение не может пропустить его.

Редактировать сообщение

1
Откройте настройки, затем шаблоны

Сообщения сгруппированы по тому, что они собой представляют: билет и портал, Магазин, безопасность входа в систему и учетной записи, бронирования, разговоры и уведомления, отчеты, письма PeopleOS и ваши собственные.

2
Нажмите Edit на тот, который вы хотите

Вы получаете тему, редактор с богатым текстом с HTML видом, который вы можете переключать на живое, и предварительный просмотр готового электронного письма точно так же, как получатель получает его - включая обертку.

3
Используйте переменные чипы

Чипы над редактором - это факты, которые меняются: номер билета, ссылка на заказ, время бронирования. Нажмите один, чтобы выбросить его там, где курсор.

4
Спасти

Оставьте поле пустым, и оно сохранит встроенную формулировку; таблетка в строке сообщает вам, в каком состоянии она находится.

💡
Переменная, которую вы не используете, удаляется при отправке электронного письма, а также строка, на которой она находится. Вот почему бронирование без номера телефона никогда не отправляет «Телефон:» ни с чем после него.

Напишите свой собственный шаблон

Используйте это для сообщения OpsIQ не отправляет: уведомление о доставке, напоминание об обновлении, приветственный пакет, лицензионный ключ. Он получает все, что получает встроенное сообщение - редактор, предварительный просмотр, правила плана и ваш глобальный дизайн - и ваша собственная система посылает его через API.

1
Добавить Press Add шаблон

Кнопка находится в верхней части страницы Шаблонов и снова рядом с «Ваши собственные шаблоны».

2
Назови его.

Имя становится ссылкой, которую посылает ваша система, показанной под полем при вводе — например, x_custom_delivery_booked.

3
Скажи, для чего он и когда его посылают

Эти две строки вы и ваши коллеги читаете на странице Шаблонов через год. Они стоят тридцать секунд.

4
Перечислите части, которые меняются

Отделенное запятой, например: имя, когда, tracking_link. Каждый становится {{variable}} вы можете попасть в тему или сообщение, и ваша система заполняет его во время отправки.

5
Напишите тему и сообщение

Простые предложения хороши — разрывы строк становятся абзацами. Напишите только сообщение; логотип, заголовок и нижний колонтитул взяты из глобального шаблона.

6
Создайте его, затем откройте.

Он появляется под «Ваши собственные шаблоны» с полным редактором и живым предварительным просмотром, таким же, как каждое встроенное сообщение.

⚠️
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.

Отправляйте свой собственный шаблон

Два вызова на продукт API. Звонящий предоставляет получателю и переменные - никогда формулировку и никогда дизайн, поэтому интеграция не может ни отправить небрендированную почту через ваше рабочее пространство, ни спокойно изменить то, что вы говорите своим клиентам.

Перечислите свои шаблоны и переменные, которые каждый из них принимает
POST /api/v1.php
Authorization: Bearer YOUR_API_KEY

{ "action": "email.templates.list", "mine": true }
Отправь его.
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"
  }
}
💡
Переменные имена идут БЕЗ брекетов в API call. email. templates. list передает их обратно в той форме, в которой вы их передаете.

Шаблоны и ваш план

Сообщение, для которого у вас нет услуги

Остается в списке со ссылкой «Увидеть планы» и без редактора — так что вы можете увидеть, что OpsIQ отправит, а что разблокирует его.

Ваши собственные шаблоны

Выберите сервис, к которому принадлежит шаблон, когда вы его создаете или оставляете на каждом плане. Рабочее пространство без этого сервиса видит его в списке, но не может редактировать или отправлять его.

Вход, безопасность, уведомления и тест электронной почты

Неспособность исправить формулировку пароля, сброшенного вашими собственными администраторами, будет неправильным типом блокировки.

Вопросы

Можно ли изменить дизайн только для одного сообщения?+

Нет, и намеренно. Дизайн - это обертка, и она используется совместно, что делает каждое электронное письмо узнаваемо вашим. Что является сообщением, так это формулировка, панель фактов и любые кнопки, которые вы добавляете в сообщение.

Что произойдет с моей формулировкой, если я нажму «Перезагрузка»?+

Сброс появляется только на глобальном шаблоне, и он заменяет то, что есть в редакторе, встроенным дизайном. Ничего не пишется до тех пор, пока вы не нажмете Save, чтобы вы могли закрыть диалог, чтобы изменить свое мнение.

Я удалил один из моих шаблонов по ошибке.+

Удаление занимает два клика именно по этой причине — первые руки и говорит вам, что перестанет работать. Если он уже ушел, создайте его снова с тем же именем и той же ссылкой возвращается; только формулировка должна быть перепечатана.

Может ли разъем или дополнение принести свои собственные шаблоны?+

Да. Пакет отправляет mail_templates.json в своем собственном каталоге, а его сообщения появляются под "шаблонами разработчика" с тем же редактором, предварительным просмотром, оберткой и шлюзом плана. Ваши редактирование текстов принадлежат вашему рабочему пространству и выживают при обновлении пакета.

Настройки

Настройки: OpsIQ

Билеты ответили в письменной форме: автоматические ответы, собственная система билетов, эскалация, рабочие часы, маршрутизация и электронные письма, ориентированные на клиента.

автоответчик

Показать OpsIQ Написание кнопок

Добавляет кнопки помощи для ваших агентов в админ.

Включить билет Auto-Reply

Очередь новых билетов, ответы и ответы на них после задержки. Начните с нее и просматривайте черновики в течение недели. Возврат средств, аннулирование и изменение доступа всегда должны доходить до человека.

Отделы автоответчика

Какие отделы могут ответить в автоответе. Все, что не указано, остается за человеком, который является безопасным по умолчанию.

Отзывы о задержке (минуты)

Как долго ждать, пока автоматический ответ не отправит. Мгновенный ответ читается как робот; несколько минут - как быстрая команда.

Max AI отвечает за билет по департаментам

Ограничение по отделам, например Billing 1 и поддержка 3. Без колпака запутанная нитка может петлять.

Длина ответа, статус и идентичность

Максимальное количество токенов для записи, статус билета после ответа и после эскалации, а также к какой учетной записи администратора относятся автоматические ответы. Используйте четко названную учетную запись, чтобы сотрудники могли сообщать ответы ИИ от людей.

Билетные операции на родном языке

Система местных билетов

Билетная система, встроенная в OpsIQ для установки без внешнего справочного стола.

Труба входящей электронной почты в родные билеты

Превращает входящую электронную почту в билеты. OpsIQ Поставляет конечную точку URL Все, что может разместиться на этой конечной точке, может создавать билеты, поэтому держите токен в секрете.

Многократные ответы, задержка и опровержение

Будет ли ИИ продолжать отвечать по мере продолжения разговора и будет ли он ждать тихого окна, чтобы три быстрых сообщения получили один рассмотренный ответ. Тихое окно - лучшая единая настройка для автоматического ответа.

Портал общественной поддержки

Страница, обращенная к клиенту, где любой может поднять и отследить билет с дополнительной линией приветствия. Его адрес и внешний вид настроены во вкладке Портала поддержки.

Формат номера билета

Сколько букв появляется в сгенерированных номерах билетов.

Почтовые клиенты на своем языке

Электронные письма с билетами следуют за языком клиента. Персонал никогда не меняет язык: уведомления, оповещения отдела, брифинги и запланированные отчеты остаются на вашем системном языке.

Признания и подтверждения

Фиксированная подписка на новые билеты, плюс сообщения подтверждения при открытии билета, когда оставлена обратная связь и когда билет закрыт, каждый с живым предварительным просмотром. Также есть глобальная обертка шаблона электронной почты и ссылка за кнопкой просмотра вашего билета.

Спам-скрининг AI

Скриншоты билетов от неизвестных отправителей, и может необязательно перемещать спам по своему усмотрению. Оставьте автоматический ход до тех пор, пока вы не посмотрите его решение.

Автозакрытие прогулочных билетов

Закрывает билет после нескольких тихих дней. Расскажите клиенту в заключительном сообщении, как открыться снова.

Рабочие часы (календарь SLA)

Таймзона, время открытия и закрытия, рабочие дни и праздники для таймеров первого ответа и разрешения. Отдельный график от рабочих часов в клиентском чате.

Автоматическая ассоциация новых билетов

Автоматическое назначение, необязательно только для агентов, которые находятся в сети, с навыками агента и чувствительностью к совпадению для маршрутизации на основе навыков.

Предлагаю дубликаты билетов

Пятна, когда клиент открывает билет рядом с тем, который у него уже есть, с регулируемой чувствительностью к матчу.

Удовлетворенность после закрытия

По электронной почте опрос через день после закрытия. Результаты появляются на странице CSAT.

Уведомить департамент по электронной почте

Получатели являются членами этого отдела, а не адрес почтового ящика департамента, который является входящим адресом билетов.

Что может прочитать ИИ

Доступ к клиентским данным AI

Мастер-переключатель плюс индивидуальные разрешения только для чтения резюме профиля клиента, счетов, транзакций, кредитного баланса, продуктов и услуг, доменов, связанных серверов и обзора учетной записи высокого уровня. Начните с резюме профиля и добавьте категории в качестве ответов на них.

Эскалация и знания

Позволяет увеличить количество билетов

Перед ответом вы выбираете разрешенные отделы, задержку проверки и можете написать свои собственные инструкции по уведомлению об эскалации. Включите внутреннюю ноту о эскалации, чтобы ваша команда могла понять, почему билет перемещен.

Настройки знаний

Используют ли ответы язык клиента, используют ли они сканированные ссылки и часто задаваемые вопросы, читает ли ИИ изображение и PDF вложения, способ ответа на знания, импортируемые JSON Используются знания, и могут ли появляться исходные ссылки. Используйте сканированные ссылки и часто задаваемые вопросы, или ИИ гадает.

Остановить автоответ после человеческого ответа

Как только сотрудники ответят, ИИ перестанет отвечать на этот билет. Без него ИИ может говорить о вашем собственном агенте.

Билеты и инструкции по электронной почте

Свободные текстовые инструкции, формирующие тон и содержание для каждого ответа, с загружаемым рабочим примером. Будьте конкретны в том, что ИИ никогда не должен делать.

Импорт JSON знаний

Загрузите или вставьте файл знаний JSON для помощника по написанию.

Баттон Студио

Полный дизайнер для кнопки, обращенной к клиенту: стиль дисплея, размер, этикетка, значок, форма, минимальная ширина, фоновый стиль с первичными и вторичными цветами, угол градиента, граница, радиус угла, тень, типография, облицовка, праздная анимация, движение наведения и цвета, а также кольцо фокусировки, плюс пользовательский ящик CSS для всего, что не покрывает элементы управления.

Настройки

Настройки: Портал поддержки

Сайт, ориентированный на клиента, где люди поднимают и отслеживают билеты и читают ваши статьи справки. Эта вкладка контролирует, как она достигается и как клиенты входят; ее визуальный дизайн выполнен в студии портала поддержки.

Portal Studio или встроенный билетный портал: какой из них выбрать?

Это два разных продукта, и люди постоянно смешивают их. Они решают разные проблемы, и работа с ними вдвоём — это нормально.

Поддержка Portal Studio: место, куда вы отправляете клиентов

Студия разрабатывает а Полный сайт поддержки, который OpsIQ размещает для вас. У него есть свой веб-адрес или собственный домен, и он несет в себе весь опыт самообслуживания: статьи с помощью поиска, форма запроса, история билетов, вход клиента и помощник. Выберите шаблон, работайте через тему, навигацию, макет, знания, фойе, бренд, билеты, ассистент, форму и CSS, предварительный просмотр на рабочем столе, планшете и телефоне размеры, а затем опубликуйте.

Используйте, когда Вы хотите, чтобы один брендированный пункт назначения вы можете указать каждому клиенту на, и вы бы не хотели создавать или поддерживать область поддержки внутри вашего собственного веб-сайта.

Встроенный портал билетов: билеты на ваш сайт

Вставной столб только опыт билета на странице вашего собственного сайтаКлиенты открывают, отслеживают и отвечают на запросы поддержки, никогда не покидая ваши страницы, а ваш собственный заголовок, навигация и дизайн остаются такими же, как они. Установите макет, внешний вид и правила доступа в конструкторе виджетов, просмотрите результат, а затем скопируйте фрагмент вставки на свою страницу.

Используйте, когда У вас уже есть веб-сайт или приложение с собственным дизайном, и вы хотите, чтобы в нем была поддержка, а не передача клиента на другой адрес.

Короткая версия

Студия строит Место, куда вы отправляете клиентовВкладка приносит билеты Где ваши клиенты уже находятсяМногие компании работают как в том, так и в другом направлении, внедряя виджет билета в свою учетную запись для запросов в контексте, сохраняя при этом размещенный портал в качестве полноценного пункта самообслуживания со статьями и поиском.

Адрес и доступ

Доступ в режим доступа

Открыт ли портал для кого-либо или ограничен подписавшимися клиентами. Открытые порталы получают больше билетов и больше спама.

Выбор планировки

Портал и справочный центр делятся одним героем или используют два, на которых навигация и нижний колонтитул отображаются на обеих поверхностях, а также этикетка навигационного раздела.

Адрес порта

Выберите имя и OpsIQ показывает полученный портал и совпадающие адреса центра поддержки. Изменение его позже разрывает ссылки, которые вы уже отправили.

Ваш собственный домен

Обслуживает портал с принадлежащего вам домена, например support. yourdomain. com.

Встроенный билетный портал

Переключается на виджет, описанный выше, и открывается конструктор встраиваемых файлов, где вы выбираете макет, внешний вид и правила доступа, просматриваете результат и копируете фрагмент для своей страницы. Это не Portal Studio: студия проектирует размещенный портал, это ставит билеты внутри вашего собственного сайта. Оба могут быть включены сразу.

Как клиенты регистрируются

Это опции входа для ваших клиентов. Вход персонала настроен в соответствии с настройками, безопасностью.

Методы входа

Какие опции появляются на странице входа. Подключение и электронная почта работают автоматически.

Социальный вход

Потребительские учетные записи, каждый из которых нуждается в идентификаторе клиента и секрете, с адресом перенаправления, предоставленным OpsIQ для регистрации у этого поставщика.

Единый вход (OIDC)

Вход клиента через поставщика идентификационных данных, с эмитентом URL, идентификатором клиента, секретным и необязательным разрешенным списком доменов электронной почты.

Клиент SAML 2.0

Всё SAML эквивалент. OpsIQ предоставляет ответ ACS URL и ID объекта SP; вы предоставляете идентификатор объекта IdP, вход и выход URLs, Х.509 сертификата и необязательные имена атрибутов. SAML включить в Способы входа, иначе он не появится.

Безотказная входная информация из вашего приложения

Подписанная глубокая ссылка, так что клиент уже подписался на ваше приложение, попадает на портал без повторного входа. OpsIQ Поставляет подпись секретно, портал URL и ключ рабочего пространства, полный маршрут для вашего языка (PHP, Laravel; WordPress, WHMCS, Node.js, Flask, Django, .NET, Rails, Java, Go и на самостоятельно размещенных установках OpsIQ Сам сервер, пошаговые заметки установки и генератор для подписанной тестовой ссылки. Используйте генератор перед написанием любого кода.

Как работает маршрут

Ваш клиент нажимает ссылку поддержки, которая указывает на маршрут. Маршрут находит клиента, вошедшего в ваше приложение (гость отправляется на ваш логин и обратно), считывает секрет с вашего сервера, подписывает одноразовый токен, который истекает через две минуты, и перенаправляет на портал без реферера и заголовков магазина, чтобы токены не кэшировались или не просочились.

Собственный вход на портале в кнопке

В Portal Studio, страница входа, включите «Использовать логин моего сайта» и установите свою страницу входа URL к тому же маршруту. Портал добавляет opsiq_portal_return (страница, на которой был клиент); маршрут выполняет его только тогда, когда он находится внутри вашего адреса портала и возвращает клиента туда.

WHMCS

Нечего писать: The WHMCS Крюк с удаленных сайтов уже подписывает клиентов на портале и обрабатывает обратный адрес.Установите страницу входа URL к твоему WHMCS Логин клиентской зоны.

Подпишитесь везде

Выйти из портала также означает, что клиент не будет работать с вашим приложением.

Взятие и защита

Запрос форм поля

Какие структурированные поля собирает форма запроса. Каждое дополнительное поле теряет представления, поэтому спрашивайте только то, что вам нужно для сортировки.

Защита от спама и злоупотреблений

Медовый мешок и ограничение тарифов всегда защищают публичную форму. В верхней части вы можете заблокировать одноразовые адреса электронной почты, добавить свои собственные заблокированные домены и добавить CAPTCHA с помощью Google reCAPTCHA или Cloudflare Поворотный. reCAPTCHA повторно использует ключи, уже установленные в разделе Настройки, Безопасность; Ключи турникетов введены здесь.

Портальная аналитика

Краткое описание деятельности портала за последние тридцать дней.

Настройки

Настройки: Разрешения, Лицензия, Крон и Опасная Зона

Группа Системы, а также контроль доступа команды, которые решают, кто может видеть вкладку Настройки.

Доступ и разрешения команды

Разрешения для администраторов

Каждый администратор получает явный набор разрешений, охватывающих доступ к папке входящих сообщений чата, разделов Настройки они могут редактировать и их отделах. Любой человек с полным ролью Администратор всегда имеет все права. Разрешения настройки решают, какие вкладки видят человека, так что предоставить узкий набор, который позволяет им работать.

Лицензия

Показывает вашу текущую лицензию, на что она дает вам право и ее статус.

Настройка Cron

На облаке OpsIQ запускаются запланированные задачи для вас, и вкладка скрыта. Одна строка crontab управляет каждой запланированной задачей: автоматическое ответное действие билетов, маршрутизация эскалации, обновление обменного курса, опрос почтового ящика и синхронизация разъема.

1
Копировать строку

На вкладке показана точная строка crontab для вашего сервера с уже выбранным правильным двоичным кодом PHP.

2
Добавить в Crontab

Запустите crontab -e как пользователь, который запускает PHP и вставляет одну строку. На cPanel используйте инструмент Cron Jobs вместо этого.

3
проверять

Через минуту загорится пульсовая плитка, используйте Run сейчас, чтобы немедленно протестировать, а не ждать.

Панель сердцебиения показывает последний запуск, продолжительность и то, что было обработано как для очереди автоответчика, так и для опроса электронной почты и разъема. Она предупреждает, когда последний запуск пришел с ручной веб-кнопки, а не реального серверного кроны, и когда сердцебиение застопорилось.

Опасная зона

Удалить все данные отслеживания

Стирает все OpsIQ Вы указываете, что именно включать и вводить фразу подтверждения. Настройки и конфигурация сайта, заблокированные адреса, все написанное вашей командой (база знаний, часто задаваемые вопросы, переводы, дизайн портала, определения действий) и квитанции о согласии сохранены.

Данные очистки старше, чем

Тот же размах ограничивается рекордами старше, чем 30, 60, 90 или 180 Дни или год. Для автоматического удержания прокатки используйте значения удержаний в общем и отслеживании вместо этого и позвольте запланированной задаче сделать это.

🚫
Экспортировать резервную копию из Настройки, Генерал перед использованием чего-либо в Опасной Зоне.
Настройки

Управлять своей командой

Пригласите членов команды и назначьте роли, чтобы контролировать, кто может получить доступ к чему.

Команда
Команда и отделыЭкран команды: таблица администраторов с контактом, значок роли (владелец, полный администратор, агент) и отделы каждый может получить доступ.Команда и отделырабочее пространствоКоманда и отделы+ Сохранить пользователя adminСвязатьсяРоулДЕПАРТАМЕНТЫАО[email protected]Ада ОвусувладелецВсеКМ[email protected]Коджо МенсаПолный администраторВсеРТ[email protected]Рита ТеттеАгентБиллингСБ[email protected]АгентПоддержка1TEAMПригласить и управлять администраторами2ROLESВладелец · Полный администратор · Агент3SCOPEDДоступ в отдел
Реальный экран команды: каждый администратор со своим контактом, ролью и отделами, которые они могут достичь, агенты с размахом, владельцы полны.

Роли

владелец

Полный доступ, включая лицензию, выставление счетов и зону опасности.

Полный администратор

Полный доступ, кроме лицензии и опасной зоны.

Агент

Ограничено только назначенными отделами. Билеты, чаты и аналитика.

Приглашение членов команды

1
Иди в команду

Навигация в команду на боковой панели.

2
Нажмите Invite

Введите электронную почту члена команды.

3
Установить роль

Выберите владельца, администратора или агента.

4
Назначать департаменты

Для агентов выберите доступные отделы.

5
Отправить приглашение

Они получают электронное письмо со ссылкой на настройку.

Настройки

Выступление команды

Доступ осуществляется по разрешению, а не по роли: разрешение просмотра открывает страницу, разрешение управления разблокирует цели, QA и распознающие коллегу чтения, а разрешение вознаграждения-финансов - это то, что добавляет вкладку Вознаграждения. Руководитель команды может быть предоставлен любой из них, не став полноценным администратором.

Выступление команды
Выступление командыЭкран командной работы: агенты, ранжированные по составной строке баллов, CSAT и балансу вознаграждения с кнопкой оплаты за ряд.Выступление командырабочее пространствоВыступление командыАГЕНТШоуCSATОСНОВНЫЙРТРита Тетте4.8$42ПлатитьСБСэм Боатенг4.5$28ПлатитьКМКоджо Менса4.2$15ПлатитьАОАда Овусу4.9$51Платить1SCOREDКомпозитная производительность2CSAT & LOADРейтинги + объем3REWARDSБалансы агента по оплате труда
Реальный командно-производительный экран: каждый агент набрал по объему и CSAT, с остатком вознаграждения можно расплатиться за ряд.

Как организована страница

Командная производительность - это пять вкладок. Каждый отвечает на разные вопросы, и они заказываются тем, насколько срочно им обычно нужен ты.

01 Командный центр

Состояние прямой очереди, результаты клиентов по вашим целям, как были потрачены мощности, ситуации, требующие решения, и индекс скорректированный на данные для каждого партнера.

02 Товарищи по команде

Доска лидеров, признание (наиболее улучшенные и полосы), квесты и контроль выбора для того, кто может видеть рейтинг.

03 Качество

Оценки, записанные оценки, случайная корректировка соглашения рецензента, дрейф рецензент и споры о доказательствах.

04 Вознаграждение

Стоимость токена, требования к выплатам и регулируемое распределение периода: авторизовать финансируемый потолок, пересмотреть предварительный просмотр, завершить.

05 История

Как рабочее пространство перемещалось с течением времени: метрики тренда с диаграммой и тепловая карта покрытия 28-дня, показывающая, когда команда действительно работала. Каждая карта скрывается до тех пор, пока не будет достаточно истории для ее рисования.

Незаметный не ноль

Соратник по команде без достаточного объема обработки или чьи размеры, несущие доказательства, составляют менее половины настроенного веса, показан как Unscored. Их оценка, ранг и группа пусты, а их разбивка скрыта. Это преднамеренно: рендеринг отсутствующего измерения в виде нуля ставит кого-то в нижней части рейтинга за тихую неделю. Пороги доказательств настраиваются на рабочее пространство в Targets & scoring.

Два порога доказательств выполняют разные задания, и их стоит держать врозь. Минимальный уровень решает, забивает ли кто-то вообще. Минимальные рейтинги не влияют на оценку: он определяет право на получение награды и вознаграждения. Таким образом, товарищ по команде может быть полностью оценен и ранжирован и все еще не имеет права на этот период, потому что слишком мало клиентов оценили их.

💡
Каждая фигура приурочена к рабочему пространству, которое вы просматриваете, и временному диапазону, который вы выбираете. У партнера по команде, работающего в двух отдельных рабочих пространствах, есть независимая запись в каждом. Два исключения, которые стоит знать: сайт GROUP - это одно рабочее пространство, поэтому его домены-члены измеряются вместе; а просмотр всех сайтов намеренно измеряет все сразу.

Индекс эффективности

Композит из пяти измерений, каждый измеренный против цели, которую вы установили, а не против коллег, затем тянутся к середине, когда доказательства за ним тонкие. Обратите внимание на направление: корректировка перемещает фигуру в сторону 70, поэтому тонкий отличный счет стягивается вниз и тонкий плохой балл подтягивается. Плохая первая неделя на четырех разговорах также не является окончательным приговором. Как доказательство накапливается скорректированная цифра сходится на сырой.

Качество

Удовлетворенность клиентов от проверенных отзывов. Дополненные результатами QA-счета, где они существуют и регулируются.

Ответственность

Время первого ответа на P50 и P90 процентилях, по сравнению с вашими целями.

Резолюция

Время разрешения и скорость разрешения одним касанием.

SLA

Достижение против SLA, которое вы настроили, плюс риск и нарушенные счета.

Попечительство

Откройте и переведите ставки — работа, которая возвращается.

💡
Весы настраиваемые и относительные; они не должны иметь общий 100. Недостающие доказательства могут только понизить индекс, никогда его не поднимают — полный сконфигурированный вес остается в знаменателе.

Способность и продуктивное время

Занятость, продуктивное время, решенное за продуктивный час и онлайн-доля окна. Использование намеренно не сообщается: ему нужны запланированные часы в качестве знаменателя, OpsIQ не имеет списка или источника сдвига, а замененным знаменателем будет догадка с процентным знаком. Он читается как недоступный по этой причине прилагается.

⚠️
Занятость говорит, как было потрачено время, никогда не насколько хорошо оно было потрачены и никогда не финансирует, не устанавливает ворота или размер оплаты. Сотрудник команды без доказательств времени обработки читается как недоступный, никогда как ноль.

Обеспечение качества

Счетная карточка — это рубрика, с которой рецензенты оценивают реальные разговоры. Только опубликованная версия может получить оценку, а публикация новой версии никогда не переписывает то, что уже было забито. Обзор — свидетельство об одном разговоре, а не приговор человеку.

Соглашение об обзоре

Отчеты о качестве случайной статистики (каппа Коэна и Флейсса), а не сырой процент согласия. Два рецензента, которые проходят все согласны 100% времени при отсутствии информации.

Рецензент Дрифт

Независимо от того, набирает ли рецензент систематически более жесткий или мягкий балл по сравнению с коллегами в одном и том же разговоре - сравнение с остальной частью панели, а не тенденция со временем.

Споры

Соратник по команде может официально оспаривать доказательства, записанные о них. Открытый спор блокирует завершение периода вознаграждения до его разрешения.

самообзор

Отказался. Соратник не может дать оценку себе.

⚠️
Оценки, оцениваемые с помощью ИИ, не могут влиять на оплату до тех пор, пока не будет опубликована калибровка, показывающая, что модель достаточно близко согласуется с рецензентами-людьми, измеряемая каппой по минимальному образцу. Открытые ворота означают, что эта модель соглашается с людьми настолько близко, чтобы их можно было подсчитать — это никогда не означает, что она верна.

признание

Только рейтинг задокументировал режимы неудач: метрические игры, выгорание и публичное порицание того, кто последний. Три альтернативы сидят рядом с ним.

Улучшенный

Измеряется против собственного предыдущего рекорда товарища по команде, никогда против коллег, с усадкой, поэтому крошечный знаменатель не может купить победу.

Стреки

Последующие периоды, встречающиеся с фиксированной, объявленной планкой — средний рейтинг, обработанный объем, количество оценок и отрицательная обратная связь, все абсолютные цифры. Каждый может провести серию одновременно, поэтому она не создает рейтинга, а коллега, имеющий исключительный месяц, не может сломать ваш.

Рейтинг Opt-in

Партнёр по команде всегда видит свой собственный индекс; видят ли коллеги решение рабочего пространства. Процентные полосы могут быть опубликованы вместо абсолютных позиций.

💡
Признание никогда не касается денег. Протяженность не может финансировать выплату или сломать ее, и большинство улучшений - это не категория наград.

Квесты

Цель, к которой команда работает, измеряется по фиксированной объявленной планке, а не друг против друга — так что каждый может очистить тот же квест за тот же период.

Сфера охвата и каденция

Индивидуальный или командный; одноразовый, повторяемый или сезонный с явным окном.

Критерии

Обработанные разговоры, полученные рейтинги, активные дни, средний рейтинг или отрицательный коэффициент обратной связи. Все абсолютно — нет метрики, значение которой зависит от того, что сделали коллеги.

Качественный охранник

Требуется на любом квесте с объемной целью. Удар по номеру, в то время как качество падает ниже пола, удерживает квест, а не завершает его, и он показан как скрытый, а Не недостроенный.

Повторные ограничения

Шапка за период, приводимая в движение самым медленным критерием, плюс дополнительное охлаждение перед повторением может рассчитывать.

Команды квестов

Общий прогресс без опубликованной атрибуции на одного партнера, поэтому командный квест не может стать таблицей лидеров.

Коучинговые сессии

Тренерская сессия - это запись, а не чат. У нее есть тренер, коучинг товарища по команде, запланированное время, согласованные точки разговора и резюме, написанное после этого. Реальные чаты, билеты и оценки качества прикреплены к нему в качестве доказательства, поэтому разговор привязан к работе, которая действительно произошла, а вовсе не к запоминающемуся впечатлению.

Точки разговора

Согласен перед сессией, поэтому товарищ по команде не вступает в сюрприз.

Сосновые доказательства

Чаты, билеты и оценки качества прикреплены к сессии. Пинк хранит ссылку - тип и идентификатор - не копию, поэтому он всегда указывает на запись в реальном времени. OpsIQ не проверяет идентификатор перед его принятием.

Пункты действий

Каждый с владельцем и сроком годности. Предмет, прошедший свою дату, показан как просроченный - производное состояние, а не статус, который кто-то должен запомнить, чтобы установить.

Частная записка

Тренер никогда не сможет прочитать его — ни как агента, ни как менеджера, ни в качестве владельца. Этот чек проходит до любого другого разрешения и не может быть отменен.

Кто может посмотреть сеанс

Тренер, товарищ по команде и любой человек с разрешением на работу в команде. Никто другой, включая других товарищей по команде в том же отделе.

Аудит

Каждое создание, обновление, пин-код, распинание и завершение записывается с тем, что изменилось, кем.

💡
Коучинг намеренно отделен от забивания и от денег. Сеанс не меняет ничьего индекса, не вносит вознаграждение и не появляется на доске лидеров.

Награды и награды

Записанная деятельность конвертируется в токены с установленной вами денежной стоимостью. Путь к оплате намеренно медленный и каждый шаг записывается.

1
Установите значение токена

Сколько токенов равно количеству денег и сколько стоит каждое действие.

2
Утвердить потолок финансирования

За закрытый календарный период полный администратор заявляет максимальные токены, которые он может заплатить. Сохранение формы настроек не разрешает бюджет, и она не может изменить потолок, который уже был разрешен.

3
Обзор предварительного просмотра

Получатели, резерв и причина, по которой кто-то не имеет права. Открытые споры о доказательствах блокируют этот шаг.

4
Завершать

Срок, который ничего не выделял, может быть аннулирован и перезапущен. Тот, который выдал токены, должен быть сначала отменен: OpsIQ пишет компенсирующую запись на каждый кошелек и никогда не удаляет оригинал, поэтому реестр все еще показывает, что произошло и почему, и только тогда период выпущен. Разворот отказывается, если кто-то уже обналичил больше, чем взысканная сумма, и называет кого и на сколько.

⚠️
Оценки качества ИИ могут дополнить это суждение, но никогда не заменят его, и товарищ по команде, показанный как Unscored, не имеет права. Каждый участник ограничен на уровне 25% выше их ожидаемой доли периода, поэтому один очень большой объем месяца не может поглотить весь бюджет.
💡
Владелец счета не принимает участия в наградах или вознаграждениях токенов, без переключателя: они санкционируют накопительный потолок и завершают каждое выделение, а выше них никого нет, чтобы одобрить то, что они будут платить сами. Их работа измеряется, оценивается и ранжируется на доске точно так же, как кто-либо другой.

Все остальные принимают участие по умолчанию, руководители команд и совладельцы включены. Чтобы кого-то не было, откройте их в Team & Departments и выключите Takes в варианте наград и вознаграждений. Их работа все еще оценивается и показывается; они перестают быть кандидатом с этого момента, и ничего уже завершенного не затрагивается.

⚠️
Никто не одобряет деньги для себя. Потому что люди, которые могут принять участие, также являются людьми, которые смогут одобрить выплаты, OpsIQ отказывается от выплат или кредита в свой собственный кошелек, оплачивая свое собственное требование, завершая период, в котором вам будет выплачено, и заканчивая наградой, которую вы выиграете. Другой полный администратор или владелец должен это сделать. Оплатите все претензии пропускает свои собственные и сообщает об этом как пропущенный, а не провалился.

Кто может видеть и что делать

Посмотреть выступление команды

Совет директоров, состояние в реальном времени, пропускная способность и обзор качества рабочего пространства.

Управление производительностью команды

Цели и оценка, экспорт, QA-счета и оценки, коучинг, квесты и чтения, которые несут данные, определяющие коллег, такие как история за администратором и история наград.

Посмотреть Команда наградить финансы

Балансы, денежные ценности, примечания к претензиям и ссылки на платежи — отдельно от доказательств эффективности, потому что они связаны с заработной платой.

Только полный администратор

Каждая денежная мутация: выплата вознаграждения, оплата или отклонение требования, санкционирование бюджета, завершение, аннулирование или обращение вспять распределения и установление ставки токена к наличным.

Используя его справедливо

Индекс эффективности - это управленческие доказательства, а не автоматическое решение о трудоустройстве. Откройте исходный разговор за номером, прежде чем действовать по нему, и взвесьте сложность дела, графики, отпуск и потребности в доступности. Одна сложная неделя не выглядит устойчивой моделью.

Настройки

Ваши сайты (рабочие пространства)

Сайты (рабочие пространства) позволяют управлять несколькими веб-сайтами из одного OpsIQ У каждого есть свой собственный отслеживающий, ИИ, разъемы и доступ к команде.

Сайты
Ваши сайтыЭкран сайта: список рабочих пространств, каждое со своим доменом, типом, разъемом, значком состояния и кнопкой «Открыть», плюс Add-new-site.Ваши сайтырабочее пространствоВаши сайты+ Добавить новый сайтSshop.acme.comeCommerce · Shopify разъемАктивныйОткрытьHhost.acme.comХостинг · WHMCS разъемАктивныйОткрытьBblog.acme.comКонтент · нет разъемаНастройкаОткрыть1MULTI-SITEОдно рабочее место на сайте2ISOLATEDДанные никогда не смешиваются3PER-SITEСобственные настройки и разъемы
Реальный экран Сайта: каждый сайт представляет собой собственное изолированное рабочее пространство (собственный домен, разъем и настройки), добавленное и открытое из одного списка.

Создание сайта

1
Перейти на подключенные сайты

Перейдите на подключенные сайты.

2
Добавить новый сайт

Введите имя, домен и описание.

3
Копировать ключ сайта

Каждый сайт получает уникальный ключ (site_xxx) для фрагмента виджета.

4
Настройка независимо

Каждый сайт имеет свой собственный ИИ, разъемы и настройки.

Сколько сайтов я могу иметь?+

Зависит от вашего лицензионного плана.

Настройки

Лицензия и план

Ваша лицензия OpsIQ контролирует функции, ограничения сайта и кредитный баланс AI.

Лицензия
Лицензионный центрThe OpsIQ Лицензионный центр: план, значок Активного статуса, маскированный лицензионный ключ, счетчик AI-кредита и кнопка Force-remote-check.Лицензионный центррабочее пространствоOpsIQ Лицензионный центрПланБизнесСтатусАктивныйКлючOPSIQ-••••-••••-2F9CКредиты AI$68 левыйУдаленный контроль1PLAN & STATUSАктивный, с первого взгляда2KEYHMAC-кэшируется локально3CREDITSБаланс и ограничения AI
Настоящий Лицензионный центр: ваш план и активный статус, замаскированный ключ, баланс AI-кредита и перепроверка силы одним щелчком мыши.
Лицензионный ключ

Введите в Настройки > Лицензия. Проверено на сервере лицензий OpsIQ.

Лицензия HeartBat / Проверка

OpsIQ обычно считывает подписанный локальный лицензионный кэш и обновляет валидацию, когда это необходимо. Используйте удаленную проверку Силы, когда вам нужен немедленный результат; Диагностика определяет DNS HTTPS или проблемы с серверным временем.

План

Определяет доступность и ограничения.

Предельный лимит сайта

Максимальное количество рабочих мест.

Кредиты AI

Если вы используете управляемый ИИ, ваш кредитный баланс отображается здесь.

истечение срока

Продлить до истечения срока действия, чтобы избежать прерывания обслуживания.

Что происходит, когда срок действия лицензии истекает?+

Отслеживание, билеты и CRM продолжаются. Функции ИИ останавливаются до обновления. Данные сохраняются.

Настройки

Профиль, пароль и двухфакторная аутентификация

Каждый администратор может поддерживать свою собственную личность, рабочие предпочтения, пароль и двухфакторную аутентификацию.

Экран продукта
Мой профильСтраница профиля разделяет личные данные, язык/время, аватар/подпись, пароль и двухфакторную аутентификацию.Мой профильрабочее пространствоОсуществляетсяПолный комплектTIMEZONEЕвропа/Афины2FA-сертификатывключенныйЖИВОЙ ВИДЕО РАБОТЫИмя и адрес электронной почтыЛичная идентичностьРедактироватьЯзык и часовая зонаДаты и интерфейсРедактироватьАватар и подписьОтветы и присутствие командыРедактироватьПароль и 2FAЗащита аккаунтовБезопасный1UPDATE PROFILEИдентичность и место2SECURE LOGINПароль и 2FA3SAVEПрименить к этому admin
Страница профиля разделяет личные данные, язык/время, аватар/подпись, пароль и двухфакторную аутентификацию.

Настройки профиля принадлежат администратору, зарегистрированному в системе, и не меняют брендинг рабочего пространства. Используйте уникальный пароль и включите двухфакторную аутентификацию. Изменение настройки электронной почты или аутоентификации может потребовать повторной проверки или нового входа.

Настройки

Предпочтения в отношении уведомлений

Уведомление о предпочтениях контролирует, какие операционные события достигают администратора в продукте или по электронной почте.

Экран продукта
Предпочтения в отношении уведомленийСтраница уведомлений предоставляет выбор в приложении и электронной почте для каждого события плюс недавний список уведомлений.Предпочтения в отношении уведомленийрабочее пространствоIN-APPНадЭмильселективныйUNREAD4ЖИВОЙ ВИДЕО РАБОТЫБилеты, назначенныеIn-app и электронная почтаНадКлиент ответилВ приложенииНадРиск SLAIn-app и электронная почтаНадОдобрениеIn-app и электронная почтаНад1CHOOSE EVENTSТолько полезные сигналы2CHOOSE CHANNELIn-app или электронная почта3РЕЗЮМЕПоследние уведомления
Страница уведомлений предоставляет выбор в приложении и электронной почте для каждого события плюс недавний список уведомлений.

Предпочтения охватывают назначение билета, ответы клиентов, предупреждения SLA, передачу чата и события одобрения ИИ. Держите срочные оперативные сигналы включенными где-то; отключение электронной почты не обязательно выключает уведомление в приложении.

Настройки

Обзор безопасности

Обзор безопасности - это первый экран для оценки блоков, атак входа в систему, сессий угроз, тенденций безопасности и целостности событий.

Экран продукта
Обзор безопасностиSecurity Overview объединяет текущие карты риска, тренд 14-день, список злоумышленников, ленту событий и статус целостности.Обзор безопасностирабочее пространствоACTIVE BLOCKS18FAILED LOGINS42HIGH THREAT3ЖИВОЙ ВИДЕО РАБОТЫАвтоблокировка7_ день и источникТенденцияПоследние нападающиеIP, страна и причинаОбзорМеры безопасностиРиск и результат действиякормЦелостность хеш-цепейОчевидная цепочка событий Tamperдействительный1READ HEADLINEТекущее воздействие2OPEN EVIDENCEНападающие и события3АКТБлок, исследование, экспорт
Security Overview объединяет текущие карты риска, тренд 14-день, список злоумышленников, ленту событий и статус целостности.

Используйте заголовочные карты для сортировки, затем откройте соответствующий аудит, неработающие логины, заблокированные IPs или JavaScript Страница ошибок для работы на рекордном уровне. 14 Тренд дня более полезен, чем один всплеск. Сеансы с высокой степенью угрозы должны быть исследованы против посетителя, запроса и доказательств аутентификации до применения постоянного блока.

Настройки

Очевидный журнал аудита Tamper

В журнале аудита регистрируется, кто что сделал, когда, на какой объект, на каком уровне риска и удалось ли это.

Экран продукта
Аудит деятельностиСтраница аудита предоставляет возможность поиска явной деятельности с действием, актером, риском, целью и результатом.Аудит деятельностирабочее пространствоСобытия18.2kHIGH RISK21INTEGRITYдействительныйЖИВОЙ ВИДЕО РАБОТЫРазрешенный коннектор[email protected] · ShopifyУспехAPI ключ отозван[email protected] · Ключ 19УспехНастройки изменены[email protected] · АИУспехРазрешение отказано[email protected] экспортЗаблокированный1FILTERДействие, риск и актер2ЗамечательныйЦель и результат3EXPORTCSV или JSON
Страница аудита предоставляет возможность поиска явной деятельности с действием, актером, риском, целью и результатом.

фильтр по действию, риску и актору; экспорт CSV или JSON Хеш-цепочка помогает обнаружить недостающие или измененные строки аудита, но она не заменяет защищенные резервные копии и ограниченный доступ к базе данных. Относитесь к экспорту аудита как к конфиденциальному, потому что они могут идентифицировать пользователей, записи и действия безопасности.

Операции

диагностика

Диагностика превращает проверки подсистем в простые результаты по здоровью и направляет последующие действия.

Экран продукта
диагностикаДиагностика групп проверяет здоровье для виджета, ИИ, билетов, интеграций, Site Intelligence, фоновых задач, автоматизации CRM, лицензирования и хранения.диагностикарабочее пространствоЗдоровья13WARNING2несостоявшийся1ЖИВОЙ ВИДЕО РАБОТЫвиджетКонечные точки Beacon и ChatздоровыйСправочные задачиКрон сердцебиение поздноПредупреждениеЭлектронная почтаИсходящий тест провалилсянеудачникКоннекторыРегистрация и прием событийздоровый1REFRESHПроверка текущих операций2OPEN WARNINGЧитать доказательства3FIX AND RETESTПодтверждает восстановление
Диагностика групп проверяет здоровье для виджета, ИИ, билетов, интеграций, Site Intelligence, фоновых задач, автоматизации CRM, лицензирования и хранения.

На странице проверяется скорость сайта, ранг/ключевое слово/обратная ссылка/местные данные, шлюз AI и действия, билеты, сканер/аудиты, интеграция/ввод событий, задачи фона, автоматизация CRM, лицензия, виджет и связанные с ними услуги продукта. Он намеренно сообщает о причинах, понятных оператору, а не разоблачает сырые секреты.

После изменения, Обновить и подтвердить пораженную подсистему возвращается здоровым. Зеленая страница диагностики необходима, но не достаточна для запуска; также заполните контрольный список перед запуском.

Настройки

Безопасность и доступ

OpsIQ включает несколько уровней безопасности для защиты вашего администратора, данных и API доступ.

Как это работает
Безопасность и доступЩит безопасности рядом с включенными элементами управления: двухфакторный, OIDC SSO, SCIM 2.0 OAuth2 PKCE, CSRF/CSP, IP брандмауэр, лимиты скорости и секретный хранилище.Двухфакторный (TOTP)OIDC SSOSCIM 2.0OAuth2 PKCEОФСБ + ППЦIP брандмауэрОграничения по ставкамТайны хранилища
Безопасность

Функции безопасности

Аутентификация Admin

Email/password с дополнительным 2FA.

Локаут входа

Временный замок после слишком многих неудачных попыток.

IP блокировка

Блок IPs или CIDR варьируется от доступа к отслеживаемым сайтам.

Оценивание угрозы

Поведенческие оценки угроз. Посетители с высоким уровнем опасности могут быть автоматически заблокированы.

HTTPS правоприменение

Требуется для всех соединений. HTTP перенаправляет на HTTPS.

Заголовки СТС

Строгое транспортное обеспечение предотвращает атаки понижения рейтинга.

Защита от СРЧС

Все формы администратора включают токены CSRF.

XSS защита

Все пользовательские вводы устранены. Заголовки CSP ограничивают выполнение сценариев.

Защита SSRF

Исходящие веб-хуки блокируют частные/внутренние IP адреса.

Рекомендуемая установка

1
Включите 2FA

Для всех административных счетов.

2
Сильные пароли

Минимальные 12 символы, смешанные.

3
Обзор счетов

Удалить доступ для бывших членов команды.

4
Монитор неудавшихся логинов

Еженедельно проверяйте подозрительные модели.

5
Обновляйтесь

Быстрое обновление для исправлений безопасности.

Настройки

Роли и разрешения

Role-Based Access Control позволяет контролировать то, что может сделать каждый член команды.

Роли и разрешения
Роли и разрешенияМатрица «роль за возможностью»: у владельца есть все; полному администратору не хватает выставления счетов и опасной зоны; агент имеет только ограниченные билеты.Роли и разрешениярабочее пространствоСеттингиСВЕТопасностьПальчикивладелецПолный администраторАгентscoped13 ROLESВладелец · Полный администратор · Агент2GRANULARНа страницу + на департамент3DEFAULT-DENYЗабытые маршруты заблокированы
Матрица ролей с первого взгляда: владелец получает все, Полный администратор - все, кроме выставления счетов и опасной зоны, агент только свои ограниченные билеты.

Роли по умолчанию

владелец

Все, включая лицензию, зону опасности и управление установкой.

Полный администратор

Все, кроме лицензии и опасной зоны.

Агент

Отвечайте на билеты и чаты назначенного отдела, просматривайте аналитику. Никаких настроек, команды или доступа к безопасности.

Можно ли создавать роли на заказ?+

Три встроенные роли плюс назначение в отдел дает детальный контроль.

Настройки

Заблокированный IPs

Управляйте адресами IP, заблокированными при доступе к отслеживаемым сайтам.

Заблокированный IPs
Заблокированный IPsThe blocked-IPs screen: a block-an-IP/CIDR form beside a Blocked Addresses table with each entry, date, reason and an Unblock button.Заблокированный IPsрабочее пространствоБлокировать IP /CIDR203.0.113.0/24Причина (факультативно)блокироватьБлокированные адреса203.0.113.9Jun 12 · грубая силаРазблокировать45.12.0.0/16Jun 10 · спамРазблокировать102.89.6.2Jun 9 · ЗлоупотреблениеРазблокировать1БлокIP или диапазон CIDR2LISTКто и когда, с учетом3UNBLOCKОдин клик
Настоящий заблокированный IPs Дисплей: блокировать один IP или диапазон CIDR, и управлять списком, каждый со своей датой, причиной и разблокировкой одним щелчком мыши.

Как заблокировать

1
Перейти в раздел Безопасность > Заблокированный IPs

2
Добавить диапазон IP или CIDR

Пример: 203.0.113.42 или 203.0.113.0/24

3
Добавить причину

Документ почему: спам, злоупотребление, соскребание и т. д.

Затронет ли блокировка законных пользователей?+

Если клиенты разделяют корпорацию IP VPN, блокируя это IP Используйте узкие блоки.

Настройки

Неудачные логины

Все неудачные попытки входа в систему для вашего OpsIQ администратора.

Неудачные логины
Неудачные логиныЭкран неудачных логинов: таблица учетных записей /IPs с подсчетом отказов, временем последней попытки и кнопкой блокировки в строке.Неудачные логинырабочее пространствоНеудачные попытки входаСчет / IPнесостоявшийсяВ последний раздействие[email protected] · 41.62.10.472 часа назадблокировать[email protected] · 102.89.6.2318 лет назадблокироватьНеизвестный · 45.12.9.71226 лет назадблокировать[email protected] · 88.21.4.921hблокировать1WATCHНеудачные попытки входа2COUNTSЗапись / IP3АКТБлок из ряда
Реальный экран неудачных входов: каждая учетная запись /IP с ее количеством отказов и последней попыткой блокирует источник грубой силы прямо из строки.

Что показывает каждая запись

Дата/время

Когда попытка случилась.

Электронная почта

Используемый адрес электронной почты.

IP адрес

Источник попытки.

Страна

Географическое положение.

Причина

Неправильный пароль, заблокированный или не найденный.

Предупреждающие знаки

Много попыток, один и тот же e-mail

Угадывание паролей. Убедитесь, что включена 2FA.

Много попыток, разные письма

Автоматизированная атака. Блокируйте источник IP.

Необычные страны

Если ваша команда является местной, то попытки иностранных атак могут быть неверными.

Настройки

Аналитик безопасности AI

Аналитический слой поверх страниц Security: вердикты, краткие отчеты об инцидентах, ежедневный дайджест, еженедельная проверка осанки, политика блокировки Ask Security и 0-токен.

Каждая страница Security записывает, что произошло, но чтение этого все еще требует суждения. Аналитик безопасности ИИ добавляет это суждение на место, и оно построено так, чтобы тратить почти ничего: он никогда не сидит в маяке или пути входа в систему, детерминированные правила разрешают очевидные случаи без вызова AI, приговоры кэшируются, а лучший вывод аналитика - это детерминированное правило, которое затем навсегда применяется при нулевых токенах. Включите функции в Настройки → БезопасностьВсем отменяется дефолт.

Что добавляется

Вердикт чипов + Объяснить

Заблокировано IPs и Неудачные входы показывают доброкачественный / подозрительный / враждебный чип с доверительным баллом. Объяснение открывает аргументацию, использованные факты и действия Блокировать/Выпустить одним щелчком мыши. 24h, так пересмотреть IP бесплатный.

Инцидентные сводки

Связанные с этим события группируются в один инцидент (волна входа, URL сканирование, автоматический блок-всплеск) с простой английской временной линией и одним рекомендуемым следующим шагом.

Ежедневный дайджест

Один раз в день: вчера по сравнению с исходным уровнем, блоками, инцидентами и чем-то еще. Тихие дни посылают детерминистскую всепроникающую информацию при нулевых токенах.

Еженедельная проверка осанки

Контрольный список закалки в понедельник (2 пробела в частоте, порог блокировки по сравнению с реальным объемом атаки, предупреждения) с серьезностью, усилиями и точным исправлением на предмет.

Задайте вопрос безопасности

Вопросник в Обзоре Безопасности, который отвечает на вопросы из вашего состояния безопасности в реальном времени. Глубокие серверные вопросы передаются в чат администратора инженера, а не угадываются.

Политика + автопилот

Аналитик предлагает конкретные правила блокировки в виде карт «Утвердить / Отпустить»; утвержденные правила применяются при нулевых токенах с счетчиком прямого попадания.

Настройки

Аналитик безопасности AI (security_ai_enabled)

Мастер-переключатель. Включает чипы вердикта, Объясняет и Задает Безопасность. Только неоднозначные IPs достигают модели, скрепленные одним звонком.

Инцидентные сообщения (security_ai_incidents)

Соединяет события в инциденты и пишет каждую новую историю. Запускается на существующий почасовой крон безопасности.

Ежедневный дайджест (security_ai_digest)

Один раз в день на звонке и обзоре. Тихие дни ничего не стоят.

Еженедельная проверка осанки (security_ai_posture)

В понедельник затвердевает контрольный список по Обзору.

Автопилот политики (security_ai_autopilot)

Позволяет аналитику активировать свои самые безопасные предложения без присмотра: только обратимые блоки с ограниченным временем IPs или не шире, чем /24, никогда не совместно используемый / мобильный / частный, ограниченный 10 В час, всегда проверенный и неотвратимый.

💡
Каждый звонок помечается security_ai с собственным ежемесячным ограничением в AI Config → Cost Guardrails (токены по умолчанию 300k). Если ограничение нажимается, функции ухудшаются до детерминированных показаний. Блокировка, блокировки и оповещения никогда не зависят от этого бюджета. Аналитик никогда не может удалить данные, изменить настройки, коснуться реестра аудита или сделать постоянный запрет.
Операции

Крон и автоматизация

OpsIQ использует один планировщик продуктов для проведения опросов по электронной почте, автоматизации билетов, аналитических свертываний, удержания, очередей ИИ, работы CRM, отчетов и заданий разъема.

Экран продукта
Крон и автоматизацияОдин продукт cron обеспечивает сердцебиение; OpsIQ решает, какие внутренние рабочие места должны быть выполнены.Крон и автоматизациясерверсердечная недостаточностьКаждую минутуRUNNERcron/all.phpHEALTHНастройкиЖИВОЙ ВИДЕО РАБОТЫУнифицированный продукт Runneropsiq/cron/all.phpтребуемыйБилеты и очереди на электронную почтуКороткая плановая работаАктивныйАналитика и удержаниеВнутренняя каденциязапланированныйПодписчики ConnectorОбъявленные события cronСкорпион1INSTALL ONE LINEЗапускайте планировщик продуктов каждую минуту2CHECK CRON SETUPПодтверждаем сердцебиение CLI3USE DIAGNOSTICSРасследование поздней или неудачной работы
Один продукт cron обеспечивает сердцебиение; OpsIQ решает, какие внутренние рабочие места должны быть выполнены.

Требуемый продукт cron entry

Добавьте эту строку в crontab для того же сервера и среды PHP, которая работает на OpsIQ:

OpsIQ ввод кронтаба продукта
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1

Заменить /path/to/opsiq использовать полный путь PHP CLI, когда хост требует одного из них; /usr/bin/php8.4.

Не используйте верхний уровень /cron.php для работы с продуктом. В этом репозитории бегун принадлежит к отдельному непродуктовому сервису за пределами этого справочника. OpsIQ Производитель: Product Runner opsiq/cron/all.php.

Что движет унифицированный планировщик

Билеты и очереди AI

Процессы, связанные с автоматическими повторами, эскалациями, утверждениями и другими очередей продукта.

Входящий e-mail

Опросы настраивали почтовые ящики, где опрос является выбранным методом приема.

Аналитика и сессии

Собирает сессии и обновляет запланированные агрегаты, когда они должны быть.

CRM и взаимодействие

Запускает подсчет очков, жизненный цикл, рабочий процесс, кампанию и задачи с запланированным отчетом, которые включены.

Сохранение и обслуживание

Выполняет должные работы по очистке, архивированию, истечению срока действия и целостности.

Коннекторы

Отправляет разъемы крон-подписчикам и проводит опрос только для установленных, включенных и настроенных разъединиц.

Проверить Cron

  1. Открыть Настройка - Cron Setup Подтвердите, что продукт существует.
  2. Использовать Беги сейчас же один раз, затем подтвердите админ и опрос обновления сердцебиения.
  3. Проверить диагностика Для проблем с поздним сердцебиением, PHP CLI, база данных или файлообменник.
  4. инспектировать /tmp/opsiq-cron.log или путь журнала, который вы выбрали при неисправности ручного запуска.

Держите обработчики разъемов короткими, идемпотентными и ограниченными рабочим пространством. Выполните длинные синхронизации и сохраните курсор / контрольную точку, чтобы следующий запуск мог безопасно продолжаться.

🚫
Когда cron продукта останавливается, работа на основе времени OpsIQ прекращается или становится запоздалой, даже если обычные страницы администратора все еще могут загружаться.
Операции

Операции по развертыванию в хостинге

Развертывание OpsIQ использует те же экраны продуктов и рабочие процессы, в то время как оператор хостинга управляет серверным слоем. Коммерческая регистрация, планы, выставление счетов и процедуры портала учетных записей находятся за пределами этого руководства.

Экран продукта
Развертывание в хостингеХостинг изменяет тех, кто поддерживает инфраструктуру; это не меняет того, как клиенты используют OpsIQ.Развертывание в хостингерабочее пространствоPRODUCT UIТо же самое OpsIQINFRASTRUCTUREоператорWORKSPACE DATAизолированныйЖИВОЙ ВИДЕО РАБОТЫВремя выполнения приложенияPHP, веб-сервер и база данныхуправляемыйПродукты CronЗапланировано хостинг-операторомпроверятьРезервные копии и обновленияПолитика и доказательства поставщикаОбзорOpsIQ НастройкиСайты, AI, команда и разъемыТвоя команда1OPERATE OPSIQ NORMALLYИспользуйте одну и ту же навигацию по продукту2VERIFY SERVICE HEALTHИспользуйте диагностику и доказательства статуса3KNOW RESPONSIBILITYОтдельные настройки продукта от работы хостинга
Хостинг изменяет тех, кто поддерживает инфраструктуру; это не меняет того, как клиенты используют OpsIQ.

Чем обычно управляет хостинг-оператор

  • Веб-сервер, PHP время выполнения, служба баз данных, TLS и хранилище.
  • Унифицированный крон продукта и его журналы серверного уровня.
  • Обновления приложений, мониторинг инфраструктуры и процесс резервного копирования, определенный соглашением о хостинге.

Что еще может сделать OpsIQ администратор

  • Веб-сайты и установка виджетов, настройки ИИ, знания, почтовые ящики и рабочие процессы поддержки клиентов.
  • Доступ команды, отделы, средства управления безопасностью, API ключи, разъемы, автоматизация и настройки хранения данных.
  • Проверка продукции с помощью диагностики, журнала аудита, разъемных тестов и реальных комплексных проверок.

Оперативные проверки

Не думайте, что управляемый сервис означает, что каждая интеграция продукта является здоровой. Подтвердите последние доказательства резервного копирования и политику удержания с оператором хостинга и используйте OpsIQ Диагностика после изменений в DNS, электронная почта, поставщики ИИ, веб-сайты или разъемы.

Этот раздел охватывает только операции с продуктами. Коммерческая посадка, подписки, выставление счетов и администрирование клиентского счета остаются за пределами руководства OpsIQ.

Операции

Самостоятельный хостинг OpsIQ

Самостоятельно размещенный OpsIQ Установка выполняется на инфраструктуре, которую вы контролируете. Вы несете ответственность за время выполнения, базу данных, TLS, cron продукта, резервные копии, обновления и мониторинг.

Экран продукта
самостоятельныйСамостоятельный хостинг дает контроль над инфраструктурой и делает вашу команду ответственной за каждую операционную зависимость.самостоятельныйсерверPHP8.4+DATABASEMySQL 5.7+SCHEDULERКаждую минутуЖИВОЙ ВИДЕО РАБОТЫРасширения Runtime, pdo_mysql, mbstring, jsonтребуемыйДополнительные расширенияxml, openssl, zip, международный, gdтребуемыйАльтернативная база данныхMariaDB 10.3+ с InnoDBПоддерживаемыйТранспортHTTPS и исходящий доступ провайдерапроверять1PREPARE THE SERVERТребования к времени выполнения матча2INSTALL AND CONFIGUREИспользуйте выделенную базу данных и HTTPS3ADD PRODUCT CRONЗапуск opsiq/cron/all. php
Самостоятельный хостинг дает контроль над инфраструктурой и делает вашу команду ответственной за каждую операционную зависимость.

Минимальный контракт на программное обеспечение

PHP

PHP 8.4 Требуемые расширения: curl, pdo_mysql, mbstring, json, xml, openssl, zip, intl и gd.

База данных

MySQL 5.7+ или MariaDB 10.3+ с помощью InnoDB. Создайте специальную базу данных и наименее привилегированного пользователя приложения.

Веб-сервер

Apache или Nginx настроены для OpsIQ фронтального контроллера, статических активов и необходимых перезаписей.

HTTPS

Требуется для сеансов администратора, трафика виджетов, API ключей, веб-хуков и вызовов провайдера.

Исходящий доступ

Разрешите DNS и HTTPS доступ к конечным точкам AI, электронной почте, разъему и лицензии, которые вы фактически включаете.

Доступ к файлам

Пользователи Интернета и CLI должны иметь возможность читать файлы приложений и писать только в документированные места выполнения / хранения.

Крон

Запускайте OpsIQ планировщик продуктов каждую минуту с той же конфигурацией приложения и доступом к базе данных, что и веб-процесс.

Последовательность установки

  1. Загрузите выпуск в корень предполагаемого документа и сохраните структуру каталога.
  2. Создайте базу данных и пользователя приложения, затем введите базу данных, канонический URL и настройки лицензии.
  3. Запустите процесс установки и создайте первую учетную запись владельца.
  4. Включите HTTPS и проверьте перенаправления, файлы cookie и публичные пути виджета /API.
  5. Добавить унифицированный OpsIQ крон продукта:
Самостоятельно размещенный продукт cron
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1
  1. Открытые настройки - установка крон и диагностика; запустите планировщик один раз и устраните каждую неудавшуюся зависимость.
  2. Настройка резервного копирования, восстановление тестирования, сохранение журнала и обновление процедур перед добавлением производственных данных.

Безопасное обновление

  1. Прочитайте заметки к выпуску и проверьте необходимые расширения PHP перед изменением файлов.
  2. Резервное копирование базы данных и файлов приложений/конфигураций, а затем доказательство того, что резервная копия может быть восстановлена в месте проведения теста.
  3. Развертывайте новые файлы без удаления конфигурации, характерной для установки, или данных времени выполнения.
  4. Запустите предоставленный процесс миграции / префайт и проверьте логин, отслеживание виджетов, билеты, электронную почту, AI, разъемы и cron.
  5. Сохранить предыдущий выпуск и резервную копию базы данных для документированного окна отката.
🚫
Репозиторий верхнего уровня /cron.php Это не так. OpsIQ Пойнт автоматизация продукта только на opsiq/cron/all.php
⚠️
Не удаляйте . schema_cache.json в качестве рутинного обслуживания. Удалите его только тогда, когда инструкции по продукту явно требуют восстановления схемы-кэша.
Операции

Руководство по производству

Контрольный список и лучшие практики для работы OpsIQ в производстве.

Руководство по производству
Руководство по производствуКонтрольный список go-live: пользовательский домен и SSL, обученный ИИ, разъемы и cron, резервные копии и удержание, а также роли команды.Контрольный список Go-liveрабочее пространствоПрежде чем ты будешь житьПользовательский домен + SSL сконфигурированИИ обучен вашему контентуПроверенные коннекторы · Крон-запускРезервное копирование запланировано · набор удержанияКоманды назначены и рассмотрены1GO-LIVEКонтрольный список перед запуском2ВЕРИФИЯДомен · SSL · резервные копии3CONFIDENTКорабль, когда он зеленый
Проверочный список go-live, поэтому ничего не пропущено: домен + SSL, обученный ИИ, тестируемые разъемы и кроны, резервные копии и удержание, а также роли команды.

Прежде чем жить

HTTPS настроен

Установлено SSL, HTTP перенаправляет, включена HSTS.

Крон работает

Проверить через страницу диагностики.

ИИ тестируют

Поговори с клиентом, проверь точность и тональность.

установленный виджет

На всех страницах сайта. Проверь с помощью Live Feed.

Резервное копирование настроено

Автоматизированная ежедневная база данных и резервные копии файлов.

Регистрация ошибок

Включен и отслеживается журнал ошибок PHP.

Приглашенная команда

Все участники имеют счета с правильными ролями.

База знаний населенных

По крайней мере 5-10 статьи.

Ежедневно: проверьте приборную панель, четкую очередь билетов, спот-чек разговоры ИИ.

Еженедельно: обзор AI Insights, обновление KB, проверка производительности команды, обзор безопасности.

Ежемесячно: обзор тенденций аналитики, разъемы аудита, обновление обучения ИИ, проверка резервных копий.

Операции

Контрольный список перед запуском

Запуск исходных вентилей и полная проверка реальных продуктов перед выпуском или первым запуском производства. Наличие команды не является доказательством того, что она прошла в вашей среде.

Экран продукта
Проверка высвобожденияВид выпуска показывает требуемые ворота для запуска; он не предварительно маркирует их как пройденные.Проверка высвобождениясерверВремя в путиPHP8.4SOURCE GATESБеги локальноOUTCOMEоснованный на фактических данныхЖИВОЙ ВИДЕО РАБОТЫТребуемые расширенияПроверить перед люксомВоротаPHP синтаксисный промахВсе файлы PHP проектаВоротаОценка ИИ и PHPUnitБегите, когда есть зависимостьВоротаСтатические и браузерные проверкиБегите, когда настроенВорота1RUN THE CHECKSУлавливать фактический выход2FIX EVERY REQUIRED FAILUREНе заменяйте доказательства предположениями.3TEST THE PRODUCTПроверка реальных пользовательских поездок
Вид выпуска показывает требуемые ворота для запуска; он не предварительно маркирует их как пройденные.

Источник и выпуск Gates

Запустите проверку хранилища из корня установки и сохраните их полный вывод с записью выпуска.

Первичные ворота префектуры
php tools/preflight.php
Расширенный выпуск Gate
php tools/release_gate.php

Предварительный полет проверяет время выполнения PHP 8.4 и необходимые расширения, выполняет синтаксическую проверку PHP, запускает шлюз оценки AI и полный пакет PHPUnit и запускает проверки PHPStan / Node при установке этих инструментов. Расширенный шлюза также включает в себя дым, чистую установку / схему и сквозные проверки браузера, когда их среда настроена.

Пропущенная проверка не является пропуском. Запишите, почему она была недоступна, установите недостающее зависимое устройство или запустите его в правильной среде CI/staging перед выпуском.

Проверка продукции

1 Аутентификация и роли

Подпишитесь как каждая предполагаемая роль; проверьте разрешенные и отклоненные страницы / действия.

2 Виджет и отслеживание

Загрузите реальный сайт в частном браузере; проверьте трафик маяков, Live Feed, записи посетителей и сеансов.

3 Чат и ИИ

Задавайте представительские вопросы; проверяйте знания, безопасность, эскалацию и историю ИИ.

4 Билеты

Создавайте, назначайте, отвечайте, эскалируйте, закрывайте и открывайте заново через каждый включенный путь приема.

5 Электронная почта

Тестировать исходящую доставку и каждый настроенный входящий почтовый ящик или путь веб-хука.

6 CRM и аналитика

Создайте контролируемый контакт / сделку / конверсию и проверьте панели приборов, воронки, подсчеты баллов и отчеты.

7. Коннекторы

Запустите тесты подключения, один прочтите, один безопасный загрузочный / сухой запуск и пути веб-хука / опроса для каждого включенного разъема.

8. API и веб-хуки

Проверяйте узкие области, пределы скорости, идемпотентные повторы, подписи и дублирование обработки.

9. Крон

Запустите унифицированный планировщик продуктов и подтвердите все необходимые сердечные ритмы в Cron Setup / Диагностика.

10 Безопасность

Проверить 2FA, CSRF/сессионный контроль, записи аудита, отзыв ключей и изоляцию рабочего пространства.

11 Резервное копирование и восстановление

Восстановите текущую резервную копию в отдельную тестовую среду и проверьте данные и конфигурацию.

12 Наблюдение и откат

Подтвердите журналы / оповещения, сохраните идентификаторы запросов и докажите процедуру отката.

⚠️
Развертывание только после каждого необходимого выхода и критически важного для бизнеса путешествия имеет текущие доказательства точного выпуска и окружающей среды.
разработчик

Web Push на сторонних сайтах

Push-уведомления браузера (включая OpsIQ Push Campaigns) need a service worker served from the SAME ORIGIN as the page.OpsIQ Виджет загружается из вашего OpsIQ развертывание, поэтому сторонний сайт не может зарегистрироваться OpsIQ Работник напрямую. Размещайте один маленький файл на собственном домене сайта, чтобы можно было туда попасть. Кампании доставляются с помощью обоих поддерживаемых методов.

Как это работает
Веб-толчокPush-уведомление в стиле ОС выше двух карт способа доставки: встроенный VAPID и Pusher Beams.Ваш магазинВаша тележка ждет * 10% сегоднятеперьВстроенный (VAPID)Нет третьей стороныХостинг одного файлаPusher БалкиИспользуйте свой аккаунтПринять работника
Веб-толчок

Зачем это нужно

Браузеры позволяют странице регистрировать сервисного работника только из своего собственного происхождения. Виджет загружается кросс-оригинал с вашего сайта OpsIQ развертывание, так что он не может установить push-рабочего на клиентском сайте, пока вы не разместите рабочего по происхождению этого сайта, виджет бесшумно пропускает push (без ошибок, без подписки).OpsIQ Push-кампании публикуются через оба издания.

Вариант A · Самостоятельный веб-толчок (VAPID, без третьей стороны)

1. Загрузите работника из своего OpsIQ развертывание: https://YOUR-OPSIQ/opsiq/opsiq-push-sw.js

2. Загрузите его в свой Web-корень Так что он доступен в https://yoursite.com/opsiq-push-sw.jsВиджет. Автоматически распознает этот путь на странице собственного происхождения и регистрирует его, никаких изменений фрагментов не требуется. (Он использует узкий охват, поэтому он никогда не заменяет обслуживающего работника, которого вы уже запускаете).

Факультатив: Если вы должны разместить его на нестандартном пути, наведите виджет на него. перед Сниппет принимается только в том случае, если он имеет одно и то же происхождение:

• Необязательно, если файл не находится в корне сети
<script>window.OpsIQ=window.OpsIQ||{};window.OpsIQ.pushSwUrl="/custom/opsiq-push-sw.js";</script>

3. В OpsIQ генерируют VAPID-ключи (Настройки → Client Chat AI → Advanced → Web Push). Виджет затем запрашивает у посетителей разрешение на уведомление и подписывается на них.

За CDN/Cloudflare? /opsiq-push-sw.js Вернуть HTTP 200 (Очистить кэш, если он был)404 Перед тем, как вы загрузите; кэш 404 будет блокировать регистрацию.

Вариант B · Pusher Пучки (управляемый поставщик)

1. В настройках OpsIQ установите push-провайдер Pusher Балки И войди в свои лучи Идентификатор инстанции и Секретный ключ.

2. Размещайте работника службы Beams на корне сайта как /service-worker.jsКопия https://YOUR-OPSIQ/opsiq/pusher-beams-service-worker.jsИли слить эту строку в существующий корневой работник:

Работник по монтажу балок, хост на https://yoursite.com/service-worker.js
importScripts("https://js.pusher.com/beams/service-worker.js");

3. Виджет автоматически загружает Beams SDK и подписывает каждого посетителя на интерес к сайту. opsiq-site-<your-site-key>Никакой другой проводки не требуется.

Как кампании доставляют

Push Campaigns публикуются через оба методы сразу: посетители на самохостинге VAPID-работника получают зашифрованный Web Push, а посетители, подписанные через Pusher Beams, получают публикации Beam. Каждого посетителя можно достичь через любой из них, поэтому вы можете запустить VAPid одного и того же происхождения на некоторых сайтах и перекрестно-оригинальные Beam на других.

HTTPS требуется Для сервисных работников и Web Push (localhost освобождается от тестирования). В почтовом ящике администратора чата уже используется тот же механизм Beams interest для оповещений операторов.

Операции

устранение неполадок

Общие вопросы и как их исправить.

Генерал

Бланк страницы+

Проверка журналов ошибок PHP. Причины: старый PHP (необходим 8.4+), отсутствующее расширение, неисправность соединения DB, неправильные разрешения файлов.

Dashboard показывает ноль+

Проверка: установлен виджет? Запуск кроны? Дата диапазона правильная? IP исключено?

ИИ

ИИ не отвечает+

Проверка: настроен провайдер? API ключ действителен (используй тестовое соединение)? Бюджет исчерпан? Настройка рабочего пространства AI правильна?

ИИ дает неправильные ответы+

Проверка: база знаний до настоящего времени? Быстрое уточнение? Поиски на коннекторе, возвращающие правильные данные? Обзор разговора в истории ИИ.

ИИ медленный+

Зависит от: провайдера API скорости, размера контекста (большой KB = больше токенов = медленнее), задержки сети. Попробуйте более быструю модель.

Отслеживание

Виджет пропал+

Проверка: скрипт в источнике страницы? JS ошибки в консоли? блокировка CSP? блокировщик рекламы?

Неизвестная страна+

GeoIP не настроен. Использовать Cloudflare (автомат) или базу данных MaxMind GeoLite2.

Билеты

Электронная почта не создает билеты+

Проверка: почтовый ящик подключен? Крон запущен? Пароль приложения изменен? IMAP настройки корректны?

Автоответ не работает+

Проверка: включено? Департамент разрешен? ИИ настроен? Крон запущен? Человек ответил первым?

Коннекторы

Подключение не удалось+

Проверка: данные верны? Ключ истек? API Доступно с сервера? URL Верно?

Подключено, но нет данных+

Проверить: API ключевые области? Включена синхронизация Webhook? Запускается крона?

Выступление

Медленные страницы+

Проверка: производительность базы данных (SHOW PROCESSLIST), память PHP (увеличение до 1GB), включение опкаша, сокращение срока хранения.

Операции

Виджет не регистрирует посещения

Используйте эту целенаправленную проверку, когда виджет загружается неправильно или Live Feed остается пустым.

Когда widget не регистрирует посещения, проверить ключ сайта, загрузить страницу в частном браузере, проверить панели браузера Сеть / Консоль на заблокированный маяк или запросы виджетов, просмотреть Контент-Безопасность-Политика и блокировщики рекламы, подтвердить активность сайта в OpsIQ и открыть Диагностику. Видимый пузырь чата сам по себе не доказывает, что аналитический маяк был принят.

Ссылка

Глоссарий

Определения терминов, используемых во всех OpsIQ.

Меры

Что-то, что ИИ может сделать через разъем или платформу.

Агент

Член команды с ограниченным доступом или агент ИИ.

BYOK

Принесите свой собственный ключ, вы предоставите свой собственный AI API.

соединитель

Плагин, интегрирующий внешнюю платформу с OpsIQ.

CSAT

Оценка удовлетворенности клиентов.

сделка

Возможность получения дохода в CRM.

Департамент

Категория билетов для маршрутизации и контроля доступа.

Эскалация

Перемещение билета в другой отдел или от ИИ к человеку.

GeoIP

Обнаружение местоположения посетителя по адресу IP.

Отпуск

Перенос разговора с ИИ на человека.

Токен идентификации

Подписанный токен, идентифицирующий посетителя сайта.

База знаний

Статьи, которые ИИ использует для ответа на вопросы.

Ведущий

Посетитель, демонстрирующий намерение купить.

Ведущий балл

0-100 Число, указывающее на вероятность конверсии.

Стадия жизненного цикла

Где находится клиент: ведущий, перспективный, клиент, в опасности, измельченный.

Управляемый AI

Иллюстрация предоставлена как часть вашего OpsIQ План.

трубопровод

Визуальный совет этапов сделки.

РБК

Ролевой контроль доступа.

Заседание

Серия просмотров страниц в окне тайм-аута.

Ключ к сайту

Уникальный идентификатор для отслеживаемого веб-сайта.

SLA

Соглашение об уровне обслуживания, время ответа на запрос.

токен

Единица текста ИИ. 4 символы = 1 Токен.

Слой доверия

Система безопасности, контролирующая автономию ИИ.

Web-cook

HTTP Callback для уведомлений о событиях.

виджет

JavaScript код, встроенный в ваш сайт.

Рабочее пространство

Сайт со своим собственным отслеживанием, ИИ, разъемами и командой.

Ссылка

Получить больше помощи

Если эта документация не отвечает на ваш вопрос:

Администрировать AI

Нажмите «Спросить OpsIQ» в администраторе. Имеет доступ к этой документации и данным вашей платформы.

Билет в поддержку

Включите: что вы пытались, что произошло, чего вы ожидали и любые сообщения об ошибках.

Электронная почта

Поддержка электронной почты с вашим лицензионным ключом и описанием проблемы.

Советы по эффективным запросам поддержки

Включите страницу

Какая страница администратора (URL или имя)

Включите настройку

Точное имя установки и текущее значение.

Включите ошибку

Точное сообщение об ошибке с кодами.

Включите шаги

То, что вы сделали, шаг за шагом.

Включая ожидаемые vs. фактические

Что должно произойти против того, что произошло.

💡
Чем конкретнее ваш запрос, тем быстрее ответ. "Он не работает" требует расследования. "Нажатие Save on AI Configuration дает код ошибки 502" получает прямой ответ.