Jinsi yote yanavyoungana
- Unda funguo na uongeze tovuti zako kwenye koni.
- Kwa mitihani ya mazoezi, bandika kipande cha msimbo kwenye ukurasa wako.
- Kwa majaribio yako, seva yako inaanzisha jaribio na kupokea anwani ya kuanzia.
- Ukurasa wako unaifungua, mtahiniwa anafanya jaribio, na matokeo yanakufikia kupitia webhook au API.
Funguo
pk_test_pk_live_- Funguo zinazoweza kuchapishwa huwekwa kwenye kurasa zako za wavuti. Zinafungua mitihani ya mazoezi pekee, kwenye tovuti ulizoorodhesha.
sk_test_sk_live_- Funguo za seva zinafanya kazi kwa niaba ya shirika lako. Zihifadhi kwenye seva yako na usizitume kamwe kwa kivinjari.
Funguo za majaribio zinafanya kazi mara moja na hazihesabiwi kwenye mpango wako. Funguo za live zinahitaji akaunti yako iidhinishwe.
Mitihani ya mazoezi
Ongeza hati mara moja, kisha weka mtihani popote unapotaka. Fremu hujirekebisha yenyewe kulingana na maudhui.
<div id="gb-test"></div>
<script src="https://www.supergb.com/cbt/js/embed/v1.js"></script>
<script>
GreenBridge.mount("#gb-test", { key: "pk_live_...", paper: "PAPER_ID" });
</script>
Mtihani ni kitambulisho kinachoonyeshwa na kijenzi cha kipande cha msimbo kwenye koni yako. Ongeza mode: "exam" kwa masharti ya mtihani wenye muda.
Majaribio yako
Andika majaribio kwenye koni chini ya Majaribio na uyafungue. Mtahiniwa akiwa tayari, seva yako inaanzisha jaribio:
curl -X POST https://www.supergb.com/cbt/partner-api/v1/sessions \
-H "Authorization: Bearer $GREEN_BRIDGE_KEY" \
-H "Content-Type: application/json" \
-d '{"test_id": "TEST_ID", "language": "fr", "candidate": {"id": "learner-42", "name": "Ada Obi", "email": "ada@example.com"}}'
candidate.id ni kitambulisho chako mwenyewe cha mtu huyo, hadi herufi 128. Jina na barua pepe si lazima; tunahifadhi tu unachotuma.
language si lazima: mojawapo ya de, en, es, fr, yo, ig, ha, nl, pt, sw. Vitufe, kipima muda na ujumbe wa jaribio vitaonekana kwa lugha hiyo; maswali yako yatabaki kama ulivyoyaandika. Bila sehemu hii, jaribio litakuwa kwa Kiingereza.
Jibu lina anwani ya kuanzia inayofanya kazi mara moja, ndani ya dakika 10. Ifungue kwenye ukurasa wako:
HTTP/1.1 201 Created
{
"attempt_id": "att_...",
"launch_token": "lt_...",
"launch_url": "https://www.supergb.com/cbt/fr/embed/v1/test?launch=lt_...",
"launch_expires_at": "2026-10-23T09:10:00Z",
"live": true,
"language": "fr"
}
<div id="gb-test"></div>
<script src="https://www.supergb.com/cbt/js/embed/v1.js"></script>
<script>
GreenBridge.mountTest("#gb-test", {
launchUrl: "LAUNCH_URL_FROM_YOUR_SERVER",
onEvent: function (event) {
if (event.type === "submitted") {
showThanks(event.detail.attempt_id);
}
}
});
</script>
Baada ya kufunguliwa, jaribio hudumu hadi saa 24 na kupakia upya kunaliendeleza. Kila mtahiniwa hufanya kila jaribio mara moja.
Kuorodhesha majaribio yako na vitambulisho vyake:
curl https://www.supergb.com/cbt/partner-api/v1/tests -H "Authorization: Bearer $GREEN_BRIDGE_KEY"
Ujumbe kutoka kwenye fremu
onEvent hupokea hizi, kutoka kwenye fremu yetu pekee:
| Tukio | Maana |
|---|---|
ready | Ukurasa umepakia. |
resize | Urefu wa maudhui umebadilika. Fremu inafuata yenyewe. |
completed | Mtihani wa mazoezi umesahihishwa. detail ina score na max_score. |
submitted | Jaribio limewasilishwa. detail ina attempt_id. Pata matokeo kutoka kwenye seva yako, si kwenye kivinjari. |
Matokeo
Majaribio yaliyowasilishwa, mapya kwanza, 50 kwa kila ukurasa. Chuja kwa test_id, candidate_id au vyote viwili.
curl "https://www.supergb.com/cbt/partner-api/v1/attempts?test_id=TEST_ID&page=0" -H "Authorization: Bearer $GREEN_BRIDGE_KEY"
curl https://www.supergb.com/cbt/partner-api/v1/attempts/ATTEMPT_ID -H "Authorization: Bearer $GREEN_BRIDGE_KEY"
Jaribio linaonekana hivi. questions hujumuishwa kuanzia mpango wa Growth.
{
"id": "att_...",
"test_id": "TEST_ID",
"candidate_id": "learner-42",
"live": true,
"language": "fr",
"started_at": "2026-10-23T09:02:11Z",
"submitted_at": "2026-10-23T09:41:57Z",
"integrity_events": 0,
"score": 34.0,
"max_score": 40.0,
"percent": 85.0,
"grading_status": "fully_graded",
"questions": [
{"question_id": "q1", "type": "multiple_choice_question", "score": 1.0, "max_score": 1.0}
]
}
grading_status ni fully_graded wakati hakuna kilichobaki cha kusahihisha kwa mkono, vinginevyo pending_manual_review au pending_transcription.
Webhook
Ongeza hadi anwani 5 za https kwenye koni yako. Kila tukio hutumwa kama POST iliyotiwa saini na hujaribiwa tena kwa siku 3 hadi seva yako ijibu kwa hali ya 2xx.
| Tukio | Maana |
|---|---|
attempt.started | Mtahiniwa amefungua jaribio. |
attempt.submitted | Mtahiniwa amewasilisha. |
attempt.graded | Alama zote ni za mwisho. Hutumwa tena kila alama inapobadilika. |
attempt.integrity_flagged | Mtahiniwa ameondoka kwenye jaribio au amejaribu kunakili au kubandika mara 3. |
ping | Tukio la majaribio lililotumwa kutoka kwenye koni yako. |
POST /hooks/green-bridge
Content-Type: application/json
Green-Bridge-Event: attempt.graded
Green-Bridge-Delivery: whd_...
Green-Bridge-Signature: t=1792834917,v1=5f0c...
{
"id": "evt_graded_att_..._1",
"type": "attempt.graded",
"created_at": "2026-10-23T10:21:57Z",
"data": { "id": "att_...", "candidate_id": "learner-42", "score": 34.0, "max_score": 40.0, "grading_status": "fully_graded" }
}
Kitambulisho cha tukio hakibadiliki, kwa hivyo unaweza kupuuza kwa usalama tukio ulilokwisha kushughulikia.
Kukagua saini
Kokotoa HMAC-SHA256 ya t, nukta moja na mwili wa ombi kama ulivyo, kwa siri yako ya kutia saini, kisha ulinganishe na v1. Kataa muhuri wa muda uliozidi dakika tano.
Node.js
const crypto = require("crypto");
function isFromGreenBridge(header, rawBody, secret) {
const parts = Object.fromEntries(header.split(",").map(part => part.split("=")));
if (!parts.t || !parts.v1 || Math.abs(Date.now() / 1000 - Number(parts.t)) > 300) {
return false;
}
const expected = crypto.createHmac("sha256", secret).update(parts.t + "." + rawBody).digest("hex");
return expected.length === parts.v1.length
&& crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(parts.v1));
}
Python
import hashlib, hmac, time
def is_from_green_bridge(header, raw_body, secret):
parts = dict(part.split("=", 1) for part in header.split(","))
if "t" not in parts or abs(time.time() - int(parts["t"])) > 300:
return False
signed = parts["t"].encode() + b"." + raw_body
expected = hmac.new(secret.encode(), signed, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, parts.get("v1", ""))
Hitilafu
Hitilafu hurudi kama JSON yenye msimbo usiobadilika:
HTTP/1.1 404 Not Found
{"error": {"code": "test_not_found"}}
| Msimbo | HTTP | Maana |
|---|---|---|
invalid_key |
401 | Ufunguo haupo, haujulikani au umebatilishwa. |
partner_suspended |
403 | Akaunti yako imesimamishwa. Wasiliana nasi. |
live_keys_need_approval |
403 | Funguo za live hufanya kazi akaunti yako ikishaidhinishwa. |
not_on_plan |
403 | Mpango wako haujumuishi hiki. |
test_not_found |
404 | Hakuna jaribio lako lenye kitambulisho hicho. |
attempt_not_found |
404 | Hakuna jaribio lililofanywa lako lenye kitambulisho hicho. |
candidate_not_found |
404 | Huna mtahiniwa mwenye kitambulisho hicho. |
test_not_open |
409 | Jaribio bado halijafunguliwa au limefungwa. |
already_submitted |
409 | Mtahiniwa huyu amekwisha kuwasilisha jaribio hili. |
invalid_request |
400 | Sehemu fulani haipo au haiko katika muundo unaotarajiwa. |
monthly_limit_reached |
429 | Kiwango cha mwezi huu kimeisha. Funguo za majaribio bado zinafanya kazi. |
internal_error |
500 | Kuna hitilafu upande wetu. Jaribu tena. |
Mipaka na data
- Hadi maombi 300 kwa dakika kwa kila ufunguo wa seva. Zaidi ya hapo jibu ni 429 bila maudhui; subiri dakika moja ujaribu tena.
- Majaribio ya live na usahihishaji wa AI huhesabiwa kwenye kiwango cha kila mwezi cha mpango wako. Majaribio yaliyoanzishwa kwa ufunguo wa majaribio hayahesabiwi.
Data yako
Tunachohifadhi kuhusu majaribio na watahiniwa wako, kwa muda gani, na jinsi ya kukirejesha.
- Majaribio na maswali yako
- Huhifadhiwa hadi uyafute au ufunge akaunti yako.
- Watahiniwa
- Kitambulisho unachotuma, na jina na barua pepe ikiwa tu unazituma. Huhifadhiwa kwa mwaka mmoja tangu mtahiniwa alipoonekana mara ya mwisho.
- Majaribio yaliyofanywa na matokeo
- Majibu, rekodi, alama na matukio ya uadilifu. Huhifadhiwa kwa mwaka mmoja tangu jaribio lilipoanza, kisha hufutwa.
- Mitihani ya mazoezi
- Huhifadhiwa kwa mwaka mmoja, ili kuhesabu matumizi yako tu. Alama hufika kwenye ukurasa wako katika tukio la completed.
- Uwasilishaji wa webhook
- Huhifadhiwa kwa siku 30, kwenye kumbukumbu ya uwasilishaji ya dashibodi yako.
- Matumizi ya API
- Hesabu za kila siku kwa kila ufunguo, huhifadhiwa kwa siku 400, kwenye skrini ya Matumizi ya dashibodi yako.
Pata matokeo wakati wowote kwa GET /attempts. Kwenye mipango ya Growth na Institution unaweza pia kupakua matokeo ya kila jaribio kama CSV kutoka kwenye menyu ya jaribio katika dashibodi yako: mstari mmoja kwa kila jaribio lililofanywa pamoja na alama ya kila swali, na jibu la mtahiniwa kwa maswali uliyoandika. Maswali kutoka benki ya maswali ya Green Bridge huonyesha alama zao tu.
Ili kumfuta mtahiniwa mmoja mapema:
curl -X POST https://www.supergb.com/cbt/partner-api/v1/candidates/erase \
-H "Authorization: Bearer $GREEN_BRIDGE_KEY" \
-H "Content-Type: application/json" \
-d '{"candidate_id": "learner-42"}'
Matokeo ambayo mtahiniwa anahifadhi kwenye akaunti yake mwenyewe ya Green Bridge ni yake kuanzia hapo. Kumfuta mtahiniwa au kufunga akaunti yako hakuyaondoi.
Mmiliki wa akaunti yako anaweza kuifunga chini ya Tovuti na funguo. Funguo na webhook husimama mara moja na kila kitu kilicho hapo juu hufutwa ndani ya siku moja, kwa hivyo pakua unachohitaji kwanza.
Ahadi zinazosimamia hili zimo katika Washirika na Uchakataji wa Data katika Sheria na Masharti yetu.
Unahitaji kitu ambacho mipango haijumuishi? Tumia Wasiliana nasi kwenye skrini ya Mpango kwenye koni yako.