Admin API인스타 DM 자동응답
개요
인스타그램 DM 자동응답의 구조와 어드민 API 목록입니다.
인스타 DM 자동응답
@glow.b_kor 인박스로 들어온 DM 을 규칙에 따라 자동응답하고, 그 이력을 저장합니다.
어디서 무엇을 하나
DM 수신·판정·발송은 Cloud Run 릴레이(glowb-ig-dm-relay)가 담당하고,
glowb-server 는 조회와 규칙 관리만 합니다.
수신부를 서버 밖에 둔 이유는 메타 콜백 URL 이 앱당 하나이기 때문입니다. test 와 prod 가 같은 앱을 쓰므로, 어느 한쪽 서버에 직접 붙이면 다른 쪽이 웹훅을 받지 못합니다.
Meta ──▶ 릴레이 (Cloud Run) glowb-server ──▶ 어드민 화면
HMAC 검증 · 에코 필터 조회 · 규칙 관리
규칙 판정 · 발송 · 적재
└──────────▶ 크롤 Postgres ◀──────────┘저장소
크롤 Postgres 의 ig_dm_message(대화 이력)와 ig_dm_rule(규칙)입니다.
이 DB 는 환경 무관입니다. test 서버도 같은 DB 를 보므로 test/prod 어드민이 같은 데이터를 봅니다. DM 은 인스타 계정이 하나뿐이라 애초에 환경 구분이 없어 성질이 맞습니다.
대화 이력은 읽기 전용입니다. 쓰는 쪽은 릴레이 하나뿐이며, 쓰기 경로를 둘로 만들면 중복·순서 문제가 생깁니다. 규칙만 이 API 로 관리합니다.
안전장치
| 층 | 내용 |
|---|---|
| 메타 역할 필터 | Standard Access 에서는 앱 역할자와의 대화만 접근됩니다 |
| 화이트리스트 | 릴레이 코드 상수. 화면에서 실수로 열 수 없게 하려는 의도적 선택입니다 |
| Flagsmith | ig_dm_auto_reply_enabled. 못 읽으면 꺼진 것으로 봅니다 |
| 근거 없는 금액 차단 | QUOTE 규칙인데 기준가를 못 구하면 발송하지 않습니다 |
엔드포인트
| 메서드 | 경로 | 설명 |
|---|---|---|
| GET | /ai/admin/ig-dm/threads | 대화 상대 목록 |
| GET | /ai/admin/ig-dm/threads/:peerIgsid/messages | 대화 상세 |
| GET | /ai/admin/ig-dm/rules | 규칙 목록 |
| POST | /ai/admin/ig-dm/rules | 규칙 추가 |
| PUT | /ai/admin/ig-dm/rules/:id | 규칙 수정 |
| DELETE | /ai/admin/ig-dm/rules/:id | 규칙 삭제 |
전부 ADMIN 권한이 필요합니다.
미발송 사유
OUT 행의 blockedReason 이 비어 있으면 정상 발송입니다. 값이 있으면 보내지 않은 것이고, 그 값이 사유입니다.
| 값 | 뜻 |
|---|---|
NO_RULE | 어떤 규칙에도 안 맞았습니다. 모르는 말에는 답하지 않습니다 |
NO_QUOTE | 금액을 말해야 하는 규칙인데 기준가를 구하지 못했습니다 |
DRY_RUN | 자동응답이 꺼져 있어 초안만 남겼습니다 |
NOT_ALLOWED | 화이트리스트 밖 발신자입니다. 본문은 저장하지 않습니다 |