> ## 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.

# 외부에서 호출받기

> 다른 AI 에이전트가 Tello에 전화를 맡기고, 통화 중 대화를 주고받게 열어요.

## 할 수 있는 일

외부 AI 에이전트가 A2A 프로토콜(JSON-RPC)로 Tello에 통화를 맡겨요. 통화 목표를 메시지로
보내면 Tello가 전화를 걸고, 상대방이 한 말이 태스크 상태 업데이트로 스트리밍돼요. 판단이
필요한 순간에는 태스크가 `input-required`로 올라오고, 거기에 답하면 그 말이 통화에서
발화돼요.

```bash A2A Endpoint theme={null}
https://api.telloai.io
```

<Info title="SDK와 뭐가 다른가요">
  [SDK](/developer/sdk/quickstart)는 여러분 코드가 WebSocket으로 턴마다 응답해요. A2A는 이미
  A2A를 말하는 외부 에이전트에 통화를 **작업으로 위임**하는 방식이에요. 대화의 두뇌가 그
  에이전트예요.
</Info>

## 시작하기 전에

포털 로그인이 필요하고, 발신 조건은 [연동 준비](/developer/overview)에서 확인하세요.

포털 **A2A** 화면에서 `+ 새 Key 발급`으로 키를 만들어요. 키에 **연결 에이전트**를 정하면 그
키로 건 통화가 해당 에이전트로 진행돼요. 정하지 않으면 메시지에 담은 통화 목표만으로 통화가
진행돼요. 연결 에이전트는 목록의 드롭다운에서 언제든 바꿀 수 있어요.

<Warning>
  통화에 쓸 에이전트는 **키에만 묶여요.** 메시지로는 지정할 수 없어요. 다른 에이전트를 쓰려면
  그 에이전트에 연결된 키를 따로 발급하세요.
</Warning>

## 사용 방법

인증은 `Authorization: Bearer <A2A_KEY>` 헤더를 써요. 아래 예시들은 A2A `0.3` 형식이에요.
Agent Card는 `1.0`과 `0.3`을 함께 광고하고 게이트웨이가 양쪽을 받아요. A2A SDK로 붙으면
보통 `1.0`(`SendMessage` · `SendStreamingMessage`)으로 연결돼요.

### Agent Card

에이전트의 능력·엔드포인트 명세예요. **인증 없이 조회할 수 있어요.**

```bash theme={null}
curl "https://api.telloai.io/.well-known/agent-card.json"
```

`capabilities.streaming`이 `true`이고 `skills`에 `voice-turn-bridge` 하나가 있어요. 그 스킬
설명에 통화 시작부터 종료까지의 계약이 영문으로 적혀 있어요.

### 전형적인 흐름

```text theme={null}
1. message/stream        통화 시작 + 진행 수신    → submitted → working
2. (상대 발화가 스트림으로)                        → working
3. input-required 도착                            → 스트림 정상 종료
4. message/send          taskId + role: agent     → 답변이 통화에서 발화
5. tasks/resubscribe     같은 태스크 다시 열기     → working 부터 이어짐
6. (2~5 반복)
7. completed / failed / canceled                  → 스트림 닫힘
```

## 메서드

| 메서드                 | 설명                    | 상세                                                            |
| ------------------- | --------------------- | ------------------------------------------------------------- |
| `message/send`      | 통화를 시작하거나 답변을 보내요     | [message/send](/developer/a2a/methods/message-send)           |
| `message/stream`    | 통화를 시작하고 발화를 SSE로 받아요 | [message/stream](/developer/a2a/methods/message-stream)       |
| `tasks/resubscribe` | 끊긴 스트림을 다시 열어요        | [tasks/resubscribe](/developer/a2a/methods/tasks-resubscribe) |
| `tasks/cancel`      | 통화를 끊고 태스크를 취소해요      | [tasks/cancel](/developer/a2a/methods/tasks-cancel)           |
| `tasks/get`         | 현재 상태만 확인해요           | [tasks/get](/developer/a2a/methods/tasks-get)                 |

## 상태 · 오류

| 주제     | 설명               | 상세                                   |
| ------ | ---------------- | ------------------------------------ |
| 태스크 상태 | 상태 6종과 전이 흐름     | [태스크 상태](/developer/a2a/task-states) |
| 오류     | 인증·검증 오류 15종과 대응 | [오류](/developer/a2a/errors)          |

## 주의사항

* 실제 통화가 발신되고 크레딧이 차감돼요. 통제된 테스트 수신번호로만 시험하세요.
* 통화 시작에는 `metadata.to`가 필수예요. 없으면 전화도 걸리지 않아요.
* 통화에 쓸 에이전트는 키에 묶여요. 메시지로 지정할 수 없어요.
* Agent Card는 인증 없이 열려요. 키를 붙일 필요가 없어요.
* 전체 키는 발급 직후 한 번만 볼 수 있어요. 분실하면 폐기 후 재발급해요.
* 폐기하면 즉시 사용할 수 없어요.

## 관련 문서

* [외부 에이전트 쓰기](/developer/a2a/outbound)
* [연동 준비](/developer/overview)
* [MCP](/developer/mcp)
