Gumawa ng iyong plataporma Opera ng Aida.
Tawagin ang 2,430 pinangalanang operasyon sa pamamagitan ng iisang API na nabuo mula sa kontrata, na may mga scope na pinakamababa ang pahintulot, pagtali sa workspace, dry-run na pagpapatunay, at mga sulat na ligtas ulitin. Mag-subscribe sa mga canonical na event sa pamamagitan ng HMAC-signed na background webhook, o bumuo ng pinamamahalaang pack sa anim na hakbang na Connector Builder.
Iprito ang kahilingan. Tandaan.
Mag-POST ng aksyon sa /api/v1.php na may accessed Bearer key. OpsIQ pink ang workspace, pinapatunayan ang kontrata sa aksiyon at mga pahintulot, pagkatapos ay isinasagawa o pinapatuyo-runs ito. ihinatawan ang kanonikal na mga pangyayari na nag-iiwan sa isang HMAC-signed delivery queue na may mga matutuntong pagtatangka at nakataling retries.
Mula sa susi hanggang sa pinamamahalaang pagsasama - sama tatlong hakbang.
Issue a thin-privilege key, diskubre ang nalikhang kontrata, dry-run a was write, pagkatapos ay mag-skripto ng isang webhook kapag ang inyong aplikasyon ay nangangailangan ng background na pangyayari na paghahatid.
Kumuha ng susi
Mag-sign up at bumuo ng isang nakalaan Bearer API key (opq_…) sa mga landscaper setting, at ibigay ang bawat pagsasanib lamang ng mga ibabaw na kailangan nito.
Natuklasan & Patotoo
Basahin meta.actions, meta.action at meta.scopes; gamitin dry_run upang patunayan na siya'y sumulat bago patayin.
Exective & kripto
Magdagdag ng isang idempotensiyal na susi para sa pagsusulat, pagkatapos ay i-script ang inyong endpoint sa kanonikal na mga pangyayari na kailangan ng inyong aplikasyon.
Iisang pattern ng connector. Limang malilinis na primado.
Anumang platform-specific ay nakatira sa isang connektor. Ang platform. OpsIQ Ang core ay nananatiling generic, ang AI ay nananatiling mahuhulaan, at ang inyong pagsasama - sama ay nananatiling hindi mababago.
Sabihin OpsIQ kung ano ang nangyari.
Ang mga kanonikal na pangyayari mula sa iyong plataporma, o ang pagbibigay ng kahulugan sa isang pinamamahalaang kaganapang pang-ugali. Ang mga subscriber ay tumatanggap ng pangyayari sa pamamagitan ng nakarehistrong mga tuntuning priyoridad at pahatid.
Pangyayaring reperensiyainvoice.paid, ticket.created, subscription.cancelled, customer.signed_up o ikaw.
Mga subscriber na Fan-outAng utak ng AI, mga tuntunin sa automation, mga koneksiyon sa salamin at ang iyong mga webhook endpoint ay pawang tumutugon.
presidensiyal na kaayusanAng tiyak na mga pahatid kaya ang mga salamin ay sumusulat bago mag - anunsyo ng apoy.
Sabihin OpsIQ kung ano ang pinahihintulutang gawin ng AI.
Ang bawat isang operasyong pinangalanan ay tumatanggap ng kontratang panglikha: saklaw, tampok, pagbasa o pagsusulat ng uri, panganib, patakarang kumpil, kahilingan at tugon sa sekwensiya, suportang dry-run, idempotensiya at matatag na mga pagkakamali.
Aksiyong schema{
"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"] }
}
Ilagay ang mga pangyayari sa iyong salansanan ng cryptographic proof.
Mag-subscribe ng anumang URL sa alinman sa 53 maihahatid na event. Ipinapadala ng OpsIQ ang JSON payload sa pamamagitan ng POST, pinirmahan ng HMAC-SHA256 sa bersyon ng schema, timestamp, delivery ID at body nang magkakasama, hindi lang ang body, kaya hindi na maaaring ulitin laban sa iyo ngayon ang delivery kahapon.
$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
Gumamit ng direktang HTTP o lumikha ng kliyente na gusto mo.
Ang Buong HeneralAPI ay inilalathala bilang OpenAPI 3.0.3 at Postman. PHP reference senderss plat Node and Python integration clients sumasaklaw sa mga napirmang pangyayari at mga daloy ng webhook; ang anumang salansan ay maaaring tumawag ng parehong talaksan JSON tuwirang lumilitaw ang pagkilos.
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.",
},
)
Magtayo ng isang beses.
Ang isang connektor ay isang pinamamahalaang pakete na nililikha o inangkat sa pamamagitan ng Identity, Auth, Test, Actions, Triggers and Review. OpsIQ ay hinahayaang magbilad.
Buksan ang anim-na-stage na TagapagtayoAng wikang Ingles ay ginagamit. Ang indibidwal na operasyon.
OpsIQ Ito ay hindi nag-imbento ng tamang tawag. ito ay naglalakad sa mga nakarehistrong kontrata, naghahanda ng payload, humihingi ng kumpil kapag ang aksiyon ay nangangailangan nito, at gumagawa ng isang kumpletong audit row kapag ito ay nagpapatupad, kaya isang AI na maaaring mag-isyu ng isang AI na pwedeng gumawa ng isang ganap na audit kumilos Huwag kang maging AI na hindi mo mapagkakatiwalaan.
API pang - ibabaw sa isang sulyap.
Isang JSON POST na ibabaw ang naglalantad ng 2,430 pinangalanang aksyon. Idinedeklara ng bawat nabuong kontrata ang mga auth scope, uri ng pagbasa/pagsulat, panganib, kumpirmasyon, schema ng request, dry-run, idempotency, at matatag na error.
ACTION tickets.replytickets.writetuyong_run + idempotensiyaNakukumpirma / orasACTION security.reportsecurity.writetuyong_run + idempotensiyaNakukumpirma / orasACTION platform.routes.writeadminkumpil + susiNakukumpirma / orasACTION meta.actionsPagkatuklas ng publikoMagbasa lamangNakukumpirma / orasACTION tickets.listtickets.readMagbasa lamangNakukumpirma / orasACTION connectors.listconnectors.readMagbasa lamangNakukumpirma / orashr.* kontrata · hr.read / hr.write saklawACTION hr.people.listhr.readMagbasa lamangNakukumpirma / orasACTION hr.people.createhr.writetuyong_run + idempotensiyaNakukumpirma / orasACTION hr.org.treehr.readMagbasa lamangNakukumpirma / orashr ay tumatanggi, hindi sa walang - saysay na listahan. Ang HR ng PeopleOS.Ang mga limitasyon sa bilis ay nakaayos sa bawat susi sa isang bintanang may oras. X-RateLimit-Limit, X-RateLimit-Remaining at X-RateLimit-Reset; nagbalik ang tinanggihang kahilingan 429 kasama Retry-After. Gamitin ang OpenAPI 3.0.3 kontrata o Postman koleksyon na mula sa parehong runtime registry.
Magtayo, subukin at ilabas anim na yugto.
Magsimula mula sa isang pinamamahalaang profile o bigyan ng kahulugan ang kontrata. Ang Tagapagtayo ay nagbibigay-diin sa bawat yugto bago ito lumikha ng sariling-contaited connector na pakete.
Maging maingat, pagkatapos ay dumaan sa pintong de - free.
Gamitin dry_run sa suportadong mga gawa ng pagsulat, pangasiwaan ang naka-taling pagsubok sa koneksyon ng Magtatayo, at siyasatin ang nalikhang maniprodyus at kontrata bago ilabas. pakete aficiation checks may kakayahang pangalan, settings, resoundance at nangangailangan ng files; background workers hawakan ang reactitive polling at outbound delivery.
Hindi maaaring mag-angkin ng kakayahan ang pakete Wala ang kodigo nito.
OpsIQ\Connectors\ConnectorContract ay ang awtoridad. Runtime Discovery, ang Tagapagtayo, first-party packages, paayon, ang General API at bawat reperensiya ay kababasahan na ang isang rehistro ay nagpapahayag ng kakayahan at tatlong files na kailangang magkasundo muna bago OpsIQ ay may iisang hanay na patungo sa iyo.
- 01 connector.php ang klase sa oras ng pagtakbo
- 02 IdentityProvider.php matatag na panlabas na key
- 03 SalesIngest.php Mga couple()
- 04 actions.json Mga operasyong ipinangalan sa pangalan
- 05 settings.json pagsasaayos ng operator
- 06 connector_contract.json machine-basahing awtoridad
hmac-sha256 sa ibabaw ng isang deterministikong payload ng per-file SHA-256 mga kasagutan ay binago mula nang pumirma. An. ed25519 Mga sagot sa lagda ang nilagdaan nito Nabtech, na-secure sa pamamagitan ng naka-breast na public key at walang kabahaging lihim. Edit isang byte at ang unang paghinto ay nagtutugma.
marketplace.json ay nasa labas ng lagda sa pamamagitan ng pagpapakahulugan: ang installer ay sumusulat nito pagkatapos pumirma, kaya hindi ito maaaring nilagdaan ng mamamahayag.
Isang bantay na hindi kailanman nabigo ay hindi mapatunayan.
Hindi sinasabi sa iyo ng mga bagong pagsubok na ang bantay na iyong isinulat ay itigil ang bagay na ito, sapagkat ang isang guwardiya na hindi kailanman nag - eehersisyo ay dumaraang kagayang - kagaya ng isang guwardiyang walang ginagawa. Kaya't ating pinipigil ang puso nito sa layunin, at hinihiling na ang monitor ay sumigaw.
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.
Hindi kailanman ginamit ang mutasyon.
Ang tekstong hinahanap ay hindi tugma, ang talaksan ay hindi pa tapos, ang suite ay lumipas, at ang patotoong naitala berde sa ilalim ng matandang kodigo Napaliligiran ng isang eksaktong pag - uugnay ng teksto at paghahambing ng talaksang hashes sa magkabilang panig.
Ang mutasyon ay sumira ng iba pang bagay.
Ang suite ay namula dahil ang file ay tumigil sa parsing o ang bootrap ay namatay, at ang patunay ay nag-rekord ng isang pula na walang kaugnayan sa bantay. Pangalan subukin ang mga kabiguan.
Hindi ito makapag - iiwan ng isang mutant sa disk.
Bawat mutasyon ay naggaya ng orihinal sa isang sidecar sa labas ng punong web-served, sumulat ng marka na ipinangalan ang katangi-tanging pagbabago, at muling ginagawa ng isang deflux handler sa bawat daanang labasan. Ang isang marker mula sa isang nakabanggang pagtakbo ay pinararangalan bago ang susunod na mutasyon ng file na iyon.
Ang certification ay isang utos na may kodigo ng labasan.
Hindi ito review queue kung saan babasahin ng isang tao ang code mo at magbibigay ng opinyon. Patakbuhin sa sarili mong makina ang parehong mga test suite na pinapatakbo namin bago ka magsumite. Sakop ng 8 nailathalang JSON schema sa doc/contracts/schemas/ ang mga setting, aksyon, spec ng Builder, pagmamapa ng mga event ng paglalakbay at commerce, recipe ng workflow, kontrata ng connector, at manifest ng release.
- manifests I-parse at magkasundo
- kakayahan Umiiral sa klase ng runtime
- interfaces Ikinapit kung saan ipinahayag
- files ang bawat hinihiling na talaksang naroroon
- pagkilos ang ipinakikita ng mga kilos
- destructive sabi ng kumpil
- Kung sino matatag na panlabas na key, hindi email
- Muling pag - iensayo isang paulit - ulit na update, hindi kailanman kinopya
- Negosyo Ang mga deklarasyon ay tumutugma sa ekstensiyon
- mga doc PAGBABASA, PAGTANGGAP SA ESPER, ATBELOG
- Mga schema bawat isa JSON Mga Patotoo
$ 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
Ituro ang una sa isang tunay na hindi-produksiyon na account kasama ang --live-settings=/secure/test-acme.json. Habang ikaw ay nag - iinteriya pa, ipagpalit mo ang huling nabanggit sa --unsigned-ok: itinuturing nito ang nawawalang lagda bilang isang inaasahang babala sa halip na pagkukunwari ito ay mainam.
Pagsasabi ng puwede mong ipagbili ay isang file, hindi isang pagpaparehistro.
Ang isang kawing na maaaring magbenta ay nagpapahayag kung alin sa sarili nito sagot ng mga operasyon OpsIQ Ang pag-aangkin ay lumilitaw sa mga marketing settings ang sandaling ito ay nagpapahayag at naglalaho kapag tumigil na ito. walang listahan upang sumali at walang sinuman na magtatanong.
Isang kanonikal sumulat Ang papel na ipinasulat sa isang rekord ng generic ay ang kayarian: isang panaguring pangngalan sa tabi ng pandiwang panlapi, anuman ang pangalan mo. Ang pagsulat ng hanay ng negosyo ay tuwirang pag - anap sa prising ng plataporma, madaling pagkuha at pagbibigay ng sulat, at paggawa ng utos na bahagya lamang pinaniniwalaan ng mismong sistema ng negosyante. recovery Isa pa, hindi rin naman maaaring alisin ang isang timeout.
{
"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 ay nililikha at ang mga set nito ng schema additionalProperties:false, kaya ang isang hand-authored block doon ay hindi ma-fixation at pagkatapos ay overriged sa susunod na generator run.
Isang papel na wala sa CommerceRole ay hindi umiiral. OpsIQ Hindi kailanman umaagaw sa pangalan ng isang operasyon, sapagkat ang pangalan ay hindi isang pangako.
Ang operasyon ay dapat na lumitaw sa iyong katawan actions.json. Ang paghahayag sa isa na hindi umiiral ay nangangako sa parokyano ng isang bagay na pagkatapos ay walang anumang nagagawa.
Ang pinakamapanganib na timeout ay ang isa pagkatapos marahil ay nagawa na ng plataporma ang trabaho. Walang isang idempotenteng "ginawa ang aking lupang panulat" na hitsura, ang tanging mga pagpipilian ay retry blind o pagkawala ng order.
Ipinahayag din ang anumang papel na pay-class payment_profile kasama ng kapaligiran, webhook_verify paggamit ng sariling pakana ng tagapaglaan, at event_map. Ang isang hindi nabanggit na kapaligiran ay kung paano kumukuha ng live na kabayaran ang isang test-mode provider.
OpsIQ vs a DIY na integrasyon.
Ang isang kontrata-bound, napirmahan, audited platform ay nagbibigay sa iyo na ang paggulong ng iyong sariling mga webhook at AI-action tubercum ay hindi kailanman magiging.
| May Kakayahan | Igulong ang sarili mong lakas | OpsIQ |
|---|---|---|
| Layunin Bearer API + HMAC-signed webhooks | Naka-roled | ✓ |
| Si Dry-run ay nagsusulat + 24-oras matagumpay na muling pag-play | DIY | ✓ |
| 1m→5m→30m→ 2h → 12hMga retrition | MADIG NA queue | ✓ |
| Action-contract register (Hindi makaimbento ng tawag ang AI) | — | ✓ |
| patakarang kumpil sa harap ng mga side-productions | — | ✓ |
| Matutto error envelope + request IDs | Manu - manong pagtotroso | ✓ |
| Tuwirang HTTP + lumikha ng mga pagpipiliang kliyente | Isulat ang sarili mong mga akda | ✓ |
| OpenAPI 3.0.3 machine-readable kontrata | Siguro | ✓ |
| Anim na-stage Builder + pakete release gate | Gumawa ng isang kagamitan | ✓ |
| Mga susing pang-workspace-pined at mga limitasyong oras-oras | Mga Varyo | ✓ |
| Pattern: Ang kodigo ng plataporma ay nananatiling nakabukod | — | ✓ |
Mga tanong na bumabangon, ang sagot.
Ang awdisyon, kontrata, retries, client generation, ligtas na pagsubok at ang connektor model, bago ang unang produksyon kahilingan.
Authorization: Bearer opq_…. Mga susi ay maaaring hindi nalilimitahan, nililimitahan o nababasa-lamang, magdala ng mga di-pribilehiyong saklaw, sumunod sa isang oras na hangganan at maaaring i-incan sa isang workspace. Webhook signing ay hiwalay: outbound carry feeds X-OpsIQ-Signature, X-OpsIQ-Timestamp, X-OpsIQ-Event at X-OpsIQ-Delivery.hash_hmac('sha256', $rawBody, $secret) at ihambing ang hexadecimal na pagtunaw nito sa lusaw na sangkap X-OpsIQ-Signature paggamit hash_equals. E. Ebangheliko X-OpsIQ-Timestamp sa loob ng iyong replaying window at gamitin X-OpsIQ-Delivery bilang ang matutuntong pang-edukasyon na identifier.dry_run sa mga aksyong sinusuportahan ng nabuong kontrata, patakbuhin ang limitadong connection test ng Connector Builder, suriin ang mga nabuong file nito, at ipasa ang package conformance at mga release gate bago ituring na handa ang connector.settings.json, opsyonal actions.json, isang gawang kontrata sa kakayahan, dokumentasyon at opsyonal na mga ekstensyon ng negosyo. Ang anime-stage Builder ay nagtitipon nito; natutuklasan ito ng registry; ang pag-ayon at pagpapalabas ng mga tarangkahan ay nagpapatunay dito.