Admin API인스타 DM 자동응답
대화 상대 목록
DM 을 주고받은 상대를 최근 활동 순으로, 페이지·검색·받은편지함 필터와 함께 조회합니다.
대화 상대 목록
DM 을 주고받은 상대를 최근 활동 순으로 조회합니다. 상대별 건수(파트너십/일반 구분), 마지막 메시지, 연결되는 우리 크리에이터가 함께 옵니다.
2026-10-01 응답 형태가 바뀌었습니다. data 가 배열이 아니라 items + page 객체이고, limit 대신
page·size 를 받습니다.
HTTP 요청
GET /ai/admin/ig-dm/threads?page=0&size=30&q=give_me&folder=PARTNERSHIP
Authorization: Bearer {access_token}Query Parameters
| 파라미터 | 타입 | 필수 | 설명 |
|---|---|---|---|
page | Integer | 아니오 | 0부터 시작. 기본 0 |
size | Integer | 아니오 | 페이지 크기. 기본 30, 상한 200 |
q | String | 아니오 | 검색어. 계정명 일부(앞의 @ 생략 가능), IGSID, 주고받은 본문 일부 중 하나라도 맞으면 걸립니다. 대소문자 무시 |
folder | String | 아니오 | ALL(기본) / PARTNERSHIP = 파트너십 대화가 있는 상대 / GENERAL = 일반 DM 이 있는 상대 |
influenceId | Integer | 아니오 | 우리 크리에이터 번호. 그 크리에이터의 DM 인증 계정 또는 신청서 인스타 핸들과 같은 상대만 줍니다. 크리에이터 화면에서 DM 이력을 열 때 씁니다 |
campaignNo | Integer | 아니오 | 캠페인 번호. 이 캠페인에 수동 배정된 상대만 줍니다 — 캠페인 보드의 한 열 |
applicationId | Long | 아니오 | 신청 ID. 그 신청서에 적힌 인스타 계정(과 그 신청으로 DM 인증한 계정)의 대화만 줍니다. folder=PARTNERSHIP 과 함께 쓰면 "이 신청자와의 파트너십 대화" — 미비한 일정 DM 위젯용. 주면 influenceId 는 무시합니다. 없는 신청이면 404 |
조건은 모두 AND 로 묶입니다. 한 상대가 두 받은편지함에 다 있으면 PARTNERSHIP·GENERAL 양쪽에 나옵니다.
응답
성공 응답 (200 OK)
{
"status": 200,
"code": null,
"message": "대화 상대 목록을 조회했습니다.",
"data": {
"items": [
{
"peerIgsid": "1699622574467666",
"peerUsername": "give_me_jishin",
"messageCount": 4,
"partnershipMessageCount": 4,
"generalMessageCount": 0,
"repliedCount": 0,
"notAnsweredCount": 0,
"lastActivityAt": "2026-10-01T13:25:11",
"lastMessage": {
"direction": "OUT",
"body": "안녕하세요, Glow.B 입니다. REVCELL 캠페인 관련해서…",
"folder": "PARTNERSHIP",
"at": "2026-10-01T13:25:11"
},
"creators": [
{
"influenceId": 5106,
"name": "홍길동",
"profileImage": "https://…",
"linkedBy": "APPLICATION_HANDLE"
}
],
"campaigns": [
{
"collabNo": 1681,
"title": "[USIMSA] 유심사 일본 eSIM 캠페인",
"assignedBy": "facebook_admin",
"assignedAt": "2026-10-02T13:20:00"
}
]
}
],
"page": { "number": 0, "size": 30, "totalElements": 1, "totalPages": 1 }
}
}| 필드 | 설명 |
|---|---|
peerIgsid | 인스타 사용자 ID. 대화 상세 조회의 키입니다 |
peerUsername | 계정명. 아직 수집되지 않았으면 null |
partnershipMessageCount | 파트너십 받은편지함 건수 |
generalMessageCount | 일반 DM 건수. messageCount = 두 값의 합 |
repliedCount | 자동응답이 실제로 나간 건수 |
notAnsweredCount | 규칙 없음·기준가 없음·차단 등으로 보내지 않은 건수 |
lastMessage | 마지막 메시지. body 는 앞 100자, 차단돼 본문이 없으면 null. 발송하지 않은 OUT 도 마지막 활동이라 그대로 나옵니다 |
creators | 이 인스타 계정으로 연결되는 우리 크리에이터. 없으면 빈 배열 |
creators[].linkedBy | DM_VERIFIED = DM 계정 인증으로 확인 / APPLICATION_HANDLE = 신청서 인스타 링크의 핸들이 같음 |
campaigns | 운영자가 이 상대를 수동 배정한 캠페인. 최근 배정 순, 없으면 빈 배열 |
page | number(0부터), size, totalElements, totalPages |
creators 가 여러 건일 수 있습니다. 한 인스타 계정으로 여러 회원이 신청한 경우입니다(2026-10-01 기준 88개 계정).
APPLICATION_HANDLE 은 계정명이 같다는 단서일 뿐 같은 사람이라는 보장은 아닙니다 — 계정명은 바뀔 수 있습니다.
같은 크리에이터가 두 근거로 다 잡히면 DM_VERIFIED 하나만 나옵니다.
파트너십 구분
인스타는 일반 DM 과 파트너십 메시지(크리에이터 마켓플레이스) 대화를 별도 스레드로 둡니다. 구분은 대화 단위입니다 — 파트너십 받은편지함 동기화로 들어온 대화에 속한 메시지는 우리가 보낸 것까지 모두 파트너십입니다. 파트너십 대화는 웹훅이 없어 릴레이가 1분마다 조회해 쌓으므로 최대 1~2분 늦게 나타납니다.
에러 응답
| 상태 코드 | 설명 |
|---|---|
400 | folder 등 쿼리 값이 잘못됨 (code: VALIDATION_ERROR, HTTP 상태도 400) |
401 | 인증 실패 |
403 | ADMIN 권한 없음 |