Admin API크리에이터 DM 발송
DM 발송
인증된 크리에이터에게 인스타그램 DM 을 보냅니다. 다건 요청과 부분 성공을 지원합니다.
DM 발송
HTTP 요청
POST /ai/admin/dm/send
Authorization: Bearer {admin_access_token}
Content-Type: application/json{
"recipients": [
{ "applicationId": 1234 },
{ "influenceId": 5308 }
],
"content": "촬영 마감이 내일입니다. 확인 부탁드립니다.",
"campaignNo": 3214,
"via": "API",
"instance": "test_glowb_kor",
"force": false
}Request Body
| 필드 | 타입 | 필수 | 설명 |
|---|---|---|---|
recipients | Array | 예 | 수신자 목록. 최대 100명 |
content | String | 예 | 보낼 내용. DM 은 제목이 없어 본문 하나 |
campaignNo | Integer | 아니오 | 캠페인 번호. 판정에는 쓰지 않고 로그에 남는다 |
via | String | 아니오 | API / AUTODM. 미지정 시 API 먼저, 실패분만 AutoDM |
instance | String | 조건부 | AutoDM 으로 나갈 때 필요 |
force | boolean | 아니오 | 수신을 중단한 크리에이터에게도 보낼지. 기본 false |
recipients 항목
| 필드 | 타입 | 설명 |
|---|---|---|
applicationId | Integer | 신청 번호. 이쪽이 우선 |
influenceId | Integer | 크리에이터 번호. 신청 맥락 없이 보낼 때 |
기존 수동 발송(SMS)의 우선순위와 같습니다 — 정확도 순으로 applicationId 를 먼저 씁니다.
미비한 일정 화면처럼 신청 번호를 늘 갖고 있는 곳은 그대로 넘기면 됩니다.
대상 해석은 TB_APPLICATION.no → member_id → TB_INFLUENCE.no → TB_CREATOR_DM_LINK
순으로 이어집니다. 신청 테이블에 크리에이터 번호가 없어 회원 아이디를 거칩니다.
응답
성공 응답 (200 OK)
{
"status": 200,
"message": "DM 발송 요청 완료",
"data": {
"requested": 2,
"ok": 1,
"failed": 1,
"autoDmRunId": "061bda10-b2d0-49f3-99d4-235ddc863030",
"results": [
{
"applicationId": 1234,
"influenceId": 88,
"ok": true,
"via": "API",
"messageId": "aWdfZAG1faXRlbToxOklHTWVzc2..."
},
{
"influenceId": 5308,
"ok": false,
"reason": "인증된 인스타 계정이 없습니다. 크리에이터가 먼저 계정 인증을 마쳐야 합니다."
}
]
}
}| 필드 | 설명 |
|---|---|
requested | 요청한 수신자 수 |
ok | 발송되었거나 큐에 들어간 수 |
failed | 실패한 수 |
autoDmRunId | AutoDM 을 썼을 때만. 여러 명이면 런 하나에 묶인다 |
results | 대상별 성패와 사유 |
한 명이 막혀도 나머지는 그대로 나갑니다. 부분 성공이 정상이므로 results 를 반드시
확인하세요. 전체 실패로 보이지 않습니다.
AutoDM 은 비동기입니다
via 가 AUTODM 이면 응답의 ok 는 "보냈다"가 아니라 "큐에 넣었다" 입니다.
실제 결과는 엔진이 콜백으로 알려주고 TB_AUTO_DM_TARGET 에 쌓입니다 —
AutoDM 런 상세에서 확인하세요.
여러 명을 보내면 런 하나에 묶입니다. 런은 인스턴스당 하나씩 직렬로 처리되므로, 따로 만들면 인스턴스를 여러 번 점유하게 됩니다.
에러 응답
| 상태 코드 | 설명 |
|---|---|
400 | 내용이 비었거나, 수신자가 없거나, 100명 초과 |
401 / 403 | 관리자 권한 아님 |
대상별 실패(인증 없음·수신 중단·핸들 없음)는 오류가 아니라 results 안에 담겨 옵니다.
실패 사유
| 사유 | 뜻 |
|---|---|
| 인증된 인스타 계정이 없습니다 | 크리에이터가 계정 인증을 안 마쳤다 |
| 수신을 중단한 크리에이터입니다 | force: true 로 다시 요청하면 나간다 |
| 핸들이 기록돼 있지 않아 AutoDM 으로 보낼 수 없습니다 | 인증 초기 기록. 다시 인증하면 채워진다 |
| instance 를 지정해야 합니다 | AutoDM 경로인데 인스턴스가 없다 |
| 릴레이 발송 설정이 없습니다 | relay-base-url 또는 verify-secret 미설정 |
24시간 창이 닫힌 경우는 메타가 돌려준 사유가 그대로 실려 옵니다. 서버가 창을 따로 계산하지 않기 때문입니다.
설정
glowb:
creator-dm-link:
verify-secret: 릴레이와 공유하는 시크릿 (발송 인증에도 사용)
relay-base-url: 릴레이 주소발송은 릴레이를 거칩니다. 메타 자격증명이 두 군데로 나뉘지 않게 하려는 것이고, 발송 이력도 수신과 같은 테이블에 모여야 대화 조회에서 한 흐름으로 보입니다.