CandidateLaunch
https://us1.proctorapi.comBody
受験者 URL を作成するための受験者リクエスト。
試験中のページ URL(試験の URL)およびリダイレクトと一致する正規表現である必要があります。複数ページにわたる問題がある場合、これは重要です。これまたは exam_end パラメータと一致しない他のページにアクセスした場合、試験を離れたと見なされ、セッションは完了したと見なされます。
URL が試験の状態を反映しない場合(シングルページアプリケーション)、postMessage メソッドを使用して、Proctorio 拡張機能に exam_take の状態を通知できます:
window.top.postMessage( ["exam_state_change", "exam_take"], "https://getproctorio.com" );
postMessage メソッドを使用する場合、"exam_take" には "post_message_nofication" の値が必要です。
試験終了ページ(試験が完了した際に受験者が移動する URL)および可能なリダイレクトと一致する正規表現である必要があります。これにより監視セッションが終了し、試験が送信されたと見なされます。これまたは exam_take パラメータと一致しない他のページにアクセスした場合、試験を離れたと見なされ、監視セッションは終了しますが、正常に送信されたとは見なされません。
URL が試験の状態を反映しない場合(シングルページアプリケーション)、postMessage メソッドを使用して、Proctorio 拡張機能に exam_end の状態を通知できます:
window.top.postMessage( ["exam_state_change", "exam_end"], "https://getproctorio.com" );
postMessage メソッドを使用する場合、"exam_end" には "post_message_nofication" の値が必要です。
1, Maximum value is 18000.^[a-zA-Z0-9-]*$."domain" パラメータはオプションです。"domain" を使用することで、試験ページおよび Reviewer Center が指定したドメインで読み込まれます。
URL は https://getproctorio.com ページを指さなくなります。代わりに、受験者/レビューアーはパラメータで指定した新しいルートに転送されます。例: https://yourdomain.com。
これにより、SameSite cookies や X-Frame-Options: SAMEORIGIN ヘッダーを使用する追加のクロスオリジンセキュリティメカニズムを利用できます。また、ストレージパーティショニングブラウザ機能に関連するセッションまたはローカルストレージのデータ損失を防ぐことができます。
https://getproctorio.com ページには以下の機能があります: 受験者/レビューアーがサポートされているブラウザをインストールしているかの確認。受験者/レビューアーが Proctorio 拡張機能をインストールしているかの確認。これらの機能を維持するには、機関のページに getproctorio.com の目的を説明するコンテンツと共に https://getproctorio.com へのリンクが必要です。
拡張機能許可リストのエンドポイント URL です。HTTP メソッド: GET。レスポンスは JSON 文字列化された配列である必要があります。例: '[extensionID1,extensionID2]'。
extension_allowlist_url は、機関によってブラウザで拡張機能が強制的に有効化されている受験者に使用できます。これらの拡張機能は受験者が手動で無効にすることはできません。
'extensionID' の値は、監視試行中にアクティブのまま許可される拡張機能の ID に対応する必要があります。
^[a-zA-Z0-9-]*$.^(?!goodbye$|support$|update$|setup$|invalid$).*.コース ID またはセクション ID の値を表します。このパラメータはオプションです。試験のより詳細なソートを提供します。
これは、同じ "exam_tag" でも異なる "section_id" を持つ試験が、異なる試験として扱われることを意味します。
"section_id" パラメータは "roster_url" パラメータに依存しており、それなしでは使用できません。
名簿のエンドポイント URL です。HTTP メソッド: GET。レスポンスは JSON 文字列化された配列である必要があります。例: '[["id1","name1"],["id2","name2"]]'
"id" の値は "userId" パラメータに対応し、受験者に固有で、名簿内で重複しないものである必要があります。
名簿エンドポイントは Proctorio によって検証されるため、無効なエンドポイントが提供された場合、または "userId" が配列内のいずれの "id" 値とも一致しない場合、試行は Review Center で「Unmatched」としてマークされます。
roster_url は Review Center または試験同意ページにアクセスするエンドユーザーによってクライアントサイドでフェッチされ、Proctorio が直接フェッチするものではありません。そのため、特定のユーザーのセッションで保護できます。これは意図的なものであり、受験者起動リクエストやレビューアー起動リクエストにおいて、PII を Proctorio に渡す必要はありません。
レスポンス200application/json成功を示し、受験者 URL を返します。
400application/json不正なリクエストを示します。
401application/json未承認のレスポンスを示します。
2154 - アカウントが有効ではありません。
2155 - リージョンが正しくありません。
2655 - api_key が無効です。
成功を示し、受験者 URL を返します。
不正なリクエストを示します。
未承認のレスポンスを示します。
2154 - アカウントが有効ではありません。
2155 - リージョンが正しくありません。
2655 - api_key が無効です。
curl --request POST \
--url https://us1.proctorapi.com/v2/candidate/launch \
--header 'Content-Type: application/json' \
--header 'api_key: $API_KEY' \
--data '{"launch_url":"https://example.com/exam","exam_start":"https://example.com/exam","exam_take":"https://example.com/exam","exam_end":"https://example.com/exam","exam_settings":{"record_video":true,"record_audio":false,"record_screen":false,"verify_video":false},"user_id":"example-id-123"}' import requests
url = "https://us1.proctorapi.com/v2/candidate/launch"
payload = {
"launch_url": "https://example.com/exam",
"exam_start": "https://example.com/exam",
"exam_take": "https://example.com/exam",
"exam_end": "https://example.com/exam",
"exam_settings": {
"record_video": True,
"record_audio": False,
"record_screen": False,
"verify_video": False
},
"user_id": "example-id-123"
}
headers = {
"api_key": "$API_KEY",
"Content-Type": "application/json"
}
response = requests.post(url, json=payload, headers=headers)
print(response.json()) const fetch = require('node-fetch');
const url = 'https://us1.proctorapi.com/v2/candidate/launch';
const options = {
method: 'POST',
headers: {api_key: '$API_KEY', 'Content-Type': 'application/json'},
body: '{"launch_url":"https://example.com/exam","exam_start":"https://example.com/exam","exam_take":"https://example.com/exam","exam_end":"https://example.com/exam","exam_settings":{"record_video":true,"record_audio":false,"record_screen":false,"verify_video":false},"user_id":"example-id-123"}'
};
try {
const response = await fetch(url, options);
const data = await response.json();
console.log(data);
} catch (error) {
console.error(error);
} using System.Net.Http.Headers;
var client = new HttpClient();
var request = new HttpRequestMessage
{
Method = HttpMethod.Post,
RequestUri = new Uri("https://us1.proctorapi.com/v2/candidate/launch"),
Headers =
{
{ "api_key", "$API_KEY" },
},
Content = new StringContent("{\"launch_url\":\"https://example.com/exam\",\"exam_start\":\"https://example.com/exam\",\"exam_take\":\"https://example.com/exam\",\"exam_end\":\"https://example.com/exam\",\"exam_settings\":{\"record_video\":true,\"record_audio\":false,\"record_screen\":false,\"verify_video\":false},\"user_id\":\"example-id-123\"}")
{
Headers =
{
ContentType = new MediaTypeHeaderValue("application/json")
}
}
};
using (var response = await client.SendAsync(request))
{
response.EnsureSuccessStatusCode();
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
} {
"launch_url": "https://example.com/exam",
"exam_start": "https://example.com/exam",
"exam_take": "https://example.com/exam",
"exam_end": "https://example.com/exam",
"exam_settings": {
"record_video": true,
"record_audio": false,
"record_screen": false,
"verify_video": false
},
"user_id": "example-id-123"
}