메시지
메시지는 수신함에서 보내거나 받은 개별 이메일을 나타냅니다. 풍부한 HTML 이메일을 보내고, 전송 상태를 추적하고, 수신한 답장을 읽으세요.
개요
메시지는 수신함에 연결된 단일 이메일입니다. 에이전트가 이메일을 보내면 발신 메시지가 생성됩니다. 누군가 에이전트 주소로 답장하거나 이메일을 보내면 수신 메시지가 자동으로 생성됩니다.
모든 메시지는 스레드에 속합니다. 답장의 경우 기존 스레드에, 새로운 대화가 시작되면 자동으로 생성되는 새 스레드에 속합니다.
메시지는 일단 생성되면 변경할 수 없습니다. 후속 메시지를 보내려면 threadId를 전달하여 동일한 스레드에 새 메시지를 만드세요.
이메일 보내기
POST /inboxes/{inboxId}/messages
수신함의 messages 엔드포인트로 POST하여 이메일을 보냅니다. to 배열과 subject는 필수이며 나머지는 선택 사항입니다.
요청 본문
| 필드 | 타입 | 설명 |
|---|---|---|
to 필수 |
string[] | 수신자 이메일 주소 배열. |
subject 필수 |
string | 이메일 제목. |
cc |
string[] | 참조 수신자. |
bcc |
string[] | 숨은참조 수신자. 다른 수신자에게 보이지 않습니다. |
bodyText |
string | 일반 텍스트 본문. bodyHtml도 제공될 때 대체용으로 사용됩니다. |
bodyHtml |
string | HTML 본문. bodyText와 bodyHtml을 모두 제공하면 이메일이 multipart/alternative로 전송됩니다. |
threadId |
string | 답장할 스레드. 생략하면 새 스레드가 생성됩니다. |
attachmentIds |
string[] | 포함할 이전에 업로드된 첨부파일 ID들. |
const res = await fetch( `https://api.agentsend.io/inboxes/${inboxId}/messages`, { method: "POST", headers: { "x-api-key": process.env.AGENTSEND_API_KEY, "Content-Type": "application/json", }, body: JSON.stringify({ to: ["customer@example.com"], subject: "Following up on your request", bodyText: "Hi, just checking in on your request.", bodyHtml: "<p>Hi, just checking in on your request.</p>", }), } ); const message = await res.json(); console.log(message.id); // msg_abc123 console.log(message.delivery); // "email" or "dry-run" console.log(message.status); // "queued"
메시지 속성
API가 반환하는 각 메시지 객체는 다음 필드를 갖습니다.
| 속성 | 타입 | 설명 |
|---|---|---|
id |
string | 메시지의 고유 식별자. |
inboxId |
string | 이 메시지가 속한 수신함. |
threadId |
string | 이 메시지가 그룹화된 대화 스레드. |
direction |
string | 에이전트가 보낸 이메일은 outbound, 받은 이메일은 inbound. |
fromAddress |
string | 발신자 이메일 주소. |
toAddresses |
string[] | 주 수신자. |
ccAddresses |
string[] | 참조 수신자. |
subject |
string | 이메일 제목. |
bodyText |
string | 일반 텍스트 본문 내용. |
bodyHtml |
string | HTML 본문 내용. |
delivery |
string | 환경이 실제 이메일을 보냈는지(email) 시뮬레이션만 했는지(dry-run)를 나타냅니다. |
status |
string | 현재 전송 상태. 아래 메시지 상태를 참조하세요. |
attachments |
object[] | id, filename, contentType, size를 포함하는 첨부파일 객체 배열. |
messageIdHeader |
string | 이메일 클라이언트의 스레딩에 사용되는 RFC 5322 Message-ID 헤더 값. |
createdAt |
string | 메시지가 생성된 시각 (ISO 8601). |
메시지 상태
발신 메시지는 전송 라이프사이클을 거칩니다. 먼저 delivery를 확인해 환경이 실제 메일을 보냈는지 시뮬레이션만 했는지 확인한 다음, status 또는 웹훅을 사용해 공급자 측 라이프사이클을 추적하세요.
발신 라이프사이클
- queued — 메시지가 수락되었고 전송 대기 중입니다.
- sending — 메시지가 수신자의 메일 서버로 전송 중입니다.
- sent — 메시지가 수신자 메일 서버에 의해 수락되었습니다.
- delivered — 전송이 확인되었습니다 (수신 서버에서 지원하는 경우).
실패 상태
- failed — 일시적 또는 영구적 오류로 전송이 실패했습니다. 자세한 원인은 웹훅 페이로드를 확인하세요.
- bounced — 수신자 주소가 존재하지 않거나 서버가 메시지를 영구적으로 거부했습니다.
- complained — 수신자가 이메일을 스팸으로 신고했습니다.
수신 메시지
- received — 외부 발신자로부터 이메일이 수신함에 도착했습니다.
메시지가 bounced 또는 complained 상태에 도달하면 발신자 평판을 보호하기 위해 해당 주소로 추가 이메일 전송을 피하세요.
메시지 목록 조회
GET /inboxes/{inboxId}/messages
수신함의 메시지를 페이지네이션된 목록으로 가져옵니다. 상태별로 필터링하여 수신 답장, 전송 실패 등을 찾을 수 있습니다.
| 쿼리 파라미터 | 타입 | 설명 |
|---|---|---|
limit |
number | 반환할 메시지 수. 기본값 20, 최대 100. |
offset |
number | 페이지네이션을 위해 건너뛸 메시지 수. 기본값 0. |
status |
string | 상태로 필터링. queued, sending, sent, delivered, failed, bounced, complained, received 중 하나. |
// Fetch the 10 most recent inbound messages const res = await fetch( `https://api.agentsend.io/inboxes/${inboxId}/messages?status=received&limit=10`, { headers: { "x-api-key": process.env.AGENTSEND_API_KEY } } ); const { data, total } = await res.json(); for (const msg of data) { console.log(msg.fromAddress, msg.subject, msg.bodyText); }
폴링 대신 웹훅을 사용해 새 메시지가 도착하는 즉시 알림을 받으세요. 폴링은 간단한 스크립트나 단명 작업에 좋은 대안입니다.
HTML vs 일반 텍스트
AgentSend는 일반 텍스트, HTML, 멀티파트 이메일을 지원합니다. 일반 텍스트는 bodyText, HTML 콘텐츠는 bodyHtml을 사용하세요.
bodyText만 제공하면 이메일은text/plain으로 전송됩니다.bodyHtml만 제공하면 이메일은text/html로 전송됩니다.- 둘 다 제공하면 이메일은
multipart/alternative로 전송됩니다. HTML을 지원하는 이메일 클라이언트는 HTML 버전을 표시하고, 그렇지 않은 경우 일반 텍스트 버전으로 대체됩니다.
bodyHtml과 함께 항상 bodyText 버전도 포함하세요. 전송 가능성, 접근성, 일반 텍스트 이메일 클라이언트와의 호환성이 향상됩니다.
메시지 삭제
DELETE /messages/{id}
ID로 메시지를 삭제합니다. 이는 AgentSend에서 메시지 레코드를 제거합니다. 이미 수신자 메일함에 전송된 이메일은 회수하지 않습니다.
await fetch(`https://api.agentsend.io/messages/${messageId}`, { method: "DELETE", headers: { "x-api-key": process.env.AGENTSEND_API_KEY }, });
메시지 삭제는 영구적입니다. 활성 스레드의 일부인 수신 메시지는 신중히 삭제하세요. 스레드 기록이 불완전해집니다.