> ## Documentation Index
> Fetch the complete documentation index at: https://docs.telloai.io/llms.txt
> Use this file to discover all available pages before exploring further.

# 레퍼런스

> SDK의 클라이언트 옵션과 명령 5종을 한눈에 훑고 상세로 넘어가요.

## 할 수 있는 일

SDK가 주고받는 값을 찾아봐요. 클라이언트 옵션은 이 페이지에 있고, 명령·이벤트·오류는 각각
상세 페이지로 이어져요. 처음 붙이는 중이면 [시작하기](/developer/sdk/quickstart)를 먼저
보세요.

## 클라이언트 옵션

전부 선택이에요. 생략하면 환경변수를 읽고, 그것도 없으면 기본값을 써요.

| 옵션              | 환경변수            | 기본값                       | 설명                               |
| --------------- | --------------- | ------------------------- | -------------------------------- |
| `apiKey`        | `TELLO_API_KEY` | 없음                        | 없으면 클라이언트 생성이 실패해요               |
| `url`           | `TELLO_URL`     | `ws://localhost:3000/sdk` | 프로덕션은 `wss://api.telloai.io/sdk` |
| `openTimeout`   | 없음              | 10초                       | WS 핸드셰이크와 `auth.ok` 대기 상한        |
| `closeTimeout`  | 없음              | 5초                        | 소켓 종료 대기 상한. Java에는 이 옵션이 없어요    |
| `authRequestId` | 없음              | 없음                        | `auth.ok`에 그대로 에코돼요              |

옵션 전달 방식은 언어 관례를 따라요. Node는 객체 리터럴, Python은 키워드 인자,
Go는 `WithURL` 같은 함수형 옵션, Java는 `ClientConfig`예요. Java에서는 `openTimeout`이
`connectTimeoutMillis` 하나로 합쳐져 있어요.

## 명령

| 명령           | 설명                | 상세                                                |
| ------------ | ----------------- | ------------------------------------------------- |
| `createCall` | 수신번호로 발신을 시작해요    | [createCall](/developer/sdk/commands/create-call) |
| `answer`     | 현재 턴에 답변 텍스트를 보내요 | [answer](/developer/sdk/commands/answer)          |
| `sendDtmf`   | 키패드 입력을 보내요       | [sendDtmf](/developer/sdk/commands/send-dtmf)     |
| `cancel`     | 진행 중인 통화를 끊어요     | [cancel](/developer/sdk/commands/cancel)          |
| `getSummary` | 완료된 통화의 요약을 조회해요  | [getSummary](/developer/sdk/commands/get-summary) |

명령 호출은 프레임을 보내고 바로 반환해요. 통화가 끝날 때까지 기다리려면 `waitClosed`를 쓰고,
소켓을 닫을 때는 `aclose`(Node·Python) 또는 `Close`(Go)를 호출해요.

`waitClosed`는 통화가 종단 상태(`call.completed` · `call.noAnswer` · `call.failed`, 또는
`cancelled` 상태)에 이르거나 연결이 닫히면 풀려요. 통화를 끝낸 오류가 있으면 그 오류를 다시
던지므로, 거부된 `createCall`이 멈춘 채 남지 않아요.

<Warning>
  `requestId`는 명령과 응답 프레임을 짝지어 주는 값이에요. **멱등성 키가 아니에요.** 같은
  `requestId`로 다시 보내면 명령이 한 번 더 실행돼요.
</Warning>

## 이벤트 · 오류

| 주제  | 설명                                | 상세                           |
| --- | --------------------------------- | ---------------------------- |
| 이벤트 | 게이트웨이가 보내는 13종과 채워지는 필드, 통화 상태 9종 | [이벤트](/developer/sdk/events) |
| 오류  | 오류 코드 19종과 대응하는 클래스, 연결 종료 코드     | [오류](/developer/sdk/errors)  |

## 주의사항

* 에이전트는 서버가 정해요. 명령에 `agentId`를 넣지 않아요.
* 한 연결에서 활성 통화는 하나예요.
* 재연결·세션 재개 프로토콜이 없어요. 비정상 종료는 통화를 처음부터 다시 시작해요.

프레임 계약 전문은 각 SDK 저장소의 `docs/protocol/sdk-ws.v1.md`에 있어요.

## 관련 문서

* [시작하기](/developer/sdk/quickstart)
* [연동 준비](/developer/overview)
* [통화 목록 / 상세](/calls/list)
