Eコマースストア
店舗情報着陸から購入まで、すべての訪問者を追跡します。ライブを使ってAIに「私の注文は?」と答えましょう Shopify/WooCommerce/BigCommerceデータ。 AIの自動返信でサポートチケットを管理します。 卸売およびB2Bリードの取引パイプラインを実行してください。 トラフィックソースやキャンペーンへの収益を引き付けます。 回復ワークフローでカートの放棄を監視します。
これは、完全なドキュメントです OpsIQ. 製品の設定, サポートを実行します。, AIの構成, CRMの管理, ウィジェットをインストール, コネクタを構築, RESTを呼び出す API、webhooks、パッケージマーケットプレースアプリを受信し、セルフホスト型のデプロイメントを操作します。
すべての OpsIQ は、各画面の動作方法、独自のシステムに接続する方法、およびそれの上に構築する方法です。 どこから始めれば、セクションは管理者サイドバーと同じ順序に従います。
ポータルアーキテクチャ、ページ、コンポーネント、プレビュー、ヘルプセンター、アイデンティティの専用の管理者および開発者ガイドを使用します。SCIM、管理された解放、延長、マイグレーションおよび証明。
管理者のすべての画面:分析、ライブチャット、チケット、CRM, 知識ベース, サイトインテリジェンス, プロモーションと顧客のアカウントポータル. 各ページが何をします。, 数字はどういう意味か, そして、彼らが間違っているときはどうするか.
ウェブサイトウィジェット、メールメールボックス、インバウンドおよびアウトバウンドWebhooks、およびプラットフォーム用のコネクタライブラリ Shopify, WooCommerce, WHMCS, Zendesk, Stripe, Slack と Gmail.
コネクターをまったく使わないと、コードコネクタやアクション、トリガーのコネクタービルダーで、全てのアクション、スコープ、エラーコードを持つREST API
役割と権限、セキュリティ、 cron、診断、バックアップ、およびホストされているおよび自己ホストされたデプロイの両方。
サイドバーの注文で画面セクションを読みます。各ページが何であるかで開きますので、必要なものがあればすぐに停止できます。
設定、セキュリティ、診断、Cronおよびプロダクションを追加します。これらは、他のすべてが動作し続けるかどうかを決定するセクションです。
コネクターで始めて下さい、それからコネクターのビルダーは、そしてREST API そして、webhooks。 順番にそれらを読んで、あなたはすべての方法を見てきました OpsIQ 別のシステムに相談できます。
OpsIQ 完全なAIファーストビジネスプラットフォームです。 それは、あなたの分析、ライブチャット、ヘルプデスク、CRM、SEOツールキット、統合ミドルウェア、およびすべてのツールが同じ顧客のコンテキストを共有する単一の統一された管理と開発者のプラットフォームを置き換えます。 一緒にステッチする代わりに8-12 別のSaaS製品、インストール OpsIQ 1画面からすべてを実行し、操作します。
このページの読み込み、クリック、スクロール、ナビゲーションイベントがリアルタイムでキャプチャされます。現在、誰があなたのサイトにあるか、彼らが閲覧しているページ、どのくらいの時間を費やしているのか、そしてそれらがどこから来たのか、サードパーティのクッキーなしですべてを参照してください。
デバイス、ブラウザ、オペレーティングシステム、国、市、レファラー、UTMパラメータ、ランディングページ、およびアイデンティティの解像度ですべての訪問者の完全な履歴。セッショングループでは、訪問者が取るパス全体を見ることができますので、旅行へのページビューを閲覧します。
キャプチャされたビジターセッションのタイムラインスタイルの再生。マウスの動き、クリック、スクロール、ページ遷移、および相互作用を形成する正確に確認します。UXの問題を診断し、ドロップオフポイントを理解し、変換フローを確認します。
訪問者のアクティビティをリアルタイムにストリームとして実行します。ページビュー、チャット開始、フォーム送信、およびインテントシグナルは数秒ごとに更新されます。特定のトラフィックセグメントに焦点を当てる国、デバイス、またはレファラーによるフィルタリング。
訪問、エンゲージメントタイム、バウンス率、コンバージョン、サポート活動によってランク付けされたページ。改善が必要な最高のコンテンツやページを特定します。
地図で国、市、地域を分解します。デバイスとブラウザの配布、トラフィックソース分析、検索エンジンのレフリーラートラッキング、市場浸透の洞察。
訪問者の意図した信号を追跡します(ページ訪問、繰り返し返されたリターン、文書閲覧パターン、およびサポートインタラクション)購入、実行、またはヘルプが必要な場合のある訪問者を特定する。
OpsIQ から直接、ウェブサイト上での分割テストを実行します。 バリアントを作成したり、トラフィック割り当てを設定したり、変換目標を定義したり、統計的な意義を測定したりできます。 外部のテストツールは必要ありません。
クライアント側 JavaScript エラーをウェブサイトから自動的にキャプチャします。エラーメッセージ、スタックトレース、影響を受けるブラウザー、頻度カウント、どのページがトリガーするかを参照してください。別々のエラー監視なしでフロントエンドの問題をデバッグします。
追跡されたイベント(ページビュー、カスタムイベント、チャットインタラクション、フォーム送信、購入)を、検索可能でフルメタデータ付きのフィルタ可能なログに記録します。
注文、収益、払い戻し、サブスクリプションの更新、およびトラフィックソースへの属性変換を追跡し、キャンペーン、訪問者の旅。 期間の比較とトレンド分析による収益ダッシュボード。
行動パターンによって識別される高意図の訪問者。スコアは、ページ訪問に基づいてリードします, サイト上の時間, リターン周波数, サポートインタラクション, カスタム信号. フィードは、CRMパイプラインに直接つながります.
ページの検出、リンクの分割、メタタグの欠落、画像altテキストの確認、canonical URLs を検証し、サイト構造をマップするための自動クロール。毎日、毎週、またはオンデマンドを実行するためにクロールをスケジュールします。
包括的な技術分析:ページ速度スコア、モバイル応答性、コアWebバイタル、SSL 証明書の状態、チェーンをリダイレクトし、コンテンツの検出を複製したり、深さ解析をクロールしたり、データ検証を構造化したりします。
コンテンツの品質、単語数、読みやすさスコア、キーワード密度、見出し構造、内部/外部リンク比、鮮度の各ページを評価します。薄いコンテンツを識別し、ページの複製をコピーし、コンテンツギャップを埋めます。
サイト全体でセマンティック検索。コンテンツに関する自然言語の質問に答え、ソースページ参照でAI合成回答を得る。
Googleや他のエンジンのターゲットキーワードで検索エンジンランキングを監視します。 位置が時間とともに変化し、競合他社と比較し、どのページがどの用語にランクされているかを確認します。
コンテンツ、競合分析、検索ボリュームデータに基づいてキーワードの機会を発見してください。新しいコンテンツトピック、ロングテールバリエーション、およびコンテンツ最適化ターゲットの提案を入手してください。
どのサイトがリンクしているかを監視し、新しいリンクと失われたリンクを追跡し、アンカーテキストの分布を分析し、リンク構築機会を特定します。
物理的な場所を持つ企業:地理的なグリッド全体でローカル検索の可視性を視覚化します。あなたのランキングが位置によってどのように変化するか、ビジネスからの距離、そして意図的に検索する方法を参照してください。
Googleのビジネスプロファイルを接続する OpsIQ. レビュー、投稿、Q&A、写真、およびビジネス情報を同期します。内部からGBPリストを管理する OpsIQ. レビュー、投稿の公開、およびインサイトを監視する対応
スケジュール(毎日、週毎に毎月)に生成された自動SEOと分析レポート。レポートにはランキング変更、トラフィックの傾向、技術的な問題が見つかったり、コンテンツパフォーマンスも含まれます。代理店向けにホワイトラベル出力が可能です。
貴社のWebサイトに関するご質問にお答えします。24/7知識ベース、接続されたプラットフォームデータ(注文、アカウント、サブスクリプション)、およびカスタムトレーニングプロンプトを使用して。複数のAIプロバイダをサポートしています: クロード (Claude)Anthropic)、GPT-4o ()OpenAI), Gemini (Google), Grok(xAI).
管理者パネル内のAIコピロは、チケットの返信書や顧客コミュニケーションのドラフト、サポート傾向の分析、接続されたプラットフォーム間で顧客データを調べて、コネクターシステムを介してアクションを実行するのに役立ちます。
AIは、知識ベース記事、FAQエントリ、製品文書、および接続されたプラットフォームデータに組み込まれています。 理解できません。 実際のビジネス情報や不確定時にエスカレーターから回答します。
AIが質問を解決できないとき、不満を検出したり、顧客から人間に尋ねるときには、会話のコンテキストでチームに自動的に手を離します。 設定可能な低下/タイムアウトオートレバートをAIに戻す。
顧客向けAIと管理者向きのAIのための別の指示プロンプトを書きます。 トーン、境界線、エスカレーションルール、禁止事項、およびビジネス固有の行動を制御します。 作業スペースの設定がサポートされています。
あらゆるAIの会話は、リクエスト/応答の詳細、トークンの使用量、コストトラッキング、プロバイダ使用済み、モデルバージョンで記録されます。トレーニングギャップを特定し、AIの精度を向上させるための会話を見直します。
AIの会話パターンの自動解析。一般的な質問、解像度率、手渡周波数、トピックによる顧客満足度、AIがより良いトレーニングを必要とする領域を参照してください。
各接続されたサイト/ワークスペースは、独自のAIプロバイダ、モデル、温度、トークン予算、およびトレーニングプロンプトを使用することができます。 SaaS会社は、主要な製品とGPT-4oの二次ブランドのためにClaudeを使うことができます。
2つのAIモード:管理された人工知能(あなたの計画に含まれて、いいえ)API 必要なキー)、または独自のキーを持参(自分で使用してください) OpenAI/Anthropic/Google/xAI API モデル選択とコストを完全に制御するためのキー。 どちらのモードでも、すべての機能が動作します。
毎月のトークン予算、会話制限、低バランスアラートを設定します。プロバイダーごとの支出を追跡し、ワークスペースごとに共有します。ハードな天井で暴走コストを防ぎます。
部門、優先順位(低/中/高/高)、ステータス、SLAトラッキング、内部メモ、顧客対応、ファイル添付ファイル、およびスレッドの会話。外部ヘルプデスクは必要ありません。
AI は、部署や優先順位で着信チケットを自動的にトリガします。安全な部門のオートリプライを有効にします。AI ドラフトと構成可能な遅延(デフォルト: 2分)の後に応答を送信しますので、人間は最初に介入できます。
メールボックス(Gmail, IMAP, またはprovider-specific)を接続して、インバウンドメールから自動的にチケットを作成できます。チケット通知メールに返信すると、チケットのスレッドが更新されます。
お客様がウェブサイトにお客様を抱えるチケットポータルを埋め込む。お客様は、チケットの提出や履歴の確認、開会券への返信、およびお客様のデザインにすべてのブランドが記載されている状態をチェックすることができます。
重複したチケットを単一のスレッドにマージします。 対象となる行の [Merged] が表示されます。 すべての会話履歴は、生存するチケットに保存されます。
人的エージェントがチケットを引き継ぎた後、AIが自動返信を再開できるように「AIに復帰」を使用します。人間必須部分が解決されると便利ですが、顧客はAIが処理できるフォローアップ質問があります。
受信トレイビューからAIによるチケット管理。コピローは、会話履歴を集計し、優先順位/出国課題を推薦し、接続されたプラットフォーム上でのアクションを実行することができます。
統一された受信トレイから管理されるリアルタイムの顧客チャット。すべてのアクティブな会話、顧客のアイデンティティ、会話履歴、AI提案を参照してください。複数のエージェントは、会話をコラボレーションできます。
訪問者の行動に基づくトリガーチャットメッセージ:ページ上の時間、特定の URL 訪問、スクロール深さ、訪問回数、終了インテント、またはカスタムイベント。例:ヘルプメッセージが表示されます 60 価格設定画面の秒数です。
カスタマイズ可能なチャットウィジェットは、ウェブサイトに埋め込まれています。AIチャット、ライブエージェントチャット、チケット投稿、ナレッジベース検索、訪問者のアイデンティティをサポートします。応答性、アクセス可能で、ブランド化できます。
チャットやチケットのやり取り後に顧客満足度評価を収集します。独自の質問、評価スケール、フォローアッププロンプトでアンケートを作成してください。結果はチームパフォーマンスとAIインサイトにフィードされます。
チャット終了後、既知のメールを持つ訪問者は、処理されたもののAI要約とワンクリックで「簡単に」できます。 はい/いいえ。 1スレッドごとに、シングルユースリンクに署名し、すべての送信記録され、その通知がチャット星の横にある独自の信号としてフィードバックページ上に表示されます。
人持ちのフィードバック項目は、名前、電子メール、クリックスルーをフルカスタマージャーニーとCRM連絡先に表示し、実際の履歴で掲示されたメールまたはAI-draft返信をワンクリックします。
電子メールの草案、チケット返信、発表、および顧客コミュニケーションを作曲するための独立したAIライティングアシスタント。 独自のプロンプト(チャット脳ではありません)を使用して、プロのビジネスライティング。
CRMの状態全体を示す単一の画面:パイプライン値、取引速度、今後のタスク、リスクの取引、エージェント活動、およびAI勧告。 CRMホームページは、あなたの毎日の出発点です。
顧客連絡先をフルプロファイルで管理します。氏名、電子メール、電話、会社、タグ、ライフサイクルステージ、会話履歴、チケット履歴、購入履歴、カスタムフィールド。 B2B関係管理のための企業への連絡をリンクします。
視覚かんばんスタイルの取引ボードは、カスタマイズ可能なステージで展開します。ステージ間の取引をドラッグし、値を設定したり、所有者を割り当てたり、クローズデーを追跡したり、各段階のパイプライン値を確認します。複数のパイプラインがサポートされています。
AIは、各取引を分析し、コーチングを提供します。リスク信号(静かに、競合他社に言及した、予算の懸念)、次のベストアクション推奨事項、確率を獲得し、フォローアップのタイミングを提案しました。
パイプラインデータ、歴史的クローズ率、および取引速度に基づく収益予測。レポートには、所有者によるパイプライン、ソース、変換率、平均取引サイズ、販売サイクルの長さが含まれます。
訪問者データ、リードシグナル、および接続されたプラットフォームアクティビティから潜在的な顧客を識別するAIを搭載した見込み客。アウトリーチターゲットを提案し、初期メッセージの草案を作成し、リード品質をスコアします。
電子メール、待機、メール、チェック応答、エスカレートの複数のステップフォローアップシーケンスを自動化。新しいリード、定着取引、ポスト購入 チェックイン、および再エンゲージメントキャンペーンのためのシーケンスの定義。
自動移行で顧客のライフサイクルステージ(リード、見込み客、顧客、シャード)を追跡します。 保留エージェントは、中核信号の監視と介入を提案します。
継続的にCRMデータをクリーンアップし、充実させるAIエージェント:連絡先を解読, 不足しているフィールドを満たします, メールを検証します。, 会社名を標準化します。
自然言語CRMの設定: あなたの販売プロセスが好きなように見えるAIに伝え、それはあなたのパイプラインの段階、カスタムフィールド、取引テンプレート、および自動化ルールを構築します。
CRMデータのクオリティの自動監査:連絡先の重複、次の手順なしで取引、パイプラインの停止、連絡先情報不足、およびデータの完全なスコーリング。
各 CRM AIエージェントの3レベルの自律制御:Autopilot(AIは独立して機能します)、Copilot (AIは提案し、人間が承認する)、およびマニュアル(AIのみを観察します)。 エージェントごとにダイヤルを設定し、アクションタイプごとに、取引値の閾値を設定します。
CRMは、Steeward(データ品質), SDR(プロスペクティング), Retention(中央の防止), Analyst(報告と洞察)の4つの専門AIエージェントを実行します。 各エージェントは独自のTrust Dial設定を持っています。
既読用コネクタ Shopify, WooCommerce, BigCommerce, マゼント2, PrestaShop, OpenCart, osCommerce, , キプロス WordPress, WHMCS, Zendesk, Stripe, Amazon SES, Postmark, Resend, SendGrid, Mailgun, Gmail, IMAP, Slack, Google Business Profile. 各コネクタは、プラットフォーム固有のAIアクションや知識、データ同期を実現します。
任意のプラットフォーム、コード、AI-assisted、またはフルコード用のカスタムコネクタを構築します。ビルダーはRESTとGraphQLをサポートしていますAPIs, OAuth認可コードの流れ、webhookの自動登録とStripeシンプルなシグネチャースキーム、パジネーション(オフセット、ページ、カーソル、リンクヘッダー)、リスト/エラー変換、マルチアクションコンテキスト、マーケットプレイスパッケージ。
ConnectorBuilderAI は、必要なことを記述し、リクエストハンドラを書き込み、 API 応答のマップなど、コネクタの構築に役立ちます。認証、パジネーション、エラー処理を自動的に処理します。
汎用アプリ OAuth 任意のコネクタで動作する認可フロー。 PKCE サポート、サイトスコープ状態管理、自動トークン更新。 コネクターは、その OAuth パラメーターとパラメータ OpsIQ 流れを扱います。
コネクタは、プラットフォームのアクションを追加するだけではありません。彼らは機能「バス」を介してコア機能を出力することができます。 コネクターは、(カレンダー、エンリッチメント、CRMでesignを宣言します。 local_listing、Site Intelligenceでのランク_データ; AnalyticsのWeb_analytics、支払いにおけるPayment_provider; Mailboxのメール_sync; Commsのvideo_meeting)およびその小さなメソッドセットを実行します。OpsIQ CapabilityRegistry で発見し、UI にそれをワイヤーで縛って下さい、顧客 360 タイムラインとAIアクション。複数のコネクタはロックインなしで同じ機能を提供することができます。コネクター/PLATFORM_CONNECTORS.mdを参照してください。
コネクタは、2つの層の1つに住んでいます。 プレインストールされたコネクター(コレクター/)は、ボックスからレジストリアクティブであり、キーレスな参照と機能ごとの最も使用されるプロバイダだけに傾き続ける(例:Googleカレンダー、Gmail、Googleビジネスプロファイル)。 マーケットプレイスコネクタ(marketplace_connectors/)は、インストールされるまで発見できるが、インサートです。365カレンダー, Outlook, DocuSign,Stripe、GA4、SerpApi、ズーム。すべての橋は市場リストを表しますので、UIとAIは「市場からインストール」(通知にインストールする)機能が準備されたプロバイダがないとき、壊れたボタンを要求することができます。
コネクターをに公開する OpsIQ 市場。プロフィールが付いているパッケージのコネクター。json 知識。json, ワークフロー_recipes.json、および署名されたアーカイブ。 Marketplaceは複数のソースの請求と自由で支払われたコネクターを支えます。
すべてのコネクタは、完全性検証のために暗号化されています。 署名はインストール時にチェックされます。 resign_all_connectorsツールを使用して、更新後に再署名します。
コネクターの操作のための派手なfuzzy一致システム。探査規則を定義し、OpsIQ fuzzyScore と smartRank アルゴリズムを使用して、プラットフォームのエンティティティにユーザークエリをマッチさせます。例: find_country("germ") はドイツと一致します 88.9% 自信を持って。
総合案内OpsIQ API登録されたすべての投稿JSON検出可能な名前のアクションとして操作します。ライブ合計と正確なタイプの契約にメタ.actions を使用します。コネクタのパッケージは、統一された ActionExecutor を通じて自社のベンダーの行動を宣言します。
複数のコネクターのアクションを共通のワークフローにまとめた事前ビルドされたワークフローレシピ。例:「新しい注文が Shopify で来るとき、チケットを作成してCRMを更新し、Slack 通知を送信する」
コネクタは、AIナレッジベースと同期する知識のトピックを宣言します。プラットフォーム固有のヘルプ記事、セットアップガイド、トラブルシューティング手順は、手動の知識エントリなしでAIに自動的に利用できます。
名前付き JSON API 登録された管理者全員をカバー JSON 操作、とAPI-key 認証、ワークスペースの分離、スコープ、レート制限、不正な書き込み、OpenAPI、および生成されたポストマンコレクション。
すべての主要なイベントのためのアウトバウンドWebhook:注文、請求書、サブスクリプション、チケット、チャット、リード、ユーザー登録、およびカートの放棄。ジョブキューによる非同期配信、指数関数的なバックオフリトライ、SSRF保護、および自動無効後の 15 連続した失敗。
あらゆるアウトバウンド・ウェブホークはHMAC-SHA256と署名します。Webhookの認証を確実にするために、受信終了時にシグネチャを検証してください。 処理に適する安定した event_id。
JavaScript SDK アイデンティティの解像度、カスタムイベントトラッキング、プログラマティックチャットコントロール、およびページ固有の設定でウィジェットを追跡するために使用されます。 React、Vue、Next.js 用のレシピをインストールします。WordPress, Shopify、および静的 HTML.
一般的なフレームワーク用のサーバー側SDKとプラグイン。WordPress プラグイン, WHMCS モジュール、および一般的な PHP/Node.js の統合ライブラリ。
バックエンドから、カスタムイベントを OpsIQ にプッシュします。購入、サインアップ、機能使用量、エラー、またはビジネスイベント。イベントは訪問者のタイムラインで表示され、分析とAIコンテキストにフィードされます。
新規チケット、チャット開始、訪問者の識別、取引ステージの変更、またはカスタムイベントによってトリガーされた自動ワークフローを構築します。トリガーは、コネクターアクションを実行し、Webhookを送信したり、レコードを更新したり、チームに通知したりできます。
ビジュアル API 管理者内のWebhookビルダー。エンドポイント、テストリクエストの設定、レスポンスのチェック、およびデバッグ統合を行わない OpsIQ.
3つの役割:所有者(フルアクセス、請求、危険ゾーン)、フル管理者(課金および危険ゾーンを除くすべての操作)、エージェント(割り当てられた部門のみ、設定なし)。 すべての機密ページはロールによって硬化します。
所有者と完全な管理者専用ダッシュボードは、解像度の時間を表示, ワークロード分布, 処理深さ, チャンネルの故障, トレンド分析, SLAコンプライアンス, CSAT エージェントによるエージェント, リオープン率, チームロールアップ, そしてバス路線時間. リアルタイムで更新.
管理者ナビゲーションでリアルタイムの who-is-online ウィジェット。 Heartbeat ベースのプレゼンス検出 ()60-秒 ping、300-secondは、の後で自動車プルーン拡張します 120 日)。 現在、どの管理者がアクティブであるか、どのページで表示されているかを参照してください。
各接続サイト(ワークスペース)には、独自のAI設定、コネクタの設定、チケット部門、ブランディング、運用ルールがあります。 オーバーライドしないワークスペースにグローバルデフォルトカスケード。
複数のウェブサイトを1つの OpsIQ adminから管理します。各サイトには独自のトラッキングスニペット、訪問者データ、および構成があります。管理者ナビゲーションからサイト間で切り替えます。
すべての自動通信のためのレジストリ主導のメールテンプレート:チケット通知、チャットトランスクリプト、ウェルカムメール、パスワードリセット、およびシステムアラート。 編集 HTML ライブプレビュー、可変チップ付きテンプレート(){{customer_name}}, {{ticket_id}})、および全体的なレイアウト制御。
コンタクト、チケット、およびナレッジ記事を CSV/JSON_ からインポートします。訪問者のデータをエクスポートし、分析レポート、CRMレコードをエクスポートします。システム間の移行のためのデータポータビリティ。
OIDC (OpenID Connect) シングルサインオン(フルランタイム): 発見、承認、コールバック、JWKS 署名検証、userinfo、ドメイン許可リスト、JIT 暫定、ステータスガード。 SAML 設定サポート。
作り付け DSAR (データ主体アクセスリクエスト) 処理: すべてのシステム間で顧客データをエクスポートし、削除します。 連絡先レベルのデータはセッション、チケット、チャット、CRMレコード、および電子メールログをカバーする消去します。 一貫した管理と保持ポリシー。
特定のブロック IPs または、サイトや管理者へのアクセスから範囲を設定します。設定不能なログインの試みの後の自動ロックアウト。失敗したログインログと IP、タイムスタンプおよびユーザーエージェント。
HTTP 厳格な輸送セキュリティ、Permissions-Policy ヘッダ、および安全な Cookie 設定。セルフホストデプロイメントは、サーバーの設定で CSP ヘッッダを追加できます。
SSRFガードブロックwebhookをプライベート/メタデータに IP 範囲。非同期配信は、アプリケーションをブロックする際の遅いエンドポイントを防ぎます。その後の自動無効化 15 連続した失敗により、デッドエンドポイントのリソース廃棄物が防止されます。
ワークスペース間での厳格なデータ分離。訪問者、チケット、チャット、CRMレコード、AI会話は、作業空間にスコープ付けられます。クロスワークスペースのデータ漏洩がクエリレイヤーで防止されます。
月、四半期、半年、年次、隔年、および寿命の請求サイクルのサポート。多通貨ゲートウェイのための通貨正規化。正確な収益報告のための支払いレシート上のFX変換。
スケジュールタスクのための組み込みのcronシステム:レポート生成、データのクリーンアップ、サブスクリプションの更新、AIトレーニング更新、コネクタ同期、およびWebhookの検索。 警告インジケーターと健康診断。
訪問者のセッション数、チャットトランスクリプト、AI会話履歴、イベントログが保持される期間を設定します。保存管理と保持ポリシーの遵守のために、高齢者データの自動クリーンアップを行います。
システムのヘルスダッシュボードには、cronの状態、データベース接続、AIプロバイダのステータス、コネクタの健康、Webhook配送速度、およびストレージの使用状況が表示されます。構成の問題とパフォーマンスボトルネックの警告。
着陸から購入まで、すべての訪問者を追跡します。ライブを使ってAIに「私の注文は?」と答えましょう Shopify/WooCommerce/BigCommerceデータ。 AIの自動返信でサポートチケットを管理します。 卸売およびB2Bリードの取引パイプラインを実行してください。 トラフィックソースやキャンペーンへの収益を引き付けます。 回復ワークフローでカートの放棄を監視します。
試用サインアップを監視し、セッション再生と機能の採用. ドキュメントページが変換する追跡します。. あなたの中に基づいたAIとの自動サポートAPIdocs. CRMでサブスクリプションの収益と拡張取引を管理する. あなたの請求プラットフォームを接続 ()Stripe, WHMCS) リアルタイムのMRR追跡のため。CRMのライフサイクルエージェントを使用して、シュールを検出し、防止します。
顧客へのホワイトラベル分析とサポートポータルを提供します。トラックは、1つの管理者から複数のクライアントサイトを経由しています。CRMパイプラインを使用して、見込み客やプロジェクトリードを管理することができます。コネクタビルダーを使用してクライアントプラットフォーム用のカスタムコネクターを構築します。ブランド化されたSEOレポートをSite Intelligenceで生成します。付加価値サービスとして市場コネクターを再販します。
フィードバック WHMCS 統合と統合 80+ 注文検索、サービス管理のためのAIアクション DNS、およびプロビジョニング。ナレッジベース記事を使用して一般的なホスティング質問に自動返信します。 サーバーステータスページエンゲージメントを追跡します。 AIトリエージでテクニカルサポートチケットを管理する。 課金サイクル梯子を使用して、ライフタイムホスティングプランを通じて毎月使用してください。
ディフレクト 40-70% 知識ベースに基づいたAIチャットとの繰り返し質問の。AIトライアージュで適切な部門へのルートチケット。チームパフォーマンスを解像度の時間、SLAコンプライアンス、およびエージェントによるCSATと追跡します。プロの回答草案のためにAIを書くことを使用してください。 AIインサイトでのサポート傾向を監視してください。
完全なサイトインテリジェンススイート:クロール、技術的なSEO監査、コンテンツ分析、SERPランクトラッキング、キーワードリサーチ、バックリンク監視、およびローカルSEOグリッド。 Googleビジネスプロファイル管理。 クライアントのためのホワイトラベルレポートをスケジュールしました。 追跡ウィジェットに構築されたA / Bテスト。 すべてのチャネルでキャンペーンアトリビューション。
追跡とチャットで始まり、無料で追加できます。サポートボリュームを取得するときにチケットを追加します。販売を開始したときにCRMをオンにします。 あなたがそれらを採用するようにプラットフォームを接続します。OpsIQ 一人からすべてのものをやってからスケール 50-RBAC、部門およびパーエージェントのパフォーマンストラッキングによる人操作チーム。
エンタープライズ SSO OIDC による集中認証。別々のブランドや分裂のためのマルチワークスペースの分離。異なるプロバイダーとモデルを持つ Per-workspace AI コンフィギュレーション。市場分布でカスタムコネクタ開発。監査証跡、GDPR コンプライアンスツール、データ保持ポリシー。
訪問者の追跡、セッション再生、ページランキング、地理的知能、意図的なファネル、変換アトリビューション、イベント、A / B実験、およびJSエラートラッキング、すべてのプライバシーフレンドリー、1つのプラットフォームですべて。
人工知能を活用した顧客チャット、ナレッジの接地、マルチプロファイダクションAIサポート、自動手渡による人へのやり取り、積極的なチャットルール、会話履歴、CSAT調査、チャットからのチケット作成。
部門、優先順位、SLA、AIのトリエージ、構成可能な遅延の自動返信、メールのインゲッション、チケット埋め込み、チケットマージ、受信トレイコピロー、およびAI機能に戻るネイティブチケットシステム。
4つの専門AIエージェント(Steward、SDR、Retention、Analyst)を備えたAIファーストCRM、Trust Dial自律制御、パイプラインボード、取引コーチング、予測、シーケンス、ライフサイクル管理、および自然言語CRM構成。
自動クロール、技術的なSEO監査、コンテンツ分析、AI検索、SERPランクトラッキング、キーワード調査、バックリンク解析、ローカルSEOグリッド、およびスケジュールされたホワイトラベルレポート付きサイトインテリジェンス。
コネクタ SDK とって 25+ プレビルドされたコネクター、コネクターのビルダー(コード/AI-assisted/fullコード無し)、OAuth フロー、webhook 自動登録、関連するコネクタがインストールされたときだけ実行可能になるコネクターのアクション定義の大規模なカタログ、有効化、構成および検証、SmartLookup、マーケットプレース、署名パッケージ。
フルGBコネクタ:レビュー管理、ポストパブリッシング、Q&A管理、写真アップロード、ビジネス情報同期、インサイトトラッキング、AIによるレビュー応答、すべて内側から OpsIQ.
レジストリ主導のメールテンプレートは、ビジュアルエディタ、ライブプレビュー、可変チップ、グローバルレイアウト制御、およびすべての自動化通信のための永続的なカスタマイズ。
チームパフォーマンスの組み込み:分解能、ワークロード、SLAコンプライアンス、エージェントによるCSAT、リオープン率、バスティ時間、リアルタイムプレゼンストラッキング、およびパートメントの故障。
ネイティブ DSAR 処理、システム全体でのデータの消去、同意管理、保持ポリシー、および監査証跡、プラットフォームに組み込まれたボルト無し。
OpsIQ 管理されたインフラ上で実行します。製品操作は同じです。インフラストラクチャ、更新およびバックアップはホスティングオペレーターによって処理されます。このハンドブック文書は、OpsIQ マーケティングやコマーシャルアカウントのフローではなく、ランタイム。
インストール OpsIQ データ、ブランディング、アップデート、および統合を完全に制御するための独自のサーバー。 PHP が必要です 8.4+, MySQL 5.7+ または MariaDB 10.3+、HTTPSおよび OpsIQ 統一されたcron。サポート WHMCS addon モジュールとして統合します。フルデータ sovereignty です。
セットアップガイドの 30 分に従って、ウェブサイト上で作業する追跡、チャット、および基本的なAIを取得してください。
訪問者データを読み、セッションの再生を設定し、リードを特定し、トラフィックパターンを理解してもらう方法を学びます。
最初にSEOクロールを実行し、技術的な健康をチェックして、ターゲットキーワードのSERPランクトラッキングを設定してください。
部門を設定し、AIと連携して自動返信を構成し、メールのインジェクションを接続し、人工知能を訓練することで一般的な質問に対応できます。
コンタクトを整理し、パイプラインを構築し、AIエージェントを設定したり、Trust Dialレベルを設定したりして、AIが取引を追跡できるようにします。
eコマース/ビルリングプラットフォームを接続し、カスタムコネクタを構築し、webhookを設定し、REST API を介して統合します。
実行中の OpsIQ を取得するには、次の手順に従ってください。各ステップは前のステップで構築します。最後に、訪問者の追跡、AIチャット、および基本的なチケットサポートがあります。
ライセンスキーを OpsIQ admin に入力します。設定に移動し、このインストールのために提供されたライセンスキーを入力し、[有効]をクリックします。緑色の「アクティブ」バッジが表示されます。
設定に移動し、ビジネス名、業界、タイムゾーン、デフォルト通貨、およびサポート時間を入力します。この情報は、顧客質問に答えるときにAIによって使用され、タイムゾーンアウェアレポートの分析によって使用されます。
AI の構成に移動し、プロバイダを選択します。 オプション: クロード (Claude)Anthropic)、GPT-4o ()OpenAI), Gemini (Google), または Grok(xAI). あなたの入力 API 自分の鍵を使うか、計画で利用可能な場合は管理されたAIを使用するかどうかをキーにします。 「テスト接続」をクリックして確認します。
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.
ご利用の場合 Shopify, WooCommerce, WHMCS、または別のサポートされているプラットフォームに移動し、コネクタにアクセスして、プラットフォームを見つけて認証情報を入力し、[テスト接続]をクリックします。これにより、データ、顧客プロファイル、およびサポートコンテキストを注文するためのAIアクセスが可能になります。
チームに移動し、招待状をクリックし、メールとロール(所有者、フル管理者、またはエージェント)を入力します。 エージェントは、割り当てる部門のみにアクセスすることができます。 所有者とフル管理者はすべてを参照してください。
接続されたサイトからスニペットをコピーして、ウェブサイトに貼り付けます。これによりすぐに追跡できます。
AI の設定に移動し、プロバイダーを選択し、キーを入力して保存します。AI チャットはウェブサイト上で有効になっています。
訪問者追跡とAIチャットがあります。 あなたは後でチケット、CRM、およびコネクタを追加することができます。
ナレッジベースに移動し、追加5-10 最も一般的な質問に関する記事。AIは、これらを使用して顧客に正確に答えます。
チケットを受け取り、少なくとも 2 部門 (例:「セールス」と「サポート」) を作成してください。各チームメンバーに割り当てます。
AIトレーニングに進み、ビジネスやトーン、エスカレーションのルールを説明する顧客AIプロンプトを書きます。
お使いのWebサイトをプライベートブラウザで開き、AIとチャットして顧客として連絡してください。回答が正確であり、トーンが正しいことを確認してください。
メールボックス(Gmail, IMAP, またはプロバイダのコネクター)を設定することで、顧客メールが自動的にチケットを生成します。
安全な部門のチケット自動返信を有効にします。 2分遅れを設定して、人間は最初に介入することができます。
ダッシュボードを毎日チェックします。トラッキングが接続されている場合は、訪問者のカウント、バウンス率、トップページ、および販売を参照してください。
AI CRM を開き、OpsIQ 接続されたプラットフォームから連絡先をインポートします。パイプラインボードを確認します。
週刊AIの歴史をチェックしてください。 間違った答え、見逃された質問、知識を追加する機会を探します。
ルールを作成します。訪問者が 60+ 秒の料金表にある場合は、ヘルプが必要な場合はチャットメッセージが表示されます。
内蔵コネクタを持たないプラットフォームを使用する場合は、Connector Builderを使用して1つを作成してください。
コネクト OpsIQ チケット、チャット、販売イベントのアウトバウンドWebhookを使用して内部ツールに。
はい。AIプロバイダは任意です。 OpsIQ AIを使わずに、純粋に分析や切符プラットフォームとして機能します。準備ができたら、AIを後で有効化できます。
はい。 コネクタはプラットフォーム固有のデータでAIを豊かにしますが、 OpsIQ はそれらなしで動作します。 トラッキングとチャットから始めて、必要に応じてプラットフォームを接続します。
チケット、CRM、チームコラボレーションで OpsIQ を使用できます。 トラッキングウィジェットはオプションです。 ウェブサイトの準備ができたら、それを追加してください。
プライベート/インコニトブラウザでウェブサイトにアクセスしてください。 その後、チェック OpsIQ ライブフィード。あなたの訪問が内部に表示されるように見えるはずです 15 秒。 そうでない場合は、チェック:()1)スニペットは正しく貼り付けられます(()2)はサイトキー正しいです、(3)は、スクリプトをブロックする広告ブロッカーまたはCSPヘッダーです。
OpsIQ は 1 つの機能ではありません。オペレータ管理、ウェブサイトウィジェット、AI サポート層、チケット/ヘルプデスクシステム、4 つの AI エージェント、サイトインテリジェンススイート、マーケットプレースと開発者のサーフェスを備えた完全な CRM です。これには、すべてのコンポーネントが含まれています。
ダッシュボード, ライブフィード, 訪問者ログ, セッションの再生, トップページ, 地理的知性, イベントログ, A / B実験, JSエラートラッキング, 販売と変換, リード, AICRM (コマンドセンター, コンタクト, 企業, 取引, パイプラインボード, 契約コーチング, 予測, 見込み客, ライフサイクル, データスチュワード, 私のCRMを構築します。, CRM構成, CRMの健康, CRMCRM API)、チケット、チャットインボックス、積極的なルール、CSAT調査、メールドラフト、メールボックス、AI構成、AIのトレーニング、AIに関する知見、AIナレッジベース、コネクタビルダー、マーケットプレース、コネクティッドサイト、チーム管理、チームのパフォーマンス、設定、診断およびライセンス。
ウィジェット(分析ビーコン+チャット+チケット埋め込み+ナレッジベース検索)、クライアントAIチャット、チケット送信ポータル、訪問者IDトークン処理、ファイルアップロード、CSAT調査ウィジェット、顧客対応ヘルプセンターを追跡するウェブサイト。
コマンドセンター、連絡先、企業、取引、ドラッグアンドドロップのパイプラインボード、AI取引コーチング(リスク信号、次のベストアクション、勝ち確率)、収益予測、見込み客エージェント(SDR)、自動フォローアップシーケンス、ライフサイクルと保持管理、データスチュワードエージェント(セットアップ、強化、検証)、CRMの構築、CRM構成、CRM健康チェック、Trust Dial(Autopilot/CoPilot/Manual Agent / SDR) API webhooks を使って。
自動サイトクロール、技術的なSEO監査(スピード、モバイル、コアWebバイタル) SSL, リダイレクト, 構造化されたデータ), コンテンツ監査 (単語数, 読みやすく, キーワード密度, 見出し構造), AI搭載のセマンティック検索, SERPランクトラッキングエンジン, 機会スコアリングによるキーワード調査, バックリンク解析と監視, ローカルSEOグリッド可視化, Googleビジネスプロファイル同期 (レビュー, 記事, Q&A, 写真, インサイト),スケジュールされたレポート(毎日/週単位/月単位), ホワイトラベル PDF 代理店の出力。
顧客AIチャット(マルチプロファイダー:クロード、GPT-4o、Gemini, Grok), 管理者AIアシスタント, AIの知識の接地, 設定可能な反転と自動ハンドオフ, ワークスペースAIの設定, 管理された人工知能と BYOK モード、トークンの予算とコスト制御、AI履歴監査証、AIインサイト分析、チケットAIトライアージュ、遅延自動返信、AI(分離プロンプト)の作成、および管理受信トレイコピロー。
25+ プレビルドコネクタ (Shopify, WooCommerce, BigCommerce, マゼント2, PrestaShop, OpenCart, osCommerce, , キプロス WordPress, WHMCS, Zendesk, Stripe, Amazon SES, Postmark, Resend, SendGrid, Mailgun, Gmail, IMAP, Slack, Googleビジネスプロファイル), コネクタビルダー(コードなし/AI-assisted/full-code), 一般 OAuth PKCE、コネクターのマーケットプレースと有料配布、コネクタの署名および検証、SmartLookupのfuzzyマッチング、利用可能なHTTPアクション定義の大規模なカタログは、コネクタのインストール、有効化、構成、バリデーション、ナレッジ同期、ワークフローのレシピによって異なります。
ツイートAPI(ビジュアル、イベント、チケット、連絡先、設定、コネクタ)、OpenAPI 仕様、API キー管理、アウトバウンドのwebhooks(非同期、署名、取得、SSRF保護、自動無効)、イベントAPI カスタムイベントの摂取、ウィジェット SDKアイデンティティの決断によって、コックブック、行為の契約、コネクターを制して下さい SDK、サーバー側の SDK (PHP、Node.js)を包む市場場所 WordPress プラグイン、および WHMCS モジュール。
ビジネスアイデンティティ、ワークスペースごとのAI構成、追跡設定、セキュリティ(HSTS、許可ポリシー)、IP ブロック、残忍な力の保護)、RBAC (Owner/Full Admin/Agent)、チーム管理および招待状、チームのパフォーマンス・ダッシュボード、管理者の存在の追跡、電子メールのテンプレート システム(registry-driven、視覚編集者、可変的な破片)、調査デザイナー、ドメイン知識、切符によって埋め込まれた構成、ブランディング、データ保持方針、請求サイクル管理(毎月生涯を通して)、通貨の正規化、輸入/輸出、診断、cronのオートメーションおよび危険地帯。
エンタープライズ SSO (JWKS認証、JITプロビジョニングによる OIDC) SAML 構成, GDPR/DSAR 処理(すべてのシステム間でのエクスポートと削除)、連絡先、同意管理、作業スペース分離(クエリレイヤースキャッピングを制限する)、監査証跡、ログイントラッキング失敗 IP ブロック、アウトバウンド webhook SSRF ガードおよびデータ保持ポリシー。
管理されたAIは、OpsIQ プロバイダー URL, サイトインテリジェンスプロバイダの呼び出し、ライセンス検証、健康レポート、PDF レンダリング、およびデータエクスポート、構成されたプロバイダのエンドポイントを経由してルーティングされるすべてのものは直接ベンダーではなく API サーバからの呼び出し。
毎日のコマンドセンター:トラフィックの概要、ライブ訪問者数、セールスサマリー、サポートキュー深さ、AIアクティビティアラート、およびクイックアクションショートカット。
リアルタイム訪問者ストリーム:ページビュー、チャット開始、フォーム送信、およびインテントシグナルは、国、デバイス、およびレファフィルタで数秒ごとに更新されます。
完全な訪問記録:デバイス、ブラウザ、OS、国、市、レファラー、UTMパラム、ランディングページ、アイデンティティ、およびフルページのビュー履歴。
ジャーニーグループビュー:ページフロー、ページの時間、スクロール深さ、変換パス、各訪問者セッションの出口ページ。
キャプチャされたイベントのタイムライン再生:マウスの動き、クリック、スクロール、ページ遷移、UX診断のための相互作用を形成します。
ページのパフォーマンスランキング:訪問、エンゲージメントタイム、バウンス率、変換、サポートインタラクション、トレンド方向。
地理的レポート:地図、デバイス分布、ブラウザ共有、トラフィックソース、市場浸透による国/市間分岐。
行動意図追跡:価格設定訪問、リターン頻度、ドキュメント閲覧、サポートインタラクション、および変換確率でカスタム信号。
検索可能なイベント履歴:ページビュー、カスタムイベント、チャット、購入、フォーム投稿の完全なメタデータとフィルタリング。
分割テスト: バリアントを作成, トラフィックを割り当てる, 目標を定義します。, 重要度を測定し、勝者を宣言する, すべての内部から OpsIQ_.
フロントエンドのエラーキャプチャ:メッセージ、スタックトレース、影響を受けたブラウザ、周波数、影響を受けるページ、およびトレンドトラッキング。
収益ダッシュボード:注文、更新、払い戻し、ソースによる帰属、キャンペーンのパフォーマンス、期間比較、トレンド分析。
リード管理:スコアリング、ソースアトリビューション、CRMステータス、連絡先の詳細、行動シグナル、パイプラインルーティング。
完全なCRM: コマンドライン, ライフサイクル, データスチュワード, そして健康.
サポート受信トレイ:部門、優先順位、SLAトラッキング、AIトライアジ、自動返信、内部メモ、ファイル添付ファイル、マージ、ステータス管理。
ライブ会話:AIと人チャット、手話、コラボレーション、会話履歴、顧客アイデンティティ、CSATコレクション。
メール管理:チケットへのインバウンドメール、AI による返信構成、テンプレート選択、メールボックス設定。
プロバイダーのセットアップ: Claude/GPT-4o/Gemini/Grok を選択し、 API キーを入力するか、管理された AI を有効にします。モデル、温度、ワークスペースごとのトークン予算を設定します。
プロンプト作成:顧客向きと管理者向きのプロンプト、エスカレーションルール、トーンガイドライン、禁止事項、および境界構成。
会話監査:リクエスト/応答ログ、トークンの使用量、会話ごとのコスト、プロバイダー、モデルバージョン、および解像度の成果。
パターン分析:一般的な質問、解像度率、手取り周波数、トピックによる満足度、およびトレーニングギャップの識別。
AIトレーニング内容:記事、FAQエントリー、製品ドキュメント、コネクタ知識、カスタムエントリ。AIの地階化のためのセマンティックとキーワード検索。
統合ハブ:インストールされたコネクタ、健康状態、アクション在庫、認証管理、マーケットプレースブラウザ、およびコネクタービルダー。
サイト管理:スニペット、サイトキー、ウィジェット構成、ドメイン設定、およびパーサイトのワークスペース分離を追跡する。
ユーザー管理:メンバーを招待し、権限(Owner/Full Admin/Agent)を割り当て、部門のアクセスを設定し、許可を管理する。
応答メトリック:解像度の時間、ワークロード、SLAのコンプライアンス、エージェントによるCSAT、リオープン率、バスティ時間、トレンド分析。
構成:ビジネスアイデンティティ、AIの組み立て、追跡、保証、ブランディング、保持、電子メールテンプレート、請求、インポート/エクスポート、診断および危険ゾーン。
プラン管理:ライセンスのステータス、プラン機能、使用メトリック、更新日、アップグレード/ダウングレードオプション。
オンボーディング・ジャーニーは、作業中の OpsIQ ワークスペースに新しいインストールを回し、進行状況を失うことなく左に移動して再開することができます。
ワークスペースごとに完了する旅店。オンボーディングに戻ると、再起動を強制するのではなく、完了した手順が表示されます。
アナリティクスハブは、サポート、チャット、AI、訪問者およびエージェントのレポートを1つの日付フィルタされたワークスペースにエクスポート可能な結果をもたらします。
分析ハブを使用して、クロスチームレビュー; 専用の訪問者、チケット、CSAT、AI履歴およびチームのパフォーマンスページを使用して、レコードレベルの調査が必要な場合。
Dashboard は毎日のコマンド センターです。トラフィック、セールス、サポート負荷、AI アクティビティ、コンバージョンインジケーターを 1 つのビューで表示します。毎日開いて、毎晩何が起こったのか、今日の注意が必要なかを理解してください。
ウェブサイトの利用者数を今すぐ更新してください。15 秒 (configurable). 訪問者は、アクティブな境界内のページをロードした場合に "active" です。(デフォルト: 90 秒)。
選択した日付範囲でウェブサイトを訪問した人が何人かの人がいます。 OpsIQ は、ブラウザの指紋、クッキー、および(利用可能な場合)認証されたアイデンティティの組み合わせによって訪問者を識別します。
新規の訪問者は初めてサイトを閲覧しています。 訪問者が以前見てきたことがわかりました。 高いリターン率は、あなたのコンテンツが戻って人々をもたらします。 非常に低い戻り比は、あなたが興味を保持していないことを意味します。
1ページのみ閲覧した訪問者の割合。上記のバウンス率 70% リンク先ページでは、通常、ページの訪問者の期待、間違ったコンテンツ、遅い負荷、またはモバイルの悪い経験を満たしていないことを意味します。
訪問者が平均して各ページでどのくらいの時間を費やしているか。非常に短い時間(下) 10 秒) コンテンツページでは、コンテンツを魅力的ではないことを示唆しています。チェックアウトページの非常に長い時間が混乱する可能性があります。
IPアドレス OpsIQ 脅威のスコアリング、残酷な力の試み、または手動ブロックに基づいて潜在的に悪意のあるものとして識別される。 クリックしてブロックされた IPs リスト。
接続された販売ソースからの収益()Shopify, WooCommerce, Stripe等)。販売がゼロに示す場合、あなたのプラットホームのコネクターは接続され、同期であることを点検して下さい。
選択した日付範囲で訪問者数を示すライングラフ。パターンを探します:トラフィックスピアンズ(キャンペーン、プレス言及)、ディップ(週次、祝日)、および持続的な傾向。
訪問者がどこから来ているか:直接、Google、ソーシャルメディア、電子メールキャンペーン、紹介サイト。このを使用して、どのマーケティングチャネルが機能しているかを理解してください。
Chrome、Safari、Firefox、Edge など。ブラウザが異常に高いバウンス率を持っている場合は、CSS または JavaScript 互換性の問題。
週1日と曜日の時間帯で訪問者のアクティビティを示すグリッド。サポートシフトをスケジュールするときに決定するためにこれを使用し、発表を送信するとき、プロモーションを実行するときに使用します。
全国、ページ、デバイス、ソースの最後の数名。キャンペーン中にスポットチェックが素早く使えるように便利です。
ダッシュボードの右上にある日付ピッカーをクリックします。プリセット:今日、昨日、最後7日, 最終 30 日、この月、最終月、カスタム範囲。範囲を変更したときにすべてのダッシュボードカードとチャートの更新。日付範囲は、設定されたタイムゾーン(設定のセット)にあります。
チェック: (1) 特定のランディングページが変更されましたか?トップページに移動し、バウンス率でソートします。(2) キャンペーンは間違ったページへトラフィックを送信しますか? 新しいリファラーのトップソースをチェックしてください。 (3) モバイルサイトが壊れたか?モバイルバウンスレートのブラウザの故障をチェックしてください。(4)ボットトラフィックですか?脅威カウンターと訪問者の詳細は疑わしいパターンを確認してください。
チェック: (1)トラッキングウィジェットはインストールされていますか?ウェブサイトのソースコードを表示し、検索します。OpsIQ スクリプト。()2) サイトキーは正しいですか? 接続されたサイト内のキーでスクリプト内のデータサイトのキーを比較します。 (3) CDNやキャッシュはスクリプトなしで階段ページをサーブしていますか?CDNのキャッシュをクリアします。(4) スクリプトをブロックする広告ブロッカーまたはCSPヘッダーはありますか? ブラウザコンソールでブロックされたリクエストを確認します。
これはB2Bのトラフィックパターンです。 訪問者は、営業時間中に閲覧する作業の専門家です。 インプリケーション:1)平日営業時間のスケジュールサポートスタッフ2)メールキャンペーンを火曜日から木曜日の朝に送信します。(3)週末のメンテナンスウィンドウは安全です。 ()4) ピーク時のみライブチャットの提供を検討してください。
訪問者に移動し、タイムウィンドウでフィルタリングします。チェック: (1) 彼らは実際の訪問者やボットですか? セッションの期間、ページの表示、およびブラウザの多様性を見てください。 (2) 実際のところ、どのページがランディングされているの?(3) レファラーをチェックする URL. 誰かがReddit、ハッカーニュース、または人気のあるブログからあなたにリンクしている可能性があります。 (4)ボットトラフィックの場合、脅威をチェックしてブロックを検討してください。IP 範囲。
OpsIQ 訪問者を別々にカウントします。 これは、ブラウザの指紋とクッキーを使用しますが、GAは異なるCookieモデルを使用しています。 ボットフィルタリング、広告ブロッカーレート、スクリプトロードオーダーも違いを引き起こす可能性があります。 A 10-20% variance は正常です。
ダッシュボードは、OpsIQ 管理者。外部の報告のために、REST を使用します API 分析データをプルし、独自のダッシュボードやBIツールで表示します。
カウント数 IP アドレス OpsIQ 脅威のスコアリング、繰り返された失敗したログイン、または手動ブロックに基づいてフラグを立てたりブロックしたりしました。 カウンターをクリックして詳細を確認し、ブロックを管理します。
ビジターログは、追跡されたウェブサイトへの訪問を全て表示します。各行は1つの訪問者から1ページロードです。個々の訪問者の行動を調査し、キャンペーントラフィックを見つけ、トラッキングの問題を診断するために使用します。
ビジターズ IP アドレス。匿名化されている場合 IP 匿名化は、設定で有効になっています。これからすべての訪問を参照するにはクリックします IP.
から検出されるIP GeoIP のデータを使用してアドレス。 MaxMind GeoLite2 データベースか Cloudflare ジオヘッダー。 GeoIP が設定されていない場合は「不明」を表示します。
訪問者が読み込まれたページ。 クリックして、全体を見る URL. ロング URLs テーブルビューに畳み込みます。
訪問者があなたのサイトに上陸する前にから来た場所。 「直接」とは、参照者(ブックマーク、タイプされた)を意味しません URLs, いくつかのアプリのリンク).
訪問者のデバイスタイプ(デスクトップ、モバイル、タブレット)とブラウザ(Chrome、Safari、Firefoxなど)。ユーザーエージェントヘッダーからパースされます。
ページの読み込み時に、設定されたタイムゾーンで。
訪問者が識別される場合(IDトークンまたはログイン経由)、その名前または電子メールが表示されます。それ以外の場合は匿名として表示されます。
特定の期間への訪問をフィルタリングします。デフォルト:最後の7日。
で検索 IP アドレス、ページ URL、参照者、国、または顧客の電子メール。
交通情報源によるフィルタ:直接、有機性、社会的、紹介、有料、電子メール。
デスクトップ、モバイル、タブレットでフィルタリングします。
初めての訪問者しか見られない人だけが表示されません。
ビジターログでは、検索フィールドとタイプ "summer-sale" を使用します。検索チェックのレファラー URLs ページの先頭へ URLs なので、UTMパラメータはマッチします。 Source = Paidでフィルタリングしてさらに絞り込みます。
訪問者ログで自分のメールアドレスで検索します。 ログインしている場合は、そのアイデンティティが表示されます。 日付範囲を昨日に設定してください。 3pm周りのチェックアウトページへの訪問を探します。 セッションをクリックして、フルページの流れと任意のページが表示される JavaScript エラー。
これは、ボット、スクレーパー、または壊れたスクリプトです。 訪問者ログに移動し、それで検索します IP. チェック: (1) 同じページへの訪問は? (2) ユーザーエージェントは既知のボットですか? (3) セッションの期間はいつもです0秒?ボットとして確認したら、セキュリティに移動してブロックします。IP.
このページの読み込み。 1ページビューあたりの1行。ベスト:特定のページを調べ、特定のソースからのトラフィックを見つけ、追跡の問題の診断。
旅行ページビューをグループ化。訪問セッションごとに1行ずつ表示します。ベスト:ユーザーの流れを理解し、セッション時間を測定し、変換パスを特定する。
リアルタイムで活動。サイトに訪問者を現在表示します。ベスト:進行中のキャンペーンの監視、ハイインテントな訪問者のスポット化、サポート機会を見守る
OpsIQ デフォルトですべての訪問を追跡します。 自分のトラフィックを除外するには、IP除外されるアドレス IPs 設定 > トラッキングの一覧です。
GeoIP の調査はどちらかを要求します Cloudflare ジオヘッダ(使用する場合自動)Cloudflare)または MaxMind GeoLite2 データベースファイル。 [設定]> [ジオIPパス]をチェックして、データベースファイルが存在し、読みやすくなります。
訪問者データは、設定(デフォルト)で構成されている保持期間のために保存されます。90 日)。その後、古いレコードはcron保持ジョブによって自動的にクリーンアップされます。
セッションは、同じ人物から単一の旅へと複数のページビューをグループ化します。ビジターログでは個々のページの読み込みが示されていますが、セッションでは、人々があなたのウェブサイトを着陸から退出まで移動する方法を紹介します。
訪問者が最初のページをロードしたときにセッションが開始されます。 より多くのページに移動すると、継続します。 訪問者はセッションのタイムアウト期間に非アクティブであるときにセッションが終了します(デフォルト: 30 分)またはブラウザを閉じます。タイムアウトが新しいセッションを作成した後に同じ人が戻ります。
訪問者があなたのサイトに入ったランディングページ。これは、コンテンツが人々を引き付けているかを伝えます。
訪問者が左にある出口ページ。出口のページが頻繁に価格設定画面の場合、訪問者は競合他社とあなたを比較するかもしれません。
訪問者がこのセッションで見ているページ数。より多くのページは通常、よりエンゲージメントを意味しますが、訪問者は失われることを意味します。
ページの読み込みから最終アクティビティまでトータルタイム。セッション0秒はバウンス(単一ページビュー、これ以上のやりとりはありません)です。
今回のセッションのトラフィックソース(ダイレクト、Google、ソーシャル、紹介など)
訪問者のから検出された国 IP 郵便番号
訪問者が1ページしか閲覧しなくなった場合でも、バウンスセッションは赤色表示器です。
訪問者がこのセッション中に追跡されたコンバージョンイベント(購入、サインアップ、フォーム送信)を完了したかどうか。
で検索 IP、電子メール、ページ URL セッション内での、またはレファラー。
新規の訪問者(初回セッション)または訪問者の返却によるフィルタリング
トラフィックソースでフィルタリングします。
特定の地域からのセッションを見るために、国別フィルター。
脅威としてフラグが付けられたセッションやセッションのみを表示するフィルタ。
セッションでメールを検索します。すべてのセッションを見てみましょう:()1) 購入する前に、何回訪れたんですか? (2) どのページがビューしたの?(3)チャットやチケットを開くことはできますか?(4) 最初の訪問から購入までの合計時間は何でしたか? これは、高値の顧客のための典型的な購買の旅をあなたに伝えます。
セッションで顧客メールを検索します。最近のセッションの国を比較します。突然、異常な国からセッションが現れた場合は、正当な旅行や妥協されたアカウントになる可能性があります。チェック:(1) 成功する前にログインの試みが失敗しましたか? (2) あった IP 同じセッション内で変更しますか?疑わしい場合は、レビューのためにそれをフラグを立てます。
訪問者は人(またはブラウザ)です。セッションは、その人の訪問です。同じビジターは、多くのセッションを何度も受けることができます。セッションが期限切れ後に期限切れになります。
OpsIQ は、クッキー、ブラウザの指紋、認証されたアイデンティティトークンの組み合わせを使用します。訪問者が自分のクッキーをクリアし、ログインされていない場合は、新しい訪問者として表示されます。
ライブフィードは、ウェブサイトの訪問者をリアルタイムで表示します。 それは自動的に更新されます 15 秒(設定可能)。キャンペーン、製品起動、および忙しいサポート期間中に使用して、今すぐ何が起こっているかを確認します。
ライブフィードは、設定されたリフレッシュ間隔でサーバーをポーリングします。各行には、現在のページ、国、デバイス、ソース、セッションの期間、およびページのカウントの訪問者が表示されます。グリーンハイライトでは、最後の更新以来の新しいアクティビティが示されています。訪問者の列をクリックして、完全なセッションの詳細を確認します。
ライブフィードの更新頻度。デフォルト: 15 秒数。値の下げ()5-10s) より高速な更新をしますが、より多くのサーバーリソースを使用します。高値(30-60s)サーバ上では、リアルタイムではなく、より簡単に実行できます。
訪問者が最後のページロード後に「アクティブ」と見なされる時間。デフォルト: 90 秒。 訪問者がページをロードし、それを読み込むと2クリックせずに分、しきい値の後にライブフィードから消えます。
クリックして、自動リフレッシュを停止します。リストの更新なしで詳細を読む場合は便利です。 [再開]をクリックします。
これは、高い意図的な行動です。 ライブフィード:()1) 訪問者をクリックすると、セッションが表示されます。(2) チャットを開始すると、AIは完全な旅のコンテキストを持つことになります。(3) 彼らは購入せずに残っている場合, 彼らはリードページでリードになります. (4) 訪問者がチェックアウトに達するとチャットメッセージを表示するための積極的なルールを作成することを検討してください。
これは、次のことができます: (1)共有インターネット付きのオフィス。訪問が実際の人間(異なるページ、合理的なセッション期間)のように見えるかどうかを確認します。 (2)ボットまたはスクレーパー。セッションが非常に短いかどうかを確認してください(0-1秒)またはシステム的にページを打つ. (3)負荷テスト。自動テストを実行している場合は、除外します IP 追跡から。
チェック: (1) サイトにウィジェットスクリプトがインストールされているか? (2) サイトキーは正しいですか? (3) アクティブなしきい値が渡されましたか? (4)追跡スクリプトをブロックする積極的な広告ブロッカーを使用して訪問者ですか?
ライブフィードは、アクティブな訪問者を表示します。フィルタリングされたビューでは、ビジターログまたはセッションページを使用してフィルターオプションを使用します。ライブフィードには、リアルタイム監視が意図的に簡単です。
このページでは、ウェブサイトのどのページが最もトラフィックを得るかを説明します。 これは、訪問、エンゲージメント、変換、およびサポート活動によってページをランク付けします。 それは最高のコンテンツを特定し、ページを下回る、そしてサポート質問を生成するページを発見するためにそれを使用します。
完全な URL パス。グループ化が有効になっている場合は、類似ページ(例、製品種別)をグループ化します。
このページの総回数は、選択した日付範囲に読み込まれたものです。
このページを閲覧した人(同じページを2回表示する人)は、1ユニーク)。
このページだけ閲覧した後、サイトを離れる訪問者の割合。ランディングページでの高いバウンス = 問題。 "ありがとう"のページで高バウンスの=正常。
訪問者が平均してこのページにどのくらいの時間を費やしているか。非常に短い = 読みていない。フォームページで非常に長い=混乱。
このページからチャットの会話がいくつも始まりました。商品ページでは、ハイチャットで製品の説明が不明な場合もあるためです。
このページにいたる訪問者がサポートチケットをいくつも作成しました。ハイチケットカウント = 潜在的なUXまたはコンテンツの問題。
「サポートチケット」または「チャット開始」でトップページをソートします。商品や発送ページを数えきに見かけます。最も支持されている質問のあるページは、おそらく不明な情報があります。ページコンテンツを修正し、サポート質問が減少するかどうかを監視してください。
別々のバウンス率下降順でソートします。自然にポイントを出るページを無視します(あなたのページ、確認ページ)。訪問者が従事している保つべきページの焦点:製品ページ、価格設定、機能。これらはより良い呼び出し対行動や明確なコンテンツを必要とします。
チェック: (1) その特定のページにインストールされたトラッキングウィジェットはありますか? 単一ページのアプリは、ルートの変更に関するページビューが表示されない場合があります。 (2) トラッキング設定でページは除外されますか?(3) CDNは、トラッキングスクリプトなしでキャッシュされたバージョンを提供するか?
ジオインテリジェンスは、訪問者が国、都市、デバイス、およびソースから来ている場所を示しています。 それを使用して、地理的市場を理解し、言語サポートを決定し、地域のマーケティングを計画し、疑わしいトラフィックパターンを検出します。
訪問者数でランクされている国トップ。 国をクリックして都市レベルのデータをドリルダウンします。
国のトラフィックの視覚的な内訳。割合は逆に。
選択した期間の訪問者と各国, 訪問者数を表示, セッションカウント, バウンス率, 変換速度.
国の都市をクリックすると、その国内で最も多くの観光客が訪れます。
OpsIQ 訪問者の場所を2つの方法で検出します。1) Cloudflare ジオヘッダ。あなたのサイトが後ろにいる場合 Cloudflare、国の検出は自動および正確です。(2) MaxMind GeoLite2 データベース。無料のデータベースをダウンロードし、設定のパスを設定します。都市レベルの検出は、国データベースだけでなく、GeoLite1-Cityデータベースが必要です。
VPN を使用する訪問者は、実際の場所ではなく、VPN サーバーの場所から来られるように見えます。これは設計です。OpsIQ VPN を迂回しようとはいけません。異常な国のパターンが見つからない場合は、そのことを検討してください 10-20% 訪問者は、VPNを利用することができます。
チェック: (1) これらの実際の訪問者ですか? セッションの期間とページを見てください。 高いバウンス = おそらくボットを持つ非常に短いセッション。 (2) 彼らはGoogleを通してあなたを見つけますか? レファラーを確認してください。 ()3) 彼らは新しい市場で潜在的な顧客であることができますか? トラフィックが本物であり、従事している場合は、インド固有の価格設定やコンテンツを追加検討してください。
ジオインテリジェンスページをご覧ください。スペイン語圏の国(スペイン、メキシコ、コロンビア、アルゼンチンなど)が一緒に低発音率でトラフィックの 10% 以上を表す場合は、翻訳を検討する価値があります。また、チェック:これらの国の訪問者は、あなたの主要な市場への同様のレートに変換しますか?
タイムリーなヒートマップ(ダッシュボードで)をジオインテリジェンスと組み合わせて使用してください。40% 欧州からの交通手段 35% アメリカから、タイムゾーンのカバレッジが必要です。各地域が最も活発なときにヒートマップは正確に示します。
調査: ()1) 彼らは価格設定ページで強調していますか? 多分あなたの価格は、その市場のための競争ではありません。 (2)ドイツに発送しますか?あなたの配送ページがドイツに言及しているかどうかを確認してください。 (3) ユーロでチェックアウトできますか?通貨の不一致は放棄されたチェックアウトを引き起こします。 (4) これらの訪問者は、トラフィックが少ないかもしれない単一のソースからですか?
GeoIP は設定されていません。Cloudflare (ジオヘッダを自動的に追加) または MaxMind GeoLite2 データベースをダウンロードし、Settings > GeoIP Path のファイルパスを設定します。
OpsIQ 国のブロックは行いません。Webサーバや Cloudflare 国のブロックのためのファイアウォールルール。OpsIQ ネットワークレベルのアクセス制御ではなく、可視性に焦点を当てます。
意図したファネルは、訪問者のセッションを閲覧、調査、比較、購入、サポートを受けるか、または退去するのかによって分類します。サイトに意図されたバランスを理解し、訪問者が落ちる場所を特定するために使用します。
来場者は、気に見てみると、ショートセッションや数ページ、特定の目標が検出されない。
訪問者は、製品/フィードページ、ドキュメント、ブログコンテンツを読みます。 ページ、複数のコンテンツページで時間を延ばします。
訪問者の視聴価格、プラン比較、または機能テーブル。多くの場合、帰国者。
チェックアウト、カート、またはサインアップページ。 注目すべきです。 これらは変換機会です。
ヘルプページ、連絡先ページ、またはチャットを開始するための訪問者。 彼らは助けを必要としています。
1ページ後に残った訪問者。低いエンゲージメント。
価格ページは、意図を作成するのに十分な強度があります。 チャットは購入パスで重要です: 27% 価格設定の訪問者は購入する前にチャットに従事しています。チェックアウト後のサポートチケットは、アクティベーションまたは支払い混乱を示す場合があります。アクション:1) AIチャットが価格設定の質問に答えることを確認してください。 ()2) 調査 18 一般的な問題に対するサポートチケットのチェックアウト
日付範囲フィルターを使用して、期間にわたる意図パターンを比較します。たとえば、ブラックフライデーウィークを通常の週に比較してください。プロモーションが混乱を作成した場合、「購入」のインテントでスパイクが表示され、おそらく「サポートシーク」が表示されます。
OpsIQ ページを見る URLs, セッションの動作と時間パターン. プライシングページ信号比較意図. チェックアウトページは、インテントを購入します。. ヘルプ/コンタクトページ信号サポート意図. クラスはヒューリスティックベースです, AI主導ではありません.
現在ではありません。一般的なWeb行動パターンに基づいて、カテゴリが組み込まれています。カスタムインテントの分類はロードマップ上にあります。
ページのステップやイベントの手順からカスタム旅行を構築し、コホート保持を測定し、最も頻繁にサイトを経由してアクセスパスを発見します。
名前付きファネルを生成します。 2にほんご8 ページまたはイベントの手順。 変換ウィンドウを時間に設定します。注文されたステップがそのウィンドウ内で行われるときのみ訪問者はカウントされます。 再生、エラー、ページの速度、メッセージングをチェックする場所を選択するためのステップ間のドロップを使用してください。
訪問者を毎週のコホーツに保持し、何を返すかを示す。6, 8または 12 週の地平線。リリースやキャンペーンを比較するときに、コホート定義を安定しておいてください。
Paths は最も一般的なページシーケンスをリストします。パスの長さを選択します2にほんご5結果が読みやすく保つページ。 それを使用して、予期しない迂回、一般的な出口と繰り返すコンテンツの変換を調べます。
カスタムファネルは、自動化ではなく分析の定義です。 完了したステップに反応するには、変換目標、セグメント、トリガーまたはワークフローを作成します。
セッション再生では、訪問者があなたのサイト上で何をしたかのタイムラインを見ることができます。クリックされた要素、スクロールした内容、そして彼らがどこにいるのか、およびそれらがタイプされているもの(機密フィールドでマスク)。UXの問題を診断し、バグレポートを確認し、顧客の混乱を理解しるためにそれを使用してください。
セッションページから、報告された問題のセッション、コンバージョンのないハイページのカウント、サポートチケットを提出した顧客からのセッションを探します。 リプレイアイコンをクリックしてタイムラインビューを開きます。
時間の経過とともにイベントを見せる水平バー。タイムラインのどこからでもクリックして、その瞬間にジャンプします。
各ページの読み込みは、タイムラインのセグメントとして表示されます。 訪問者が取った正確なパスを見ることができます。
タイムライン上の点やページ再構築のハイライトとしてイベントが表示されます。
スクロール深さは追跡され、訪問者の読み方を確認できます。
フィールドフォーカスとイベントの入力は記録されます。パスワードや機密フィールドにテキスト入力すると、デフォルトでマスクされます。
セッション再生は、デフォルトで敏感なフォームフィールドをマスクします。 パスワードフィールド、クレジットカードの入力、およびデータにマークされたフィールド opsiq-mask は記録されません。Settings > Tracking に追加のマスキングルールを設定できます。コンプライアンスポリシーが要求されると、完全に再プレイを無効にすることができます。
セッションページ(電子メールによる検索)でセッションを検索します。リプレイを開きます。チェックアウトページセグメントを参照してください。1) 右ボタンをクリックしましたか?(2) あった JavaScript エラーが発生しますか? (JS Errors ページをその時間にチェックします。)3) ページをリロードしたり、エラーメッセージを表示させたりしましたか?(4) 必要なフィールドが空だったか?リプレイは何が起こったのかを正確に示します。
トラフィックボリュームでデータを再生します。 保存設定を使用して、古いリプレイデータを自動的にクリーンアップします。 高トラフィックサイトの場合、より短いリプレイの保持期間を考慮する(例: 30 ストレージの管理日)
「Respect Do Not Track」が「Settings」で有効になっている場合、DNT ヘッダーを持つ訪問者は記録されません。トラッキング設定で特定のページを再生から除外することもできます。
イベントログは、イベントがすべて表示されます。OpsIQ 録画:ページビュー、クリック、チャット開始、チケット作成、販売、カスタムイベント。それをデバッグ統合に使用し、Webhook配信を確認し、アクションのシーケンスを理解します。
webhooks.events.list; このテーブルから名前にサブスクライブすると、何も配信されません。各行は、名前を表示されます 送信する とお正式な名前 OpsIQ 店舗情報 と。両方が記録されます:送信した生名、およびそれにマップする正解な名前、従って正当性税に対して書かれた報告書は、使用しているトラッカーをエイリアスに作業し続ける。
追跡されたページの読み込み。URL, タイトル, レファラーとタイムスタンプ. page_view それに view 同じこととして受け入れられます。
訪問者はチャットウィジェットを開きます。
訪問者はチャットメッセージを送信します。返信側はそのまま保存されます support.chat_message_received.
支援チケットの作成 ticket_create 同じものとして受け入れられます; 返信と閉鎖は、そのまま保存されます support.ticket_replied それに support.ticket_closed.
追跡されたフォームは提出されます。 submit 同じこととして受け入れられます。
ご購入完了 purchase_success, 販売のエイリアス order.completed, sale.completed, payment.completed それに invoice.paid接続されたプラットフォームから、すべて受け入れられています。
チェックアウトが始まります。 関連: cart_view, checkout_view, checkout_intent, checkout_abandon, add_to_cart.
訪問者の兆候。失敗は login_failed、貯えられたとして identity.login_failed; ロックアウトはあります login_lockout_created.
訪問者はサインアップを完了します。リードは lead、貯えられたとして conversion.lead.
A. は、 JavaScript 追跡されたページでエラーがキャプチャされます。
お客様がウェブサイトやサーバーから OpsIQ_ にカスタムイベントを送信することができます。 カスタムイベントは、ボタンをクリックしたり、機能使用量、ビデオプレイ、ダウンロードなどの操作を追跡するのに便利です。
// Send a custom event from the browser
window.OpsIQ = window.OpsIQ || [];
window.OpsIQ.push(["track", "plan_selected", {
plan: "pro",
billing: "annual",
value: 99
}]);// 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 日数。高値イベント(財布、セキュリティイベント)は長期保持で設定できます。
はい。実験をするときは、コンバージョンイベントを選択します。コンバージョンゴールとして組み込みやカスタムイベントが使用できます。
実験では、ページや機能の2つのバージョンをテストしたり、その1つがより良いものになるように測定することができます。 OpsIQ は印象、変換、統計的な意義を追跡します。
名前をつけ、プライマリメトリック(コンバージョンイベント)を定義し、バリアント(コントロールとテスト)を設定します。
OpsIQ ランダムに訪問者をバリアントに割り当て、その行動を追跡します。実行中に実験を変更しないでください。
十分なデータが収集された後、自信レベルを確認してください。95% 自信のある手段は、95% 違いが実質的であることを確認してください。ランダムなチャンスはありません。
作成がまだ開始されていません。 変形とメトリックを編集できます。
訪問者をバリアントに積極的に割り当てます。実行中に編集しないでください。
統計的意義を辿り着いたり、手動で停止していたりする。結果は最終決定である。
結果は見直しされ、実験がアクティブなリストで不要になりました。
開始前に測定しているものを決定します。結果を見るとメトリックを選択するとバイアスが導入されます。
チームの IP アドレスを除外リストに追加すると、スタッフの訪問は結果をスキューしません。
100 訪問者の後に実験を中止しないでください。信頼できる結果を得るために、何百もの訪問者または数千人の訪問者が必要です。
見出しとボタンの色を変更した場合は、改善が起こっているかわからない。
実験終了後、どのバリアントが勝ち、なぜ実装するかを説明します。
ベースライン変換率と検出したい効果サイズによって異なります。 親指の規則として:少なくとも 500 訪問者は、バリアントごとに 20% 効果のサイズ。より小さい効果のために、数千を必要とします。
はい、注意が必要です。2つの実験が同じページに影響を及ぼすと、結果は相互作用する可能性があります。異なるページや機能で実験を実行することは安全です。
JavaScript エラーは、Webサイトの訪問者からクライアント側のエラーを収集します。 壊れたボタン、失敗 API コール、または欠落したリソースがここに表示されます。実際の顧客に影響を与えるバグを見つけて修正するために使用します。
JavaScript エラーテキスト(例:「TypeError:未定義のプロパティを読み取らない」)
エラーが発生したページ。
どのブラウザとデバイスタイプがエラーを調べました。一部のエラーはブラウザ固有のものです。
エラーが発生したコードの場所。クリックして、スタックのトレースをフル展開します。
このエラーが最初に現れたとき。
最近起きたエラーが発生したとき。
エラーが記録された回数
異なる訪問者セッションがこのエラーを経験した回数は、どのように多くの異なる。
全てではない JavaScript エラーはすぐに注目する必要があります。:() によって優先順位付けします1)重要なページのエラー(チェックアウト、サインアップ、ログイン)2)高いセッション数のエラー(3) 最近登場したエラー(コード変更による可逆レグレッション)、(4)独自のコードのエラー(サードパーティスクリプトではありません)。
つまり、45 実際の顧客はチェックアウトを完了できません。手順:()1)同じブラウザ/デバイスの組み合わせでページを開きます。 (2)ブラウザコンソールを開き、エラーを再現します。(3) スタックトレースをチェックして、コードの正確な行を見つけます。 (4) バグを修正し、展開して、エラーカウントをゼロに監視します。
はい、OpsIQ すべてのキャプチャ JavaScript 分析スクリプト、チャットウィジェット、広告スクリプトなどのエラーを含むページ上のエラー。フィルタリング URL スタックトレースでは、独自のコードに焦点を当てます。
特定のエラーを抑制することはできません。OpsIQ, しかし、あなたはページでリストをフィルタリングすることができます URL またはエラーメッセージ。ブラウザの拡張子からエラーを修正または無視します(多くの場合、未知のソースからのエラーとして表示されます)。
セールストラッキングは、店舗や課金プラットフォームを繋ぎます。OpsIQ 訪問者の行動に沿って収益を見ることができます。すべての購入は、訪問者の旅に起因するので、どのページ、キャンペーン、チャネルが収益を駆動するかを知ることができます。
注文から今日完了した収益。接続されたプラットフォームから各新しいオーダーイベントをリフレッシュします。
期間に集計された収入。払い戻しは、これらの合計から引き算されます。
選択した日付範囲で毎日収益を示すライングラフ。スパイク(プロモーション、キャンペーン)とディップ(issues,season)を探します。
どのトラフィックソースが最も購入につながるか。 "直接"買い手は、多くの場合、あなたのサイトをブックマークしました。 "Google"バイヤーは検索を通じてあなたを発見しました。
ご購入いただいたお客様のメール、金額、通貨、商品に関する最新の注文
トラッカーが訪問者がブラウザで購入確認に達していると表示しているが、接続されていないプラットフォームはまだ販売を報告していない場合、顧客はアンバーバッジで購入(未確認)行を表示します。収益としてカウントされません。プラットフォームは販売を確認したときに、確認された購入はそれを置き換えます。
セールスコネクタは、単一のWebhookに依存しません。プラットフォームが送信するすべての支払い信号は販売を開くことができ、Connector Contract 2.3 _はスケジュール(作業スペースごとにデフォルト時間)に完了した売上のプラットフォーム独自のリストを再読み込みします。そのため、プラットフォームが配信されていないwebhookは販売を失うことができません。オペレータは、ツール/sales_reconcile. phpでコマンドラインから要求に応じて実行できます。
コネクターに行く >Shopify. あなたのカスタムアプリを作成する Shopify admin (Settings > Apps and Sales channel > アプリを開発)。 助成対象範囲: read_orders、read_customers、Read_products。 Admin をコピーする API アクセストークン。OpsIQ、あなたの店のドメイン(例えば、your-store.myshopify.com)とアクセストークン。 [接続のテスト] をクリックします。 成功すると、Webhook がリアルタイムの注文通知に同期できます。
コネクターに行く >WooCommerce. あなたの WordPress 管理者, 行く WooCommerce> 設定 > アドバンスト > REST API. Read/Write 権限でキーを作成します。コンシューマーキーとコンシューマシークレットをコピーします。OpsIQ、あなたのサイトを入力してください URL、コンシューマーキーおよび消費者シークレット。 [接続のテスト] をクリックします。
コネクター > BigCommerce. あなたのビッグコマース管理者で、高度な設定に移動>API アカウント。 V2/V3 を作成します。API 注文、顧客、およびプロダクトのための読まれた規模のアカウント。アクセストークン、クライアントIDをコピーし、API パス。それらを入力してください OpsIQ そしてテスト。
コネクター > Magento に移動します。Magento管理者で、システム > インテグレーションへ進みます。新しいインテグメントを新規作成する API セールス、顧客、およびカタログへのアクセス。統合を有効にし、アクセストークンをコピーします。OpsIQ Magentoベースで URL.
コネクター > PrestaShop に移動します。PrestaShop管理者で、Advanced Parameters > Webservice にアクセスしてください。Webサービスを有効にして新しいキーを作成します。注文、顧客、および製品へのアクセスを許可します。キーをコピーし、それを入力します OpsIQ 店舗で URL.
コネクター > OpenCart. Generate API OpenCart 管理者パネルから認証情報を入力します。API URL, ユーザ名, キー OpsIQ。コネクターはOpenCartのRESTを使用します API 注文と顧客データのため。
コネクター > osCommerce に移動します。データベースアクセスを構成するか、API コネクターの設定で文書化される資格情報。osCommerceの統合は通常直接データベースアクセスか習慣を要求します API モジュール。
コネクターに行く > ストライプ. 制限されたストライムをコピーする API Stripe Dashboard から鍵 (開発者 >API キー)。キーは顧客、充満、請求書およびサブスクリプションへのアクセスを読む必要があります。それで入れて下さい OpsIQ. Webhookエンドポイントをリアルタイムイベントに設定します。
RESTを使う API または任意のプラットフォームから販売イベントを送信するために webhooks. 顧客メール、金額、通貨、およびアイテムでOrder.completed イベントを送信します。 イベントを見る API ペイロードフォーマットのセクション。
顧客が支払うチャネルを示す。 Googleが持って来れば 1000 訪問者および訪問者 50 販売、それはです5% 変換率。メールが来たら 200 訪問者および訪問者 30 販売、すなわち 15%. メールは、訪問者ごとにより効果的です。
払い戻し注文は別に追跡されます。 彼らはあなたの純利益合計を削減します。 特定のソースから返金率が高い場合は、トラフィックが低品質である可能性があります。
OpsIQ は、元の取引通貨と金額を格納します。複数の通貨企業が各通貨で収益を表示します。正規化されたレポートでは、構成された為替レートを使用します。
調査: ()1) 料金ページ訪問者でセッション再生を使用する。価格設定テーブルとどのように相互作用するかを見てください。(2) 価格設定ページのバウンス率とタイムオンページでトップページをチェックします。 (3) 価格ページ訪問者からチャットの会話をチェックしてください。 彼らは何を尋ねますか? (4) 価格設定ページを競合他社に比較します。 ()5) A / Bの実験を異なる価格設定レイアウトで試してみましょう。
ソースで販売とフィルタに移動します。キャンペーンUTMパラメータを検索します。次のようになります:(1)メールから何人かの訪問者が来たのか。(2) 販売に換算した回数(約数)3)キャンペーンに起因する総収益。(4)キャンペーン開始前と同じ期間を比較します。
チェック: (1) プラットフォームコネクタは、接続して健康ですか? コネクターに移動し、ステータスを確認します。 (2) webhook が有効になっているか? polling を使うと、cron ジョブの実行中ですか? (3)コネクターは右を持っています API スコープ? Shopify, read_orders が必要です。
コネクタを介して注文が来るとき、OpsIQ 顧客の電子メールを既知の訪問者にマッチします。購入前に訪問者が追跡された場合、販売はトラフィックソース、ランディングページ、およびセッション履歴を含む、訪問者の旅に起因しています。
RESTで販売イベントを送れます API または任意のシステムから webhooks. イベントの形式は、イベントで文書化されます API セクション。
ストアフロントはOpsIQクライアントチャットやサポートされたソーシャルチャネルで、商品、ページ、ルックブック、プロモーションパネル、チェックアウト、顧客アカウント、AI支援販売のネイティブショップです。
設定するサイトを確認します。製品、設定、ページ、注文および分析は、そのワークスペースに分離されます。
一般的な設定→Eコマースは親権者です。 ストアフロントの公開、注文作成および支払いが分離され、安全にカタログをプレビューできます。
製品の種類、価格、通貨、在庫、バリアント/オプション、メディアおよびフルフィルメントを設定します。 公開前に製品とチェックアウトの選択肢をプレビューします。
ゲートウェイを接続するか、銀行送金、現金またはカウンター決済を追加します。物理的な商品には配送ゾーンやコレクションが必要です。デジタルグッズは保護されたファイルやコードを必要とします。
すべてのブロッカーを修正し、すべての警告を見直し、パブリックストアからサンドボックスの注文を完了します。
新しくアップグレードされたストアは編集可能なスターターテキストを受け取ります 弊社について, 条件と条件, プライバシーと 払い戻しと返品 それらのフィールドが空の場合。商店のコピーを主張することは決して上書きされません。
[Add …] プロンプトと 星のTEMPLATE 発売前の通知。キュレーションカラーテーマと構成を選択し、タイポグラフィをチューンし、塗りつぶし/グラデーション、形状、幅、モーション、ホバー、ライト/ダークの動作を埋めます。 保存する前にデスクトップと電話をプレビューします。
再オーダー可能なブロックから各ページを作成します。すべてのブロックには、プレミアムデザインバリエーションがあります。そのコンテンツが真実になるまで、統計、チーム、賞品、引用などのクレーム作成ブロックを保ちましょう。
タイトル、スラグ、ヒーローを設定し、SEO注文したブロック;下書き時にプレビューし、公開します。カート、チェックアウト、アカウントやポリシーなどの予約されたストアのルートは再利用できません。
少なくとも1つのブロックでモーダルページを作成します。 プレミアムデザイン、センター/左右/右/下位配置、ロード/遅延/出口/クリックトリガー、背景色、運動、幅、クーポン、および一対視動作を選択します。 テストクローズ、キーボードと携帯電話のレイアウト。
ページ、製品、コレクション、ポリシー、アカウント/ヘルプ/カートのアクション、ライブモダまたは安全な外部へのリンクURLs.ヘッダー項目は1つのドロップダウン/メガメンウのレベルを支えます。
クライアントチャットの販売を有効にし、顧客が購入する場所を選択します。アシスタントは、カタログを検索し、権限のある引用符のサーバーに尋ねます。サーバーではなく、モデルが署名された注文カードを作成します。確認は、Web上のそのカードやソーシャルチャネルに関する検証済みの相互作用を介してのみ行われます。
WhatsApp, メッセンジャー,Instagram, Telegram、LINE、SMSおよびXはプロバイダによって検証されたチャネルのアカウントをチャンネルIDとして使用します。メールはレシートのためにまだ収集されます。コネクターの発注は署名された普遍的な契約および商法的な合計を維持します;店主構成は契約を変えません。
ユニークな訪問者、製品ビュー、カートの追加、チェックアウト開始/放棄/補完、変換、確認された注文、通貨による収益、買収、デバイス、国/都市、トップ製品、回復およびデータ品質の警告。 変換は、明示的に公開ストアイベントをタグ付けします。 通貨合計は無声に結合されていません。 ダッシュとは、選択した範囲が変換質問に答えることができないことを意味します - ゼロパーセントではありません。
ベアキーを使って commerce.read; analytics.read また、分析スナップショットを付与します。 重要な境界ワークスペースは権限があります。
{ "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 } }ストアフロントは、パブリックセーフな構成を返すURL, メニューとスターターレビュー状態. ストアフロントカタログは、すべてのテーマを返します, ページのデザイン, ブロックタイプ, blockコンポジションとプレミアムプロモーションシェルので、リモートビルダーは選択肢をハードコードしません. ページリストは、カスタムページやプレミアムモジュアルを返します. アナリティクスは、顧客アイデンティティなしで集計を返します. Readiness Returns actionable launch checks. OpenAPIとPostmanは、これらの同じ契約を使用します.
リードは、購入やサポートの意図を示す訪問者または顧客です。 OpsIQ は自動的に行動に基づいてリードを検出します: 価格設定ページ訪問、リターンアクセス、チャットインタラクション、チェックアウトが開始される、および高いエンゲージメント。 フォローアップを優先し、CRMパイプラインをフィードするために、リードページを使用します。
ご利用の料金やプランページをご覧になるお客様は、購入を検討されている方に積極的にご案内いたします。
複数回帰ってきた方は、まだ変換されていない。
チャットを開始した方は、事前に購入または後購入をお願いすることも可能です。
チェックアウトページにアクセスする方、購入完了は行いません。
フォーム、デモ依頼、またはサインアップフォームを送信して送信する訪問者。
長いセッション期間で多くのページを閲覧する方は、深く研究しています。
任意のリードをクリックして、フルプロファイルを確認します。
名前、電子メール、知られている場合の会社。匿名リードショー IP そして場所。
このページのフロー、期間、ソースのすべてのセッション。
訪問したページごとに、リクシデンスで注文。
彼らがあなたに見つけた方法:有機、支払われた、社会的、紹介、直接。
A. は、0-100 行動の強度、レジデンシー、およびページの意図に基づいてスコア。
このリードが連絡先や取引としてCRMに追加されているかどうか.
今後何をすべきかについてのAI-generated提案(例:「来訪価格」) 3時 · 積極的なアウトリーチを検討して下さい。
上記スコアでリードします。 80 取得 "高い値"バッジ. これらは、あなたの最もホットな見通しです. アウトリーチのためにそれらを優先します, 積極的なチャット, またはCRMパイプラインエントリ.
これは、高意のリードです。ステップ:()1) 会社や役割情報について、リード詳細を確認します。 (2)特定のニーズと異議のためのチャットのトランスクリプトを確認します。 (3) 収集された情報でCRMの取引を作成します。 (4)営業チームメンバーのフォローアップタスクを割り当てます。(5) 価格設定ページに戻ると、プロアクティブなチャットルールはパーソナライズされたメッセージをトリガーできます。
オプション:(1) 高いインテントページ上の電子メールに交換する割引またはリソースのダウンロードを提供する積極的なルールを作成します。 (2) 匿名訪問者が会話を開始したときにチャットウィジェットを使用して電子メールを尋ねます。 (3) ログイン/サインアップページにIDトークンを追加して、自動的に訪問者が識別されるようにします。
スコアは、訪問の待ち時間(上昇 = 高)、訪問回数(さらに = 高い)、ページビュー(優先/チェックアウト=高)、セッション期間(長い=高い)、チャットインタラクション(エンゲージメント = 高くなります)、および訪問回数 (複数のセッション = 高額)を考慮します。
はい。CRM設定では、特定のキーワード、イベント、ソース、またはページパターンに基づいてスコアを上げるリードスコアルールを追加できます。
OpsIQ は、顧客の真理をキャプチャし、データをクリーンアップする完全なAIファーストCRMを出荷します, スコアリード, コーチの取引, 予測収益, そして、機能, ウェブサイトのインテリジェンスと, サポート, チケット, 製品や支払いを1ライブグラフとして. すべてのAIアクションが供給されます, 説明可能, リバーシブルかつ承認制御.
あなたの毎日のホーム画面:収益のパルス、AIが発見したもの、それが何をしたのか、承認キュー、次の移動、エージェントの健康とROI。
CRMの人々と企業. 探します, フィルター, スコア, プロフィールを管理する.
ドラッグ&ドロップステージ、確率を勝ち取る、AIコーチングでビジュアル・ディールボード。
板位予測:自信の間隔および正確さの追跡と、約束された、本当らしい最もよい場合。
顧客が常駐する場所:リスク、拡張の準備、更新の期限、または急いで。
普通の英語でCRMの設定を記述します。 OpsIQ は、リバーシブルな計画を生成し、承認にそれを適用します。
自チェックページ:スキーマ、エージェント、ルート、AIアクション、ライブデータカウント。
AI の提案は承認キューに行きます。承認、編集、または拒否します。あなたの言うことなく何も起こりません。
AIが変化を示唆する時、現在の値と提案された値を示します。 人間に与えられたデータは、実証済みの保護を持っています。
ジャーナルにAIアクションが記録されます。ワンクリックで変更を解除できます。
あらゆるAIの推奨事項は、その推論と使用したデータソースを示しています。ブラックボックスはありません。
左のナビゲーションでAI CRMをクリックします。 コマンドセンターは、現在の状態を示しています。
スキーマ、エージェント、およびルートを確認するCRM Healthを開きます。
コネクターが有効である場合(Shopify, WHMCS、等)、接触は自動的に輸入されます。さもなければ、輸入ビア CSV または手動で作成します。
パイプラインに移動し、ステージ(例、リード、資格、提案、交渉、ウォン、ロスト)で最初のパイプラインを作成します。
連絡から取引を作成し、金額とステージを設定し、ディールコーチガイドをあなたに知らせます。
いいえ。CRMはオプションです。 OpsIQ は、CRMなしで追跡+サポート+ AIプラットフォームとして完全に機能します。 あなたが販売と顧客関係を管理する準備ができているとき有効にします。
はい。連絡先や取引を手動で作成できます。 コネクターは、プラットフォームデータ(注文、サブスクリプション、チケット)でCRMを強化しますが、必要ありません。
Trust Layer は、AI ができることを制御する安全システムです。Copilot モード (デフォルト): AI は提案し、人間を承認します。Autopilotモード(オプトイン): AIは低リスク、リバーシブルな操作で自動的に動作します。
コマンドセンターは毎日簡単なものです。午前中から開いて、何が注目すべきか、そして次に何をするかを調べます。
パイプライン値、取引は勝ち/失われたり、新しいリード、アクティブな取引、および収益の傾向を、現在の状態のスナップショットに引き出す。
AIが発見したインサイト:取引、リスク管理、新しい機会、データ品質の問題、市場シグナルの安定化
アクションは、AIが撮影した(オートパイロット)や提案(コピロット):ステージの進行、スコアの更新、コンタクトの強化、タスク作成。
決定を待ち受けるAI提案のキュー。それぞれが提案された行動、推論、証拠を示しています。承認、編集、または拒否します。
人工知能のランキング一覧 10 今日を行うための最も重要なこと:ホット取引をフォローアップし、リスクアカウントをチェックし、新しいリードを研究するなど。
AIエージェントの健全性:キャプチャ、データスチュワード、ディールインテリジェンス、ディーアルコーチ、SDR、保持。グリーン = 実行、アンバー=注目、赤=エラーを必要とします。
ROIトラッキング:AIの影響を受ける取引、時間を節約した取引、予測の正確さ、および手動CRM作業と比較して。
パイプラインの健康と収益の傾向をチェックしてください。 今月追跡していますか?
各AI提案を見直し、安全行動の承認、必要な編集、悪い提案を拒否します。
AIインサイトを読んでください。リスクは何かありますか?新しい機会はありますか?
第一主義を優先してAIは、緊急性および潜在的な影響によってこれらをランク付けしました。
コマンド センターを開き、チェックします。1) 「何」OpsIQ 不在時にAIアクションをすべて表示します。()2)「Needs承認」は、レビューを待っている提案を示しています。 (3) 「何」OpsIQ 見つかった"緊急アイテムを強調表示します。 ()4) ダッシュボードの日付範囲を、トレンドを見るために不在期間に設定します。
CRMは、連絡先(人)、会社(組織化)、取引(収益機会)、タスク(フォローアップアクション)の4つのオブジェクトにあなたのビジネス関係を整理します。
あなたのCRMの人。 彼らは、顧客であるかもしれません, 見込み客, パートナー, またはリード. 連絡先は、電子メールを持っています, 名前, 会社, タグ, ライフサイクルステージ, そして、ホットネススコア.
検索バーを使用して、名前、電子メール、会社、またはタグで見つけることができます。 フィルタを使用してください: ライフサイクルステージ、リードスコア、ソース、国、最終アクティビティの日付、割り当てられた所有者。
個人情報、会社、取引、アクティビティ、チケット、チャット、ウェブサイト訪問、リードスコア、AIインサイトなど、詳細な情報を見るために連絡先をクリックします。
A. は、0-100 行動信号から計算されたスコア:ウェブサイトの訪問、メールエンゲージメント、チャットインタラクション、購入履歴、およびレジデンシー。 Higher = ホットター。
コンタクトは、メールドメインまたはマニュアルの割り当てによって企業にリンクされます。 1つの会社は多くの連絡先を持つことができます。
収益機会。ディールにはタイトル、金額、パイプライン、ステージ、勝ち確率、クローズデイト、割り当てられた所有者、および関連する連絡先/会社があります。
取引を獲得する割合のチャンス。履歴ウィンデータに基づいてAIで手動で設定するか、または計算します。重みのある予測を駆動します。
グリーン(健康)、アンバー(リスク)、または赤(スタルリング)。 活動の回復、段階の持続期間および関与信号に基づいて。
人に割り当てられたフォローアップアクション。タスクにはタイトル、期限、優先順位、タイプ(コール、メール、ミーティングなど)があり、連絡先/ディールをリンクします。
何かが注目される必要があることを検知したときに、AIはタスクを自動的に作成します。 固定された取引をフォローアップし、リスクのあるアカウントに応答して新しいリードを調べます。
コンタクトに移動します。 フィルターによる: リードスコア > 80, 国 = イギリス, 最後の活動 > 7昨日. リードスコア降下でソート. これらのあなたの最もホットな無視されたリードです, アウトリーチを優先します.
コンタクトプロファイルを開きます。 「取引を作成」をクリックします。 取引タイトル(例、「Acme Corp - Enterprise Plan」)、数量、パイプライン、ステージ(例「資格」)を入力します。 クローズした日付を設定し、自分自身に割り当てます。 ディールコーチはこの機会を追跡します。
パイプラインは、ステージを左右に動かすお得なビジュアルボードです。カードをドラッグ&ドロップして取引を進めます。各カードには、取引量、確率、健康状態を示します。
パイプラインは、列(ステージ)で配置されたカードとしてすべてのアクティブな取引を表示します。各カラムヘッダーには、そのステージの取引の合計値が表示されます。
カードを次のステージにドラッグします。 勝確率とカウントの更新即座に。 移動が失敗した場合(検証エラー)、カードは元の位置に戻ります。
グリーンバッジ = 健康(上昇活動、トラック)。アンバー=リスク(下降、注意が必要)。赤=は延期される(あまりにも長い活動はありません)。
カードをクリックして、連絡先、アクティビティ、ディールコーチの簡単な操作で取引詳細パネルを開きます。
パイプラインページの上部にある承認キューにAI提案が現れます。各提案では、AIが何をしたいのか、なぜ証拠を示すものです。次のことができます:
提案を承認します。このアクションはトラストレイヤーを介して実行され、ジャーナルに記録されます。
承認する前に提案を変更します。例えば、提案された段階を変えたり、量を調整したりするなどです。
提案書を解読。AIは拒絶から学び、将来的により良い提案をする。
勝利確率は、手動で設定するか、AIによって計算することができます。 AIがそれを計算するとき、それはあなた自身のクローズド取引(ウォンと失われた)で訓練されたモデルを使用します。 十分な履歴データを持っていない場合、AIはステージのデフォルト確率を使用しています。 確率は重み付き予測を駆動します: $10,000 取扱分野 30% 確率は寄与します $3,000「いいね」の予報に。
取引カードを「ウォン」ステージにドラッグします。OpsIQ 予定:()1) 契約をクローズドウォンとしてマークします。 (2) 予測を更新します。 ()3) 「ウォン」アクティビティをタイムラインに追加します。 (4) 設定した場合、webhook イベント(crm.deal.won)をトリガーします。5)接触のライフサイクルステージを「顧客」に更新して下さい。
パイプラインボード上の赤(ステーリング)バッジを探します。 これらの取引は、設定された回転しきい値よりも長い活動がなかった(CRMの設定>パイプラインで設定)。 各停車契約をクリックして、ディールコーチのリアクティブ化に対する推奨事項を参照してください。
はい。CRM設定>パイプラインに移動して、追加のパイプラインを作成します。 一般的なユースケース:新しいビジネスと更新のための別のパイプライン、または異なる製品/サービス用。
取引はクローズド・ロストとしてマークされます。損失の理由を求められます。この取引は、アクティブなボードから削除されますが、クローズド取引フィルタで見つけることができます。連絡先はCRMに残っています。
ディールコーチは、各取引を分析し、健康状態、リスクシグナル、キーの人々、資格チェックリスト、会議の準備、および次のアクションを提案します。すべてがソースされます。すべてのコーチはチケット、チャット、または各クレームがから来るアクティビティを示しています。
取引がリスクや、または固定される理由。特定の信号:段階の日、最後の接触日付、活動頻度、競合他社の言及、異議パターン。
に分類: 異議を提起, 競合の言及, 価格ディスカッション, サポートリスクインジケータ, 更新/拡張信号. 各シグナルは、そのソースへのリンク (チャットトランスクリプト, チケット, メール, 活動).
取引(チャンピオン)と誰がレジスト(ブロッキング)を手助けしているのか。インタラクション分析やコンタクトロールに基づいている。
MEDDICCまたはBANTチェックリスト(構成可能)は、資格基準を満たしているか、欠落しているかを示す。グレード:A, B, C, D, F.
スケジュールされたミーティングの前に、コーチは簡単な:議題、カバーへの重要なポイント、質問に対する質問、対処のリスク、および準備のための資料を生成します。
現行の取引状態と最近のやり取りに基づいて、次のメッセージやスクリプトを呼び出します。
コーチがソースへのリンクを出すことを主張する:チケット番号、チャットのトランスクリプトID、アクティビティ日、またはウェブサイト訪問。
ディールコーチセクションに任意の取引を開き、スクロールします。健康状態とキー信号をお読みください。
資格チェックリストをチェックしてください。 「経済買手」が欠落している場合は、予算の所有者を特定し、関与する計画を立てます。
コーチは、次のアクションを具体的な提案します。タスクを作成したり、メールの草案作成やミーティングのスケジュール設定、承認キューを介してすべてのルーティングを行えます。
取引を開き、会議プレップセクションをお読みください。 これは以下を示しています: (1) 最近のインタラクションに基づいて重要なポイント。(2) 先週のチャットで発生したオブジェクト。(3)サポートチケットに記載されたコンピニター。(4) タイムラインについての質問。(5) 積極的に対処するためのリスク要因。集中的、証拠ベースの議題を作成するためにこの簡単な方法を使用してください。
取引をクリックし、ディールコーチの健康説明をお読みください。 「この取引は提案段階にある」と言うかもしれません 22 日(予定): 14)。最後の接触はありました 11 昨日。第一次連絡先は、データ移行の懸念に関するサポートチケットを開きます5昨日 (ticket #T-)892)。提案:マイグレーションの心配に対処し、フォローアップコールをスケジュールします。今すぐあなたは正確に何を修正するかを知っている。
防御範囲、取引レベルの変更説明、および精度の追跡で基板グレード予測することで、数値を証明し説明することができます。
お得な情報 80% またはより高い勝利確率。 これらは、あなたの最も可能性が高い勝ちです。 これは、予想される最小限の収益である必要があります。
あらゆるオープン取引は、AI-calculated win確率で重み付けられます。これは、あなたが閉じるものの最も現実的な予測です。
完全価値で取引を開く。これは、すべてが完全に(それはまれにありません)行く場合は最大の収益です。
サインイン 80% 現実的な範囲を示す確率帯。例:「間近でる可能性が高い」$45,000 そして、$72,000 この四半期。
予報には、週単位の週単位の変更アトリビューションが含まれます。予測が低下した場合 $15,000, レポートは、変更を引き起こした取引を正確に説明: 「次の四半期にスリップしたAの処理(Deal A)」$8,000), Bを失いたディール (Deal B Lost)$5,000)、Dal C は値で減りました($2,000)."
平均絶対パーセントのエラー:あなたの予測が歴史的にどれだけ離れたか。より低い方が良いです。 MAPE of 15% あなたの予測は、通常、内部にあることを意味します 15% 実際の結果。
確率が実際の結果にどのようにマッチするかを測定するブリーダースコア。70% 確率は実際に勝ちます 70% 時間の口径測定はよいです。
OpsIQ 週ごとに予測のスナップショットをキャプチャします(cron)。 時間をかけて、予報精度が向上する方法を見ることができます。
各段階から次の各ステージへ何の取引が進むか。もし 80% 認定から提案までを渡すだけ 20% 提案から交渉まで行くと、あなたの提案は仕事を必要とするかもしれません。
どのリードソースが最も勝つか。高ウィンレートのソースにもっと投資します。
各販売チームメンバーが実行する方法:取引は、パイプライン値、平均取引サイズ、勝率を獲得します。
サンドバッギング(非現実的に低確率)、過小評価(非実動高)、およびコミットされたリスク(高確率取引)。
予測ページを開き、「変更内容」をチェックします。レポートは「アメ株式会社取引(Acme Corp.)」です。$15,000) 選ばれる競争相手、ロストに移りました。ベータ株式会社の取引($8,000)次の四半期にプッシュされたクローズ日付。 Gamma LLC(Gamma)の新しい取引 $3,000)今週追加。」ネット変更は -$20,000 + $3,000 = -$17,000, $180Kから$ 163Kに低下を説明する (残りの$ 8Kは、他の取引の確率調整によって説明).
検査エージェントは、潜在的な顧客を見つけ、研究するのに役立ちます。あなたの理想的な顧客を記述し、ターゲット企業を追加し、AIの研究、スコア、および最初のタッチアウトリーチを提出してください。
CRM設定> 客観的. あなたの理想的な顧客プロファイルを記述 (ICP): ターゲット業界, 企業規模, 仕事のタイトル, 地理的な焦点, 製品マッチ条件, そして、最小フィットスコア. 例: "B2B SaaS企業 50-_500 米国/イギリスで従業員, 開発者ツールの販売や成長の主任連絡先として」
リサーチしたい企業ドメインや名前を入力します。また、AIがICPに基づいて会社を提案することもできます。
人工知能は、サイズ、業界、技術スタック、最近のニュース、および説明と適合スコアの利用可能なデータで各会社を豊かにします。
適格な企業にとって、AIはパーソナライズされたファーストタッチメッセージをドラフトします。キューにレビューして承認します。
各見込み客が取得する0-100 5つの要因に基づく適合スコア:
会社の理想的な顧客プロファイル(産業、サイズ、場所)と一致させる方法
製品の現在必要がわかる証拠はありますか? 求人投稿、技術変更、競合他社の苦情。
企業規模、資金調達段階、収益指標は予算の可用性を提案します。
業界やテクノロジーに基づいて、お客様の製品がビジネスにどのように関連しているか
お客様が、この顧客(タイムゾーン、言語、複雑さ)を効果的に提供するかどうか。
追加する acme.com 見込み客リストへ。AIは戻り値:フィットスコア 78/100 (よい適合)。 理由: B2B SaaS、120 従業員、米国を拠点とする最近販売(緊急信号)のVPを採用し、競合他社X(製品マッチ)を使用します。 シグナルを購入する:あなたの価格設定ページを2回先月(Webサイトトラッキングから)訪問しました。 最高の連絡先: [email protected] (売上のVP). 抜粋オープナーは、最近の雇用と価格設定ページ訪問を参照します。.
配列は複数のステップフォローアップを自動化します。メール、待ち時間、タスク、コール、および初期送信承認後自動的に実行されるWebhookの手順のミックスです。
手順を定義する:メール、待機3日, メール, 待機5日、タスク(返信がない場合)、電子メール。 各メールステップはカスタマイズできるテンプレートを持っています。
配列に連絡先を追加。AIは、見込み客の登録を提案することもあります。
スケジュール時に自動的に実行されます。連絡先がどの時点でも返信する場合、シーケンスは自動的に一時停止します。
開口率、応答速度、変換率、およびステップごとの退会を参照してください。このを使用して、あなたのシーケンスを最適化します。
回答が返信されると、AIは応答を分類します。
興味をそそそろ、話したい。 シーケンスポーズ、フォローアップのために作成されたタスク。
懸念が残っているが拒否されていない。 シーケンスは一時停止し、異議の詳細はタスクを作成しました。
受信メッセージの停止をしたい。連絡先は永久に抑制されます。
興味があるが、タイミングは間違っています。 シーケンスポーズ、タスクをスヌーズする。
適切な連絡先ではありません。 シーケンスは停止し、レビューのためにフラグを立てる連絡をします。
対応質問、販売の応答ではなく。 シーケンスポーズ、チケット作成。
退会リクエストはすぐに表彰され、すべての将来のシーケンスから連絡先が抑制されます。
ワークスペースレベルの毎日の制限(デフォルト: 1,000 メール)。 大量のスパムフィルタをトリガーする送信を防ぎます。
マックス11日1回の連絡で、圧倒的な個人を防止します。
日頃のキャップを上回る工程は翌日に延期されます。それらは決して落としたり、スキップしたりしません。
順序は自動的に一時停止します。サポートは、アウトリーチを優先的に受けます。サポートの問題が解決された後に、シーケンスは手動で再開できます。
直接シーケンス内ではなく、異なるメッセージングで2つのシーケンスの生成と結果を比較することができます。
成長エンジンを保持するCRMの1ページ:収益を回復 (MRR / ARR), 製品カタログ, リードキャプチャフォーム, 予約リンクとルーティング. ここですべてがCRMにストレートを書きます, そうフォーム送信や予約されたコールは、歴史との接触であります, スプレッドシートでは行いません.
MRR と ARR は、実際の請求元帳から投影しました。サブスクリプションは、1 つのプラットフォームあたりの支払いからグループ化され、課金サイクルは決済ギャップから差し引かれており、支払いが 1.5 回を超える場合、サブスクリプションの中断が発生します。顧客は、ledger がメールを運ぶときに自動的に CRM 連絡先にリンクします。
あなたが販売するものの真実の1つのソース。引用は、カタログから名前とリストの価格を引き、受け入れられた引用は製品によって収益に巻き上げます。 製品アーカイブ、彼らは削除しません。
各フォームはホストページと、自分のサイトのためのiframe埋め込みコードを取得します。 提出物は連絡先になり、所有者は通知を受け、ルーティングルールはリードを割り当てます。
リンクを共有し、見込み客は無料スロットを選ぶようにしましょう。 スロットは主催者の労働時間、タイムゾーンおよび既存の会議を尊重します。 予約はミーティングを作成したり、見込み顧客をメール送信したり、主催者に通知します。
テリトリールールは、まずフィールドルール(国やソースなどのフィールドを一致)を実行し、そのレッププールを渡るラウンドロビン。それは、契約のステータスが何であるかにかかわらず、連絡先とDEALSをルーティングします:勝ち取りはまだ、手数料、アカウント責任およびフォローアップのための所有者を必要としています。そして所有者またはチーム可視モードでは、所有されていないレコードは誰にも見えないが、マネージャーです。自動化によって作成されるレコード(コネクタ販売、チャット、インポート)は対話型ではなく、所有者が再署名されていない限り、所有者は、所有者に残っていないことを証明しています。
CRMに行く, その後、成長ツール, それからリードキャプチャフォームセクション.
名前とコンマ区切りフィールドリスト、例えば名前、電子メール、電話、メッセージを入力します。 メールは常に必要です。
ホストされているリンクをコピーして、どこにでも共有するか、埋め込みコードをコピーし、ウェブサイトの任意のページに貼り付けます。
提出されたものは、フォームのCRM連絡先です。送信活動、所有者通知、自動ルーティング。
隠されているハニポットフィールドは、ボットの投稿をサイレントに破棄します。
1時間あたりの10件の投稿 IP フォームや予約を経由してアドレス。
フォームを提出することは、マーケティングの同意を付与しません。明示的な同意チェックボックスのみが行われます。
スロットは予約の瞬間に新鮮な空室状況をチェックアウトするために再有効です。
同じ商取引のレジャーから、セールスページの使用は請求コネクタによって供給されます。新しいプラットフォームを接続した後に課金から再同期を使用してください。
はい。すべてのフォームには、スタンドアローンを操作するアドレスにホストされているページがあり、 JavaScript_ なしでも保存できます。
コネクタは、最大20ゲートウェイです。実際に使用するSMSおよびWhatsAppプロバイダを接続し、デフォルトで1つマークし、連絡先をテキストにするときにそれらのいずれかを選択します。 ゲートウェイが連絡される前に、同意したCRMによってチェックされます。
コネクタページで、メッセージングハブ(SMSとWhatsApp)を開き、有効にします。
同じ引き出し、またはCRM成長ツールで, ドロップダウンからゲートウェイを選択 (Twilio, Vonage, Termii, Meta WhatsAppクラウド, Infobipなど), その API 資格情報と接続。同じゲートウェイを2回異なるアカウントで追加できます。
各プロバイダのエントリーは、独自のwebhookを示しています URL コピーボタンを使って。ゲートウェイのデリバリーレポートとインバウンドメッセージの設定に貼り付け、配送状況を把握し、返送 OpsIQ.
コンタクトを開き、SMSまたはWhatsAppボタンを使用します。複数のプロバイダがチャネルをサポートしている場合は、セレクタは選択できます。それ以外の場合はデフォルトで使用されます。
不明な同意は承諾しません。 SMSの同意が明示的に付与されていない限り、送信を拒否します。WhatsAppは同じ同意を乗ります。
どのチャネルでも、他に何が設定されているかに関係なく、do-not-contactフラグブロックを解除します。
抑制リストの連絡先は、メッセージングされることはありません。
ブロックされた送信は、なぜ正確に教えてくれるので、推測の代わりにデータを修正できます。
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":"..."}.
配信レポートは、提供者メッセージIDを配信またはバウンスとして運ぶアウトリーチのレジャー行をスタンピングします。インバウンド メッセージは、ワークスペース内の電話番号による連絡先と一致し、メッセージを受信した活動として土地を埋め、応答された会話をマークします。
間違ったトークンが 403_ に応答します。未知のペイロードはカウントされ、無視されます。決して致命的ではありません。そのため、誤ったゲートウェイはエンドポイントを破ることはできません。
Twilio、Vonage、Plivo、MessageBird、Sinch、Insponbip、Telnyx、ClickSend、Termii、アフリカの話、バルクSMS、Textlocal、Meta WhatsAppクラウド、360dialog、SMSAPI、Gupshup、Kaleyra、D7ネットワーク、Hubtel、およびその他のあらゆるもののためのカスタムHTTPS Webhook。
認証は、コネクターの設定で暗号化され、ブラウザに戻ってエコーされていない。空白の秘密でエントリを編集すると、保存されたものを保持します。
はい、確認が必要な登録アクションから同一の同意ゲートを実行できます。AIは接続されたプロバイダをリストして利用可能なものを説明することもできます。
ライフサイクル管理は、既存の収益を保護することができます。各アカウントは、中途リスクスコア、健康スコア、拡張スコア、および推奨成功の Playbook を取得します。
あらゆるアカウントが誰であるかを示すビジュアルボード:リード、プロスペクト、オポチュニティ、顧客、拡張、更新、リスクの回復、中絶。
リスクの高いアカウントは、高中核リスクを強調しています。各アカウントには、トップドライバー(スパイクのサポート、非アクティブ化、支払いの失敗)と推奨保存再生が表示されます。
購入の信頼性を示すアカウント: 高い使用量、機能要求、計画のお問い合わせ。
更新予定日のアカウント。リスクレベルと収益値でソートします。
チュルンリスクは、複数の信号からまとめて溶かされます。
健康、非アクティブ、最近の損失、降順的な関与をディールします。
チケットのカウント、チケットのボリュームのスパイク、ネガティブな感情、エスカレーションを開きます。
ログイン頻度、機能使用量、ページの訪問、API コール。
支払いの失敗、請求書を上回る、要求を下げる、キャンセルページ訪問。
リスクアカウント:積極的にリーチし、必要に応じて、懸念に対処する、サポートを提供し、エスカレーションします。
今後の更新:満足度、レビュー使用量、現在の値を確認し、必要に応じてインセンティブを提供します。
成長を続けるアカウント:アップグレードオプションを提示し、成功事例を共有し、ROIを実証します。
運用管理:トレーニング、ベストプラクティスの共有、使用していない機能を有効にします。
ライフサイクルボードは、このアカウントをドライバーと「At Risk」としてフラグ付けします。14 最終ログイン以降は、スパイクをサポート()3x 通常のチケットのボリューム)。推奨プレイ:何が起こっているかを理解するための積極的なアウトリーチ呼び出し。製品の問題はありますか?彼らは競争相手を評価するのですか?早期介入はアカウントを保存することができます。
データスチュワードエージェントは、データの品質問題を自動で確認し修正します。重複、欠落したフィールド、矛盾、および記録の記録を固定します。
同一人物の複数のレコード(例、[email protected] そして、[email protected]). スチュワードはそれらをマージする提案します。
ドメインなしでメール、取引なしの問い合わせ。利用可能なソースからの充填を提案します。
関連する連絡先、会社なしで連絡を取らない取引。メールドメインとコンテキストに基づいてリンクする提案。
「Won」ステージでの対応 20% 不利、不一致の企業と「顧客」をマークした連絡先。
ライフサイクルステージが自分の活動に一致しない、あまりにも長いまたは連絡先の同じ段階にあるディール。
CRMに移動し、データスチュワードセクションを見つけます (またはCRMの健康から開きます).
緑の項目は安全です:明確な重複、明らかな欠落データ。これらを一括承認します。
アンバーアイテムは、あなたの判断を必要とします: わずかな違いで重複の可能性, 提案されたステージの変更, 会社リンク. 各1を見直します.
ステワードはマージを提案します。記録をより多くの活動に保ち、他のレコードの取引と活動を結合します。提案を検討し、必要に応じて生存表示名を調整し、承認します。両方のレコードの履歴が合併された連絡先に保存されます。
私のCRMを構築することで、あなたはプレーン英語であなたのCRMのセットアップを記述することができます. OpsIQ _は検証された生成, リバーシブルプランと承認にそれを適用します. いいえコーディングはありません, 手動構成はクリックしません.
CRMの設定のプレーン・イングリッシュの説明を入力します。例:「更新パイプラインをステージで作成します: アップコンピッキング、コンタクト、ネゴティエート、リニュー、ロスト。スコアは、価格が2回表示すると上位になります」
OpsIQ は、パイプライン、ステージ、ステージの確率、スコアリングルール、ライフサイクル規則など、作成する内容のプレビューを表示します。各項目を見直します。
プランを実行するには、[適用] をクリックします。各変更は、ワンクリックで禁止できるバンドとして記録されます。
何かが正しくない場合は、Undoをクリックしてバンドル全体を反転します。 あなたのCRMは以前の状態に戻ります。
指定されたパイプラインをカスタムステージ、デフォルト確率、および回転しきい値で作成します。
行動に基づくリードスコアを上げる:「価格設定時により高いスコア」、キャリアページにアクセスしたときに下がるスコア。
自動的にライフサイクルステージを進めます: 「移動する」SQL リクエストのデモを「取引が勝ち取られたとき、顧客へ移動」
テキスト、番号、日付、選択、チェックボックス、または会社に連絡するフィールドを追加します。URL、電子メール。
MEDDICCまたはBANTチェックリストを、ディールコーチの成績から定義します。
タイプ: 「更新パイプラインを作成する」。 ステージ: 90 デイズアウト (Days Out)10%), 60 デイズアウト (Days Out)25%)、連絡される()40%), ネゴタイト (Negotiating)60%)、更新される()100%), 中出し (0%). 腐敗したしきい値を設定する 14 日。OpsIQ プランを生成し、それを見直して、[適用]をクリックします。パイプラインはすぐにあなたのパイプラインページに表示されます。
ビルダーは、検証方法を知っているアクションのみを生成します。もしその機能以外の何かを求めるなら(例えば、「カスタム API と統合する」など)、リクエストを拒否し、代わりに何ができるかを説明します。
はい。すべてのCRMアクションを構築することは、リバーシブルなバンドルとしてキャプチャされます。CRM Health > Change History に移動して、すべてのバンドルを表示し、それらのいずれかをやり直します。
手動CRMの設定は、入力をクリックすることを好むチーム. 私のCRMを構築するためのすべての設定は、伝統的なフォームフィールドとして利用可能です.
パイプラインとステージを作成、名前変更、再配置、削除します。 ステージごとにデフォルトのウィン確率を設定します。 ルーティングのしきい値を設定(契約前に活動なしでは「スタルリング」マークされます)。
取引、連絡先、または企業にフィールドを追加します。 フィールドタイプ:テキスト、番号、日付、選択(定義済みのオプションでドロップダウン)、チェックボックス、URL、電子メール。カスタムフィールドはオブジェクトプロファイルとフィルタに表示されます。
ディールコーチが取引を評価するために使用しているチェックリストを定義します。MEDDICC、BANT、またはカスタム条件のセットを選択します。各項目は必須かオプションをマークすることができます。
自動段階遷移を定義する:接触が条件を満たしたとき(値下げ、フォームを提出し、購入を行います)、そのライフサイクルステージは自動的に進行します。
行動に基づいてリードスコアをブーストまたは減らします。例:「表示価格設定ページ = +15 ポイント,「白書のダウンロード = +10 ポイント,「訪問されたキャリアページ = -5ポイント。 最小数を設定できます(例:「最低表示価格設定」) 2タイム。
コンタクト、取引、または企業向けの名前付き filter+sort の組み合わせを作成します。チームでビューを共有します。オブジェクトタイプごとにデフォルトビューを設定します。
CRM設定に移動 > リードスキャリングルール. [ルールを追加]をクリックします。. セット: イベント = "ページビュー", URL 含まれる = "/pricing", 最小値 =2, スコアブースト = +20. 保存します。スコアラーが走る次回は、このルールに合った連絡先が+になります 20 彼らのリードスコアに。
CRM Healthは、あなたのCRMが正しく設定され、スムーズに実行されていることを確認する自己診断ページです.
データベーステーブルが存在し、正しい列を持っています。 移行が見逃された場合、CRM Healthはそれをフラグします。
すべてのCRMエージェント(キャプチャ、データスチュワード、ディールインテリジェンスなど)が登録され、健康です。グリーン = 実行中、アンバー = 注目が必要です。赤=エラー。
CRM API ルートと AJAX エンドポイントが登録・呼び出し可能です。
CRMアクションカタログは、アクションレジストリに登録されています. アクションが欠落している場合, CRM健康自己回復それらを再登録することにより、.
コンタクト、企業、取引、タスク、アクティビティ、イベントの合計。インポートと継続的なデータキャプチャの確認に便利です。
初めてのCRMセットアップの後, CRM健康を開き、すべてのチェックが緑色であることを確認します. 任意のアンバーや赤の場合, 診断の説明のための項目をクリックし、修正を提案しました.
初期設定後、メジャーアップデートの後、CRMの動作が間違っているたびにチェックしてください。 CRM Healthは、ページを開くだけで多くの問題(アクション登録を欠落しているような)を自己回復します。
CRMは、完全な公開RESTを公開します API 手動エクスポートなしで任意のスタックに収まるので、アウトバウンドのwebhooks。
API キー (Authorization: Bearer opq_...) とスコープ crm.read または crm。write. /api/v1.php アクションとsite_keyで。
crm. contacts. list(search + filter), crm。contacts。detail (by ID), Crm. Contacts. upsert(create or update), crm. contact. save.
crm. deals. list、crm. dals. detail、cRM. deals. create、crum. dears. update、clpm. deers. advance(Trust Layerを介してすべて)。
crm. activities. list(連絡先/ディールのタイムライン)、crm.活動。レコード(新しいアクティビティをログに記録します)。
crm. events. list(after_idカーソルで変更可能な変更フィード)、crm. avents. catalog(リスト利用可能なイベントタイプ)。
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
}連絡が作成または更新されると、この連絡先は購読するイベントです。別のイベントはありません。
接触が別のライフサイクルステージに移動したときに発射される。
連絡状況が変更されたときには、火をつけます。
変換が接触に対して記録されると、燃焼します。
連絡にタグを追加したときに、
連絡がプライバシー要求のために消去されると、その連絡先は消火します。
取引が作成されると、そのトランザクションが消火されます。
異なるステージに取引が移動したときに火をつけます。
契約が終了した時点で消火。
契約が失われたとき、取引は閉鎖されます。
会社の制作時に火をつけて
新規タスクが作成されると、(マニュアルやAI生成)
連絡が届かないメールに返信する際、その恐れがあります。
アウトリーチメールがバウンスしたときに、火災が発生します。
webhooks.events.list インストール時に設定された権限を付与するために、各イベントのペイロードで行います。デリバリーコード自体から生成されるため、実際に到着したものとは決して不一致できません。フルリストもWebhooksセクションに表示されます。すべてのWebhookイベントは、HMAC署名と故障時に取得されます。 購読する URL 設定 > Webhooks, または poll crm.events.list で 耐久性のある変更フィード。
Webhook 加入者の設定opsiq.contact.upsert。 Google Apps Script Web アプリまたは Zapier webhook に表示するURL. ペイロードには、連絡先名、電子メール、会社、リードスコア、およびソースが含まれます。 あなたのスクリプトは、各新しい連絡先のためのGoogleシートに行を追加します。
セグメントは、CRMビューのための再利用可能なコンタクトフィルタを保存します, アウトリーチ, プロモーションや他のオーディエンス-アウェアツール.
A ライブセグメント 使用するたびに、現在のデータから再計算します。 ピン留めスナップショット 承認後に、アウトリーチオーディエンスが変更されなければいけない場合に有用である現在のメンバーリストを凍結します。
選択 全て 条件が一致しなければならないとき あらゆる 1つの条件が十分であるとき。保存する前にライブカウントを見直して下さい。システムセグメントは、通常の編集から見えるが保護することができます。
リードスコアリングルールは、動作とプロファイル信号を一貫したスコアに変えるので、販売や自動化が使用できます。
AIルールビルダーは、平文の英語の指示を構造化された規則に変えることができます。 行動やキーワード、最小数、転がり窓、スコアの変更を確認する前に、すべての規則はまだ見直しるべきです。
正性および負の規則は共存することができます。 使用 ワークスペースをリスコアする マテリアルルールが変更されると、既存の連絡先は新しいモデルの下で評価されます。 スコアはセグメント、ルーティング、見込み客およびワークフロー条件を満たすことができます。
リーダーボードは、クォータの達成、獲得した収益、コミッションおよびオープンパイプラインを使用して、選択した月を比較します。
クォータの達成は、各代表者が現在の正式な所有者を持っているときだけ意味があります, 金額, 通貨とクローズ状態. 唯一の品質措置としてではなく、コーチングや認識のためのリーダーボードを使用してください。, 取引の健康と組み合わせる, 活動および予測精度.
取引承認には、管理者の署名が必要で、高値取引がマークされる前にマークされます。
ポリシーを有効にし、レベルを設定1レベルとレベル2しきい値。 0 tier を無効にします。非マニジャーが閾値上または上の取引を獲得しようとすると、OpsIQ ステージを静かに変えるのではなく、承認リクエストを作成します。
管理者および全管理者はポリシーによってブロックされていません。すべての決定は、監査性のための要求者、承認者、時間と理由を保持する必要があります。
ライフサイクルルールは、現在のデータが保存された状態に一致するときにステージ間の連絡先を自動的に移動します。
各規則には、ソースステージ、宛先ステージ、有効フラグ、優先順位およびセグメントスタイルのフィルタがあります。スケジュールされたライフサイクルジョブは、連絡先の最初の試合後により高い優先順位を評価し、停止します。
ルールは相互に理解できるはずです。同じ実行中に、反対方向の連絡先を移動することができる2つのアクティブな規則を避けてください。それをアクティブにする前に、セグメントに対してフィルタをテストします。
ワークスペース活動ストリームは、顧客と運用イベントを組み合わせることで、各モジュールの開口部なしで何が起きているのかをチームで調べることができます。
イベントタイプ、日付、連絡先または顧客状態(顧客の支払いを含む)によるフィルタリング。フィードは記録されたアクティビティの読み取りモデルです。ソースチケット、会話、取引、またはコネクタレコードを交換しません。 機密アクションを取る前にリンクされたレコードを開きます。
ワークフローはイベントに反応し、注文した一連のアクションを実行します。これには、cronが再開する遅延手順が含まれます。
トリガーを選択し、順番にステップを追加して有効化することでワークフローを作成します。 遅延は保存され、ブラウザのリクエストによって保持されません。 統合された cron は、期限が切れるワークフローが実行されます。
組み込みの開始テンプレートには、サインアップ後の歓迎、ポスト購入感謝とデモの確認が含まれます。テンプレートをクローンし、受信者/コンテンツを交換してから、広範な活性化の前に制御されたレコードでテストします。
意図しないべき行動を設計します。 送金は、重複したお金の取り込みリクエストを送信したり、重複するレコードを作成したりしてはいけません。
チケットは正式なサポートチャネルです。 彼らは部門、優先順位、SLAターゲット、添付ファイル、内部メモ、および完全な会話スレッドを持っています。 チケットがから到着することができます OpsIQ 管理者、切符の形態/埋め込まれた、電子メールのingestion、チャットのエスカレーション、コネクターまたは API.
お客様がメール、チャットのエスカレーション、チケットの埋め込み、または管理者が作成するメッセージを送信します。チケットはユニークID(例:T-)を取得します 12345).
被写体と身体を読み取り、優先度(低/ノーマル/高/緊急)を割り当て、部門を提案し、感情を検出します。これはトリエージが有効になっている場合に自動的に起こります。
エージェントは、チケットを開き、コンテキスト(顧客プロファイル、コネクターからのプラットフォームデータ、前のチケット)を読み込み、応答を書きます。AIは回答書草案や送信前にエージェントの編集を行うことができます。
問題が解決すると、エージェントはチケットを閉じます。顧客は通知されます。顧客が終了した後に返信する場合、チケットは自動的に再オープンします。
チケットを別の部署(一般から請求まで)に移動します。初期のルーティングが間違っていたときに便利です。
特定のチームメンバーにチケットを割り当てます。割り当てられたエージェントは、「マイチケット」ビューのチケットが表示されます。
スタッフにのみ表示されるメモを書きます。使用:調査結果、返金理由、エンジニアリングの状況、以前の約束。内部ノートは顧客に表示されません。
同一の顧客から重複したチケットを組み合わせます。合併されたチケットの対象は[マージ]タグになります。両枚のチケットからのメッセージはすべて、生存するチケットに保存されます。
事前書き込みの応答テンプレートを入力します。変数は、{{customer_name}} そして、{{ticket_id}} 自動的に交換されます。
AI があなたの草案の応答を改善してみましょう: トーンを調整します。, 短縮/レンダー, 文法を修正します。. あなたは、送信する前に結果を確認.
低、ノーマル、高、または緊急に設定します。優先順位はSLAタイマーに影響し、注文をソートします。
顧客、解決されるか、または閉鎖で待っている開いたり、保留する置くこと。
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.
設定 > チケット > 部門で部署を作成します。 一般的な部門:一般、請求、テクニカル、セールス、虐待、オンボーディング。 各部門は異なる自動返信ルール、AI知識、チーム割り当てを持つことができます。
再利用可能な返信テンプレートをSettings > Ticket > Canned Responsesで作成します。 缶詰の応答には、次のものが含まれます:
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}}お客様が同じ質問を複数回送信する場合(メールとチャット、または2つの別々の電子メール)、重複をマージすることができます。チケットに移動し、マージをクリックして他のチケットを選択してマージします。生存するチケットは、両方のチケットからすべてのメッセージを取得します。合併されたチケットの対象は、[MERGED]タグが結合され、そのタグが統合されました。
接続されたプラットフォームは、マージに従っています。 チケットが接続されたプラットフォームにもなる場合()WHMCS, Zendesk、SaaSの顧客ポータル)、マージも起こります。プラットフォームはコピーをマージするので、マージンされたチケットの最初のメッセージと返信を表示し続けるチケットです。そのプラットフォームに決してなかったマージされたチケットは、保持されたプラットフォームのチケットにプライベートスタッフノートとして追加され、応答としてメールが送信されることはありません。プラットフォーム内で行われるマージ(例えば、たとえばプラットフォーム内で行われます) WHMCS)マージ OpsIQ 同じ方法でチケットを受け取ります。
非緊急の質問、機能要求、一般的なフィードバック。 ターゲット最初の応答: 24 営業時間
標準的なサポート質問。第一次応答を目標として下さい: 8営業時間
顧客のビジネスに影響を与える。第一次応答を目標として下さい: 4営業時間
サービスダウン、セキュリティインシデント、データ損失、請求エラー。 第一次応答をターゲットに: 1時間。
SLA のタイマーは、ステータスが「顧客を待ちます」と表示されたときにチケットを作成および一時停止したときに始まります。SLA ターゲットが見逃された場合、チケットはハイライトされ、オプションでエスカレーションされます。
決して。内部のノートは厳しくスタッフだけです。それらは顧客の切符ポータル、電子メール通知、またはあらゆる顧客表面で現れません。
チケットは自動的に再オープンし、アクティブなキューに戻る。チームは新しい返信の通知されます。
はい。ロックスレッドのオプションを使用して、顧客とAIの両方が新しい返信を追加するのを防ぐことができます。 解決された紛争やクローズド調査に役立ちます。
サポート操作の動作方法のコントロールルーム:エスカレーション・梯子、ビジネス・エイチカレンダー、強化されたステータスフロー、CSAT設定、およびエンタープライズ機能スイッチを備えたSLAポリシー。 チケットページ(オペレーションバーのService Studioボタン)から開きます。
新規チケットは、部門 + 優先順位が部門を打ち負かし、優先順位を打ち破り、デフォルトを打つ最も特定の活動方針から最初の返信と解像度の期限を取得します。 締め切りは、PendingまたはOn Holdに座っている間自動的に一時停止します。
一つの侵害アクションの代わりに、ポリシーは最大6つのステップを定義できます。例えば、割り当てを警告する 75% ウィンドウのアラートマネージャー、100%, 名前付きエージェントに再割り当て 150%. 各ステップは切符ごとの丁度始動します。
営業日が経つと、SLAクロックは作業時間にのみ焼くため、金曜日の夕方が土曜日に違反することはありません。 名前付きカレンダー(タイムゾーン、日、祝日)は、異なる地域でのチームのための個々のポリシーに接続することができます。
管理者がどのステータス変更を行なうか制限する、から/to行列は Zendesk スタイルのプリセットで作成できます。オートメーション、インバウンドメール、および顧客の開始されたチケットの返信は常に免除されますので、厳格な行列ではパイプラインをジャムすることはできません。 必要に応じて、終了前に承認済みサインオフが必要です。
エージェントは、チケット(しきい値、ポリシー例外)のリクエストオフに署名します。 名前付き承認者またはフル管理者はノートで決定します。 ユーザーは自分の要求を承認することはできません。 承認を差し引くと、受信トレイ上のバナーとして表されます。
関連する、重複、親/子供またはブロックとしてチケットをリンクします。分割された返信は新しいリンクされたチケット(メール送信なしでマージの逆)になります。アプリ内通知のチケットに従い、オプションでCCフォローアメールアドレスがオンバウンド応答になります。
リアルタイム受信トレイが有効になっていると、既存の通知ストリームを介してエージェントに新しいチケットや返信が表示されます。 チケットでは、チームメイトがすでに応答を書いているときに、他の誰が視聴して警告バナーを取得するかを確認します。 1クリックのクレームボタンは、自分自身にチケットを割り当てます。
ルーティングルールは、AIのトライアジシグナル(優先度、カテゴリ、送信およびエスカレーションリスク)と、ポータルリクエストフォームからタイプされたカスタムフィールドの値にマッチすることができます。これらの条件を使用して規則は、機能が有効になるまで、休止状態を維持します。
行列は、管理者行動のみを管理します。顧客主導の返信、電子メールの返信および自動化は意図的に免除されるため、厳格なポリシーは顧客にロックしたりパイプラインを解除することはできません。
いいえ。単一の侵害行為で保存されたポリシーは変更されずに作業します。 梯子は、ステップを定義するポリシーのみに1つのアクションを置き換えます。
オートリプライにより、AIが新しいチケットに自動的に応答させることができます。Escalationは、AIの特化したニーズを検知したときに別の部門へチケットを移動することができます。どちらもネイティブチケットとメール作成されたチケットで機能します。
新しいチケットは、任意のソースから作成されます(電子メール、チャット、ポータル、API).
OpsIQ 設定された遅延を待ちます(デフォルト: 2分). これは、ヒトのエージェントが最初に応答するチャンスを与えます。
遅延時に担当者が返信する場合、自動返信はキャンセルされます。そうでない場合は、AIは応答を生成します。
チケットを読み取り、ナレッジベース、コネクターのコンテキスト、顧客履歴を確認し、回答書を書いてください。応答は(または設定に応じてレビューのためのドラフトとしてキュー)送信されます。
部門がエスカレーションを受け取ることができるかを設定します(例えば、請求は一般からエスカレートすることができます。テクニカルは全般からエスケーラされることができます)。
オートリプライする前に、AIはチケットの意図を分類します。請求、技術的、払い戻し、虐待など
チケットのインテントがエスカレーション部門にマッチすると、チケットが移動されます。内部ノートでは理由を説明しています。
宛先部の知識とAI研修で回答が生成されます。
マスタースイッチ。AIの自動返信を有効にするためにオンにします。
どの部門が自動返信を受け取ることができます。請求を有効にする前に低リスク部(一般、販売)から始めて下さい。
AI が応答する前に待ち時間 (秒). デフォルト: 120 秒 (秒)2分)。置くこと0即時返信のため。
必要に応じて、営業時間と時間後に異なる遅延を設定できます。
人的代理人が最初に返信する場合、自動返信をキャンセルします。デフォルト: です。
チケットの意図に基づいて自動部門ルーティングを有効にします。
どの部門のチケットがエスカレーションされるか。
escalating(例えば、開いた、保留) 時の設定のステータスは?
エスカレーションの理由を説明する内部メモを追加するかどうか。
メールから作成されたチケット(メールボックスのポーリングまたはMX-pipedデリバリー経由)は、同じ自動返信とエスカレーションルールに従います。AI応答は、顧客に対する電子メール応答として送信されます。 電子メールドラフトは、設定されている場合にレビューのためのドラフドキューに移動します。
請求部門のオートリプライを有効にするだけ。請求書作成のために自動返信を開始し、包括的な課金知識でAIを訓練した後にのみ有効化することをお勧めし、徹底的にテスト.
回答が間違っていたと顧客が返信した場合、人的エージェントは介入すべきです。AIが間違った答えを出した理由を理解するためにAIの歴史を確認し、知識ベースやAIのトレーニングを更新して、再び起こっているのを防ぐことができます。
はい。 「自動送信」ではなく「Draft」に配送モードを設定します。 オートリプライドは、送信する前にヒューマンレビューのDraftsキューに表示されます。
チケットポータルが埋め込まれると、任意のウェブサイトにチケット管理インターフェイスを追加することができます。顧客は、自分のチケットを表示したり、新しいものを作成したり、返信したりできます。OpsIQ 管理者。
ページのdiv内のチケットポータルをレンダーします。ポータルはコンテナのフル幅を取ります。
パネルのチケットポータルを開く浮動ボタンを表示します。チャットウィジェットと同様に。
署名された身分証明書のトークンが必要です。お客様は、自分のチケットのみを参照してください。
<!-- 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>認証されたモードの場合、サーバーはサイトのシークレットでショートなトークンに署名します。このトークンは OpsIQ お客様が自分のチケットしか見られない人です。標準的なHS256 JWT:JWTライブラリが機能します。秘密はページに移動しません。
<?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 — 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 秒ごとに新しい返信を処理します。
お客様が、ワンクリックで自分のチケットを解決または再オープンすることができます。
チャット受信トレイは、チームがライブのカスタマー・会話を管理する場所です。 アクティブなチャット、割り当てられた会話、AI処理されたチャット、およびアーカイブされた履歴が表示されます。
進行中の会話。グリーンドット=顧客は、入力または最近アクティブです。
AIが応答する会話。 「Join」をクリックすることでいつでも取り消すことができます。
具体的にあなたに割り当てられた会話。
お客様がお越しの際には、その対応をお待ちいただく会話
完全な会話。キーワード、日付、顧客で検索可能。
AIから会話をやり取りするときは、次の3つのルールに従ってください。
お名前で紹介してください。「こんにちは、サポートチームからサラです」
会話を読んでみると、「注文状況について尋ねる」というメッセージが表示されます。
お客さまに次の事柄をお伝えください。「今は見つめ、数分間の回答を差し上げます。」
対話の一番上にAIを使って会話を切り替えます。AIがオンになっていると、AIは応答を生成します。オフにすると、人件名だけが返信できます。AIは、オフ時にも会話コンテキストを記憶しています。
設定の営業時間を設定します。営業時間外、AIは以下にできます:()1) 顧客への応答を続け、()2) 「ウェイト」メッセージを表示し、フォローアップ用のチケットを作成したり(3)チャットを完全に無効化し、チケットフォームが表示されます。サポートモデルに合った動作を選択します。
顧客の感情的な強度に一致しないでください。守備のない不満を認めてください。
回答前に、関連する情報を集める:注文の詳細、アカウントのステータス、前のチケット。
場合、その状況が払い戻し、法的脅威、虐待、またはセキュリティを伴う場合は、単独で処理しようとするよりも、シニアチームメンバーにエスカレートします。
はい。会話内で内部のメモを使用して、他のエージェントと通信します。 これらのノートは顧客に表示されません。
会話はアーカイブに移動します。 顧客が後で新しいメッセージを送ると、新しい会話が作成されます。
WhatsApp、Facebook Messenger、Instagram DM、Telegram、LINE を接続して、既にメッセージが同じ受信トレイに送られてきます。
接続されたチャネルは、顧客メッセージがチャット受信トレイで会話になります。AIアシスタントは、ウェブサイトのチャットと同じ知識と指示を使用して応答し、エージェントは引き継ぎすることができます。あなたのAIはチャンネルごとに設定する必要はありません。
ワンクリック。 コネクタを開く→Facebook Messenger & Instagram DMをクリックし、ページを管理するFacebookアカウントにサインインし、ページを選択します。 Instagramは、あなたのページがリンクされたInstagramのプロフェッショナルアカウントを持っているときにそれが付属しています。
プロバイダーが提供する場所ワンクリック:メッセージングハブコネクタを開き、WhatsAppを接続し、Metaのガイド付きサインアップに従ってWhatsAppビジネス番号を受け取りまたは作成します。それ以外の場合は、 20 ゲートウェイのいずれかから認証情報を貼り付けます。
2分。 メッセージ@BotFatherは、Telegramで送信/newbot,「ボット」で終わる名前とユーザー名を選択し、Telegramコネクターに与えるトークンを貼り付けます。OpsIQWebhookに登録する
Messaging を作成するAPIチャンネルをデベロッパ.line.biz, チャネルの秘密とアクセストークンを貼り付ける, その後、webhookをコピーしますURLで示されるOpsIQLINEに、自動返信をオフにします。
認証情報と送信者番号でMessaging Hubにプロバイダー(Twilio、Vonage、Termiiなど)を追加します。
チャネルを接続しても起動しません。 コンテンツ → クライアントチャット → アドバンスト → メッセージングチャネルマスタートグルと個々のチャネルを切り替えます。各チャンネルには独自のAI自動返信スイッチがあるので、残りの部分を開く前に1つでパイロットすることができます。
コネクタでは、そのコネクターの引き出しの指示を使用して。
クリックテスト。 それはプロバイダに本当の呼び出しを行い、何かが何かあれば何が間違っているかを伝えます。
コンテンツ→クライアントチャット→上級。マスタースイッチをオンにし、チャンネルをオンにします。
別のアカウントから、あなたのページ、番号またはボットにメッセージを送ります。チャット受信トレイに秒以内に表示され、AIの応答を取得します。
顧客からの書き込み後に、ビジネスが応答する期間を制限します。 OpsIQ は各会話の残りの時間を表示し、ルールを強化します。
24顧客の最後のメッセージから時間。その後、承認されたテンプレートのみを送ることができます。これは同じ詳細タブで設定します。
24通常の返信のための時間;エージェントは、最大応答7メタのヒトエージェントの許容下にある日後。
プラットフォームを想定したウィンドウは、ありません。
回答がページから来る場合、担当者の返信は正確に人間に応答するかどうかです。あなたのAI命令はトーンを制御し、それがそれ自体を識別します。
はい。チャット受信トレイで会話を開き、参加をクリックします。AIは停止し、タイプして、顧客は自分の側に連続的なスレッドが表示されます。
コネクターの接続解除を使用してください。メッセージ履歴が保存されます。新しいメッセージは、到着を中止し、プラットフォームはそれらを送信を停止するように指示されます。
いいえ。ページは一度に1つのワークスペースに属します。他の場所で接続すると、メッセージを受信してしまう最初のワークスペースが停止しますので、他の場所を再接続するのではなく、意図的に非接続を解除します。
これらの例では、よく訓練された顧客AIが共通のシナリオを処理する方法を示しています。 それらを使用して、あなたのAIのトレーニングをテストし、ギャップを特定します。
AI は、次のものでなければなりません: (1) 注文を調べる #ORD-5523 コネクターを通して。()2) 現在のステータスを報告し、利用可能な場合の情報を追跡します。()3) 注文が遅れた場合は、遅延を認め、推定タイムラインを提供して下さい。(4) コネクターが1つを持っていない場合の船積みの状態を発明しないで下さい。
AI は、次のものでなければなりません: (1) 現在の価格設定で知識ベースからの回答。(2)毎月と年額の請求の違いを説明してください。 (3) 回答が知識ベースでなければ、そう言うと販売でそれらを接続する申し出. (4) 知識ベースにない価格を発明しないでください。
AI は、次のものでなければなりません: (1) 落ち着きを静かに認める。(2) 注文番号またはアカウントの電子メールを要求します。 (3)払い戻しプロセスを記述して下さい。(4) 人件名にサポートチケットやエスカレートを作成します。(5) 人の承認を要求する払い戻しを、約束しません。
AI は、次のものでなければなりません: (1) 懸念を認める。()2)関連する詳細(電子メール、料金の日付)を収集します。 (3) 請求の問題が人間のレビューを必要とすることを説明する。 (4) 請求部門のチケットを詳細で作成します。(5) 高い優先順位を置きます。
AI は、次のものでなければなりません: (1) その言語がサポートされている場合は、顧客の言語で応答します。 (2) 知識ベースからフランスへの配送に関する質問に答えてください。 (3) 言語がサポートされていない場合、デフォルト言語で応答し、どの言語も利用できます。
AI は、次のものでなければなりません: (1) アフタータイムAIの設定、対応、サポートする場合2) アフタータイムが発券した場合、「当社のチームは現在オフラインです。サポートチケットを作成して、営業時間中にフォローアップします」と言います。3) チケット番号を提示します。
AI は、次のものでなければなりません: (1) あなたのプロダクトの強さを事実上記述して下さい。(2) 競合他社に悪用しないでください。 (3) 知識ベースに比較ページがある場合、リンクします。(4) 顧客が持っていない機能について尋ねれば、正直である。
AI は、次のものでなければなりません: (1)必要に応じて質問を明らかにする(例えば、ほとんどの機能が何であるかなど)。 (2) 知識ベースに基づく計画を推薦する。(3) その計画が彼らのニーズに合った理由を説明してください。 (4) 小さい計画から始めて、後でアップグレードできるメンション。
AI は、次のものでなければなりません: (1) 現行のプロモーションは、存在するかどうかを慎重に説明する。(2) 知識ベースにない割引を作成または約束しないでください。 (3) 顧客が主張するならば、販売のチームとそれらを接続するために提供して下さい。
AI は、次のものでなければなりません: (1) 知識ベースからステップバイステップの指示を提供します。 (2) 正確なページパスとボタンの位置を含める。(3) 機能が特定の計画を必要とする場合、その言及。(4) 機能が存在しない場合は、正直で代替を提案します。
ライブチャットが実際の人を必要とするとき、AIはこの会話をチーム自身で所有し、誰に伝えるべきかという2つの質問に答えます。どちらも設定、クライアントチャット、サポートフロー、AIルーティング部門で構成されています。
そのパネルの2つのボックスはホワイトリストです。 部署が右に移動すると、AIがルートや開いているチケットしか移動できません。 左側にあるものは、その部に存在してスタッフになっていても、目に見えないものです。 組織を狭くし、スタッフとして追加してください。
これは、AIがチャットをエスカレートするとき、ほとんどの人が設定し、必要としないことを期待している部分です。OpsIQ その部門に添付した人々をメールします。そのリストは、チームと部署のページで管理し、チケットのエスカレーションとチャットのエスケーラレーションの両方がフォローしています。
部門に添付されたすべてのアクティブな管理者は、自分のコピーを受け取ります。中断され、無効なアカウントがスキップされます。
チームメンバーが付いていなくても、エスカレーションは誰かに届く。
配信は不可能です。赤の部とAIが訪問者に人間を通知しないルーティングパネルマークは認められました。
まさに1つの部門がキャッチオールマークを運びます。AIは自信を持って配置できないチャットを受信し、通常のパスではなく最後のリゾートです。
請求のワーディングは、課金部門に行きます, ホスティングとエラーは、技術的な1に言葉を書いています, 販売へのワードングを購入.
キーワードが整っていない場合、モデルは会話を読み込み、有効になっている部署から選ぶことができます。
両方が空に来るときだけ、キャッチオール部門はチャットを受信します。
キャッチオールが営業部であり、訪問者が購入信号を提示しなかった場合、 OpsIQ はサポートや技術的な部門を探すため、通常のサポート質問は販売に蓄積しません。
エスカレーションメールが出ていれば、AIは訪問者にチームを通知したと伝えます。それがうまくいかないと、AIはその場で何か正直なことを言うとおり、代わりにチャットでメッセージを残せるように招待します。電子メールが送信されていないときに、人間が警告されたと主張しません。
誰もそれに付随しています。チームと部署を開き、少なくとも1つのアクティブな管理者を添付し、設定ページを再読み込みします。パネルはライブを読みます。
はい。以前は、部門のために保存されたカスタムアドレスがチームリストを上書きしています。新しい設定は、代わりに部署に人々を添付する必要がありますので、維持する場所は1つです。
営業部かどうかを確認します。それがあれば、訪問者は購入信号を示しませんでした、OpsIQ 目的に応じて、サポートや技術部門へのルート。
OpsIQ はメールメールボックスに接続して、メールの受信から自動的にチケットを作成でき、返信をメールで送信できます。また、AIによる人的レビューに対する回答も提供します。
IMAP (ほとんどのプロバイダー)、Gmail API (Googleワークスペース)、Microsoft Graph(Outlook) 365).
ホスト、ポート、暗号化()SSL/TLS)、ユーザー名、パスワードまたはアプリのパスワード、フォルダ(通常INBOX)。
メールボックスをチケット部門にマップします。 電子メール [email protected]「サポート」部門でチケットを作成します。
Googleアカウント > セキュリティ > 2-Step 認証をGoogleアカウントに移動し、有効にします。
Googleアカウント>セキュリティ>アプリパスワードを選択します。 「メール」と「その他(OpsIQ)」を選択します。 16-文字のパスワードをコピーします。
メール > Mailboxes > Add に移動します。 ホストを設定します: imap.gmail.com、港: 993、暗号化: SSL, ユーザー名: [email protected], パスワード: アプリのパスワード.
クリックしてください テスト接続. 成功した場合, OpsIQ 設定された間隔で新しいメールのポーリングを開始します。
Outlook の設定 > メール > 電子メールを同期, IMAP が有効になっていることを確認します.
MFAが有効になっている場合は、アプリパスワードを作成します。それ以外の場合は、通常のパスワードをご使用ください。
ホスト: outlook.office365.com、港: 993、暗号化: SSL, ユーザー名: [email protected].
でん cPanel > 電子メールアカウント、メールアカウントをクリック IMAP 設定。
ホスト:通常 mail.yourdomain.com サーバのホスト名、ポート: 993 (SSL)または 143 (STARTTLS), ユーザー名: フルメールアドレス.
自動返信が「Draft」モードに設定されると、AIはDraftsキューに表示される応答草案を生成します。次のことができます:
草案を読んで、精度を確認してください。
送信前にテキスト、トーン、コンテンツを変更します。
原稿を承認し、メール返信として送信してください。
適切でないと、ドラフトを削除してください。
自信が十分に高く、自動送り込みが可能であれば、設定可能な遅延後に自動的にドラフトを送信します。
チェック: (1) メールボックスが接続され、健康ですか?メール > Mailboxesの緑色の状態を探します。(2) cronジョブが実行されているか? メールポーリングは cron が必要です。 (3) INBOX以外のフォルダにフィルタリングまたは移動しているメールはありますか?
はい。各メールボックスを別の部署にマッピングできます。[email protected] サポートに行き、[email protected] 請求に行きます。
CSATは、チケットやチャットの満足度を測定し、不満な応答を表わし、AIと人間の成果を比較します。
チケットの調査は、閉鎖後のスケジュール(通常) 24 時間後)。肯定的な応答はスコアです4または5. デトラクターのキューを使用して、スコアのスコア1または2お客様への連絡前に、チケット・会話をお読みください。
チャットのフィードバックは、AIが解決する会話と人間が手伝ってくれる会話のために別々に報告されます。低サンプルサイズはエージェントやモデルをランクするために使用しないでください。
メールプラットフォームページでは、認証されたオペレーターがアクティブなエージェント、選択したエージェントまたは部門にワンタイムメッセージを送信し、送信履歴をレビューすることができます。
このページは、顧客マーケティングではなく、内部の操作メッセージです。最小正しいオーディエンス、プレビュー名、アドレスを選択し、送信します。配信は、設定されたアウトバウンドメールパスを使用して結果を記録します。
OpsIQ がメールを送ったり、インバウンドメッセージをチケットに変えたり、送信ドメインが準備完了しているかを設定します。
完全な管理者は好みの電子メール コネクターを選ぶことができます; OpsIQ 構成されるべき落ちる SMTP/mail の配信を適切に設定します。名前/アドレスから再構成可能に設定し、テストを送信してチェックしてください 24-時間の成功/失敗のメートル。
IMAP メールボックスには、名前、メールアドレス、ターゲット部門、ホスト、ポート、セキュリティモード、ユーザー名、パスワード、フォルダ、ポーリング状態および証明書の検証選択が必要です。 利用 今すぐ投票する クロンの待ち時間の前に、摂取量を検証します。
同じサーバーでは、メールパイプは直接生のRFC822メッセージを渡すことができます。リモートメールサーバは、そのトークンを使用して保護されたインバウンドエンドポイントに未加工メッセージをPOSTできます。どちらのパスも同じ重複排除、スレッド化およびチケットルーティングパイプラインに入ります。
SPF/DKIM/DMARC チェックは、ドメインから構成されているアドバイザリー証拠です。緑色のチェックでは受信トレイの配置を保証するものではありませんが、生産メッセージを送信する前に故障を固定する必要があります。
外部イメージアセットを要求することなく、ポータルスタジオの設計とカスタマーサポートの公開をサポート。
テンプレートを出発点として使用し、テーマ、レイアウト、ナビゲーション、知識検索、チケットフォーム、アシスタント、フッター、ブランド、チケットの動作、カスタムを設定 CSS 一般的な設定。公開前にデスクトップ、タブレット、モバイルをプレビューします。
知識が豊富に揃ったキューは、AIが自信を持って答えられない顧客の質問を収集し、チームがカバレッジを改善できるようにします。
元の質問と近くの会話を読んでギャップを開き、正しい修正を選択します。既存の記事を更新し、新しい知識記事を作成して、ビジネスの事実を追加したり、コネクタのデータを修正したり、エスカレーションの指示を変更します。評価や実際のテストが許容された回答を返す後にのみ解決マークしてください。
ステータス管理ページでは、コンポーネント、現在の状態および更新を使用してサービス健康とインシデントを通信します。
コンポーネントの状態を一貫して使用してください。インシデントが顧客に影響する場合、初期通知を公開し、タイムスタンプの更新を事実変更として追加し、簡潔な解像度の要約で閉じます。ステータスページは内部デバッグログとして使用しないでください。機密診断は OpsIQ およびサーバーログに所属しています。
AI の構成は、AI プロバイダー、モデル、コスト制御を選択する場所です。OpsIQ 複数のプロバイダをサポートしています: クロード (Claude)Anthropic)、GPT-4o ()OpenAI), Gemini (Google), Grok(xAI). 自分で使える API キー(キー)BYOK) または管理された AI あなたの計画で利用可能な場合。
強い推論, 事実に注意してください。, 以下の複雑な指示で良い. モデル: claude-sonnet-4-20250514, クラウド 3.5-sonnet. ベスト・フォー:会話、技術的な質問、詳細な分析をサポート。
迅速でクリエイティブな、一般的な知識。 モデル:gpt-4o、gpt 4o-mini。 ベスト・フォー・ベスト:迅速な対応、創造的なライティング、幅広い知識の質問。
実際の質問、多言語サポートで良い。 モデル:gemini-2.0-フラッシュ、gemini-1.5-pro. 最もよいのための:複数の言語サポート、事実上の一見。
速い、簡潔な応答。 モデル: grok-3-mini-fast。 ベストは: クイック回答、カジュアルトーン。
プロバイダーから独自の API キーを提供します。プロバイダを直接支払います。モデル選択と使用量を完全に制御します。
AIは、あなたの一部として提供され OpsIQ プランなし API 必要なキー。ご利用方法は、お客様のプランのAIクレジット残高に対して計測されます。
OpsIQ admin では、設定 > AI の設定に移動します。
ドロップダウンからAIプロバイダを選択します。
ご利用の場合 BYOK、あなたの入って下さい API キー。管理されたAIのために、これは自動的に処理されます。
使用するモデルを選択します。より小さいモデルは、より速くて安価です。より大きなモデルはより良い品質回答を与えます。
チェックマークをクリックすると、 API キーとモデルが動作していることを確認します。緑色のチェックマークは成功を意味します。
保存をクリックしてAI設定を有効にします。
AIトークンに毎月最大で費やす。予算が到達すると、AIは完全に停止するのではなく、より豊かで(短応答、自動返信なし)機能します。
単一の会話あたりの最大トークン。過剰なクレジットを消費する介助的な会話を防ぐ。
AI のクレジット残高が閾値(デフォルト: 50,000 トークン)の下落すると、管理者に警告が表示されます。AI 設定でこれを設定します。
AI 構成は、ワークスペースごとに行われます。複数のサイトを管理する場合は、各ワークスペースが異なるプロバイダー、モデル、予算を使用することができます。ワークスペースは、オーバーライドされていない限り、グローバルデフォルトを継承します。ワーク空間ごとに設定するには:ワークスペースに切り替えて、AI の設定に移動し、そこで設定を保存します。
行き方 console.anthropic.com > API キー > キーの作成。キーを「スカント」でコピーします。
行き方 platform.openai.com > API キー > 新規シークレットキーを作成します。キーを「sk-」でコピーします。
行き方 aistudio.google.com > 取得 API キー。プロジェクト用のキーを作成します。キーをコピーします。
行き方 console.x.ai > API キー。キーの作成とコピー。
テストが失敗した場合: (1) それを確認する API キーは正しい(余分スペース無し)です。 (2)アカウントがプロバイダでセットアップされる請求があることを確認してください。 (3) モデル名が有効であることを確認します。 (4) 管理されたAIを使用する場合、ライセンスが有効であることを確認します。
単一の最高のプロバイダはありません。 Claudeはサポート会話に優れています。 GPT-4oは高速で汎用性です。 Gemini _は複数の言語をうまく処理します。 各1を試して、特定の使用例に最適な結果が生成されます。
はい。プロバイダーを変更し、API いつでもキー。既存の会話履歴が保存されます。AIは、将来のすべての会話のために新しいプロバイダを使用します。
AIは、順調に劣化します。応答が短くなり、自動返信停止になり、管理者は低バランス警告が表示されます。 コアトラッキング、チケット、およびCRMはAIなしで作業を続けます。
顧客チャットをスマートに(人件名のような顧客のアカウント全体で、その理由)またはより安い(AIが少ないか、または数ステップで回答する)、オプトインコントロールのセット。 すべての制御はデフォルトと独立したもので、他の行動を変更しない。 ほとんどの人は設定>クライアントチャット>行動:あなたのAIを設定し、あなたのAIを訓練するいくつかのものです。
通常のチャットボットは、ワンビューアップから1つの質問に答えます。 エージェントモード つまり、アシスタントは複数の読み取り専用アカウントを単一のターンでチェックし、それらにクロスリファレンスすることができます。例えば、「私はチケットを開くのをやめ、次の更新のために十分な残高ですか?」など、数学が終わったと1つの返信で答えられます。それは、アカウントまたは払い戻し質問に関する検証済みの顧客のみに従事しています。それ以外のすべてが通常の単一回答パスを実行します。
応答する前に、ターンごとにいくつかの読み取り専用ルックアップまで、クロスリファレンス。接続されたプラットフォームを持っているときにオンにします()WHMCS, Shopify, Stripe, Zendeskなど)。オフ=今日のシングルルックアップ動作、変更されていない。
複雑なターン(低/中/高)のモデルの理由が難しくなります。 低から始めて、ほとんどのサポート質問はよく扱われます。
複雑なエージェントがターンするだけで強力なモデルをピン化しているため、毎日のチャットは軽くて安いモデルにとどまり、深さのハードターンのみを支払う。空白 = あなたの通常の顧客チャットモデル。
小さな計画ステップでは、知識ベースが必要かどうかをプルするのか、そして複数の手順ではなく1つのメインコールで回答するかを決定します。エージェントモードのサブトグルです。 Agentモードがオンにならない限り、有効化できません。同じ答えの質、複数パート質問に対する呼び出しは少ないです。
古いメッセージ(名前、チケット/請求書番号、金額、決定)の短い実行要約を保持しているため、アシスタントは、全体がトランスクリプトを保ちずに非常に長いチャットで一貫性を維持します。サポートヘビー、ロングスレッドに最適です。 エージェントモードとペアリングします。
意図した言葉として小さなタイポ(「マイオープンチケット」、 "未払いの請求書")を読みます。これにより、適切な情報が見逃さずに発見されます。すべての接続されたプラットフォームで動作します。デフォルトではオフに、モバイルチャットにも便利です。
質問が実際に自分のアカウント(バランス、請求書、チケット、サービス)についているときに顧客のアカウントのスナップショットを添付するだけで、一般的な質問にスキップします。 品質の損失なしでコストを削減します。 このアシスタントは、ターンがそれを必要とするとき、アカウントをライブ取得することができます。
"こんにちは"、"thanks" と "ok" は知識ベース検索をトリガーしません。それらの応答は使用しません。実際のコンテンツを持つ任意のメッセージはまだ通常のものとして検索します。
単一の応答がどのくらいの時間を要します。. 返信の長さは、呼び出しの最も高価な部分です, そう、感知可能なキャップ (周り) 500 サポート用)は、最も効果的なチャットコスト制御です。グローバル制限を下げるだけで、決して上昇しません。
回答する前に、モデルがどれだけ考えるか(最小〜高)。 速度のために最小限/低で顧客のチャットを維持し、分析と管理者コピローの高い設定を予約します。
すべてのAI表面(ライブチャット、チケットドラフト、要約、分析、管理者コピロット、プロモーション、サイトインテリジェンスなど)は、独自のモデルで実行できます。 スピードの問題、品質問題のある場所の強いライト。 そのジョブのサーフェス=プロバイダデフォルトに空白を埋めます。
管理者コピロは、すべてのツールの代わりに、境界的な作業メモリを維持し、問題が必要とするツールだけをロードすることができます。
指示は毎回送信されるので、その長さは再発コストです。Compressボタンは数少ない言葉で同じことを言うためにスロットを書き換えます。それはどんなに落としてもリライトを拒否します {variable} または規則的に、保護されたものを報告し、黙って意味を変えることは決してありません。
スロットごとにビジネスについて既に知っている OpsIQ を表示しているので、自分の指示で繰り返していたものを削除することができます。
いいえ。すべてのコントロールはデフォルトと独立したものです。 1つだけに1つをオンにして、その動作を追加し、それをオフにすると、チャットが完全に機能する前にどのように機能するかを返します。
毎日のチャットを軽モデルで実行し、より強力なエージェントモデルをピン留めします。その後、接続されたプラットフォームを持っている場合は、Agentモードを有効にして、先に計画してから、長い会話メモリを計画してください。それから、リーンコンテキスト、スキップ-KB-for-greetings、および応答キャップ。最後にあなたの指示を圧縮します。各変更後のいくつかの実際のチャットを参照してください。
Admin AI チャットは、単なる質問箱ではなく、作業エンジニアです。Web 上で修正を調べることができ、運用手順のライブラリを維持し、サーバーをスケジュールにパトロールし、ファイルを移動することができます。このほとんどはチャットでそれを求めることによって駆動されます。あなたが設定する 1 つの事は、あなたの AI ページを設定して、それが使用する Web 検索プロバイダです。
エージェントは、ドキュメントやエラーメッセージ、現在の情報を検索します。このボックスから、キーとセットアップを必要としません。
手順の保存されたライブラリ(「ここX」)。エージェントは、トリッキージョブを釘付けした後に1つ書いて、次に次の時間に従うので、ノウハウがチャットの最後に生き残る。
読み取り専用パトロールをスケジュールしました。 「朝、ディスクスペースとエラーログをチェックして私に伝えてください」。 検出はあなたの管理者ベルに到着します。
ログファイルを求め、プライベートダウンロードリンクを取得するか、1つの接続されたサーバーから別の場所にコピーしたファイルを1つ持っている。5 MB.
エージェントのWeb検索が使用しているもの。デフォルトはDuckDuckGo:キーレス、フリーで、すべてのインストール上で動作します。 Brave Search、Tavilyおよび Serper.dev (Googleの結果) 通常、より良い結果を返すが、それぞれは、API そのプロバイダからのキー。 重要なプロバイダーが何らかの理由で失敗した場合(悪いキー、クォータは、ネットワークのトラブルを使用して)、その検索はDuckDuckGoに自動的に落ちるので、検索は暗くなりません。
選択したプロバイダのキーは、Brave、Tavily、Serperにのみ必要です。保存したらマスクされ、ページ上に表示されません。新しいものをコピーして置き換えます。プロバイダーと鍵の両方が保存されるときだけ、重要なプロバイダーがアクティブになります。
エージェントがジョブをやり直したら、もう一度同じようにしたいと思い、「夜間清掃と呼ばれるランブックとして保存する」と言っています。それから、各セッションの名前でランブックを見たり、名前(またはそれを説明する)で仕事を尋ねると、手順をプルアップしてフォローします。実行本をリストしたり更新したり削除したりすることができます。
ミッションは、エージェントが単独で実行される再発ジョブです。毎日1組の時間、またはセット日に毎週行われます。 ミッションズは設計によってのみ読み取り専用です。 彼らはサーバー、データ、ウェブを読むことができますが、彼らは何も変更することはできません。 彼らは調査し、報告します。 使命が完了すると、あなたの管理者ベルに通知として土地を見つけます。 「午前中を運転」と1つのオンデマンドをトリガーするか、代理店にリストしたり、一時停止したり、ミッションを削除したりすることができます。
ファイル(「今日のWebサーバーからエラーログをゲット」)と、エージェントはそれを段階的に確認し、プライベートなダウンロードリンクで応答します。 リンクは、署名付き管理者のためにのみ機能し、約1日後に期限が切れます。 ファイルは 5 MB で捕捉されます。 何でもより大きい場合は、エージェントに最初にサーバー上で圧縮またはトリミングするかどうかを尋ねてください。
エージェントは、接続された2つのサーバー間で単一のファイルをコピーすることもできます。5 MB. コピー先の書き込みは、他の変更のように処理されます: 最初に承認カードを取得するように要求モードで、既存のファイルがバックアップされ、コピーはリバーシブルです。 安全のために、ファイルはコピーが適用される瞬間にソースから再読み込みされ、チャットから取らないようにします。
AI トレーニングは、 OpsIQ の動作方法を教える場所です。パーソナリティ、境界線、ナレッジフォーカス、エスカレーションルールを定義するプロンプトを書いています。新しいサポートエージェントのためのトレーニングマニュアルを書くように考えてください。
チャットウィジェットでAIが顧客とどのように話しているかを制御する。 これは、適切な取得する最も重要なプロンプトです。
オペレータダッシュボードでAIが管理者チームを支援する方法を制御します。これにより内部の問い合わせとアクション実行が行われます。
顧客AIのプロンプトは、これらの領域をカバーする必要があります。
AIとは誰ですか?名前、役割、個性をもちましょう。例:「アメストアのフレンドリーで知識のあるカスタマーサポートアシスタントであるルナです」
どのように通信する必要がありますか? 例:「専門的で暖かいです。簡単な言語を使用してください。 jargonを避けます。 応答簡潔に保って下さい()2-3段落最大)。
知っておくべきこと、わからないこと?例:「当社の製品、価格設定、出荷および返品ポリシーについて知っています。競合他社製品や社内の決定については知りません」
人手が離脱するべき時?例:「人のエージェントにエスカレート」は、顧客が返金を求め、法的行動を言及し、セキュリティの問題について報告したり、3回同じ質問をしたりします。
堅い境界。例:「決して約束の払い戻しを約束します。内部価格設定式を共有しません。存在しない製品機能を作ることは絶対にありません。医療、法的、または金融アドバイスを与えないでください」
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
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
アイデンティティ、トーン、および重要な境界から始めます。一日中すべてをカバーしようとしないでください。
AIが誤った回答や、潜在的回答をした会話を読みます。
再発の問題のための特定のルールを追加します。例:AIが払い戻しを約束し続ける場合は、「返金を約束しないでください。請求チームにエスカレーションする」と言います。
AIが質問に答えられない場合は、プロンプト内のすべてのものに合うようにしようとするのではなく、ナレッジベースへの回答を追加します。
プロンプトは、人格、境界、ルールを定義します。ナレッジベースでは、実際の情報(製品詳細、価格設定、ポリシー)を提供します。AIは両方を読みますが、KBが回答を提供しながら、プロンプトの形状動作を読み取ります。
プロンプトは、ワークスペースです。異なる部門のAI行動を異なる必要がある場合は、ナレッジベースを使用して、部門固有の情報を提供し、部門のコンテキストをあなたのプロンプトで言及します。
AI Historyは、AIが顧客や管理者と抱えているすべての会話を示しています。 それを監査するために使用し、間違った答えを見つけ、トレーニングギャップを識別します。
会話が起こったとき。
知られていない場合は、名前と電子メール IP そして国。
ウィジェット、自動返信、メールのドラフト、または管理者AIをチャットします。
会話の完全トランスクリプト:顧客メッセージとAIレスポンス。
会話が消費されるトークンの数。高いトークンの使用は、AIが過剰に応答を動詞したり、会話が円で行っていることを示すかもしれません。
会話中に実行されるAI(注文、作成されたチケットなど)の操作。
CSATが有効になっている場合、この会話の顧客満足度評価。
特定のトピックを検索して、AIがどのように処理するかを確認します。 例:「返金」で検索して、払い戻しポリシーに従ってAIが確認します。
満足できない顧客を集中するために、低評価の会話のみを表示します。
チャットとは別に自動応答を監査するために、チケットオート返信のみを表示します。
トークの会話が高まっています。AIは、丸みを崩したり、質問に答えるのに失敗したりするといった問題を示すかもしれません。
完全な成績表を読んでください。何が間違っていたのですか?知識ギャップ、トーンの問題、または間違った答えでしたか?
これらは混乱を示すかもしれません。AI自体が繰り返されたのでしょうか?問題の理解に失敗しましたか?
知識ギャップについては、ナレッジベースに記事を追加します。行動の問題のために、AIプロンプトを更新します。間違った回答を再帰化するには、明示的な補正ルールを追加します。
これは、あなたのナレッジベースがインストールガイドを欠落していることを意味します。各製品のインストール手順に関する知識ベースの記事を作成します。それらを追加した後、AIのインストール質問にテストします。
AI Insightsは、会話パターンと表面を自動分析します。一般的な質問、満足度トレンド、知識ギャップ、エスカレーションパターン。
よく聞かれた質問。 「パスワードをリセットする方法」が #1, あなたの知識ベースは、著名なパスワードリセットガイドが必要です.
CSATは、時間をかけてスコアを上げます。AIの満足度が向上したり、低下しているのでしょうか?突然のドロップで何かを壊した知識ベース変更を示すかもしれません。
人間の介入なしでAIが解決する会話の割合は? 上記レート 70% 良いです。 以下 50% つまり、AIはより多くのトレーニングを必要としています。
なぜ会話が人間に手を離すのか。 一般的な理由: 顧客要求の人間、AIは答えることができませんでした, 機密トピック, 請求の問題.
AIが「知らなかった」とよく言われたり、自信の低い回答をしたりするトピック。
会話あたりのメッセージ数が多かった。非常に長い会話(10+ メッセージ)は、AIが質問を理解していない可能性があることを示すかもしれません。
これは、明確な知識ギャップです。ステップ:()1)すべての保証条件、クレームプロセスおよび除外をカバーするナレッジベースで包括的な保証記事を書きます。 (2) 保証情報を参照するためにAIのプロンプトを更新して下さい。()3)保証のエスカレーションが低下するかどうか確認するために、来週にAIインサイトを監視します。
アドミンAI(アスク)OpsIQ) あなたのチームが管理するのを助けて下さい OpsIQ 管理者ダッシュボードから。データを調べ、機能の説明、チケットのまとめ、プラットフォームアクションを実行するために依頼することができます。
質問: "私にすべてのチケットを表示 [email protected] 注文状況の「ORD-」5523?"
依頼:「最後にまとめる」10 チケット「今週のトップサポート課題とは?」
質問:「自動返信を設定するにはどうすればよいですか?」または「バウンス率カードがどういう意味ですか」
「チケットを作成する」[email protected] 請求について」または「チケットを閉じる T-12345"
「昨日の訪問者数が何人か?」または「今月の収益はどうなりますか」と尋ねる
AIは、訪問者セッション、チケット、チャット会話、注文、およびCRM連絡先のあらゆる接続されたデータソース全体で顧客を探し上げます。 各項目へのリンクを使用して、最近の活動の概要を返します。
AIが要約する:「いつまでも 245 訪問者(アップ) 12%), 8新券(新券)3 AIによる解決2新規注文合計 $198 と、1配送遅延に関するチャットエスカレーション。
AI は「通常から緊急にチケット T-5523 優先順位を変更します。これは SLA タイマーに影響します。確認しますか? 確認すると、アクションが実行されます。
期待される行動とトレーニングのヒントで、一般的な顧客向きのAIシナリオをカバーしています。
期待されるAIの行動:()1)プラットフォームコネクタを介して注文を探します。 (2) 現在の状態を報告して下さい(処理し、出荷されて、渡される)。 (3) 利用できる場合追跡番号を含んで下さい。(4) 注文が遅れた場合は、推定タイムラインを認め、提供して下さい。(5) 決して追跡情報を発明しません。
期待されるAIの行動:()1) 知識ベースからパスワードリセットの手順を提供 (()2) リセットリンクまたはページパスを含める。(3) リセットメールが数分かかることがあります。 (4)迷惑メールフォルダをチェックする5) お客様がまだリセットできない場合は、人間にエスカレートします。
期待されるAIの行動:()1) 提案をありがとう。()2) 機能のリクエストがどのように処理されるか説明する(遅延、見直し、優先順位付け)。 (3) 機能が組み込まれる約束をしないでください。(4) 同様の機能が存在する場合、それを言及します。
期待されるAIの行動:()1) 不満を認める。(2) 可能であればサービスの状態をチェックしてください。(3) すべての詳細を持つ請求部門にエスカレートします。 (4)払い戻しを約束しないでください。(5) チケットを優先的に High に設定します。
期待されるAIの行動:()1)Politelyリダイレクト。 「私はあなたの[会社]サポートアシスタントであり、当社の製品やサービスに関する質問に役立ちます。 気象情報については、気象サービスを試してください」(2)製品に関する質問がある場合に尋ねます。
当ウェブサイトをプライベート/シークレットブラウザで開くと、AIとチャットして顧客として連絡してください。一般的な質問やエッジケース、および対価なシナリオを試してください。AIがあなたのプロンプトルールに従い、知識ベースコンテンツが正しく使用されることを確認してください。
ナレッジベースは、AIが質問に答える記事のライブラリです。顧客が何かを尋ねると、AIは関連記事の知識基盤を検索し、それらを正確な接地応答を生成するために使用します。
「返還方針とは?」
OpsIQ キーワードと意味を一致させることで「返品ポリシー」の記事を見つけます。
この記事を読んで記事の内容に基づいて自然言語の回答を書きます。
回答は、AIの一般的なトレーニングデータではなく、実際の方針で構築されます。
各トピックごとに別々の記事を書いてください: 返品ポリシー、配送料、アカウント設定、パスワードリセット。 関連のないトピックを組み合わせないでください。
質問の顧客から、回答を提出し始めます。これにより、AIは記事に質問を一致させることができます。
「返還は、内部で開始する必要があります 30「返品ポリシー」よりも「納期」が優れています。
国際的返品とは? デジタル製品はどうですか? 販売で購入した商品について? 例外をカバーします。
四半期ごとに記事を見直します。 古い情報を削除します。 変更時に価格設定、ポリシー、および手順を更新します。
配送コスト、納期、追跡、国際輸送、および取り扱い遅延。
ウィンドウ、条件、プロセス、払い戻しのタイムラインおよび例外を返します。
パスワードリセット、メール変更、アカウント削除、データエクスポート。
説明、請求サイクル、支払い方法、請求書、通貨を計画します。
各製品や機能を使用する方法。スクリーンショットでステップバイステップの指示。
一般的な問題と解決策。エラーメッセージとその修正。
業務時間、サポートチャネル、応答時間、エスカレーションパス。
個人情報保護方針の概要、サービスの要約、GDPR データリクエスト。
各コネクタはAIに知識を積むことができます。コネクターが有効になっていると、その内蔵のナレッジ記事(製品カタログ、一般的な質問、プラットフォーム固有のトラブルシューティング)が自動的にAIに利用可能になります。コネクタの設定でコネクターの知識やオフを切り替えることができます。
ナレッジベースには、構成可能なトークンの天井(デフォルト: 32,000 トークン)は、会話ごとにAIにどれだけの知識コンテキストが送信されるかを制御するものです。あなたのナレッジベースは非常に大きい場合、AIはこの予算内で最も関連性の高い記事を選択します。AIが関連する記事が見つからない場合は、天井を上げます。トークンコストを削減したい場合は、それを減らすことができます。
まずは5-10 最も一般的な質問をカバーする記事。AI HistoryとAI Insightsを通じてギャップを識別するために、もっと追加してください。ほとんどの企業は必要です 20-50 包括的なカバレッジの記事。
現在、記事は OpsIQ で手動で作成されます。既存のFAQやヘルプセンター、ドキュメントからコンテンツをコピーペーストできます。
原文は最もよく機能します。AIは、構造化された HTML やマークダウンよりも自然言語を良く理解しています。顧客に説明するように書いてください。
評価セットは、顧客の質問を繰り返して回答の品質、引用、エスカレーションおよび行動安全のためのテストに変えます。
管理者は、プロンプト、予想されるソースラベル、必須の引用、人間確認規則、エスカレーションの期待と禁止された行動で評価セットを作成することができます。 セットを直接実行し、それを乾かして、選択した履歴を再再生します。
時計塔 日頃または週単位で検診し、数のケースを(予定パスごとに8つまで)実行します。provider/model、プロンプトバージョン、ナレッジバージョン、生産行動を変更する前に提案された行動と費用を伴う障害を確認します。
言語は、翻訳された顧客向きのテキストと使用時の動作を管理します。OpsIQ 顧客の言語に従って下さい。
OpsIQ は、オペレータが入力した顧客層のテキストを翻訳します。翻訳を作成する前にソース言語を正しく設定し、ターゲット言語を追加してから公開前のドラフトを確認します。 「Follow Customer language」は応答言語を制御します。ウィジェットインターフェイスの変換は、そのボタン、ラベル、システムテキストを制御します。
翻訳スコープは、原稿のみまたはライブでも構いません。人的レビューなしで法的、返金、セキュリティ、安全に関するテキストの機械翻訳に依存しないでください。
独自のワーディングを保持するすべての場所は、クライアントチャットメッセージ、プロモーション、積極的なメッセージ、チャットフロー、ガイド付きツアー、発表、ティーザーバブルおよび 調査・形態. 調査面は、すべての公開されたアンケートを完全にカバーします:タイトル、すべての質問、すべての回答オプション、ボタン、歓迎および感謝コピー、ページクロームと結果のページ。キーは、問題IDとオプション値に縛られているので、質問やオプションを再注文することは、翻訳を失うことを防ぎ、メッセージだけ再翻訳する1つのメッセージをリワードしています。公開ライブアンケートはデフォルトで提供されます。スコープを拡大したときに参加草案。
チャットメールのアンケートは、実際にチャットした言語をフォローし、ここで提供されている言語が提供されます。そうしないと、システム言語を使用します。6つの編集可能なフィールドもこのページに翻訳され、行動には独自のクライアントチャット設定で切り替えています。
チケットとポータルメッセージ 固定テキスト演算子は、一度とすべての顧客に入力し、その1つの言語で受信します。チケットの承認、開封、クローズド、フィードバックの確認、パートメントサインオフ、ポータルウェルカムライン。(AIの自動返信はこれのいずれを必要としませんが、それはすでに顧客の言語に答えます) 自分の言語でメールを送る 有効にして下さい OpsIQ ライティング、チケットメールは、受信者の言語をこの順番で解決します。ポータルまたはヘルプセンター(チケットに配布)で選択した言語、連絡先レコードのロケール、その後、彼らが書いた言語、スクリプト範囲とマーカーの言葉によってローカルに検出され、外部呼び出しなしです。 言語ページで選択された唯一の言語が使用されるため、機能は言語が追加されるまで入力されます。 グローバル HTML 電子メールのラッパーは意図的に翻訳されていません:それはマークアップです、偽りではありません。 スタッフの顔メール(通知、部門アラート、アナリストの簡略化、スケジュールされたレポート、週刊ダイジェスト)は常にシステム言語を使用しています。
従業員のライフサイクルを、モバイルセルフサービス、エビデンスバックワークフロー、型付き統合、そして機密決定を超える人的コントロールでオフボードにすることで実行できます。
人、組織、人材募集、オンボーディング、文書、退去、給与調整、特典、パフォーマンス、学習、従業員関係、分析およびガバナンスの管理
パーソナルレコード、リクエスト、文書、オンボーディング、時間、支払い説明、学習、会社情報および権利のモバイルファーストポータルを使用します。
キュレーションを使用する hr.* アクションとレビュー platform.hr.* 一つのコントラクト、プラス型コネクタクラスを介して動作する。 PeopleOS API セクションの生成されたインデックスはスコープで1つずつリストします。
PeopleOS HRはエンタープライズプランに含まれています。他の有料プランでは、アカウントオーナーが開きます 口座 → アドオンとトークン, PeopleOS HRの層を選択し、いずれかの無料のトライアルを開始するか、またはそれを直立させる. 層は、彼らが運ぶ多くの人やどのくらいの採用方法の違いが異なります, インタビューとAIの活動. 価格と制限は、アカウントにセットされています, 製品に書かれていないので、現在のティアを参照してください プライシングページ。モジュールが、表面による表面で、あります PeopleOS HRの製品ページ.
有料プランが有効です。無料プランは追加できませんし、独自のプラントライアル内ではまだ有料プランでは試用期間まで待つ必要があります。
トライアルは、あなたが選ぶ層上で実行します。それが購入せずに終了すると、資格が削除され、何も満たされません。何も削除されません:レコードは再びアドオンが追加されている瞬間です。
PeopleOS HRはサイドバー、コマンドパレット、設定、アプリ内ヘルプには表示されません。HRページへの直接リンクでは、ページの代わりにアドオンが提供されます。
ティアの制限がページに到達すると、次の層が提供されます。既に存在するものを編集または削除することはブロックされていない。
ライセンスのエンティクルは、そのライセンスで移動します。 OpsIQ アカウントにアドオンを追加し、インストールは次のライセンスチェックでピックアップします。
以下は、実際の画面です。ここで開発者を必要としません。
営業部 スタッフ→HRホーム. 旗板はマスター・スイッチによって始まります、 PeopleOS HR: 人事ページや従業員の面が到達できません。スイッチをオンにすると2つのクリック確認です。1つオフにするとワンクリックになります。AIは下方を切り替えます(ヘルプ、アプリケーションスクリーニング、自動アシスタント、AIインタビュー、自動オファー送信、ID認証) あなたが決定するまでオフにとどまります。
営業部 スタッフ→セットアップコピロ 平文言語で何をしたいかを言う:その日と通知、国の祝日、 SLA_のケースカテゴリ、費用キャップ、オンボーディングテンプレート、月間パルス。 あなたはそれが理解し、仮定したものと一緒に計画を取り戻す。 あなたが確認するまで何も実行しません。 中リスクステップは2番目の人を必要とします。 すべての実行は領収書を残します。
営業部 スタッフ→フロントライン→サインインデザイン. ホストされているポータルが、ポータルの命を /hr/<address>; ポータルアドレス すぐに名前を変更し、古いアドレスが転送されるため、古いサインインリンクは機能し続ける。クラウドではポータルが /hr ワークスペースホストでは、アドレスがなくても作業空間のホストに必要です。
営業部 PeopleOS → リクルート. 承認された辞典から公開するすべての投稿は、パブリックキャリアページに表示されます。 リンク 公職キャリアページを開く 採用のトップでは、候補者が何を見えるかを正確に示します。
営業部 スタッフ→フロントライン→キオスク 選択して下さい キオスクを登録する. デバイストークンは一度表示されます。タブレットまたはPC上でキオスクページを開きます(それはあります /kiosk ポータルホスト上で)、貼り付けます。従業員は自分の仕事の電子メールとPINでクロックしたり、ポータルからショート・ライブ・バッジ・コードをオンにします。キオスクを再起動すると、デバイスが一度停止します。
営業部 設定 → HR. 各セルフサービス電力(記録、要求、文書、退去、説明を支払って下さい)はすべての従業員、マネージャーだけに、または1つのチームおよびそれの下のチームに置かれます。それを作ったレコードを変えればなぜ、あなたが消える力は無声で欠落するのではなく従業員に説明されます。
オンリー スタッフ→スタッフ 人、雇用、およびその管理者を作成します。 暫定ポータルアクセスは、人が有効な電子メールと意図された雇用関係を持っているときだけ; 招待状は同じ画面から出て、あなたが設定した旅から始まります。
認定資格の作成、ジョブの公開、再クエリーセーフなWebhooks、構造レビュー、スケジュールインタビュー、レコード決定、問題提供および雇用を通じてアプリケーションを受信します。
証拠を裏付けされたオンボーディング・ジャーニーを構築し、正しい文書バージョン、要求機器を収集し、承認されたアクセステンプレートとプロビジョニングシートレスポータルへのアクセスを許可します。
休暇、スケジュール、説明の支払い、利点、費用、目標、フィードバック、レビュー、学習、スキル、内部機会、成功と労働力分析を運営します。
従業員の責任あるケース、法的な保有物、データ要求、修正、説明、アピールおよび独立したヒューマンレビューを管理し、プライベートな人事サポートを提供します。
効果的な雇用変更、リムーバブルアクセス、機器の回復、外部プロバイダの再構成、保持を適用し、必要な証拠を保存します。
正式な人物は雇用記録を所有し、外部のアイデンティティが確認されています。メールはミュータブルな連絡先データであり、永続的なアイデンティティキーではありません。ポータル読み取りは自己スコープ化され、管理者および管理者ビューには明示的な権限が必要です。 API 行程許可の上にあるスコープ層はそれらを迂回しません。
API の書き込みには、dry-runとidempotencyを使用します。アクセスを送信する前に、その人が有効な電子メールおよび意図した雇用関係を持っていることを確認してください。
検証されたフェースを正当に結びつけ、対立を明確に解決します。 2つのミュート可能なメール値が一致しているため、レコードをマージしないでください。
それぞれの主要な PeopleOS 領域が作動し、署名後にどの従業員が確認されるか
規範的な人、雇用、労働者のタイプ、管理者、チーム、場所、スキル、文書および効果的な組織構造を維持します。
承認された要件から投稿、アプリケーション、構造化された証拠、インタビュー、決定、オファー、および宿泊施設や控訴ルートを雇う。
注文した所有者固有の手順を割り当てます。 文書をバージョンとアクセス証拠に収集、レビュー、署名、期限切れ、保持および削除します。
方針を裏返した休暇の種類、残高、要求、承認、休日、可用性、カレンダーイベントの定義と調整。
給与、手作業による労働者の承認イベントを給与、例外の再調整、有益性の管理、償還管理
目標、チェックイン、フィードバック、レビュー、校正、学習、スキル、メンター、内部機会および成功を操作します。
従業員に、専用の許可境界で悲しみ、懲戒め、笛吹と封印されたケースの証拠を維持しながら、プライベートなサポートをします。
労働力対策、ヘッドカウント計画、ベンチマーク、レコードから得られるメトリックを経験する; 決して成功として欠損した結果に影響を与えません。
最終訪問、オープンリクエスト、今後のイベントの開催や進捗状況や発表など、お客様の注意が必要です。
雇用、検証済みの記録、文書、許可、プライバシー要求および修正リクエスト。
社員や会社所有の業務を個別に必要とするプライベートな会話、リクエスト、行動。
所有者、デュース状態、完了およびブロックされた仕事とタイムラインをオンボーディング
残高、リクエストの残量、可用性、スケジュール、およびカレンダーの結果。
学習、スキルの証拠、目標、フィードバック、メンタリングおよび内部機会。
従業員が確認できる、平等な言語補正と給与調整情報。
リストと組織のチャートは、情報同僚が選んだか、ポリシーで共有することができます。
説明、アピール、同意、修正、アクセスおよび削除要求。
ライブレコードをロードする前に、管轄区域、役割、承認パス、保持、同意および機能制御を設定します。
適切な署名されたパッケージをインストールし、少なくとも優先資格情報を入力し、接続と適合テストをパスします。
決定的なデータを使用してワークフローをフルに練習し、実際のプロファイダクター実行を有効にする前に予想される証拠を比較します。
異なる認定審査官は、プロバイダ、セキュリティ、プライバシー、法的、公正性およびアクセシビリティの証拠を調べます。
PeopleOSは、管理されたツールパスとして自動化を処理します。ポリシーの権限、試行実行、プロバイダーの成果と証拠は別々の事実です。
エージェントは、登録済みのタイプされたツールを使用して、目的、管轄区域、リスククラス、および最大限の自律性を使用します。ヒトの買収、遮断器、事件および裁判管轄の変更が実行を停止します。修正は提案したデータセットを形成するかもしれませんが、異なる承認者まではプライバシーレビューを完了するまでは何も訓練しません。
基準、最小サンプルルール、メトリック、評価者本人、法的に公開された評価を定義します。データの欠如は失われます。決してパスに変換されません。
封印された決定と政策の証拠から説明をビルドします。独立した人間にアピールを送って、結果の証拠を保存してください。
国の政策を解放すると、名前付き責任ある法的所有者のみがパックされ、法的な情報源を引用し、テストを通過します。高精細な法律の変更は影響を受ける車線を中断します。
システム在庫、リスククラス、基本的権利の影響評価、通知、オーバーザー、メーターおよび証拠を維持します。
hr.interview.room.provision ミーティングの場所を作成します。 hr.interview.room.connect 作業員にメディアが到達したことを証明することができます。
記録、転写、生体測定の選択肢は別々です。出典は選択された目的に適用されます。
ビデオ契約は感情、注意、魅力、レース、障害または外観の不当のための分野や方法はありません。
審査官は、セッションのために永続的に受けることができ、テキスト宿泊ルートが残っています。
コネクタは、暗号化された輸送、アクティブ保持ポリシーおよびプロバイダのメディア参照を報告し、検証可能な削除をサポートしなければなりません。
会議を暫定したAIと、AIの参加を虚偽に示します。人間のインタビューやテキストの宿泊施設パスを使用可能にしてください。
コールバックをヒントとして記録し、プロバイダに問い合わせます。認証されたステータス応答のみがチェックを更新する場合があります。
一般利用API正規の人事業務および定形外部システム用のコネクタ契約を管理します。
送信JSONにほんご POST /api/v1.php. 実行中の表面を通すことを発見して下さい meta.actions, OpenAPI で /api/v1/openapi.php, ポストマン /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 必要に応じてのみ。 ターゲット管理者ルートは、独自の許可をチェックアウトします。 書き込みには安定した出金キーが必要です。 高リスクの書き込みには確認が必要です。 不確定なタイムアウト後に同じ鍵とクエリ回復状態で一時的な障害を再試行してください。
Write. Scope: hr.write. Provision seatless employee access and send the invitation. Required: person_uuid.
Write. Scope: hr.write. Lift an employee access suspension (written reason required) and provision again. Required: person_uuid, reason.
Read. Scope: hr.read. List a person's identity facets and open conflicts. Required: person_uuid.
Write. Scope: hr.write. Link an identity facet to a person. Required: person_uuid, facet_type, facet_key.
Read. Scope: hr.read. Read the organisation tree.
Write. Scope: hr.write. Create an HR person. Required: display_name.
Read. Scope: hr.read. Get one HR person. Required: person_uuid.
Read. Scope: hr.read. List HR people.
Write. Scope: hr.write. Update an HR person. Required: person_uuid, display_name, primary_email.
Read. Scope: hr.read. List job postings.
Write. Scope: hr.write. Create a requisition. Required: title, openings, justification.
Read. Scope: hr.read. List requisitions.
Read. Scope: hr.read. Read courses, paths and enrolments.
Read. Scope: hr.read. Read leave types and requests.
Read. Scope: hr.read. Read HR connector accounts, conflicts and deliveries.
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.
Read. Scope: hr.read. One connector account's health: certification level and scope, last reconciliation verdict, failures and webhook backlog. Required: account_uuid.
Write. Scope: hr.write. Release booking slots whose claim never became a booked meeting.
Write. Scope: hr.write. Connect the AI to interview media; refuses unless media really reaches the worker. Required: media_uuid.
Write. Scope: hr.write. Record or withdraw consent for ONE interview purpose (recording, biometric_liveness, transcription). Required: media_uuid, purpose, state.
Write. Scope: hr.write. Pause a live interview. Required: media_uuid.
Write. Scope: hr.write. Provision an interview room (a place to meet — NOT AI participation). Required: session_uuid, transport, accommodation_route.
Read. Scope: hr.read. Read an interview room, including whether the AI is actually participating. Required: media_uuid.
Write. Scope: hr.write. A human takes the interview; the AI cannot speak in it again. Required: media_uuid, reason.
Write. Scope: hr.write. Close an agent incident — the same act that lifts the suspension it caused. Required: incident_uuid, resolution.
Write. Scope: hr.write. Run one agent step: gate verdict, execution and outcome reported separately. Required: run_uuid, agent_key, tool_key, jurisdiction, purpose.
Read. Scope: hr.read. What actually happened at a step (permitted, executed, proven, failed, compensated). Required: run_uuid, seq.
Write. Scope: hr.write. A human takes an agent run; no further agent steps are accepted. Required: run_uuid.
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.
Read. Scope: hr.read. List the registered typed tools an agent may use, and open agent incidents.
Read. Scope: hr.read. Every lifecycle lane with its mode, KPIs and whether a live tool path really exists behind it.
Read. Scope: hr.read. What this product may do in one country, per feature, with the law behind each answer. Required: code.
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.
Read. Scope: hr.read. Computed coverage for every market: released pack, named counsel owner, cited sources, passing tests.
Read. Scope: hr.read. Why an action about one person is allowed, reduced or blocked, with the rule and citation. Required: person_uuid, feature.
Write. Scope: hr.write. Put a drafted policy pack into effect; refused without a named counsel owner and a cited law. Required: release_uuid.
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.
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.
Write. Scope: hr.write. Bundle recent reviewer corrections into a dataset; it is pending privacy review and trains nothing.
Read. Scope: hr.read. The AI quality board: sampled defect rate, override pressure per workflow, coaching reception.
Write. Scope: hr.write. Delete a workforce conversation; refused while it is under legal hold. Required: thread_uuid, reason.
Write. Scope: hr.write. Place or lift a legal hold on a workforce conversation. Required: thread_uuid, on, reason.
Write. Scope: hr.write. Set a conversation's retention class (standard|extended|permanent). Required: thread_uuid, retention_class.
Write. Scope: hr.write. Run the conversation retention sweep; legal holds are never swept.
Read. Scope: hr.read. Measured persona experience metrics (self-service rate, decision cycle, coaching usefulness, quality) from live journeys.
Read. Scope: hr.read. The whole launch picture: 15-gate leadership score, release readiness checks and jurisdiction coverage.
Read. Scope: hr.read. Run the HR release readiness report.
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 送信専用です。契約には従業員のメッセージング読み取り方法はありません。
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、決定的なidempotencyを運んで下さい、そしてtimetampedを支える HMAC Webhooks は、プロバイダのリクエリで常にヒントを受け取ります。
プロバイダコールバックを受け取る3つの公共ドア: 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は、現在アウトバウンド型Webhookイベントを提供しません: webhooks.events.list 権限と名前はどれも hr 家族、そう poll を hr.* 読み込みまたは使用 hr.connectors.health.
読み込み doc/contracts/PEOPLEOS_HR.md あらゆるオペレータのための自己ホストされた取付けで、API、コネクター、webhookおよび解放の規則。
マーケットプレイスのパッケージには README.md, DEVELOPER.md, connector_contract.json, hr_profile.json 署名されたファイルマニフェスト。
ローンチクレームは、証拠から計算されます。パッケージの信頼性、プロバイダ認証、法的承認、公平性評価およびアクセシビリティ検証は、非審別的です。
PHP の構文、HR PHPUnit、route/API parity、OpenAPI/Postman チェック、パッケージマニフェストと JSON スキーマ検証を実行します。
採用、AIレビュー、インタビュー/ビデオ、オンボーディング、署名、退去、給与、ポータル、通知、モダブル、コネクター障害パスをテストします。
デスクトップ、タブレット、電話レイアウトを駆動します。キーボード、フォーカス、ラベル、コントラスト、リフロー、ツールチップ、ダイアログ、通知スクロールと独立したナビゲーション。
実際のプロバイダの往復と削除、法的ポリシーリリース、代表的な公平性データおよび独立したWCAG認証を使用してください。
提出者とは異なるレビュー担当者は、コネクタを承認し、証拠を解放します。その証拠が期限切れた場合、コネクターを再発行またはキルスイッチ。
認可されたパッケージ署名がないので、ファイルを変更していません。サードパーティのアカウントは機能しません。
決定的な行動と状態遷移が適合します。それは本当のプロバイダ、残留期間または削除を証明しません。
特定のワークスペースアカウントは、デュアルコントロールの下で5つのプロバイダ側の義務を渡しました。
名称表面に自動的・評価の証拠が存在します。2人目の検査ではありません。
必要なゲートは同時に緑で、証拠が期限切れ、回収、欠落またはライブヘルスによって矛盾されていない。
インストールはパッケージの存在を証明します。それを有効にし、実際の少なくとも優先資格情報を保存し、接続テストに合格してから、一致するPictureOSアカウントの生産範囲を正規のプロバイダ証拠と異なる査読者を使用して付与します。
コールバックは有効ですがヒントのみです。Webhookの受信トレイ、プロバイダステータスエンドポイントと調整結果を確認します。 PeopleOSは、再クエリ後に権限のある状態を変更します。
meta.actions を呼び出し、hr と platform.hr のフィルタリングを行います。/api/v1/openapi.phpそして、/api/v1/postman.php.同じランタイムレジストリから生成されます。
ヘルプセンターは、公開記事から構築されたセルフサービスヘルプサイトです。顧客は自分のパブリックページでそれを読み、検索することができ、チャットウィジェットの右側にあるため、会話を開く前に自分自身に答えを見つけることができます。あなたの知識ベースから来るすべてのもの、あなたのAIを基調とした同じコンテンツもあなたの公共の助けを借ります。
清潔で検索可能なヘルプサイト /help.php. お客様が、カテゴリから閲覧したり検索したり、記事を開いたりすることができます。お客様は、自分の名前とスタイルを指定できます。
チャットウィジェットのヘルプリンクなので、チャットを離れることなく記事を検索できます。まだ人がいる場合は、会話を開始してから1タップかかります。
行き方 Config, then Help Center 管理者で、オンに切り替える 公共ヘルプセンターを有効にする.
ヘッダーとブラウザタブに表示されているヘルプセンター名を設定し、ビジュアルスタイルを選択します。メニューなしでクリーンなページでトップナビゲーションをオフにできます。
投稿記事を公開するまでのショーは何もない。次の部分がどのようにカバーする。
記事は、あなたの知識ベースに住んでいます。 記事は公開され、公示されるとヘルプセンターに表示されます。 これを行うにはいくつかの方法があります:
記事を開き、公開されたマークをマークし、ヘルプセンターで表示するオプションをクリックします。
利用する 公開する すべて ボタンを押して、公開されたセット全体をワンクリックでヘルプセンターにプッシュします。代わりにそれらを一度に1回実行します。
既にFAQがありますか? 使用 助けるためにすべてのものを公開する 助けを借りて記事に変えるには、他のすべてのものと一緒に座ってください。
別のヘルプデスクから移動する? インポート KB 記事タブのボタンは、既存の知識ベースをあなたのために持ってきます。 あなたのコンテンツでそれを指す3つの方法があります:
現在のヘルプセンターのアドレスを指定します。プラットフォーム(例えば Zendesk)を認識すると、そのプラットフォームから正確なカテゴリツリーを読みます。そうしないとサイトをクロールし、ページから構造を再構築し、実際の記事のみをインポートしてログイン、価格設定、および連絡先ページをスキッピングします。
既にこのワークスペースに接続されているプラットフォームで知識ベースを保持している場合、下落に表示 接続されたアプリからインポート. 選択してインポート、 URL やパスワードは必要ありません。接続されたあとにアプリはリストされます。
ライブサイトをポイントしませんか?スプレッドシートをアップロードする title, categoryと body カラム。 Parent / Child ネストされたカテゴリを作成するためにカテゴリの列で。
どの方法を選ぶか、あなたを得る プレビュー初: 見つかった記事、カテゴリ別にグループ化、チェックボックス付きそれぞれが、あなたが望まないものをドロップすることができます。 インポートをクリックするまで保存されていないもの。 その後、あなたはできる ユダ ワンクリックでインポート全体が、または 再同期 後で URL または、接続アプリのインポートを新規および変更された記事をプルします。
kb_capabilities ブロック settings.json (タイプ) kb_source, と adapter と、 base_template)。コネクターセクションおよびプラットホーム コレクターの参照を見て下さい。ティディヘルプセンターは、検索が簡単で簡単にできます。 AIと組織する ボタンはあなたのために縛りません。 1つで、公開された記事を読み、それらをセンシブルカテゴリにソートし、タグを追加します。 それは1つを必要とするときにカテゴリを作成して、既に収まるカテゴリーを再使用し、あなたがすでに組織しているものをスキップしますので、新しい記事を追加するときに再びそれを実行することができます。 オンにする AIがサブカテゴリに整理する で ヘルプ センターの設定と、ネストの下に記事をファイルすることもできます Parent / Child サブセクションを持っていた知識ベースをインポートした後、カテゴリは便利です。
チャットウィジェット内でヘルプセンターを右表示できるので、メッセージの前に回答を検索できます。チャットウィジェットの設定で、ヘルプリンクが表示されている場所を選択します。
ウィジェットの上部にある小さなヘルプアイコン。
「ブラウスヘルプセンター」など、メッセージボックスの下のテキストリンクです。 ワーディングを変更できます。
ヘッダーと下部に表示して、最も可視性が向上します。
ヘルプリンクには、ウィジェットの外観設定で独自のカラーコントロールがあります。 なし 起動カラーに合わせ、または選択する ソリッド 色または色 グラデーション. 全体ヘルプ体験はウィジェットのテーマに従っており、ブランドの一部として常に見えます。
既にヘルプセンターにクリーンで共有可能なアドレスが含まれている箱から外(例えば /help/your-help-center)。 1つのステップをさらに進め、あなたの下でそれ役立つことができます ドメイン、従って顧客および検索エンジンはあなたのブランドの一部としてそれを見るように、例えば yourdomain.com/help または help.yourdomain.com. すべてのドメインで作業を続けます:リンク、画像、検索、記事の評価。
でん Config, その後、ヘルプセンター、開いた 埋め込む タブで「自分のWebアドレスにヘルプセンターを表示」を見つけます。設定(Cloudflare、NginxまたはApache)を選択し、既製のブロックをコピーし、サイトに貼り付けます。各オプションには、それぞれオプションがあります セットアップガイド ボタンを横に、そのステップを正確に操作します。
プレッシャー help.yourdomain.com?同じパネルにはサブドメインオプションがあります。Cloudflare ではサブドメインが最も信頼できるルートであり、その後何もクリーンなアドレスを提供します。
help.yourdomain.com. セットアップガイドは、DNS レコードとルートを1つずつ歩きます。単一粒子の投票を超えて、ヘルプセンターは独自のものを持っています アナリティクス. ヘルプセンターの設定でそれを切り替えて、人々があなたの助けをどのように使うかを静かに記録します。最も見られた記事、彼らが検索するもの、そして空の戻ってきた検索(既製のトーライトリスト)、訪問者の国やデバイスを自分で作業するので、レポートにインストールされたチャットウィジェットを必要としません。 すべての番号は、それぞれのために示されています 両方とも 助けが現れ、公開ページとウィジェットのヘルプだけでなく、組み合わせて、各人が実際に使用しているどのくらいの量を見ることができます。
ヘルプセンターの各セクション(ホームページ、人気記事、カテゴリページの記事一覧など)には独自のシンプルなルールがあります。各セクションでは表示または非表示にしたり、表示したりすることができます 全て すべて アイテム、 設定番号あの 最新記事またはあなただけのもの 機能紹介 星付き。ルールがリストをキャップすると、顧客はまだ「すべてを表示する」リンクを取得しますので、本当に到達していない。
また、役に立つ投票がどのように見えるかを決めます: 隠されて, 優しい比率 "12 のりば 14 この役に立つか、または明白な親指数を発見しました。 最小限の投票設定は、awkwardを示す新しい記事を停止します "0からだ0".
あらゆる記事が紹介されています。 こんなに役立たせましたか? プロンプト。 はい、または記事ごとにカウントされていないので、質問に答える記事がよくあると書き換えが必要なグレンスで見ることができます。同じ訪問者から繰り返した投票は無視されます。そのため、数が正直にとどまります。
ヘルプセンターの見出しとラベルを変更して、音声にマッチさせることができます。フィールド空白のままにして、センシブルなデフォルトに戻りますので、実際に変更したい単語を編集するだけで済みます。
いいえ。既に使用しているAIと同じ知識ベース記事から構築されています。一度記事を出版して、両方にサービスを提供できます。
はい。公開された記事のみで、ヘルプセンターに公示が現れます。未発表のものはそのまま残っています。
はい。ウィジェットは、会話を始めるのからタップを離れた場所にあるので、誰にも侵入しないでセルフサービスします。
サイトインテリジェンスは OpsIQ's組み込みSEOと検索可視化スイート。検索エンジンのようなサイトをクロールし、ランク付けするトラック、キーワードの調査、バックリンクや競合他社の時計、ローカルマップの存在感をスキャンし、ページの速度をチェックし、すべての顧客の準備レポートにそれをオンにします。AIアナリストは修正と修正案を作成できることを説明しています。それはプレミアム機能です。サイドバーにあるサイトのインテリジェンスとして有効になっているとき。ドメインのすべてのデータは、決して別々のデータが保存されず、更新されたりすることはありません。
サイトインテリジェンスは、それを運ぶ計画の一部です。 ないプランでは、PepsOS HRのように正確に動作します:アカウントの所有者が開きます 口座 → アドオンとトークン, サイトインテリジェンス層を選択し、無料のトライアルを開始したり、直立して追加. 無料プラン, または独自の計画試験内ではまだ有料の計画, それを追加することはできません. それは、スイートを所有しているまでは、サイドバーから隠され、直接リンクはアドオンを提供しています; ティアキャップがページに到達したときに次の層を提供します。購入なしで試用終了時にエンタイトルを削除し、何も請求されません. 入札と価格がアカウントに住んでいるので、現在の階層を閲覧 プライシングページ.
cwl は、検索エンジンが技術的な問題を見つけるために、あなたのページにアクセスする OpsIQ です。壊れたリンク、不足しているタイトル、薄いコンテンツ、遅いページ、インデックスの問題。
概要で、クロールを開始するにはクリックします。 OpsIQ キューに入れ、背景にあるページを通して動作します。ステータスインジケーターは進行状況を表示します。
終了すると、問題やページリストを開きます。各号は重大化してグループ化され、最初に最大の勝利に取り組むことができます。
AIアナリストは、誤ったこととなぜ問題の明白な言語の簡単な作成を分析し、適用する前にレビューを示唆した修正を生成することができます。
技術的なSEOの問題のページにスキャンし、問題のあるすべてのページをリストします。いつでも再実行するか、スケジュールします。
気にしているキーワードを追加します。 OpsIQ サイトのランクを把握し、時間をかけて動きを追跡する場所を確認します。
ターゲットに新しいキーワードのアイデアを発見し、AIキーワードコーチが優先順位を上げます。
誰がリンクしているか、リストを更新し、サイトに関連付けられたくないリンクを解凍します。
競合ドメインを追加し、AIの競合分析で自分の視認性を比較します。
地理的なグリッド全体でローカルリストの可視性をスキャンして、地図上に表示する場所とGoogleビジネスプロファイルツールを確認します。
ページ速度チェックを実行して、ランキングやコンバージョンを傷つける遅いページを修正することができます。
ターゲットを絞るキーワードで目的とするコンテンツの簡略化とドラフトを生成する。
上記すべてのものをプリント可能で、顧客対応のレポートを作成できます。
2つのGoogleのコネクターは実数に推定を向けます:
正確なクエリをプルし、あなたのサイトのためのGoogleのレポートをクリックし、あなたの財産をマップし、Google自身のデータから直接顔のランキング機会を正確に表示します。
SEOデータとともにトラフィックとエンゲージメントデータを収集するため、レポートは可視化と行動を一緒に表示します。
手動ですべてを実行する必要はありません。スケジュールされた更新は、再実行クロール、ランクチェック、キーワードチェック、バックリンクリフレッシュ、ローカルグリッドスキャンおよびレポート生成を10年(計画とボリュームに応じて毎日または毎週)更新します。これらは OpsIQ cron を介して実行し、Cron と自動化セクションを参照してください。印刷可能な顧客対応文書として生成されたレポートエクスポート:エージェンシーは、各クライアントに定期的なSEOアップデートを送っており、各ドメインが独立している間、独自のデータのみがデータを分離しているためです。
クエリは、サイトに触れずに、Crawls、ランクトラッキング、キーワードリサーチ、バックリンクを操作できます。トラフィックと正確な検索データについては、Google Search Console および GA4 を接続します。
はい。各ドメインを別々に追加します。クロール、ランキング、レポートはそれぞれ別のドメインから完全に分離されます。
毎週は、ほとんどのサイトではたくさんあります。大きなコンテンツや構造変更後の需要を這いましょう。スケジュールを設定して忘れないでください。
自動インポートは、実際にクロールとAIアナリストの推奨事項を修正するサイトインテリジェンスの一部です。, あなただけに助言. エージェントは、すでに見つけたサイト知性から厳密に動作します (それは変更を発明することはできません) そして、同じ安全なループを介して各修正を歩く: ドライランプレビュー, あなたのステップごとの承認, ライブ書き込み, 自動スナップショット, そして、オープン・issueがダウンしたことを証明する再ロルクラ. それは、それがターンアウトされたアクションとして表示されます (あなたがそれを管理) それはあなたが唯一の機能として表示し、それまで、自動オンにします.
エージェントは、サイトインテリジェンス(またはAIアナリスト)がそのドメインを既に推奨しているという修正のみを適用します。サポートされているプラットフォーム全体でカバーします:
サイトマップ xml.htaccess (Apache/LiteSpeed) またはnginx config の、bots.txt およびリダイレクト、キャニカル、ヘッダルール。
複数のホップリダイレクトチェーンをシングルホップに固定して最後まで崩壊させる URL, 同じ管理された.htaccessブロック内の内部で, 速度とリンク値が余分なホップを介して漏れを停止します。.
ミスや弱ページタイトル、メタの説明、キャノンタグと構造データ(schema)ブロック。
Yoast、ランク数学とSEOPressタイトル&メタ、および画像altテキストは、WP-CLIを介して適用され、SSH パスまたはREST API ホストされたパスで。
追加する JSON-LD (schema) を欠落しているページ。SSH 小規模な管理ヘルパー(必須プラグイン)をパスすると、マークアップが印刷されるので、SEOプラグインの有無にかかわらず動作します。 ホストされたパスでは、SEOのプラグインはそれを運びます。
既存の WordPress コンテンツ内の関連リンクを 1 つ追加して、孤児のページを救助し、関連する投稿を接続します。見出し、既存のリンクまたはショートコード内ではなく、1 ページごとに1つのリンクを一つずつ作成し、最初に承認されます。
薄ページの完全置換コンテンツのドラフト(クロールオプションでオンに、以下を参照してください)。すべてのドラフツは、公開前にあなたによってレビューされ承認され、古いコンテンツを保存されるので、復元することができます。
画面が速度の問題を見つけたときにW3 Total Cacheページキャッシュをオンにすると、プラグインがインストールされているので、ページはより高速になります。
製品および収集 SEO タイトル & 説明, ページとブログ記事 SEO, プラス 301 リダイレクト、Shopify アドミン API.
パーページSEOタイトルとメタの説明 Webflow データデータ API v2. の
ドメイン(そのクロール設定)用のサイトインテリジェンスの設定パネルには、エージェントが時間前にどれだけの行を上げるかを決定する2つのオプションがあります。 どちらもデフォルトでオフであり、AIクレジットの両方を使用しており、作業が完了したときにのみそれらを切り替えます。
それぞれのクロールは、それが見つけたもののために具体的な修正コンテンツ(タイトル、メタの説明、altテキスト、スキーマ、リダイレクト)を書きます。そのため、修正は後で要求に基づいて生成される代わりにクロール仕上げの瞬間を見直して適用する準備ができています。各クロールでAIクレジットを使用します。
エージェントは、薄いページのための完全な置換コンテンツを作成することができます。 決して自分自身で公開されていません: 各ドラフトは、サイドの見直し側を変更し、承認または拒否すると表示されます、以前の内容は再利用可能なので、それがパスごとにいくつかのページに限定されています。 1つのドラフドあたりのAIクレジットを使用してください。
自分のサーバー上のサイトの場合、エージェントは接続します SSH/SFTP 保存する資格情報を使用して、サーバーの設定とページファイルを直接編集し、WP-CLIを実行します。WordPress. シェルアクセスとファイルの完全な制御が必要な場合に最適です。
許可しないプラットフォーム SSH エージェントは、正式に完全に機能します API コネクター, WordPress (REST + アプリケーションパスワード), Webflow (データ)API v2) と Shopify (管理者)API)。ホストに何もインストールされていません。
エージェントは、各プラットフォームにコネクタを介して到達します。
Shopify そして、WordPress コネクターはと出荷します OpsIQ コネクターの下にそれらを有効化し、ストア/サイトの認証情報を追加します。
Webflow、コネクタ→マーケットプレイスからWixとSquarespaceをインストールし、同じように接続します。
サイトインテリジェンスセクションからオート・イポメンメント(ロケット)を開きます。 既にこのドメインで修正できる問題が見つかったSite Intelligenceのリストです。
あらゆる修正のために、エージェントはライブサイトに触れる前に、ドライランの差分(正確に書き出すもの)を示しています。
それぞれ変更を承認(またはスキップ)します。そのステップで明示的なgo-aheadなしで何も適用されません。
承認すると、エージェントはライブ交換をします。SSH またはホストされている API スナップショットを最初から保存しますので、変更はロールバックできます。
エージェントが直接、その正確なページを再チェックし、「固定ライブ」の対比を示すので、各修正地をライブページの上で表示します。最後にはサイト全体を再クロールし、オープン・イシューカウントが低下することを確認します。
エージェントは、そのドメインで推奨されるサイトインテリジェンスのみを実行できます。サイトのまたはサーバーに任意の変更を行うことはできません。
それぞれの書き込みは、特定のステップを承認した後にのみ、差分としてプレビューされ適用されます。
それぞれの書き込みの前にスナップショットを保存します。そのため、変更は再変換できます。
各変更されたページは、書き込みされ、「修正されたライブ」の評論を取得する瞬間を再チェックされます。そのため、閉じたリカールだけでなく、すぐにライブページに固定が確認されます。
内部リンクと薄ページのコンテンツの書き換えは、より高い影響です。そのため、承認のために常にあなたに表示され、実行するモードに関係なく自動的に適用されません。
管理されたAI上で自動展開が実行されます。ワークスペースが独自の(BYOK_)キーを使用しているときにブロックされます。
これらを使用するように、AIトークンは普通に請求します。また、同じマネージド・エイクレジットから引き出されるオート・イポメンションセッションごとに1つのフラットなパーユース料金です。
いいえ。 変更は、ドライランの差分としてプレビューされ、そのステップを承認した後にのみ適用されます。 スナップショットは各書き込み前に保存されるので、ロールバックできます。
コメントはありません。WordPress, Shopify または Webflow. これらは、彼らの公式を通して働いています APIs シェルアクセスなし。SSH エージェントがサーバーの設定とファイルを直接自分のサーバー上で編集するのを望むときに使用した2つのパスの1つだけです。
承認された修正を適用した後、エージェントはサイトを再クロールし、前後のオープン・issue カウントを表示し、問題が減少した問題を修正を確認することができます。
いいえ。AIコンテンツの書き換えは、クロールオプションでそれらをオンにするまでオフです。それらはパスごとにいくつかの薄いページに限定されています。すべてのドラフトは、公開する前にサイドバイサイド承認のためにあなたに示されます。以前の内容は保存されているので、書き直しは常に反転することができます。
いいえ。自動実装はマネージドAIのみであり、ブロックされている BYOK. それは同じマネージドAIのクレジットから、通常1回のセッションあたりのフラットパーユース料金とAIトークンを請求します。
調査スタジオは、豊富なスタンドアローンページ、ウェブサイトウィジェットまたは埋め込みインラインとして配信できる編集可能なアンケートを作成するためのワークスペースです。 現在の製品は、ホストされたリンク、署名済みのプレビュー、プライベート招待状、QR共有、応答閲覧およびアンケートスコープ分析を提供します。 ウェブサイトウィジェットは1つの配送選択です。それはアンケートの定義ではありません。
survey 機能、および調査所有のプロバイダレジストリ/健康境界が今利用可能です。 調査スタジオは依然として独立した複数の開発アーキテクチャ、署名されたトークン調査アイデンティティゲートウェイ、ターゲティング/可変配線、CRMアウトリーチ送信フローとタイプが必要です surveys.* API.現在のウィザードは、スタンドアローンページとリンク、ウェブサイトウィジェットおよびインライン埋め込みを提供しています。承認されたターゲットフローは、アンケートタイプで始まり、その後、CRMメール、プライベートリンク、QRのデプロイを一流選択として追加します。
NPS、CSAT、CES、製品フィードバック、後購入、キャンセル、オンボーディング、ウェブサイト、イベント、ウェビナー、サポート、リード/デモ、試験、定例、研究、従業員、インテークまたは一般的なフィードバック。
現在のカタログは、目的別にグループ化された編集可能なスターターを用意しました。テンプレートを選択すると、コピーされたドラフトを作成します:アンケートの変更はスターターや別の調査を変更しません。
カスタマイズは、すべての質問、設計、行動および配達制御を開きます。クイックレビューは、最終顧客ビューチェックで同じ草案を開きます。何も公開したり、自動的に送信しません。
自社の URL_ で、レスポンシブなブランドページ。各受信者が管理されたリンクを必要とするときにプライベート招待状と有効期限を使用してください。このホスト体験ではQR共有ポイントが提供されます。
移行されたレガシーチャンネル。ページ、地理、デバイス、訪問者、日付、サンプリング、クールダウン、訪問およびクォータルールを使用できます。デプロイアーキテクチャが構築される間、それはまだ遺産のアクティブウィジェットブリッジによって支えられています。
ページ、ポータル、製品またはヘルプセンターに設置された応答性の調査。プロモーションスタジオを必要としません。
今日はスタジオが招待状を生成できます HTML そして、プライベートリンク。 承認、抑制、スケジューリング、再試行および応答の相関とCRM連絡先/セグメントからのエンドツーエンド送信は、承認されたCRMアウトリーチ統合ターゲットです。
調査ページには、アンケートに登録されたテーマとページレイアウトの家族、レスポンシブコントロール、歓迎および完了コピー、署名されたドラフトプレビューがあります。デザイナープレビューは、エディタの下にあるフル幅で狭いサイドレールではありません。サンドボックスフレームでホストされているランタイムを使用して、デスクトップ、タブレット、電話の幅をサポートし、プレビュートラフィックは応答や分析を記述しません。
一つは、別々にバージョンアップされたページ、ウィジェット、埋め込み、CRMメール、プライベートリンク、QRの展開があり、それぞれ独自の状態、デザイン、オーディエンス、分析が可能です。 すべての調査は、パユース、無効または削除することができます。
CRMセグメントと調査対応コネクタから検証されたオーディエンスを構築し、公平なバージョンに凍結し、それぞれ署名した招待状を発行し、ピン留めされたアウトバウンドメールコネクターを介して送出します。
スライダー、画像の選択、ファイルアップロード、シグネチャ、アドレス、電話、見出しと豊富なテキスト、最小/最大長、電子メール/URL/number プリセット、カスタムエラーテキストとリクエストプレフィル URL パラメータ。
および/または条件グループ、ブランチルール、回答に対する安全な式エンジン、独自の結果ページを運ぶスコアバンド:その評決で評価されたクイズの土地。
訪問者の言語ドロップダウンは、実際の翻訳、共有タブレット(大文字ターゲット、自動リセット、リダイレクトなし)用のキオスクモード、プレフィルリンクビルダー、編集可能なセキュアバッジとフッターテキストのみをリストしています。
トラフィックの分割で任意の展開にチャレンジ版を公開します。訪問者は、きちんと割り当てられ、応答は実際に提供されるバージョンとスタンピングされ、比較表には、応答、完了、および平均スコアが1つのバージョンごとに表示されます。ワンクリックで勝者を宣伝してください。
先週のメールが届きます。7調査KPIの日, 忙しいアンケート, フィードバックパルスと最新のAIブリーフィング, ピン留めされたアウトバウンドコネクタを介して送信. 配送センターでそれを構成します。, オートメーション.
調査アクセスリストは、アンケートを編集したり公開したり削除したりできる制限をします。承認書(4目)を公開するには、2番目の管理者が正確リリースする必要があります。編集は承認をリセットします。ドラフト共有リンクでは、ログアウトせずに実際の草案を見ることができます。
コネクタ 2.2、タイプされた調査。*およびフィードバック。*の行為 api/v1、正式な調査。* イベント、Slack と Google Sheets のリレーフォーマットで耐久性のある署名された webhooks、および 1 つの応答 PDF 輸出。
調査分析は、アンケート自体が人々やパフォーマンスに到達している方法を説明します。フィードバックでは、すべての許可されたソースとビジネスがそれについてすべきことについて顧客が言うことを説明しています。2つの製品は互いにリンクしますが、分析的真実を共有したり書き過ぎたりしません。
サーベイススタジオの個人調査から、グローバルサイドナビゲーションではなく、個別のアンケートに入力。適格性、暴露、トリガー動作、開始、完了、放棄、質問とブランチの摩擦、タイミング、展開/キャンペーン/バージョン結果およびランタイム信頼性を測定します。
完全な調査応答、レガシーウィジェットのフィードバック、チャットおよびチケットCSAT、チケットの回答フィードバック、顧客AI-answerの評価、ナレッジベース有用な投票と承認された外部/カスタムソースのための1つの許可認識クロノロジーフィード。
顧客の意味を分析:元のメトリックの傾向、トピック/テーマ、感情、意図的、緊急性、要求、苦情、賞賛、旅行/製品/サービス/チームセグメント、減任者およびクローズドループ結果。
調査回答は、調査ストレージにおいて承認され続ける。フィードバックは再構築可能なソースリファレンスと派生した信号を保存し、要求に対する許可された証拠を読み込みます。1つの完成したアンケート応答は、ほとんどのフィードバック項目になります。
NPS、CSAT、CES、星、親指、有用性は、常に元の方法、スケール、サンプル、日付ウィンドウおよび除細分器を保持しなければなりません。 彼らは決して1つの無説明平均に結合してはならない。
プロモーションスタジオは、ウェブサイトをコンバージョンエンジンに変えます。ポップアップ、バナー、スライドイン、トップ/ボトムバー、フルスクリーンのテイクオーバー、インラインブロック、さらにはカントリーベースのリダイレクトを設計し、適切な瞬間に正しい訪問者に正しいメッセージが表示されます。 すべてがあなたのサイト上で既に OpsIQ ウィジェットを介して配信されるので、インストールには余計なものはありません。 あなたはキャンペーンをいつでも設計し保存します。 彼らはあなたが公開したら、彼らはあなただけを表示し、あなたのワークスペースのために切り替えられます。
1つのプロモーション:ポップアップ、バナー、バー、スライドイン、フルスクリーン、インラインブロックまたはジオリダイレクト。それぞれが目標があります:販売、リード、サインアップ、チャット、アンケート、発表。
ビジュアルエディタで見栄えを築きます。保存すると新しいバージョンが作成されますので、常にロールバックできます。何も失われません。
誰がそれを参照してください: 国、ページ、デバイス、トラフィックソース、新しい対を返す、スケジュール、および(コネクタ付き)ログインした顧客。
表示されるとき:即座に、遅延時、スクロール時に、終了予定のときに、アイドル時、クリック後、Nページ以降、またはチャット/チケットアクティビティから。
ライブインプレッション、クリックスルー、コンバージョン、ドロップオフファネル、国/ページ/デバイス分割、A / B勝者とAIの洞察。
プロモーションスタジオを開き、新規キャンペーンをクリックするか、テンプレートギャラリーから既製のデザインを選ぶか。デザイナーにドラフトが開きます。
ブロック、見出し、テキスト、ボタン、画像、バッジ、ステータス、カウントダウン、フォーム、クーポン、ビデオ、評価、スピンホイールをドラッグします。 スタイルカラー、グラデーション、および3Dエフェクトはスライダーで表示します。 [デスクトップ/タブレット/モバイル]プレビューし、どこにでも自由に移動してください。
のようなトークンの種類 {first_name}, {country} または {company} どんなテキストにも。ショータイムでは、訪問者の実際の値になります。
火を浴びるとき(国、ページ、デバイス、聴衆)、またはその様子を見る人を選択します。ルールは全員を意味します。
クイックプレランチスキャンのチェックをクリックし、公開します。秒単位でライブを行い、分析を収集します。
見出し、段落、リスト、引用符、画像、アイコン、バッジ、ステータス、ディバイダーおよびスペーサ、メッセージのビルディングブロック。
実際のアクションでボタン:リンクを開き、チャットを開始し、チケットを作成したり、クーポンをコピーしたり、ページに移動したりします。
カウントダウンタイマー、フォーム(電子メール/電話/テキスト)、クーポンは、ビデオ埋め込みを明らかにします。
スピンツーウィンホイール、スクラッチカード、NPS /スター評価とマルチステップファネル。
コラム、進捗バー、社会的なシェア、社会的証拠のクチラー、はい/いいえ2ステップ、クイズ、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 経由で表示する。地域固有のオファーやジオリダイレクトに最適です。
等しい/開始と/含む/regexを使用して特定のページに制限し、またページを除外します。
デスクトップ、タブレット、モバイルなどのスリムなバー、デスクトップ上のモーダル。
新しく、返還、既知の(CRM)または匿名; CRMセグメント, ライフサイクルステージ, リードスコアやブラウザ言語.
UTM(utm_source、utm\_campaign)または参照サイトでは、特定の広告からのみ訪問者が許可されます。
開始/終了日、曜日のウィンドウと、その人がどれだけ見えるか(セッションごとに、1日あたりのセッションは、閉じた後 / クリック/変換)。
訪問者の割合を表示し、バリアントを頭に動かします。同じ人はいつも同じ variant を見ます。
コネクターが有効になっていると、ライブアカウントの状態でターゲットを絞って、例えば未払いの請求書やアクティブ加入者を持つ顧客など。
プロモーションがどのように表示されるかを選択します。即時に、遅延後、スクロール深さ、終了意図上、要素のクリックで、フォーム・アバンドン、またはチャット/チケットアクティビティから閲覧されたページ数が数回後に、idleが、要素をクリックしたときに表示されます。開発者は、独自のコードから1つを発行することができます window.OpsIQPromo.fire('event').
これは、OpsIQ プロモーションスペシャル:プラットフォームを好きなように接続 WHMCS (または聴衆をサポートするコネクタ)とスタジオは、ライブアカウントの状態で訪問者をターゲットにすることができます。
コネクターの下、聴衆の事実を露出させる1を有効にして下さい(WHMCS 箱から出ます)。顧客はそのプラットホームに記録されたとき安全認識されます、OpsIQ 型付きメールを信頼しない。
キャンペーンのターゲティング > オーディエンスでは、ログインして、未払いインボイスのようなルールを追加する必要があります。 >= 1, サブスクリプションは、過去デューです。, またはアカウントのクレジット > 0.
など、トークンを使用する {first_name} または {balance_due}. 「あなたは、過剰な請求書を持っている」リマインダーはそれ自体を書きます。
製品ブロックは、実際のアイテム(名前、価格、販売価格、画像、リンク)を直接引きます。WHMCS, WooCommerce, Shopify または、OpsIQ 請求。 「新鮮なキープ」とカードは、公開されている間に1時間ごとにプラットフォームから価格を更新します。
クーポンブロックは、公開する瞬間に店舗内の実際の割引コードを作成できます。そのため、コード訪問者はチェックアウト時に常に機能します。
プラットフォームからの実際の注文は、キャンペーンに1時間後にマッチします(クーポンコード使用またはリードのメールによる)ので、実際の販売から表示される収益が予測されることはありません。
社会的防護チッカーは、正式な最近の注文(「Ada order・ 2h」)を、最初の名前と項目だけに導き、メールや量はありません。
設計のバリエーションを横断したトラフィックを分割します。スタジオは、自動的に統計的な勝者を促進するか、訪問者が証拠として変換する方向にシフトするバンドリフターへのハンドトラフィックを促進させます。
何も見ていない訪問者のスライスを予約するので、キャンペーン自体がリフトを引き起こすことを証明することができます。
キャンペーン(モバイル訪問者、ビッグカート、リピーター)の各セグメントのオーディエンスごとに異なるコンテンツが独自のバージョンになります。
バリアントはWHENをテストすることもできます。すぐに対遅延対出口インテント、測定されたヘッドツーヘッド。
別のキャンペーン(「Bを見たが、変換しなかった」)で複数のステップのプロモーションシーケンスを構築するために行ったことをターゲットに。
キャンペーンを閉じた後に小さな丸薬訪問者が再オープンできるので、クローズドポップアップは良いために消えません。
デザイナーは、ヒートマップを切り替えて実際の訪問者をペイントすると、デザインのすべてのブロックをクリックします。
複数のステップキャンペーンは、人々が画面で落ちる場所を正確に示します。
サイド(印象、クリック、変換)で最大4つのキャンペーン側を並べて、ハイライトされた最高の値を設定します。
毎週月曜日に通知でダイジェストランドを埋めます。 📖 週刊ストーリーボタンは、必要に応じて次のステップでプレーン言語の要約を書きます。
デザインコピロットとチャットして、キャンバスを編集します(「見出しを緊急にし、カウントダウンを追加」)。キャンペーンアイデアは、独自のトラフィックデータから取得し、国ごとにキャンペーンを翻訳したり、低設計スコアを自動修正したりできます。
ワンコマンドは、あなたのウェブサイトを読み込み、実際のブランドカラーやフォントを提案します。保存してすべてのピッカーがそれらをリードします。
ステップブロックは、画面ごとに真の編集を行います。各画面のタブ、追加または再オーダー画面、プレビューが続きます。
重要なバージョン(「Launch候補」)を名前付け、いずれかのファイルを復元し、チームメイトが同じキャンペーンを編集しているときに警告が表示されます。
デスクトップ、タブレット、モバイル側を1つのビューで参照してください。ピクセルのルーラを切り替えて正確な配置を行います。
キャンペーンは、バイオやQRコードのスタンドアローンホストページ、キャプチャされたリード用のメールドリップシーケンス、またはワンクリックWebプッシュドラフトでも行えます。
凍結ウィンドウ(変更フリーズ期間)、緊急一時停止スイッチ、承認、監査証跡およびバージョンのロールバックを発行します。
いいえ。既にインストールしたウィジェットと同じ OpsIQ でプロモーションが配信されます。デザイン、公開、完了します。
いいえ。 周波数キャップを設定(セッション/ 1日あたりの、または閉じた後に停止するか、クリックするか変換します)。 設定可能なデフォルトが適用されます。
ワークスペース所有者とフル管理者に、出版、パワセ、アーカイブおよびロールバックが限られています。任意のチームメンバーは、作成し、設計草案することができます。
プロモーションデザイナーは、キャンペーン体験の構築、レビュー、バージョンアップ、公開のためのレスポンシブブロックエディタです。
ブロックを使用して、サポートされたビューポートごとにプレビューし、承認されたパーソナライゼーション変数をプレビューします。リリース前にコメントとAI-mediaの実績を確認します。保存はバージョンを作成しているため、以前のデザインが検査または復元できます。
テンプレートは、プロモーションスタジオキャンペーンの検索可能なカテゴリの開始ギャラリーを提供します。
カテゴリで検索またはフィルタをロードし、追加の結果を読みます。完全な経験をプレビューしてから選択します テンプレートを使用する. 新しいキャンペーンは、公開前にプロモーションデザイナーに草案を残し、変更することができます。
プロモーション分析は、インプレッションを接続し、変換、オーディエンスのコンテキスト、コネクターアクションの成果とキャンペーン学習にクリックします。
印象を読みます, クリックスルー率とコンバージョンを一緒に. 国によって結果をブレイクします, ページ, トリガーおよびデバイス; 必要に応じて、キャプチャされたリードをエクスポート. コネクタアクション結果は、プロモーションの約束フォローアップが実際に実行されているかどうかを示しています. AIインサイトや学習要約は、検証する仮説として扱われるべきです, 自動証拠ではありません.
ウィジェット通知エリアに、オプションのターゲティング、スケジュール、行動への呼び出しなどのメッセージを公開する通知
訪問者、署名付きビジターまたは新規の訪問者をすべて選択してください。オプションで連絡先セグメントとページルールを持つオーディエンスを絞ります。有効/アクティブから日付とアクティブなフラグを設定します。プレミアムスタイルのプリセットと色はプレゼンテーションを変更しますが、明確なコンテンツには置き換えません。
キャンペーンをプッシュすると、サイトを離れた後にブラウザ通知が購読されます。
Webプッシュ設定で最初にWebプッシュキーを設定。 キャンペーンには、タイトル、ボディ、アイコン、ヒーローイメージ、バッジ、CTAと最大2つのアクションボタンが含まれます。 永続的な通知は訪問者が対話するまで残っています。
オーディエンス、オプションの連絡先セグメントとページルールによってターゲットを絞る。ドラフトを保存し、スケジュールするか、すぐに送信してください。サブスクリプションを使用して、メトリックをクリックしてリーチを判断します。 HTTPSおよび正しくホストされているサービスワーカーは、埋め込まれたサードパーティサイト上で必要です。サードパーティのサイトでWebプッシュを参照してください。
Cookie の一貫性のあるスタジオは、訪問者が確認するクッキーバナーを設計し、ビジネスにとって不可欠である何と定義し、各ビジターの領域に対する正しい行動を適用し、(直面的に)実際に同意を強化します。これにより、分析やマーケティングタグは訪問者が同意するまで実行されません。このバナーは、すでにあなたのサイトに OpsIQ ウィジェットを介して配信されます。それはプレミアムデザインスタジオです。バナーは作業スペースのために同意を切り替えるだけを示しています。
バナーデザインとフルカラーシステム(透明、ソリッド、グラデーション)の大きなライブラリから、ブランドに合ったものを選んでください。
ボタンラベル、ポリシーリンク、バナー位置、および選択の所要時間について細心の注意を払ってください。
独自のクッキーのカテゴリを定義し、ワー キング訪問者が参照します。 あなたは不可欠であることを決定します。 エッセンシャルは常にオンです。 他のすべてが許可または拒否するものです。
サイトをスキャンし、サイトをオンにしましょう OpsIQ AIは、すべてのクッキーとトラッカーを自動検出し、それを分類し、プレーン言語の目的を書きます。これにより、設定テーブルと自動ブロックが機能します。
同意が法律(下)によって動作し、グループドメイン共有、Googleの一貫性モードv2、および再構成間隔をオンにする方法を選択してください。
実際の訪問者の選択肢(受容率、カテゴリ)からあなたのワークスペースにスコープ付けされたライブ同意のステータスを参照してください。
EU/UK 訪問者はオプトイン(非必須の実行が許可されるまで)を取得します。米国の訪問者は、「販売または共有しないでください」オプションでオプトアウトします。 OpsIQ 場所によって訪問者ごとに決定されます。推奨。
ストリクト GDPR すべての訪問者にとって、受諾するまでの非必須ではありません。
訪問者がオプトアウトしない限り、タグが実行されます。
ブラウザグローバルプライバシーコントロール(GPC)とDo-Not-Track (DNT)信号は、どのモードを選ぶかを称えるものです。
ここにはバナーだけでなく、その実行を制御する:
<!-- This tag stays dormant until the visitor grants the "marketing" category -->
<script type="text/plain" data-opsiq-consent="marketing"
src="https://example.com/ads-pixel.js"></script>グループドメイン共有をオンにすると、サイトのいずれかで受け入れる訪問者は、このワークスペースグループ内の他の人に再び尋ねられません。 彼らの選択は、あなたが設定した日数のために渡っています。 厳格な一元的な同意のためにそれをオフにします。 クッキーの合意は、同意レジャーを維持し、(すべての助成金と再開の防止)プライバシー&コンプライアンスページと対をペアリングします。
はい。 パーカテゴリーの執行は、ソースでマッチングキャプチャを停止します。 それは化粧品のバナーではありません。
バナーは不要。ウィジェットを経由して発送します。独自のサードパーティタグの自動ブロックのみが、それらのタグ(上記で表示)にワンタイムマークアップ変更が必要です。
プライバシーとコンプライアンスページ:連絡先、チャネル、行動および日付ですべての付与の検索可能な同意レジャー。
積極的なメッセージは、訪問者の行動がルールにマッチする瞬間を自動的に達します。 彼らが尋ねる前に。 あなたは3つの部分で規則としてそれぞれ構築します:それが火を発すべきとき、何が起こるべきか、そしてどのくらいの頻度。 すべてがを介して配信されます OpsIQ ウィジェットは既にあなたのサイトにインストールされています。
チャットバブルやオンページバナーを表示し、ガイド付きツアーを開始したり、Webプッシュまたは電子メールを送信したり、部署に割り当てたり、webhookを発射したりします。 トークンは好きです {{visitor_name}} そして、{{page_title}} 実際の値になります。
トリガーする矢印:ページ/URL、ページの時間、スクロール深さ、リードスコア、新しい戻り値対、アイドル。条件なし、すべての訪問者のための規則の火。それをターゲットにするには少なくとも1を追加してください。条件は AND と結合します。
クールダウンを設定して、同じ人がペスターされていないので、例えば1回または1日1回。各ルールにはオン/オフのステータスがあります。
条件を使わないだけ。 右訪問者をターゲットにするために、少なくとも1つの条件(ページ、リードスコア、戻り...)を追加してください。
それらは一緒に働きます:積極的なルールは、ガイド付きツアーを開始することができ、チャボットフローは、積極的な規則によってトリガーすることができます。 1つのチャットメッセージングルールから始めて、他の人を層にします。
Chatbot Flows は、チャットウィジェット(挨拶、キーワード回答、ガイド付きパス)内の会話をコードなしでブランチングします。フローは接続されたステップ(ノード):質問に答えます。訪問者はオプションを選択し、フローが一致するブランチを送信します。サイト上で実行されるアクティブフローのみです。
パスが予測可能で、毎回同じようにしたいとき:予約手順、 "この計画?" セレナー、手渡前のメールを収集する。フローは改善しません。
質問が終わると、「この作業をセットアップで行う?」。 顧客チャットAIは、訓練された知識から答えます。 フローは、任意のステップでAI(または人)にオフすることができます。
訪問者が最初にチャットを開くと、開いているメッセージとして実行します。
訪問者がリストした単語(払い戻し、価格設定、キャンセルなど)をタイプするときに実行します。
連絡が取れる連絡先の詳細や、会話にセットされた時間から始めます。
チャットがラップアップ(評価など)として実行するか、または積極的なメッセージルールによって開始されます。
新規フローをクリックし、名前をつけてトリガータイプ(キーワードの場合はキーワード)を選び、保存します。 オフを開始します。
[キャンバスを編集] をクリックします。ステップ(メッセージ、ボタン、ブランチの質問)を追加し、それらを接続するビジュアルビルダーです。
それぞれの選択肢に対して、ブランチを次のステップに描画します。AIへの解決や、人への移行によるパスを終了します。
有効にするをクリックします。フローはすぐにウィジェットに住んでいます。デザインを失うことなくいつでも無効化できます。
いいえ。 それらは横で実行します。予測可能なパスとAIのフローを使用して、オープンエンドの質問を処理します。フローは必ずどちらかに渡すことができます。
ガイドツアーは、スピーチバブルとスポットライトでページの一部を指すステップバイステップのウォークスルーです。オンボーディングや新機能を通じて訪問者を案内します。 彼らは完全にテーマされ、ライブプレビューを備えたビジュアルデザイナーに構築されています。 それはアクティブマークされたときだけツアーが実行されます。
各ステップは要素をターゲットにし、テキストでバブルを表示します。 ウォークスルーのニーズとして多くのストップを追加して注文します。
プリセットから始めて、または自分のバブル(カラー、グラデーション、スポットライト)をデザインし、右側にライブプレビューします。
必要に応じて、その規則の火(例えば、最初のダッシュボード訪問)時にツアーの自動スタートをプロアクティブなルールにリンクします。
アクティブがチェックされている間のみ実行する資格があります。削除せずにそれを取り除くのは、気にしないです。
新規ガイドツアーをクリックし、名前を付けて、オプションでプロアクティブなルールをリンクして、自動的に開始します。
各ストップを追加します。ポイントの要素を選択し、バブルテキストを書きます。パスが流れるまで再注文します。
プリセットまたはスタイルを選ばせて、泡を自分で。ライブプレビューは訪問者が何を見ることができるか正確に示します。
ティックアクティブと保存。このツアーは、独自のトリガーで実行したり、プロアクティブなメッセージルールによって開始することができます。
自分のトリガー、またはプロアクティブなメッセージルールの「ガイドツアー」アクションを介して、訪問者がどのツアーやいつ表示されるかを決めます。
変換目標は、あなたが気にしているアクティビティをオンにします (インバウンドWebhookイベント、チャットメッセージ、チケットの解像度) フルアトリビューションで録画コンバージョンに. 活動が火災するとき, OpsIQ コンタクトに対するコンバージョンをログ化し、それに対処するには、そこに導いたキャンペーン、セグメントおよびソースに戻ります。
新規変換の目標をクリックします。コンバージョンとしてカウントするアクティビティタイプを選択するか、クイックスタートプリセットを使用するStripe購入, デモ予約, ニュースレターのサインアップまたはサブスクリプションが開始されました.
変換を名前(購入、デモ_booked、サインアップ)とし、オプションで固定値とアトリビューションウィンドウを指定します。
保存して有効にします。それから、活動が始動するときに、OpsIQ 前回のタッチに起因する接触に対する変換を記録します。
記録された活動:インバウンド・ウェブホークイベント(payment. succeed)、チャットメールキャプチャ、チケットの解像度、連絡先タイムライン上の何か。
カスタムダッシュボードでは、標準の概要だけに依存する代わりに、その問題のメトリックを独自のビューを作成できます。 ウィジェットを追加し、好きなレイアウトにドラッグアンドリサイズして保存し、チームと共有します。
ウィジェットを追加をクリックして、追跡したいメトリックまたはチャートを選択します。 あなたがボード上で望むすべてのために繰り返します。
ウィジェットをドラッグして、エッジを再配置し、ドラッグしてサイズを変更します。 KPI はトップ、チャートの下のグラフを渡します。 何がベストを読みます。
ダッシュボードを保存してチームと共有することで、全員が同じ数字を監視できます。
アウトリーチは OpsIQ's's は、1:1一括メールエンジン:パーソナライズされたメッセージを構成するか、またはCRMセグメントにキャンペーンを実行します。応答の検出、送信時間制御、オープン/クリックトラッキング、トラッキングピクセルとワンクリック解除。それは同意ゲートおよびCAN-SPAM / CASL準拠です。
パーソナライズされた書き込み1:1メールでのお問い合わせ {tokens} コンタクトとCRMから.
キャップと送信時間制御でCRMセグメント、スケジュールまたは今に送信します。
繰り返しアウトリーチのための再使用可能なメッセージテンプレート。
応答の記録応答と自動停止は、誰にでもフォローアップを追跡します。
CRMセグメント(またはリストをアップロード)を選択します。 抑制と同意は自動的に適用されます。
パーソナライズトークンでメッセージを書く。実際の連絡先からプレビューする。
ピクセルレコードのトラッキングが開いて、クリックして返信が属性になります。
スケジュールされたレポートは、印刷可能でホワイトラベルとして選択した受取人(日・週・月)に選択されたメトリックセットを電子メールで通知します。PDF. 1回設定し、受信トレイのレポートランドが自動的に通過 OpsIQ cron.(クロン)
メトリックセット(トラフィック、SEO、セールス、サポート...)と日付範囲を選択します。
日、週または月々、選択した時点で、1つ以上のメール受信者に。
保存して有効にします。レポートはスケジュール、マニュアルステップなしで、自分自身を生成し、メールを生成します。
プライバシーとコンプライアンスページは、個人データを責任をもって処理する監査人を示すための単一の場所です。同意レジャー、管理者アクセスログ、データ残留および保持ポリシー、および1つのタブベッドビューで準備が整った DPA を表示します。完全な管理者だけがそれを開くことができます。
連絡、チャネル(電子メール、プッシュ、SMS、ウィジェット)、アクション、ソースおよび日付で、すべての同意の付与とリムークの検索可能なレコード。 あなたの証拠は合意した(または撤退)。
管理者、連絡先、行動、記載された理由で、連絡先のデータを閲覧、編集、エクスポート、消去またはメッセージしたチームに誰がいるか IP. 正確に、規制当局が求めるもの。
このワークスペースのデータがどこに住んでいるかを宣言し、何日の活動の行が保存されるかを設定します()0 = 永遠に)、データコントローラーとDPOを記録します。
印刷可能なデータ処理アドオンは、コントローラー、アドレス、DPO、残留および保持に記入します。 PDF として印刷または保存します。
コネクターのリンク OpsIQ 外部プラットフォームへ: eコマースストア、課金システム、決済プロセッサー、メールプロバイダ、カスタム APIs. 接続したら、AIは注文、顧客データ、サブスクリプションなどを見て、承認でアクションを取ることができます。
これらは、インストールした瞬間を提示し、資格情報だけを必要とする。
ウェブホスティング課金:クライアント、サービス、チケット、請求書、ドメイン、サーバー。
Eコマース:注文、顧客、製品、在庫、支払い、Webhooks。
WordPress eコマース: 注文、顧客、製品、クーポン、配送。
コンテンツとユーザーを WordPress に表示します。
お支払いと販売ポイント:注文、顧客、カタログ。
レガシー電子商取引:注文、顧客、製品。
署名によるボタブルなCMSホテルサイトOpsIQブリッジ。プラットフォームのリファレンス実装はなしAPI.
Helpdesk: チケット、ユーザー、組織、コメント
ローカルビジネス:レビュー、投稿、Q&A、インサイト。 OAuth_を使用してください。
カレンダーとイベント。OAuth.
メールボックス: 受信メールとアウトバウンドメール、アドレス帳の同期。
メール配信:メールを送ってテンプレートの管理を行います。
メール配信:Mailgun からメールをお送りします。
対話とインバウンド会話のためのメッセージングチャネル。
Facebookのメッセンジャー、Instagram DMおよびWhatsApp。
解析と検索データ SEO スイート.
会社の濃縮とバルク顧客の輸入。
これらは、インストールの一部ではなく、公開されたパッケージです。 コネクタ、マーケットプレイスから1つをインストールし、それが上記のもののように正確に動作するライブコネクターフォルダにコピーされます。
お支払い: 請求、顧客、請求書、サブスクリプション、支払い、紛争。
Eコマース:注文、顧客、製品、カテゴリ、ブランド。
Eコマース:注文、顧客、製品、カテゴリ、在庫。
Eコマース:注文、顧客、製品、カートルール、キャリア。
Eコマース:注文、顧客、製品、カテゴリ。
取引メール配信。
課題とプロジェクトトラッキング。
会議、カレンダー、メール
署名、見込み客、検索および分析データ。
ウェブサイトプラットフォーム。
管理者サイドバーのコネクターに移動します。
リストを参照するか、検索します。 コネクタはカテゴリ別にグループ化されます。
コネクターをクリックし、有効に切り替えます。
必須項目を入力してください。API キー、URL、トークン、等。各コネクターは設定のパネルで文書化される特定の条件を備えています。
「テスト接続」をクリックします。緑色の結果は、コネクタが外部プラットフォームに到達できることを意味します。赤い結果はエラーを示しています。
どの機能を有効にするかを選択します。知識の同期、Webhookの同期とAIアクション。すべてのコネクタはすべての機能をサポートしていません。
コネクタを通じて、AIは顧客データ、注文、サブスクリプションなどを見ることができます。 顧客のチャットの場合、AIには実際のプラットフォームのデータが参照できます。
コネクターのContextProviderはチケット-AIに切符所有者の読まれた記述の要約を与えます。顧客をによって解決して下さい customer_id 知られるとき;そうでなければ、チケットの自動車返信に、ctxの旗 customer_trust_email 本当です。アカウントをフォローしてみる customer_email (検証済みのチケット送信者)。リモートプラットフォームは、 /context/customer-by-email エンドポイントとコネクタはそれを呼び出します。これは、AIが「ログインしてください」という代わりに、実際の残高/請求書を引用するものです。オペレータのデータクラスのトグルを注いでください()customer_sections, customer_allow_credit)厳密に読み書きし、秘密を放つことはありません。
コネクタの IdentityProvider は 3 つの普遍的なチケットルックアップをフィードします。 lookupCustomerById() (顧客カード)、 lookupCustomerServices() (商品・サービステーブル)、 listCustomers($query,$limit): ネイティブコンパスニューチケットフォームの「顧客やタイプメール」ピッカーを検索します。 {id, external_id, name, email, company, phone, platform, platform_label}. リモートルール: お客様が別のデータベースやサービスに住んでいる場合、プラットフォームの上でそれらを取得します。API これらの方法の中、他のシステムのテーブルを直接読みません(で) OpsIQ ローカル読み取りが空のピッカーを返す理由であるDBは、空白のプレースホルダーです。 設定されたリモートパスをオンにします API URL;ローカルは同じDBのフォールバックとしてだけ読み続けます。
インバウンドメールがネイティブチケットになる場合、OpsIQ 呼び出しによる送信者を検知 lookupCustomerById(0, ['email'=>$sender]) コネクタ全体で、顧客とその最初のマッチを「所有者」 platform slugはで押されます ticket.created イベント _pipe_owner_platform (空 = ゲスト)。だから WHMCS-customerメールは、チケットを開く WHMCS (WHMCS 未知の送信者がネイティブゲストに滞在している間、番号付けは1つとして映し出されます。 コネクターが自分のプラットフォームにネイティブチケットをミラーリングする場合, あなたの ticket.created ハンドラは、この上でゲートしなければなりません。 if (array_key_exists('_pipe_owner_platform',$payload) && $payload['_pipe_owner_platform'] !== '<your-slug>') return;. キーは、非ピペット(チャット/マニュアル/AI)チケットに欠席しています。そのため、その前にミラーをミラーリングします。 パートごとのコントロールは、チーム&部門の→電子メールを介して開いているチケット(Anyone /顧客のみ/オフ)で動作します。
コネクターを通してAIは行動を実行できます。チケットの作成、注文の更新、サブスクリプションのキャンセル、Trust Layerによる承認をすべて行うことができます。
コネクタは、プラットフォーム固有の知識記事をAIに投稿します。Shopify コネクターはeコマースのトラブルシューティングを加えます; WHMCS コネクターはホスティングの知識を加えます。
プラットフォームがナレッジベースをホストする場合、 kb_capabilities ブロックイン settings.json (タイプ) kb_source)と、お使いのコネクタはヘルプセンターエディタの インポート KB → 接続されたアプリからインポート 作業スペースで有効かつ設定されると、ドロップダウンがいつでも行えます。宣言的であり、実装方法はありません:組み込みの名前 adapter (zendesk 正確なヘルプセンターの API、または crawl KBサイトと base_template など https://{subdomain}.zendesk.com, 誰 OpsIQ コネクタの保存設定から埋めます。認証情報はサーバーを離れません。ブラウザは、コネクタースラグのみを送信します。新しいプラットフォームをサポートするには、追加します opsiq_kb_<platform>_manifest() アダプターは名前によってそれを参照します。完全な参照: connectors/PLATFORM_CONNECTORS.md §5.
一部のコネクタは、リアルタイムイベント通知(新規注文、チケット更新など)のために外部プラットフォームでWebhooksを登録します。
Eコマースコネクタは、収益データをアトリビューションと分析のためのセールスダッシュボードに供給します。
可能です。Shopify 注文と Stripe が同じワークスペースで支払いを行います。AIは、すべての有効なコネクタからデータをマージします。
コネクタービルダーを使用して、REST API_ を使って任意のプラットフォーム用のカスタムコネクタを作成します。または、コミュニティビルトコネクタのマーケットプレイスを確認してください。
はい。コネクタは、クラウドとセルフホスト版の両方で同じように動作します。
あらゆる商取引コネクタは、同じプラットフォームニュートラルイベント契約を使用します。 WHMCS は参照実装ですが、SaaSブリッジ、ストア、決済プロバイダ、マーケットプレイスコネクター、およびコネクタビルダーパッケージは同じルールに従う必要があります。
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.
プラットホームはコネクターのレジストリのslug、のようなです whmcs, shopify または opsiq_saas. Traffic_source は、提供されたときに検証済みの取得アトリビューションを含みます。そうしないと、同じスラグをフォールバックとして使用してください。ストア識別子は、ラベルを表示しません。OpsIQ UI でフレンドリーなコネクタ名を解決します。
event_id は決定的でなければなりません。マップは少なくとも 1 つの不変な order_ref、invoice_reef または subscribe_refi で、webhook のretries と backfills が重複したセールスを作成する代わりに同じイベントを更新します。service_reF は、影響を受ける製品やサービスインスタンスを 1 つ存在時に識別します。
ソースプラットフォームで報告された支払いまたは経済イベントの時間です。履歴決済日をインポート時間に置き換えないでください。
ソースの量と有効な3文字ISO通貨を送信します。コネクタの設定を有効にした場合 OpsIQ FX変換、レポートはワークスペースの報告通貨に変換します。それ以外の場合は、ストアや請求プラットフォーム通貨を保存します。 コネクタコードは、レポート通貨または為替レートをハード コードしてはいけません。
新規、更新、アップグレード、返金、クレジットまたは未知の使用。請求書の理由から分類し、サブスクリプションまたはサービス関係、ラインアップタイプ、または他の権限のあるソースフィールド。同じ顧客による繰り返し購入は自動的に更新されません。
正式な支払い新しく、更新、アップグレード、または正当な未知の取引レシートのみが販売&コンバージョンに属しています。払い戻しは返金と純収益分析によって報告されます。アカウントクレジット、ウォレットのトップアップ、トークンのトップ・アップおよびファンドの追加は請求済みイベントであり、売上、変換、注文数量、または売上高としてカウントしません。
CRM取引は、パイプラインと取引活動を表しています. 彼らは、接続された請求やストアプラットフォームがこの契約を通じて実現した支払った注文または請求書を排出しない限り、商取引プラットフォームの販売ではありません.
一つのイベント名に依存しないでください。プラットフォームが1つの支払い(請求書の支払、注文支払済、取引の追加、決済完了)の複数の確認を送ったら、プラットフォームが販売が支払われていることを確認します。販売指紋は1列に兄弟を崩壊させます。
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.
opsiq_conversions とダッシュボードの要約は、レジャーから再構築された互換性のある予測です。 コネクタは、真実の金融源として投影を処理してはならない。 契約修正は、従順な請求履歴を削除せずに得られた行を再評価することができます。
リモートコネクタは、設定された認証済み API でプラットフォームを読みます。同じサーバーのデータベーステーブルに依存してはいけません。正確な認証ドメインsite_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"
}コネクタービルダー、地図の量、通貨、ソースの状態およびソース日付で販売と請求が有効になっている場合、少なくとも1つの注文、請求書またはサブスクリプションリファレンス。 API が正規ライフサイクル証拠を明示したときにマップlifecycle_type。生成された SalesIngestは、組み込みおよびマーケットプレースコネクタで使用される同じCommerceEventRegistryノーマライザーを介してすべての行を渡します。
lifecycle_type 分析ラベルではありません。 OpsIQ は、販売がCRMパイプラインに入るかどうかを決定するためにそれを読みます, そうすべてのセールスコネクタは、それが意図するか否かパイプラインの決定をしています.
クローズドウォン取引(新規事業)をオープン
再帰収益として記録。新規事業の取引は不要で、更新は異なる確率曲線に変換し、予測の両方を破損させる。
取引を開かないでください。いかなるモードでも、返金は顧客に返されますが、勝ちません。
収益のみ。販売は記録されていますが、パイプラインに到達しません。
マッチしない event_id 自分をインサートする event_id is platform:eventName:externalId「この配送を既に処理している」と答える「この販売をすでに記録したまま」には答えられないプラットフォーム。 invoice.paid と再び payment.completed — 2 匹の ID を分け、同じお金を2回にし、衝突するものもなく警告するものはありません。
代わりに共有された書き込みを呼び出します。コアは、販売のビジネスアイデンティティ()を計算しますsale_fingerprint)、その上に既存の行にマッチし、元の行を保存します。 event_id 更新、および実際の列へのフィルタ:
\OpsIQ\Commerce\CommerceEventContract::upsertSaleRow('opsiq_sales_events', $row);invoice. paid, payment. completed and sale. completeed は 1 つのインボイス共有 1 つの指紋をシェアし、1 行を更新します。
出金は、お金から来る別の事実です。請求書の払い戻しは独自のアイデンティティを保持しているため、支払いを逆にすることはできません。
注文、請求書、サブスクリプションまたはサービス参照を運ぶ行は、指紋がまったく取得されません。そのため、2つの関係のない列は、どちらもIDが欠落しているためだけ衝突しません。
invoice_ref, その後 order_reF, その後、subscribe_reef, その後service_refriendest まず, そのため、1つの販売は安定したアイデンティティを維持します.
返金、キャンセルまたは修正は 新規登録. 修正する行をミュートしないでください。払い戻しに支払いを書き換えると、一回に3つのことを分割します:
総売上高および返金率は分離可能であり、払い戻し率は、逆転が通知するメトリックです。
1月の売上の3月分の払い戻しは3月を削減しなければなりません。1月列を静かに書き換えると、閉鎖期間が残ります。
レジャーエントリは、時間内に起こったことを記録します。 修正は対流であり、それは二重エントリー簿記が5世紀にわたって働いた方法です。
コネクターは、それを適用するのではなく逆転を報告します: 戻り refunded_at それに refund_amount 販売のライフサイクルと並んで、払い戻しが起こったときに日付通りにコールアは返金を書いてくれます。販売指輪が売り切れから返還を分離するので、2つは衝突しません。
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 bare を放さない Domain 実際のドメイン行の型; それは出ます DomainRegister, DomainRenew, DomainTransfer, PromoHosting, PromoDomain, DomainAddon* それに Upgrade. リストを全て削除した unknown: 1,288 請求書、3年、エラーなし、ログ行なし。
コネクタのバックフィルで、新しい顧客をインポートするつまり、分類バグは1つのワークスペースに影響を与えません。それは、そのコネクタを通してこれまでオンボードしたすべての作業空間に影響を及ぼすので、そのパイプラインを最初に見ている瞬間です。プラットフォームのドキュメントやライブデータの検閲から語彙を取り、成長している家族と一致します プレフィックス つまり、誰もまだ消えるのではなく、その親戚と分類されていない兄弟は見ていません。
出荷されるすべての 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 その後、コネクタのインポート履歴を1コネクターコードなしで修復します。デフォルトで実行して、書き込み前に行数をバックアップし、変更不能なレジャーを経由してリバーシブルにし、応答として失敗した読み込みを書きません。
ジャーニーインテリジェンスは、ブラウザウィジェット、内蔵コネクタ、SaaSブリッジ、マーケットプレイスパッケージ、およびコネクタービルダー出力から1つのプラットフォーム固有のイベントが組み込まれています。プラットフォーム固有の名前はエッジで翻訳されます。ファネル、アトリビューション、サイトインテリジェンスコードは、単なる正式な出来事のみを消費します。
あらゆるイベントは、認証されたドメインサイト_keyに拘束されます。 コネクタは、信頼できないリクエストボディから決して、ConnectorRegistryまたはその認証エンドポイントからのキーを受け取りません。 ドメインは別のレコードを保持します。 ドメイン名グループは読み取り時間の合計です。
event_id は、コネクタで必要であり、同じネイティブイベントに対して決定的でなければなりません。 旅や販売を複製するのではなく、Retries, webhooks, backfills の更新 1 つのイベントを更新します。
証拠やトラブルシューティングのsource_event_nameを保存し、それを event_name_canonicalにマップします。コア分析はコネクタースラグにブランチを行わないでください。
ブラウザの観察は、開始または旅を妨げることができます。認証されたコネクタイベントでは、サインアップ、ログイン、支払い、購入、更新、払い戻し、およびその他の端末結果を確認します。有効なサイト・バウンド・コレーショントークンは最も強力な参加です。無効なトークンが拒否され、埋め込まれたIDは信頼できません。
宣言された旅に必要な識別子やフィールドだけを送信します。同意を尊重し、マスクし、保持設定を行います。認証情報、カードデータ、認証秘密、またはプライベートメッセージの本文はプロパティに置かないでください。
{
"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結果と訪問者の旅行ログ. その証拠は、明示的に観察または推論として等級付け残されます. コネクターは、権威のあるサーバーの確認を追加し、同じブラウザの試みにそれを相関することができます. 放棄は、最初に候補として保存されています; それはUIで設定された非アクティブウィンドウが後にのみ放棄され、後回復や成功が存在しない場合だけになります.
Attribution は有効な署名された相関トークンを好むし、それから厳密な旅、試み、会合または商取引の参照を、そして同意したアイデンティティ・グラフおよび最終的に限られた行動的一致好みます。比類のない販売は不当に残ります。複数の接触の運転者の重量は合計 1しなければなりません。サイトインテリジェンスによって属性づけられる収入はこのレジャーを読みました;クレジット、財布のトップアップ、トークンの上の上昇および付加的な資金は転換を買うことは決してありません。コネクター 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"
}
}]
}パッケージを実際に配信する機能だけ宣言します。 コネクタビルダーは、マッピングを検証し、ファーストパーティパッケージで使用される同じプラットフォームニュートラルアダプターを生成します。ジャーニーインジェクションは、生成された認証済みの統合エンドポイントを介して1つのイベントまたは 100 _の境界バッチを受け入れます。
あらゆるコネクタは、AIが外部プラットフォームを介して行うことができること:アクションのセットを宣言します。アクションは、「AIが言う」と「AIがする」の間の橋です。
「サブスクリプションをキャンセル」。AI は、このアクションが「cancel_subscription」アクションを必要とすることを識別します。
アクションは許されているか? 有効になっているのか? 現在のユーザが正しい役割を担っているのだろうか。
アクションはサブスクリプションIDが必要です。AIは顧客コンテキストから見たり、顧客に尋ねたりします。
破壊的または影響力の高い行動のために、AIは実行前に確認を要求します。
アクションは外部プラットフォームの API を呼び出します。
お客様からのAIが結果を報告します。
何も変更せずにデータを調べます。例:list_orders、get_customer。安全、確認は必要ありません。
データの作成または変更。例: create_ticket、update_order。確認が必要な場合があります。
データを削除します。例:キャンセル_サブスクリプション。必ず確認が必要です。
アクションで宣言される。json, ジェネリック API 定義された宣言的に呼び出します。
アクションの「キャパシビリティ」フィールドにオプションします。json, チケット読み取り/参照のための「tickets」や、チケットを開くための「ticket_create」など、コネクタニュートラルクラスタグ(例: )。OpsIQ 各コネクタ全体に統一的にクラスをゲート: チケットは、AIチケットアウェアネスをオフにし、チケット作成が予約されると、AIのドロップアウトを読みます OpsIQ'独自のコンポーラ(コネクタのcreateツールはそれを複製することはできません)。それとあなたのコネクターが合致する宣言。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" }
}
}
}コネクタビルダーは、REST API_ で任意のプラットフォーム用の完全なコネクターを作成することができます。基本的なコネクタに必要なコーディングは必要ありません。
生成される各々 API コネクターは別のネイティブを露出できます API 読書とネイティブ API アクションを書きます。 処理されたアクションは優先されます。 ネイティブアクションカバープロバイダのエンドポイントが後で追加されます。 ランタイムはREST、GraphQLをサポートしています。JSON, フォーム, XML、未加工および多部分ボディは、paginationに結合しましたり、API-version ヘッダーと、ワークスペースのコネクター設定内の認証情報を保持している際の不在。
ウィザードは、上部のタブとして6つのステップを占めています。 自由にジャンプして、 草案を保存 フットパーでは、あらゆる点で作業を続けます。
名前、slug、説明およびアイコンは、契約プロファイルを選択します:標準API、商取引、ヘルプデスク、メールボックス、サイトインテリジェンス、SaaSブリッジ、ローカルPHPプラットフォーム、または プラットフォームなし API_ プラットフォームがコール可能でないと OpsIQ がブリッジをインストールしなければならないとき。プロファイルは、完全な機能の開始点を選択します。個々の機能を調節できます。
プラットフォームが使用している認証パターンを選択し、フィールドに記入します。ここで実際のテストの資格情報を入力するだけでなく、次のステップで接続テストに使用するので、公開後に保存されません。
エントリー API ベース URL エンドポイントを検証し、認証情報を使用してライブ接続テストを実行します。2. この操作を定義する前に、auth や base のいずれかのアクションを定義します。URL 間違った、その後に書いたすべてのアクションが同じ理由で失敗し、誤ったことをデバッグする。
各操作を定義します。名前、HTTP メソッド、エンドポイントパス、パラメータ、応答フィールドマッピング、および以下に示す信頼性設定です。各アクションを個別に実行できます。API このステップから。
プラットフォームが送信するWebhookイベントをマップ OpsIQ イベントなど、プラットフォームで起こることは仕事を始めることができます OpsIQ.
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>/.
発電機の5つの行動は、人々を驚かせます。 どれもバグです。 事故でそれらを満たすと、それらはすべて午後にあなたに費用がかかります。
ステップで答える1データアクセスモード(または "Platform with no no")を選ぶことによってAPIプロフィールAPIモード宣言 native_api and emits the <slug>_api_call passthrough. Bridge mode declares platform_bridge 代わりに、StreIPS native_api 古いスペックが運ばれても、マニフェストや生成されたクラスと専門知識のドキュメントは不一致できません。 ai_brain_aware いずれかの方法を追加。
The Builder follows your answer; it does not work the truth out for itself, and the default when nothing is said is API mode. So a no-API platform must ACTIVELY say so — pick the "Platform with no API" profile, set data access to bridge, or tick platform_bridge; any one of the three is enough and they cannot contradict each other. Skip the question on a platform with no API and you are back to the old failure: a dead <slug>_api_call the model keeps reaching for. This used to be stamped unconditionally, so the trap is now escapable rather than gone.
確認パスを空に残せば、ビルダーは書きます /ping 生成されたコネクターにおよびプロフィール。json's test block. ほぼ実際のプラットフォームは、そのルートを機能しないため、test Connection は HTTP で失敗します。404すべてのインストールで、パッケージの欠陥ではなく、顧客のミスコンフィギュレーションのように読みます。 プラットフォームが実際に回答する検証パスを設定します。 ブリッジコネクタの場合、独自の診断エンドポイントでそれを指す - 1つの呼び出しでチェーン全体を証明します:橋は展開され、キーマッチとブリッジはデータベースに到達することができます。
機能は現在、データアクセスの応答に従うので、それらの漂流はもうありません。他の生成されたものはすべてまだ行われます:ContextProvider. phpまたは他の放出されたファイルと次の公開がそれを置き換えます。保護された例外はブリッジファイルです。ウィザードは独自のマーカーを運ぶ橋を書き過ぎるだけです。そのため、手書きしたものは一人で残っています。
機能が不要な場合、次の公開はプロバイダファイルを削除します。 生成されたファイルへのハンド編集 — 上記のContextProvider.phpは警告なしに上書きされます。 最初にカスタマイズをコピーするか、削除することによってパッケージの所有権を取ります。opsiq-ビルダー。json(ウィザードが管理しなくなった後)
wizardには制御がありません。 生成として出荷するパッケージは、settings.json で変更された release_status を持っている必要があります。 編集するとシグネチャが壊れますので、その後再署名します。
ビルダーパッケージは、このインストールの対称キーで署名されます。これにより改ざんが検出されます。パッケージを書いた人や同じ鍵を保持する任意のインストールも同じ署名を生成することができます。ローカル署名されたパッケージを自在に署名します。
出版は、すでに存在するスラグを拒否します/connectors/.見ていない/marketplace_connectors/,そのため、同じスラグで手書きのファーストパーティパッケージがシャドウを終わらせることができます。
アクションごとに次の設定があります。最初の4つだけが必要です。その操作をし、どのように慎重に実行するかは、残りの制御です。
鍵はAIが呼び出すものです。ラベルは人間の読み物です。キーは、自動的にコネクタスラグと名前空間されますので、2つのコネクターは衝突することなく「リスト」を両方持つことができます。
GET、POST、PUT、パッチまたはDELETE。
ベースに付属 URL. 使用 {name} プレースホルダー、例えば /opportunities/{id}/stage
各パラメータでは、どこからでも選択できます。 ボディ, パス, ソリューション または ヘッダー. パスパラメータは、{placeholder}; クエリパラメータは、URL.
どのフィールドにいたかを言う JSON 応答とは、顧客名で、注文合計である電子メールです。これはAIがプラットフォームのデータを推測するよりもむしろ読むことを可能にするものです。
チーム(admin AI)、署名付き顧客(顧客チャット)、または書き込みアシスタント。顧客の行動は署名付き顧客にのみ実行され、アイデンティティフィールドが自動的にロックされるため、別の顧客は他のユーザーについて尋ねることはできません。
行動が実行される前に人間は承認しなければなりません。
アクションをステートを削除または変更する。実行前に警告するために使用される。
管理者は、AIが代理でアクションを実行するためにはこの権限を保持しなければなりません。管理者はいつも通りに渡します。管理_統合、管理_一般、管理/実行、管理\_ビルリング、管理人_セールス_ブリッジ、管理者_知識、管理人の_アプリケーション、管理職_行動、管理権限、管理・権限管理_危険性、管理管理_取引、応答_to_チャット、escalate_to _ticket、send_agent_email、または認証された管理者を意味します。
オプションで、書く価値があります。このアクションに達したときにAIが伝えます。「管理者が取引ステージを変更するように要求するときにこれを使う」。良いヒントは、AIが正しく使用している行動と無視するアクションの違いです。
オプションのクラスタグ、いずれかのチケット(チケット読み取りまたはルックアップ)かticket_create(チケットを開く)。タギングは許可します OpsIQ 一度に全クラスをゲートします。例えば、オペレーターがAIチケットの認識をオフにしたときにチケットを非表示にするなどです。
オプション。 リストを返すエンドポイントの場合、データやdata. itemsなどの配列へのドットされたパス
オプション。 存在が失敗したコールを意味しているボディフィールド、例えば error.message は、APIs HTTP を返す 200 失敗に。
各アクションは、このステップからライブ API に対して実行できるので、他のユーザーが使用する前に間違ったパスやフィールド名を修正することができます。
トリガーのステップは、Webhook URL をプラットフォームに登録し、その到達するすべてのリクエストを検証します。
プラットフォームの署名を、例えば X-Hub-Signature-256_ などのヘッダーでヘッダします。
HMAC-SHA1、HMACシャフト256またはHMAC軸512。
単純で、明白な六角形かbase64の消化器。またはStripe-style、t=...,v1=... で使われるフォーマットStripeコピーしたプラットフォームが複数あります。
オプション。 一部のプラットフォームは、例えばsha256=で消化を接頭させます。 あなたのものがない場合は空にしておく。
プラットフォームが送信する各イベントをマップ OpsIQ イベントを盛り上げる必要があります。
プラットフォームがインストールされている場合 API 独自のWebhookを管理するために、登録する必要はありません。URL 手で開く。 有効にこのWebhookを自動登録 ステップで定義したアクションの2つにそれを置きます 4:
管理者がコネクターを有効にしたときに呼び出されます。 URL を運ぶパラメータ名、オプションでイベントリストを運ぶもの、新しい webhook の ID を保持するレスポンスのパスを指定します。
コネクターが無効になったときに、上記IDを使用して呼び出されるので、コネクタを取り外してデッドエンドポイントに送信するプラットフォームを停止します。
プロファイルと機能は、コネクタ契約 2.2 によって定義されます。生成および宣言的な機能が直接放出されるため、企業の機能が生成されます EnterpriseExtension.php ランタイムのライフサイクル配線で足場を。
プラットフォーム上でAIを実行できます。リストの注文、顧客を見つけ、払い戻しを発行します。
プラットフォームからWebhookを受け取り、それらをオンにします OpsIQ イベント
プラットフォームに滞在するチケットでAIのトリエージと返信コピロ。その応答で1枚のチケットを返し、フィールドをマップするエンドポイントを選択します。 OpsIQ はそれを介してスレッドを読みます。
タイムラインに顧客のメールを表示し、取引から送信し、アドレス帳を OpsIQ CRM に同期します。
顧客リストからページを移動し、それぞれに OpsIQ コンタクトとしてインポートします。これは、インポートボタンが実行されるものです。
プラットフォームからあらゆるAIの会話にライブデータをプッシュします。
お客様がお越しのお客さまに、その旨を提示し、チケットで購入・確認を行ってください。
収益イベントやMRRの数値をフィード OpsIQ ダッシュボード。
プラットフォームがWebhookで配信するチケットとメールを OpsIQ サポートスレッドに変えます。
投稿 OpsIQ スタッフは、先発のプラットフォームに戻ります。
スタッフアカウントを OpsIQ admin ユーザーにインポートします。
支援部門を OpsIQ_ にインポートします。
プロモーションスタジオは、人について知っている事実をターゲットにし、キャンペーン内で実際の製品をレンダリングします。
サーバ検証済みの調査事実を公開し、変数をエスケープし、CRMの受信ページを専用のSurvesprover. phpを通じてバインドした。これはプロモーションランタイムを再利用しません。
いつか OpsIQ ブロック IP、あなたのプラットホームの自身のブロックを呼ぶ API そこでブロックが強制されるので、
OpsIQ_ からブロックされたIP の脅威シグナルを受信します。
プラットフォームが何をしているか、その操作を記述する短い参照をビルドするすべてのコネクタ。OpsIQ admin AIは、コネクターが有効になっているときにそれを読み込みますので、アクション名のリストを見るのではなく、プラットフォームを理解しています。これはあなたのために生成されます。
コネクターは、AIが型アクションを定義しなかったエンドポイントに到達できるように、常に汎用的なコールを取得できます。 できるタイプされたアクションを使用してください。 これはエスケープハッチです。
契約版: 2.4 · 57 capabilities · 8 profiles.
Actions, triggers, OAuth/API-key authentication and optional context/identity mappings. Capabilities: actions, triggers, native_api, ai_brain_aware.
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.
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.
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.
SEO, analytics, search-console, local-search or monitoring provider with scheduled sync. Capabilities: actions, triggers, site_intelligence, seo, scheduled_workers, durable_queue.
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.
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.
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.
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 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 and revenue ingestion. Capability version: 1.2. Mode: generated. Interfaces: OpsIQ\Connectors\CommerceConnectorInterface. Package files: SalesIngest.php.
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.
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.
External ticket/email to OpsIQ ticket ingestion. Capability version: 1.0. Mode: generated. Runtime methods: handleWebhook. Interfaces: OpsIQ\Connectors\TicketMirrorConnectorInterface.
Reply mirroring to the external platform. Capability version: 1.0. Mode: generated. Runtime methods: pushReply. Interfaces: OpsIQ\Connectors\TicketMirrorConnectorInterface.
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.
Staff/customer synchronisation. Capability version: 2.0. Mode: generated. Runtime methods: listCustomers. Interfaces: OpsIQ\Connectors\CustomerImportConnectorInterface. Package files: SyncImport.php.
Department/team synchronisation. Capability version: 1.0. Mode: generated. Package files: SyncImport.php.
Order roster and order-event synchronisation. Capability version: 1.0. Mode: declarative. Interfaces: OpsIQ\Connectors\CommerceConnectorInterface.
Product, catalog and inventory synchronisation. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.
Project, issue and workspace synchronisation. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.
CRM customer roster import. Capability version: 2.0. Mode: generated. Runtime methods: listCustomers, backfillChunk. Interfaces: OpsIQ\Connectors\CustomerImportConnectorInterface.
Receive and emit security events. Capability version: 1.1. Mode: generated. Runtime methods: securityCapabilities, syncBlockedIp, removeBlockedIp. Interfaces: OpsIQ\Connectors\SecuritySyncConnectorInterface.
Native remote IP/CIDR blocking. Capability version: 1.0. Mode: generated. Runtime methods: syncBlockedIp, removeBlockedIp. Interfaces: OpsIQ\Connectors\SecuritySyncConnectorInterface.
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.
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.
Promotion targeting facts. Capability version: 1.0. Mode: generated. Runtime methods: subscribers. Interfaces: OpsIQ\Connectors\PromotionConnectorInterface.
Promotion product/content feed. Capability version: 1.0. Mode: generated. Interfaces: OpsIQ\Connectors\PromotionConnectorInterface.
Mailbox bus, outbound mail and address-book sync. Capability version: 1.0. Mode: generated. Runtime methods: emailAccounts. Interfaces: OpsIQ\Connectors\MailboxConnectorInterface.
Receive inbound email. Capability version: 1.0. Mode: declarative. Runtime methods: poll, handleWebhook. Interfaces: OpsIQ\Connectors\MailboxConnectorInterface.
Send outbound email. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions. Interfaces: OpsIQ\Connectors\MailboxConnectorInterface.
Mailbox connector. Capability version: 1.0. Mode: declarative. Runtime methods: emailAccounts. Interfaces: OpsIQ\Connectors\MailboxConnectorInterface.
AI triage and Inbox Copilot for remote tickets. Capability version: 1.0. Mode: generated. Runtime methods: loadTriageContext. Package files: AiOperations.php.
AI-assisted reply drafting. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.
Connector expertise supplied to Admin AI. Capability version: 1.0. Mode: generated. Package files: ai_expertise_admin.md, ai_api_reference.md.
Native API passthrough. Capability version: 1.0. Mode: generated. Runtime methods: registerActions.
Signed platform bridge (for platforms with no API). Capability version: 1.0. Mode: generated. Runtime methods: registerActions. Package files: bridge/.
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.
Remote sender block-registry synchronisation. Capability version: 1.0. Mode: declarative. Runtime methods: blockSender, unblockSender, isSenderBlocked. Interfaces: OpsIQ\Platform\BlockRegistryInterface.
Inbound comment ingestion. Capability version: 1.0. Mode: declarative. Runtime methods: handleWebhook.
Outbound private note. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.
Outbound notification delivery. Capability version: 1.0. Mode: declarative. Runtime methods: registerActions.
OAuth 2.0 authorisation. Capability version: 1.0. Mode: generated.
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 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.
Communications/video-meeting provider. Capability version: 1.0. Mode: declarative. Runtime methods: commsCapabilities.
Connector-provided admin/account/public browser assets. Capability version: 1.0. Mode: generated. Runtime methods: adminAssets. Interfaces: OpsIQ\Connectors\AdminAssetConnectorInterface.
Platform-native hooks and lifecycle callbacks. Capability version: 1.0. Mode: extension. Package files: EnterpriseExtension.php.
Durable outbox/inbox queue and retry policy. Capability version: 2.0. Mode: extension. Package files: EnterpriseExtension.php.
Bidirectional ticket mirror with conflict handling. Capability version: 2.0. Mode: extension. Interfaces: OpsIQ\Connectors\TicketMirrorConnectorInterface. Package files: EnterpriseExtension.php.
Attachment upload/download transfer. Capability version: 2.0. Mode: extension. Package files: EnterpriseExtension.php.
Connector-owned schema migrations. Capability version: 1.0. Mode: extension. Package files: EnterpriseExtension.php.
Connector-owned scheduled/background workers. Capability version: 1.0. Mode: extension. Package files: EnterpriseExtension.php.
Two-way sync conflict strategy. Capability version: 1.0. Mode: extension. Package files: EnterpriseExtension.php.
失敗したコールを再試行するには、各試みを倍増するバックオフで数回。タイムアウトのみ、429s そして5xxのエラーが取得されます。 4xxはあなたの要求の欠陥であり、それを繰り返すことはちょうどあなたのレート制限を燃やします。
このアクションの1分の天井なので、忙しいトリガーはプラットフォームを打ち込むことができません。 制限なしに0 _でそれを残す。
プラットフォームを諦めずに待ち時間
アクションが実行される前に承認する人間が必要です。 破壊的なものは何にも使用できます。
ステップステップ2 7つのパターンを提供します。 プラットフォームに合ったものを選んでください API ドキュメンテーションは、ジェネレーターが正しいHTTPクライアントを生成します。
たとえば、X-API-Key などの固定ヘッダとして送信された静的キー。ヘッダー名と管理者フォームのラベルが表示されます。このキーはヘッダーのみで送信されます。もし、 API がクエリパラメータとしてキーを期待している場合は、カスタムヘッッダまたはフルコードコネクタを使用します。
Token sent as Authorization: Bearer <token>. Common for modern APIs.
Username とパスワード、Authorization ヘッダに base64 エンコード。管理者フォームでフィールドが表示されるラベルを選択します。
パブリックキーとシークレット、ボディリクエストの署名付き。シグネチャヘッダー、キーヘッダー、プラットフォームが期待するタイムスタンプヘッダを指定します。
ユーザインタラクションとリダイレクトなしのサーバーツーサーバ。トークンを URL およびオプションのスコープに与えます。管理者はクライアント ID とシークレットを供給します。プラットフォームが認証情報を人ではなくアプリケーションに発行するときに使用します。
PKCE の認可コードの流れ、Stripe のための Shopify, Slack と QuickBooks スタイルのアプリ. 許可を与える URL、トークン URL そしてスコープ。 出版後、管理者はコネクターの接続をクリックし、あなたのプラットホームで承認し、そして OpsIQ リフレッシュトークンを保存し、アクセストークンをオンデマンドでミントトします。 リダイレクト URI 会員登録 OAuth コネクタの設定画面にアプリが表示されます。
無料フォーム JSON 上記のパターンのヘッダマップはカバーしません。例えば {"X-API-キー:{api_key}「X-Tenant」は、{tenant_id}"}. 各プレースホルダーは管理者フォームのフィールドになります。
オフセットと制限パラメータを使用します。例:?offset=100&limit= と 50.
ページ番号を使用します。例: ?page=3&per_page= は、50.
前の応答からカーソルトークンを使用します。
リンク応答ヘッダーをrel="next" で使用します。
adapter. php インスタンスを返します。名前付きクラスは OpsIQ ハンターが宣言しません。下のメソッド名は、ConnectorInterface のものが必要です。1つの間違いを得ると、警告ではなくロードで致命的です。
<?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);
}
};プラットフォームがチケットを所有している場合、それをミラーリングします。OpsIQ チケットインジェストヘルパーを使用してコネクタから、コネクターが継承されます(新しいチケット用に作成し、フォローアップ用の追加返信)。 コネクターのユニバーサルチケットイベントを制限して購読します subscribers() メソッド, ticket.created, ticket.replied, ticket.updated, ticket.deleted. 自動返信、エスカレーション、SLAとCSATは同じイベントを全て取り込みますので、追加のコードなしでそれらを継承します。
ハンドルを ticket.deleted, 合併も処理します。. 合併したチケットの削除は、 merged_into 宣言するコネクタに送信されず、 ticket_merge;合併は、一度に到着します ticket.merged 代わりに、マージされたチケットを閉じるのではなく、プラットフォーム上でマージすることができます。 参照 チケットマージ機能(Contract 2.4).
チケットは必ず にほんご 顧客ですが、メッセージを開くと、 スタッフ: 代理でチケットを開く、または積極的に受け取るエージェント。すべてのヘルプデスクはこれをサポートするので、それは普遍的な一部です ticket.created 各コネクタがプライベートで解決するのではなく、契約。
クライアント(デフォルト)または管理者。それを省略し、顧客は仮定されます。
author_type=admin のとき、スタッフ ID。顧客 ID は決してありません。
エージェントまたは部門表示名。 "Staff" に戻ってフォールズします。
代理人の住所。顧客を1つにしない限り。顧客の電子メールの下のスタッフ メッセージは、報告と監査エラーです。
化粧品ではありません。 消費者の読み author_type 誰がそれになるかを決めるために。スタッフの書かれたオープニングは、次のように報告しました client 自分のエージェントが書いたメッセージを回答する資格を自動的に供給し、プラットフォームのエコーを開いているようにして、新しい顧客メッセージのように見えます。これにより、チケットを複製して反転させ、 回答の答え. お使いのプラットフォームの信号をコネクタにマップ イベントノーマライザー消費者に決してない。
エージェントが送信者をブロックするとき、 全て ブロックが中央に強制されるため、すぐに(電子メール、チャット、ポータル、ウィジェット、およびすべてのコネクタのツイン)チャネル。 コネクターは何もしないでそれを継承します。 実行するインバウンド作業がなく、問題が発生する方法はありません。
任意半分はあります アウトバウンド: お客様がブロックされたプラットフォームをお伝えします。プラットフォームが何か等しいものを表現できる場合にのみ実装してください。
block_registry とクラスは BlockRegistryInterface を実装しなければなりません。フラグはクレームです。インターフェイスは保証です。レジストリは両方が必要です。
受信の種類(メール|ドメイン)ip)、値、理由、admin_id、expends_at、site_key。 [result、詳細?、remote_ref?]を返します。
同じペイロード、逆に。 重要である必要があります。ブロックされていない何かをブロック解除することはノップではなく、エラーではありません。
再調整のため、漂流は顧客によって発見されるのではなく報告されます。 [result, blocked?] を返します。
プラットフォーム上で適用されます。id 値を記録する時に、remote_ref を含めることができます。
要求された状態で既に存在します。
プラットフォームは、同じコンセプトはありません。エラーではありません。
完了して、間違っていた。詳細を含ま;監査証跡に着陸します。
意思決定は正しい答えです。 多くのプラットフォームは、この送信者をブロックし、サポートメールではなく請求、ログイン、サービスを停止するアカウントの停止のみを提供するものではありません。 「エージェントがスパムアドレスをブロックした」マッピングすると、「このクライアントのアカウントを閉じる」と、ワンクリック解除ブロックが課金顧客のサービスを終わらせます。 あなたはそれを持っている唯一のレバーである場合は、戻り unsupported 一人で出ます。
プラットフォームのケースもデクリニング できます では、そうしないで、あなたも聞かせてもらえません。 API、機能:プラットフォームの管理者 UI にのみ存在するレバーは、コネクタが持っていないレバーです。
読み込み connectors/zendesk/connector.php alongside this. It is short, and every branch below is a decision you will face too.
パット /api/v2/users/{id} stop=true を使って。中断されたエンドユーザの新規リクエストは、送信者をブロックするという同じ考えではなく Suspended Ticket に転換し、Zendesk のエンドユーザーがどれも持っていないので課金を停止します。remote_ref としてユーザー ID を返します。
Zendeskドメイン全体を中断できますが、サスペンドのみ:管理者センターブロックリストのテキストエリア内のキーワード、およびなしAPIそのフィールドを記述します。 機能が存在します。レバーは存在しません。
チケットレベルがない場合 IP ブロックが存在します。
Zendesk は、見たことがないアドレスを事前に監視できません。何も失敗しないとローカルブロックがチケットを停止します。
注意。スタッフの中断はヘルプデスクから同僚をロックします。ブロックリストに到達するスタッフアドレスは、指示よりも間違いになる可能性が高まっています。行動する前に役割を確認してください。
最後の行はコピーする価値のあるものです。契約はブロックを破壊的にマッピングすることを止めませんので、各コネクタはそれ自体が拒否されるかどうかを決めなければなりません。大声で、 detail オペレータは、読み取れる, 従順に拍を打つ.
正直に報告する。 それらの行の数が少ないことに注意 ok. これは正しい結果であり、ギャップではなく:ドメインブロックはまだ機能します(それは書かれている瞬間の中核で強制されます)。 それは単に外側に映し出されることができません。 戻り ok 作業者が OpsIQ_ を残さないと、ブロックがプラットフォームに達したことを伝えない。
呼び出され、返すものは何でも立っています。誰かがブロックするオペレータを防ぐことはできません。
投げはサポートされていないと記録されたように処理されます。 理由が生き残るために、代わりに詳細に失敗した返り。
同じブロックは、一度に複数のブロックを通知する場合があります。
ファンアウトは、オペレータのクリックで同期です。 リクエストを開いたままではなく、キューイングスローワークをキューイングします。
ブロックを再ブロックしないようにする OpsIQ ハンドラから。レジストリは、発信コネクタをスキップしますが、2番目のホップはループします。
発表は、すべてに書かれています opsiq_block_registry_log (操作、種類、値、理由、管理者、起源、コネクタスラグ、結果、詳細およびタイムスタンプ)ので、オペレータはエージェントではなくプラットフォームから到達されたブロックと各コネクターがそれについて何をしたかを見ることができます。
ハンド attachments create() の配列/addReply(). 各項目は3つの形の1つでファイルを運びます:
RAWファイルバイトのBase64は、auth(最もインバウンドの場合)の背後にあるファイルで使用します。 OpsIQ はそれをデコードし、ファイルを再ホストします。 最もポータブルな形状。
パブリック https URL (Zendesk content_url など)。https でなければなりません。SSRF/allowlist チェックを格納する前に渡します。
既に書いたファイル参照(ネイティブコンポーザーのアップロード)。
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 ファイル名のみ (バイトではなく)、信頼性の高いインバウンドパターンは:コードが既に実行されているバイト(プラットフォームの横にあるか、Webhookペイロードから)を読み込み、ベース64 それら、およびそれらを出荷する content_b64 当日の開催
アウトバウンド (OpsIQ → プラットフォーム). エージェントがファイルを取り付けるとき、 ticket.replied ペイロードは、返信のファイルをそのままにします stored_path 下の項目 OpsIQ ファイルストア。 それらを読んで、プラットフォームの独自のフォーマットでプッシュし、プラットフォームドキュメント、エンコーディングの問題をチェックしてください: WHMCS おすすめ base64_encode(json_encode([[name,data]])) (JSON はシリアライズしません)。Zendesk は生のバイトをアップロードします /uploads.json トークンのセット comment.uploads; Gmail はマルチパート/混合RFC-822 メッセージベース64url-encodedを送信します raw; Amazon SES inbound attachments need the S3 receive action (the SNS path caps at 150 KB).
プラットフォームが アプリやデータベースを分離 (SaaS をホストし、同じサーバー上の異なる DB のリモート WHMCS をリモートで囲む) 直接テーブルを書くことは決してありません: 接続がアクティブでサイレントに実質の行を逃す、どんな接続でもクロスデータベース書き込み土地。常に: アウトバウンド = プラットフォームの署名されたREST API (返信、ステータス、部門、削除) を呼び出します。 インバウンド = プラットフォームは、署名されたWebhookをPOSTします, あなたの handleWebhook() それを検証し、一致することを消火します ticket.* イベント。 ミラーループを停止するには、原点マーカーでプッシュするタグをつけてください(例: mirror_origin:'opsiq';。プラットフォームは、webhookでそれを選択し、インバウンドハンドラが独自のエコーをスキップします。チェック OpsIQEvents::isMirroredEvent() あらゆるハンドラのトップに
回答が自動的にステータスを移動させる、 エージェント 返信 → answered, a 顧客サービス 返信 → customer_reply; 同じ方法を映して下さい。明示的な変更のために購読します ticket.updated 読み書き payload['changes'] (例: {status:'closed'}).
ステータス: OpsIQ のcanonicalセットは open, customer_reply, answered, in_progress, pending, closed. プラットフォームの語彙に小さな2方向マップをキープし、列が実際に書いた値を受け入れることを確認してください(an) ENUM 値が失われて、あるデータベースで空にしてしまう。 担当部署: OpsIQ 部署 ID は、あなたの側で意味がありません。 送信する. 記述子を送って下さい(name, email それに slug) 電子メール → 名前 → slug で、あなた自身の部門に対してそれを解決し、従って「振動部」の土地を造ること あなたも 代りのビル部門 総合案内. 両方のトリガー ticket.escalated と、 department_id 変更点 ticket.updated.
お客様がチケットを開くときに特定の製品を選択した場合、エージェントは集中したサービスカード(「他の製品を閲覧」)を見るようにヒントをスタンプします。これらのいずれかを渡して作成してください(:
Preferred: the service id exactly as it appears in your IdentityProvider::lookupCustomerServices() list (each service's id). Unambiguous match.
プラットフォームサービスコードなど WHMCS S396 (サービス)396) / D11 (ドメイン)11). OpsIQ 任意のタイプレター + ID を分解し、サービスリストに一致させます。このタイプガードは、ドメインコードが同じ ID の製品と一致しません。各サービスのマッチング ref を正確にマッチします。
ドメイン名; 各サービスの詳細情報/ドメインに対するサブストリングとして一致します。
6つのステップを手で埋める必要はありません。 自分の言葉でコネクターを記述し、OpsIQ'AIは、すべての仕様書を草案化し、ウィザードが使用しているのと同じバリデータで実行し、ディスクに書かれている前に計画を表示します。2つの場所があり、同じパッケージを生成します。
営業部 コネクタ→+ コネクターを加えて下さい→コネクターを造ります. ステップで 1 あなたが表示されます ✨ ビルドして、. コネクターが何であるかをタイプして下さい — プラットホーム、何をOpsIQ読み、書くべきこと、そして誰がそれを使用するか - 加えて下さいAPIあなたがそれを知っている場合は、ルート, そして、それを押します. ウィザードは、ドラフトからすべてのステップを満たしています, あなたはそれがタイプされた場合のように正確にレビューし、編集します. 上のステップ6同じパネルは、 ✨ AIでリファインなので、編集フィールドの代わりに変更(「請求書を読んで」)を求めることができます。
開封する お問い合わせ OpsIQ 管理者のどこにでもコピロトして、あなたが望むことを言う。 あなたは行動の名前やウィザードが存在することを知っておく必要はありません。
たとえば、「Trello用のコネクタをビルドします。ボードとリスト、カードの読み込み、ボード上のカードを作成する必要があります。 TrelloはAPIキーとトークン。」コピローは文中の答えを返し、表示します このコネクターを引くこと カード。 メッセージは簡略です、従ってプラットホーム、読書およびそれの記述を置いて下さい。
何もはまだ書かれていません。copilotは仕様書を草案化し、それを検証し、計画に返信します:コネクタが何をするか、それが(マークされた書き込み)、その仮定、およびあなたがまだ答えなければならない質問 - 通常、供給する資格情報。このドラフトはIDの下に駐車され、利用可能な滞在24営業時間
コピロがショーを見せる ビルド 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.
新しいコネクタは公開されていますが、有効ではありません。秘密を保持していません。その設定を開き、入力しますAPIキーまたはトークン、出版物 試験結果, それから 有効活用・・・ やっと、何もしない。
ドラフトされた仕様は、ウィザードの公開ボタンが使用しているのと同じ検証()を正確に行います。パスしない場合は、AIはエラーを与えて3回まで繰り返し、バリデータ自身の単語で拒否します。失敗した草案はパッケージになりません。
認証パターンと設定フィールドの名前をドラフトします。キー、トークン、シークレットは発明しません。コネクターの設定ページで後方に記入してください。
何も知らなかったこと — アカウントID、その領域は、2つのエンドポイントで計画を調べる。サイレントの仮定ではなくプランに関する質問として返ってくる。
AIは、パスを発明するということはありませんが、モデルが完璧ではありません。間違ったパスは、アクションのステップや実行時にそのライブテストに失敗する行動として公開されます。それは無声成功ではありません。
生成するものは、通常のビルダーパッケージです。同じ生成されたファイル、同じコントラクト、ウィザードで編集可能で、コネクタページから削除できます。別の「AIコネクター」はありません。
品質は、設定下で構成したモデルに従います→AI。 小さく、安いモデルは正しいが普通のコネクターを起草し、より多くの質問をします;より強いモデルはすぐにエンドポイントの多くを得ます。AI構成の下でそれを変えて下さい;他に何も変更する必要がありません。
manage_connectors — コピロはクリック時に失敗するカードを提供しているのではなく、そう言っています。ストアプラットフォーム、予約システム、決済ゲートウェイ — OWNオペレーションのどの回答を宣言できるコネクタOpsIQ's canonical コマースの役割。それを宣言し、コネクターは設定の下に現れます→クライアントチャット→チャットを自動で販売し、宣言を停止して消えます。登録するリストはありません。
commerce_roles.json宣言は、パッケージルートで独自のファイルに住んでいます。 ファイルの存在は主張です. 入居できません。 connector_contract.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. typoは実行できない機能を宣言し、"私はあなたのためにそれを確認することができます"として顧客に表面します。
役割(カタログ、可用性、引用、注文検索)を読んで、プラットフォーム上で何も変更しない操作にマップする必要があります。
マッピング order_create 生テーブルインサートに — record.create, db.insert, recordCreate、任意のスペル、任意の区切り文字は構造的に拒否されます。 直接書かれた行は、プラットフォームの価格設定、在庫ロックと確認メールを迂回し、独自のシステムが完全に信じられない順序を作り出します。
「私の書き込み地を落とす」に答える必見のルックアップ。 プラットフォームがすでに注文を作成している後、最も危険なタイムアウトは1つです。 回復なしのルクアップは盲目またはそれを失う唯一のオプションです。
決済プロバイダに直接話すパッケージも宣言しなければなりません payment_profile (通貨、国、方法、および方法) 社会招聘 — 未定の環境は、テスト統合がライブ決済を要する方法です。 webhook_verify (プロバイダの本物署名スキーム; ジェネリックシークレットコンパレは拒否されます) event_map (canonical のでき事に)。だけ実行する商人コネクター record_payment 既に検証済みの正式な支払い証拠を受け取ります。ゲートウェイであることは、あらかじめ留まらない必要があります。
商店のコネクターおよび支払ゲートウェイのコネクターは異なった契約です。下 接続された店の顧客発注、プラットホームが証明できる最も深いモードを選んで下さい。選択は署名された中包まれます commerce_roles.json; ストアとクライアントチャットは、実行時に再読み込みします。 そのため、以前のレンダリングされた提案を無効化し、ロールを削除したり、コネクターのアンインストールを解除したりすると、後者権限を残したりする代わりに、その処理が無効になります。
catalog_only地図を見る catalog_search または catalog_get. OpsIQ は、製品を検索し説明するかもしれませんが、実行可能な注文やチェックアウトの確認を表示することはできません。各パッケージは、独自のタイプの引用とチェックアウト/オーダーアクションがより深い契約およびマーケットプレース認証を通過するまで、この真正なデフォルトで残っています。プラットフォーム名からトランザクションサポートを差し控えないでください。
platform_checkout地図も quote それに platform_checkout.商取引のアクション — OpsIQ コアではなく、戻り値 checkout_url, checkout_reference と、正式な引用符。 URL はHTTPSでなければ、そのホスト名が一致しなければなりません customer_ordering.checkout_hosts または HTTPS ホストから派生した checkout_host_setting引用語句はこれ以上のために生きることができます15分。プロダクトpermalinkのローカル組み立てられたカートURLまたはリターンURL商売発行のチェックアウト機能ではありません。
direct_order地図も quote, order_create それに order_getと、 order_create.recovery. コアは、実行直前に引用符をリフレッシュし、出入口キーを供給し、任意の再試行の前に未知の結果の後、回復操作を要求します。とき payment_flow=opsiq_gateway, 追加マップする必要があります record_payment 認証的な回復/読み取り処理で。 OpsIQ は、ゲートウェイトランザクションを積極的に検証し、金額、通貨、商取引および注文参照にマッチし、プロバイダの参照を一度書いて、マーチャントインボイス/オーダーバックを読みます。 A mark_invoice_paid 決済証拠がない場合、ステータストグルは拒否されます。このアクションを作成するには、プラットフォームの独自の価格設定、在庫および注文ビジネスロジックを呼び出す必要があります。未加工データベース書き込みは拒否されています。
OpsIQ が支払いを所有している場合、チャットの顧客は到達する必要があります email_otp 注文が作成される前に —OpsIQ電子メール6-digitコードとそれを尋ねます。 これは、コネクタがオプトアウトするものではありません。 それは、実行カーネルの要求のための保証フロアです order_create.
オペレーターは、コネクターが宣言する場所だけに統一されたアドレスを受け入れることができます fulfilment_presence: customer_present. ホテルのゲストは到着しなければなりません。, そう間違ったアドレスが領収書を間違えて、部屋はまだそこにあります. デクレア remote_delivery — 配送、暫定、ダウンロード済み、および検証は、オペレータセットが設定したかどうかを要求します。なぜなら、値がそのアドレスの強さだけに残っているからです。 設定 minimum_assurance または reversibility: irreversible オペレータの機能を省略する機能も削除します。
デフォルトで30分、演算子から構成可能5所要時間24時間。 顧客は、表示されたライブカウントダウンを表示します 自分の タイムゾーンは、オペレータのものではありません。 期限切れのコードは、そう明白に言っており、無効なコードを報告するよりも新しいものを提供します。顧客が正しいボタンが古いコードを入力することは間違いなしになり、それらに同じループを丸めているように伝えています。
お名前とメールアドレスは必ず必要で、最初に収集されます。宣言 address, phone それに company as required または optional ビジネスに合わせて: パレットを出荷するショップは、必要なアドレスを宣言します。ホテルでは、電話が要求されると宣言されます。ゲストは予約の連絡がないためです。アシスタントは引用する前に会話でそれらに尋ねますOpsIQ必要なフィールドを欠く注文を置くことを拒否します。ビルダーは、正規化されたマップを書いています、ベースラインが含まれているので、ディスク上の契約は明示的です。
at_order (デフォルト) 注文書は、初回購入者のアカウントを作成することができます。 before_quote プラットフォームの価格が1アカウントに値する時 —WHMCSクライアントのプロファイルと顧客の通貨での引用による税金 —OpsIQアカウントを作成する customer_create 必要なフィールドが知られる直後に、そのアカウントの引用を尋ねます。そのため、確認カードは実際に請求書を受け取る合計を処理します。 account_flow: connector_signup.
注文を生成すると、アシスタントは過去のカタログを読み込むことはありません。 3つのツールが呼び出されます。 commerce_catalog_search (空のクエリは製品ファミリーの概要です。制限を超えた結果は名前でリストされています)、 commerce_catalog_get ひとつのアイテムをフルに、 commerce_quote、署名された確認カードサーバーを同じ壁を通して差し込むと、コネクタパスは常に持っていました。 1つのツール/動詞、あなたのコネクターはパラメーターとして、6つのコネクターを持つ店は18よりも3つのツールを取得します。 client_tools デフォルトを制限します。 absent は、マップされたすべての 1 つを意味し、 catalog_only コネクターは引用しません。確認は決して用具です:ウェブのカードのボタン、厳密な CONFIRM チャンネルでコマンドを実行し、モデルがお金を使うと何も言う。
id, name、顧客安全 summary, a category または製品ファミリー(これは、顧客の単語がコードである項目を見つける方法です) currency, unit_amount_minor, availableと input_schema 注文ニーズのフィールドを命名する。名前、家族、サイクル、要約に対する顧客の単語を検索します。
返品について {"success":false,"error":"…","missing":["domain"],"retryable":true} 値が間違っているか、不足しているとき。名前の拒否 missing または retryable 顧客を流す。 ベアの故障は、内部漏れが全くないため、一般的な状態にとどまる。
オペレータがジオ通貨(クライアントチャット → _行動)でオンにすると、顧客は、プラットフォームのFXストアを使用して、すべての表面上の自分の通貨で価格を読みます。カードは訪問者の図を合計表示し、ゲートウェイはディスプレイの量を正確に処理します。 あらゆる販売をパウズ (設定)→商取引)はキルスイッチです:カタログ、引用符およびルックアップのオープン;すべてのチャネルで停止を提案し、確認します。
パッケージのシールは壊れています。署名後にファイルを編集しました。パッケージを再公開します。インストールされたマーケットプレースコピーは、場所で編集されることはありません。市場パネルから更新してください。
キルスイッチがオンです。設定→商取引→すべての販売を悪用します。
顧客が購入できる場所の下にチャネルがチェックされません。サーバーのログはチャンネルの名前を置きます。
引用ツールは拒否されます。すべての呼び出しは、 [opsiq][commerce][client_tool] 理由:間違った項目id、項目が宣言されていないフィールド、取られたドメイン、または商人の自身の拒否。アシスタントのパラファラーゼを信頼する前にログを読みます。
このページは別のワークスペースに属します。各ウェブサイトのウィジェットは1つのワークスペースに所属し、ストアコネクタが有効になっている必要があります。
「必要なことについてもう少し詳しく教えてください」とAIプロバイダは、AIプロバイダーが失敗したことを呼びます。AI Historyは、そのターンの下の正確なエラーを示しています。ツールは到達しませんでした。
ワーカーはコード変更を1分以内にリサイクルしますが、会話は最後のカードを再再生します。新しい会話を開始してテストします。
ジオのことを確認-IPデータベースの設定(クライアントチャット)→Geo) および訪問者の通貨が FX レートを持っていること; なしOpsIQ間違った番号ではなく、ストアの価格を表示します。
引用符は運びます unit_amount_minor, quantity それに total_amount_minor、そしてそれは最初の2から派生するとして3分の1を扱います。それはそうではありません、そして仮定してそれは既に顧客の実質のお金の費用がかかります。
quantity お客様が選んだのは、ひとつの部屋、1つのライセンス、1つのポリシーです。あなたのマルチプライヤーは何かをすることができますOpsIQ決して見ません:夜、座席、請求周期、間隔、重量、層。ホテルは3泊1室を量として引用します1、単位105,000, 合計315,000. OpsIQ数量単位で確認カードを価格にし、ゲストを示した105,000、そしてそれから満たされました315,000商人が実際に戻ってきた。 1つの数字に合意し、別のものを請求されていることは、この契約ができる最悪のことです。
total_amount_minor 唯一の図です。 OpsIQ ショー、サイン、料金、および対立。 unit_amount_minor 行のディスプレイの詳細です。合計があなたが請求したものを正確にない場合、あなたの引用は間違っています - OpsIQ はそれを修正しません。なぜなら、十分に調整された合計は、あなたが名誉に合意したことがないからです。
回答の前に、自分の夜、層、割引、税金および手数料を適用してください。 あなたの行が一致しない場合 — ユニット番号全体があなたの合計を等しくすることはありません - OpsIQ は、何も理解できない破壊を防ぐのではなく、実際の価格で1つのラインとして全体のものを扱う - 。
上記の宣言は、ショップの宣言として始まりました: 物事を購入, 今支払う, それはあなたのものです, あなたはキャンセルすることができます. これらの4つの各1つは、いくつかの実際のビジネスが共有しない仮定です. 銀行の移動お金はそれをしないようにすることはできません. 保険会社は、アンダーライターが見ているまで「確認」と言うことはできません. 貿易担当者はその後に請求書を請求します. クリニックは、患者ではない誰かを請求しています. そう言う方法がないと, それらの企業が自分のプロセスを偽りなくしたり、すべての顧客に接続することはできません.
トランザクションコネクタは6つの質問に答えます。 厳重な読書に1つのデフォルトをそれぞれ — 何も安全であり、決して許さないと言っても、その人は疑問に見なさなかったときの著者は何もないと言わないからです。
transaction_kindpurchase, booking, subscription, bill_payment, transfer, application, top_up, renewal. 行動ではなく、語彙: それはあなたの顧客が読み込む言葉を決定します。 ワイヤー転送を呼び出すと、「注文」は、それが彼らが話すビジネスを理解していないようなアシスタントサウンドをします。正しい配管の量はそれから回復しません。 デフォルトは、 purchase.
decision_modeimmediate または deferred. 選ぶ deferred 書面、クレジット評価、参照、入学または委員会に行くこと。 OpsIQ は言う 投稿フォーム ではなく 確認済み、そしてそれについて尋ねる参照の上の手。人間と坐っている間誰かが彼らのアプリケーションが確認されることを言うことは最も有害な事ですチャットアシスタントは調整されたビジネスのためにすることができますし、それはすべての小売形の流れのデフォルトの行動です。デフォルトはに immediate.
payment_timingon_confirmation, deposit_then_balance, invoice_later または no_payment. これは、かどうかを決定しますOpsIQ決済ページを開く 全てでから推測できない payment_flow — 言う 誰だ? お金を取る, これは言う いつ、いつか. 送信する費用は何もないアプリケーションと、空のゲートウェイリストに到達する代わりに確認を終了します。
reversibilityreversible または irreversible. 金融コネクターが言う最も重要なことは言います。部屋は解放でき、小包は戻ることができます;完了された転送はできません — 未だ、お金はもう一方の端にあり、唯一の救済策は見知らぬ人にそれを返すように要求されます。宣言 irreversible 自動的に力 cancellation_flow それは none 本人確認をスキップし、任意の演算子の設定を禁止します。 他のこの宣言は言う. 2つのフィールドが不一致しているのは、実行時に最初に読み込まれる状態ではありません。デフォルトでは reversible.
cancellation_flownone, platform_only または connector_cancel. キャンセルロールは、すでに誰が到達できるかについてルールなしで存在しており、2つの誤った推測は反対方向に失敗します: 開いてチャットメッセージは引用料なしで支払われた予約をキャンセルする。 クローズドとキャンセルしたい顧客は電話に伝えられます。 connector_cancel 追加の必要 cancellation_quote それに order_cancel 回復 — OpsIQ 決してキャンセルしないようにします。デフォルトは none.
fulfilment_presencecustomer_present または remote_delivery. 統一されたメールアドレスが誰にも何でも費用を払うことができるかどうか。ホテルのゲストは到着しなければならないので、間違ったアドレスは領収書を間接し、部屋はまだあります。投稿された小包、暫定サーバーまたはそのアドレスだけで強度にダウンロードリンク葉。 オペレータの「スキップメール検証」の設定を、すべてで利用できるものにするものです。、そしてそれはそれらによって選ばれるのではなくあなたによって宣言されます。従ってホテルの推論は商品を出荷するコネクターによって決して継承されることができません。デフォルトはに remote_delivery.
minimum_assurance それに disclosure (オプション)minimum_assurance 要求を聞かせて下さい 詳しくはこちら OpsIQ よりもアイデンティティの証拠は、決して少なくありません。転送のためのステップアップを必要とする銀行は契約を促進しています。また、商人の自身のリスク決定がオペレータの利便性を上回るので、コネクターの検証をスキップするオペレーターの能力も削除します。 disclosure 単語表示 前のページへ 確認ボタン、料金、手数料または提示しなければならない冷却方法。それなしで、規制された企業は製品名に必須の単語を切り替えます。
notify_flowplatform_automatic, platform_triggered または none. OpsIQ が自分のチェックアウトを決して実行しない支払いを取るとき、それは普通のメールが火事しないようにします。 支払いを記録すると、支払われた注文がマークされます。 それは誰にも言うためのプラットフォームを義務付けていません。 platform_triggered 必須の order_notify 回復する役割、そして OpsIQ は支払いの読み込みバックがお金を記録しているだけを尋ねます。 none OpsIQ-side の確認強制的には、それ以外の場合、支払いの顧客はまったく何も聞きません。デフォルトでは 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_minor、ISO の currency、顧客、ライン項目、チャネルおよび paid_at.商人のコネクターは証拠が通る主張しなければなりません record_payment ホストされているチェックアウトコネクターは、独自の権限のある有料イベントを消費し、重複した支払い書き込みを受けていない。
モデルは宣言された製品と数量を選択するかもしれませんが、動作名を選択しず、チェックアウトを省略することはできません。URLまたはテキストから商店の状態を作成します。顧客は、正確な署名されたカードを受信し、確認ボタンを押してください。その確認は、ワークスペース、コネクタ、アイテム、数量、引用符、通貨、スレッドおよび有効期限に拘束されます。
WhatsApp, メッセンジャー,Instagram, Telegram、LINE、SMSおよびXは顧客アイデンティティとして提供者検証されたチャネルアカウントを使用します。この提案は、チャンネルのアカウントに署名され、確認はまだ同じ新鮮な引用符、株式、出金、支払いと回復制御を介して実行されます。ソーシャル顧客は、会話でレンダリングされる正確なワンタイムの確認操作を使用しています。このような「はい」などの通常の賛成は、権限を注文しません。
ネイティブの注文は、不透明なチャネルアイデンティティによってインデックス化されます。そのため、AIはメールや注文番号を求めることなく「どこが私の注文ですか?」と答えることができます。コネクティッドストアの履歴については、チャンネルIDをワークスペースにリンクします CRM/clientレコード そして、認証された顧客/オーダールックアップをコネクタで実行できます。カスタマーコンテクストプロバイダは、保存したリンクを受け取ります。彼らは表示名からアカウントを選択するか、チャットにタイプされている電子メールを選択する必要はありません。AIが直接回答する1つで、それは誰にもマッチしません。
コアは含まれていませんWHMCS, ホテル, SaaS, ストア, 銀行, 製品, ルートまたはベンダーブランチ. 引用アクションの型付き parameters 顧客フォームとAIスロットスキーマです。予約コネクタは、日付やゲストを宣言することができます。請求コネクタはサイクルを宣言できます。将来のエンタープライズコネクターは、独自の安全なフィールドを宣言することもできます。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 コネクターの外部顧客 ID を受け取るアクションパラメーターへ。このフィールドは、顧客に対して表示されず、発信者による付加価値が削除されます。 OpsIQ は検証されたコネクタリンクから ID のみを注入します。ゲストチェックアウトは空にします。タイプされたメールは、認証済みのゲストルックアップには、ログインではなく購入権限はありません。
グループ化されたドメイン: 署名付き顧客アカウントとコネクタ構成は、グループプライマリポータルワークスペースに属しています。ただし、そのメンバーのWebhookシークレットを使用して、ウィジェットを埋め込む正確な会員サイトにアイデンティティトークンが署名する必要があります。 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_url. Coreは、確認時に引用をリフレッシュし、通貨、合計および安定した選択を正確に比較します。このコネクターはプラットフォームの応答をこれらの封筒に変換します。コアはベンダーフィールドを翻訳したり、商人_ URLをコンストラートしません。
お支払いは、お客様ご自身でゲートウェイを差し込むことはありません。 ネイティブストア決済ゲートウェイ コネクタビルダーでブロックします。 これは、明示的なバージョン契約、マップチェックアウト作成とアクティブな支払いの検索機能を追加し、プロバイダがホストされているチェックアウトドメインを割り当てます。 コネクターをインストールしたら、有効化してコマース設定の下で選択すると、同じゲートウェイはパブリックストア、ストアモダル、クライアントチャットチェックアウトおよび自動チェックアウトに表示されます。 プロバイダースラグはハードコードされていません。
{
"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_url プロバイダーが1つを持っているとき、 session_id. URL は HTTPS でなければならず、資格情報を含んでおり、許可されたホストと一致しなければなりません。
ステータスアクションは、新しいプロバイダー API の検索とマップを実行します。 paid 本物のボオランとして、 amount_minor 整数者として、 currency ISOコードを3文字で作成し、 provider_ref. 返し URL、クエリ文字列、クライアントペイロード、またはコネクタが「確認」された指示は決して真理を支払いません。
ゲートウェイが払い戻しをサポートしている場合、マップ payment_refund およびその回復行動。払い戻し作成は厳格に返します accepted それに completed ボオリアンプラス provider_ref;回復はプロバイダの調査を実行し、リターンします status. 両方のアクションがなければ、 OpsIQ はコネクターの払い戻しを広告しません。
コネクターは決して書きませんOpsIQ注文状況。OpsIQ返された金額と通貨を正確に比較し、プロバイダの参照を記録します。その後、コアはプロバイダーに検証済みの移行を実行します。マニュアルバンク転送は、名前付きエージェントが承認できる唯一のフローを保持しています。
commerce_roles.json. 出版はまだ正常なマーケットプレースのレビューおよび署名プロセスを使用します; この契約はパッケージの検証を迂回するか、またはコネクターを非アンインストール可能にしません。 手で任意のパッケージを確認 php tools/verify_commerce_contracts.php.http リモートでAPIまたは bridge デプロイされたブリッジで名前付き操作を行う(NOを参照してください)API以下パターン)。 ロールは輸送アグノスティックです。ランタイムは、指定されたトランスポートを必要とするため、バージョンペアのブリッジを使用できます。上記取引契約は、コネクタパッケージを必要としません。プラットフォームがあなた自身の場合 — カスタムバックオフィス、内部の API_、システム誰もコネクターを出荷しません - あなたはすでに他のものを統合するために使用2つのツールで同じ販売機械に到達することができます:カスタムアクション(HTTPエンドポイント、アクションページ上で定義)とトリガー(event webhooks)。 同じコントラクト、同じカード、同一ID保証、同じ支払いカーネル、同じ支払条件のカーネル、同様のレシートは、サードパーティ製パッケージにのみ欠落しないようにします。
コマースロールごとに1つのカスタムアクションを構築します。それぞれは、サイドの HTTPS エンドポイントをプレーンで定義しています。 AIと自動化 → アクション URL 、auth ヘッダとパラメーターを使って。それから、それらのアクションにロールをマッピングする宣言を保存します。その瞬間から、ストアはコネクターが返されたようなチャットで表示されます:AIは、 あなたも 引用アクション、確認カードのレンダリング、顧客はメール、注文カーネル呼び出しを検証します あなたも 出土キーでアクションを注文する OpsIQ は、ワークスペースのゲートウェイを介して支払いを取り、 あなたも 記録支払いアクションブック それ。顧客体験に関する何も「カスタム」と言います。
ワークスペースの設定として、この JSON を保存します。 commerce_custom_integration (設定)→高度な設定、またはREST の設定でAPI)。それはパッケージと同じ形です commerce_roles.json コマースノード、 action カスタムアクションIDを命名:
{
"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. 「あなたの合計は、お金を動かす唯一の数字です」セクションのすべてが、上にあるすべてのものは、動詞:税金、手数料、乗数がINTOに行きます。これは、あなたの合計が署名されているものであるため、表示され、請求されます。
受取人 idempotency_key、署名された total_minor それに currency、確認される customer_email、およびあなた自身の引用パラメータ。注文でキーを保存します。すでに注文を作成している場合は、2番目のものではなく注文を返します。システムが署名された合計とは異なる注文を価格設定する場合、手数料の不足ではなく再配達を拒否してください。 reference プラットフォームを認識します。
order_by_key 出没鍵と回答を受け取る {"found": true, "order": {...}} または {"found": false}. 見つかりました:偽は約束です — OpsIQ その強さに書き直すことができます。 ステータスフィードまたは最近注文リストは、書き込みに関する回答ではありません。
ゲートウェイトランザクション ID を、後述の idempotency キーと注文参照として受け取ります。 OpsIQ ゲートウェイを使用して、積極的に金額と通貨を検証しています。プラットフォームの独自のロジックで支払われた注文をマークしてください。あなた自身のメールを消し、自分の株式を減らすことができます。リターン platform_notified: true プラットフォームが顧客自身をメールする場合。
収集されていないAIが顧客自身を入力として確認カードにレンダリングされ、ドメイン、日付、シートの入力であるQUOTEアクション(アイデンティティパラメータ)で宣言する任意のパラメーター。ラベルは、顧客が読み込まれているものです。
共有イベントバスで2つのイベントが発火するので、Webhooksと自動化は実行されるたびにチャット販売を聞きます。
commerce.order.created注文が商人の側面に土地を、支払の前に—参照、コネクター(または) custom_commerce)、量、通貨、顧客の電子メール、糸のID。
commerce.payment.confirmedゲートウェイが積極的に支払いを検証するとき、正確に1回注文します。重複したレシートを防ぐのと同じクレームに乗るので、あなたのwebhookを倍増することはできません。
カスタムの統合は、ワークスペース構成です。それはあなたのワークスペースでストアを機能させます。あなたが統合を配布したい瞬間 - 他のワークスペース、市場、バージョンアップ、署名、有料インストール - 同じアクションとコネクタと同じ宣言をパッケージ化します。契約は変更しません。ラッパーのみが行います。
実質のプラットホームの豊富なはRESTを出荷しませんAPIすべて。 古い請求システムであるホテルCMSは、別注の内部ツールです。 あなたはまだ完全な書き込みをすることができますOpsIQコネクタ: コネクターは、オペレータが自分のパブリックWebrootにドロップする単一のPHPファイルを出荷し、そのファイルはISですAPI.このページは全パターンで、そのルールを安全に実行し、各規則の背後にある理由を作るルールです。
通常のコネクタは、他の誰かの API を呼び出します。ブリッジコネクターはそれ自体をもたらします。他に何も変更しません:同じアクション、同じコンテキストプロバイダ、同じアイデンティティ契約、同じパッケージレイアウト。
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.
プラットフォームの独自のindex. phpに続いています。プラットフォームコードは変更されません。プラグインはインストールされていません。プラットフォームアップグレード全体で維持することはありません。
設定。json は webhook_help. snippet_template を宣言します。 コネクターページでは、既に置換されているライブ設定でコピー可能なファイルとしてレンダリングされますので、ハンド編集には何もありません。
Client. php は、X-Opsiq_-Bridge-Key ヘッダで共有キーを GET リクエストに送信します。ベース URL 設定はプラットフォームサイトのルートです。
api_key 有効化したら、そのまま送って下さい X-Opsiq-Bridge-Key、同じ保存された値を結合する OPSIQ_BRIDGE_KEY コピー可能なファイル。プラットフォームがどれも、あるいは生成されたブリッジを動作させる必要がある場合にのみ、手書きの許可が必要です。手書き橋はウィザードから安全です:それは独自のマーカーを運ぶ橋ファイルを上書きするだけです。このファイルは、共有鍵の背後にある公開されたウェブルートに座っています。 単一の事実は、以下のすべての規則を駆動します。 あなたの橋をより簡単にするためにそれらのいずれかをリラックスしないでください。
WHERE句ではなく、ORDER BYフラグメントではなく、「この1回だけ」の未加工クエリパラメータではありません。 呼び出し主はテーブル、列と値の名前を指しています。 あなたのファイルはステートメントを構築します。 発信者が SQL テキストに投稿できる瞬間、1つの共有キーが任意のデータベース実行になります。
識別子はパラメータとしてバインドすることはできません。そのため、代わりにチェックする必要があります。このデータベースの実際のテーブルと列のリストを読んで、それ以外に何も拒否します。このスキーマの本当のオブジェクトではない識別子では、すべてのクエリに到達できません。つまり、すべてのテーブルを露出するために安全です。
例外なく、検索中の値を含む。検証された識別子とバインド値は、表面全体および射出面のニルを作るペアです。
次のブロックを参照してください。 これは、ほとんどの人がスキップしたいルールです。
カラム名:パスワード、メモ帳、シークレット、api_key、private_key,ソルト、トークン。アウトする際のプレースホルダーで値を変更します。書き込むだけで、生のパスワードハッシュを操作しないので、その場で完全に書きます。プラットフォーム自身のパスワードをフローに送信してください。
決して一括削除しないで下さい。フィルターによって削除しません。バルク除去はデータベースの死方です。誰かが本物的に1つを必要とするならば、それらはプラットフォームでそれをすることができます。
制限パラメータを硬い天井で締める。ランサウェイクエリは、チャットメッセージを通してデータベースをダンプできない。
構成されていない橋は答えます403全てに。構成される前に役に立つブリッジは、見知らぬ人に役立つ橋です。
hash_equals, 決して ==. キーは X-Opsiq-Bridge-Key はクエリ文字列ではなく、アクセスログ、プロキシログ、およびレファラーヘッダーから保持されます。
1つの方法、1つの形状、体内でのスムーグルには何もしません。ブリッジは検証されたパラメータでGETとして明示的になく、 OpsIQ は唯一の呼び出し者です。
これは、と議論されるルールです, ので、ここに完全な推論であります. アシスタントは、それが有用であるものであることを確認することができます: それは、, そして、読み取りは何かを破壊することはできません. 書き込みは異なります. このファイルは、1つの共有キーの背後にある公開Webrootに座っています. その鍵漏れがない場合, 制限されていない書き込み表面は、フルデータベース制御に等しいリークを作ります — 新しい管理者ユーザー, 空に予約テーブル. 許可リストは、まだキーが有効にできないことを意味.
/* ── 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';
下のチェックの2つの詳細は、簡単に問題が得られることです。テーブル名はすでにReSOLVEDに到着し、インストールしたテーブルプレフィックスを運ぶため、オペレータは許可リストを非プレフィグに書きます。なぜなら、自然にタイプするからです。どちらの方法かプレフィクテッドのインストールの両方を比較すると、何もすべての書き込みが破綻します。そして、拒否はそれを読む人はチャットウィンドウで管理者であるので、スタックトレースを持つ開発者ではありません。
/** 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);
};注文がデータに触れる前に、この順番で4チェック。注文だけでなく、チェックをコピーします。
<?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. */これは、Recklessから安全に「アシスタントはテーブルにリーチできる」というようなものです。 実際のスキーマに対する呼び出し元のテーブル名を解決し、欠落または追加テーブルのプレフィックスを許容し、他の何もnullを返すことができます。 ダウンストリームはすべて、provableが存在する名前で動作します。
/** 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;
};バリデーションされたもの、検証されていることに注意しましょう。フィルター列は実際のカラムリストからチェックされ、その値がバインドされます。制限はクランプされます。行は途中で再確認されます。更新ではプライマリキーと任意のオースカラムを除外し、テーブルに1つがある場合にupdated_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,
]]);
}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)),
]]);
}プラットフォームのバージョンは異なります。列の移動、名前変更、または欠損します。 1つのスキーマを1つと仮定するブリッジがインストールされます。代わりにイントロスペクトし、適応します:ここに存在する列だけを選択し、テーブルの接頭辞を許容し、参照の句を試す。
/* 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));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.
一見面では、証拠が一致しなかった参照と存在しない参照はSAME応答を生成しなければなりません。異なる回答は、どの参照が現実であるかを確認するか、誰の患者のための無料の顧客リストエクスポートであるかどうかを確認するための軌道にあなたの橋を回します。
橋はと精密である場合もありますOpsIQ. 訪問者が決定する到達範囲OpsIQ、1つの固定拒否で。
オペレータはリポジトリを開かず、コネクターのパネルを開けないOpsIQコピーを押すと、設定からコピーが来ます。jsonと、ブリッジ/*.phpと同じプログラムでなければなりません。
{
"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" }
]
}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.
生成された秘密の割り当てを明示的に宣言します。同期ツールは、出荷橋からパネルコピーを再構築し、復元します OPSIQ_BRIDGE_KEY = {{setting:api_key}} このバインディングから。それなしで、アップグレードは忠実にキーレスパッケージファイルをコピーし、オペレータのデプロイ可能な鍵プレースホルダーを静かに削除することができます。 コネクタビルダーはこのバインダストレーションを自動的に生成されたブリッジパッケージのために放出します。
それとは独立して、{webhook_url}, {webhook_path}, {webhook_secret}, {site_key}, {base_url}そして、{slug}パネルがスニペットを見た前に満たされています。
リストは、ブリッジファイルや別のリレーホックなど、1つのパネルに複数のスニペットを与えます。
# 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.
形づけられた操作とユニバーサルデータ面、一緒に。 形状のものは、実際に尋ねる質問に対する意図的な答えを戻します。 普遍的なものは他のすべてをカバーしているので、アシスタントが立ち往生することはありません。
統計、フィルタ付きのメインオブジェクトリスト、関連する列を持つ1つのオブジェクト、販売されているもののカタログ、顧客検索履歴。これらは、5ではなく1つの呼び出しでAIに良い答えを与えます。
問題の2つまたは3つの状態が変更される - ステータスを設定、キャンセル。許容値を保持する許可リスト
売掛かりのプラットフォームでは、目的別カタログ、引用符、チェックアウト/注文と支払い証拠操作を明示し、それらをマップします commerce_roles.json とりあえず transport: bridge. 決して普遍的な record. create/update 表面に商取引の書き込みの役割を地図に入れないで下さい。
テーブル(列数)と記述(列、タイプ、主キー、および列ごとの読みやすく、書き込み可能なフラグ)。 これは、アシスタントが予想しなかったプラットフォームを学習する方法です。
クエリ、 record. get、cord. create、 record。update、 record,delete。 上記に示すように検証されたものの1つ。
アイデンティティプローブは、ADMIN'S BROWSER、同じoriginによって呼び出されますので、カスタムヘッダーを送信することはできません。 彼らの認証はプラットフォームセッション自体です。 キーゲートを先に置き、すべてのレコードデータからそれらを保存し、それらが秘密を返すことを許可しません。 コネクタのIDページを参照してください。
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"
}
}
}record_payment マーク付きショートカットではありません。サーバー検証済みのプロバイダの証拠だけを受け入れます:正確な注文、商人、金額、ISO通貨、プロバイダーの参照、新鮮な検証されたタイムスタンプと出金キー。プラットフォームの支払い/請求書を通してそれを主張するAPI, その後、権威的な順序または請求書の読み取りバックを返します. 未知の結果は、任意の再試行の前に回復を実行しなければなりません.それをテストします。 定数の名前を空にし、すべてのオペの回答を確認します403.
hash_equals とヘッダーのみから読み込まれるキー。
間違った接頭辞でテーブル名が解決します。
説明で名前が拒否されると書いています。
オペレータにそれを拡張する方法を伝えているメッセージで。
php tools/sync_connector_bridge_snippets. php は、ステップで報告します。
パッケージがブリッジファイルを出荷する場合、コネクターのアップグレードを行うオペレータは、WebrootにファイルをALSO赤味付けしなければなりません。パネル本体とCHANGELOGで、すべてのリリースでそう言ってください。
読むだけで話すことができる橋 SQL.プラットフォーム上で物事をクリエイトする橋(注文、予約、支払済請求書)は、プラットフォームのアプリケーションレイヤーを通過し、そのレイヤーがヘッドレスにこのパターンですべての微妙な故障が命じる場所にあることをブートする必要があります。以下はすべて、ライブインテグレーションのハードな方法を学びました。各ルールは、どこにもエラーが発生しない実際の欠陥に対して行われます。
行は、管理者がリスト表示され、まだプラットフォームが作成するというレコードではありません。ネイティブリファレンス番号、モデルのホックなし、イベント無し、請求書なし、顧客のメールなし、作業中の顧客とのリンクはありません。顧客は、プラットフォームに発行されていないスタッフに通知する参照を引用しています。プラットフォーム独自のサービスを介して作成します。ポストペイメントサービスの露出だけなら、それをシームで期待して渡すグラフを作成してください。
参照フォーマットの2つのサンプルは、それを再現しやすく、そして再生成するのは同じ影書き1レベルダウンです。プラットフォームがそのスキームを変えた日、レコードの1つが間違っており、警告はありません。ジェネレータ(リフレクションは非静的)に電話をかけ、送信したものを信頼するよりも保存された値を読みます。
プラットフォームの列にあなたのものを格納する前に、すべての読者を見つけます。 無料のスロットのように名前付けられた列は、参照統合でロードベアリングすることができます。 transaction_id 顧客の電子メールで送信された「予約を見る」リンクが解決するトークンであることが判明しました:そこに保存される不利な消化器は、すべてのゲストリンクを静かに破りました。 橋渡しの表にあなたの簿記を維持してください: ユニーク(操作、 idempotency_key)は、再生ガードであり、制約は同時ツインを拒否し、回復ルックアップは同じテーブルを読み込みます。その表を作成 BEFOREのstartTransaction: MySQL DDL はオープントランザクションを暗黙的にコミットします。
プラットフォームサービスが既にイベントをディスパッチする場合、それを自分で送信すると、2つの確認メールが送られて2つ生成されます。何も聞いていないなら、ディスパッションは誰にも送信されます。どちらの失敗もエラーを引き起こします。メソッドを反映し、ソース行をスライスして、実際に何をするかを読んでください:名前ベースの推測と両方の体上のレグックスがこの問題をもたらした前に、そのソースが解決しました。
Laravelはクラスリスナーをクロージャでラップします。そのため、getListeners() は [email protected] すべてを報告しています。実際のクラスの名前は getRawListenerS()です。名前を付けられないイベントをディスパッチしないでください。
queue=sync を使うと、キュードリスナーがブリッジリクエストでインラインに実行されます。ブートコンテクストはレンダーコンテキストです: すべての登録または URL 顧客の受信トレイにブートランドで欠陥します。何かが実行される前に、config('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.
ブリッジスクリプトでキャプチャされたポイントリクエストは、route() なので、 url() および Asset() の生成 site.com/公共/opsiq-bridge.php/checkout/TOKEN:カスタマーリンク JSON endpoint. は、RootUrl(config('app) です。url') ジェネレーターを修正します。STORAGEディスクは独自のルートを持っていますので、電子メールのロゴはfilesystems.disks.publicまで壊れたままになります。url 設定はあまりにも(それは怠惰を解決するので、起動時にそれを設定し、空のときやスクリプトに依存しない時だけ:オペレータのCDN URL オーバーライドするあなたのものではありません。
プラットフォームのサービスは、独自の接続を読んでおり、オープントランザクションが見えない。コミット前に呼び出され、ポストペイメントサービスでは、完了した支払いが見つかりません。レコードは未払いのままに残らず、イベントを中断してしまうため、顧客はプラットフォームが支払われないという記録について電子メールで送信されます。グラフをコミットしてから呼び出します。
ネイティブパスが到達不可能な場合は、再試行可能なエラーで拒否します。参照を発明しないでください。半統合レコードの外観を終わらせるためのステータスを更新することはありません。ネイティブ処理が失敗した検証された支払いは、次のように調整に行きます needs_attention: お金は本物で、状態は正直に「支払い、まだ処理されません」です。
「サービスラン」と「顧客が言われた」は異なる事実です。参照統合は、ran-flag が真言している間、すべてのフィールドブランクで完全に見えるメールを出荷しました。それらを別々に返します(処理が完了し、通知が試みました)、一心おきに保つ platform_notified それを強制する OpsIQ プラットフォームが処理しなかったとき、フォールバック確認を行い、配信を主張しない:受信トレイはサーバーから保護できません。
ブリッジに読み取り専用の機能プローブを出荷:クラスの存在、メソッドシグネチャ、コールする方法のソーススライス、生リスナー、キュードライバー、(質問が無害な関数を呼び出すことによって回答することができる場合)ライブコール自体。 1つの空のメールに関する5つの理論は、ソースがそれを解決する前に測定に対して死亡しました。 プローブラウンドはファイルコピーを費やします。 ライブプラットフォームで間違った書き込みは、顧客を負担します。
ブリッジパターンはPHPパターンではありません。OpsIQcall は HTTP エンドポイントなので、 Node, Python, Go, Ruby, .NET や Java などのファイルも使用できます。SQLエンジンまたはMongoDB. PHP 字型がパッケージングパイプラインであり、その制約は、あなたのブリッジがオペレータに到達する方法を決定します。最初に配信セクションを読んでください: それは人々を驚かせている部分です。
契約全体です。言語名は何もありません。
HTTPS。 呼び出しあたりの1つのGETリクエスト。 体、それ以外の方法はありません。
共有秘密の秘訣 X-Opsiq-Bridge-Key リクエストヘッダーは、一定時間で比較されます。クエリパラメータではなく、クッキーではなく基本的なauthではありません。
クエリ文字列。 op 表面の名前、 do 操作の名前は、残りの部分がその動作の引数です。
JSON. {"success":true,"data":{...}} または {"success":false,"error":"snake_case_reason"}. コンテンツ型アプリケーション/json、キャッシュなし。
200成功に。403構成されていないか、または間違ったキー404見つかりませんでした,405間違った方法,400悪い引数,501このスキーマでサポートされていない。
フレームワーク無し、ランタイム無し、 いいえOpsIQ側にあるライブラリです。それが役立つことができれば、それは橋になることができます。
署名されたパッケージは、ファイル拡張子の固定リストをカバーしており、そのリスト外にあるファイルはZIPから残っています。 リストがカバーされていない言語のブリッジでは、パッケージ内で出荷することはできません。 しかし、それはもはやあなたも消えません。 ので、268月8日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
署名されたZIPでファイルが保存され、スニペットの検証者はパネルコピーバイトを識別することを可能にします。これは2つだけです。ドリフトチェックはすべてのファイルをブリッジ/で読みます。PHPだけでなく、ストールパネルのコピー付きのアップグレードされたブリッジはどちらかの言語でビルドに失敗します。
パネルスニペットは、それが保持する言語を全く考えていない文句のテキストです, ので、任意のスタックのために動作します. Webhook_help. snippet_templateでプログラム全体を置く, スニペット_ファイル名にファイルを名前を付けて, そして、ブリッジ/でコピーを残しません — 適合は、それを空に出荷するよりもパッケージを拒否します. オペレータがパッケージからそれを得るのではなく、このファイルをコピーするwebhook\help. bodyで平野に言ってください.
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、それからパッケージを再度署名して下さい。同じ4つのチェックは、どこにでも同じ順序で行われます。キー、1メソッド、ヘッダからの定数のキー比較で閉じられなかったり、接続します。実際のトラップのみが比較であり、各言語に異なるトラップです。
// 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 — 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
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)));
}安全プロパティは変更しません: 供給された呼び出し主が、補間される前に実際のスキーマに対してチェックされなければならないテーブルまたは列名、すべての値はバインドパラメータでなければなりません。 紹介クエリのみ、引用文字とペーディング句は異なります。
表: SELECT TABLE_NAME FROM information_schema.TABLES WHERE TABLE_SCHEMA = ?. コラム:反対の同じ information_schema.COLUMNS とりあえず AND TABLE_NAME = ?. バックティックスで引用し、内部のバックティックを倍増します。ページと LIMIT n OFFSET m.
同じ情報_schemaビュー、小文字の名前、 WHERE table_schema = $1 (通常) public)。二重引用符によって引用し、中二重引用語句を倍増して下さい。ページはと LIMIT n OFFSET m. 折るルールを見る: 未引用の識別子は、ケースを下げるために折り畳まれているので、名前を解決するときに大文字小文字で比較します。
同じ情報_schEMAビュー。正方形のブラケットで引用し、閉じるブラケットを内部に倍増します。 ペイジはORDER BYを必要とします: ORDER BY [id] DESC OFFSET @o ROWS FETCH NEXT @n ROWS ONLY.
表: SELECT name FROM sqlite_master WHERE type = 'table' AND name NOT LIKE 'sqlite_%'. コラム: SELECT name FROM pragma_table_info(?) — 表評価されたフォームを使用して、バールが PRAGMA table_info(x) ステートメントは、境界パラメータを取ることができませんし、文字列の補間を招待する あなたが閉じようとしている穴が正確にあります。 ダブルクォートで引用します。 ページ with 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以降
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;
注入するクエリ文字列はないので、ガードには何もないと仮定します。フィルタドキュメント: 呼び出し側を渡す JSON ストレートに find() 呼び出し元が送信されるようにする {"$ne": null} または {"$gt": ""} 値が期待される場所、そして静かにすべての文書を選択します。フィルターを自分で構築します。
// 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();つまり、あなたの情報_schema. 呼び出し者のスペルを反復し、解決された名前を使用します。
文字列() または数値()は、オペレータの注入に対する全防衛です。値が期待される文書は、ストレイ引用符の NoSQL と同じです。
投影中の秘密のフィールドを除外して、後続した結果から削除するのではなく、サーバーを離れることはありません。
解決された _id で deleteOne。決して削除しません。そして、呼び出し主が影響するフィルタは絶対にありません。
同じ理由としてSQL: 書物に触れるコレクションを名前を付け、説明で休息を拒否します。
アイデンティティプローブはブリッジのもう半分であり、HTTPも同様です。署名ブロックはすべての言語で同じです: base64url ペイロード、HMAC-SHA256 文字列、ドットで結合します。
これらのスニペットは、意図的に厳しいPORTALハンドオフトークンをミントします。それはjtiとSingle_use:trueを運び、120秒数で移動するので、URL.ブリッジまたはウィジェットのアイデンティティトークンは、それらのどれも運び、より長いexp、分から時間まで使用していません。
site_key、iat、exp、トップレベルの認証:true、管理者または顧客によるIDとユーザー名または電子メールの対象。同じクレーム、同じ署名、同じ秘密。
3 部 JWT 署名 HS256 作品, 2 部の base64url ペイロードと六角 HMAC PHP の参照が放出される。言語のライブラリが自然になれるたびに、JWT ライブラリは通常 PHP 以外の短いパスです。
あらゆる言語で真に。クライアント側を署名すると、サイトシークレットをすべての訪問者に発送することを意味します。
PHP でブリッジを書く。パッケージに出荷されると、ドリフトチェックが付き、プラットフォーム独自のフレームワークを起動して、アイデンティティプローブのライブセッションを読み込むことができます。他には3つすべてを与えることはありません。
. jsブリッジは、PHPの1つと同じくらい正確にドリフトチェックをしています。何も与えられません。
パネルのスニペットを通して渡し、パネル本体でそう言う; 適合がパッケージを拒否する橋/にファイルを残しません。 コネクタは、その場合、完全に正常です: アクション、コンテキストプロバイダ、アイデンティティおよびゲストは、HTTPコールにどのような回答をしても気にしないため、すべての作業同じです。
その後、ブリッジパターンは正しいツールではありません。 ブリッジは、自分のホストの内側からプラットフォームに到達する存在です。 あなたが外からそれに達することができるならば、あなたは普通に書いていますAPIどんな表面に対してもコネクタが露出します。
これは「仕事が、役に立たない」というコネクタから欠落している単一の最も一般的なことです。アクションはAI DOのことを聞かせます。コンテキストセクションではKNOWのことを許可します。コネクターは両方を必要とし、管理者は行動によって決して文脈で答えられるように頼みます。完璧な操作とコンテキストプロバイダを持つコネクタは、それが何も見えないことを真実に報告しません。
アクションで宣言される。jsonまたはregisterActions() で返します。モデルは1つを選び、そのパラメーターを埋めます。OpsIQ実行します。アクションは動詞のためです:この予約をキャンセルし、そのチケットを開き、このステータスを変更します。
モデルは実行する前にContextProviderによって組み立てられます。 「今月何注文」、 "私の最新の顧客はどこですか"、すべてのコンテキストビューアップを通して解決し、アクションに触れることはありません。
OpsIQ は、一般的な名前でセクションを尋ねます。 あなたの仕事はあなたのプラットフォーム上でどのような手段を決定し、それに応えることです。 ホテルの予約はホテルの注文です。部屋はホテルが販売しているものです。 マップ、発明しないでください。
トランザクションがプラットフォーム上にあるのは、注文、予約、ジョブ、出荷などです。 pending_orders は、未完成のものに対してフィルタリングされたリストと同じです。
顧客用ロスター。
プラットフォームが販売する製品、部屋、計画、サービス。
収益と金字の合計、プラス州でカウント。
プラットフォームが本物にそれらを持っているとき、これらを使用してください。マッピングを強制しないでください。未回答のセクションは間違ったものよりも優れています。
あなた自身の宣言。セクション(): ['licenses','shipments']を宣言するプロバイダは、ユニバーサルルックアップの許可リストに統合されているため、プラットフォーム固有のルックアウトがコアの変更なしで利用可能になります。
コンテキストプロバイダはインターフェイスを実装する必要があります。レジストリタイプチェックが付いたので、単にLOOKSの右がスキップされるクラスはエラーなしで、どこにでも飛ばされます。
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 を実装し、contextProviders() からプロバイダを返す。また、コネクタクラスはContextProviderInterfaceを直接実行して登録する。
build() は、プロンプトに連結されるテキストブロックを返します。リーダーのためにそれを書き込みます:見出し、1行あたりの1行。
独自の例外をキャッチします。投げるプロバイダはログオンしてスキップされますが、返す」契約です。
生成されたContextProvider. phpはセクションを出荷します():配列{戻り[]; }とwizardはフィールドを持たない。それを手で埋めます - ファイルウィザードのOVERWRITESから再発行することに注意してください。あなたの編集を最初にコピーしてください。
$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);OpsIQWORDSのアクションを action_id で分類し、意図的に保守的です。認識できないものは書き込みとして処理され、承認カードが要求されます。動詞権と読み取りは実行します。
いずれかが設定されている場合、アクションは常に承認を必要とします。正直にそれらを宣言します - これは管理者の承認カードを表面しています。
加え、作成し、オープンにして下さい、更新して下さい、変更しましたり、変更し、取除き、取消し、取り消しは、取除くこと、取って下さい、再資源化します、承認して下さい、、引き込みます、印を、再燃して下さい、再オープン、割り当てて下さい、再発する、支払退会しましたり/無効にして下さい。、有効にして下さいり、問題は、発生し、充満、支払、提供の、再更新、改善、マージし、移動、ecalate、旗、登録、無声、押し、開始、操業停止、試み、開始を始動させ、そして再開して下さい。
取得, リスト, 検索, 見つける, 見ます, ビュー, カウント, 検索, 説明, 読み書き, エクスポート, プレビュー, テスト, ping, ステータス, 概要, 履歴, チェック, ログ, 統計情報, 概観, 収益, 故障, レポート, 分析, バランス, 利用量, 引用語句, スナップショット, インサイト, フィード, ドラフト, トリアージ, 分類, 提案.
GET、HEAD、およびOPTIONSが読み込まれています。
認識されていないと、承認が必要であることを意味します。そのデフォルトは意図的です。
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.
もし、manifestを自分で書くなら、native_api や platform_bridge の 1 つを正確に宣言します。conformance は、エスケープ・ハッチとして Platform_bridgeを扱います。そして Builder は API コネクターに platform_橋を主張するスペックを拒否します。
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.
このプラットフォームがどのようなものか、そのデータがどのように形づけられているのか、そのオブジェクトが呼び出され、そうでなければアシスタントが推測するという問題。プラットフォームを見たことがない有能な同僚のためにそれを書いてください。
コール可能な表面。ブリッジコネクタでは、これはあなたのオペで、RESTエンドポイントテーブルではなく、そのパラメータで語彙をします。
ラフリー6,000コネクターによって保持される文字、およびについて24,000有効になっているコネクタ全体ブロックの文字です。各コネクターの1つに、ファイルが切り捨てられます。トランケーターがいる前に簡潔になります。
これらのファイルは、ユニバーサルテーブルツールを使用してアシスタントと間違ったセクションから答えるの違いです。何も言わず、これらのツールが存在していると言いました。
署名契約は3つの面で機能します。コネクタのジョブは、署名されたトークンに「プラットフォーム上でログインしている」をオンにすることですOpsIQ確認し、そしてそれからで検証された主題を提示するためにOpsIQ's 図形。 コネクタは誰にも認証されることはありません。プラットフォームは、その主張を運ぶシグネチャです。
管理者対象。 ウィジェットは、プラットフォームの管理者パネルに読み込まれ、すべてのスタッフメンバーが独自の OpsIQ エージェントと一致しています。 管理者ウィジェットページでフルウォークスルー。
顧客主体。 これは、ログインした顧客が匿名の検索ではなくWORLDアカウントを取得できるようにすることです。すべての注文、詳細、および許可するセルフサービスアクション。
jti と single_use の同じリクエストで、120-second life、トークンが旅行するのでURL一度に費やす必要があります。この1を手書きしないでください:設定、サポートポータルは言語ごとに準備完了スニペットを運び、アカウントエリアがこのサーバー上で実行したときにプラットフォームがあなたに分岐します。
これらは、検証者チェックの主張です。ここで何もオプションはありません。他の部分的な例が示唆するかもしれないものは何でもあります。
上位レベル。リクエストのサイトキーを等しくしたり、トークンが拒否される必要があります。
レベル、非秒。 expは将来的にもiat後になければならない。 将来の1分のトークンが拒否される。 人生を短く保つ - 時間まで。
プラットフォームの主張は、実際の人間が記録されていること。
トップレベル。 起源を命名する短いスラグ。 推奨され、コネクタのアイデンティティプロバイダは別のプラットフォームから独自のトークンを伝えます。
対象者の名前を付けるオブジェクト。非空 ID、ユーザー名またはメールの持ち運びが必要です。管理者のアクセスゲートはそれぞれにマッチします。両方を持っている場合は両方を含めてください。
$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 には2つのトークンの修飾子があり、同じではありませんでした。このことを知っていると、症状が原因のように何も見ていないので、午後にあなたを保存します。
opsiq/embed/admin_ajax. php は、認証されたフラグをどちらの位置に受け入れるローカルな検証者を運びます。 会話リスト、履歴、そして全てがそれを通過しないように、彼らは罰金を科します。
opsiq/includes/customer_identity_token_verify.phpはチャットストリームとコアAJAXの後ろに座っていますAPI. これは、歴史的にトップレベルでフラグを要求しました。
履歴と会話が機能します。チャットの全ての応答は「ログインが必要」です。セッションバグのように正確に読み込まれ、トークンはトップレベルのフラグを欠落しています。
被写体内のトップレベルORでフラッグを受け付けているので、契約は均一です。 古いコアはトップレベルのみを読みます。 キャノン形状とパッケージはすべてのリリースで動作します。
2つのことは本当である必要があります。 コアは検証済みの顧客をスタンピングし、あなたのコネクタはそれを提示しなければなりません。
顧客主体で管理者と同じ署名者。プラットフォームのセッションから顧客を読んでください。あなたのプラットフォームが管理者からの異なるガードに顧客にサインインする場合、必要な監視を読んで、被験者に決して戻りません。それは顧客が管理トークンをどのように処理するかです。
有効なトークンでは、コアは検証されたサブジェクトをセッションにスタンプします。プロバイダは、実証済みのアイデンティティを読みます。認証されることはありません。
DetectCustomer() は、OpsIQ形状。実装する必要OpsIQ\Platform\IdentityProviderInterface、またはレジストリは静かにスキップします。コンテキストプロバイダと同じトラップです。
そして 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つのロックは漏れから離れてバグです。 2つのロックが契約です。
顧客チャットのアクションを実行する前に、OpsIQVERIFIEDのビジターID: client_id、clientid、user_id 、customer_id, account_idは検証済みの数値 ID を置き換えます。クライアント・識別子、アカウント・認証情報は文字列として取得します。メール、cli_email、customers_email 、 user_mail は検証済み電子メールを受け取ります。提案されたモデルは廃棄されます。
与えられたIDを取り、その表面にすべての読み取りと書き込みのWHERE節に追加します。 決して独自の要求で参照を信頼しないでください。 他の誰かの注文について尋ねる署名付き顧客は、禁止されていない空の戻って来る必要があります。
customer_id を呼び出すと、cust や ref ではなく呼び出します。パラメーター OpsIQ ロックできないパラメータは認識しません。
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.
{
"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."
}同じoriginはカスタムヘッダを運ぶことができません。その認証はプラットフォームセッションです。ブリッジキーゲートのAHEADを入れて、レコードデータを離れたままにして、ログアウトした訪問者のために何も戻りません。
{"success":true,"authenticated":true,"admin":{...},"identity_token":"..."} — and {"success":false,"authenticated":false,"error":"..."} when nobody is signed in.
署名されたトークンだけ、トークンを搾取します。
Laravelの完全なエンドポイント実装、WordPress, WHMCS, Symfony と plain PHP, と ハードウォン Laravel の特異事項とトラブルシューティングの順序は、管理者ウィジェットページにあります。 それらは顧客対象のコードと同じです: 読みたガードを変更し、署名した主キーをコピーします。
午後を失う最も一般的な方法は、marketplace_connectors/ でコネクターを編集し、それを再インストールして何も変更しないことです。 インストールは、そのフォルダを読みません。 彼らは市場カタログから署名された ZIP を引きます。 出版は、あなたの変更をZIPに入れる順序です。
作業場所です。何もインストールしません。
ZIP をインストールして、シグネチャを検証し、それを解凍します。ZIP を再構築するまでは、すべてのインストールが古いパッケージを取得しています。
It writes into /connectors/<slug>/ on this install. That is a local connector, not a marketplace release. The two paths do not overlap.
設定。jsonコネクタ_contract。json. Conformance は、slug、バージョン、または機能セットのdisagree とを比較し、失敗します。 そこにいる間CHANGELOG.mdエントリーを追加してください。それは必須ファイルです。
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.
php tools/resign_all_connectors. php — 署名はファイルハッシュをカバーするので、ANYは無効に編集します。すべてのファイルが最終の後に、最後に署名します。
シーダーは、ZIP を構築し、設定から読み取れないキーがコンテキストで実行されるので、環境から来なければならない。
コネクターのリインストールはパッケージを更新します。それはオペレータのウェブルートに座っているコピーに触れません。パネルと変更ログでそれらを伝えます。
# 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/ConnectorsZIPは、署名者のファイルリストから構築されています。そのため、パッケージフォルダに座っているstrayファイルが出荷されません。それは非審称です:顧客に乗るために使用される符号なしのファイル。
ツイートjson, js,css, md, txt,html、sh、svg、png、jpg、jpeg、gif、webp、ico、yml、yaml - 再帰的に、ブリッジ/テスト/を含む。 署名。jsonそれ自体はハッシュから除外され、ZIPに追加されるので、インストールは確認することができます。
残っているすべてのファイルの名前。そのリストを読んでください。あなたがそこに出荷する予定のファイルは、間違った拡張子または間違った場所を意味しています。サイレントな成功ではありません。
マークダウンファイルを含む。そのパッケージを再署名します。
コネクタインターフェイスのインスタンスを返す必要があります。
マニフェスト: slug, 名前, バージョン, manifest_version, 互換性, 機能, Connector_contract_version、設定。
マシン対応の契約。そのスラグ、バージョンおよび機能セットは設定と同じでなければなりません。json.
存在と最小サイズで3つすべてチェックされます。 DEVELOPER. mdは、実際のコンテンツではなく、スタブを必要としています。
各機能の名前は、ContextProvider. php というコンテキストで、IdentityProvider。php はアイデンティティ、GuestLookupProvider . php for guest_lookup などです。コネクターが機能インラインを実装しない限り、そのファイルには期待しています。
適合は、秘密の形状値とプライベートキーの3つの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 発見、設定、検証、有効化、実行、テスト、署名および配布。
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 manifest 版を使用する 1. バリデータは、slug, name, version, manifest_version, compatibility, description,機能が期待されます。互換性は宣言します opsiq_min それに opsiq_max. リリースステータスは1つ 製造工程, ベータ, プレビュー または テンプレート;機能成熟度はレベルL1–L6を使用します。レガシーパッケージは警告で正規化することができますが、新しいパッケージは注意なしで通過する必要があります。
slug(), name(), description(), capabilities(), settingsSchema(), testConnection().onEnable() それに onDisable(). 破壊不能は非破壊的でなければなりません; データ purge は別の審美的な操作です。handleWebhook(), poll(), backfill(). 投票は、増分作業を処理します。 バックフィルのインポート履歴と繰り返しに安全でなければなりません。pushReply() プラットフォームが返信を受け入れる場所。registerActions() 実行可能なアクション契約を供給します。securityCapabilities(), syncBlockedIp(), removeBlockedIp(), testSecuritySync().抄録ベースは、オプションのチャンクされたバックフィル、顧客リスト、電子メールアカウントの発見/作成、加入者、管理者/顧客検出、請求/コンテキスト/アイデンティティプロバイダ、応答抽出、HTTP呼び出しの再試行、JSON-pathアクセス、fuzzyのランキングとパジネーションヘルパー。
対応する機能名には、アクション、トリガー、コンテキスト、アイデンティティ、セールス、課金、インバウンド_ticket、outbound_reply、sync_users、symp_departments、security_events、customer_import、security\_native_block、promo_audience、prom_feed、email_mailbox、 Native_api、 ai_brain_aware、ai_ticketsが含まれます。 ビルダーは、API キー、ベアラー、基本、HMAC、OAuth 2クライアントの資格情報,OAuth 2認証コードとカスタム認証テンプレート。
onEnable(), アクション定義を同期し、初期のバックフィルを開始することができます。onDisable() インポートされたデータを削除することなく、アクティビティを停止します。actions.json コネクターがインストールされるまで、カタログは操作を利用できず、有効にし、構成され、接続が有効な状態になります。PHP のlint、マニフェスト検証、接続テスト、アクションスキーマテスト、webhook signature/replay test、workspace-isolation tests、backfill-repeat テスト、無効なコレクターのテスト、および障害・リトリーテストを実行します。マーケットプレースパッケージは署名され、検証されるべきで、セットアップ/パーミッション/ webhook ドキュメントが含まれ、真のリリースステータスを記述します。コネクタタイルとマニファストは正規の可用性シグナルです。
一般的なコネクターのセットアップのためのステップバイ ステップのレシピ。
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.
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.
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.
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.
OpsIQ サブシステムが拡張機能のために開いています。 コネクタは、変更なしでCRMまたはサイトインテリジェンスに新しい機能を差し込むことができます OpsIQ コア, プラットフォーム機能レジストリを介して (\)OpsIQ\Platform\CapabilityRegistry)。機能の宣言、その小さなメソッドセットを実装し、コネクターを出荷します。OpsIQ 発見し、それをUIにワイヤーで縛って下さい、顧客 360 タイムラインとインストールプロンプト。
追加の <domain>_capabilities 配列、コード/マーケットプレースコネクターのベスト。ドメイン: crm, site_intelligence.
導入事例 crmCapabilities() / siCapabilities() 同じ記述子を返す。
"crm_capabilities": [ { "type": "calendar", "label": "Calendar (Acme)", "actions": ["createEvent","listEvents","freeBusy"], "requires_auth": true } ]
"site_intelligence_capabilities": [ { "type": "local_listing", "actions": ["listLocations","listReviews","getInsights"], "requires_auth": true } ]
createEvent($settings,$params) → お問い合わせevent_id,html_link,meet_link}; listEvents; freeBusy. \OpsIQ\CRM\CalendarBridgeで駆動。
enrich($settings,$params) → {success,traits}. によって運転される\OpsIQ\CRM\EnrichmentBridge(プロバイダが接続されたときに会社に自動的に実行されます)。
sendForSignature($settings,$params) → {success,envelope_id,sign_url} 。\ で駆動 OpsIQ\CRM\EsignBridge.
listLocations, listReviews, getInsights. Googleビジネス・プロファイルのコネクターを経由して出荷します。
keywordRanks($settings,$params) → {success,ranks}. によって運転される\OpsIQ\SiteIntelligence\RankDataBridge。 船:SerpApiコネクタ。
report($settings,$params) (同期/エクスポート) + ingest($settings,$events) (import). \ によって運転される OpsIQ\分析\ウェブ分析橋。 船: Google Analytics (GA4) コネクター。データ API レポート、インポートのための測定プロトコル。 分析はCRM +サイトインテリジェンス(ドメイン)のようなコネクタのために開いています analytics / analytics_capabilities).
listPayments, customerPayments, createPaymentLink. \で運転されるOpsIQ\Payments\PaymentsBridge。CRMのタイムラインで顧客の支払いを表示 + 取引に決済リンクを送信. 船:Stripe支払のコネクター。 ドメイン payments / payments_capabilities.
listMessages + sendMessage. \で運転される OpsIQ\Mailbox\メールボックス。 顧客の電子メールは、顧客 360 タイムライン + 取引から電子メールを送信. 船: Gmail + Outlook/Microsoft 365 コネクター。 ドメイン mailbox / mailbox_capabilities.
すべての Google コネクタは 1 つのアプリを \ で共有します。OpsIQ\OAuth\SharedGoogleApp. 設定 google_oauth_client_id/_secret 一度とカレンダー、アナリティクス、ビジネスプロファイル+ Gmail の全ての作業(パーコネクター "(オプション)"フィールドがオーバーライドされます)。 また、1つのリダイレクトを共有します URI, <site>/connectors.php?oauth=callback Google が決して露出しないので(接続者スラグなし)、API リダイレクト URI をアプリに追加します。OpsIQ 署名されたからコネクターを回復して下さい OAuth state nonce. 単一の URI を一度、すべての Google コネクタ (現在の + 将来) がコンソールのセットアップなしで承認する登録します。 戻り SharedGoogleApp::resolve(...)'s's の redirect_uri から、 oauthParams(); 決してハード・コードは/プラグのリダイレクトを移しません。マイクロソフトのコネクターは\によって同じことをします OpsIQ\OAuth\共有マイクロソフトアプリ (シェア)microsoft_oauth_*).
あの インポート (歴史的バックフィル)と 顧客を輸入して下さい ボタンは実際にそれらを実装するコネクターだけ、反射によって検出されるので宣言する旗がありません。 オーバーライド backfill() または backfillChunk() インポートボタンを稼ぐために。オーバーライド listCustomers() ({email, first_name, ...}ページを返し、インポート顧客を獲得) AbstractConnector ボタンが隠されているので、UIはコネクタをインポートできません。
CRMエージェントは、取引シグナル(\OpsIQ\CRM\MeetingProposer → CalendarBridge)をオフにし、自動で新しいアカウントをエンリッチし、「AIはCRMを運営する」ループを提案し、コネクタバス全体で実行します。
fetchTicket())訪問者がクライアントチャットでチケット番号を参照する場合(「T-のステータスについて」)000123?"), OpsIQ 2つの層で解決します。 ティア 1 共有の OpsIQ チケットストア、各コネクタを読み込みます。 inbound_ticket そこでチケットをミラーリングするので、すべてのコネクターに1コネクターコードがゼロで同期したチケットのみが機能します。 ティア 2 ミラーリングされていないOLDチケットのライブフォールバックです。コアコールはOPTIONAL fetchTicket() 実装する各コネクタに。 duck-typed (ディスカバリー) method_exists(), のような contextProviders()/audienceCatalog())、署名された ConnectorInterface 必要なく、手つかずでコネクターが不要(メール/チャットソースをネイティブに作成)。
fetchTicket() 検証済みの訪問者のアイデンティティを受け取ります $ctx (client_id + client_email、クライアントチャットAIが使用する同一の検証済みアイデンティティ。そのアイデンティティからプラットフォームの顧客を解決し、顧客のチケットだけに問い合わせて、詳細レコードで所有権を再確認します。 返 null どんなミス、不一致、またはエラーで、別の顧客のデータはありません。 のリターン null 「チケットが見つからなかった」と優雅に劣化します。<?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) インストール/有効/既読状態 (filesystem-based; 有効なフラグのみDB) を持つプロバイダーをリストします。
CapabilityRegistry::active($domain,$type) ロードされたコネクタと設定で最初の準備済みプロバイダを返します。ブリッジはハードコーディングのスラグではなく、これを呼び出します。
機能がまだ接続されていない機能を必要とする場合、UIはワンクリックで接続/インストールプロンプトを表示し、デッドコントロールしません。
海 connectors/PLATFORM_CONNECTORS.md (CRM + サイトインテリジェンス) と connectors/CRM_CONNECTORS.md パッケージに。
署名付きのお客様は、OWNアカウント(「my balance」、 "my order"、 "did support Answer my ticket")について、ビジネスが有効になっている場合は返金をリクエストすることができます。そのすべてがあなたのコネクタの宣言によって供給されます: いいえ OpsIQ コアの変更、プラットフォームのハードコーディングはありません。AIは、ネイティブツール(それは1を発明することはできません)としてあなたの外観を呼び出すと、IDは検証された顧客にサーバーサイドにロックされ、結果はAIのために自動的にトリミングされます。
あなたへ actions.json、読み取り専用アクションは、すべてのTHREEで顧客を呼び出せるようになります。 "scope":"client", "requires_confirmation":false, "is_destructive":false. 使用 "scope":"both" 同じ外観が管理者AIでチームによって呼び出されるべきとき。完全な語彙は admin, client, both それに system (system AI が到達しない —APIと webhook のルートのみ)。他のものは、Outright を拒否されます: パッケージ検証が失敗し、アクションはインストールされません。 いいえ writing スコープ — ライティングアシスタントが付与されます admin アクションセット。
識別値のパラメータを標準セットから名前付けます。 確認された数値 ID にロックされます: client_id, clientid, customer_id, user_id, userid, account_id. その ID を文字列としてロックしました。 client_identifier, customer_identifier, account_identifier. 確認された電子メールに締められる: email, client_email, customer_email, user_email. OpsIQ _は、プラットフォームで統一された署名付き顧客からロックしてオートフィルメントします。AIはアイデンティティを見たり選択したりしません。非標準の名前が閉じられませんでした(拒否されず、漏れません)。
そのようなアイデンティティによってスコープ付けされていないもの: fetch-by-bare-id (fetch-By-bale-id)order_id/ticket_id 単独)、ストア全体リスト、無料のテキスト検索。 それらは任意のプラットフォーム上でクロスカスタム漏れです。 それらを保存 "scope":"admin".
調査結果は、AIに到達する前に構造的に整形されます。秘密の形状のキーが落ちる、長い文字列とリストが捕捉され、空白のフィールドが剪定され、鍵キャップよりも広いフラットマップが保持される 回答キーを最初に取得する, お金 (credit, balance, amount, total, due, paid)、アイデンティティ(email, *name, phone, company)、状態(status, active, expir*, renew*)、日付、計画/製品/ドメイン/サービス/サブスクリプション/注文/請求書/チケットフィールド、通貨、カウントおよび stats/summary/totals、残りの座席が他のキーに最小値優先される前に。実用的な指導:その標準的な語彙のあなたの分野を名前を付け、そして未加工ではなく顧客の質問に答える分野を戻して下さい100-keyプラットフォームダンプ。 ボキャブラリーの外側に名前付けられたフィールドは、左上席のために競争し、非常に広いペイロードからトリミングすることができます。
2つの生の操作、ポリシーフリー:(1) 支払い検証は、IDとトランザクション参照によってフィルタブル読み取り (あなたの API は、およびフィルターでなければなりません)、例えば。 whmcs_get_transactions; (2) 返金実行アクション()scope:"admin", requires_confirmation:true, is_destructive:true、顧客を課さない)、例えば。 whmcs_refund_order. 業務は、設定→クライアントチャットでキーを受け取ります。 OpsIQ 決済サーバー側を再検証し、ビジネスのポリシーボックス(量キャップ、年齢ウィンドウ、月間限度)、箱内の問題、およびその他すべてのレビューチケットに適用されます。
コネクタビルダーのアクションエディタは、同じ制御を持っています:署名された顧客に「誰がそれを使うことができる」を設定し、両方の書き込みチェックボックスをオフに残して、標準的なアイデンティティパラメータ名を使用します。
顧客セルフサービス connectors/whmcs/actions.json, woocommerce/actions.json, oscommerce/actions.json;フル契約で connectors/README.md §8.1–8.2 そして、 ConnectorInterface::registerActions().
ホテル、宅配便、多くの商取引プラットフォームは、参照を保持しているが、ログインなしの顧客を提供します:予約確認のあるゲスト、追跡番号付きの受取人。 guest_lookup 機能(コネクタ契約、モード:生成)により、コネクターはクライアントチャットのAIで訪問者にサービスを提供できます。OpsIQコアの変更、プラットフォームのハードコーディングはありません。コネクタは、エン資格とWHICHフィールドが見えることを宣言します。OpsIQスイッチ、スロットルおよび均一ディニーを強制します。
訪問者はレコード参照(あなたが宣言する正規表現によって一致する)とあなたが選ぶ証拠 - 通常、記録上の電子メールを供給します。あなたのフェッチアクションは、参考までにレコードSERVER-SIDEを取得します。OpsIQ's 生成されたプロバイダは FETCHED レコードに対する証拠を比較します。 訪問者の入力は信頼されず、検証済みのアイデンティティが作成されていません:マッチは、その 1 つのレコードの許可されたフィールドに訪問者を呼び出します。
未設立で実証的ミスマッチが1つの同じ答えを生成します。AIは、参照が存在しているかどうかを確認し、レコードの詳細を発明しないように明示的に指示されています。会話ごとに率制限されると+IPコネクターが相談される前に中心によって。
業務がBOTHスイッチを可能にするまで、ゲストは何も役に立ちません。設定のワークスペース全体制御→セキュリティ→「クライアントチャットでのゲストレコード検索」(権限付与され、必要に応じてステップアップがオフであっても常にパスワード確認済み)、コネクタの所有 guest_lookup_enabled 設定トグル。 コネクタを取り付けたり、有効にしたりすることで、ゲストの表面が開けることはありません。
生成されたプロバイダは、生成されたプロバイダーが登録します。 guest コンテキスト・サーフェス — 構造的に分離 admin それに customer. 既存のコンテキストプロバイダは匿名の訪問者に相談されることはありません。ゲストプロバイダーは署名されたものについては相談しません。受け取ったctxはチャットメッセージ、スレッドID、およびビジターが認証候補としてメールを事前通知するテキスト(非確認)を受け取ります。
Actions のステップで、参照によって 1 つのレコードを返す読み取り専用のアクションを追加します。 GET /bookings/{booking_number}) 応答フィールドをエイリアスにマップします。ステータス、到着、出発、Room_type、customer_email...
機能ステップで、有効にして下さい guest_lookup. 専用のパネルが表示されます:フェッチアクションを選択し、参照パラメータを名前を付けて、参照パターン(regexボディなど)を与えます \bBK-[0-9]{4,10}\b)、レコード(「予約」)の名前をつけて、証明書を選ぶ — レコードのメール (推奨) またはどれも (ステータスのみの宅配便追跡のために参照してください)。
ゲストが見るかもしれないフィールドを正確にティックします。 他のすべてがDROPPEDです - 決して再実行されません。 BuilderはPII字型フィールド(メール、電話、アドレス、支払い...)を手元帳に拒絶し、リリースゲートコンフォーマンススイートは公開前に同じルールを再チェックするので、ハンド編集された仕様は1つを負うことはできません。インストールタイム検証はマニフェストと署名のみをカバーしているため、出荷する前にコンフォーダンススイートを実行してください。 証拠自体は表示できません。
ビルダーが発光する GuestLookupProvider.php — 生成されたパッケージごとに同一のキャノン硬化実装で、 guest_lookup_enabled コネクターの設定を切り替えます。ビジネスは2つのスイッチをアームし、訪問者がレコードタイプについて尋ねるときにチャットAIは検索を開始します。
「パブリックトラッキングページで宅配印刷されるもの」:ステータス、日付、部屋またはサービスカテゴリ、カウント。 名前、連絡先の詳細、ストリートアドレス、支払いデータ、フリーテキストメモは匿名チャットでは行われません。ビルダーとコンフォーマンスはそれらを拒否します。
生成されたプロバイダは、リストされているフィールドからのみ回答し、他のもののためのチケットを提供する指示で出力を終了します。 allowlistにない詳細は「チャットでは利用できません」です。
プロバイダは、同じ会話で訪問者の最近のメッセージから参照を反復します。そのため、「チェックアウト時に?」というと参照を再入力せずに動作します。一致するリファレンスおよび証拠メールがCANDIDATESとしてチャットスレッドに記憶されているため、フォローアップは再アスクしません。彼らは唯一の候補です:すべてのターンはまだレコードサーバー側を再機能し、単一のフィールドをリリースする前に証明を再コンパイルします。
マーケットプレイスのパッケージは、自社で出荷する場合があります GuestLookupProvider.php implementing ContextProviderInterface とりあえず surfaces(): ['guest']. 生成されたテンプレートの契約を正確にフォローしてください。 — 参照、証拠マッチサーバー側、均一な拒否、allowlistのみ出力で取得し、宣言します guest_lookup in capabilities. 適合はゲストの表面を検証し、PIIの許可リストをスキャンします。
プラットフォームから「未払い請求書」、 "注文完了"、 "サブスクリプションキャンセル" のライブクライアントと課金状態によるプロモーションスタジオターゲットキャンペーンをしましょう。すべてのコネクタ(プリインストール済み、マーケットプレース、または自分で構築する)は、2つの小さなメソッドを実行することで結合します。 OpsIQ _コアの変更はありません、プラットフォームハードコーディング:あなたのコネクターは、実際の事実の独自のドロップダウンタブでプラットフォームとして表示され、複数のコネクタがサイドで有効にすることができます。
コネクタークラスでオーディエンスCatalog() を実行します。このコマンドは、プラットフォームが応答できるキーのラベルとリストを返します。各キーは、プラットホーム名の下にあるスタジオドロップダウンに表示されます。
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.
コネクタを有効にします。プロモーションスタジオターゲティングタブは、プラットフォームのリストを「クライアント&課金」セクションを成長させます。管理者は、「unpaid_invoices >= 1"; あらゆる事実は、次のような個人化変数になります {unpaid_invoices}.
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 コネクタは、完全な参照実装です。
Lowercase snake_case, 2-60 chars, match ^[a-z0-9_]+$. タイプ:番号, テキスト, bool. 未定のキーは、counterFlags()によって返されますが、ルールで使用可能ですが、管理者がサポートするすべてのことを宣言することができます。
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回で最も多く呼び出されます。匿名訪問者はゼロコールを費やします。1-2 API コール; OpsIQ リクエスト内でメモします。
管理者は、キーを =, !=, >, >=, <, <=, がセットされているので、値だけ供給する。
各事実はキャンペーンのコピーで変数として倍増します。{unpaid_invoices}, {client_status}、プラスの作り付け {first_name} そして、{client_email}. レンダリングの前に値が消毒されます。
宣言的 (Declarative)JSON-only) マーケットプレースコネクタは、無料でpromo_audienceを取得します。コネクターが顧客/ユーザー、請求書、注文またはサブスクリプションリソースを宣言した場合、 OpsIQ derives customer_status, unpaid_invoices, much_due, pending_orders, Active_subscriptions and subscription_statUS を既存の検索アクションから取得します。コードはまったくありません。
オーディエンスの_capabilitiesオブジェクトを追加・{"label": "My Platform", "keys": [{"key": 「open_carts」, 「label」: "Open Cart", "type":「number"}]}, 正確に、スタジオのドロップダウンにどの事実(およびラベル)が表示されるかを制御する。
コネクタ > コネクター > Enable。 次に、キャンペーンのターゲティングタブを開きます。プラットフォームは「クライアント&課金(コレクター)」の下に表示する必要があります。
追加: プラットフォーム・キー・>= 1「ログインクライアントのみ」を設定。保存して公開します。
ルール(ポップアップが表示しなければならない)と、ない人(ポップアップは非表示にしておく必要があります)に合ったクライアントとしてプラットフォームにログインします。ログアウトされた訪問者はログインした規則に一致しません。
内蔵トリガー(遅延、スクロール、終了、アイドル、クリック、ページビュー、チャット/チケットアクティビティ)を超えて、サイトのどこにいてもキャンペーンを始動したり、フロントエンドのコネクターで、カートが放棄されたときに、あなたのSPAがルートを変更するなど、成功したチェックアウトステップの後、またはサイト内のどこからでもキャンペーンを発射することができます。
キャンペーントリガーを設定する 注文方法 イベント名(例:イベント名) checkout_failed)、それからあなたのページからグローバルホックを呼ぶ:
// 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');あの survey 機能により、プラットフォームの顧客識別アダプター、オーディエンスファクト、安全な変数および受信者の候補者をSurveise Studioに供給することができます。 それは独立しています promo_audience アンケート、回答、分析、メール配信のコネクター所有権は付与されません。
SurveyConnectorInterface、生成される熱心なビルダーのパネル SurveyProvider.php、パッケージメタデータおよび適合の分離すべての船。消費はまだワイヤーで縛られるではないです: SurveyConnectorRegistry 実装され、テストされていませんが、調査ランタイムはまだ呼び出しません。そのため、プロバイダの健康は管理者UIに面していませんし、公開されたコネクタパッケージは機能を宣言しません。署名トークン調査アイデンティティゲートウェイの発行、ターゲティングと変数統合、CRMアウトリーチ材料化および最初の出荷プロバイダーマッピングは独立したフェーズを維持します。この契約からビルドしてください。実行時間は後でリリースで消費を開始します。型化された正式な事実を宣言し、サーバーの検証済みのワークスペース・バウンド対象のみの値が解決します。典型的な事実には、order_count、last_order_status、キャンセルされた_order\_count, customer_created_at、active_subscription_count と last_due_invoice_count and open_ticket_countが含まれます。
顧客、アカウント、注文、サブスクリプションおよびサポート変数をタイプ、感度と許可されたコンテキストで宣言します。調査コピーはフォールバックと出力コンテキストエスケープを必要とします。
安定した外部ID、境界ページ、決定的なカーソルと同意関連のメタデータでCRMアウトリーチの候補を任意に列挙します。調査は、送信前に選択したオーディエンスを凍結します。
トークン署名、有効期限、目的、コネクタおよびワークスペース検証後の調査識別ゲートウェイからのみ本人を受け入れます。ブラウザが承認されたメール、ID、タグまたは請求事実は決して許可されません。
SurveyConnectorRegistry は、設定、パス、生のアイデンティティや例外メッセージを露出せずに、互換性のあるブロックされた利用できなくなったプロバイダーを報告するように設計されています。ブロックされたプロバイダは決して呼び出されません。レポート面はまだ管理者 UI で公開されていません:今日ではブロックされたプロバイダーは単に不活性です。
未決定鍵、間違ったタイプ、大文字値、対象の不一致、コネクタタイムアウトおよび未知のアイデンティティは拒否されます。 利用できない事実を必要とするターゲティングルールはマッチしません。 受信ページがキャプチャされ、監査されています。 敏感な値は、公開プレビューやログに表示されません。
コントラクト 2.2 は、生成された機能レジストリエントリ、インターフェイス、調査マッピングパネルを出荷します。 SurveyProvider.php, 機能バージョン, README/デベロッパー参照と適合の備品. コマース, ヘルプデスク, SaaSブリッジ、ローカルPHPプロファイルにはそれが含まれます; 標準 API コネクタが選択します。. 静的なゲートは、プロモーションの名前空間を呼び出す調査プロバイダを拒否します, テーブルや能力.
あの reply_feedback 機能はプラットホームの自身の1層の評価をに映します OpsIQ. 星の顧客は内部にスタッフの応答を与えます WHMCS'sクライアントエリアは、SAMEの応答に上陸します OpsIQ 管理者の糸、同じ破片と、代理店のクレジット、フィードバックのページの記入項目およびチーム及び性能計算はで与えられます評価として OpsIQ ポータルの切符。1つの貯蔵、1つの破片、1つのパイプライン;コネクターはだけ翻訳します。
2つのエントリーパスと1つの真実があります。 OpsIQ ポータルチケットはネイティブに書きます。 プラットフォームのチケットは、コネクタを流れ、各イベントを経由してコアランスします ReplyFeedback::recordMirrored(): 同じ列、スタッフのみのルール、1層ごとに最新の両立セマティクス、ワークスペーススタンプ、顧客ボイスをインデックスにポータル書き込み使用。 コネクタはフィードバック行自体を書きません。
functions.reply_feedback エントリーを追加します。バージョン 1.0, responseFeedbackConnectorInterface, メソッド responseFedbackCatalog と pullReplyFeedバック, inbound_ticket を意味します。
機能リストにresend_feedbackを追加します。 これは、コネクタの検出が読み込まれるものです。
応答を宣言_feedback. modes(投票と/またはWebhook)およびプラットフォームの評価スケール。これは、適合ゲートが読み込まれるものです。
インターフェイスを実装し、resend_feedback を functions() でリスト化して、パッケージを再署名します。
デクレアモード、プラットフォーム独自の評価スケール(ネイティブへのコア正規化) 1-5)、および反応トークン。 カタログは仕様に一致しなければなりません。json.
pullReplyFeedback は、プラットフォームのチケット ID、プラットフォーム応答 ID、評価、オプションの反応/コメント、送信された時間と安定した event_id を返します。 これは読み書きしません。
event_id は、フィードバック STATE ごとに安定しています。そのため、再生されたイベントは no-op と変更後の評価上書きです(ポータルのような最新のウィン)。
ページの境界と決定;実行を終わらないカーソル。歴史あるバックフィルドは、ロールウィンドウとして排出され、1つの巨大なプルはありません。
設定がない場合、投げる代わりに空の完全ページを返します。コンフォーマンスランナープローブは空の引数で行います。
コアは、各イベントをミラーマーカーでローカル応答に解決します。チケットミラーは既にスタンプ()を押下します。<slug>:<ticket>:reply:<reply>)。解決できないイベントが落ちる、決して推測しません。フィードバックはスタッフに返信だけ添付し、エージェントのクレジットは常に既存の著者から来ます。評価書は、許可を変更することはありません。これは機能が必要である理由です inbound_ticket または ticket_mirror.
WHMCS クライアントエリア/リプライスター評価を格納します。 tblticketreplies.rating. ザ・WHMCS コネクターはpollモードをと宣言します1-5スケール、船 ticket_reply_ratings ブリッジファイルでコマンドを中継し、各行を ID が一致したイベントに翻訳します。 whmcs:<ticket>:reply:<reply> マーカーのチケットミラーは既にスタンプを押下します。コネクターを改良した後、橋ファイルを再度コピーして下さい WHMCS そこで、新しいコマンドが存在するようにサーバ。
doc/contracts/TICKET_REPLY_FEEDBACK_CAPABILITY.md で、OpsIQ パッケージ。 受諾:プラットホームの中の応答を、時機を得た気孔のための待って下さい、同じ応答をで評価して下さい OpsIQ チップ、フィードバックページがリスト表示され、再生されたイベントは何も変更しません。あの ticket_merge 機能により、接続されたすべてのチケットプラットフォームにマージする OpsIQ でチケットをマージします。 保存されたプラットフォームのチケットは、合併したチケットのメッセージから、各マージされたチケットの開口部メッセージから始まり、マージされるプラットフォームの切符のみが閉鎖されます。
統合する OpsIQ 合併したチケットのメッセージは、保存されたチケットに移動し、マージされたチケットを削除します。 契約の前に 2.4 コネクタは、ただ聞いただけ ticket.deleted 各合併券について WHMCS 切符と保存を閉じる WHMCS チケットは、最初に書いたものを受け取ったことはありません。その件名が[MERGED]と表示され、内容が見つからなかったのです。
ticket_id, ticket_number、主題および external_ref KEPTチケットの native_table (opsiq_tickets); site_key; ソース, 合併されたチケットは、最初に最も古いです, 各々と ticket_id, ticket_number, 主題, external_ref, client_name, client_email, created_at メッセージ [{reply_id, author_type, author_name, created_at, ボディ}; merged_by; merged_at. メッセージは、移動前の顧客目に見えない会話です。内部のメモは含まれていません。
それでも火を、今と merged_into {ticket_id, ticket_number, external_refコアは、宣言するコネクタにそれを配信しません ticket_merge; 他の消費者は、削除からマージを伝えることができます。
ticket. merged は、配信可能なイベントです。ticket. deleted に登録された SaaS Webhook エンドポイントがticket. mergeD を受け取るので、 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)正確にそれら。プラットフォームがマージされず、プライベートノートがないときだけサポートされていないモードを返します。輸送またはauthの故障は理由でok=falseです。それは診断で記録されます。
他チケットミラーリングゲートをマージする同じミラー設定。
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.
MergeTicket (ticketid = チケットを保管し、マージticketids = 合併券) 両方が入っているとき WHMCS; AddTicketNote その他トランスクリプト。 リレーのticketMerge hookはマージします OpsIQ スタッフが合併したときにコピー WHMCS.
ポスト /api/v2/tickets/{id}/merge.json プライベートなコメントをマージする(通話ごとに5枚まで)、保存されたチケットのプライベートコメントとしてトランスクリプトも追加します。 Zendesk コメントを移動せずにマージされたチケットを閉じます。
ポスト /v1/tickets/{id}/merge とって source_idsポータルの返信と添付ファイルを移動する、内部応答は、ポータルに決してなかったチケットのためのトランスクリプトを運びます。 A /manage マージがマージ OpsIQ コピー。
ticket_merge 生成されたパッケージは、作成するプラットフォームのチケットをリンクしたときに宣言されます(リンクチケットでticket.createdsubscriber)、ticket.deletedを処理するか、または宣言します。 ticket_mirror. チケットのステップで、下 メルゲスプラットフォームのマージアクション(マップマージ)を選択します。target_remote_id、および結合して下さい。source_remote_ids またはマージします。source_remote_id) プライベートノートアクション(マップメモ)remote_id と注記.body)。生成された mergeTickets() は両方を使用します。どちらも、Builder がマージしたチケットのメッセージがプラットフォームに届かないことを警告します。
doc/contracts/CONNECTOR_CONTRACT.md, セクションチケットがマージします。 受付:プラットフォーム上に存在する2枚のチケットを OpsIQ にマージし、プラットフォーム上で保持されたチケットを開きます。 合併したチケットの最初のメッセージがあります。Marketplaceは、コミュニティが構築したコネクタを発見し、インストールして公開することができます。
コネクター > マーケットプレイスへ。名前、カテゴリ、プラットフォームで検索します。
説明、サポートされたアクション、評価を確認してください。
インストールをクリックします。 コネクタパッケージは、市場_connectors/にダウンロードしてインストールします。
コネクターで有効にして下さい、入って下さい API 資格情報、テスト。
コネクタービルダーを使用してください。すべてのアクションを検証します。
プロファイルを生成します。json, アクション.json 知識。json と PHP ファイル。
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.
マーケットプレイスの投稿フローをレビューにアップロードします。
ランタイム・ディスカバリーのルート。ここですべてが生きています:出荷するコネクタOpsIQ, 市場からインストールされたもの, そして、このインストールにコネクタビルダーが公開します.
ファーストパーティのマーケットプレースパッケージ用の公開SOURCE。それは発見ルートではありません:それがパッケージ化されるまで、ここに住んでいません、署名し、カタログにシードされ、インストールされます。これは、コネクタ/内のコピーランドを指しています。
ザ・オブ・ザ・API そして、Webhook Builderはカスタムを作成することができます API エンドポイントとWebhookリスナー内部 OpsIQ 生の PHP を書くことなく。
何かが起こるときに実行 OpsIQ 外部システムがマッチングイベントをWebhookに投稿する場合 URL. イベント名を、例えばticket.created で指定します。
組み込みのインターバルイベントをイベント名として使用してください。 cron. minutely、cron. hourly、またはcron。daily。アクションとトリガー画面にはボタンが付いており、それらを記憶する必要はありません。
管理者がAIにプレーン言語で要求したときに実行します。例えば、顧客を見つけるために一致するべきフレーズを追加します。
外部システムが HTTP POST を送信します。OpsIQ webhook(ホオク) URL イベント名で。イベントの火災を聴くトリガーはどれも。
イベントトリガーは条件を運ぶことができます。そのため、着信データが一致するときにのみ実行されます。イベントの火災ごとに実行される条件なし。
イベントデータへのパス。例えば customer. email などのネストされた値のドットを使用してください。
ルールが一致しなければならないか、またはその1つだけを選択して下さい。
等しい、等しくない、含まない、含まないで下さい、開始は、一つではなく、ひとつではありません。マッチすると、資本を無視します。
以上、少なくとも、ほとんどではありません。テキストとして書かれている数字は正しく比較します。
存在している、欠落している、空で、空でない。
アクションは、緊急チケットのために実行され、他のすべてのためにスキップされます。 あなたの最後にフィルタリングは必要ありません。
外部の URL に HTTP POST をカスタムペイロードで送信します。
指定された部署、件名、メッセージでサポートチケットを作成します。
カスタムテンプレートでメールを送信します。
顧客、チケット、またはCRMレコードを更新します。
コネクターの許可と確認ルールで、有効なコネクタから登録したアクションを実行します。
名付けされた一般の完全検索 API カタログ。 フィールド、スコープ、パーミッション、確認、不在性およびドライランのサポートはライブアクション契約から来ています。ワークフローは保存されたワークスペースと管理者のコンテキスト内で実行されます。
コネクターのネイティブを使用する API ネイティブの読み書きや確認 API プロバイダーのエンドポイントがキュレーションされたアクションがないときにアクションを書きます。 クレデンシャルはコネクターの内部に残り、相対的なプロバイダパスのみが受け入れられています。
一般的なオートメーションの既製のトリガーアクションレシピ。
Trigger: Inbound webhook Condition: payload.status = "down" Action: Create ticket · Dept: Technical, Subject: "Server {{payload.hostname}} down", Priority: Urgent
Trigger: Event (order.completed) Condition: order.amount > 100 Action: Send webhook to Slack incoming webhook URL with order details
Trigger: Schedule (Monday 09:00) Action: Send email with last week's stats pulled from the REST API
Trigger: Schedule (every hour) Condition: ticket.status = "Open" AND ticket.last_reply_age > 86400 Action: Assign to team-lead, add internal note
シンプルでシンプルなコネクタアクションをゼロから創り出す。
開始する前に、必要なものを決定します。両方とも同じ画面で構成されます。
アクションは、HTTPリクエストをプラットフォームに送信します。このオプションを選択します OpsIQ あなたの側に何かを達し、やり直す必要があります。
アクションは、インストールされたコネクタが既に提供されているものを実行します。 すでに作業が利用できて、トリガーしたいだけです。 リストからコネクターのアクションを選ぶので、配線するべきことは何もありません。
例:「lookup_product」。名前、戻り値、在庫、説明で商品を検索します。
アクション定義を追加します。
{
"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" }
]
}
]
}コネクタビルダーのレビューステップで、ドライランを押します。パッケージに対する完全適合チェックリストを実行し、認証情報を提供した時点で実際の接続テストを行います。サンプルデータを使用しないでください。
管理者AIに「プロダクトウィジェットのプロを探し上げる」と尋ねます。 AIは、アクションを見つけて実行する必要があります。
インバウンドエンドポイントは、別のシステムから署名された JSON を受け入れ、タイムライン、スコーリング、ワークフローをフィードできる重複した連絡先アクティビティに切り替えます。
送信システムごとに1つのソースを作成します。OpsIQ 生成する URL/tokenと秘密。 送信 JSON とって Content-Type: application/json HMAC-SHA256を使用して正確な生体を署名します。
X-OpsIQ-Inbound-Signature: sha256=<hex hmac>
連絡先メール、イベント名、オプションのイベント ID の JSON パスをマップします。 イベント ID は優先する重複キーです。 承認されたアクティビティが連絡先のタイムラインに入り、リードスコアリング、セグメント、ライフサイクルルール、ワークフローに影響を及ぼす可能性があります。
業務データを解析する前に、無効な署名を拒絶します。管理画面の両側を更新することで秘密を回転させます。秘密はログアウトしません。
アウトバウンドのWebhook管理は署名されたサブスクリプションを作成しましたり、テストエンドポイントを検査し、非同期配送と再試行健康を監視します。
管理者は、HTTPSエンドポイントを作成したり、特定のイベントやワイルドカードを選択し、秘密を安全に保存し、テストを送信します。 OpsIQ は、HMAC-SHA256で原ペイロードに署名します:
X-OpsIQ-Signature: sha256=<hex hmac>
優先または演技の前に署名を確認します。配達は非同期であり、自動的に後約に引き付けられます 1分、5分、30 分、2時間と時間 12 営業時間. ステータス、応答コードおよび試みのカウントを点検するために、最近の配達柵を使用して下さい。
どんな非同期システムでも、再送できるため、受信機は必然的にしなければなりません。耐久性のある受諾の後に2xx応答を返します。
Webhooks は外部システムに通知することを可能にします OpsIQ 何かが起こるとき(インバウンド)、OpsIQ 外部システムに何かが内部で起きた場合(アウトバウンド)を通知します。
[設定]>[Webhooks]に移動します。エンドポイントを追加します URL 受信するイベントを選択します。
特定のイベントを購読する、または ["*"] インストールの完全リストは以下です。 webhooks.events.list JSON として返します。
緊急のバックオフで納品再試行が失敗しました。 15 連続した故障後、エンドポイントは自動無効化されます。
配送は、全て署名されます。 X-OpsIQ-Signature carries v2=<hex>と署名された文字列は version.timestamp.delivery_id.body — 体だけではありません。常に確認し、常に文字列を正確に再構築します。以下の例を参照してください。
OpsIQ 個人/内部への送信はしません IPs (127.x, 10.x, 172.16.x, 192.168.x, 169.254.169.254).
Webhooks はジョブキューを介して配信され、ブロックされていない OpsIQ 業務内容
各イベントは、重複排除のために同じ条件にとどまるユニークな event_id を持っています。
たとえばイベント名 ticket.created.
配信 ID。それは、同じレトリーにとどまります - それを使用して重複を無視します。
署名時間でUnix秒。約5分以上古いものを注入します。
署名は、 v2=<hex>. 分割する =: 左側はバージョンで、右側が比較する値です。
使用中のスキーム, 現在 v2. ヘッダーからハードコーディングではなく、読み込むと、v3が追加されていればコードは動作し続けます。
version.timestamp.delivery_id.body、それ自体の生体ではありません。身体だけを洗い出すことは、検証が失敗する単一の最も一般的な理由です - すべての本物の配達は拒否され、エンドポイントは壊れています。<?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]);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 });
});実行中のビルドから生成されるので、常に自分がいるバージョンと一致します。
webhooks.events.list 同じリストを JSON と返します。そのため、コードはハード コード化する必要はありません。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.
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.
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.
Fired by OpsIQ.
Fired by OpsIQ.
Fired by OpsIQ.
Fired by OpsIQ.
Fired by OpsIQ.
Fired by OpsIQ.
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.
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.
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.
Fired when the visitor rates a conversation (1-5 stars). Payload: thread_id (required), site_key, stars, comment, trigger, admin_id, occurred_at.
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.
Fired when a CRM company/account is created. Payload: company_id (required), name.
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.
Fired when a deal is moved to a Lost stage (closed-lost). Payload: deal_id (required), stage, amount.
Fired when a deal moves to a different pipeline stage. Payload: deal_id (required), stage, amount.
Fired when a deal is moved to a Won stage (closed-won). Payload: deal_id (required), stage, amount.
Fired when a CRM task is created (incl. AI-suggested next-step / renewal tasks). Payload: task_id (required), title.
Fired by OpsIQ.
Fired by OpsIQ.
Fired when a Voice-of-Customer analysis run completes. Payload: analysis_run_id (required), workspace_key, sample_count, model_version.
Fired when a newly indexed response meets its metric-specific detractor rule. Payload: feedback_item_id (required), workspace_key, source_kind, metric_kind, classification.
Fired when a Feedback follow-up is completed. Payload: feedback_item_id (required), workspace_key, actor_admin_id, outcome_code.
Fired when Feedback ownership changes. Payload: feedback_item_id (required), workspace_key, assignee_admin_id, team_id, actor_admin_id.
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.
Fired when source deletion or redaction removes Feedback content from the index. Payload: feedback_item_id (required), workspace_key, source_kind.
Fired when the Feedback workflow state changes. Payload: feedback_item_id (required), workspace_key, state, actor_admin_id.
Fired when a tag is added to or removed from Feedback. Payload: feedback_item_id (required), workspace_key, tag, operation.
Fired when a canonical Feedback item changes. Payload: feedback_item_id (required), workspace_key, change.
Fired when a Feedback source replay or incremental index operation fails. Payload: workspace_key, source_kind (required), error_code, checkpoint.
Fired when a Feedback source checkpoint is behind its expected freshness window. Payload: workspace_key, source_kind (required), lag_seconds, last_success_at.
Fired when a canonical topic or theme signal is attached to Feedback. Payload: feedback_item_id (required), workspace_key, theme_key, confidence.
Fired when an urgent Feedback signal is detected. Payload: feedback_item_id (required), workspace_key, source_kind, signal_key.
Fired when an invoice is generated. Payload: invoice_id (required), customer_id, customer_email, amount, currency, due_date, items.
Fired when an invoice passes its due date unpaid. Payload: invoice_id (required), customer_id, customer_email, amount, currency, days_overdue.
Fired when an invoice is paid in full. Payload: invoice_id (required), customer_id, customer_email, amount, currency, paid_at.
Fired when a new order is placed. Payload: order_id (required), customer_id, customer_email, amount, currency, items, status, source.
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.
Fired when a payment attempt fails. Payload: order_id, customer_id, customer_email, amount, currency, gateway, reason.
Fired when a refund is issued. Payload: order_id, refund_id, customer_id, customer_email, amount, currency, reason.
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.
Fired when a subscription is cancelled. Payload: subscription_id (required), plan_name, customer_id, customer_email, cancel_reason, cancelled_at, ends_at.
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.
Fired when a subscription renews successfully. Payload: subscription_id (required), plan_name, customer_id, customer_email, amount, currency, next_billing_at.
Fired when a ticket is closed or resolved. Payload: ticket_id (required), resolution, closed_by_type, closed_by_id.
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.
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.
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.
Fired when a reply is posted to a ticket. Payload: ticket_id (required), reply_id, author_type, author_id, author_name, message.
Fired when a new user/customer account is created. Payload: user_id (required), email, firstname, lastname, company, country, source.
ngrok を使用してローカルサーバーを調べます。ngrok URL_ に webhook エンドポイントを設定します。
OpsIQ 応答性を持たせて、返行ウィンドウ内でエンドポイントが回復した場合、イベントは失われません。
API キーは要求をへの認証します OpsIQ ツイート API. 各キーは、スコープ付き権限を持っています。
API キー管理にナビゲートします。
記述名を明記してください。
必要なのは、キーだけを当てます。スコープは読み取りと書き込みの各領域で来るので、レポート統合は読み出しを許可することができ、他に何もしません。
ジョブを行う最狭のセットを選択します。 admin 以下にすべてのスコープを満足させるので、本物が広いアクセスを必要とする場合にのみ使用します。
連絡先、企業、取引、活動、セグメント、アウトリーチ、変換、ライフサイクルおよびCRMのWebhooks。
チケットとメッセージの一覧と読み込み、返信、更新、開いて一括キュー操作を実行します。
ライブチャットの会話やメッセージ履歴を読みます。メッセージを送信し、ステータスを割り当てて変更します。
知識ベースエントリ。
回答テンプレートを保存しました。
どのコネクタがインストールされているか、何ができるのか、およびその認証情報をテストするかを参照してください。
アクション、トリガー、実行履歴を参照してください。
ルーティング可能な部署
名付けされた演算子の通知。
レポートセクション, CSV エクスポートとスケジュールされたレポート定義。
監視されたサイトとSEOレポート。
添付ファイルへのリンクをサインしました。
ステータスページコンポーネントとインシデント。
AI の執筆ヘルパー: ドラフト、要約、翻訳、書き直し、作曲、分析。
狭いスコープで到達できない、少数の機密行動を含むすべて:連絡先を消去し、プライバシー設定を変更し、アクセスログを読み込む。
キーはスコープが許可するものを呼び出すことができます。
あらゆる書き込みは、スコープが言うものは拒否されます。データの変更を行わないようなレポートやダッシュボードの安全な選択です。
キーが呼び出すことができる正確なアクションをリストします。許可されたスコープ内で、他のものは拒否されます。
一度に表示します。 "opq_" で起動します。安全に保存してください。
ザ・オブ・ザ・OpsIQ ウィジェットは、JavaScript 追跡、AIチャット、チケット作成、顧客識別のためにあなたのウェブサイトに追加スニペット。
<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.
必須。接続されたサイトからあなたのサイトのキー。
オプション。 "chat" (デフォルト)、 "tickets" または "both" を指定します。
任意。 "bottom-right" (デフォルト) または "botTOM-left" です。
任意。第一次色六角コード。
オプション。初期挨拶メッセージ。
任意。UIの言語:「en」、"es"、"fr"、 "de"、 「pt」、等。
任意。サーバー生成された署名された同一証明トークン。
// 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,
}]);script-src 'self' https://your-opsiq-domain.com; connect-src 'self' https://your-opsiq-domain.com; frame-src https://your-opsiq-domain.com;
No. アンダー 15 KB gzipped は、ページコンテンツの後に非同期をロードします。
プライマリカラーのデータカラーをご使用ください。 CSS オーバーライドオプション。
プラットフォーム固有のインストールガイド。
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.
Online Store > Themes > Edit Code > Layout > theme.liquid. Paste before </body>. Save.
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" />
設定 > 一般設定 > その他 > グローバルフッターコンテンツ。スニペットを貼り付けるか、またはテンプレートのfmer. tplを編集してください。
カスタムの HTML タグを作成, スニペットを貼り付けます. トリガー: すべてのページ. 公開.
埋め込むOpsIQ管理者アシスタント — OWNプラットフォームの管理パネル内での管理チャット、チケット受信トレイ、AIライティングを管理します。そのため、あなたのチームはツールを離れません。訪問者IDやポータルのようにSSO、これは1つの一般的な契約で実装されています〜15プラットフォームのサーバーコードの行 — 同じパターンZendesk、Intercomおよびディスコースの使用のためのSSO. 1プラットフォームのプラグインが待機していない:任意のスタックを計算できるHMAC今日はこれを行うことができます。
から リモートサイト→サイトについて→コード、ローダーラインをコピーし、管理者パネルのページに追加します(足元には、レイアウトテンプレート、または管理専用のカスタムJSボックスが含まれます)。
<script async src="https://YOUR-OPSIQ/opsiq/embed/admin_widget.php?site_key=SITE_KEY&identity_token=TOKEN_FROM_STEP_2"></script>
アプリケーションが管理者が署名しているかだけを知っています。つまり、欠点ではありません。セキュリティモデルです。サーバーは、訪問者のアイデンティティトークンと同様に、独自のセッションから短いライブで署名されたトークンを生成します。同じサイトWebhookシークレットに署名しました:
<?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.プラットフォームにログインする管理者は、個別にマッチングされます。OpsIQ's per-admin アクセスゲートは、トークンのユーザー名 + 1 つに対して電子メールを解決しますOpsIQエージェント(チームページ;プラットフォームメールが異なる場合、エージェントの「マッチメール」リストを使用して、THATエージェントのワークスペース、部門および受信トレイ権限を適用します。 新しいスタッフ=エージェントを追加しますOpsIQ;変更を埋め込むこと無し。
プラットフォーム送信のロール文字列が表示されることOpsIQアトリビューションの側面; 承認は常にから来ていますOpsIQエージェントレコードは、アサートされたロールから決して記録しません。
ブラウザは管理者クッキーを別の起源に送信しません。ベンダーが「ちょうど検出」できません。すべての深刻な製品は、サーバーの不具合、署名など、この方法も解決します。それは契約全体です。
OpsIQ ホストが署名されていないか、または共有ログアウトモードがない: ローダーは署名された管理者トークンが到着するまで隠されます。 コードの loader に格納されているトーク =... 値は、サイトを識別するウィジェットキーです。 誰にもサインインできません。
authenticated フラグ — それをTOPレベルに置くこのフラグは、人間が本当にログインしているサーバーのアサーションで、 OpsIQ ではトークンを使わずに拒否します。 "authenticated" => true beside site_key/iat/exp, 内側だけではありません admin オブジェクト。 現在のOpsIQどちらのポジションでも受け付けますが、古いリリースはトップレベルのみを読み取ります。失敗は欺瞞的です:会話リスト、履歴、すべてのチャットが応答する間にすべてがうまく認証されていない 「ログイン必須」セッションバグのように見えるので、そうではありません。その分裂が正確に確認できたら、このフラグを最初にチェックしてください。
ブラウザでなく、サーバーにサインインするJavaScript. 短時間(分から時間)を遠ざけて下さい;OpsIQ期限切れのトークンと先物が与えられたトークンを拒否し、署名はトークンをサイトキーにバインドします。
ザ・オブ・ザ・WHMCSモジュールはこれ自動的にからしますWHMCS管理セッション; Botble HotelのコネクターのブリッジファイルはLaravelセッション(op=admin_identity)から行います。どちらも、プラットフォームのダイアレクトでこの契約です。つまり、スタックに最も近い読み込みをコピーします。
OpsIQ コネクターが、その中のアイデンティティエンドポイントを格納する場合 admin_identity_probe_url 設定、PLAINのローダーラインは管理者ページのすべての必要です:ウィジェットは、プローブをコネクタから発見し、サイトキー+ウィジェットトークンで呼び出し、各管理者を自動的に認証します。 ページは引き続きオーバーライドできます data-identity-endpoint 属性または window.OpsIQAdminIdentityEndpoint.
opsiq_whsec_YOUR_SITE_SECRET それぞれの例は、 OPSIQ_SITE_SECRET (または、フレームワークの独自の設定は、そのノートに名前付け) サーバが最初に設定されたときに使用します。そのため、編集コードなしでファイルを回転させるなど、必要な時にファイルから秘密を移動させることができます。ファイルがサーバー上で実行される方法:Webページやブラウザに貼り付けることはありません JavaScript秘密を保持している人は、顧客やスタッフのいずれかにサインインすることができるので、公的なリポジトリにそれをコミットしないでください。 WHMCS そして、 Botble このどれも必要です: WHMCS ホックは、満たされた秘密で到着します, そして、 Botble コネクター パネルは橋にそれを満たします。それぞれの例は、署名されたトークンを追加したスタッフのみにAdminチャットタグを印刷し、ウィジェットのリフレッシュを回答します(?opsiq_identity_refresh=1&role=admin) と {"success":true,"identity_token":"…"} または 401. 遠隔場所、あなたのサイト、コード、選択 3、あなたのスタッフの印は記入されたあなたのサイトのキーおよび秘密と同じコードを印刷します。
Install the Option 1 hook as includes/hooks/opsiq_tracker.php.
Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.
/* 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. */
In Botble admin → Custom JS, add: <script async src="https://YOUR-BOTBLE-SITE/opsiq-botble-bridge.php?op=admin_embed"></script>
Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.
<!-- 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>
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.
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).
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.
<?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>';
}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.
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.
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.
<?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');
* }
*/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.
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.
Each staff member needs an OpsIQ agent account with the same email (or username): that is how their own permissions apply.
/* 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>';
});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.
adminRouter.use(opsiqAdminChat) on your ADMIN routes, after your session middleware; adjust isStaff(). It answers the refresh and sets res.locals.opsiqAdminChatTag.
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 — 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 };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.
Call init_opsiq_admin_chat(app) where you create the app, and adjust is_staff().
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 — 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))}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.
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.
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.
# 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)}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.
In Program.cs after app.UseAuthentication(): app.Use(OpsiqAdminChat.Refresh); staff = users in the "Admin" role (adjust).
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 — 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>";
}
}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.
include OpsiqAdminChat in your admin base controller; adjust opsiq_staff.
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 — 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
endNo 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.
Replace staff() with your admin lookup. The filter answers the refresh; @ControllerAdvice exposes opsiqAdminChatTag to views.
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 — 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>";
}
}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.
Replace staff() with your session lookup and wrap your admin router: OpsiqAdminChatRefresh(adminMux).
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 — 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(Botble、Babyisto、カスタムアプリ)で、エンドポイントはフレームワークをブートしてログイン管理者を読み込むスタンドアローンファイルです。3つの特定のものは時間を節約します。それぞれが学習前に実際の生産失敗を生み出しました:
貴社のサービスプロバイダが解決する可能性があります request Laravelのライフサイクルは、最初に取得したリクエストを内部にバインドします。 Kernel::handle() — 注文する鏡: $app->instance('request', Request::capture()) ビーフォア $kernel->bootstrap()または、または得る 「ターゲットクラス[request]が存在しません」.
モダンLaravelは、クッキー値のプレフィックスをとります。HMAC APPキーで計算(App Key)CookieValuePrefix) — プレーン sha1(name."v2") 決してそれと一致できません。 ストリップ CookieValuePrefix::validate($name, $decrypted, $keys)、構造のフォールバックと()40 ヘックス・チャーズ + | 位置で40)。言う: セッション ID が長い40チャイルド (Chars)81= プレフィックスがまだ添付)とのみで読み込まれるセッション _token で。
authスタンプは login_<guard>_<sha1(guard class)> — デフォルトのウェブガードの場合: 'login_web_' . sha1(Illuminate\Auth\SessionGuard::class). スキャン login_* カスタムガードのフォールバックとして数値キー。
船を運ぶ debug=1 障害のあるSTEPと例外を名前付けるモード — 盲目のキャッチオールは、診断不可能なライブ展開をしました。 Botble Bridge(v1から)0.7)は参照です:カーネル/bind/bootstrap/decrypt/session/auth/dbのステップマーカー。
<?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]);
}"who がログインしているか?" 行の変更のみ — 署名ブロックはどこでも同じです。 サーバーにサインインし、 JavaScript_ でもありません。
<?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]);エンドポイントが返さず identity_token.エンドポイントを開くURL直接ログインした管理者ブラウザで &debug=1 — 失敗するステップが表示されます。Laravelでは、リクエストバインドやクッキープレフィックスのアイテムがほぼ常に存在します。
古典的な分割。トークンはTOP-LEVELを欠落しています authenticated フラグ — ウィジェットのエンドポイントはトークンを受け入れ、チャットストリームの後ろにある共有バウチャは拒否します。追加 "authenticated" => true beside exp.
トークンが検証されますが、そのユーザー名 + メールは一致しませんOpsIQエージェント。エージェントをエージェントに追加するOpsIQ →チーム、またはそのエージェントのマッチメールリストにプラットフォーム電子メールを追加して、OpsIQ電子メール
CORS のプレッションは、リクエストヘッダーの 1 つを拒否します。エンドポイントは、 OPTIONS リクエストの元を echo、または単にカスタムヘッダーを避ける - ウィジェットはクッキーのみを必要とします。
チェック exp: トークンはデザインによって短時間で動作します。ウィジェットは自動的に再開発されますので、これは通常エンドポイントがセッションを見続けることを意味しています。アプリキーの回転、セッション駆動の変更、またはクッキードメイン変更。
アイデンティティは、匿名の訪問者を既知の顧客に接続します。識別されると、OpsIQ は、閲覧履歴、チャット、および顧客のプロファイルへのチケットをリンクします。
訪問者が普通の JavaScript オブジェクトであるウィジェットを指示します。それはビジターログに電子メールと顧客IDを満たしますので、ダッシュボードは署名入りトラフィックとセッションが参加しています。それはHINTです:誰もが自分のブラウザでそれを編集することができますので、 OpsIQ はそれの強さにアカウントデータを解放しません。
サーバは、サイトWebhookの秘密で短命トークンを署名します。 OpsIQ はシグネチャを検証し、その人が実証済みの顧客として扱うだけです。 これは、顧客のチャットとコネクタのルックアップでアカウントの回答を解除するレベルです。 見られない人は何のためにもそれを使用してください。
ウィジェットスクリプトのBEFORE、またはアプリがサインインしていると認識したら、後で識別()を呼び出します。どちらのフォームも読み込みます。どのフォームでもページに合ったものを使用してください。
<!-- 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>まさに管理者ウィジェットと同じトークン契約、 customer 代わりに、 admin 1。 サーバーにサインインしてウィジェットに渡します。 2つの詳細は、それが検証するかを決定します。両方とも誤って取得するのは簡単です:
シンボル $payload64, ない $payload. 生の JSON に署名すると、右に見えるトークンを生成し、シグネチャの不一致で毎回拒否されます。
トランスレート +/ それは -_ そしてストリップを = Padding. Plain base64 は、今日生き残るために起こります。 base64url は契約であり、それぞれが OpsIQ 頂点および参照のコネクターは出ます。
そば site_key, iat それに exp. 実際の人間がログインしていると、 OpsIQ はトークンを使わずに拒否するというアサーションです。
署名として確認されたメールのみを運ぶトークンは、黙って削除されます。常にidを送信してください。
数時間に分かち合うトークンは、保存する資格ではなくセッションアサーションです。
<?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>';顧客の主題は、として渡しました identity_token 上記でカバーされたwidget.php。 オプション: スニペット A とコネクタを使用して、チャットは既に顧客自身を検証します(予約または注文番号の証拠、または注文前に電子メールで送信されたコード)。 リモートサイト、コード、C は、すでにあなたのサイトに記録されている顧客の自動認識のためのコードを生成します。
管理者の主題、渡されるopsiq/embed/admin_widget.php。 同じ署名者、異なる主題キー。 "あなたのバックエンドにウィジェットを管理者"を参照してください。
厳密な variant: jti と single_use:true の同じクレーム、および a120-second life、トークンが旅行するのでURL一度に費やす必要があります。それを手書きしないでください。設定、サポートポータルは言語のスニペットを用意しており、このサーバーでアカウントエリアが稼働したときにプラットフォームがあなたを指しています。
それらは再び識別されるまで匿名になります。 OpsIQ _はヒントやトークンが到着する瞬間を顧客プロフィールに新しい匿名レコードをリンクします。
それはレベルです1/ レベル2スプリット。 署名されていないヒントは、訪問者のログと他に何も記入しません。 アカウント回答には検証済みのシグネチャが必要です。
既にアプリケーションにサインインしている顧客を、第二のパスワードなしで署名されたサポートポータルに直接送信してください。このページでは、ハンドオフがどのように機能するか、トークン内のすべてのクレーム、設定、および各プラットフォームの完全なルートについて説明します。設定、サポートポータルは、独自のポータルアドレスとワークスペースキーで同じコードを印刷します。
サーバの小さなルートにあるリンクポイントなど /support-portal. すでにトークンを含むリンクでは絶対にありません。ページソース、ブラウザ履歴、およびRefererヘッダーを通してページのリークのトークンです。
顧客を自分のセッションから読みます。サインインされていない訪問者は、ログインに最初に送信され、その後のルートに戻ります。
このワークスペースの署名シークレットで署名された標準的なHS256 JWTは、サーバーのみを保持します。 完了後 120 秒数と一度に使用できる。
ポータルページでは、ポータルが1つ(opsiq_portal_return に尋ねられたときから顧客を来た場合は、ポータルのアドレス内のみ受け入れられます)。それ以外の場合、ポータルホーム。応答は、Referrerer-Policy: no-referrerとCache-Control: noストアを運ぶ。
署名、ワークスペースキー、有効期限およびワンタイムIDがチェックされます。顧客は電子メールによって発見または作成され、既存の要求はそれらに一致します。
ワークスペースキー。他のワークスペースで作られたトークンは、正しく署名された場合でも拒否されます。
秒単位で発行され、有効期限が切れます。ポータルトークンは 120 秒: リダイレクトを1つだけ生き残る必要があります。
本当にこの人に署名したあなたのアプリの声明。必須、トップレベル。
ランダムIDとワンタイムフラグ。同じリンクは2回使用できません。
顧客がから来た無料ラベル(php) wordpress, whmcs...)。顧客のプロフィールで示される。
両方とも必須です。 IDは、アプリの顧客IDです。メールは、ポータルが顧客の検索方法であり、リクエストにマッチする方法です。
任意表示名、およびあなたのプラットホームに対するid OpsIQ の店。
設定、サポートポータル、アプリからシームレスなサインイン。 アプリが実行されているものを選択します。リストの下のコードには、ポータルアドレスとワークスペースキーが入力され、そのプラットフォームにナンバー付きメモがあります。
コピーされたルートには、このワークスペースの署名シークレットが含まれているため、貼り付けたように動作します。ファイルから削除するには、設定します OPSIQ_SITE_SECRET (またはフレームワークの設定) ではなく、サーバーに: その値が最初に使用されます。ページ内のルートを入れないでください。 JavaScript, モバイルアプリまたは公開リポジトリ: 秘密を保持している人は、任意の顧客としてサインインすることができます。.
たとえば https://your-app.com/support-portal.
ポータルスタジオ、サインインページ、Webサイトのログイン、ログインページを使用する URL: 同じルートに設定します。ポータルは追加します opsiq_portal_return お客様がそのページに戻り、署名されたお客様を元通りに引き受けます。
設定、サポートポータル、どこでもサインアップ:アプリのサインアウト URL なので、ポータルから署名しても、あなたのアプリから顧客を署名します。
同じ設定ページで署名されたテストリンクを生成して、ポータル側だけをチェックし、アプリにサインインしながらルートを開きます。
opsiq_whsec_YOUR_SITE_SECRET それぞれの例は、 OPSIQ_SITE_SECRET (または、フレームワークの独自の設定は、そのノートに名前付け) サーバが最初に設定されたときに使用します。そのため、編集コードなしでファイルを回転させるなど、必要な時にファイルから秘密を移動させることができます。ファイルがサーバー上で実行される方法:Webページやブラウザに貼り付けることはありません JavaScript秘密を保持している人は、顧客やスタッフのいずれかにサインインすることができるので、公的なリポジトリにそれをコミットしないでください。 WHMCS そして、 Botble このどれも必要です: WHMCS ホックは、満たされた秘密で到着します, そして、 Botble コネクター パネルは橋にそれを満たします。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.
Save it as a page on that server, e.g. support-portal.php, and point your "Support" link at it.
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) — 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;Save the snippet as a page in your app, e.g. support-portal.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 (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.
Replace the body of $currentUser with your app's signed-in customer, and /login with your login page.
/* 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;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.
Paste the route into routes/web.php. The auth middleware sends guests to your login and back.
/* 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');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.
Paste the snippet into your theme's functions.php, or a small plugin (Code Snippets works).
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.
/* 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;
});Save part 1 as opsiq_support.php in your WHMCS root (next to clientarea.php).
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.
Save part 2 as includes/hooks/opsiq_support_link.php to add Support to the client-area menu.
/* 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,
* ]);
* });
*/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 (.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.
Paste the route after your session / passport setup. Change /login if your login page lives elsewhere.
// 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);
});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.
Replace currentUser() with your app's signed-in customer, then call supportPortal(req, res) for GET /support-portal in your server.
// 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();
}Run: pip install pyjwt (the Flask example also uses 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.
Paste into the module that creates your app. @login_required sends guests to your login view and back.
# 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 respRun: 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.
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.
# 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 respRun: 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.
Paste into Program.cs after app.UseAuthentication(). RequireAuthorization() sends guests to your login and back.
// 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();Add gem "jwt" to the Gemfile 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 (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.
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.
# 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
endAdd 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 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.
Replace currentUser() with your user lookup. With Spring Security the route must be authenticated so guests go to login and back.
// 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);
}
}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.
Replace currentUser() with your session lookup and register http.HandleFunc("/support-portal", supportPortal).
// 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 秒(サーバークロックをチェック)、または同じリンクが2回開いていました。署名されたテストリンクを生成します。その場合は、トークンのクレームを例に比較してください。
アドレスがポータルのアドレスにないため、目的には無視されていました。ポータルで比較します URL [設定] で示します。
実際のログインページでルートに /login を置換し、指定したアドレスに ログインが返されることを確認してください。
customer. email または customer. id は、それぞれに空です。
オプション。ほとんどのサイトは、プレーンチャットスニペットとコネクタで、チャットは顧客自身を検証し、予約または注文番号プラスの証拠と順番の前に電子メールで送信されたコードを必要としません。 既にあなたのサイトに認識されている顧客が、アカウント全体で自動的にログインしているかどうかを確認したい場合は、これを追加します。 WHMCS すでにそのホックを介して行います。 リモートサイト、あなたのサイト、コード、Cは、同じコードをキーサイトに記入した上で印刷します。
署名付き顧客のためにウィジェット URL 持ち運び &identity_token=... サーバに署名した; ゲストのために、それは明白なタグです。 何も秘密はページにある:期限切れのトークンだけ。
署名、ワークスペースキーおよび有効期限。顧客はすべてのチャット要求で知られており、あなたのコネクターは自分の注文、予約または請求書について答えることができます。
どのページを呼び出しますか?opsiq_identity_refresh=1&role=customer. あなたのコードは {"成功"に答えます:true,"identity_token顧客がサインインしている間、または 401 {"success":false" を使うとlogin_required":true} がない場合。そのため、ページが何かを印刷する前に更新ハンドラを実行する必要があるのはなぜでしょう。
1 時間 (exp = iat +) 3600) の代わりに 120 秒は、1つのリダイレクトではなく、すべてのチャットリクエストに乗るからです。
変更が置換されるまで、同じトークンはすべてのメッセージに使用されます。
site_key、iat、exp、認証:true、プラットフォーム、および必要なIDと電子メールで顧客。 同じ秘密、同じ署名。
opsiq_whsec_YOUR_SITE_SECRET それぞれの例は、 OPSIQ_SITE_SECRET (または、フレームワークの独自の設定は、そのノートに名前付け) サーバが最初に設定されたときに使用します。そのため、編集コードなしでファイルを回転させるなど、必要な時にファイルから秘密を移動させることができます。ファイルがサーバー上で実行される方法:Webページやブラウザに貼り付けることはありません JavaScript秘密を保持している人は、顧客やスタッフのいずれかにサインインすることができるので、公的なリポジトリにそれをコミットしないでください。 WHMCS そして、 Botble このどれも必要です: WHMCS ホックは、満たされた秘密で到着します, そして、 Botble コネクター パネルは橋にそれを満たします。Install the Option 1 hook as includes/hooks/opsiq_tracker.php. Do not also paste the plain chat tag.
Optional: add the WHMCS connector under Connectors if you also want the chat to answer about invoices, services and tickets. Identity works without it.
/* 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. */
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.
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.
/* 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 */
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.
At the very top of every page (or your front controller), before any output: require 'opsiq-chat.php'; opsiq_chat_refresh();
Just before </body> on every page: <?= opsiq_chat_tag() ?> — it replaces the plain chat tag. Replace opsiq_chat_user() with your signed-in customer.
<?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>';
}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.
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.
In your main Blade layout, just before </body>: {!! \App\Support\OpsiqChat::tag() !!}
<?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');
* }
*/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.
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.
For WooCommerce orders in the chat, add the WooCommerce connector under Connectors.
/* 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>';
});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.
app.use(opsiqChat) after your session / passport middleware. It answers the refresh and sets res.locals.opsiqChatTag.
Print res.locals.opsiqChatTag (unescaped) just before </body> in your layout, instead of the plain chat tag.
// 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 };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.
Call init_opsiq_chat(app) where you create the app. It answers the refresh and gives templates opsiq_chat_tag.
In your base template, just before </body>: {{ opsiq_chat_tag }}
# 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))}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.
Add "yourapp.opsiq_chat.OpsiqChatMiddleware" to MIDDLEWARE (after AuthenticationMiddleware) and "yourapp.opsiq_chat.opsiq_chat" to TEMPLATES context_processors.
In your base template, just before </body>: {{ opsiq_chat_tag }}
# 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)}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.
In Program.cs, after app.UseAuthentication(): app.Use(OpsiqChat.Refresh);
In _Layout.cshtml before </body>: @Html.Raw(OpsiqChat.Tag(Context))
// 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>";
}
}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.
include OpsiqChat in ApplicationController.
In app/views/layouts/application.html.erb before </body>: <%= opsiq_chat_tag %>
# 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
endAdd 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.
Replace currentUser() with your user lookup. The filter answers the refresh on every page; @ControllerAdvice exposes opsiqChatTag to views.
Thymeleaf layout before </body>: <th:block th:utext="${opsiqChatTag}"/>
// 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>";
}
}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.
Replace currentUser() with your session lookup, and wrap your router: http.ListenAndServe(addr, OpsiqChatRefresh(mux)).
Pass OpsiqChatTag(r) to your layout template and print it before </body>.
// 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 (サーバーに秘密が欠落しているので、コードは閉じられません)、またはトークンのワークスペースキーやシークレットは一致しません。
更新ハンドラが到達していない:チャットの全てのページで、出力前に実行する必要があります。
テンプレートからプレーンチャットタグを削除します。このコードはチャット自体をプリントします。
OpsIQ オファー SDK 一般的なプラットフォーム用のパッケージとプラグイン。
コンポーザーパッケージ:アイデンティティトークン生成、アクション API ヘルパー、Webhookのシグネチャ検証。
ブラウザ側:トラッキング、アイデンティティ、カスタムイベント、チャットコントロール。
ウィジェットの注入、WPユーザーセッションからのアイデンティティ WooCommerce 同期。
完全統合:ウィジェット、チケットリレー、アイデンティティ、管理者AI。
顧客自動身元を埋め込むアプリ。
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、内部通勤者、でき事バスおよびwebhookの操作は残りとして OpsIQ. これは、開発者がパッケージされたコネクターを造ることなくエンドに終端を組み込むことを可能にします。
platform.get.survey.config それに platform.save.survey.config. The 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.*、輸出、赤字化および分析。
surveys.webhooks.*, surveys.imports.*, feedback.items.*, feedback.analytics.*, feedback.sources.* それに feedback.analysis.*.
型付きアンケートを使ってください。* はワークスペースでピンキーを操作します。宣言権限、リスク、確認、出金行動を記述します。
署名されたイベントをインバウンド・ウェブホークに送信する。例えば、注文キャンセルやオンボーディング・ステップの完了などです。リプレイ保護はイベントIDを複製します。
選ぶ OpsIQ 総合案内 API アンケートの招待状を発行したり、キャンペーンの準備をするなどのアクションは、検証済みのトリガーペイロードからフィールドをマップします。
文書化されたビジネスセーフなアンケートを配信* は、署名、フィルタ、リトライ、ログおよび認定された再生でエンドポイントにサブセットをライフサイクルします。
共有カタログは、調査/非正規公開状態、オーディエンスおよびトリガー決定、招待状、レンダリング/スタート/パーシャル/コンプリート/アバンバオン、応答の赤字、キャンペーンの状態、配信障害をカバーします。 大量のフォーカス、スクロール、質問タイミングは、ファンアウトのために明示的に文書化されていない限り、調査分析ストレージに滞在します。
ザ・オブ・ザ・OpsIQ ツイート API プラットフォームのすべての機能をプログラム的にアクセスできるようにします。
鍵をそのまま送って下さい Authorization: Bearer opq_... または X-OpsIQ-Key: opq_.... 1つの認証ヘッダーを、両方使用して下さい。
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 is action-based: 送信 action 本文に名前を付けます。登録管理者の JSON 操作は、安定した名前付きアクションです。 POST {"action":"meta.actions"} (必須キーなし) 権限者、インストールリスト、リクエスト契約、リスクメタデータおよびスコープ。非推奨 platform.routes.* 橋は古い統合のためにだけ残っています。
リストCRM連絡先(スコープcrm. read)。 パラメータ:q、ステータス、ソース、タグ、リードスコア、制限。
コンタクト(スコープ crm. write)を解決または作成します。 パラメータ:メールプラスフィールド、タグ、メモ。
リストCRMの取引(スコープcrm. read)。 パラメータ:ステータス、ステージ_id、会社_id, owner_admin_idは、パイプライン_idの制限。
コンタクト(スコープ crm. write)のライフサイクル/ビジネスアクティビティを記録します。 パラメータ:メールまたはcontact_id、イベント、値、通貨。
変換(スコープ crm. write)を録音します。パラメータ: contact_id または email、transform_type、値、通貨。
CRMイベントストリームを投票します。 (スコープcrm. read). パラメータ: 制限.
リストチケット(スコープticket. read)。 パラメータ:ページ、パーページ、ソート、注文、ステータス、優先順位、部門_id、割り当てられた_admin_id, client_email、検索。
チケットとメッセージ(スコープのticket. read)。 パラメータ:ticket_idまたはticket_number、include_messages、message_limit。
チケット(スコープticket. write)に返信を投稿します。 パラメータ:ticket_idまたはticket_number、ボディ、author_type、author\_name、内部です。
チケット(スコープticket. write)を更新します。 パラメータ: ticket_id または Ticket_number、ステータス、優先順位、対象、部門名、partment_id、割り当てられた_admin_id。
サポートチケット(スコープticket. write)を開きます。 パラメータ: customer_email、customer_name、件名、本文、優先順位。
一括キュー操作を実行(スコープticket. write)。 パラメータ:操作、ID。
ライブチャットの会話(スコープの対話. read)をリストします。 パラメータ:ページ、パーページ、ステータス、割り当てられた_admin_id、client_email、検索。
会話とメッセージ(スコープの対話)。 パラメータ: chat_id または thread_key、include_messages
ページのメッセージ履歴(スコープの会話. read)。 パラメータ: chat_id、ページ、パーページ、include_internal。
会話にメッセージを送信(スコープの対話. write)。 パラム: chat_id、メッセージ、 sender_type、内部。
会話を割り当て、再ステータスまたは再タイトル(スコープの対話. write)。 パラメータ: chat_id, status, assign_admin_id、 Subject。
どのコネクタがインストールされているか、各コネクタが何をできるのか、その認証情報(スコープ・コネクター. read)が機能するかを参照してください。
アクションビルダーが実行するアクション(scope Automations. read)。
火災と条件(スコープのオートメーション. read)に関すること。
統合(スコープのオートメーション. read)をデバッグするための実行履歴。Params: status, action_key。
チケットを(スコープ部門. read)にルーティングできる部署。
1つの演算子(スコープ通知. read)の通知。 パラメータ:admin_id (必須)、unread_only。
レポートセクションとして CSV (scope analytics.read)。 パラメータ:セクション、プリセット、から。 有効な値の「analytics.sections.list」を呼び出します。
監視サイトとSEOレポート(スコープサイト_intelligence. read)。
ストアカタログ、ページ単位(スコープ Commerce. read)。フィルター:アクティブ、カテゴリ、検索。 .get バリアントで1つの製品を返品します。
注文を貯えて下さい(scope Commerce. read)。フィルター:状態、支払方法_method、チャネル、customer_email。1つずつ取って下さい order_id または、ORD-参照、行の項目。ライブゲートウェイチェックアウトハンドルは返却しません。
払い戻しリクエストと状態(スコープ Commerce. read)。
顧客のためのアイテムを価格(スコープ Commerce. write)。 ソース store またはコネクタのスラグ。何も作成しません:注文なし、支払いなし。 商取引セクションを参照してください。
顧客満足度はデータ(スコープticket. read)として応答します。評価、チケット、エージェントまたは期間でフィルタリングします。 .metrics ダッシュボードのショーと同じ番号を返します。
訪問者が評価した会話をチャットします。, コメントあり, 評価とエージェントのクレジットを尋ねました (スコープの対話. read).
ヘルプセンターの記事(スコープkb. read) からページを移動します。
id(scope kb. read)による1つのヘルプセンターの記事。 パラメータ: article_id。
ペイロードでWebhookエンドポイントを購読できるイベント。すべてのプランで利用可能なので、購入前にビルドすることができます。
添付ファイル(scope files. read)用の短命の署名されたダウンロードリンク。 パラメーター:参照、ttl。
かどうかを尋ねる IP またはメールがブロックされているか、疑わしいか(スコープのsecurity.read)。IP ファイアウォール、チケットスパムブロックリストとキャッシュされたセキュリティAIの検証。 パラメータ: ip、電子メール。
監視対象のシステムが悪用される(スコープ・セキュリティー・ライト)。セキュリティイベントとして記録され、すぐにセキュリティAIに分類され、管理者は高リスク予測で警告されます。ip、電子メール、種類、理由、ソース。
スパムルールを管理する チケットパイプラインの強制 (スコープセキュリティ. write /security. read)。 同じストアとして、チケットページ "ブロック送信者" 制御。 パラメータ:種類(メール、ドメイン、ip)、値、理由、有効期限_時間。
リストアクションは同じパラメータを使用するので、一度学習します。
ページの先頭へ1, ページサイズ. デフォルト 50、最高 200. 制限とオフセットは、お好みのものでも受け付けられます。
フィールドは、asc または desc (デフォルトではデスク) によってソートします。各アクションは、ソートフィールドの固定セットを受け入れます。エラーではなく、他のものは無視されます。
オブジェクトとしてフィルタを送ったり、フィルターをトップレベルのパラメーターに渡したりします。未知のフィルタは無視されます。
アイテム、ページ、パーページ、カウント、合計およびハッシュ_more。 has_more が false になるまでリクエストを続けてください。
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"
}鍵が送られなかったり、キーが間違っているか、期限切れになったりしません。 HTTP 401_.
鍵は有効ですが、このアクションのスコープが不足しています。 HTTP 403_.
キーは読み取り専用か、このアクションが許可リストにありません。 HTTP 403_.
そのようなアクションはありません。現在のリストのメタ. actions を呼び出します。 HTTP 400_.
必須パラメータは absent で、値が受け入れられません。 HTTP 400_.
レコードは存在しません。または、このキーが見ることができるワークスペースにはありません。 HTTP 404_.
計画には、このアクションが属する機能が含まれていません。 体名は featureあの plan_name 力と upgrade_url. 再試行は助けません。計画が変更される必要があります。 HTTP 402_.
インストールのライセンスはアクティブではありませんので、復元されるまでアクションを実行しません。 HTTP 402.
商習慣:店はスイッチを販売しているので、引用符や注文することはできません。 HTTP 400.
このキーの上限は、HTTP 429 です。
何かが失敗しました。request_id は、報告する必要がある場合の試みを識別します。HTTP 500_.
書き込み時間がなくなった場合は、その土地がどこにいるかを伝えられません。 idempotency_key 同じコールの繰り返しは、作業を2回行わさずに元の結果を返します。
{
"action": "tickets.reply",
"ticket_id": 4192,
"body": "Thanks, that is now fixed.",
"idempotency_key": "your-unique-id-for-this-attempt"
}鍵が記憶されている 24 同じ行動に対して時間と API キー。
元の応答、さらにidempotent_replay: trueなので、再生されたことを伝えることができます。
成功する書き込みのみが記憶されます。呼び出しが失敗した場合は、同じキーで再びそれを再度送信すると、必要なことです。
読みます キーを無視します。読み取りを繰り返しても無害です。
アクセサリー 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."
}設定可能な時間単位 API キー (デフォルト) 1000 1 時間あたりのリクエスト)。設定下にあるキーごとに設定します。API キー。
HTTP 429 はコードレートで_limited、Retry-Afterヘッダーを使って待機回数を通知します。次のクロック時間の上に制限がリセットされます。
応答には、X-RateLimit-Limit, X-RATELimit - RemainingとX- RateLiMIT-Reset(Unixのタイムスタンプ)が搭載されています。 拒否するのではなく、実行する前に、Remaining and減速を監視します。
A. は、429 待たせて、もう一度試してみてください。 A 401 つまり、キー自体が間違っているか期限切れになっているので、キーを修正するまで再試行は役に立ちません。
1つの IP から失敗した試みを繰り返すと、別々にスロットルされます。有効なキーはこれを旅行しません。
再メンテナンスが低くなると、すぐに再試行ではなく 429 の後にリトリートをホーニングします。
v1. 各応答はX-を運ぶ OpsIQ-API-バージョンとX-OpsIQ-API-Status なので、話している内容を確認することができます。
バージョンが一旦退任された場合、応答は標準の廃止とサンセットヘッダーを獲得し、メタ. actions は非推奨で日没を報告します。監視中のものをチェックして、驚くことはありません。
アクション名、パラメータ、エラーコードを既存の操作。新しいアクションと新しいオプションフィールドはいつでも追加される可能性があるため、無視するフィールドは、失敗したのではなく認識されません。
これは、ループ全体です。仕事を見つけ、それを読んで、それで行動し、あなたが何をしたかを確認します。
# 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}これらは、フラグメントではなく、実際の統合の完全で実行可能な部分です。
ルールはどこでも同じです。次のページをリクエストして、 has_more 偽りです。合計は推測しません。
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"])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
$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"]));営業拠点 code, 決して言葉遣いに error. このラッパーは1つの機能の全体の契約です。
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回で行動しません。
# 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 正確に返されるように。数量は、常にユニットの価格を乗じることはありません - ホテルには3泊1部屋の引用符があります。そのため、自分で計算する数字は、商人が実際に充電するものとは異なる可能性があります。確認、重複し、素早く回答し、作業をします。リトライするので、同じイベントは一度以上到着できます。
<?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"
}A. は、403つまり、KEYが狭すぎる — 正しいスコープで再発行し、それが動作します。 A402つまり、アカウントは機能を持っていません。鍵がロック解除できず、計画は変更する必要があります。
過渡しません。表面に upgrade_url 誰にも、アカウントをバックオフして再試行するのではなく所有しています。
スコープは、キー発行者が委任したことを表明しています。このプランは、アカウントが購入したものを表現します。管理者スコープされたキーはまだ、計画不足の特長のために 402 を取得します。
あの feature 各アクションは、以下のアクションディレクトリと meta.actionなので、制作中に発見するのではなくビルド時に確認することができます。
鍵が立つ場所を正確に見る最速の方法は meta.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"
}
}
}commerce.quotes.create 注文なし、支払いなし、在庫なしの1つのアイテムを1つにまとめて作成します。顧客の決定がまだある間に電話をかけることは安全です。
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"}}接続されたプラットフォームでは、合計がその商人から来ており、ここで再計算されることはありません。数量は必ずしもユニットの価格を乗ってはいけません。ホテルには3泊1室を引用しています。つまり、あなたが与えられた総を表示し、あなたが働いたものではなく、あなたも与えたのです。
商人が顧客からもっと必要とするら、得ます quote_refused とりあえず missing フィールドを収集するリスト、および商人の自身の言葉を表示するために名前を付けること。
引用符は示されます。 確認は、顧客がどこにいるのか - チャットの署名されたカード、または商人の自身のチェックアウト - この APIを決して通過しません。 応答はそう言っています ordering.
店舗が切替を販売している場合は、見積りの回答 selling_paused 誰が買うことができないかを価格設定するよりもむしろ。
必要なのは、ほとんどすべてのPOSTです /api/v1.php. これは例外であり、それぞれが何であるかです。
マシン契約と人間の参照。必要なキーは不要で、あなたが持っている前に探すことができます。
ライブチャットのサーバーに送信されるイベントは、生成されるように応答します。ストリームではなく、 JSON アクション。
古いAIライティングエンドポイント。 全てが利用可能 writing.* 新規作業が行なう場所にある /api/v1.php, のアクション
自分の管理者に埋め込まれたチケットの受信トレイを、ドラフト、書き換え、そしてトライアジ。
小さなRESTとしてサイトインテリジェンスAPI— デプロイ後にクロールを開始し、結果を読み込むCIパイプラインのサイト、クロール、問題、キーワード、収益 -
接続されたプラットフォームが、独自のWebhookをあなたにPOSTする場所。 コネクターを有効にするとトークンはマイナスされます。
インテグレーションエンジン:アクションを実行して確認し、セールス、アイデンティティと旅行イベントをインジェストします。 独自のキータイプを使用しており、API& Webhookビルダー。
実行中のカタログから生成されるので、常にバージョンにマッチします。 meta.actions 同じ情報を JSON と同じ値に戻します。
Write. Scope: administration.write, admin. Contract: route_inferred. Admin 2fa Disable
Write. Scope: administration.write, admin. Contract: route_inferred. Admin 2fa Enable
Write. Scope: administration.write, admin. Contract: route_inferred. Admin 2fa Recovery Regenerate
Read. Scope: administration.read, admin. Contract: route_inferred. Admin 2fa Setup
Read. Scope: administration.read, admin. Contract: declared_dynamic. Admin 2fa Status
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Ai Train From Reply
Write. Scope: administration.write, admin. Contract: declared_dynamic. Admin Brain Cancel
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Brain View
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Chat Access Check
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Chat Create Ticket On Behalf
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Chat Draft Ticket From Thread
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv Delete
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv Get
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv List
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv New
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Conv Save
Read. Scope: administration.read, admin. Contract: declared_dynamic. Admin Notification Prefs Get
Write. Scope: administration.write, admin. Contract: declared_dynamic. Admin Notification Prefs Save
Read. Scope: administration.read, admin. Contract: route_inferred. Admin Notifications List
Write. Scope: administration.write, admin. Contract: declared_dynamic. Admin Notifications Mark All Read
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Notifications Mark Read
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Notifications Pulse
Read. Scope: administration.read, admin. Contract: declared_dynamic. Admin Online List
Write. Scope: administration.write, admin. Contract: declared_dynamic. Admin Presence Ping
Write. Scope: administration.write, admin. Contract: route_inferred. Admin Realtime Token
Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Add Widget
Read. Scope: analytics.read, admin. Contract: declared_dynamic. Analytics Connectors Catalog
Read. Scope: analytics.read, admin. Contract: route_inferred. Analytics Data
Read. Scope: analytics.read, admin. Contract: route_inferred. Analytics Export
Read. Scope: analytics.read, admin. Contract: route_inferred. Analytics Export Csv
Write. Scope: analytics.write, admin. Contract: route_inferred. Analytics Import
Write. Scope: analytics.write, admin. Contract: route_inferred. Analytics Report
Write. Scope: analytics.write, admin. Contract: route_inferred. Analytics Segments Delete
Read. Scope: analytics.read, admin. Contract: declared_dynamic. Analytics Segments List
Write. Scope: analytics.write, admin. Contract: route_inferred. Analytics Segments Save
Read. Scope: analytics.read, admin. Contract: declared_dynamic. Analytics Status
Write. Scope: analytics.write, admin. Contract: declared_dynamic. Replay Clear All
Read. Scope: analytics.read, admin. Contract: route_inferred. Funnels Compute
Write. Scope: analytics.write, admin. Contract: route_inferred. Ab Test Create
Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Create
Write. Scope: analytics.write, admin. Contract: route_inferred. Report Create
Write. Scope: analytics.write, admin. Contract: route_inferred. Ab Test Delete
Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Delete
Write. Scope: analytics.write, admin. Contract: route_inferred. Funnels Delete
Write. Scope: analytics.write, admin. Contract: route_inferred. Report Delete
Read. Scope: analytics.read, admin. Contract: route_inferred. Replay Events
Read. Scope: analytics.read, admin. Contract: source_inferred. Analytics Export
Read. Scope: analytics.read, admin. Contract: route_inferred. Dashboard Get
Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Layout Save
Read. Scope: analytics.read, admin. Contract: declared_dynamic. Ab Test List
Read. Scope: analytics.read, admin. Contract: declared_dynamic. Dashboard List
Read. Scope: analytics.read, admin. Contract: declared_dynamic. Funnels List
Read. Scope: analytics.read, admin. Contract: declared_dynamic. Report List
Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Remove Widget
Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Rename
Read. Scope: analytics.read, admin. Contract: route_inferred. Ab Test Results
Write. Scope: analytics.write, admin. Contract: route_inferred. Funnels Save
Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Save Widgets
Read. Scope: analytics.read, admin. Contract: explicit. List scheduled analytics reports for an operator Required fields: admin_id.
Read. Scope: analytics.read, admin. Contract: explicit. List analytics report sections and date presets
Write. Scope: analytics.write, admin. Contract: route_inferred. Report Send Now
Read. Scope: analytics.read, admin. Contract: route_inferred. Replay Sessions
Read. Scope: analytics.read, admin. Contract: route_inferred. Funnels Step Visitors
Read. Scope: analytics.read, admin. Contract: route_inferred. Replay Timeline
Write. Scope: analytics.write, admin. Contract: route_inferred. Dashboard Toggle Shared
Write. Scope: analytics.write, admin. Contract: route_inferred. Ab Test Update
Write. Scope: analytics.write, admin. Contract: route_inferred. Report Update
Read. Scope: analytics.read, admin. Contract: route_inferred. Dashboard Widget Data
Read. Scope: automations.read, admin. Contract: explicit. List integration actions
Write. Scope: automations.write, admin. Contract: route_inferred. Workflow Delete
Read. Scope: automations.read, admin. Contract: route_inferred. Workflow List
Read. Scope: automations.read, admin. Contract: explicit. List automation execution history
Write. Scope: automations.write, admin. Contract: route_inferred. Workflow Save
Read. Scope: automations.read, admin. Contract: explicit. List integration triggers
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Call Start
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Cobrowse Send
Read. Scope: chat.read, admin. Contract: route_inferred. Chat Feedback
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Feedback Digest
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Form Delete
Read. Scope: chat.read, admin. Contract: route_inferred. Chat Form Get
Read. Scope: chat.read, admin. Contract: declared_dynamic. Chat Form List
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Form Save
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Form Set Default
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Decide
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Outcome Set
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Type Delete
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Type Save
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meeting Types List
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Meetings List
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Online Admins
Write. Scope: admin. Contract: route_inferred. Chat Permissions List
Write. Scope: admin. Contract: route_inferred. Chat Permissions Revoke
Write. Scope: admin. Contract: route_inferred. Chat Permissions Save
Write. Scope: admin. Contract: route_inferred. Chat Permissions Upload Avatar
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Reaction Toggle
Write. Scope: chat.write, admin. Contract: source_inferred. Chat Saved Replies Add Retry-safe with idempotency_key.
Read. Scope: chat.read, admin. Contract: explicit. List workspace and personal saved replies
Write. Scope: chat.write, admin. Contract: source_inferred. Chat Saved Replies Save Retry-safe with idempotency_key.
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Set Persona
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Snooze Clear
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Snooze Set
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Transfer Thread
Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Transfer Unread
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Typing Preview
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Ai Summary
Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Whisper Controls
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Delete Room
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper List
Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Whisper Mentions
Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Whisper Rooms
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Save Controls
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Send
Write. Scope: chat.write, admin. Contract: declared_dynamic. Chat Whisper Targets
Write. Scope: chat.write, admin. Contract: route_inferred. Chat Whisper Unread
Read. Scope: commerce.read, analytics.read, admin. Contract: explicit. Read privacy-safe storefront analytics
Read. Scope: commerce.read, admin. Contract: explicit. Get one Store order with its line items
Read. Scope: commerce.read, admin. Contract: explicit. List Store orders in the bound workspace
Read. Scope: commerce.read, admin. Contract: explicit. List storefront pages and promotional modals
Read. Scope: commerce.read, admin. Contract: explicit. Get one Store product with its variants Required fields: product_id.
Read. Scope: commerce.read, admin. Contract: explicit. List Store products in the bound workspace
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.
Read. Scope: commerce.read, admin. Contract: explicit. Check demo readiness and merchant go-live readiness
Read. Scope: commerce.read, admin. Contract: explicit. List Store refund requests in the bound workspace
Read. Scope: commerce.read, admin. Contract: explicit. Discover Store themes, designs, blocks and promotional shells
Read. Scope: commerce.read, admin. Contract: explicit. Get the bound workspace storefront configuration
Read. Scope: admin. Contract: route_inferred. Email Auth Check
Write. Scope: communications.write, admin. Contract: route_inferred. Push Campaign Delete
Write. Scope: communications.write, admin. Contract: route_inferred. Push Campaign Save
Write. Scope: communications.write, admin. Contract: route_inferred. Push Campaign Send
Read. Scope: communications.read, admin. Contract: declared_dynamic. Push Campaigns List
Write. Scope: communications.write, admin. Contract: route_inferred. Email Drafts Delete
Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Drafts List
Write. Scope: communications.write, admin. Contract: route_inferred. Email Drafts Save
Write. Scope: communications.write, admin. Contract: route_inferred. Email Drafts Send
Write. Scope: communications.write, admin. Contract: route_inferred. Email Mailboxes Delete
Read. Scope: communications.read, admin. Contract: route_inferred. Email Mailboxes List
Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Mailboxes Poll
Write. Scope: communications.write, admin. Contract: route_inferred. Email Mailboxes Save
Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Mailboxes Test
Write. Scope: communications.write, admin. Contract: declared_dynamic. Email Pipe Regen Token
Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Platform List
Write. Scope: communications.write, admin. Contract: route_inferred. Email Platform Send
Read. Scope: communications.read, admin. Contract: declared_dynamic. Email Settings Get
Write. Scope: communications.write, admin. Contract: route_inferred. Email Settings Save
Read. Scope: communications.read, admin. Contract: route_inferred. Email Settings Test
Write. Scope: communications.write, admin. Contract: declared_dynamic. Push Vapid Generate
Read. Scope: connector_builder.read, admin. Contract: explicit. Export a generated connector Required fields: slug.
Write. Scope: connector_builder.write, admin. Contract: route_inferred. Generate a connector package Required fields: spec.
Read. Scope: connector_builder.read, admin. Contract: route_inferred. Load a Builder specification Required fields: slug.
Write. Scope: connector_builder.write, admin. Contract: route_inferred. Import cURL into Connector Builder
Write. Scope: connector_builder.write, admin. Contract: route_inferred. Import OpenAPI into Connector Builder
Write. Scope: connector_builder.write, admin. Contract: route_inferred. Import Postman into Connector Builder
Read. Scope: connector_builder.read, admin. Contract: declared_dynamic. List Builder connectors
Read. Scope: connector_builder.read, connectors.read, admin. Contract: source_inferred. List Connector Builder profiles and capability contracts
Write. Scope: connector_builder.write, admin. Contract: route_inferred. Run Builder conformance tests Required fields: slug.
Write. Scope: connector_builder.write, admin. Contract: route_inferred. Update a generated connector Required fields: slug, spec.
Read. Scope: connector_builder.read, admin. Contract: route_inferred. Validate a Builder specification Required fields: spec.
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Action
Write. Scope: connectors.write, admin. Contract: route_inferred. Start connector backfill Required fields: slug.
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Backfill
Read. Scope: connectors.read, admin. Contract: route_inferred. Read connector backfill status Required fields: slug.
Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Backfill Status
Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Ai Actions
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Ai Draft
Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Ai Handler
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Ai Map
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Delete
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Dry Run
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Generate
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Import Curl
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Import Openapi
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Import Postman
Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connectors Builder List
Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Load
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Marketplace Apply
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Marketplace Link
Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connectors Builder Marketplace Status
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Marketplace Submit
Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connectors Builder Schema
Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Test
Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Test Action
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Builder Update
Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Builder Validate
Write. Scope: connectors.write, admin. Contract: route_inferred. Connector Contacts Import
Read. Scope: connectors.read, connector_builder.read, admin. Contract: source_inferred. Read the canonical connector capability contract
Write. Scope: connectors.write, admin. Contract: route_inferred. Synchronize connector customers Required fields: slug.
Write. Scope: connectors.write, admin. Contract: route_inferred. Disable a connector Required fields: slug.
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Disable
Read. Scope: connectors.read, admin. Contract: route_inferred. Connector Email Account Department
Write. Scope: connectors.write, admin. Contract: route_inferred. Connector Email Account Remove
Read. Scope: connectors.read, admin. Contract: route_inferred. Connector Email Account Routing
Write. Scope: connectors.write, admin. Contract: route_inferred. Enable a connector Required fields: slug.
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Enable
Read. Scope: connectors.read, admin. Contract: source_inferred. Connectors Get
Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Get
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Install
Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connector Integrity Scan
Read. Scope: connectors.read, admin. Contract: explicit. List installed connectors and capabilities
Read. Scope: connectors.read, admin. Contract: declared_dynamic. Connectors List
Write. Scope: connectors.write, admin. Contract: route_inferred. Connector Oauth Start
Read. Scope: connectors.read, admin. Contract: route_inferred. Read connector settings Required fields: slug.
Write. Scope: connectors.write, admin. Contract: route_inferred. Save connector settings Required fields: slug, settings.
Write. Scope: connectors.write, admin. Contract: route_inferred. Connector Shared Oauth Delete
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Sync Customers
Read. Scope: connectors.read, admin. Contract: source_inferred. Connectors Test
Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Test
Write. Scope: connectors.write, admin. Contract: route_inferred. Connectors Uninstall
Read. Scope: connectors.read, admin. Contract: route_inferred. Connectors Workflow Recipes
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Ai Draft
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Ai Rewrite
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Archive
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Assign
Write. Scope: conversations.write, admin. Contract: declared_dynamic. Admin Client Chat Assignees
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Bulk
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Clear
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Clear All
Write. Scope: conversations.write, admin. Contract: declared_dynamic. Admin Client Chat Customer Tickets
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Decline
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Delete
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Delete Last
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Edit Last
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Export
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Forget Visitor
Read. Scope: conversations.read, admin. Contract: source_inferred. Conversations Get
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat History
Read. Scope: conversations.read, admin. Contract: source_inferred. Conversations List
Read. Scope: conversations.read, admin. Contract: source_inferred. Conversations Messages
Read. Scope: conversations.read, admin. Contract: explicit. List rated Client Chat conversations
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Resolve
Write. Scope: conversations.write, admin. Contract: declared_dynamic. Admin Client Chat Saved Replies
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Saved Reply Add
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Saved Reply Ai Generate
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Saved Reply Delete
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Saved Reply Save
Write. Scope: conversations.write, admin. Contract: source_inferred. Conversations Send Retry-safe with idempotency_key.
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Send
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Tags Set
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Thread
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Threads
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Toggle
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Toggle Attachments
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Toggle Call Button
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Typing
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Unarchive
Write. Scope: conversations.write, admin. Contract: explicit. Update a conversation status, assignment or subject Retry-safe with idempotency_key.
Write. Scope: conversations.write, admin. Contract: route_inferred. Admin Client Chat Upload
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Ab Results
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Access Set
Read. Scope: admin. Contract: source_inferred. Crm Access Log List
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Account Health
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Account Health Board
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Account Health Refresh
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Account Plan Get
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Account Plan Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Account Plans Due
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Account Timeline
Read. Scope: crm.read. Contract: explicit. List CRM contact activities
Write. Scope: crm.write. Contract: explicit. Record a CRM contact activity Required fields: contact_id, activity_type. Retry-safe with idempotency_key.
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Activity Feed
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Agent Toggle
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Ai Policy Get
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Ai Policy Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Ai Policy Simulate
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Ai Trace
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Decide
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Delegate Set
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Approval List
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Policy Get
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Policy Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Approval Settings
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Approve Apply
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Approve List
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Approve Reject
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Approve Update
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Ask
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Assign Owner
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Assignment Get
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Assignment Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Attachment Delete
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Attachment List
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Attachment Upload
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Autobook Meeting
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Autodeal Mode
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Book Meeting
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Booking Link Save
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Booking Links List
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Build Apply
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Build Get
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Build List
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Build Plan
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Build Rollback
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Bulk
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Bundle Set
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Calendar Status
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Capture Status
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Comm Policy Get
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Comm Policy Save
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Command Snapshot
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Companies List
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Company Hierarchy
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Company Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Company Set Parent
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Company Suggest Related
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Connectors Catalog
Read. Scope: crm.read. Contract: source_inferred. Crm Consent Log List
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Contact Churn
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contact Draft Email
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contact Enrich
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contact Propose Email
Read. Scope: crm.read. Contract: source_inferred. Crm Contacts Detail
Write. Scope: admin. Contract: source_inferred. Crm Contacts Erase Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: source_inferred. Crm Contacts Export
Read. Scope: crm.read. Contract: source_inferred. Crm Contacts Import List
Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Import Run Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: source_inferred. Crm Contacts List
Read. Scope: crm.read. Contract: source_inferred. Crm Contacts Next Action
Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Open Chat Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Open Ticket Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Resync Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Save Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Contacts Send Email Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: explicit. Crm Contacts Upsert Required fields: email. Retry-safe with idempotency_key.
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contract Amend
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contract Price Set
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contract Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contract Usage
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Contracts List
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Conversation Intel
Write. Scope: crm.write. Contract: source_inferred. Crm Conversions Goals Delete Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: source_inferred. Crm Conversions Goals List
Write. Scope: crm.write. Contract: source_inferred. Crm Conversions Goals Save Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: source_inferred. Crm Conversions List
Write. Scope: crm.write. Contract: source_inferred. Crm Conversions Record Retry-safe with idempotency_key.
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Create Video Meeting
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Customer Auto Sync
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Customer Auto Sync Status
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Customer Emails
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Customer Payments
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Data Steward Bulk Propose
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Data Steward Inbox
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Data Steward Propose
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Deal Advance
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Deal Coach
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Deal Coach Action
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Deal Get
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Deal Save
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Deal Splits Get
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Deal Splits Set
Write. Scope: crm.write. Contract: explicit. Advance a CRM deal to another stage Required fields: deal_id, stage_id. Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: explicit. Create a CRM deal Required fields: title. Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: explicit. Get one CRM deal Required fields: deal_id.
Read. Scope: crm.read. Contract: explicit. List CRM deals
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Deals List
Write. Scope: crm.write. Contract: explicit. Update a CRM deal Required fields: deal_id. Retry-safe with idempotency_key.
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Detail
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Draft Outreach
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Enrich Account
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Erase
Read. Scope: crm.read. Contract: explicit. List subscribable CRM domain events
Read. Scope: crm.read. Contract: explicit. List durable CRM domain events
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Export
Read. Scope: crm.read, admin. Contract: route_inferred. Contact Export All
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Field Add
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Field Policy Get
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Field Policy Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Field Remove
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Fields List
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Forecast Board
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Forecast Snapshot
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Form Save
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Forms List
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Health Repair Catalog
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Health Smoke
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Health Snapshot
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Home Persona Set
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Identity Rules Get
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Identity Rules Save
Read. Scope: crm.read, admin. Contract: route_inferred. Contact Import List
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Import Run
Read. Scope: crm.read. Contract: source_inferred. Crm Inbound Activity
Write. Scope: crm.write. Contract: source_inferred. Crm Inbound Endpoints Delete Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: source_inferred. Crm Inbound Endpoints List
Write. Scope: crm.write. Contract: source_inferred. Crm Inbound Endpoints Save Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Inbound Endpoints Test Retry-safe with idempotency_key.
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Leaderboard
Write. Scope: crm.write. Contract: source_inferred. Crm Lifecycle Evaluate Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Lifecycle Rules Delete Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: source_inferred. Crm Lifecycle Rules List
Write. Scope: crm.write. Contract: source_inferred. Crm Lifecycle Rules Save Retry-safe with idempotency_key.
Read. Scope: crm.read, admin. Contract: route_inferred. Contacts List
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Mailbox Status
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Meeting Book
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Meeting Cancel
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Meeting List
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Meeting Reschedule Accept
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Meeting Reschedule Reject
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Merge
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Message Send
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Messaging Provider Delete
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Messaging Provider Save
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Messaging Provider Test
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Messaging Status
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Next Action
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Object Save
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Objects List
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Offline Pull
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Offline Push
Read. Scope: crm.read, admin. Contract: route_inferred. Contact Open Chat
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Open Ticket
Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Campaigns Delete Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: source_inferred. Crm Outreach Campaigns List
Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Campaigns Save Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Campaigns Send Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Send Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Templates Delete Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: source_inferred. Crm Outreach Templates List
Read. Scope: crm.read. Contract: source_inferred. Crm Outreach Templates Preview
Write. Scope: crm.write. Contract: source_inferred. Crm Outreach Templates Save Retry-safe with idempotency_key.
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Payments Status
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Pipeline Data
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Price Resolve
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Pricebook Entry Set
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Pricebook Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Pricebooks List
Read. Scope: crm.read. Contract: source_inferred. Crm Privacy Settings Get
Write. Scope: admin. Contract: source_inferred. Crm Privacy Settings Save Retry-safe with idempotency_key.
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Product Archive
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Product Revenue
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Product Save
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Products List
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Propose Meeting
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Propose Outreach
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Prospecting Dashboard
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Prospecting Icp Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Prospecting Import
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Prospecting Research
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Prospecting Score
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Prospecting Sequence
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Qualification Checklist Get
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Qualification Checklist Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Quota Save
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Quote Get
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Quote Save
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Quotes List
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Delete
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Record Fields Get
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Fields Save
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Record Get
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Record History
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Share Set
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Share Unset
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Record Shares
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Records List
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Restore Email Consent
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Resync From Platform
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Retention Catalog
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Revert
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Runtime Policy Get
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Runtime Policy Remote Wipe
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Runtime Policy Save
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Scoring Rule Ai
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Scoring Rule Delete
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Scoring Rule List
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Scoring Rule Save
Write. Scope: crm.write. Contract: source_inferred. Crm Segments Delete Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: source_inferred. Crm Segments List
Read. Scope: crm.read. Contract: source_inferred. Crm Segments Members
Read. Scope: crm.read. Contract: source_inferred. Crm Segments Preview
Write. Scope: crm.write. Contract: source_inferred. Crm Segments Save Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Segments Suggestions Accept Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Segments Suggestions Dismiss Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: source_inferred. Crm Segments Suggestions List
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Semantic Search
Write. Scope: crm.write, admin. Contract: route_inferred. Contact Send Email
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Send Email
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Send For Signature
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Send Payment Link
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Sequence Action
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Sequence Runs
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Setup Status
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Sharing Rules Get
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Sharing Rules Save
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Subject Registry
Read. Scope: crm.read, admin. Contract: route_inferred. Crm Subscriptions List
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Subscriptions Rollup
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Subscriptions Sync
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Task Create
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Tasks List
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Team Parent Set
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Team Rules Set
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Team Save
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Teams List
Write. Scope: crm.write, admin. Contract: route_inferred. Crm Territory Set
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Video Status
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Views Delete
Read. Scope: crm.read, admin. Contract: declared_dynamic. Crm Views List
Write. Scope: crm.write, admin. Contract: declared_dynamic. Crm Views Save
Write. Scope: crm.write. Contract: source_inferred. Crm Webhooks Delete Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: explicit. List CRM outbound webhook endpoints and recent deliveries
Write. Scope: crm.write. Contract: source_inferred. Crm Webhooks Save Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Webhooks Test Retry-safe with idempotency_key.
Write. Scope: crm.write. Contract: source_inferred. Crm Workflows Delete Retry-safe with idempotency_key.
Read. Scope: crm.read. Contract: source_inferred. Crm Workflows List
Write. Scope: crm.write. Contract: source_inferred. Crm Workflows Save Retry-safe with idempotency_key.
Write. Scope: customers.write, journey.write, admin. Contract: route_inferred. Analyze a customer journey with AI Required fields: client_id.
Read. Scope: admin. Contract: route_inferred. Cdp Behaviour
Write. Scope: admin. Contract: route_inferred. Cdp Behaviour Analyze
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Embed Backfill
Read. Scope: customers.read, admin. Contract: declared_dynamic. Client Chat Embed Status
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Ai Generate
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Approve All
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Delete
Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Faq Delete All
Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Faq Export
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Generate
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Import
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq List
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Save
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Set Help
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Set Help All
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Faq Status
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Grant Upload
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Help Set Slug
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Crawl Step
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Delete
Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Knowledge Delete All
Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Knowledge Delete Duplicates
Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Knowledge Duplicates
Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Knowledge Export Json
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Import Json
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Preview
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Recrawl
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Knowledge Test Url
Write. Scope: customers.write, admin. Contract: route_inferred. Client Chat Revoke Upload
Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Upload Agent Avatar
Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Upload Ai Avatar
Write. Scope: customers.write, admin. Contract: declared_dynamic. Client Chat Upload Icon
Write. Scope: admin. Contract: route_inferred. Cdp Client Analyze
Write. Scope: admin. Contract: route_inferred. Cdp Client Delete
Write. Scope: admin. Contract: route_inferred. Cdp Client Export
Read. Scope: admin. Contract: route_inferred. Cdp Client Journey
Write. Scope: customers.write, admin. Contract: route_inferred. Cdp Client Prepare Outreach
Read. Scope: admin. Contract: route_inferred. Cdp Clients List
Read. Scope: customers.read, admin. Contract: route_inferred. Client Detail
Read. Scope: customers.read, crm.read, admin. Contract: route_inferred. Get a customer profile Required fields: client_id.
Read. Scope: customers.read, journey.read, admin. Contract: route_inferred. Get a complete customer journey Required fields: client_id.
Read. Scope: customers.read, crm.read, admin. Contract: route_inferred. List known customers
Write. Scope: customers.write, crm.write, admin. Contract: route_inferred. Prepare CRM outreach for a customer Required fields: client_id.
Read. Scope: departments.read, admin. Contract: source_inferred. Departments List
Write. Scope: email.write, admin. Contract: source_inferred. Send one governed workspace email template Required fields: template, to. Retry-safe with idempotency_key.
Read. Scope: email.read, admin. Contract: source_inferred. List email templates available to this workspace
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ab Autowinner
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ab Bandit
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Address Get
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Address Save
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Agent
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Analyze
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Compile Profile
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Copy
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Critique
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Decide
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Design
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Edit
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Generate
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Ideas
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Image
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Image Edit
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Localize
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Logo
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Media Jobs
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Narrative
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Ai Responsive
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Ai Variants
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Video Start
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Ai Video Status
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Approval Decide
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Approval Request
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Approvals List
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Asset Delete
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Asset Upload
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Assets List
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Audience Materialize
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Audience Save
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Audience Test
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Audit Export
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Autoresponder Get
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Autoresponder Save
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Bank Delete
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Bank List
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Bank Save
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Bank Used
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Blackouts Get
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Blackouts Save
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Brand Kit Bootstrap
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Brand Kit Font Upload
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Brand Kit Get
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Brand Kit Get
Write. Scope: engagement.write, admin. Contract: declared_dynamic. Promo Brand Kit Save
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Brand Kit Save
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Archive
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Delete
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Duplicate
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Get
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Campaign Launch
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign List
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Pause
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Preview
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Publish
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Rollback
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Save
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Campaign Save
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Campaign Toggle
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Campaign Versions
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Comment Add
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Comments Add
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Comments Delete
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Comments List
Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Comments List
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Comments Resolve
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Connectors Catalog
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Coupon Providers
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Coupons Clear
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Coupons Stats
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Coupons Upload
Write. Scope: engagement.write, admin. Contract: route_inferred. Announcement Delete
Write. Scope: engagement.write, admin. Contract: route_inferred. Tour Delete
Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Delivery Analytics
Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Delivery Dashboard
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Ab Promote
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Ab Save
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Publish
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Save
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Deployment Status
Read. Scope: engagement.read, admin. Contract: route_inferred. Campaign Detail
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Digest Save
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Feed Catalog
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Feed Items
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Geo Preview
Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Idle Cron Set
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Import Create
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Import Replay
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Leads Export
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Leads List
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Announcements List
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Tours List
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Module Set Ai Live
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Module Set Custom Html
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Module Set Enabled
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Promo Module Status
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Onsite Preview
Write. Scope: engagement.write, admin. Contract: declared_dynamic. Promo Pause All
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Presence
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Preview Share
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Push Draft
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Recipients Issue
Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Recipients List
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Recipients Revoke
Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Response Detail
Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Responses Browse
Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Rule Delete
Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Rule Save
Read. Scope: engagement.read, admin. Contract: route_inferred. Proactive Rule Stats
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Rule Test
Write. Scope: engagement.write, admin. Contract: route_inferred. Proactive Rule Toggle
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Proactive Rules List
Write. Scope: engagement.write, admin. Contract: route_inferred. Announcement Save
Write. Scope: engagement.write, admin. Contract: route_inferred. Tour Save
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Stats
Read. Scope: engagement.read, admin. Contract: route_inferred. Tour Stats
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio A11y
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Ai Generate
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Ai Insights
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Ai Target
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Archive
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Studio Assets
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Create
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Delete
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Duplicate
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Studio Event
Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Studio Get
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Governance
Read. Scope: engagement.read, admin. Contract: declared_dynamic. Survey Studio List
Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Studio Preview
Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Studio Preview Link
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Publish
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Rename
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Revert
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Save Draft
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Save Targeting
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Set Active
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Set Status
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Template Delete
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Template Save
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Tpl Preview
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Upload
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Studio Webhook
Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Targeting Simulate
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Template Apply
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Template List
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Template Save Custom
Write. Scope: engagement.write, admin. Contract: route_inferred. Announcement Toggle
Write. Scope: engagement.write, admin. Contract: route_inferred. Tour Toggle
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Trigger Set Save
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Variant Delete
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Variant List
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Variant Promote
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Variant Save
Read. Scope: engagement.read, admin. Contract: route_inferred. Survey Version Compare
Read. Scope: engagement.read, admin. Contract: route_inferred. Promo Version Get
Write. Scope: engagement.write, admin. Contract: route_inferred. Promo Version Label
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Delete
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Replay
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Run
Write. Scope: engagement.write, admin. Contract: route_inferred. Survey Webhook Save
Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Analytics
Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Detractors
Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Get
Write. Scope: feedback.write, admin. Contract: explicit. Ingest a feedback record or external review
Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback List
Read. Scope: feedback.read, admin. Contract: source_inferred. Feedback Overview
Read. Scope: feedback.read, admin. Contract: explicit. List Voice of Customer feedback sources
Write. Scope: feedback.write, admin. Contract: source_inferred. Feedback Update Retry-safe with idempotency_key.
Read. Scope: files.read, admin. Contract: source_inferred. Files Get
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.
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.
Read. Scope: hr.read, admin. Contract: route_inferred. What actually happened at a step (permitted, executed, proven, failed, compensated) Required fields: run_uuid, seq.
Write. Scope: hr.write, admin. Contract: route_inferred. A human takes an agent run; no further agent steps are accepted Required fields: run_uuid.
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.
Read. Scope: hr.read, admin. Contract: declared_dynamic. List the registered typed tools an agent may use, and open agent incidents
Write. Scope: hr.write, admin. Contract: declared_dynamic. Bundle recent reviewer corrections into a dataset; it is pending privacy review and trains nothing
Read. Scope: hr.read, admin. Contract: declared_dynamic. The AI quality board: sampled defect rate, override pressure per workflow, coaching reception
Write. Scope: hr.write, admin. Contract: declared_dynamic. Release booking slots whose claim never became a booked meeting
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.
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.
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.
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.
Write. Scope: hr.write, admin. Contract: route_inferred. Provision seatless employee access and send the invitation Required fields: person_uuid.
Write. Scope: hr.write, admin. Contract: route_inferred. Lift an employee access suspension (written reason required) and provision again Required fields: person_uuid, reason.
Read. Scope: hr.read, admin. Contract: route_inferred. Measured persona experience metrics (self-service rate, decision cycle, coaching usefulness, quality) from live journeys
Read. Scope: hr.read, admin. Contract: declared_dynamic. The whole launch picture: 15-gate leadership score, release readiness checks and jurisdiction coverage
Read. Scope: hr.read, admin. Contract: route_inferred. List a person's identity facets and open conflicts Required fields: person_uuid.
Write. Scope: hr.write, admin. Contract: route_inferred. Link an identity facet to a person Required fields: person_uuid, facet_type, facet_key.
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.
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.
Write. Scope: hr.write, admin. Contract: route_inferred. Pause a live interview Required fields: media_uuid.
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.
Read. Scope: hr.read, admin. Contract: route_inferred. Read an interview room, including whether the AI is actually participating Required fields: media_uuid.
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.
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.
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.
Read. Scope: hr.read, admin. Contract: declared_dynamic. Computed coverage for every market: released pack, named counsel owner, cited sources, passing tests
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.
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.
Read. Scope: hr.read, admin. Contract: declared_dynamic. Read courses, paths and enrolments
Read. Scope: hr.read, admin. Contract: declared_dynamic. Read leave types and requests
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
Read. Scope: hr.read, admin. Contract: declared_dynamic. Read HR connector accounts, conflicts and deliveries
Read. Scope: hr.read, admin. Contract: declared_dynamic. Read the organisation tree
Write. Scope: hr.write, admin. Contract: route_inferred. Create an HR person Required fields: display_name.
Read. Scope: hr.read, admin. Contract: route_inferred. Get one HR person Required fields: person_uuid.
Read. Scope: hr.read, admin. Contract: declared_dynamic. List HR people
Write. Scope: hr.write, admin. Contract: route_inferred. Update an HR person Required fields: person_uuid, display_name, primary_email.
Read. Scope: hr.read, admin. Contract: declared_dynamic. List job postings
Read. Scope: hr.read, admin. Contract: declared_dynamic. Run the HR release readiness report
Write. Scope: hr.write, admin. Contract: declared_dynamic. Run the four HR release gates (schema, manifest, probe, readiness)
Write. Scope: hr.write, admin. Contract: route_inferred. Create a requisition Required fields: title, openings, justification.
Read. Scope: hr.read, admin. Contract: declared_dynamic. List requisitions
Write. Scope: hr.write, admin. Contract: route_inferred. Delete a workforce conversation; refused while it is under legal hold Required fields: thread_uuid, reason.
Write. Scope: hr.write, admin. Contract: route_inferred. Place or lift a legal hold on a workforce conversation Required fields: thread_uuid, on, reason.
Write. Scope: hr.write, admin. Contract: route_inferred. Set a conversation's retention class (standard|extended|permanent) Required fields: thread_uuid, retention_class.
Write. Scope: hr.write, admin. Contract: declared_dynamic. Run the conversation retention sweep; legal holds are never swept
Write. Scope: intent.write, admin. Contract: declared_dynamic. Intent Clear
Read. Scope: intent.read, analytics.read, admin. Contract: route_inferred. Read the intent funnel
Read. Scope: intent.read, admin. Contract: route_inferred. Intent Funnel Aggregate
Read. Scope: intent.read, admin. Contract: route_inferred. Intent Funnel
Read. Scope: intent.read, analytics.read, admin. Contract: route_inferred. Read intent summaries
Read. Scope: intent.read, admin. Contract: route_inferred. Intent Summary
Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Delete Retry-safe with idempotency_key.
Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Generate Retry-safe with idempotency_key.
Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Import Retry-safe with idempotency_key.
Read. Scope: kb.read, read, admin. Contract: source_inferred. Kb Faq List
Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Save Retry-safe with idempotency_key.
Write. Scope: kb.write, admin. Contract: source_inferred. Kb Faq Set Status Retry-safe with idempotency_key.
Read. Scope: kb.read, admin. Contract: route_inferred. Help Analytics Get
Write. Scope: kb.write, admin. Contract: route_inferred. Help Analytics Toggle
Read. Scope: kb.read, admin. Contract: route_inferred. Help Article Ai Refine
Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Class Bulk
Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Delete
Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Publish
Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Save
Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Set Category
Write. Scope: kb.write, admin. Contract: route_inferred. Help Article Set Public
Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Ai Generate
Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Bulk Delete
Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Articles Count
Read. Scope: kb.read, admin. Contract: explicit. Get one Help Center article Required fields: article_id.
Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Ids
Read. Scope: kb.read, admin. Contract: route_inferred. Help Articles List
Write. Scope: kb.write, admin. Contract: route_inferred. Help Articles Set Public All
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Categories Ai Merge
Write. Scope: kb.write, admin. Contract: route_inferred. Help Categories Bulk Delete
Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Categories List
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Categories Merge Dupes
Write. Scope: kb.write, admin. Contract: route_inferred. Help Category Delete
Read. Scope: kb.read, admin. Contract: route_inferred. Help Category Get
Write. Scope: kb.write, admin. Contract: route_inferred. Help Category Save
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Article Image Upload
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Favicon Upload
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Hero Dark Upload
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Hero Upload
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Logo Dark Upload
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Logo Upload
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Og Image Upload
Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Center Settings Get
Write. Scope: kb.write, admin. Contract: route_inferred. Help Center Settings Save
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Subhero Dark Upload
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Subhero Upload
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Translate Estimate
Write. Scope: kb.write, admin. Contract: route_inferred. Help Center Translate Run
Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Center Translate Status
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Translate Stop
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Widget Hero Upload
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Center Widget Icon Upload
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Comments Deliver Notifications
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Comments Moderate
Read. Scope: kb.read, admin. Contract: route_inferred. Kb Comments Moderation List
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Batches
Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Import Connectors
Read. Scope: kb.read, admin. Contract: route_inferred. Kb Import Csv Preview
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Preview
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Resync
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Run
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Import Undo
Write. Scope: kb.write, admin. Contract: route_inferred. Help Insights Generate
Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Insights Get
Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Mark Reviewed
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Missed Dismiss
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Missed Draft Article
Read. Scope: kb.read, admin. Contract: route_inferred. Kb Missed List
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Missed Mark Published
Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Missed Refresh
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Organize Descriptions
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Organize Status
Write. Scope: kb.write, admin. Contract: route_inferred. Help Organize Step
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Publish
Write. Scope: kb.write, admin. Contract: declared_dynamic. Help Reformat Revert
Read. Scope: kb.read, admin. Contract: declared_dynamic. Help Reformat Status
Write. Scope: kb.write, admin. Contract: route_inferred. Help Reformat Step
Read. Scope: kb.read, admin. Contract: declared_dynamic. Kb Review Queue
Read. Scope: kb.read, admin. Contract: declared_dynamic. Kb Search Gaps
Write. Scope: kb.write, admin. Contract: route_inferred. Help Set Featured
Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Set Visibility
Write. Scope: kb.write, admin. Contract: route_inferred. Help Subdomain Allocate
Read. Scope: kb.read, admin. Contract: route_inferred. Help Subdomain Check
Write. Scope: kb.write, admin. Contract: route_inferred. Help Subdomain Release
Write. Scope: kb.write, admin. Contract: declared_dynamic. Kb Taxonomy Organize
Read. Scope: kb.read, admin. Contract: declared_dynamic. Kb Taxonomy Status
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Taxonomy Step
Read. Scope: kb.read, admin. Contract: route_inferred. Kb Widget Categories
Write. Scope: kb.write, admin. Contract: route_inferred. Kb Widget Publish
Read. Scope: kb.read, admin. Contract: route_inferred. Kb Widget Targets
Write. Scope: leads.write, crm.write, admin. Contract: route_inferred. Delete a lead Required fields: lead_id.
Write. Scope: leads.write, admin. Contract: route_inferred. Lead Delete
Read. Scope: leads.read, crm.read, admin. Contract: route_inferred. List leads
Read. Scope: leads.read, analytics.read, admin. Contract: declared_dynamic. Get lead statistics
Read. Scope: leads.read, admin. Contract: declared_dynamic. Leads Stats
Write. Scope: leads.write, crm.write, admin. Contract: route_inferred. Update a lead Required fields: lead_id, status.
Read. Scope: none. Contract: explicit. Get one General API action contract Required fields: name.
Read. Scope: none. Contract: explicit. List the complete General API contract
Read. Scope: none. Contract: explicit. Describe the authenticated API key and active workspace
Read. Scope: none. Contract: explicit. List API scopes and the actions protected by each scope
Read. Scope: notifications.read, admin. Contract: source_inferred. Notifications List
Write. Scope: platform.write, admin. Contract: declared_dynamic. Add Announcement
Write. Scope: platform.write, admin. Contract: route_inferred. Add Kb Article
Write. Scope: platform.write, admin. Contract: route_inferred. Add Todo Item
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Action Lookup
Read. Scope: platform.read, admin. Contract: route_inferred. Ai Anomaly Detect
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Add
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Delete
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Edit
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain List
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Pin
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Brain Status
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Chat
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Confidence Stats
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Context Lookup
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Daily Brief
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Daily Brief Check
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Daily Brief Dismiss
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Daily Brief Fetch
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Control Summary
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Feedback Queue
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Kb Gap Queue
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Load
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Eval Replay History
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Eval Run
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Eval Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Eval Score Answer
Read. Scope: platform.read, admin. Contract: route_inferred. Ai Eval Simulate
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Feedback Analysis
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Feedback Stats
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Archive
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Clear All
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Delete
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Export Csv
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Get
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History List
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai History Stats
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Insight Clear
Read. Scope: platform.read, admin. Contract: route_inferred. Ai Insight History
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Insight Report Delete
Read. Scope: platform.read, admin. Contract: route_inferred. Ai Insight Report Get
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Instructions Compress
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Instructions Connector Templates
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Instructions Example
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Instructions Load
Read. Scope: platform.read, admin. Contract: route_inferred. Ai Instructions Preview
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Instructions Reset
Write. Scope: platform.write, admin. Contract: declared_dynamic. Ai Instructions Save
Read. Scope: platform.read, admin. Contract: route_inferred. Ai Page Insights
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Popup Regen
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Quality View
Read. Scope: platform.read, admin. Contract: route_inferred. Ai Reasoning Chain Get
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Score Lead
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Smart Alerts
Read. Scope: platform.read, admin. Contract: route_inferred. Ai Spoke
Read. Scope: platform.read, admin. Contract: declared_dynamic. Ai Triage Accuracy
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Whmcs Chat
Write. Scope: platform.write, admin. Contract: route_inferred. Ai Writing
Read. Scope: admin. Contract: declared_dynamic. Api Keys Catalog
Write. Scope: admin. Contract: route_inferred. Api Keys Create
Write. Scope: admin. Contract: route_inferred. Api Keys Delete
Read. Scope: admin. Contract: declared_dynamic. Api Keys List
Write. Scope: admin. Contract: route_inferred. Api Keys Revoke
Write. Scope: admin. Contract: route_inferred. Api Keys Update
Read. Scope: admin. Contract: route_inferred. Audit Export
Write. Scope: platform.write, admin. Contract: route_inferred. Blocked
Read. Scope: platform.read, admin. Contract: declared_dynamic. Campaigns
Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Browsers
Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Countries
Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Devices
Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Hourly
Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart New Returning
Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Os
Read. Scope: platform.read, admin. Contract: declared_dynamic. Chart Sources
Read. Scope: platform.read, admin. Contract: route_inferred. Chart Visitors
Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Delete
Read. Scope: platform.read, admin. Contract: route_inferred. Chatbot Flow Get
Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Save
Read. Scope: platform.read, admin. Contract: route_inferred. Chatbot Flow Stats
Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Test Advance
Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Test Start
Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Flow Toggle
Read. Scope: platform.read, admin. Contract: declared_dynamic. Chatbot Flows List
Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Node Delete
Write. Scope: platform.write, admin. Contract: route_inferred. Chatbot Node Save
Read. Scope: platform.read, admin. Contract: route_inferred. Chatbot Nodes List
Write. Scope: platform.write, admin. Contract: declared_dynamic. Clear Admin Chat History
Read. Scope: platform.read, admin. Contract: declared_dynamic. Command Center View
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Actf Execute
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Actf Policy Save
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Actf Review
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Actf Simulate
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Analytics Report
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Analytics Report Email
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Autonomy Issue
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Autonomy Status
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Collections Delete
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Collections Save
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Customer Block
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Customer Credit Add
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Customer Save
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Customers List
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Digital Codes Import
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Digital Config Save
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Digital File Upload
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Fulfilment Transition
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Intelligence Economics Save
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Intelligence Market Price Save
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Intelligence Market Save
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Kit Apply
Read. Scope: commerce.read, admin. Contract: route_inferred. Commerce Kit Preview
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Kits List
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Launch Readiness
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Menu Ai Build
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Menus Save
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Merchandising Save
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Midmarket Operations
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Onboarding Ai Draft
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Onboarding Apply
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Option Sets Generate
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Option Sets Save
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Option Templates
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Order Refundable
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Order Ship
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Order Shipments
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Orders List
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Orders Transition
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Page Ai Draft
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Page Ai Refine
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Page Render
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Pages Delete
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Pages List
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Pages Save
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Price Advice
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Products Ai Copy
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Bulk
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Products Catalog Meta
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Delete
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Duplicate
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Products Export Csv
Read. Scope: commerce.read, admin. Contract: route_inferred. Commerce Products Image Alt Ai
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Image Delete
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Products Image Update
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Image Upload
Read. Scope: commerce.read, admin. Contract: route_inferred. Commerce Products Images List
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Products Images Reorder
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Products Import Csv
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Products List
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Products Save
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Refunds Complete Manual
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Refunds Request
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Returns Transition
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Size Charts Delete
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Size Charts Save
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Store Maturity
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Storefront Brand Import
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Storefront Domain Remove
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Storefront Domain Set
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Storefront Logo Upload
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Storefront Page Ai Seo
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Storefront Slug Save
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Supply Chain
Write. Scope: commerce.write, admin. Contract: route_inferred. Commerce Variants Delete
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Variants Save
Write. Scope: commerce.write, admin. Contract: declared_dynamic. Commerce Wallet Topup Refund
Read. Scope: commerce.read, admin. Contract: declared_dynamic. Commerce Wallet Topups List
Write. Scope: platform.write, admin. Contract: route_inferred. Complete Todo Item
Read. Scope: platform.read, admin. Contract: route_inferred. Consent Log List
Read. Scope: platform.read, admin. Contract: declared_dynamic. Countries
Read. Scope: platform.read, admin. Contract: route_inferred. Country Detail
Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Approve
Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Disable
Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Reject
Write. Scope: platform.write, admin. Contract: route_inferred. Custom Code Rollback
Read. Scope: platform.read, admin. Contract: route_inferred. Custom Code Status
Write. Scope: platform.write, admin. Contract: route_inferred. Delete Todo Item
Read. Scope: platform.read, admin. Contract: declared_dynamic. Devices
Read. Scope: platform.read, admin. Contract: declared_dynamic. Diag Check Resolutions
Write. Scope: platform.write, admin. Contract: route_inferred. Diag Dismiss
Read. Scope: platform.read, admin. Contract: declared_dynamic. Diag Event Taxonomy
Write. Scope: admin. Contract: declared_dynamic. Diag Identity Restitch
Write. Scope: platform.write, admin. Contract: route_inferred. Diag Recheck
Write. Scope: platform.write, admin. Contract: declared_dynamic. Diag Recheck All
Write. Scope: platform.write, admin. Contract: route_inferred. Diag Report
Write. Scope: platform.write, admin. Contract: route_inferred. Diag Unmute
Write. Scope: admin. Contract: route_inferred. Dismiss Credit Alert
Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Ai Generate
Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Delete
Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge List
Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Save
Write. Scope: platform.write, admin. Contract: route_inferred. Domain Knowledge Toggle
Write. Scope: platform.write, admin. Contract: route_inferred. Domain Verify Add
Read. Scope: platform.read, admin. Contract: declared_dynamic. Domain Verify List
Write. Scope: platform.write, admin. Contract: route_inferred. Domain Verify Recheck
Write. Scope: platform.write, admin. Contract: route_inferred. Domain Verify Remove
Write. Scope: platform.write, admin. Contract: route_inferred. Dynamic Action Dispatch
Write. Scope: platform.write, admin. Contract: declared_dynamic. Events Clear All
Read. Scope: platform.read, admin. Contract: route_inferred. Events List
Write. Scope: platform.write, admin. Contract: route_inferred. Experiment Delete
Read. Scope: platform.read, admin. Contract: route_inferred. Experiment Results
Write. Scope: platform.write, admin. Contract: route_inferred. Experiment Save
Write. Scope: platform.write, admin. Contract: declared_dynamic. Experiments Clear All
Read. Scope: platform.read, admin. Contract: declared_dynamic. Experiments List
Write. Scope: platform.write, admin. Contract: declared_dynamic. Failed Logins Clear All
Write. Scope: platform.write, admin. Contract: declared_dynamic. Failed Logins Clear History
Write. Scope: platform.write, admin. Contract: route_inferred. Failed Logins Journey
Write. Scope: platform.write, admin. Contract: declared_dynamic. Failed Logins List
Write. Scope: platform.write, admin. Contract: route_inferred. Failed Logins Unblock
Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Analysis Get
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Analysis Run
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics All
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Detractors
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Metrics
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Overview
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Segments
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Sentiment
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Themes
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Analytics Trends
Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Assignees List
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Event Outbox Drain
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Exports Create
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Exports Get
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback External Review Ingest
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Ingest Create
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Assign
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Items Evidence
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Follow Up Complete
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Follow Up Set Required fields: bool.
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Items Get
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback Items List
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Mark Read
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Notes Add
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Set Priority
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Set Status
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Tags Add
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Items Tags Remove
Read. Scope: platform.read, admin. Contract: route_inferred. Feedback List
Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reconciliation
Write. Scope: platform.write, admin. Contract: declared_dynamic. Feedback Reports Delete
Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reports Email
Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reports Get
Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Reports List
Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Satisfaction Advice Last
Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Satisfaction Advise
Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Satisfaction Overview
Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Sources Health
Read. Scope: platform.read, admin. Contract: declared_dynamic. Feedback Sources List
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Sources Rebuild
Write. Scope: platform.write, admin. Contract: route_inferred. Feedback Sources Replay
Write. Scope: platform.write, admin. Contract: declared_dynamic. Feedback Stats
Write. Scope: platform.write, admin. Contract: declared_dynamic. Fx Refresh Now
Read. Scope: platform.read, admin. Contract: declared_dynamic. Geoip Autodetect
Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Admin Chat History
Write. Scope: platform.write, admin. Contract: route_inferred. Get Ai Snapshot
Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Campaign Groups
Write. Scope: platform.write, admin. Contract: declared_dynamic. Get Client Chat Knowledge Overview
Read. Scope: platform.read, admin. Contract: route_inferred. Get Kb Categories
Read. Scope: platform.read, admin. Contract: route_inferred. Get Live Health Snapshot
Write. Scope: platform.write, admin. Contract: declared_dynamic. Get Pwa Chat Prefs
Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Servers
Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Survey Config
Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Ticket Options
Read. Scope: platform.read, admin. Contract: route_inferred. Get Ticket Thread
Read. Scope: platform.read, admin. Contract: declared_dynamic. Get Todo List
Read. Scope: platform.read, admin. Contract: route_inferred. Get Widget Advanced
Read. Scope: platform.read, admin. Contract: route_inferred. Governance Summary
Write. Scope: platform.write, admin. Contract: route_inferred. Groups Create
Write. Scope: platform.write, admin. Contract: route_inferred. Groups Delete
Write. Scope: platform.write, admin. Contract: route_inferred. Groups List
Write. Scope: platform.write, admin. Contract: route_inferred. Groups Rename
Write. Scope: platform.write, admin. Contract: route_inferred. Groups Set Primary
Read. Scope: platform.read, admin. Contract: route_inferred. Hc Preview Mint
Write. Scope: platform.write, admin. Contract: route_inferred. Hc Template Apply
Write. Scope: platform.write, admin. Contract: route_inferred. Hc Template Delete
Read. Scope: platform.read, admin. Contract: route_inferred. Hc Template Preview
Write. Scope: platform.write, admin. Contract: route_inferred. Hc Template Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hc Templates List
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hc Translation Review Get
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hc Translation Review List
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hc Translation Review Revert
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hc Translation Review Save
Read. Scope: platform.read, admin. Contract: route_inferred. Heatmap
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Grant Manual
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Access Policy List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Policy Set
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Request
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Access Revoke
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Accommodation List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Accommodation Resolve
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Assign
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Compensation Retry
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Agent Compensation Sweep
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Agent Compensations
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Incident Close
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Register
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Step
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Agent Step Status
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Tool Auth
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Agent Tool Grant
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Agent Tools
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Ai Act Build
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Ai Act Export
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Fria Record
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Notice Publish
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Overseer Assign
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Act Overseer Revoke
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Ai Act Overview
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Ai Metering Export
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Ai Metering Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Ai Metering Settings Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Ai Status
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Analytics Ask
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Analytics Snapshot
Write. Scope: platform.write, admin. Contract: route_inferred. Hr App Move
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Appeal List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Appeal Resolve
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Application History
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Application List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Assign
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Auto Offer Run
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Autonomy Lane Demote
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Autonomy Lane Install
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Autonomy Lane Promote
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Autonomy Lane Review
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Autonomy Lane Shadow
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Autonomy Lanes
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Autonomy Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Availability Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Band Approve
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Band List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Band Save
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Benchmarks Contribute Now
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Benchmarks Opt In
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Benchmarks Opt Out
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Benchmarks Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Benefit Enroll
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Benefit Plan Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Bias Audit List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Bias Audit Run
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Booking Link Save
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Booking Slots Reconcile
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Breaker Reset
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Broadcast Audience Options
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Broadcast List
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Broadcast Preview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Broadcast Send
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Budget Set
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Calibration Close
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Calibration Move
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Calibration Open
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Capabilities Get
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Capability Set
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Capability Trail
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Cards Refresh
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Assign
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Attachment Add
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Case Attachment List
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Case Categories
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Event Add
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Case Get
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Case Grant Access
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Intake Mailbox
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Case List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Open
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Route
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Thread
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Case Tighten
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Certification Define
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Certification List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Certification Record
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Certification State
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Certification Types
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Check List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Manual Result
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Order
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Requery
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Check Void
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Checkin Record
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Coach Feedback
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Coach Me
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Coach Receive
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Comp Change Approve
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Comp Change Request
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Compliance Build
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Compliance List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Cert Revoke
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Connector Cert Submissions
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Cert Submit
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Certify
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Connector Health
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Connector Options
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Connector Revoke
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Contract List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Copilot Apply
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Copilot Plan
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Copilot Recipes
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Copilot Reject
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Correction Dataset Build
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Correction Datasets
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Correction Privacy Review
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Enroll
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Course Skills Tag
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Decision Appeal Assign
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Decision Appeal File
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Decision Appeal Resolve
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Decision Appeals List
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Decision Explanation
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Decisions Recent
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Directory Visibility Get
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Directory Visibility Set
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Discipline Decide
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Discipline Propose
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Document Access Log
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Deletion Request
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Hold
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Intake
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Document List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Requirement Add
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Requirement Remove
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Document Review Approve
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Document Reviews
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Dsr List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Dsr Transition
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Email Intake Log
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Employee Access Events
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employee Provision
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employee Restore
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employee Suspend
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employment Activate
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Employment End
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Enterprise Approve
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Equipment Delivered
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Equipment Request
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Equipment Returned
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Escrow Resolve
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence A11y Record
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Attest
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Dr Record
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Evidence Ledgers
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Load Record
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Evidence Owner Assign
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Confirm
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Decide
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Handoff
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Expense Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Expense Policy Save
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Experience Metrics
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Expiry Run
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Fairness Cohort Define
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Fairness Cohorts
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Fairness Evaluate
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq Delete
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq Draft
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Faq List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Faq State
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Feedback List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Feedback Record
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Flag Set
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Flags Get
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Frontline Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Gig Decide
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Gig Post
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Global Readiness
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Goal Create
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Goal Draft
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Goal Update
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Grievance File
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Grievance Outcome
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Headcount Approve
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Headcount Draft
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Headcount List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Hire
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Hiring Decide
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Holiday Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Identity Admin Options
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Conflict Resolve
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Identity Coverage Plan
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Identity Facets
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Identity History
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Link
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Revoke
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Identity Verification Record
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Incident List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Incident Open
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Incident Step
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Recording Start
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Recording Upload
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Review
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Answer
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Ask
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Connect
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Consent
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room End
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Leave
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Interview Room List
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Observe
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Pause
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Provision
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Reconnect
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room Resume
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Interview Room State
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Room Takeover
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Schedule
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Interview Transcript Correct
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Close
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Finding
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Hold
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Investigation Open
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Investigation Triage
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iplan Approve
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iplan Create
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Iplan List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iscore Human
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Iscore Run
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Isession Attach Meeting
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Isession Control
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Isession List
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Isession Liveness
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Isession Schedule
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Job Arch Analyse
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Apply
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Approve
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Job Arch Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Propose
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Arch Reject
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Family Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Level Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Profile Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Version Draft Ai
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Version Publish
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Job Version Save
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Job Versions
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Capabilities
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Case Run
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Case Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Change Assess
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Change Close
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Change Raise
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Jurisdiction Coverage
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Explain
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Overlay List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Overlay Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Pack Draft
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Pack Release
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Pack Withdraw
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Jurisdiction Release List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Rule Save
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Jurisdiction Source Declare
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Jurisdiction Transfer Declare
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kill Flip
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kill Toggle
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kiosk Register
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Kiosk Revoke
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Knowledge Pack Install
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Knowledge Pack Remove
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Knowledge Packs
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Leadership Score
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Learning Assign Mandatory
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Learning Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Leave Decide
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Leave Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Leave Policy Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Leave Type Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Letter Issue
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Letter Kinds
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Letter Preview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Listening Close
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Listening Overview
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Listening Run Due
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Listening Schedule Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Listening Schedule State
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Approve
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Correct
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Evaluate
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Loop Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Propose
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Release
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Rollback
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Loop Snapshot
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Marketplace Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Book
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Cancel
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Propose
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Meeting Reschedule
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Meetings Overview
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Meetings Reconcile
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Mentor Propose
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Module Toggle
Read. Scope: platform.read, admin. Contract: route_inferred. Hr New Hire Checkin State
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Approve
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Draft
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Esign Confirm
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Offer List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Send
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Offer Withdraw
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Onboarding Checkins Book
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Draft Tasks
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Onboarding Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Plan Buddy
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Plan Close
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Plan Create
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Block
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Done
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Onboarding Task Skip
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Unblock
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Task Verify
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Onboarding Template Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr One On One List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr One On One Record
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Opportunity Decide
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Opportunity Post
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Chart
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Legal Entities
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Legal Entity Create
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Location Create
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Locations
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Org Map Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Map Remove
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Map Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Org Tree
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Org Unit Create
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Org Unit Move
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Override Record
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Overtime Decide
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Path Enroll
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Path Save
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Pay Equity Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pay Gap Evaluate
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Payroll Import
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Payroll Overview
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Payroll Provider Exceptions
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Payroll Reconcile
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Payslips Issue
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr People List
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Perf Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Create an HR person Required fields: display_name.
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Person Get
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Person Identifier Add
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Person Identifier Read
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Person Identifiers
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Person Update
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pilot Outcome Record
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Pipeline
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Policy Activate
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Policy Compile
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pool Create
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pool Member Add
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pool Member Remove
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Pool Overview
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Portal Address
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Portal Slug Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Assign
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Create
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Position Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Profile Set
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Reports To
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position State
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Position Vacate
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Posting Close
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Posting Create
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Posting List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Posting Publish
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Probation Open
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Probation Review
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Profile Address Format
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Address Write
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Decide
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Profile Ownership Get
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Ownership Set
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Profile Pending
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Photo Clear
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Photo Set
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Reveal
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Section End
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Profile Section Write
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Profile Sections
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pulse Close
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pulse Issue
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Pulse List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Pulse Open
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Pulse Results
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Quality Overview
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Quality Sample Draw
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Quality Samples
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Quality Verdict
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Queue Agent Add
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Queue Agent Remove
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Queue Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Readiness Report
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Recognise
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Relations Overview
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Release Gates
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Release Verify
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Req Create
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Req List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Req Reject
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Req Transition
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Cycle Open
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Include
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Respond
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Review Template Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Rubric Approve
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Rubric Create
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Rubric List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Replay
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Start
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Step
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Run Takeover
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Scenario Run
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Schedule Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Screening Correct
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Screening List
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Screening Review
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Screening Run
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Screening Verify
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Security Assurance Record
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Service Item Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Servicedesk Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Shadow Compare
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Shift Add
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Shift Assign
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Signature Cancel
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Signature Confirm
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Signature List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Signature Request
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Signin Design Get
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Signin Design Save
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Skill Challenge Resolve
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Skills Infer Sweep
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Skills Infer Text
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Skills Overview
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Skills Taxonomy Adopt
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Status
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Succession Nominate
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Succession Open
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Succession Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Swap Approve
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Swap Decline
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Sync Conflict Resolve
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Talent Overview
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Delete
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Dm
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Legal Hold
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Outreach
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Post
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Thread Read
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Thread Retention
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Thread Search
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Threads Inbox
Write. Scope: platform.write, admin. Contract: declared_dynamic. Hr Threads Retention Sweep
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Time Decide
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Time Overview
Read. Scope: platform.read, admin. Contract: route_inferred. Hr Title History
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Title Record
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Training Requirement Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Truth Register
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Turnover Run
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Verifier Verdict
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb Grant
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb Identity
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Wb List
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb Read
Write. Scope: platform.write, admin. Contract: route_inferred. Hr Wb State
Read. Scope: platform.read, admin. Contract: declared_dynamic. Hr Workforce Dashboard
Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Activity Feed
Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Endpoints Delete
Write. Scope: admin. Contract: route_inferred. Inbound Endpoints List
Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Endpoints Save
Write. Scope: platform.write, admin. Contract: route_inferred. Inbound Endpoints Test
Read. Scope: platform.read, admin. Contract: declared_dynamic. Interrupted
Read. Scope: platform.read, admin. Contract: route_inferred. Ip Classify
Write. Scope: platform.write, admin. Contract: declared_dynamic. Js Errors Clear All
Read. Scope: platform.read, admin. Contract: route_inferred. Js Errors List
Write. Scope: platform.write, admin. Contract: route_inferred. Js Issue Assign
Write. Scope: platform.write, admin. Contract: route_inferred. Js Issue Update
Write. Scope: platform.write, admin. Contract: route_inferred. Js Sourcemap Delete
Write. Scope: platform.write, admin. Contract: route_inferred. Js Sourcemap Upload
Read. Scope: platform.read, admin. Contract: declared_dynamic. Js Sourcemaps List
Read. Scope: platform.read, admin. Contract: route_inferred. Leads
Write. Scope: admin. Contract: declared_dynamic. License Delete
Read. Scope: platform.read, admin. Contract: declared_dynamic. License Diagnostics
Read. Scope: platform.read, admin. Contract: declared_dynamic. License Force Check
Read. Scope: platform.read, admin. Contract: declared_dynamic. License Preflight
Write. Scope: admin. Contract: route_inferred. License Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. License Status
Write. Scope: platform.write, admin. Contract: declared_dynamic. License Verify Now
Read. Scope: platform.read, admin. Contract: route_inferred. Lifecycle Evaluate
Write. Scope: platform.write, admin. Contract: route_inferred. Lifecycle Rule Delete
Read. Scope: platform.read, admin. Contract: route_inferred. Lifecycle Rule List
Write. Scope: platform.write, admin. Contract: route_inferred. Lifecycle Rule Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. List Assignable Sites
Read. Scope: platform.read, admin. Contract: declared_dynamic. List Network Issues
Read. Scope: platform.read, admin. Contract: route_inferred. Lookup Client Full
Write. Scope: platform.write, admin. Contract: route_inferred. Mark Feedback Read
Write. Scope: platform.write, admin. Contract: route_inferred. Marketplace Local Install
Write. Scope: platform.write, admin. Contract: route_inferred. Marketplace Local Uninstall
Read. Scope: platform.read, admin. Contract: declared_dynamic. Marketplace Session Get
Write. Scope: platform.write, admin. Contract: route_inferred. Marketplace Session Set
Read. Scope: platform.read, admin. Contract: route_inferred. Media Ready
Write. Scope: platform.write, admin. Contract: route_inferred. Message Contact Locale
Write. Scope: platform.write, admin. Contract: route_inferred. Message Outbound Convert
Write. Scope: platform.write, admin. Contract: route_inferred. Message Translate
Write. Scope: platform.write, admin. Contract: route_inferred. Message Translation Delete
Write. Scope: platform.write, admin. Contract: route_inferred. Message Translation Save
Write. Scope: platform.write, admin. Contract: declared_dynamic. Meta Channels Disconnect
Write. Scope: platform.write, admin. Contract: route_inferred. Meta Channels Switch Page
Read. Scope: platform.read, admin. Contract: declared_dynamic. Observe
Read. Scope: platform.read, admin. Contract: declared_dynamic. Onboarding Action
Read. Scope: platform.read, admin. Contract: declared_dynamic. Onboarding Readiness
Read. Scope: platform.read, admin. Contract: declared_dynamic. Open Network Issue
Read. Scope: platform.read, admin. Contract: route_inferred. Open Ticket
Write. Scope: platform.write, admin. Contract: route_inferred. Operator Text Translate
Read. Scope: platform.read, admin. Contract: declared_dynamic. Download a full backup in one request (retired)
Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Import
Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Import Start
Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Job Start
Write. Scope: platform.write, admin. Contract: route_inferred. Opsiq Backup Job Status
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Campaign Delete
Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Campaign List
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Campaign Save
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Campaign Send
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Compose Send
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Draft Delete
Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Draft List
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Draft Save
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Messages Delete
Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Replies List
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Ai
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Mark
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Pref
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Send
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Reply Thread
Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Send Detail
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Send Retry
Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Sends List
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Template Delete
Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Template List
Read. Scope: platform.read, admin. Contract: route_inferred. Outreach Template Preview
Write. Scope: platform.write, admin. Contract: route_inferred. Outreach Template Save
Read. Scope: platform.read, admin. Contract: declared_dynamic. Overview
Read. Scope: platform.read, admin. Contract: route_inferred. Overview Hub View
Read. Scope: platform.read, admin. Contract: declared_dynamic. Overview Intelligence Graph
Read. Scope: platform.read, admin. Contract: route_inferred. Pages
Read. Scope: platform.read, admin. Contract: route_inferred. Paths Data
Read. Scope: platform.read, admin. Contract: declared_dynamic. Pause
Write. Scope: platform.write, admin. Contract: declared_dynamic. Profile Change Password
Read. Scope: platform.read, admin. Contract: route_inferred. Profile Get
Write. Scope: platform.write, admin. Contract: route_inferred. Profile Reward Claim
Write. Scope: platform.write, admin. Contract: route_inferred. Profile Reward Claim Cancel
Write. Scope: platform.write, admin. Contract: declared_dynamic. Profile Save
Write. Scope: platform.write, admin. Contract: route_inferred. Profile Session Revoke
Read. Scope: platform.read, admin. Contract: declared_dynamic. Profile Sessions List
Write. Scope: platform.write, admin. Contract: declared_dynamic. Profile Sessions Revoke Others
Write. Scope: platform.write, admin. Contract: route_inferred. Profile Team Dispute File
Write. Scope: admin. Contract: route_inferred. Purge
Write. Scope: admin. Contract: route_inferred. Purge All
Read. Scope: platform.read, admin. Contract: route_inferred. Realtime
Write. Scope: platform.write, admin. Contract: route_inferred. Realtime Test
Read. Scope: platform.read, admin. Contract: declared_dynamic. Resume
Read. Scope: platform.read, admin. Contract: route_inferred. Retention Data
Read. Scope: admin. Contract: source_inferred. List every registered OpsIQ operation
Read. Scope: admin. Contract: explicit. Execute a registered read operation Required fields: route.
Write. Scope: admin. Contract: explicit. Execute a registered write operation Required fields: route, idempotency_key. Retry-safe with idempotency_key.
Write. Scope: platform.write, admin. Contract: route_inferred. Run Ai Analysis
Write. Scope: platform.write, admin. Contract: route_inferred. Save Admin Chat History
Write. Scope: platform.write, admin. Contract: declared_dynamic. Save Pwa Chat Prefs
Write. Scope: platform.write, admin. Contract: route_inferred. Save Survey Config
Write. Scope: platform.write, admin. Contract: declared_dynamic. Save Widget Advanced
Read. Scope: platform.read, admin. Contract: route_inferred. Scim Token Issue
Read. Scope: platform.read, admin. Contract: declared_dynamic. Scim Token List
Write. Scope: platform.write, admin. Contract: route_inferred. Scim Token Revoke
Write. Scope: platform.write, admin. Contract: route_inferred. Segment Delete
Read. Scope: platform.read, admin. Contract: route_inferred. Segment List
Read. Scope: platform.read, admin. Contract: route_inferred. Segment Members
Read. Scope: platform.read, admin. Contract: route_inferred. Segment Preview
Write. Scope: platform.write, admin. Contract: route_inferred. Segment Save
Write. Scope: platform.write, admin. Contract: route_inferred. Segment Suggestion Accept
Write. Scope: platform.write, admin. Contract: route_inferred. Segment Suggestion Dismiss
Read. Scope: platform.read, admin. Contract: route_inferred. Segment Suggestion List
Write. Scope: platform.write, admin. Contract: route_inferred. Send Campaign
Write. Scope: platform.write, admin. Contract: route_inferred. Send Client Email
Write. Scope: platform.write, admin. Contract: route_inferred. Send Ticket Reply
Read. Scope: platform.read, admin. Contract: declared_dynamic. Service Studio Get
Write. Scope: platform.write, admin. Contract: route_inferred. Set Active Site
Read. Scope: platform.read, admin. Contract: declared_dynamic. Silence
Write. Scope: platform.write, admin. Contract: route_inferred. Site Set Group
Write. Scope: platform.write, admin. Contract: route_inferred. Sites Add
Write. Scope: platform.write, admin. Contract: route_inferred. Sites Edit
Write. Scope: platform.write, admin. Contract: route_inferred. Sites List
Write. Scope: platform.write, admin. Contract: route_inferred. Sites Picker
Write. Scope: platform.write, admin. Contract: route_inferred. Sites Regenerate Secret
Write. Scope: platform.write, admin. Contract: route_inferred. Sites Remove
Read. Scope: platform.read, admin. Contract: declared_dynamic. Stats
Write. Scope: platform.write, admin. Contract: declared_dynamic. Stepup Verify
Write. Scope: platform.write, admin. Contract: route_inferred. Submit Agent Ai Feedback
Write. Scope: platform.write, admin. Contract: route_inferred. Submit Triage Feedback
Read. Scope: platform.read, admin. Contract: declared_dynamic. Takeover
Read. Scope: platform.read, admin. Contract: route_inferred. Terminate
Read. Scope: platform.read, admin. Contract: route_inferred. Test Geoip
Read. Scope: platform.read, admin. Contract: route_inferred. Top Pages
Write. Scope: platform.write, admin. Contract: route_inferred. Train Client Chat Knowledge
Read. Scope: platform.read, admin. Contract: declared_dynamic. Triggers
Write. Scope: platform.write, admin. Contract: declared_dynamic. Trust Evidence Report
Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Add
Read. Scope: platform.read, admin. Contract: declared_dynamic. Turn Pool List
Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Pick Test
Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Remove
Write. Scope: platform.write, admin. Contract: route_inferred. Turn Pool Update
Write. Scope: platform.write, admin. Contract: route_inferred. Update Lead Status
Write. Scope: platform.write, admin. Contract: route_inferred. Wa Embedded Signup Exchange
Read. Scope: platform.read, admin. Contract: declared_dynamic. Warehouse Export Run
Read. Scope: platform.read, admin. Contract: declared_dynamic. Warehouse Exports List
Read. Scope: platform.read, admin. Contract: route_inferred. Webhook Deliveries List
Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Endpoint Delete
Read. Scope: platform.read, admin. Contract: declared_dynamic. Webhook Endpoint List
Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Endpoint Save
Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Endpoint Test
Write. Scope: platform.write, admin. Contract: route_inferred. Webhook Redeliver
Read. Scope: platform.read, admin. Contract: route_inferred. Weekly Digest View
Read. Scope: platform.read, admin. Contract: declared_dynamic. Whmcs Op Dispatch
Write. Scope: platform.write, admin. Contract: route_inferred. Workspace Custom Domain Remove
Write. Scope: platform.write, admin. Contract: route_inferred. Workspace Custom Domain Set
Write. Scope: platform.write, admin. Contract: declared_dynamic. Writing Json Knowledge Clear
Read. Scope: platform.read, admin. Contract: declared_dynamic. Writing Json Knowledge Count
Write. Scope: platform.write, admin. Contract: route_inferred. Writing Json Knowledge Import
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Accessibility Evidence Save
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Domain Add
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Subdomain Allocate
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Analytics Breakdown
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Analytics Load
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Apply Kit
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Apply Theme
Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design Approval
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Approve
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Ask
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Audience Delete
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Audience Explain
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Audience List
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Audience Preview
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Audience Save
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Brand Generate
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Brand Import
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Design Cancel Schedule
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Certify
Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Host Check
Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Subdomain Check
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Comment Add
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Comment Resolve
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Component Package Inspect
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Component Package Install
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Component Validate
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Handoff Config
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Data Resolve
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Delete Theme
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Developer Contract
Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Discovery Preview
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Discovery Save
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Load
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Save
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Experiment Control
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Experiment Results
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Experiment Save
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Experiments List
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Form Archive
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Form Catalog
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Create
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Delete
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Duplicate
Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Form Evaluate
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Group Apply
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Group Delete
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Group Save
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Publish
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Form Restore
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Save
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Template
Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Form Test
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Form Version Restore
Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design History
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Identity Discover
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Identity Load
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Identity Save
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Activate
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Install
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Kill Switch
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Integration List
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Integration Policy
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Integration Policy Save
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Preflight
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Revise
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Rollback
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Integration Transition
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Archive
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Journey Catalog
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Delete
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Duplicate
Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Studio Journey Evaluate
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Instantiate
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Restore
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Journey Save
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Category Delete
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Category Reorder
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Kb Category Save
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Governance
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Kb Governance Save
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Languages
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Languages Save
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Parity
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Search Tuning
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Kb Search Tuning Save
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Kb Tree
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Knowledge Summary
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Domain List
Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Analytics Load
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Design Load
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Form Load
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Lock
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Apply
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Approve
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Migration List
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Reconcile
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Migration Report
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Rollback
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Rollout
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Migration Start
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Add
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Delete
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Duplicate
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Move
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Node Update
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Operations Control
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Operations Feed
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Operations Record
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Operations Summary
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Org Context
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Org Member Save
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Org Members
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Org Requests
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Archive
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Create
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Delete
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Duplicate
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Restore
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Page Update
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Accept
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Capture
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Compare
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Parity Create
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Parity List
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Personalization Delete
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Personalization List
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Personalization Save
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Presence
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Preview
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Preview Catalog
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Publish
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Quality
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Redirect Delete
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Redirect Save
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Release Diff
Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design Release Evidence
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Release History
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Publish
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Rollback
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Schedule
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Domain Remove
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Request Changes
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Restore Field
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Restore Published
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Design Revert
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Review
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Review Link
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Rollback
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Save
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Form Save
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Save Theme
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Saved Section Delete
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Saved Section Instantiate
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Saved Section Save
Read. Scope: portal_studio.read, admin. Contract: route_inferred. Portal Design Schedule
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Schedule Cancel
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Scim Config
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Archive
Read. Scope: portal_studio.read, admin. Contract: declared_dynamic. Portal Studio Service Catalog
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Duplicate
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Reorder
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Restore
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Save
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Studio Service Template
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Sign In Flow Save
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Design Signin Methods
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Handoff Test Link
Write. Scope: portal_studio.write, admin. Contract: declared_dynamic. Portal Studio Unlock
Write. Scope: portal_studio.write, admin. Contract: route_inferred. Portal Image Upload
Write. Scope: sales.write, admin. Contract: route_inferred. Sales Ai Insight
Write. Scope: sales.write, analytics.write, admin. Contract: route_inferred. Analyze sales with AI
Write. Scope: sales.write, admin. Contract: route_inferred. Sales Chart
Read. Scope: sales.read, analytics.read, admin. Contract: route_inferred. Compare sales periods
Read. Scope: sales.read, admin. Contract: route_inferred. Sales Compare
Write. Scope: sales.write, admin. Contract: route_inferred. Conversion Goal Delete
Read. Scope: sales.read, admin. Contract: route_inferred. Conversion Goal List
Write. Scope: sales.write, admin. Contract: route_inferred. Conversion Goal Save
Read. Scope: sales.read, analytics.read, admin. Contract: route_inferred. List sales and conversions
Read. Scope: sales.read, admin. Contract: route_inferred. Conversion List
Write. Scope: sales.write, admin. Contract: route_inferred. Conversion Record
Read. Scope: sales.read, analytics.read, admin. Contract: declared_dynamic. Read sales statistics
Read. Scope: sales.read, admin. Contract: declared_dynamic. Sales Stats
Read. Scope: sales.read, admin. Contract: route_inferred. Sales Table
Write. Scope: security.write, admin. Contract: route_inferred. Security Ai Analyze
Write. Scope: security.write, admin. Contract: route_inferred. Security Ai Ask
Read. Scope: security.read, admin. Contract: declared_dynamic. Security Ai Briefs
Read. Scope: security.read, admin. Contract: route_inferred. Security Ai Chain Explain
Write. Scope: security.write, admin. Contract: route_inferred. Security Ai Incident Action
Read. Scope: security.read, admin. Contract: route_inferred. Security Ai Incidents
Read. Scope: security.read, admin. Contract: route_inferred. Security Ai Js Triage
Read. Scope: security.read, admin. Contract: declared_dynamic. Security Ai Policies
Write. Scope: security.write, admin. Contract: route_inferred. Security Ai Policy Action
Read. Scope: security.read, admin. Contract: route_inferred. Security Ai Verdicts
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.
Read. Scope: security.read, admin. Contract: explicit. List the current ticket spam rules
Write. Scope: security.write, admin. Contract: declared_dynamic. Security Chain Reanchor
Read. Scope: security.read, admin. Contract: source_inferred. Check an IP or email against the platform blocklists and Security AI verdicts
Write. Scope: security.write, admin. Contract: route_inferred. Block Ip
Write. Scope: security.write, admin. Contract: route_inferred. Unblock Ip
Write. Scope: security.write, admin. Contract: route_inferred. Access Log List
Read. Scope: security.read, admin. Contract: declared_dynamic. Security Overview Chains
Read. Scope: security.read, admin. Contract: declared_dynamic. Security Overview Data
Write. Scope: security.write, admin. Contract: source_inferred. Report abuse a connector observed (spam, login attack, scan, fraud) Retry-safe with idempotency_key.
Write. Scope: security.write, admin. Contract: route_inferred. Block Visitor
Read. Scope: sessions.read, admin. Contract: route_inferred. Session Detail
Read. Scope: sessions.read, analytics.read, admin. Contract: route_inferred. Get a session journey Required fields: session_id.
Read. Scope: sessions.read, analytics.read, admin. Contract: route_inferred. List sessions
Read. Scope: sessions.read, admin. Contract: route_inferred. Sessions Merged
Read. Scope: sessions.read, admin. Contract: route_inferred. Sessions Table
Write. Scope: settings.write, admin. Contract: declared_dynamic. Ai Eval Watchtower Config
Read. Scope: settings.read, admin. Contract: route_inferred. Get Client Chat Settings
Read. Scope: settings.read, admin. Contract: route_inferred. Get Settings
Write. Scope: admin. Contract: route_inferred. Opsiq Branding Clear
Write. Scope: admin. Contract: route_inferred. Opsiq Branding Upload
Read. Scope: settings.read, admin. Contract: declared_dynamic. Privacy Settings Get
Write. Scope: settings.write, admin. Contract: route_inferred. Privacy Settings Save
Write. Scope: settings.write, admin. Contract: route_inferred. Save Ai Settings
Write. Scope: settings.write, admin. Contract: declared_dynamic. Save Chat Widget Settings
Write. Scope: settings.write, admin. Contract: route_inferred. Save Client Chat Settings
Write. Scope: settings.write, admin. Contract: route_inferred. Save Settings
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Action Audit Chain
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Action Execute
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Action Preview
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Action Token
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Auto Bg
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Auto Bg Stop
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Auto Step
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Chat
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Conn Delete
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Conn Get
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Conn Save
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Conn Test
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Coverage
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Events
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Apply
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Finalize
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Live Set
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Preview
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Rollback
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Start
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Hosted Verify
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Delete
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Finalize
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Rollback
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Start
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Status
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Run Verify
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Runs List
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Set Mode
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Status
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Step Apply
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Step Skip
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Agent Turn Status
Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Ai Activity
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Alert Enrich
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Alerts
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Analyst
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Analyst Ask
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Analyst Email
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Analyst Run
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Badges
Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Ai Badges Portfolio
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Badges Preview
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Bl Plan
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Bl Plan Run
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Brief
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Brief Run
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Comp Analyse
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Comp Analyse Run
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Content Get
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Content List
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Content Publish
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Content Write
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Daily Digest
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Discover
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Apply
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Apply Bulk
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Dismiss
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Dismiss Bulk
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Generate
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix Generate All
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Fix List
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Kw Coach
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Kw Coach Run
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Overview
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Page Audit
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Page Audit Run
Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Ai Portfolio
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Ai Portfolio History
Write. Scope: site_intelligence.write, admin. Contract: declared_dynamic. Si Ai Portfolio Run
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Probe
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Prompt Add
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Prompt History
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Prompt Remove
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Prompts
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Readiness
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ai Ready
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Alert Resolve
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Alerts
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List Site Intelligence alerts
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Resolve a Site Intelligence alert Required fields: alert_id.
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Analyze
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ask
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Audit Hint
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Backlink Disavow
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Backlinks
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List backlinks
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Backlinks Refresh
Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Billing Overview
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Brand Get
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Brand Radar
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Brand Save
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Cannibalisation
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Compare
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Competitor Add
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Competitor Refresh
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Competitor Remove
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Competitors
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List competitors
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Content Brief
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Content Decay
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Content Draft
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Crawl Budget
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Crawl List
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Crawl Status
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List Site Intelligence crawls
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Get crawl status
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Read the Site Intelligence dashboard
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Dashboard
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Dashboard Save
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Backfill
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Compare
Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Diag Portfolio
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Recs Regen
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds Eval
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds History
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds Profile
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diag Thresholds Save
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Diagnostics
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Exec Report
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Export
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 Connect
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 List Properties
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 Map
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 Status
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Ga4 Sync
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Draft Approve
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Draft Dismiss
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Draft Sync
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Drafts
Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Gbp Locations
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Map
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Post Draft
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Post Publish
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Qa
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Qa Approve
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Qa Dismiss
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Qa Sync
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Site Prefs
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gbp Sync
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Google Truth Schedule Save
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Growth
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Connect
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc List Properties
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Map
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Opportunities
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Status
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Gsc Sync
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Image Audit
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Internal Links
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Issue History
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Issues
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List Site Intelligence issues
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Keyword Add
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Keyword Remove
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Keyword Research
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Keywords
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List tracked keywords
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Local
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Local Grid
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Local Grid Scan
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Log Ingest
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Log Summary
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Metadata Audit
Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Overview
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Page
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Page Experience
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Page Optimize
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. Si Pages
Read. Scope: site_intelligence.read, admin. Contract: route_inferred. List Site Intelligence pages
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Pagespeed Bridge Status
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Portfolio Export
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Provider Health
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Rank Check
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Rec Action
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Recommendations
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Redirect Audit
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Report
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Report Generate
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Reports
Read. Scope: site_intelligence.read, admin. Contract: source_inferred. Site Intelligence Reports List
Write. Scope: site_intelligence.write, admin. Contract: declared_dynamic. Si Reset Google Oauth
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Revenue
Read. Scope: site_intelligence.read, admin. Contract: declared_dynamic. Si Revenue Portfolio
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Save Shared Google Oauth
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Start a Site Intelligence analysis
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schedule Delete
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schedule Run Now
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schedule Save
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schedules List
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Schema Audit
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Server Engineer
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Settings Save
Read. Scope: site_intelligence.read, admin. Contract: explicit. List Site Intelligence monitored sites
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed Progress
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed Run
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2 Build Task
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2 Collect
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2 Read
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Speed V2 Run
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Start Crawl
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Approve
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Assign
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Bulk Apply
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Bulk Assign
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Bulk Deadline
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Bulk Dismiss
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Deadline
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Note
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Proof
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Reject
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Task Review
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Topical Map
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Webhook Delete
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Webhook Save
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Webhooks List
Write. Scope: site_intelligence.write, admin. Contract: route_inferred. Si Workflow
Write. Scope: status.write, admin. Contract: declared_dynamic. Status Component Save
Write. Scope: status.write, admin. Contract: explicit. Create or update a public status component Required fields: name. Retry-safe with idempotency_key.
Write. Scope: status.write, admin. Contract: declared_dynamic. Status Incident Create
Read. Scope: status.read, admin. Contract: route_inferred. Status Incident Resolve
Write. Scope: status.write, admin. Contract: explicit. Create a status-page incident Required fields: title. Retry-safe with idempotency_key.
Write. Scope: status.write, admin. Contract: source_inferred. Status Incidents Resolve Retry-safe with idempotency_key.
Read. Scope: surveys.read, admin. Contract: source_inferred. Surveys Analytics Get
Read. Scope: surveys.read, admin. Contract: explicit. List survey audiences
Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Audiences Materialize Retry-safe with idempotency_key.
Write. Scope: surveys.write, admin. Contract: explicit. Create or update a survey campaign Required fields: deployment_id. Retry-safe with idempotency_key.
Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Campaigns Launch Retry-safe with idempotency_key.
Read. Scope: surveys.read, admin. Contract: explicit. List survey campaigns
Read. Scope: surveys.read, admin. Contract: explicit. List survey deployments
Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Deployments Set Status Retry-safe with idempotency_key.
Read. Scope: surveys.read, admin. Contract: source_inferred. Surveys Get
Write. Scope: surveys.write, admin. Contract: explicit. Create and run a survey import Required fields: kind. Retry-safe with idempotency_key.
Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Imports Process Retry-safe with idempotency_key.
Read. Scope: surveys.read, admin. Contract: explicit. List survey invitations
Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Links Create Retry-safe with idempotency_key.
Read. Scope: surveys.read, admin. Contract: explicit. List survey definitions
Read. Scope: surveys.read, admin. Contract: source_inferred. Surveys Responses Get
Read. Scope: surveys.read, admin. Contract: explicit. List survey responses
Read. Scope: surveys.read, admin. Contract: explicit. List survey trigger sets
Read. Scope: surveys.read, admin. Contract: explicit. List supported question types and Studio templates
Read. Scope: surveys.read, admin. Contract: source_inferred. Surveys Versions List
Write. Scope: surveys.write, admin. Contract: source_inferred. Surveys Webhooks Delete Retry-safe with idempotency_key.
Read. Scope: surveys.read, admin. Contract: explicit. List survey webhook subscriptions
Write. Scope: surveys.write, admin. Contract: explicit. Create or update a survey webhook subscription Required fields: url. Retry-safe with idempotency_key.
Write. Scope: team.write, admin. Contract: route_inferred. Admin Users Delete
Write. Scope: team.write, admin. Contract: route_inferred. Departments Delete
Read. Scope: team.read, admin. Contract: route_inferred. Admin Users List
Read. Scope: team.read, admin. Contract: declared_dynamic. Departments List
Write. Scope: admin. Contract: route_inferred. Team Perf Activity
Write. Scope: admin. Contract: route_inferred. Team Perf Ai Compare
Write. Scope: admin. Contract: route_inferred. Team Perf Ai Review
Write. Scope: admin. Contract: route_inferred. Team Perf Availability
Write. Scope: admin. Contract: route_inferred. Team Perf Award Finalize
Read. Scope: team.read, admin. Contract: route_inferred. Team Perf Award History
Write. Scope: admin. Contract: route_inferred. Team Perf Award Void
Write. Scope: admin. Contract: route_inferred. Team Perf Claim Pay
Write. Scope: admin. Contract: route_inferred. Team Perf Claim Recover
Write. Scope: admin. Contract: route_inferred. Team Perf Claim Reject
Write. Scope: admin. Contract: route_inferred. Team Perf Clear
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Action Item Add
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Action Item Complete
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Evidence Pin
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Evidence Unpin
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Session
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Session Create
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Session Update
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Sessions
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Coaching Status
Write. Scope: admin. Contract: route_inferred. Team Perf Data
Write. Scope: admin. Contract: route_inferred. Team Perf Heatmap
Write. Scope: admin. Contract: route_inferred. Team Perf History
Write. Scope: admin. Contract: route_inferred. Team Perf Pay All Claims
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Calibration Record
Write. Scope: admin. Contract: route_inferred. Team Perf Qa Dispute Resolve
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Disputes
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Evaluation Submit
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Overview
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Scorecard Publish
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Qa Scorecard Save
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Quest Record
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Quest Save
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Quest Status
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Quests
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Recognition
Write. Scope: admin. Contract: route_inferred. Team Perf Recognition Settings Save
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Recognition Streak History
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Recognition Streaks Record
Write. Scope: admin. Contract: route_inferred. Team Perf Reward Budget Authorize
Write. Scope: admin. Contract: route_inferred. Team Perf Reward Claims
Write. Scope: admin. Contract: route_inferred. Team Perf Reward Pay
Write. Scope: admin. Contract: route_inferred. Team Perf Reward Payouts
Write. Scope: admin. Contract: route_inferred. Team Perf Reward Period Finalize
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Reward Period History
Write. Scope: team.write, admin. Contract: route_inferred. Team Perf Reward Period Preview
Write. Scope: admin. Contract: route_inferred. Team Perf Reward Period Reverse
Write. Scope: admin. Contract: route_inferred. Team Perf Reward Period Void
Write. Scope: admin. Contract: route_inferred. Team Perf Reward Save
Write. Scope: admin. Contract: route_inferred. Team Perf Reward State
Write. Scope: admin. Contract: route_inferred. Team Perf Trends
Write. Scope: admin. Contract: route_inferred. Team Perf V2 Data
Write. Scope: admin. Contract: route_inferred. Team Perf V2 Export
Write. Scope: admin. Contract: route_inferred. Team Perf V2 Live
Write. Scope: admin. Contract: route_inferred. Team Perf V2 Reward Sheet
Write. Scope: admin. Contract: route_inferred. Team Perf V2 Settings
Write. Scope: admin. Contract: route_inferred. Team Perf V2 Settings Save
Write. Scope: team.write, admin. Contract: route_inferred. Admin Users Save
Write. Scope: team.write, admin. Contract: route_inferred. Departments Save
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Ai Summary
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Analytics
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Approval Decide
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Approval Request
Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket Approvals Pending
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Assignment Rule Delete
Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket Assignment Rule List
Write. Scope: tickets.write, admin. Contract: declared_dynamic. Ticket Assignment Rule Save
Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Assignment Rules Delete Retry-safe with idempotency_key.
Write. Scope: tickets.write, admin. Contract: explicit. Create or update a ticket assignment rule Required fields: name. Retry-safe with idempotency_key.
Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Bulk Retry-safe with idempotency_key.
Write. Scope: tickets.write, admin. Contract: route_inferred. Tickets Bulk
Write. Scope: tickets.write, admin. Contract: route_inferred. Sla Calendar Delete
Write. Scope: tickets.write, admin. Contract: declared_dynamic. Sla Calendar Save
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Claim
Read. Scope: tickets.read, admin. Contract: explicit. Get the CSAT response for one ticket Required fields: ticket_id.
Read. Scope: tickets.read, admin. Contract: explicit. List ticket CSAT responses in the bound workspace
Read. Scope: tickets.read, admin. Contract: explicit. CSAT metrics for a period (the tickets dashboard numbers)
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Embed Load
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Embed Save
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Embed Secret
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Field Save
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Follower Add
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Follower Remove
Read. Scope: tickets.read, admin. Contract: source_inferred. Tickets Get
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Kb Deflection
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Kb Draft
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Kb Save
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Kb Version Restore
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Kb Versions
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Link Add
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Link Remove
Read. Scope: tickets.read, admin. Contract: source_inferred. Tickets List
Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Open Retry-safe with idempotency_key.
Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Open Guest Retry-safe with idempotency_key.
Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket Ops Summary
Write. Scope: tickets.write, admin. Contract: route_inferred. Sla Policy Delete
Write. Scope: tickets.write, admin. Contract: declared_dynamic. Sla Policy Save
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Presence Leave
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Presence Ping
Write. Scope: tickets.write, admin. Contract: declared_dynamic. Ticket Quick Replies
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Quick Reply Save
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Relations Get
Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Reply Retry-safe with idempotency_key.
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Delete
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Edit
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Outbound Convert
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Translate
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Translation Delete
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Reply Translation Save
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Rule Compose
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Side Ai Draft
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Side Assign Department
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Side Create
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Side List
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Side Mention
Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket Side Recipients
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Side Reply
Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Sla Delete Retry-safe with idempotency_key.
Write. Scope: tickets.write, admin. Contract: explicit. Create or update an SLA policy Required fields: name. Retry-safe with idempotency_key.
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Split
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Split Candidates
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Tag Add
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Tag List
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Tag Remove
Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Tags Add Retry-safe with idempotency_key.
Read. Scope: tickets.read, admin. Contract: source_inferred. Tickets Tags List
Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Tags Remove Retry-safe with idempotency_key.
Write. Scope: tickets.write, admin. Contract: source_inferred. Update a ticket status, priority, subject, department or assignment Retry-safe with idempotency_key.
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket View Delete
Read. Scope: tickets.read, admin. Contract: declared_dynamic. Ticket View List
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket View Save
Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Views Delete Retry-safe with idempotency_key.
Write. Scope: tickets.write, admin. Contract: source_inferred. Tickets Views Save Retry-safe with idempotency_key.
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Worklog Add
Write. Scope: tickets.write, admin. Contract: route_inferred. Ticket Worklog Delete
Read. Scope: tickets.read, admin. Contract: route_inferred. Ticket Worklog List
Write. Scope: todos.write, admin. Contract: source_inferred. Todos Add Retry-safe with idempotency_key.
Write. Scope: visitors.write, security.write, admin. Contract: route_inferred. Block a visitor Required fields: visitor_id.
Read. Scope: visitors.read, analytics.read, admin. Contract: route_inferred. List visitors
Read. Scope: visitors.read, admin. Contract: route_inferred. Visitors Table
Read. Scope: webhooks.read, crm.read, admin. Contract: explicit. List outbound webhook events and their payloads
Write. Scope: writing. Contract: source_inferred. Writing Analyze Retry-safe with idempotency_key.
Write. Scope: writing. Contract: source_inferred. Writing Compose Retry-safe with idempotency_key.
Write. Scope: writing. Contract: source_inferred. Writing Reply Retry-safe with idempotency_key.
Write. Scope: writing. Contract: source_inferred. Writing Rewrite Retry-safe with idempotency_key.
Write. Scope: writing. Contract: source_inferred. Writing Summarize Retry-safe with idempotency_key.
Write. Scope: writing. Contract: source_inferred. Writing Translate Retry-safe with idempotency_key.
はい。生成されたOpenAPI 3.0 ドキュメントは /api/v1/openapi.php, 生成されたポストマンコレクションは、/api/v1/postman.php, 人間が読める開発者の文書はあります /api/docs/.
リクエストボディにサイトキーを送信して、ワークスペースを選択します。 1つのワークスペースで発行されたキーはピン留めされます。管理者コンテキストを持つキーは、参照する任意のワークスペースを選択することができ、それがないために拒否されます。
読み込みとしてマークされているアクション。 read_only にキーのパーミッションモードを設定し、全ての書き込みは read_Only_key で拒否されるため、レポート統合は間違いによって変更できません。
キーはワークスペースにスコープ付けされます。他のワークスペースのレコードは、許可エラーではなくno_foundを返すので、 API 何かが他の場所で存在するかどうかは確認しません。
すべてのコネクタおよび統合のための1つのセキュリティ契約: 尋ねて下さい OpsIQ それが知っているものについて IP または送信者、および独自のシステムが参照する悪用を返送します。
OpsIQ 既にそれ自身を守っています: IP ファイアウォールブロック攻撃者、チケットパイプラインフィルタスパム、セキュリティAIは犯罪者を分類し、ブロックルールを提案します。 セキュリティ API 他のシステムにそのインテリジェンスを開きます。 請求プラットフォーム、クライアントポータル、またはカスタムアプリは、それを信頼する前に訪問者をチェックし、インストール全体がすべての表面から学びますので、それが観察したことを報告することができます。
security. check は、ファイアウォールの状態に応答し、送信者と一致するスパムルール、および IP_ のキャッシュされた AI の評論。 1 つの呼び出し、1 つの連結意見。
Security.report は、セキュリティイベントとして観測を記録し、Security AI がクラスファイトする IP すぐに、評決が高リスクを回復したときに管理者に警告します。 繰り返したレポートクラスターはインシデントに、正確に攻撃のように OpsIQ 直接参照してください。
security. blocklist. add とsecurity. blockList. list は、チケットページが使用するスパムルールを読み取り、書き込みます。そのため、1つのシステムにブロックされた送信者はどこにでもブロックされます。
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"
}セキュリティ. check と Security. blocklist. list のために必要な。レポート統合を安全に行う。
セキュリティ. report と Security. blocklist. add の必要。ルールやレポートをフィードしたいシステムだけにのみ有効です。
ブロックリストされた送信機は、チケットを読み取り、復元できるスパムビューにまだ埋め込まれています。
サーバの所有 IP アドレスをブロック、ブロックリスト、またはこのサイトを通じて報告することはできません。API なので、不正設定された統合はプラットフォームをダウンさせることができません。
アウトバウンドの同期は既に自動です:ブロックするとき IP、接続されたプラットホームはコネクターの保証同期を通して語られます。保証 API インバウンド半数です。 コネクタまたはカスタムコードを、セキュリティスコープのキーで4つのアクションでポイントします。
1店舗。 チケットページブロック送信者制御、設定のスパムAI、およびこれ API 同じブロックリストに対してすべての作業は、まさに1つの場所が見えるようにします。
サーバーやウェブサイトからカスタムイベントを送信します。OpsIQ 分析、実験、CRMトリガー、およびWebhook条件。
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> 第三者システムでは、イベントをプッシュする。
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"
}注文完了は「オーダー完了」ではありません。
"button. clicked" は "buttton. Click" ではなく、
"user_action" ではなく、pricing. plan_selected" を「優先します。
データフローを理解することで、統合をデバッグし、パフォーマンスの最適化に役立ちます。
ザ・オブ・ザ・JavaScript ウィジェットは、ページビューを送信します。, クリックします。, そしてチャット メッセージに /beacon.php.
サイトの_key、イベントの種類、顧客、プロパティーで opsiq_events に保存されたイベント。
セッションビルダーグループページビューをセッション(cron経由)に。
識別されると、匿名のレコードは顧客プロフィールにリンクされます。
コネクターは外部プラットフォームからデータを引き、コネクタキャッシュに格納します。
AIは、訪問者の履歴、顧客プロフィール、コネクタデータ、KB、プロンプトからコンテキストを組み立てます。
社内イベントの火災(ticket. created、chat. message、order. completed)。
ジョブキューを非同期に置いたイベント。
ディスパッチ・サインを解除し、すべての購読されたエンドポイントに送信します。
納期に不備な返品が必須です。
設定は、ワークスペースのコントロールセンターです。下にあるものは、あなたがいるワークスペースにスコープ付けられているので、複数のブランドを異なるアイデンティティ、チャット行動、保持ルールで実行できます。
設定には、約6億個々に個別制御が組み込まれており、4つのメニューでグループ化された11タブを横切って表示します。閲覧する予定はありません。
Ctrl + Kを押します。MacでCmd + Kを押して、設定ページにある場所を選択します。 プレーンな言葉を入力して、[Enter]を押してコントロールに直進します。 小さなタイポを許容し、関連する単語を理解しているので、スケジューラはCronとプライバシーがトラッキング制御を見つけます。 それはあなたのロールが開くことができるだけを示しています。
総合ライセンス
アドミンAIアシスタント、クライアントチャット、OpsIQ ライティングとサポートポータル。
追跡とプライバシー、許可およびセキュリティ。
クロンセットアップ(自ホストのみ)と危険ゾーン。
各タブは、独自の保存ボタンで保存します。 クライアントチャットと OpsIQ ピンを画面に書きます。タブを切り替える前に保存します。変更は実行されません。
アクティブなタブはページアドレスに書かれています。そのため、タブはブックマークするか、同僚に送信することができます。
ページの最も重要なカード。AIは、すべての返信、レポート、および日常の簡単な上でこれらの値を読みます。
日頃の報告書や顧客向きの文言で使われます。あなたのウェブサイトのフッターにマッチしましょう。
テーラーズAI分析、リードスコアリング、ブリーフ、アンケートプリセット。Webホスティング、eコマース、SaaS、不動産、代理店、コンサルティング、ヘルスケア、教育、財務または一般ビジネスからお選びいただけます。
自分の選んだことがない人には、その言語が示されています。各エージェントはプロフィールにそれを上書きすることができます。
訪問者自身の言語でサインインページを表示します。誰かがそこに言語を選ぶと、その選択が勝ちます。そしてこれは決してそれを上書きしません。
システム全体が実行されるゾーン: 日付、レポート、スケジュール、および背景のクロン。 顧客ではなく、操作タイムゾーンを使用してください。
GeoLite2-City.mmdb へのフルパス。最初のロードで自動検出 cPanel, Plesk, DirectAdmin, Cloudways, Docker と plain Linux または Windows. GeoLite2-ASN.mmdb を、訪問者のインターネットプロバイダと同じフォルダーに追加します。
GeoLite2 だけ、GeoLite1 と Cloudflare フォールバック、または Cloudflare のみ。Cloudflare モードは、サイトがプロキシされるように要求します Cloudflare, 訪問者の位置のヘッダーは都市および地域細部のために可能にしました。
訪問者セッションが終了する前に、非アクティブ。デフォルト 14400 4時間です。
ライブフィードのリフレッシュ頻度。デフォルト 30 秒数。
訪問者が最後のページロード後にライブとしてカウントする時間。 デフォルト2分。これは、セッションの長さではなく、ライブフィードのドロップオフです。
収集したレコードを削除し、この年齢を過ぎた記録を生成:分析、チャット、チケット、フィードバック、トランザクション、AIテレメトリー、統合ログおよびCRM活動。 0は、すべて永遠に保持します。設定、許可されたコンテンツと同意のレシートは削除されません。
削除された会話の頻度はレコードにどれだけとどまります:フルレコード、会話のない記録、またはスコアだけ。削除は常に受信トレイと訪問者履歴からチャットを非表示にします。保持およびフォアジェック訪問者は、この限り完全に消去されます。
訪問者としてクロールをカウントします。 退去; それは訪問者のカウントを膨脹させ、すべてのレポートをスキュー.
訪問者にサイト全体フィードバックウィジェットを表示します。クライアントチャット、サポートフローのチャットアンケートとは別に分けられます。
各AI表面用のマスタースイッチ。 デフォルトでは、作業スペースごとにオン/保存します。
チケットのカテゴリー、優先順位、および送信ごとに分類し、チケットの一番上にスレッド集計を記述します。
エージェントがチケットリストの行を移動したときに、トリエージタグとツールチップスの概要を表示します。 AI トライエイジが必要です。
チケットの返信ボックスにDraft AIの応答、ウォーマー、ショートワー、より正式でApologeticボタンを追加します。エージェントなしで送信することはありません。
このページでは、すべての管理者ページでコピロを浮かび上しているマルウェアです。顧客がどの様なものか、請求書やチケットが開いているのかを知ることができます。
初日はコピロが急なチケットを提示し、返信や待ち合わせチャットを提示します。日曜日は週にレビューされます。
管理者の合計すべてのお金は、表示のためにこの通貨に変換されます。 コネクタは、独自のソース通貨を保存します。 コネクターごとに設定します。
無料のパブリックフィードから6時間ごとにレートをリフレッシュします。 API キーはありません。 フィードをオーバーライドする手動料金を追加できます。 自動同期オフでは、手動のレートのない通貨は変換されません。
発送。販売とコンバージョンページ、ダッシュボードの収益カード、ライブインテリジェンスフィードを明らかにする上でそれをオフにします。オフすると、すべての価格面が隠され、セールスページはメニューを残します。
ティーチェス OpsIQ あなたの言葉遣い:更新を行うかどうか、更新のための単語、販売するもの、そしてバイヤーが呼び出されるもの。
2つのアップロード、ライト背景(adminサイドバー)とダーク(サインインページ)の1つ。 PNG、JPG、WebPまたはSVGまで 3 MB.
自動導入SEOエージェントが接続する SSH. プライベート、ループバックおよび予約されたアドレスは、デフォルトでアンチSSRF測定としてブロックされます。ローカルサーバーに到達しなければならない自己ホスト型インストールのみを有効にします。
すべての設定をエクスポートし、OpsIQ-所有のテーブルとアップロードされたファイル。 復元は置き換えます OpsIQ 設定とレコードのみ; それは、クライアントに触れることはありません, 請求書, チケット, サービス, ドメイン, 注文や取引.
管理者のサインイン、スタッフアカウント、およびデータ OpsIQ が収集する保護。サポートポータルの顧客サインインは別々に構成されます。
管理者サインインでボットとクレデンシャルの詰め物を止めます。v3(見えない、スコア)またはv2(チェックボックス)を選択し、v3スコアのしきい値を設定し、サイトや秘密鍵を供給します。これらの同じキーはサポートポータルリクエストフォームによって再利用されます。
ウィンドウ内の障害の数、時間数のアドレスをブロックします。ロックされたページメッセージをカスタマイズし、小さな待機画面の気晴らしを示すことができます。
既知の侵害、特権的な詰め物に対するアカウントロックアウト、すべての管理者のための必須2要素、危険な行動の前にパスワード再入力、および新しいデバイスサインインアラートを通知するパスワードの再入力を含むパスワードポリシー。
スタッフは、IDプロバイダを通じてサインインします。発行者 URL、クライアントIDとクライアントシークレットが必要です。自動提案ドメイン、1行につき1つ、最初のサインインで自動的にユーザーを作成します。
話すプロバイダー SAML. OpsIQ ACSの応答を供給します URL そしてSPの実体ID;IdPの実体のID、印を供給します URL、任意印-out URL と X.509 証明書の署名。標準でない属性名でのみ、Email と name 属性フィールドが必要です。
ディレクトリ主導の作成、更新および非アクティブ化 OpsIQ アカウント。OpsIQ 供給する SCIM ベース URL; あなたはここにラベル付きのトークンを生成しますので、残りを破らずに呼び出すことができます。
外部がこのワークスペース・コネクタを呼び出すことができる制限を解除します。 SSH 全般のターゲット制御。
脅威スコアがあなたのしきい値を通過すると、訪問者をブロックします。 0 _はそれを無効にします。 番号を選択する前に1週間のセキュリティ概要ページを参照してください。
ブロックされた訪問者が、テキストや独自のカスタムとして表示するメッセージ HTML ブロック画面。
LCP、INP、CLS を実際のセッションから測定します。
ブラウザ内のカスタムイベントキューと、レトリーでバッチを配信し、モバイル接続が悪いことに対する損失を減らします。
実際のウィジェットは、暗号化トークンを回転させ、追跡データを強制的に拒否することができます。デフォルトではオフにし、認証された変更を有効にしますので、最初にテストしてください。
デフォルトでオフ。 検出とブロックは無関係です。 このカードは、あなたが言われているかどうかを制御します。そしてAIがどれだけ助けるのかを制御します。
マスターカードの切り替え
警告する価値のある波として、短期間で数え切れない記号インが何であるか。
パブリック・アミューズメントフィードに表示される訪問者の脅威スコアを追加します。
タイムリーな稼働時間と TLS の有効期限が切れる前に警告します。
疑わしい活動に説明可能な評論を追加し、関連する攻撃を単一の読み取り可能な事件にグループ化してイベントのストリームではなく、.
自らの行動、事件から学んだことや提案された規則に変える。その提案を見直し、それらに同意するまでは消え去ります。
デイリーは、セキュリティ概要ページを要約し、保護されたものとまだ開いているものを示す週刊のチェックリストを硬化させます。
蓄積ではなく、期限切れに演じるようなブロックルール。
再生のための訪問者セッションを記録します。リプレイライブラリをオフにしても読み込まれないので、その場で離れる費用はかかりません。録音はサンプルとプライバシーマスクされ、Analyticsのセッション再生ページに表示されます。
記録するセッションの共有、シングル録画が実行される時間と、録画回数をどのくらい保存するか。
OpsIQ が収集する可能性があり、各種類のレコードがどれだけ長く生き残るかは?
アドレスは、行ごとに1つ、正確なアドレスやCIDRの範囲を追跡しません。署名された管理者ではなく、そのアドレスですべての人にカバーしているため、独自のチームを分析から守る最もきれいな方法。
ページのパターンは、行ごとに1つ、小惑星でワイルドカードを追跡しません。 例えば /admin/* 訪問者のログから全バックオフィスを保管します。
日々のシステム自動パージ。一般および危険ゾーンパージからのデータ保持設定を分離します。
クエリと応答の短いプレビューを保持する機密テレメトリー。 デフォルト 90 日々。一番の顧客テキストを保持しているので、プライバシーを固めると最初に短くします。
コストレポーティングのトークンは、パーコールトークン数です。 デフォルト 90 日数のみ、メッセージ内容はありません。
タンパー明白な行為およびセキュリティ・ログ。デフォルト 365 日。この最長を維持します。; それはあなたの証拠のトレイルです。
システムヘルスレコード。 デフォルト 30 日 時
AIが答えられない質問のクラスター。 デフォルト 90 日。AIが期限切れになる前に、質問にそれらを通して働きます。
最近のベースラインに対する昨日の毎日の比較、メトリックがあなたのしきい値よりも移動したときに警告します。 デフォルト 35 %. デフォルトでオフします。
セッション、訪問者、ページビュー、および関連するテーブルの夜行ダンプは、選択した形式で数日間保存されます。デフォルトではオフです。
スタッフが管理者内で使用しているフローティングアシスタントで、クライアント、請求書、チケット、サーバー、およびcronログへのライブ読み取りアクセスが可能です。 顧客チャットの1つに面した顧客からの異なるアシスタントです。
管理者ページごとにアシスタントボタンを表示します。 オフは誰にも隠します。
角の位置、パネルの幅(320 にほんご 600 px), 最大高さ (px)400 にほんご 900 px)、角の半径(0にほんご 24)、フォントサイズおよびパネルの後ろに曇ったガラスブラー。
ヘッダーの下のショートカットボタンをワンクリックします。ほとんどのスタッフにとって最速の方法。
答えたモデルや、どのくらいの時間がかかっていたかを表示します。コストをチューニングしながらも使い勝手が良いです。
ユーザー名とメールがこのワークスペースに割り当てられた OpsIQ エージェントにマッチする署名付き管理者のみを表示。所有者は常にパスします。有効化する前に、アクセスボタンをチェックするか、チームをロックすることができます。
パネルが開くとき表示名、ヘッダーの tagline および注文の歓迎メッセージ。
各ショートカットのラベルとアンダーリングプロンプトを編集し、独自の追加やデフォルトへのリセットを行います。 ラベルはスタッフが確認するものです。 プロンプトはAIが受け取るものです。
チップ形状(丸み、四角)、チップカラー、カードテーマ、ランチャーシェイプ(ラウンド、スキュール、スクエア)、ライブプレビュー付き。
アシスタントは、ブラウザセッションで各人の履歴を記憶します。120 メッセージは、自分のデータベースに保存されます。 それをクリアして、新鮮なものを始めるようにします。
チャットウィジェットは、顧客使用量と設定の最大の領域です。 6つのサブタブで、マスタースイッチを使用して保存します。
新規インストールのサブタブを操作: アイデンティティとコピー、外観、行動、サポートフロー、ナレッジトレーニング。 高度なインフラストラクチャであり、待機できます。
ウィジェット名、タグライン、AI名、システムやアイドル通知に使用する名前、およびエージェントの名前が表示される方法。 Agent Name Sourceは、実際の名前、カスタム名、またはチームラベルの間で決定します。
訪問者全員が、識別された訪問者のための2つの挨拶、1。質問は声明よりも多くの会話を始めます。
チャットが開いてしまう前に浮動メッセージは、名前、フォントサイズ、色をつけます。AIはティーザースを書くことができます。生成する回数、訪問数とそれらの間のギャップを示す回数を制御することができます。
完全なスクリプト:名前とメール、確認を求め、人間を要求し、エージェントが利用可能で、作成またはキャンセルされた、手渡の保留。 2つのダース線の周りに折りたたみパネルがあります。
エージェントはチャットを閉じ、訪問者が静かで、AIに戻ってエージェントの手を残しています。解決またはトライアベイドのような内部的な言葉遣いを避けてください。
プレースホルダー、トークツーマンボタンラベル、および提案されたオープニング質問を入力します。 3つの良い提案は記事のページよりも多くのチケットをデフレます。
起動アイコン、オープン時、ランチャーサイズ、人体とAIのための画像のオプションの異なるアイコン。
テーマモード、プレミアムカラープリセット、ブラー強度と不透明度、アニメーション、セパレータラインのトグル、ステータス行を非表示にし、メッセージボックスカードを隠して閉じるボタンを非表示にします。プリセットで開始します。一度に数種類の色を設定できます。
起動、ヘッダー、ヘルプパネル、リンク、ボタン、システム通知とコンポーサーは、それぞれグラデーションの開始色と終了色のカラーです。デフォルトのガラスオプションを使用してこれらを無視し、透明な仕上げを維持します。
パネル、境界線、テキスト、入力エリアおよびすべてのバブルタイプ(visitor、AI、エージェント、タイピング、システム)と提案チップとそのホバー状態をカバーする30回ピッカーの周りに。 単にこのブランドマッチングのために開くし、泡のテキストのコントラストを確認してください。
パネルの幅および高さ、角の半径、壷のサイズ、スクリーンの位置、ランチャーの形、泡様式およびアバターが示すかどうか。電話の幅をテストして下さい。
AI のマスタースイッチ。オフは、すべてのメッセージが人間を待ちますことを意味します。
訪問者が静かに進むと、必要に応じてショート秒メッセージの簡単なフォローアップは、人が1つを送る方法です。 1つのサイレンス、1回のフォローアップで調整され、最初の遅延、後続のマルチプライヤー、プレゼンスウィンドウ、最大シーケンスウィンドウ。 営業時間に限定され、シンプルなおかげで、抑制することができます。
単語によって単語をタイプし、アシスタントの回答が速くなるかどうか、プリセットまたは独自の最小値とミリ秒の最大遅延で。小さな遅延は、即時返信よりも多くの人を読む。
訪問者が自分の読み物を読みながら、各エージェントは独自の言語で読み書きします。
AIが会話を再開する前にエージェントの非アクティブの数分。
ウィジェットが開いてから2秒。 0_ は開かずに。モバイルで侵入し、テストされていない場合は0に残します。
回答を1パスで受け止め、深みのある思考、エージェントの回答のためのオプション別モデル、訪問者に推論を示す、誤訳、長距離会話メモリ、ビジネスへのアシスタント制限、訪問者通貨の価格、およびリンクの表示方法。あなたのビジネスについてのみほとんどすべての人のためにすべきです。
ヒ・アフ・感謝などの挨拶を探し、トークンの返信が最も長くなります。回答の質を実際の質問に変えることなくコストをトリムします。
ウィジェットがどの言語をサポートしているか、訪問者にどのように1つを選ぶのか。
署名付き顧客自身のアカウントからの回答、必要に応じてライブを調べて、必要に応じてのみロード。 すべてのケースで読み取り専用; 負荷時給付通知はコストを削減します。
アシスタントが細部と手を集めた払い戻しリクエストを人へ引き受けます。返金自体は完了しません。
過去の会話を続け、接続されたサイト全体でチャットを継続し、ドラッグ可能なウィンドウをドラッグして、電子メールにゲストを尋ねて、チームをチケットにチャットをオンにします。
絵文字ピッカー、オプションの貼り付けモード、AI画像理解、インラインアイコン、マイク、トークツーエージェントボタン、訪問者音、添付ファイルプレビュー、音声通話ボタン、セッション分離機能付きアタッチメント。 AIイメージの理解は、訪問者がエラースクリーンショットを貼り付けて、有用な回答を得ることができるものです。
訪問者はポップアップを歓迎します, そして、あなたのエージェントのアラート: 受信トレイ音, デスクトップ通知, ホイスパー音, プライベートウィスパーがビープするかどうか, そして受信ボックスの投票間隔.
人が割り当てられたリクエストは、エージェントが応答しなければならない秒で、デクライニングがAIにチャットを返すかどうか、そしてタイムアウトが期限切れになったときにAIが再開するかどうかを尋ねるかどうか。 これをライブまたは人のために尋ねる訪問者を実行する前に設定するのは単に待つだけです。
開会時間、タイムゾーンおよび閉鎖時間のメッセージ。これらの営業時間外ではAIは人間を提供しません。チケットビジネスの営業時間からの別のスケジュール OpsIQ ライティング。
誰かが既にキューに入れられたとき、そして繰り返す前にどれくらいの期間を経るか、新しいメッセージに最初の返信が始まります。
チャットの代わりに連絡先フォームを表示します。
AIチケットの認識は、訪問者がチケット番号を引用すると実際のステータスを取得し、AIがどの部門にルーティングするのか。ビルトインパネルは各部門の本当の受取人を表示し、通知者がそれらを解決する方法を解決しましたので、顧客は部署が誰も警告しないことを確認することができます。
訪問者はチャットを離れることなく公開された記事を参照してみましょう。エントリポイントが表示される場所、一番下のバーラベルとアイコンを選択し、完全なヘルプセンターへのリンクを提供するかどうかを選択します。デフォルトでオフ。
エージェントがチャットを閉じるときにトリガーされたスター評価, ハンドオフの終了時, あなたが設定した非アクティブ期間の後. 1 つまたは 2 つのトリガーを選ぶ, それらのすべてではありません。.
訪問者がチャットを閉じる際の短い調査、質問、遅延、タイミングルール、訪問あたりのキャップ。訪問者はメールやトランスクリプトをダウンロードすることもできます。1つの質問に答えます。3つはしません。
会話が終わると電子メールによるフォローアップ調査、必要に応じて、訪問者がチャットした言語で、遅延、主題、イントロ、質問、ボタンラベルと感謝のラインの両方を制御します。
それぞれのAIの回答に親しんだり、品質ダッシュボードをフィードしたりします。
日経後のオートアーカイブ、沈黙の数分後に自動解決し、その後のアーカイブされた会話を削除します。 3番目の場所保持は、一般および追跡と一緒に設定されます。
アシスタントが実際に知っていること。クライアントチャットで他の何も問題はありません。
あなたのサイトをクロールし、アシスタントはそれから応答することができます。 開始リンク、10まで、ページ制限、リンクの深さ、および除外されたフォルダ。 1回 URL 完全なクロールの前にテストすることができます。チェックアウト、アカウントおよび管理者パスを除外します。
ザ・オブ・ザ・API キーワードのマッチではなく、ページを検索可能な意味に変えるキーとモデル。
ワンクリックでAIはすべてのFAQとクロールされたページを読み込み、カテゴリに並べ替えます。
最優先のソースとして扱われた質問と回答ペア、ステータス、体重およびカテゴリでそれぞれ。検索可能、インポート可能 JSON, そして、AIは、あなたのビジネスの説明からそれらを書き込むことができます. アシスタントが何か問題を取得するとき, FAQを書く: それはページをクロールアウトランク, その修正はすぐにあります.
ポーリング間隔、メッセージ率制限とウィンドウ、最大添付ファイルサイズ、ウィンドウごとの添付の試み、および許可されたファイル拡張子。拡張リストはセキュリティ制御です。
ポーリングではなくインスタントメッセージとステータスデリバリー、プーッシャー、アブリーまたはファイアーベース、フォールバックポーリング間隔。ほとんどのサイトではポリンが問題ありません。
デバイスは、Pusher BeamsやOneSignalを介してエージェントのアラートをデバイスに関心を持ちます。
ブラウザは、サードパーティプロバイダなしで独自の生成キーを使用してプッシュします。 ここで生成されるのは、危険ゾーンではありません。
TURNの資格情報なので、コールは、制限的なネットワークを介して接続します。Cloudflare またはTwilioの資格情報または独自のTURN URL, ユーザー名と資格.
訪問者の設定ではなく、エージェントのワークスペース設定: 数分で最初の応答SLA, 保存されたキュービュー, キーボードショートカットとコマンドパレット, インコンバージネーション検索, 検査官の顧客チケット.
WhatsApp、SMS、Facebook Messenger、Instagram、Telegram、XダイレクトメッセージとLINEは、それぞれ独自のAI自動返信スイッチで、チャンネル上でAIアクションのためのポリシースイッチ、応答の不足やWhatsApp再エンゲージメントテンプレート。 Webチャットと同じ受信トレイにすべてのチャネルが上陸します。
すべての電子メールOpsIQ送信する、そしてそれらをすべてのフレームを埋める1つの設計。メッセージの文言を編集し、何でものためにあなた自身のテンプレートを書きなさいOpsIQ既に送信されていません。
あの グローバルメールテンプレート ラッパー:ロゴ、ヘッダー、カード、タイポグラフィとフッター、空のミドル。 すべてのメッセージ OpsIQ sends は、その中間に差し込まれています。一度ラップパーを編集し、すべてのメールが一緒に変更されます。チケットの返信、ストアレシート、パスワードリセット、予約リマインダー、PeopleOS 手紙、そしてあなたが自分で書いたものすべてを編集します。
メッセージは、チケットとポータル、ストア、サインイン、アカウントのセキュリティ、予約、会話、通知、レポート、PeopleOSの文字、およびあなた自身のものによってグループ化されます。
サブジェクト、 HTML ビューでリッチテキストエディタが取得でき、ライブに切り替えることができるようになります。そして、最後に送信したメールのプレビューは、受信者から受け取るように正確に受け取ります。
エディタ上のチップは、変更する事実です:チケット番号、注文参照、予約時間。カーソルがどこにあるかをドロップするには、クリックしてください。
というメッセージのみが書かれています。フィールドを空にして、組み込みのワーディングを維持します。行上の丸薬は、それがどの状態にあるかを伝えます。
これをメッセージに使うOpsIQ既に送信されていません: 配信通知, 更新リマインダー, ウェルカムパック, ライセンスキー. これは、ビルトインメッセージが取得するすべてを取得します — エディタ, プレビュー, プランルールとグローバルデザイン - そして、あなた自身のシステムは、それを介して送るAPI.
ボタンは、テンプレートページ上部に置き、「あなた自身のテンプレート」の横に再び配置されます。
名前は、システムが送信する参照になります。例えば x_custom_delivery_booked のフィールドの下に示されます。 既にそれによって送信されるので、その後の変更はできません。
これらの2行は、今から1年間テンプレートページであなたと同僚が読んでいるものです。 彼らは30秒の価値があります。
たとえば、名前、時、tracking_link。それぞれが {{variable}} になり、その件名やメッセージにドロップし、システムが送信時に記入します。
平文は細かい — 線が段落になる。メッセージだけを書く; ロゴ、ヘッダー、フッターはグローバルテンプレートから来る。
エディタとライブプレビューで「独自のテンプレート」の下に、すべての組み込みメッセージと同じが表示されます。
製品の2つの呼び出し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"
}
}「プランを見る」リンクとエディタなしにリストされているので、 OpsIQ が送信する内容や、ロック解除されたものを見ることができます。
テンプレートを作成するときに、サービスを選択するか、すべてのプランでそれを残す。そのサービスのないワークスペースはリストされているが、編集や送信はできません。
決して計画が決められません。パスワードの単語を自分でリセットすることができないため、受信した管理者は、間違った種類のロックになります。
いいえ、そして意図的に。 デザインはラッパーであり、それはすべての電子メールを確実にあなたのものに保つものです。 パーメッセージとは、言葉遣い、事実パネル、メッセージの中に追加するボタンです。
リセットはグローバルテンプレートのみで表示され、エディタにあるものを組み込みのデザインに置き換えます。保存ボタンを押すまで何も書かれていないので、ダイアログを閉じてマインドを変更できます。
削除は、その理由を正確に2つのクリックで行います。最初の腕がそれで動作を停止するのかを教えてくれます。すでになくなった場合は、同じ名前と同じ参照が再び作成します。ワーディングのみを再入力する必要があります。
はい。パッケージは、メール_templates.json を独自のディレクトリに出荷し、そのメッセージは同じエディタ、プレビュー、ラッパーおよびプランゲートで「開発者テンプレート」の下に表示されます。 ワー キング編集はあなたのワークスペースに属し、パッケージの更新を生き延ばします。
チケットは、自動返信、ネイティブチケットシステム、エスカレーション、営業時間、ルーティング、顧客向けメールに回答します。
管理者にエージェントの書き込みヘルパーボタンを追加します。
新規のチケットをキューイングし、遅延後に返信して回答します。 それをオフにしてから、週の草案を確認します。 払い戻し、キャンセルおよびアクセスの変更は、常に人に到達する必要があります。
どの部門のオートリプライが回答する可能性があります。リストされていないものは、安全なデフォルトである人のために残されます。
自動返信が送信される前に待つ時間。 即座に応答はロボットとして読みます。 数分のところ、高速チームとして読み込みます。
部品ごとのキャップ、例えば請求1およびサポート3.帽子なしで混乱させた糸はループできます。
最大の書き込みトークン、応答後のチケットステータスとエスカレーション後、管理者は自動返信が属性に登録された。明確に名前付きアカウントを使用して、スタッフはAIを人から受け取るようにします。
チケットシステム内蔵 OpsIQ 外部ヘルプデスクなしでインストールする。
チケットにメールを差し込む。OpsIQ エンドポイントを供給する URL, authトークン, スクリプトパスとPHPバイナリ. そのエンドポイントに投稿できるものは、チケットを作成することができますので、トークンの秘密を保持します。.
対話が続くとAIが応答し続けるかどうか、そして静かなウィンドウを待つか、3つのクイックメッセージが返信とみなされるかどうか。 静かなウィンドウは、自動返信感を作るための最良のシングル設定です。
誰でも、チケットを上げて追跡できる顧客向けページで、オプションのウェルカムライン。そのアドレスと外観はサポートポータルタブで構成されています。
生成されたチケット番号にランダムな文字がいくつ表示されます。
チケットメールは、顧客言語に従う。スタッフの電子メールは、通知、部門アラート、説明会、スケジュールされたレポートがシステム言語に滞在する変更はありません。
チケットの開封時に、フィードバックが残っていると切符が閉じられたときに、新しいチケットに対する固定承認、さらに確認メッセージが開きます。また、グローバルメールテンプレートラッパーや、チケットボタンの表示の背後にあるリンクもあります。
未知の送信者からチケットをスクリーン化し、疑わしいスパムを自分で動かすことができます。 判断を監視するまで自動でオフにしてください。
数日後に切符を閉じます。 閉鎖メッセージで顧客に再オープンする方法を伝えてください。
タイムゾーン、開口部および閉鎖時刻、初返信と解像度のタイマーのための営業日と休日。 クライアントチャットの下で作業時間から別のスケジュール。
エージェントのスキルとスキルベースのルーティングのためのマッチ感度で、オンラインにいるエージェントのみにオプションで自動割り当て。
顧客が既にある1つに切符を、調節可能な一致の感受性と開けるとき点は斑点を付けます。
クローズ後、アンケートをメールで送信します。結果はCSATページに表示されます。
新規のチケットが到着したときに部門に電子メールを送信します。受信者は、インバウンドアドレスチケットが着きます部署のメールボックスアドレスではなく、その部のメンバーです。
マスタースイッチとクライアントプロファイルの要約、請求書、取引、クレジット残高、製品およびサービス、ドメイン、リンクサーバー、高レベルのアカウントの概要のための個々の読み取り専用権限。 プロフィール概要から始めて、必要に応じてカテゴリを追加します。
回答前に、チケットをより良い部門に移動します。許可された部署、チェック遅延を選択し、独自のエスカレーション通知の指示を書くことができます。内部エスカレーターノートをオフにすると、チームがチケットが移動した理由を見ることができます。
顧客言語を返信するかどうか、彼らはクロールされたリンクやFAQに描画するかにかかわらず、AIはイメージを読み込むか PDF 添付ファイル、インポートされたかどうかの知識応答モード JSON 知識は使われ、ソースリンクが表示されるかどうかです。クロールされたリンクとFAQを使うか、AIが推測します。
スタッフの回答が終わったら、AIはそのチケットに答えるのを止めます。それなしで、AIはあなたのエージェント上で話せることができます。
読みやすい作業例で、すべての返信のためのトーンとコンテンツの形成を自由テキスト指示します。AIが何をすべきか具体的にしてください。
書き込みアシスタントの JSON ナレッジファイルをアップロードまたは貼り付けます。
顧客向きボタンのためのフルデザイナー:表示様式、サイズ、ラベル、アイコン、形、最低の幅、第一次および二次色の背景様式、勾配の角度、ボーダー、角の半径、影、タイポグラフィ、パディング、アイドルアニメーション、ホバーモーションとカラー、そして焦点リング、プラスカスタム CSS コントロールがカバーされていないものは何でも箱。
人々がチケットを上げて追跡し、ヘルプ記事を読み取る顧客に直面しているサイト。このタブは、それが到達された方法と顧客がサインインする方法を制御します。そのビジュアルデザインはサポートポータルスタジオで行われます。
これらは、常にそれらを混合する2つの異なる製品と人々です。 さまざまな問題を解決し、共に実行するのは普通です。
スタジオは、 ホストが OpsIQ にサポートするサイトを完成させる. それは独自のWebアドレス、またはあなた自身のドメインを持っており、それは全体のセルフサービスの経験を運びます:検索、リクエストフォーム、チケット履歴、顧客のサインインとアシスタントに関する記事を支援します。 テンプレートを選択し、テーマ、ナビゲーション、レイアウト、知識、フッター、ブランド、チケット、アシスタント、フォームおよびアシスタントを通して作業してください。CSS デスクトップ、タブレットおよび電話サイズでプレビューし、公開します。
いつ使うか お客様が、すべてのお客様にポイントできるブランド先を1つ欲しいとお考えの方もいます。また、自社ウェブサイト内でサポートエリアを構築・維持するというわけではなく、お客様自身がサポートエリアを築き上げていきたいと思っています。
埋め込まれた置くこと 自分のウェブサイトのページでのみチケット体験. お客様がページを離れることなく、サポートリクエストを開き、追跡し、返信します。また、自分のヘッダー、ナビゲーションとデザインはそのままにとどまります。ウィジェットビルダーのレイアウト、外観、アクセスルールを設定し、結果をプレビューして、埋め込みスニペットをあなたのページにコピーします。
いつ使うか 既に自社設計でウェブサイトやアプリケーションをお持ちで、お客様が別のアドレスにオフを渡すのではなく、内部でサポートしたい。
スタジオビルド お客様にお寄せいただく. 入場券はチケットを持参 既にお客様を抱える場所へ. 多くの企業が両方の運営をしています。, テキストのリクエストのためのアカウントエリアにチケットウィジェットを埋め込むと、ホストされたポータルを記事や検索でフルセルフサービス目的地として保持しながら、. 彼らは独立したスイッチです。
ポータルが誰にでも開かれているか、署名された顧客に制限されているかどうか。 ポータルを開くと、より多くのチケットやスパムが増えます。
ポータルとヘルプセンターが1つのヒーローを共有したり、2つを使用していても、ナビゲーションとフッターは両方の表面に現れ、ナビゲーションセクションラベル。
アドレスの顧客使用. 名前と OpsIQ を選ぶと、結果ポータルを表示し、ヘルプセンターのアドレスをマッチングします。その後、リンクが送信されました。
サポート. yourdomain. com などのドメインからポータルを管理します。
上記のウィジェットのドロップインを切り替え、レイアウト、外観、アクセスルールを選択する埋め込まれたビルダーを開き、結果をプレビューし、あなたのページ用のスニペットをコピーします。 これはポータルスタジオではありません:スタジオはホストされたポータルを設計します、これはあなた自身のサイト内のチケットを入れています。 どちらも一度にすることができます。
これらは、顧客サインインオプションです。 スタッフのサインインは、設定、セキュリティで構成されています。
サインインページに表示されるオプション。 コネクタとメールサインインが自動的に動作します。
消費者アカウントプロバイダー、クライアントIDとシークレットが必要なそれぞれ、リダイレクトアドレスが供給 OpsIQ プロバイダに登録する。
顧客 ID の発行者 URL、クライアント ID、秘密、およびオプションで許可されたメールドメインリストを使用して、顧客署名を
ザ・オブ・ザ・SAML 等価。OpsIQ ACSの応答を供給します URLそしてSPの実体ID;IdPの実体のID、印およびサインアウトを供給します URLs, X.509 証明書とオプションの属性名。SAML サインイン方法または表示されません。
署名された深いリンクなので、顧客は既にポータルのアプリケーション・ランズにサインインし、再度署名することなく署名しました。 OpsIQ 署名の秘密、ポータルを供給 URL とワークスペースキー、言語(PHP、Laravel)の完全ルート WordPress, WHMCS, Node.js, フラスコ, Django, .NET, Rails, Java, Go, そして、自己ホストされているインストール OpsIQ サーバ自体)、ステップバイステップのセットアップノート、および署名されたテストリンクのための発電機。任意のコードを書く前に発電機を使用して下さい。
お客様が、ルートでポイントを付与するサポートリンクをクリックします。このルートは、アプリに署名した顧客(ゲストがログインとバックに送信されます)を見つけ、サーバーから秘密を読み、2分で期限切れのワンタイムトークンをサインし、レファーラーやノーストアヘッダーを使用してポータルにリダイレクトすると、トークンがキャッシュまたは漏れられません。
ポータルスタジオでは、サインインページで、Webサイトのログインを使用してログインページを設定し、ログインページを設定する URL 同じルートへ。ポータルは追加します opsiq_portal_return (顧客ページが上にあった)。 ルートは、ポータルのアドレス内にある場合にのみそれを砥石で研ぐし、署名された顧客に戻ってきます。
何も書きません: WHMCS リモートサイトからすでにクライアントをポータルに署名し、アドレスを処理します。 ログインページを設定する URL あなたへ WHMCS クライアントエリアのログイン。
ポータルからサインアウトすると、アプリケーションから顧客を署名することもできます。
リクエストフォームが収集するフィールドを構成します。追加のフィールドは投稿を失うので、トライするだけで問い合わせてください。
常にパブリックフォームを保護するハニポットとレート制限。トップでは、使い捨てのメールアドレスをブロックし、独自のブロックドメインを追加したり、Google reCAPTCHA またはGoogle recapTCHAを使用してCAPTCHを追加することができます Cloudflare 回転木戸。reCAPTCHA は既に設定、保証の下で置かれるキーを再使用します;回転木戸のキーはここに入ります。
過去30日間に渡るポータル活動の読み込み専用まとめ。
システムグループ、およびチームアクセス制御により、設定タブのどのセクションを見ることができるかを決定します。
各管理者はチャット受信トレイのアクセスをカバーする権限の明示的なセットを取得します。, 設定セクションが編集することができます, そして、その部門. フル管理者ロールを持つ誰もが常にすべての許可を持っています. 設定権限は、人が見るタブを決定します, そうそれらが動作するように最も狭いセットを付与します.
現在のライセンスを表示し、そのステータスをあなたに付与します。
セルフホストのインストールのみ。 OpsIQ クラウドでは、スケジュールされたタスクがあなたのために実行され、タブは非表示になります。 1行の Crontab ドライブは、すべてのスケジュールされた作業を自動返信、エスカレーションルーティング、交換レートリフレッシュ、メールボックスポーリング、コネクタ同期します。
タブは、既に選択した正しい PHP バイナリでサーバーの正確な crontab 行を表示します。
crontab -e を PHP を実行して単一行を貼り付けるユーザとして実行します。 cPanel では、Cronジョブツールは代わりに使用します。
ハートビートタイルが軽くなるまで、今すぐ実行して待つのではなくすぐにテストしてください。
ハートビートパネルは、自動返信キューとメールとコネクタのポイルの両方のために処理された最後の実行、期間およびものを示しています。 最後に実行が実際のサーバーのクロンではなく手動Webボタンから来たとき、そして心臓部が止まったときに警告します。
収集または生成するすべての OpsIQ をワイプします。確認句を正確に含めて入力するかチェックを入れます。設定とサイト構成、ブロックされたアドレス、チーム全員が書いた(ナレッジベース、FAQ、翻訳、ポータルデザイン、アクション定義)、同意書はすべて保存されます。
レコードが古いものに限り、同じスイープ 30, 60, 90 または 180 日、または年。自動転がり保持のためには、一般および追跡の保持値を使用し、スケジュールされたタスクがそれを行うようにします。
チームメンバーを招待し、権限を割り当てて、誰がアクセスできるかを制御することができます。
ライセンス、請求、危険ゾーンを含むフルアクセス。 1つのインストールあたり
ライセンスと危険ゾーン以外でフルアクセス。管理者の管理ができます。
割り当てられた部門に限定。チケット、チャット、分析のみ。
サイドバーのチームにナビゲートします。
チームメンバーのメールを入力してください。
所有者、完全な管理者、またはエージェントを選択します。
エージェントは、アクセス可能な部門を選択します。
セットアップリンクでメールを受信します。
サポートチームがどのように実行されているか。アクセスは権限で、ロールによって行われます:ビューの許可がページを開き、管理権限はターゲットをロック解除し、QAと同僚を特定する読み取り値であり、報酬の権限はリワードタブを追加するものです。チームリードは、管理者になりなくてもこれらのいずれかを指定できます。
チームパフォーマンスは5つのタブです。各回答は異なる質問に答え、彼らは通常あなたが必要とするどのくらいの緊急時に注文されます。
ライブキューの状態、ターゲットに対する顧客結果、容量の消費状況、決定が必要な状況、およびチームメイトインデックスごとの証拠調整。
リーダーボード、認識(最も改善され、縞)、クエスト、ランキングを見ることができるオプトインコントロール。
スコアカード、記録された評価、チャンス修正レビューア合意、査読者ドリフト、および証拠紛争。
トークン値、支払い請求、および管理された期間配分:資金を調達した天井を承認し、プレビュー、ファイナライズを確認します。
ワークスペースが時間をかけて移動する方法:チャートでトレンドメトリック、そして実際に作業していたときに 28-day カバレッジヒートマップが表示されます。各カードはそれを描くのに十分な歴史があるまで、それ自体を隠します。
十分な処理量のないチームメイト - またはその寸法の実行証拠は、構成された重量の半分以下に追加されます。それは、Unscoredとして示されています。彼らのスコア、ランクとバンドが空であり、その故障は隠されています。これは非審称です:ゼロとして不在な測定をレンダリングすることは、静かな週を持つためにランキングの下にある誰かを置く。証拠のしきい値は、ターゲット&スキャリングでワークスペースごとに構成可能です。
2つの証拠のしきい値が異なるジョブを行い、それらを離れて保つ価値があります。 最小限に処理された人は誰がまったくスコアを当てているかどうかを決定します。 最低評価はスコアには影響を与えません:それは賞と報酬の適格性を決めます。 だから、チームメイトは完全に得点され、ランク付けされ、まだその期間のために有資格であり、あまりにも少数の顧客はそれらを評価するからです。
5つの次元の複合体、同僚に対してではなく設定したターゲットから測定された各々は、その背後にある証拠が薄いときに中央に向かって引き出されます。 方向に注意:調整は、図を向きに動かします 70, 薄い優れたスコアが引き下げられ、薄く悪いスコアが引き上げられます. 4つの会話の最初の週はどちらかの定評ではありません. 証拠として、調整された数字が生1に収まるように.
顧客満足度は、検証されたフィードバックから。QAスコアカードの結果で補完され、その存在が管理されます。
P50とP90のパーセンタイルで最初の応答時間、ターゲットから。
決断の時間および1接触の決断率。
設定したSLAに対するアテネメント、およびリスクと違反したカウント。
再オープンと転送速度 — 戻ってくる作業。
稼働率、生産時間、ウィンドウの生産性の時間とオンライン共有ごとに解決。 ユーティリティは意図的に報告されていない:それはデノミネーターとしてスケジュールされた時間を必要とします、OpsIQ ルースターやシフトソースがなく、代用デノミネーターはパーセンテージサインを着ていると推測します。その理由で利用できなくなったように読みます。
スコアカードは、ルックリの査読者が実際の会話を対比して得ます。公開されたバージョンのみの評価を受けることができ、新しいバージョンを公開することは既に評価されているものを書き換えることはありません。レビューは、1つの会話に関する証拠であり、人に対する評論ではありません。
生の合意比率ではなく、偶然に誤った統計(Cohen'sとFleiss' kappa)として報告された。 すべてのものを渡す2人の査読者は同意します 100% 情報を持ちません。
査読者が同じ会話で同僚よりも体系的に困難またはより柔らかく評価するかどうか - パネルの残りの部分と比較して、時間の経過とともに傾向はありません。 それは独立して何度も見直した相互作用を必要とします。
チームメイトは、それらを記録した正式に紛争の証拠を形作ることができます。 解決するまで、オープンな紛争ブロック報酬優先ファイナライゼーション。
チームメイトは、自己の評価を提出することはできません。
ランキングだけでは、誰が最後であるメトリックゲーム、バーンアウト、パブリックシェーミングなどの失敗モードを文書化しました。 3つの選択肢はそれと一緒に座っています。
チームメイトの以前のレコードに対して測定され、同僚に対抗しないため、縮小すると小さなデノミネーターは勝利を購入できません。
定額で宣言されたバーに会う連続した期間 — 平均評価、処理量、定格数と負のフィードバック率、すべての絶対値。誰もが同時にストリークを保持することができますので、ランキングは作成されず、例外的な月を持つ同僚はあなたの破綻することはできません。
デフォルトではオフ。チームメイトは、常に自分のインデックスを閲覧しています。同僚がワークスペースの決定であるかどうか。パーセンタイルバンドは絶対的なポジションではなく公開することができます。
チームをターゲットにし、互いに対比するのではなく、固定宣言されたバーに対して測定されるので、全員が同じ期間で同じクエストをクリアすることができます。
個別またはチーム、一時停止、繰り返し、または明示的なウィンドウで季節を過ごします。
会話は、受信した評価, アクティブ日, 平均評価, or 負のフィードバック率. すべての絶対 — どの値が同僚が何をしたかに依存しない.
ボリュームターゲットで任意のクエストに必要です。品質が下落し、それを補完するのではなく、探求を抱き合わせながら番号を押し、それは未完成ではなく、withheldとして示されています。
最遅くの基準によって運転されるperiodの帽子、および繰り返す前の任意クールダウンはカウントできます。
チームメイトのアトリビューションが公開されていないため、チームクエストはリーダーボードになることができません。
コーチングセッションは、チャットではなくレコードです。コーチ、チームメイトがコーチを務める、スケジュールされた時間、合意したトークポイント、およびその後の要約を記述しています。実際のチャット、チケット、QAの評価は証拠としてピン留めされるため、会話は記憶された印象にではなく実際に起こった作業に固定されます。
セッションの前に挨拶をしたので、チームメイトは驚きに歩いていません。
チャット、チケット、QA評価をセッションに添付。ピンは参照を保存します。タイプとIDはコピーではなく、ライブレコードで常にポイントされます。 OpsIQ _は、受け入れ前にidを確認していません。
所有者と期限がそれぞれ。その日付を過ぎた項目は、派生した状態である、誰かが設定を覚えなければならない状態ではないことを示す。
コーチのメモ。チームメイトがコーチングされると、管理者ではなく、管理者として、所有者としてではなく、エージェントとして読み取れることはできません。 他のすべての許可の前に実行されていることを確認し、オーバーライドすることはできません。
チームパフォーマンスの権限を管理しているコーチ、チームメイト、そして誰が。同じ部門で他のチームメイツを含む誰もいません。
変更されたもの、誰によっても作成、更新、ピン、アンパン、および完了が記録されます。
記録されたアクティビティは、設定したキャッシュ値でトークンに変換します。支払いへのパスは意図的に遅くなり、すべてのステップが記録されます。
どのトークンがどのくらいのお金と、各活動が価値があるかを等しくする方法。
クローズドカレンダー期間では、管理者が支払う可能性のある最大トークンをステータスします。設定フォームを保存しても予算を承認せず、既に認可された天井を変更することはできません。
受容体、留保および誰が無関係である理由。証拠の紛争は、このステップをブロックします。
割り当ては、その背後にある証拠と永続的に記録されます。何も割り当てられた期間が無効になり、アウトライトを再実行することができます。発行されたトークンの1つが最初にリバースされなければならない: OpsIQ 各財布に対する報酬エントリーを書き、元のウォレットを削除しないようにするので、レジャーはまだ何が起こったのか、なぜ、そしてリリースされる期間です。誰かがすでに回復した金額よりも多くの現金を払っている場合、逆転は拒否します。
他の人は、デフォルトで参加します, チームリードと共同所有者が含まれています. 誰かを離れるには, チームの&部門を開き、賞や報酬オプションでテイクズの一部をオフに. 彼らの作品はまだスコアされ、示されています; 彼らはその点から候補であることを停止し、既に確定されていないが触れています.
ワークスペースのボード、ライブ状態、容量および品質の概要。
ターゲットとスコアリング、輸出、QAスコアカードおよび評価、コーチング、クエスト、およびパー・admin歴史や受賞歴などの同僚識別データを運ぶ読み取り。
バランス、現金値、クレームノートと支払い基準 — パフォーマンス証拠から分離されるため、ペイロールアジャセントです。
送金手数料:報酬を支払い、支払または請求を拒否し、予算の承認、ファイナリスト化、無効化または配分の回復、トークン・ツーキャッシュ率の設定。これらは許可付与によって委任することはできません。
パフォーマンス指数は、自動雇用の決定ではなく、管理証拠です。それを実行する前に数の背後にソースの会話を開き、ケース複雑さ、スケジュール、休暇、アクセシビリティのニーズを量ります。単一の困難な週は、持続的なパターンのように見えません。
サイト(ワークスペース)では、複数のウェブサイトを1 OpsIQ _インストールから管理できます。それぞれ独自のトラッキング、AI、コネクタ、チームアクセスがあります。
接続されたサイトへ移動します。
氏名、ドメイン、説明を入力します。
各サイトはウィジェットスニペット用のユニークなキー(site_xxx)を取得します。
各サイトには、AIやコネクタ、設定などが搭載されています。
ライセンスプランによります。ライセンスの詳細をご確認ください。
あなたのお役に立たせ OpsIQ ライセンスコントロール機能、サイト制限、AIクレジット残高。
設定 > ライセンスに入力します。OpsIQ ライセンスサーバ。
OpsIQ 通常、署名済みのローカルライセンスキャッシュを読み込み、必要に応じてバリデーションを更新します。 即時の結果が必要な場合に強制リモートチェックを使用してください。 診断は識別します DNS, HTTPS またはサーバータイムの問題.
機能の可用性と制限を決定します。
ワークスペースの最大数。
マネージドAIを利用している場合、クレジット残高がここに表示されます。
サービス中断を回避するために、満了前に更新します。
追跡、チケット、およびCRMは続行します。 AIは更新まで一時停止機能を備えています。 データが保存されます。
各管理者は、自分のアイデンティティを維持することができます, 作業の好み, パスワードと2要素認証.
プロフィール設定は、署名された管理者に属し、ワークスペースブランディングを変更しません。ユニークなパスワードを使用して、2要素認証を有効にします。メールまたは認証の設定を変更するには、再検証や新しいサインインが必要です。
通知設定は、製品内の管理者や電子メールで操作イベントが到達する制御を好みます。
設定は、表紙の割り当て、顧客対応、SLA警告、チャットハンドオフ、AI承認イベントをカバーします。 緊急操作信号がどこかで有効に保たれ、メールをオフにすると必ずしもアプリ内通知をオフにしません。
セキュリティ概要は、ブロックの評価、ログイン攻撃、脅威セッション、セキュリティの傾向、イベントの完全性のための最初の画面です。
トライアジ用のヘッドラインカードを使用して、関連する監査、失敗したログインを開き、ブロック IPs または JavaScript レコードレベルの作業のためのエラーページ。14-dayトレンドは、単一のスパイクよりも有用です。 永続的なブロックが適用される前に、訪問者、要求および認証の証拠に対して、高脅威セッションを調べる必要があります。
どのオブジェクトに、リスクレベルと成功したかどうかを、何をしたかの監査ログレコード。
アクション、リスクおよび俳優によるフィルタリング;エクスポート CSV または JSON 調査のため。ハッシュチェーンは、欠落または変更された監査行を検出するのに役立ちますが、保護されたバックアップと制限されたデータベースアクセスを置き換えません。ユーザー、記録およびセキュリティ行動を特定する可能性があるため、監査のエクスポートを機密として扱います。
診断は、サブシステムがプレーン・イングリッシュヘルスの結果をチェックアウトし、次のアクションを指示します。
このページでは、サイトの速度、ランク/キーワード/バックリンク/ローカルデータ、AIとアクションゲートウェイ、チケット、クローラー/オーディオ、統合/イベントの取入口、背景タスク、CRM自動化、ライセンス、ウィジェットおよび関連製品サービスをチェックします。 意図的に、生の秘密を露出するよりもむしろオペレータが読みやすい原因を報告します。
変更後、影響を受けたサブシステムが健康状態に戻り、リフレッシュして確認します。緑色の診断ページが必要ですが、起動には十分ではありません。プレランチチェックリストも完了します。
OpsIQ 管理者、データの保護のために複数のセキュリティレイヤーを含み、API アクセス
任意2FAの電子メール/パスワード。
あまりにも多くの失敗した試みの後の一時的なロック。
ブロック IPs または CIDR は、追跡されたサイトにアクセスする範囲です。
行動ベースの脅威スコア。高脅威の訪問者は自動ブロックできます。
すべての接続に必要なHTTPSへのリダイレクト。
厳格な輸送-Securityは、ダウングレード攻撃を防ぎます。
管理者フォームには、CSRFトークンが含まれています。
すべてのユーザ入力はエスケープされます。CSP ヘッダーはスクリプトの実行を制限します。
アウトバウンド webhooks ブロック プライベート/内部 IP アドレス。
管理者アカウントの全部について
最小の 12 文字、混合。
チームメンバーの権限を解除します。
疑わしいパターンを毎週チェックしてください。
セキュリティーパッチのアップデートを迅速に適用します。
役割ベースのアクセス制御により、各チームメンバーができることをコントロールできます。
ライセンス、危険ゾーン、インストール管理など、すべて。
ライセンスや危険ゾーン以外は全て管理できます。
割り当てられた部門別チケットやチャット、分析の表示に対応。設定、チーム、またはセキュリティアクセスなし。
現在ではない場合。3つの組み込みロールと部門の割り当ては、顆粒制御を与えます。
追跡されたサイトにアクセスし、ブロックされている IP アドレスを管理します。
例: 203.0.113.42 または 203.0.113.0/24
理由:スパム、虐待、スクレイピングなど
お客さまが企業をシェアする場合 IP またはVPN、ブロックする IP みんなをブロックします。狭いブロックを使用してください。
ログインが失敗したすべての試み OpsIQ 管理者。
試みが起こったとき。
使用されるメールアドレス。
試みのソース。
地理的な位置。
パスワードが間違っている、ロックされたり、見つけられなかったりする。
パスワードが推測されます。2FA が有効になっていることを確認してください。
攻撃を自動ブロックします。ソースの IP をブロックします
チームがローカルの場合、外国の試みは攻撃する可能性が高い。
セキュリティページ上のオプトイン分析層: 評論家、事件の報告書、毎日の消化器、週刊郵便検査、Ask Security、および0-tokenブロックポリシー。訪問者リクエストパスで実行されることはありません。
すべてのセキュリティページは何が起こったのかを記録しますが、読み続けると判断されます。AI セキュリティアナリストは、その判断を所定の位置に付け加え、ほとんど何も費やすように構築されています:それはビーコンまたはログインパスに座っていません。決定的なルールは、AIコールなしで明らかなケースを解決し、評論者はキャッシュされ、アナリストの最良の出力は、ゼロトークンで永遠に強制する決定的な規則です。 機能を有効にする 設定 → セキュリティ; すべてのデフォルトはオフ。
ブロック IPs そして失敗したログイン行は、自信のスコアで良性/疑わしい/敵対的なチップを示しています。 説明文は推論、使用事実、およびワンクリックブロック/リリースアクションを開きます。 キャッシュ 24h、従って再ビュー IP無料です。
関連するイベントは1つのインシデントにクラスター(ログイン波)、URL プレーン英語のタイムラインと次のステップでスキャン、自動ブロックバースト)。攻撃を同じインシデントに分けます。
1日1回、ベースライン、ブロック、インシデント、および単一のことを対比する。 静かな日はゼロトークンで決定的な全クリアを送信します。
月間チェックリストの硬化(FAギャップ、ロックアウトしきい値が実際の攻撃ボリュームを経由して警告)。アイテムごとに重大性、努力と正確な修正。
セキュリティ概要の質問箱は、ライブセキュリティの状態から回答します。 ディープサーバーの質問は、推測するよりも管理者エンジニアのチャットに役立ちます。
アナリストは、承認/却下カードとしてコンクリートブロックルールを提案します。 認定規則はライブヒットカウンターでゼロトークンで強制されます。 オプションのオートパイロットは、自動的に最も安全なルールのみを承認します。
マスタースイッチ。 予測チップ、Explain、およびAsk Securityを有効にします。 ambiguous IPs だけがモデルに到達し、1つの呼び出しにバッチ処理されます。
クラスターは、事件にイベントを盛り込み、各新しいストーリーを書きます。 既存の時系列セキュリティ cron 上で実行します。
鐘と概要の1日あたりの1つのセキュリティリキャップ。静かな日は何も費用しません。
月曜日は、概要のチェックリストを硬化させます。チェックリストは完全に決定的です。
アナリストは、最も安全な提案を無人でアクティブにしましょう: リバーシブルな時間制限ブロックのみ、シングル IPs より広い範囲無し /24, 決して共有/移動式/個人、おおわれる 10 毎時、常に監査されず、取り消し不能。
OpsIQ は、電子メールのポーリング、チケットの自動化、分析ロールアップ、保持、AIキュー、CRM作業、レポートおよびコネクタジョブを実行する1つの製品スケジューラを使用します。
同じサーバーと実行する PHP 環境の crontab にこの単一行を追加します。OpsIQ:
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1
交換する /path/to/opsiq インストールルートで。ホストが1つを必要とするとき、完全なPHP CLIパスを使用してください。 /usr/bin/php8.4.
レベルトップレベルの使用はしないでください /cron.php 製品の作業のため。 このリポジトリでは、ランナーがこのハンドブックの外側に別の非製品サービスに属しています。 OpsIQ 製品ランナーはあります opsiq/cron/all.php.
オート返信、エスカレーション、承認などのキュートな製品作業による処理
ポーリングが選択した取込み方法であるPollsはメールボックスを設定しました。
セッションを組み立て、スケジュールされた集計を準備するときに更新します。
スコアリング、ライフサイクル、ワークフロー、キャンペーン、スケジュールされたレポートタスクを実行します。
クリーンアップ、アーカイブ、満期および完全性の仕事を実行します。
コネクターのcronの購読者を派遣し、取付けられた、有効化および構成されたコネクターのためにのみ磨くこと。
/tmp/opsiq-cron.log マニュアルランが失敗したときに選択したログパス。コネクターのハンドラを短く、暗く、ワークスペーススコープで保存します。 バッチの長い同期とカーソル/チェックポイントを保存して次の実行が安全に続行できます。
ホストされている OpsIQ デプロイメントは、ホスティング演算子がサーバーレイヤーを管理している間同じ製品画面とワークフローを使用します。 商用サインアップ、計画、課金およびアカウントポータルの手順はこのハンドブックの外にあります。
マネージドサービスとは、すべての製品統合が健康であることを想定しないでください。最新のバックアップ証拠と保持ポリシーをホスティング事業者に確認し、使用してください OpsIQ 変更後の診断 DNS、電子メール、AIプロバイダ、ウェブサイトまたはコネクタ。
このセクションでは、製品操作のみをカバーしています。 商用のオンボーディング、サブスクリプション、課金および顧客アカウント管理は外に残っています OpsIQ ハンドブック。
自己ホストされている OpsIQ インストールは、制御するインフラ上で実行します。ランタイム、データベース、TLS、プロダクトcronのバックアップ、更新および監視。
サインイン 8.4 または newer. 必要な拡張子: curl, pdo_mysql, mbstring, json, xml, opensl, zip, intl, gd. を開きます。
MySQL 5.7+ または MariaDB 10.3+ InnoDB を使用して。専用のデータベースと、少なくとも特権のアプリケーションユーザーを作成します。
Apache または Nginx は、OpsIQ フロントコントローラー、静的アセットおよび必要な書き換え。
管理者セッション、ウィジェットのトラフィックが必要です。API キー、webhooks およびプロバイダの呼び出し。
許可する DNS 実際に有効にしているAI、Eメール、コネクタ、ライセンスエンドポイントへのアクセスを HTTPS で行います。
ウェブとCLI ユーザーは、アプリケーションファイルを読み出し、文書化されたランタイム/ストレージの場所だけに書き込むことができます。
OpsIQ 製品のスケジューラを毎分実行し、Webプロセスと同じアプリケーション設定とデータベースアクセスを行います。
* * * * * php /path/to/opsiq/opsiq/cron/all.php >> /tmp/opsiq-cron.log 2>&1
チェックリストと実行するためのベストプラクティス OpsIQ 生産で。
インストールした SSL は HTTP リダイレクト、HSTS が有効になっています。
診断ページで確認します。
顧客としてチャット。精度とトーンを検証します。
このページは、全てのページで配信されます。ライブフィードで確認します。
毎日のデータベースとファイルのバックアップを自動化しました。
PHP のエラーログが有効化し、監視されます。
会員は、正しい役割を持つアカウントを持っています。
少なくとも5-10 記事。
ソースゲートを実行し、リリースまたは最初の生産開始前に実際の製品チェックを完了します。利用可能なコマンドは、それがあなたの環境に渡された証拠ではありません。
リポジトリはインストールルートからチェックを実行し、リリースレコードで完全な出力を維持します。
php tools/preflight.php
php tools/release_gate.php
プレッションライトは、PHP 8.4 のランタイムと必要な拡張機能をチェックし、PHP の構文をスイープして、AI 評価船ゲートとフル PHPUnit スイートを実行し、これらのツールがインストールされたときに PHPStan/Node チェックを実行します。 延長ゲートには、環境の設定時に煙、クリーンアップ/schema およびブラウザーエンドツーエンドのチェックも含まれています。
スキップされたチェックはパスではありません。使用不能だった理由を記録し、欠落している依存性をインストールしたり、リリース前の正しいCI/staging環境で実行します。
それぞれの目的の役割としてサインイン;許可されたページ/アクションを否定することを確認します。
実際のサイトをプライベートブラウザにロードします。ビーコンのトラフィック、ライブフィード、訪問者およびセッションレコードを確認します。
代表的な質問を聞き、知識の接地、安全、エスカレーション、AIの歴史を確認します。
有効化したインテークパスで、作成、割り当て、応答、エスカレート、クローズド、リオープン。
アウトバウンド配信と各設定のインバウンドメールボックスまたはWebhookパスをテストします。
管理された連絡先/ディール/コンバージョンを作成し、ダッシュボード、ファネル、スコーリングおよびレポートを確認します。
接続テストを実行します。, 1読み取り, 各有効なコネクタの安全な書き込み/ドライランと webhook/polling パス.
狭いスコープ、レート制限、不法なレトリー、署名および重複処理を確認します。
統一されたプロダクトスケジューラを実行し、Cronの組み立て/診断で必要なすべてのハートビートを確認します。
2FA、CSRF/セッション制御、監査エントリ、キーの取消およびワークスペース隔離を検証します。
別のテスト環境に現在のバックアップを復元し、データと設定を確認します。
ログ/証明書の確認、リクエストIDの保存、ロールバック手順の証明
ブラウザのプッシュ通知 (含む)OpsIQ プッシュキャンペーン)は、SAME ORIGINから提供されるサービスワーカーをページとして必要とします。OpsIQ ウィジェットは、あなたのからロードします OpsIQ 展開するので、サードパーティのサイトは登録できません。OpsIQ's worker を直接。サイトのドメインに 1 つの小さなファイルをホストして、そこでプッシュできるようにします。キャンペーンは BOTH のサポートされているメソッドを介して配信されます。
ブラウザは、ページが自分の元からサービスワーカーを登録できるようにするだけです。ウィジェットはクロスオリジンをロードします OpsIQ デプロイメントは、顧客サイトにプッシュワーカーをインストールできませんので、そのサイトの原点でワーカーをホストするまで、ウィジェットは静かに押し(エラーなし、サブスクリプションなし)をスキップします。 以下の2つのオプションがあります。OpsIQ プッシュキャンペーンを両方を通じて公開します。
1. OpsIQ デプロイメントからワーカーをダウンロード: https://YOUR-OPSIQ/opsiq/opsiq-push-sw.js
2. アップロードする ウェブルート なので、 https://yoursite.com/opsiq-push-sw.js. ウィジェット オートデテクトはこのパス ページの独自に存在する原点で、登録して、スニペットの変更は必要ありません。(狭いスコープを使用するので、既に実行しているサービスワーカーを交換することはありません)
オプション: 通常のパスでホストする必要がある場合は、ウィジェットをその時に指す 前のページへ snippet。同じoriginの場合のみ受け付けられます:
<script>window.OpsIQ=window.OpsIQ||{};window.OpsIQ.pushSwUrl="/custom/opsiq-push-sw.js";</script>3. OpsIQ では、VAPIDキー(設定→クライアントチャットAI → 上級 → Webプッシュ)を生成します。ウィジェットは通知権限の訪問者に尋ねて、それらを購読します。
/opsiq-push-sw.js HTTP を返す 200 (キャッシュを強制する)404 アップロードされる前に、キャッシュされた 404 登録をブロックします。1. OpsIQ 設定では、プッシュプロバイダを プーラービーム ビームを入力 インスタンスID それに 秘密鍵.
2. ビームサービスワーカーをサイトのルートでホストする /service-worker.js. コピー https://YOUR-OPSIQ/opsiq/pusher-beams-service-worker.js、または既存のルートワーカーにこの行を結合します。
importScripts("https://js.pusher.com/beams/service-worker.js");3. です。ウィジェットは、ビームを自動ロードします SDK 各訪問者を各サイトの利益に購読し、 opsiq-site-<your-site-key>. 他の配線は必要としません。
プッシュキャンペーンを公開 両方とも 一度にメソッド:自発のVAPIDワーカーで訪問者が暗号化されたWebプッシュを取得し、Pusher Beams経由で購読した訪問者はビームを公開しています。各ビジターはサブスクリプションを続いたたびにアクセスされますので、複数のサイトとクロスオリジンビームで同じorigin VAPIDを実行できます。
HTTPS が必要です。 サービスワーカーとWebプッシュ(ローカルホストはテスト対象外)。管理者チャット受信トレイでは、オペレータアラートのビームス利息メカニズムが既に使用しています。
共通の問題とそれらを修正する方法.
PHP のエラーログを確認します。原因: 古い PHP (必須) 8.4+)、不足している拡張子、DB接続が失敗し、間違ったファイル権限。
チェック:ウィジェットがインストールされているか?クローン実行中?日付範囲は正しいですか? IP 除外しますか?
チェック: プロバイダーの設定? API キー有効(テスト接続を使用する)?予算の排気? Workspace AI 設定は正しいですか?
チェック:知識ベースは最新? プロンプトクリア? コネクタのルックアップは正しいデータを返しますか? AIの歴史で会話を見直します。
依存します。: プロバイダー API 速度、コンテキスト サイズ (大きい KB = より多くのトークン = 遅くなる)、ネットワークレイテンシ。 より高速なモデルを試してください。
チェック:ページソースのスクリプト?コンソールでJSエラー? CSPブロック? 広告ブロッカー?
GeoIP は設定されていません。 Cloudflare (自動) または MaxMind GeoLite2 データベースを使用します。
チェック: mailbox が接続されているか? Cron の実行中ですか? App パスワードは変更されましたか? IMAP 設定は正しいですか?
チェック:有効?部門許可? AIが構成されているか? Cronは実行中?人間は最初に答えたのか?
チェック: 資格情報を修正? キーが期限切れですか? API サーバからアクセス可能か?ベース URL 正しいですか?
チェック: API キースコープ? Webhook が有効になっているか? Cron は実行中ですか?
チェック:データベースのパフォーマンス(SHOW PROCESSLIST)、PHPメモリ(増加する) 1GB)、不透明度を有効にし、保持期間を削減します。
ウィジェットが誤って読み込まれた場合、またはライブフィードの滞在時にこの焦点を絞ったチェックを使用します。
いつか ウィジェットは訪問ログを記録していません, サイトキーを確認します。, プライベートブラウザでページをロードします。, ブロックされたビーコンやウィジェットの要求のためのブラウザネットワーク/コンソールパネルをチェックしてください。, content-Security-Policyと広告ブロッカーのレビュー, サイトがアクティブであることを確認します OpsIQ, そして、診断を開きます. 可視チャットバブル自体は、分析ビーコンが受け入れられていることを認識していません.
OpsIQ 全体で使われる用語の定義。
コネクターやプラットフォームでAIができること
限られたアクセスを持つチームメンバー、またはAIエージェント。
独自のキーを持たせ、自分のAI API キーを生成します。
外部プラットフォームを OpsIQ_ と統合するプラグインです。
顧客満足度スコア。
CRMで収益機会.
ルーティングとアクセス制御のためのチケットカテゴリ。
チケットを別の部署やAIから人へ移動。
IP アドレスからアクセスした位置の検出
人工知能から人間に会話を移す
ウェブサイトの訪問者を識別する署名されたトークン。
AIが質問に答えるために使用する記事。
訪問者は、購入の意図を示す。
0-100 数値は変換の依存性を示す。
顧客はどこにあるのか: リード、プロスペクト、顧客、リスクで、中絶。
お使いの OpsIQ プランの一部として提供されているAI。
ステージの企画・制作
役割ベースのアクセス制御。
タイムアウトウィンドウ内のページビューのシリーズ。
追跡されたウェブサイトのユニークな識別子。
サービスレベル契約、ターゲット応答時間。
AIテキストの単位。 ほとんど4文字 = 1トークン
AI自律性をコントロールする安全システム
イベント通知の HTTP コールバック。
JavaScript は、あなたのウェブサイトに埋め込まれたコードです。
独自の追跡、AI、コネクタ、チームを持つサイト。 "site"と同じです。
このドキュメントが質問に答えない場合:
管理者の "Ask OpsIQ" をクリックします。このドキュメントとプラットフォームのデータへのアクセス権を持っています。
含める:あなたが試したもの、何が起こったのか、何を期待していたか、そしてエラーメッセージ。
ライセンスキーと問題の説明をメールサポート。
どの管理者ページ(admin page)URL または名前)。
正確な設定名と現在の値。
コードでエラーメッセージを記述します。
自分が何をしたのか、ステップバイステップ。
何が起こるべきか、そして何が起こったのか。