메시지

메시지는 수신함에서 보내거나 받은 개별 이메일을 나타냅니다. 풍부한 HTML 이메일을 보내고, 전송 상태를 추적하고, 수신한 답장을 읽으세요.

개요

메시지는 수신함에 연결된 단일 이메일입니다. 에이전트가 이메일을 보내면 발신 메시지가 생성됩니다. 누군가 에이전트 주소로 답장하거나 이메일을 보내면 수신 메시지가 자동으로 생성됩니다.

모든 메시지는 스레드에 속합니다. 답장의 경우 기존 스레드에, 새로운 대화가 시작되면 자동으로 생성되는 새 스레드에 속합니다.

메시지는 일단 생성되면 변경할 수 없습니다. 후속 메시지를 보내려면 threadId를 전달하여 동일한 스레드에 새 메시지를 만드세요.

이메일 보내기

POST /inboxes/{inboxId}/messages

수신함의 messages 엔드포인트로 POST하여 이메일을 보냅니다. to 배열과 subject는 필수이며 나머지는 선택 사항입니다.

요청 본문

필드 타입 설명
to 필수 string[] 수신자 이메일 주소 배열.
subject 필수 string 이메일 제목.
cc string[] 참조 수신자.
bcc string[] 숨은참조 수신자. 다른 수신자에게 보이지 않습니다.
bodyText string 일반 텍스트 본문. bodyHtml도 제공될 때 대체용으로 사용됩니다.
bodyHtml string HTML 본문. bodyTextbodyHtml을 모두 제공하면 이메일이 multipart/alternative로 전송됩니다.
threadId string 답장할 스레드. 생략하면 새 스레드가 생성됩니다.
attachmentIds string[] 포함할 이전에 업로드된 첨부파일 ID들.
javascript
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 또는 웹훅을 사용해 공급자 측 라이프사이클을 추적하세요.

발신 라이프사이클

실패 상태

수신 메시지

메시지가 bounced 또는 complained 상태에 도달하면 발신자 평판을 보호하기 위해 해당 주소로 추가 이메일 전송을 피하세요.

메시지 목록 조회

GET /inboxes/{inboxId}/messages

수신함의 메시지를 페이지네이션된 목록으로 가져옵니다. 상태별로 필터링하여 수신 답장, 전송 실패 등을 찾을 수 있습니다.

쿼리 파라미터 타입 설명
limit number 반환할 메시지 수. 기본값 20, 최대 100.
offset number 페이지네이션을 위해 건너뛸 메시지 수. 기본값 0.
status string 상태로 필터링. queued, sending, sent, delivered, failed, bounced, complained, received 중 하나.
javascript
// 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을 사용하세요.

💡

bodyHtml과 함께 항상 bodyText 버전도 포함하세요. 전송 가능성, 접근성, 일반 텍스트 이메일 클라이언트와의 호환성이 향상됩니다.

메시지 삭제

DELETE /messages/{id}

ID로 메시지를 삭제합니다. 이는 AgentSend에서 메시지 레코드를 제거합니다. 이미 수신자 메일함에 전송된 이메일은 회수하지 않습니다.

javascript
await fetch(`https://api.agentsend.io/messages/${messageId}`, {
  method: "DELETE",
  headers: { "x-api-key": process.env.AGENTSEND_API_KEY },
});

메시지 삭제는 영구적입니다. 활성 스레드의 일부인 수신 메시지는 신중히 삭제하세요. 스레드 기록이 불완전해집니다.