Zrób platformę - AI-operable.
Call 2,420 named operations through one contract-generated API, with least-privilege scopes, workspace pinning, dry-run validation and replay-safe writes. Subscribe to canonical events through HMAC-signed background webhooks, or build a governed package in the six-stage Connector Builder.
Zgłoszenie. Podpisano wydarzenie.
POST działania /api/v1.php with a scoped Bearer klucz. OpsIQ Subskrybowane zdarzenia kanoniczne opuszczają kolejkę dostarczania podpisaną przez HMAC z identyfikowalnymi próbami i ograniczonymi powtórkami.Subscribed canonical events leave through a HMA C-signed delivery queue with traceable attempts and bounded retry.
Od kluczowego do regulowanego integracji w 3 kroki.
Wydanie klucz lest- przywilej, odkryj wygenerowany kontrakt, susz-uruchomić zapis, a następnie subskrybować haka, gdy aplikacja potrzebuje dostawy zdarzeń w tle.
Weź klucz.
Zarejestruj się i wygeneruj zakres Bearer API klucz (opq_…) w ustawieniach deweloperów i dać każdej integracji tylko powierzchnie, których potrzebuje.
Odkryj & walidację
Czytaj meta.actions, meta.action oraz meta.scopes; stosowanie dry_run do walidacji pisów przed wykonaniem.
Wykonaj & subskrypcję
Dodaj klucz idepotencji do pisania, a następnie subskrybuj swój punkt końcowy do zdarzeń kanonicznych, których potrzebujesz.
Jeden wzór złącza. Pięć czystych prymitywów.
Wszystko, co jest platformów- specyficzne życie w złączu. OpsIQ rdzeń pozostaje ogólny, AI pozostaje przewidywalny, a integracja pozostaje kontrolowana.
Powiedz OpsIQ, co się właśnie stało.
Emit zdarzenia kanoniczne z platformy, lub zdefiniować zarządzane niestandardowe wydarzenie. Subskrybenci otrzymują zdarzenie poprzez zarejestrowanego priorytetu i zasad dostawy.
Odniesienie do zdarzeniainvoice.paid, ticket.created, subscription.cancelled, customer.signed_up Albo swoją własną.
Abonenci fanoutMózg AI, zasady automatyzacji, złącza lustrzane i punkty końcowe haka webowego reagują.
Porządek priorytetowyDeterminacyjne wysłanie więc lustra pisać przed alarmami ognia.
Powiedz OpsIQ, co AI może robić.
Każda operacja otrzymuje wygenerowany kontrakt: zakres, funkcję, rodzaj odczytu lub zapisu, ryzyko, polityka potwierdzająca, schemat żądania i odpowiedzi, wsparcie suchy, idepotencja i stabilne błędy.
Schemat działania{
"action": "tickets.reply",
"kind": "write",
"scopes": ["tickets.write", "admin"],
"feature": "ticket_system",
"risk": "medium",
"confirmation": "recommended",
"idempotency": "supported",
"dry_run": true,
"request": { "type": "object" },
"response": { "required": ["success"] }
}
Wciśnij zdarzenia do stosu - z kryptograficznym dowodem.
Subscribe any URL to any of the 52 deliverable events. OpsIQ POSTs the JSON payload signed with HMAC-SHA256 over the scheme version, the timestamp, the delivery ID and the body together, not the body alone, so yesterday's delivery cannot be replayed at you today.
$raw = file_get_contents('php://input');
$sig = $_SERVER['HTTP_X_OPSIQ_SIGNATURE'] ?? ''; // "v2=<hex>"
$ts = (int)($_SERVER['HTTP_X_OPSIQ_TIMESTAMP'] ?? 0);
$id = (int)($_SERVER['HTTP_X_OPSIQ_DELIVERY'] ?? 0);
if (abs(time() - $ts) > 300) http_response_code(401); // replay window
[$ver, $hex] = array_pad(explode('=', $sig, 2), 2, ''); // split the prefix
$signed = $ver . '.' . $ts . '.' . $id . '.' . $raw; // NOT the body alone
$expected = hash_hmac('sha256', $signed, $secret);
if (!hash_equals($expected, $hex)) http_response_code(401);
$event = json_decode($raw, true); // $id is stable across retries
Użyj bezpośredniego HTTP lub wygeneruj klienta, którego preferujesz.
Pełni GenerałAPI jest publikowany jako OpenAPI 3.0.3 i Postman. Senders odniesienia PHP plus Node i Python klientów integracji pokrycie podpisanego zdarzenia i webhook przepływu; każdy stos może wywołać ten sam JSON bezpośrednio na powierzchni działania.
const response = await fetch(`${base}/api/v1.php`, {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.OPSIQ_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
action: "tickets.reply",
dry_run: true,
idempotency_key: crypto.randomUUID(),
body: "Thanks. We are checking this now."
})
});
$payload = json_encode([
'action' => 'tickets.reply',
'dry_run' => true,
'idempotency_key' => bin2hex(random_bytes(16)),
'body' => 'Thanks - we are checking this now.',
]);
$ch = curl_init($base . '/api/v1.php');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_POSTFIELDS => $payload,
CURLOPT_HTTPHEADER => [
'Authorization: Bearer ' . getenv('OPSIQ_KEY'),
'Content-Type: application/json',
],
]);
response = requests.post(
f"{base}/api/v1.php",
headers={
"Authorization": f"Bearer {os.environ['OPSIQ_KEY']}",
"Content-Type": "application/json",
},
json={
"action": "tickets.reply",
"dry_run": True,
"idempotency_key": str(uuid.uuid4()),
"body": "Thanks - we are checking this now.",
},
)
Zbuduj raz, podłącz się do wszystkiego.
Złącze jest pakietem zarządzanym generowanym lub importowanym przez Identity, Auth, Test, Akcje, Przyciągi i Przegląd. Jego manifest deklaruje powierzchnie możliwości OpsIQ może ujawnić.
Otwórz sześciostrzałowy BuilderZwykły angielski. Operacja zakończona.
OpsIQ nigdy nie wypowiada właściwego połączenia. Przechodzi przez zarejestrowane kontrakty, przygotowuje ładunek, prosi o potwierdzenie, kiedy działanie tego wymaga, i tworzy kompletny wiersz audytu, gdy wykonuje, więc AI, które mogą działanie Nigdy nie stanie się sztuczną inteligencją, której nie można ufać.
Powierzchnia API - Na pierwszy rzut oka.
One JSON POST surface exposes 2,420 named actions. Each generated contract declares auth scopes, read/write kind, risk, confirmation, request schema, dry-run, idempotency and stable errors.
ACTION tickets.replytickets.writedry_run + idepotencjaSkonfigurowana / godzinaACTION security.reportsecurity.writedry_run + idepotencjaSkonfigurowana / godzinaACTION platform.routes.writeadministratorpotwierdzenie + kluczSkonfigurowana / godzinaACTION meta.actionsOdkrycie publiczneTylko do odczytuSkonfigurowana / godzinaACTION tickets.listtickets.readTylko do odczytuSkonfigurowana / godzinaACTION connectors.listconnectors.readTylko do odczytuSkonfigurowana / godzinahr.* kontrakty · hr.read / hr.write ZakresACTION hr.people.listhr.readTylko do odczytuSkonfigurowana / godzinaACTION hr.people.createhr.writedry_run + idepotencjaSkonfigurowana / godzinaACTION hr.org.treehr.readTylko do odczytuSkonfigurowana / godzinahr Dostaje odmowę, a nie pustą listę. Co to jest PeopleOS HR.Limity stawek są konfigurowane na klucz w oknie godzinowym. X-RateLimit-Limit, X-RateLimit-Remaining oraz X-RateLimit-Reset; odrzucony wniosek zwraca 429 z Retry-AfterUżyj OpenAPI 3.0.3 umowa lub Postman kolekcja generowane z tych samych rejestrów runtime.
Zbuduj, przetestuj i zwolnij 6 etapów.
Zacznij od profilu regulowanego lub sam zdefiniuj kontrakt. Budowniczy zatwierdza każdy etap, zanim wygeneruje pakiet samodzielnego złącza.
Sprawdzić bezpiecznie, a potem przejść przez bramę.
Stosowanie dry_run w przypadku wspieranych działań pisarskich, uruchom test połączenia z Builderem i sprawdź wygenerowany manifest i kontrakt przed wydaniem. Sprawdzanie walidacji pakietów sprawdza nazwy funkcji, ustawienia, pochodzenie i wymagane pliki; pracownicy tła obsługują reaktywne sondaże i dostawy wychodzące.
Pakiet nie może żądać zdolności Jego kod nie ma.
OpsIQ\Connectors\ConnectorContract jest autorytetem. Odkrycie Runtime, Builder, pakiety first-party, konformance, General API i każde odniesienie przeczytaj ten jeden rejestr. Zdecyduj się zdolność i trzy pliki muszą się ze sobą zgodzić przed OpsIQ / Trasa do ciebie, jeden rząd.
- 01 connector.php klasa biegania
- 02 IdentityProvider.php stabilny klucz zewnętrzny
- 03 SalesIngest.php uzgodnienie sprzedaży ()
- 04 actions.json nazwa operacji
- 05 settings.json konfiguracja operatora
- 06 connector_contract.json Organ do odczytu maszynowego
hmac-sha256 nad deterministycznym ładunkiem danych typu SHA- 256 hashs odpowiedzi został zmodyfikowany od podpisaniaAn ed25519 odpowiedzi na podpisy czy to podpisane przez Nabtech, sprawdzalne z dołączonym kluczem publicznym i bez wspólnej tajemnicy. Edytuj jeden bajt i pierwszy zatrzymuje dopasowanie.
marketplace.json jest poza podpisem z definicji: instalator pisze go po podpisaniu, więc wydawca nigdy nie mógł go podpisać.
Strażnik, który nigdy nie zawiódł. jest nieudowodnione.
Zielone testy mówią, że nic nie zepsuło się dzisiaj. Nie mówią, strażnik, który napisałeś zatrzyma to, co zostało napisane, aby zatrzymać, ponieważ strażnik nigdy nie jest wykonywane przechodzi dokładnie jak strażnik nie robi nic. Więc zatrzymamy jego serce celowo i żądamy, że monitor krzyczy.
211 /* A read role must never reach a destructive operation. */ 212- if ($isRead && $isDestructive) { 212+ if (false) { 213 $errors[] = "read role '{$role}' points at a destructive op"; 214 return false; 215 }
1[ ok ]hash sha256 4f2a9c1e… remember the file exactly as it is 2[ ok ]control exit 0 green BEFORE anything is touched 3[ ok ]mutate 1 match, lint ok one replacement, then php -l the mutant 4[RED ]prove exit 1 and "read role destructive" IS in the failures 5[ ok ]restore bytes written the original, not a regenerated copy 6[ ok ]verify sha256 matches and the check is green again ══ PROVEN. file restored, hash matched, 1 proof run, 0 failed.
Mutacja nigdy nie miała zastosowania.
Tekst wyszukiwania nie pasował, plik został nietknięty, pakiet przeszedł i dowód zapisany zielony pod starym kodem o kodzie, który nigdy nie był stary. Złapany przez wymóg dokładnie jednego dopasowania tekstowego i porównując hash plików z każdej strony.
Mutacja złamała coś innego.
Apartament poszedł czerwony, ponieważ plik przestał parsowanie lub bootstrap zmarł, a dowód zarejestrował czerwony, który nie miał nic wspólnego z strażnikiem. Złapany przez podłączenie mutanta i wymagający Nazwa test wśród niepowodzeń.
Nie może zostawić mutanta na dysku.
Każda mutacja kopiuje oryginał na boczny pasek poza drzewem web- served, pisze marker określający wyjątkową zmianę i jest odłączany przez opiekuna zamykającego na każdej ścieżce wyjścia. Marker z rozbitej trasy jest honorowany przed kolejną mutacją tego pliku.
Certyfikacja jest poleceniem z kodem wyjścia.
Not a review queue where somebody reads your code and forms an opinion. Run the same suites we run, on your own machine, before you submit. 8 published JSON Schemas under doc/contracts/schemas/ pokrycie ustawień, działań, Specyfikacje Builder, mapowania zdarzeń podróży i handlu, przepisy dotyczące przepływu pracy, umowy złączy i manifesty wydania.
- manifests parafuj i zgadzaj się ze sobą
- zdolności istnieją w klasie runtime
- interfaces wdrożony w przypadku zgłoszenia
- files każdy wymagany plik obecny
- działania dopasować działania manifestowane
- destructive oświadczenie o potwierdzeniu
- tożsamość stabilny klucz zewnętrzny, nie e-mail
- powtórka powtarzające się aktualizacje, nigdy nie powiela
- przedsiębiorstwo oświadczenia odpowiadają przedłużeniu
- doki README, DEVELOR, CHANGELOG
- schematy każdy walidat JSON
$ php tools/test_connector_conformance_all.php --connector=acme
$ php tools/test_connector_json_schemas.php
$ php tools/verify_commerce_contracts.php
$ php tools/release_gate_connectors.php --require-signatures
Wyznacz pierwszy na prawdziwym koncie nieprodukcyjnym --live-settings=/secure/test-acme.jsonKiedy będziesz jeszcze iteracko, zamień ostatnią na --unsigned-ok: traktuje brakujący podpis jako oczekiwane ostrzeżenie, a nie udawanie, że jest w porządku.
Oznajmiam, co można sprzedać to plik, nie rejestracja.
Złącze, które może sprzedać deklaruje, który z własne Operacje odpowiadają na role kanoniczne OpsIQ. Obecność pliku jest roszczeniem. Pojawia się w ustawieniach sprzedaży w momencie, gdy deklaruje i znika, kiedy zatrzymuje się. Nie ma listy do dołączenia i nikt nie pyta.
Kanonika pisać rola mapowała do ogólnego zapisu. Mecz jest strukturalny: rzeczownik pamięci obok czasownika mutacji, niezależnie od konwencji nazwy. Pisanie wiersza biznesowego bezpośrednio pomija ceny platformy, blokady dostępności i potwierdzenia poczty, i produkuje zamówienie własny system kupujący tylko połowa wierzy w. Nie recovery - Więc czas byłby niemożliwy do odzyskania.
{
"commerce": {
"roles": {
"catalog_search": { "operation": "acme_search_products", "transport": "http" },
"order_get": { "operation": "acme_get_order", "transport": "http" },
"order_create": { "operation": "acme_create_order", "transport": "http",
"recovery": "acme_get_order" }
}
}
}
connector_contract.json jest generowany i jego zestawy schematów additionalProperties:false, więc ręcznie autorski blok nie będzie udane walidacji i następnie być nadpisane na następnym generatorze uruchomić.
Rola nie w CommerceRole OpsIQ nigdy nie wyciąga żadnego z nazwy operacji, ponieważ nazwa nie jest obietnicą.
Operacja musi pojawić się w Twoim actions.json. Deklaracja, która nie istnieje, obiecuje klientowi coś, co następnie nic nie produkuje.
Najniebezpieczniejszym czasem jest ten po platformie może już wykonały pracę. Bez idempotenta "zrobił mój ziemi pisania" lookup, jedyne opcje są ponownie ślepe lub stracić porządek.
Każda funkcja klasy płatniczej również deklaruje payment_profile z środowisko, webhook_verify korzystanie z systemu własnego dostawcy, oraz event_map. Nieokreślone środowisko jest jak dostawca testowy-tryb pobiera płatność na żywo.
OpsIQ vs a Integracja DIY.
Co za umowa, podpisane, skontrolowane platformy daje Ci, że toczenie własnych haków internetowych i AI- działania hydraulika nigdy nie będzie.
| Zdolność | Zrób własny | OpsIQ |
|---|---|---|
| Scoped Bearer API + HMAC-podpisane webhooki | Walcowane na gorąco | ✓ |
| Dry- run writs + 24- godzina udanej powtórki | DIE | ✓ |
| 1m → 5m → 30m →2h → 12h powtórki | Kolejka DIY | ✓ |
| Rejestr umów o pracę (AI nie może wynaleźć połączeń) | — | ✓ |
| Polityka potwierdzania przed skutkami ubocznymi | — | ✓ |
| Stabilna koperta błędów + ID żądania | Ręczny logowanie | ✓ |
| Bezpośrednie opcje klienta generowane przez HTTP + | Napisz własne | ✓ |
| OpenAPI 3.0.3 umowa do odczytu maszynowego | Może | ✓ |
| Six- stage Builder + brama wydania pakietu | Zbuduj łańcuch narzędzi | ✓ |
| Klucze przymocowane do przestrzeni roboczej i limity godzinowe | Zmienne | ✓ |
| Wzorce złącza: kod platformy pozostaje izolowany | — | ✓ |
Pytania deweloperów, Odebrałem.
Uwierzytelnianie, kontrakty, powtórki, wytwarzanie klientów, bezpieczne testy i model złącza, przed pierwszym wnioskiem o produkcję.
Authorization: Bearer opq_…Klucze mogą być nieograniczone, ograniczone lub tylko read-, nosić skomputeryzowane least- uprzywilejowane, przestrzegać limitu godzinowego i można przypiąć do miejsca pracy. Podpisanie haka jest oddzielny: przesyłki z zewnątrz przenoszą X-OpsIQ-Signature, X-OpsIQ-Timestamp, X-OpsIQ-Event oraz X-OpsIQ-Delivery.hash_hmac('sha256', $rawBody, $secret) i porównać jego sexodecimal digest z X-OpsIQ-Signature stosowanie hash_equalsPotwierdź X-OpsIQ-Timestamp w oknie powtórki i użycia X-OpsIQ-Delivery jako identyfikowalny identyfikator dostawy.dry_run w sprawie działań, których generowany kontrakt wspiera go, uruchomić test połączenia z Connector Builder, sprawdzić jego wygenerowane pliki i przejść konformance pakietu i zwolnić bramy przed traktowaniem złącza jako gotowe.settings.json, opcjonalnie actions.json, generowane umowy zdolności, dokumentacji i opcjonalne rozszerzenia przedsiębiorstwa. Sześcioetapowy Builder go przypomina; rejestr odkrywa go; konformance i zwolnić bramy zatwierdzają go.