세션 리플레이 API
인증 및 요청 요구 사항
- 모든 엔드포인트는 HTTP 기본 인증을 사용합니다. 프로젝트의 API 키를 사용자 이름으로 사용하고 비밀 키를 암호로 사용하십시오.
- 이
project_id매개변수는 필요하지 않습니다. 인증된 API 키는 프로젝트를 식별합니다. - 미리 서명된 파일 URL은 15분 후에 만료됩니다.
- 페이지 매기기 커서는 불투명한 문자열입니다. 그것들을 만들거나 수정하지 마십시오. 이전 응답의
next_page_token을(를) 그대로 전달합니다. - 이
sort_order매개 변수는 페이지화된 요청의 모든 페이지에서 일관적이어야 합니다.sort_order=desc가 포함된asc요청에서page_token을(를) 전달하면 400 오류가 반환됩니다. amplitude_id와replay_id은 상호 배타적입니다. 둘 다 전달하면 400 오류가 반환됩니다.replay_id와page_token은 상호 배타적입니다. 둘 다 전달하면 400 오류가 반환됩니다.- 각
replay_id값은device_id/session_id형식을 사용해야 합니다. 선행 또는 후행 슬래시를 사용하면 400 오류가 반환됩니다. - 요청당 최대 100개의
replay_id값을 전달할 수 있습니다. 101 이상을 전달하면 400 오류가 반환됩니다. amplitude_id유효한 정수여야 합니다. 숫자가 아닌 값은 400 오류를 반환합니다.replay_id을 사용할 때 API는page_size을(를) 무시하고 항상null을(를)next_page_token(으)로 반환합니다.
EU 데이터 상주
EU 데이터 상주국의 경우 https://amplitude.com을(를) 대신 https://analytics.eu.amplitude.com을(를) 기본 URL로 사용하십시오. 예를 들면 다음과 같습니다.
- 세션 재생 목록:
GET https://analytics.eu.amplitude.com/api/1/session-replays - 세션 리플레이 파일 가져오기:
GET https://analytics.eu.amplitude.com/api/1/session-replays/files
세션 재생 목록 표시
인증된 프로젝트에 대한 세션 재생의 페이지별 목록을 반환합니다.
GET https://amplitude.com/api/1/session-replays
curl --location 'https://amplitude.com/api/1/session-replays' \
-u '{api_key}:{secret_key}'
쿼리 매개 변수
| 이름 | 설명 |
|---|---|
start_time | 선택 사항입니다. ISO 8601 문자열입니다. 재생 시 하한계(포함)start_time입니다. 예를 들어 2024-01-01T00:00:00Z. |
end_time | 선택 사항입니다. ISO 8601 문자열입니다. 재생 시 상한값 start_time(포함)입니다. 예를 들어 2024-01-31T23:59:59Z. |
amplitude_id | 선택 사항입니다. 정수입니다. 결과를 필터링하여 특정 Amplitude 사용자 ID에 속한 재생으로 만듭니다. replay_id와 상호 배타적입니다. |
replay_id | 선택 사항입니다. 문자열입니다. 결과를 ID별로, device_id/session_id 형식의 특정 리플레이로 필터링합니다.%2F 구분 기호를 /로 URL 인코딩합니다. 이 매개 변수를 반복하여 최대 100회의 재생을 요청합니다. amplitude_id 및 page_token와 상호 배타적입니다. 이 매개변수를 사용할 경우 page_size은(는) 무시되며 next_page_token은(는) 항상 null입니다. |
page_size | 선택 사항입니다. 정수입니다. 페이지당 결과 수입니다. 기본값은 50이고 최대값은 200입니다. replay_id가 지정된 경우 무시됩니다. |
page_token | 선택 사항입니다. 문자열입니다. 이전 응답의 next_page_token에서 가져온 불투명한 페이지 매기기 커서입니다. replay_id와 상호 배타적입니다. |
sort_order | 선택 사항입니다. 문자열. asc은(는) 가장 오래된 재생을 먼저 반환합니다(기본값). desc은(는) 가장 최근의 재생을 먼저 반환합니다. page_token를 사용할 때는 페이지 간에 일관성이 있어야 합니다. |
응답
{
"session_replays": [
{
"replay_id": "string",
"session_id": "string",
"device_id": "string",
"amplitude_id": 123456,
"start_time": "2024-01-01T00:00:00Z",
"end_time": "2024-01-01T00:05:00Z",
"retention_in_days": 90
}
],
"next_page_token": "string | null"
}
| 속성 | 설명 |
|---|---|
session_replays | 세션 리플레이 객체의 배열입니다. |
session_replays[].replay_id | 리플레이의 고유 식별자이며, device_id/session_id 형식입니다. 파일을 가져올 때 이것을 replay_id 매개변수로 사용하십시오. |
session_replays[].session_id | 세션 식별자입니다. |
session_replays[].device_id | 디바이스 식별자입니다. |
session_replays[].amplitude_id | Amplitude 사용자 ID입니다. |
session_replays[].start_time | 세션이 시작된 시점의 ISO 8601 타임스탬프입니다. |
session_replays[].end_time | 세션이 종료된 시점의 ISO 8601 타임스탬프입니다. |
session_replays[].retention_in_days | Amplitude가 재생 데이터를 보존하는 일수입니다. |
next_page_token | 다음 페이지를 검색하기 위해 page_token(으)로 전달할 불투명 커서입니다. 결과가 더 이상 없을 때는 null입니다. |
세션 리플레이 파일 가져오기
특정 재생에 속하는 이벤트 파일에 대한 미리 서명된 S3 URL의 페이지별 목록을 반환합니다. 각 URL은 rrweb 이벤트의 gzip 압축 JSON 배열을 가리킵니다. Amplitude는 시작 시간을 인코딩하는 키별로 파일을 정렬합니다.
GET https://amplitude.com/api/1/session-replays/files
curl --location 'https://amplitude.com/api/1/session-replays/files?replay_id={device_id}%2F{session_id}' \
-u '{api_key}:{secret_key}'
쿼리 매개 변수
| 이름 | 설명 |
|---|---|
replay_id | 필수입니다. 문자열입니다. 재생 식별자입니다(device_id/session_id 형식). / 구분 기호를 %2F(으)로 URL 인코딩합니다. |
version | 선택 사항입니다. 정수입니다. 기록 형식 버전입니다. 2 또는 3입니다. 기본값은 3입니다. |
page_size | 선택 사항입니다. 정수입니다. 페이지당 파일 수입니다. 기본값은 100이고 최대값은 1000입니다. |
page_token | 선택 사항입니다. 문자열입니다. 이전 응답의 next_page_token에서 가져온 불투명한 페이지 매기기 커서입니다. |
응답
{
"files": [
"https://s3.amazonaws.com/...presigned-url-1...",
"https://s3.amazonaws.com/...presigned-url-2..."
],
"next_page_token": "string | null"
}
| 속성 | 설명 |
|---|---|
files | 미리 서명된 S3 URL의 배열입니다. 각 URL은 rrweb 이벤트의 gzip 압축 JSON 배열을 제공합니다. URL은 15분 후에 만료됩니다. |
next_page_token | 다음 페이지를 검색하기 위해 page_token(으)로 전달할 불투명 커서입니다. 파일이 더 이상 없으면 null입니다. |
재생 파일의 압축 해제 및 구문 분석
각 파일의 형식은 요청하신 version에 따라 다릅니다.
버전 3
각 파일은 gzip 압축을 사용합니다. 파일의 압축을 풀어 rrweb 플레이어에 전달할 준비가 된 rrweb 이벤트의 JSON 배열을 얻습니다.
async function fetchReplayEvents(fileUrl) {
const response = await fetch(fileUrl);
// The response is gzip-compressed; fetch decompresses automatically in browsers.
// In Node.js 18+, use the DecompressionStream API or the zlib module.
const buffer = await response.arrayBuffer();
const text = new TextDecoder().decode(buffer);
return JSON.parse(text); // array of rrweb events
}
그 결과는 rrweb 이벤트들의 JSON 배열입니다:
[
{ "type": 4, "data": { "href": "https://example.com", "width": 1440, "height": 900 }, "timestamp": 1700000000000 },
{ "type": 2, "data": { ... }, "timestamp": 1700000000050 },
...
]
버전 2
버전 2 파일에는 두 가지 압축 해제 단계가 필요합니다.
- gzip 압축 해제를 통해 파일을 압축 해제한 다음 JSON 구문 분석 → 압축된 문자열의 배열을 수행합니다.
- 각 문자열을 zlib로 압축 해제합니다. 각 요소는 JSON으로 인코딩되고 zlib로 압축된(DEFLATE) 바이너리 페이로드 → rrweb 이벤트 객체입니다.
const zlib = require("zlib");
async function fetchReplayEventsV2(fileUrl) {
const response = await fetch(fileUrl);
const buffer = Buffer.from(await response.arrayBuffer());
// Step 1: gzip decompress the file, then JSON parse → array of packed strings
const packedStrings = JSON.parse(zlib.gunzipSync(buffer).toString("utf8"));
// Step 2: unpack each string
return packedStrings.map((packed) => {
// Each packed string is itself a JSON string whose value is a latin1-encoded
// binary blob of zlib-compressed event data.
const compressedBinary = JSON.parse(packed);
const buf = Buffer.from(compressedBinary, "latin1");
return JSON.parse(zlib.inflateSync(buf).toString("utf8")); // rrweb event
});
}
이벤트 재생
전체 세션을 재생하려면 재생할 모든 파일을 순서대로 가져오고, 각 파일의 압축을 풀고, 이벤트 배열을 연결한 다음 결과를 Amplitude의 rrweb 플레이어에 전달하십시오. 업스트림 rrweb 대신 Amplitude의 포크를 사용하십시오. 포크에는 업스트림 버전과 호환되지 않을 수 있는 수정 사항이 포함되어 있기 때문입니다.
const events = (await Promise.all(fileUrls.map(fetchReplayEvents))).flat();
rrweb.replay({ events, root: document.getElementById("player") });
상태 및 오류 코드
| 코드 | 설명 |
|---|---|
200 OK | 요청이 성공했습니다. |
400 Bad Request | 매개 변수 값이 잘못되었습니다. 자세한 내용은 오류 메시지를 확인하십시오. |
401 Unauthorized | API 자격 증명이 누락되었거나 잘못되었습니다. |
404 Not Found | 주어진 replay_id에 대한 데이터를 찾을 수 없습니다. Amplitude는 첫 페이지에서만 이 오류를 반환합니다. |
이 내용이 도움이 되었나요?