인스타 '댓글 남기면 DM 보내드려요', 유료 툴 없이 직접 만들기
릴스 캡션에 "댓글에 GPX 남기면 DM으로 보내드려요"라고 쓰는 순간, 댓글이 달릴 때마다 링크를 손으로 복사해 DM을 보내는 일이 생깁니다. 이 글대로 하면 그 일을 n8n 워크플로우 하나가 대신합니다. 키워드가 들어간 댓글이 달리면 몇 초 안에 팔로우 안내 DM이 가고, 댓글에는 "DM 보내드렸어요" 답글이 달리며, 상대가 실제로 팔로우했을 때만 링크가 나갑니다. 같은 사람에게 두 번 보내는 일도 없습니다. 월 구독료가 드는 자동화 툴 없이 Meta의 공식 API만 씁니다.
이 글은 이런 분께 필요합니다
- 릴스·게시물에 "댓글 남기면 자료 보내드려요" 이벤트를 걸고 싶은 크리에이터, 소상공인
- 매니챗 같은 유료 DM 자동화 툴 대신 직접 만들어 구조를 알고 싶은 분
- n8n을 써 봤고, 웹훅으로 외부 서비스 이벤트를 받는 실전 예제가 필요한 분
준비물은 네 가지입니다.
- 프로페셔널 인스타그램 계정(비즈니스 또는 크리에이터)이며 공개 계정이어야 합니다. 비공개 계정은 댓글 알림이 오지 않습니다.
- Meta 개발자 계정(developers.facebook.com)
- 외부에서 HTTPS로 접속되는 n8n. n8n Cloud나 도메인이 붙은 셀프호스팅이면 됩니다. 이 글은 셀프호스팅 n8n 2.38.5로 진행했습니다.
- 앱을 게시할 때 넣을 개인정보처리방침 URL
이 글의 화면과 설정은 2026년 10월 3일에 직접 만들고 확인한 것입니다. Graph API는 v24.0으로 호출했고, Meta 웹훅 대시보드는 v26.0으로 표시됐습니다.
먼저 정리: 댓글이 DM이 되기까지
이 기능의 정식 이름은 비공개 답장(Private Reply) 입니다. 내 게시물에 댓글을 단 사람에게, 그 댓글을 근거로 DM을 한 번 보낼 수 있게 해주는 Instagram API 기능입니다. 상대가 나를 팔로우하지 않아도 보낼 수 있고, 그 경우 상대의 메시지 요청함으로 들어갑니다.
Meta 공식 문서가 정한 규칙은 세 가지만 기억하면 됩니다.
- 댓글 하나당 DM은 한 번만 보낼 수 있습니다.
- 댓글이 달린 지 7일 이내에 보내야 합니다.
- 상대가 답장을 하면, 그 뒤 24시간 동안은 추가 메시지를 보낼 수 있습니다.
전체 흐름은 이렇습니다. 누군가 댓글을 달면 Meta가 내 서버(여기서는 n8n)로 "댓글이 달렸다"는 알림을 보냅니다. 이 알림을 웹훅이라고 부릅니다. n8n은 알림이 진짜 Meta에서 왔는지 확인하고, 키워드가 있는지 보고, 이미 보낸 댓글이 아닌지 확인한 뒤 DM을 보냅니다.
여기서 한 가지 중요한 제약이 있습니다. 상대가 팔로우 중인지 API로 확인할 수 있는 시점은, 그 사람이 나에게 DM을 보낸 뒤뿐입니다. 사용자 프로필 API 문서에 따르면 앱 사용자가 앱에게 DM을 보내기 전에는 프로필 조회를 시도하면 사용자 동의가 필요하다는 오류를 받습니다. 팔로우 여부를 알려주는 is_user_follow_business 필드가 바로 이 API에 있습니다.
그래서 순서가 이렇게 됩니다. 댓글에는 "팔로우 후 버튼을 눌러주세요"라는 안내와 버튼을 담아 보내고, 상대가 버튼을 누르거나 답장을 보내면 그제서야 팔로우 여부를 조회해 링크를 보내는 것입니다. 버튼을 누르는 행위가 곧 DM을 보낸 것이기 때문에 조회 조건이 충족됩니다.
완성된 n8n 워크플로우는 아래와 같습니다. 맨 위 세 노드는 Meta가 처음 한 번 "이 주소가 진짜 당신 서버가 맞나" 확인할 때 쓰는 부분이고, 가운데 줄이 댓글을 받아 팔로우 안내를 보내며, 아래 줄이 상대의 답장에서 팔로우 여부를 확인합니다.

Step 1. Meta 앱을 만들고 Instagram API 권한 3개를 추가합니다
Meta for Developers에서 앱 만들기를 누릅니다.
- 앱 이름을 정합니다. 계정 이름과 맞춰 두면 나중에 헷갈리지 않습니다.
- 이용 사례 목록에서 필터를 모두로 바꾸고 Instagram에서 메시지 및 콘텐츠 관리를 고릅니다.
- 비즈니스 포트폴리오를 연결합니다. 나중에 앱 검수(고급 액세스)를 받으려면 비즈니스 인증이 끝난 포트폴리오가 필요하니, 있다면 그걸 고르세요.
- 앱 만들기를 누르면 비밀번호를 한 번 더 묻습니다.
앱이 만들어지면 이용 사례 → 맞춤 설정 → Instagram 로그인이 포함된 API 설정 화면으로 갑니다. 1번 칸의 Add all required permissions를 누르면 아래 세 권한이 들어갑니다. 이 기능에 필요한 건 이 셋뿐입니다.
| 권한 | 쓰는 곳 |
|---|---|
instagram_business_basic | 계정 기본 정보 |
instagram_business_manage_comments | 댓글 웹훅 받기, 댓글에 답글 달기 |
instagram_business_manage_messages | 비공개 답장(DM) 보내기 |
같은 화면 위쪽에 Instagram 앱 ID와 Instagram 앱 시크릿 코드가 있습니다. 시크릿 코드는 Step 4에서 웹훅 서명을 확인할 때 씁니다. Facebook 앱 ID와 다른 값이니 헷갈리지 마세요.
Step 2. 내 인스타그램 계정을 Instagram 테스터로 추가하고 수락합니다
앱이 내 계정에 접근하려면 그 계정이 앱의 역할을 가지고 있어야 합니다.
- 앱 왼쪽 메뉴 앱 역할 → 역할에서 사람 추가를 누릅니다.
- 역할 목록 맨 아래 Instagram 테스터를 고르고, 인스타그램 사용자 이름을 입력해 추가합니다. 상태가 "대기 중"으로 보입니다.
- 웹 인스타그램에 그 계정으로 로그인한 뒤 설정 → 앱 웹사이트 권한 → 앱 및 웹사이트 → 테스터 초대 탭에서 수락합니다. 주소로 바로 가려면
instagram.com/accounts/manage_access/입니다.
초대는 Meta 계정 센터의 "연결된 환경"에는 나오지 않습니다. 꼭 인스타그램 설정의 테스터 초대 탭에서 찾으세요.
Step 3. 액세스 토큰을 발급받습니다
API 설정 화면 2번 칸 액세스 토큰 생성에서 계정 옆 토큰 생성을 누르면 인스타그램 로그인 창이 뜹니다.
권한 동의 화면에서 콘텐츠 액세스 및 게시, 인사이트 액세스 및 관리는 꺼도 됩니다. 이 기능은 댓글과 메시지만 쓰기 때문에, 필요 없는 권한은 처음부터 주지 않는 편이 안전합니다.
허용하면 토큰이 딱 한 번 표시됩니다. 이해합니다에 체크해야 토큰이 보이고 복사할 수 있습니다. 바로 비밀번호 관리자에 저장하세요. 같은 창에 보이는 숫자(Instagram 사용자 ID)도 함께 적어 둡니다.
토큰이 제대로 됐는지는 브라우저 주소창으로 바로 확인할 수 있습니다.
https://graph.instagram.com/v24.0/me?fields=user_id,username&access_token=발급받은_토큰
내 사용자 이름이 나오면 성공입니다. 이 토큰에는 만료가 있어서, 운영을 계속한다면 만료 전에 갱신해야 합니다.
Step 4. n8n에 크리덴셜 2개와 Data table 2개를 만듭니다
워크플로우에 비밀값을 직접 적지 않도록, 먼저 저장소부터 만듭니다.
크리덴셜 1: 토큰 (Header Auth)
- Credentials → Create credential → Header Auth
- Name:
Authorization, Value:Bearer 발급받은_토큰(Bearer 뒤 한 칸 띄움) - Allowed HTTP Request Domains를 Specific Domains로 바꾸고
graph.instagram.com만 넣습니다. 이 토큰이 다른 주소로 새어 나가지 않게 막는 설정입니다.
크리덴셜 2: 앱 시크릿 (Crypto)
- Create credential → Crypto → Hmac Secret에 Step 1의 Instagram 앱 시크릿 코드를 넣습니다.
- 웹훅이 진짜 Meta에서 왔는지 확인하는 서명 계산에 씁니다.
Data table 1: dm_rules (어느 게시물에 어떤 키워드로 무엇을 보낼지)
컬럼 4개를 모두 string 타입으로 만듭니다: media_id, keyword, title, link.
media_id를 숫자 타입으로 만들면 안 됩니다. 인스타그램 미디어 ID는 17949931728293330처럼 17자리라 숫자로 저장하면 끝자리가 바뀝니다. CSV 가져오기도 숫자로 추정될 수 있으니, 빈 테이블을 만들고 행을 직접 넣는 편이 안전합니다.
게시물의 media_id는 토큰으로 바로 조회할 수 있습니다.
https://graph.instagram.com/v24.0/me/media?fields=id,permalink,caption&access_token=발급받은_토큰
permalink로 어떤 릴스인지 확인하고, 그 id를 media_id에 넣습니다. 예시 행은 이렇습니다.
| media_id | keyword | title | link |
|---|---|---|---|
| 17949931728293330 | GPX | 서울둘레길 15코스 노을·하늘공원 (7.5km) | https://course-hanjang.vercel.app/15 |
Data table 2: dm_log (보낸 기록, 중복 방지용)
컬럼 6개, 모두 string: comment_id, media_id, username, comment_text, status, error.
Step 5. 워크플로우를 가져오고 세 군데만 바꿉니다
노드 29개를 처음부터 만들 필요는 없습니다. 아래 JSON을 내려받아 n8n 빈 캔버스에 붙여 넣으면 됩니다(파일을 열어 전체 복사 → 캔버스 클릭 → 붙여넣기).
붙여 넣은 뒤 바꿀 곳은 세 군데입니다.
- verify_token 일치? 노드의 비교값
여기에_내가_정한_verify_token을 아무도 못 맞힐 긴 문자열로 바꿉니다. Step 7에서 Meta에도 똑같이 넣습니다. - 크리덴셜을 쓰는 노드 5개(서명 계산, 팔로우 안내 DM 2개, 댓글에 답글 달기, 팔로우 여부 확인, 링크 DM 보내기, 팔로우 재안내)에서 Step 4의 크리덴셜을 고릅니다.
- Data table 노드 6개에서
dm_rules,dm_log를 다시 고릅니다. 표 목록에서 한 번 다시 골라야 컬럼이 불러와집니다.
JSON 안의 @{계정핸들}은 팔로우 안내 문구에 들어가는 계정 이름 자리입니다. 여기에 내 인스타 계정을 적고, 링크 메시지 만들기 코드 노드의 기본 링크도 내 사이트 목록 주소로 바꿉니다.
노드별로 하는 일은 이렇습니다. 처음 보는 분은 이 순서대로 노드를 하나씩 열어 보면 구조가 잡힙니다.
| 노드 | 하는 일 |
|---|---|
| Meta 웹훅 검증 (GET) → verify_token 일치? | Meta가 처음 주소를 등록할 때 보내는 확인 요청. 토큰이 맞으면 hub.challenge 값을 그대로 돌려주고, 틀리면 403 |
| 댓글 이벤트 수신 (POST) | 실제 댓글·DM 알림을 받는 곳. Raw Body 옵션이 켜져 있어야 서명 확인이 됩니다 |
| 원문·서명 꺼내기 → 서명 계산 → Meta가 보낸 게 맞나? | 받은 원문을 앱 시크릿으로 HMAC-SHA256 계산해 X-Hub-Signature-256 헤더와 비교. 다르면 그대로 멈춥니다 |
| 댓글만 꺼내기 / DM 답장만 꺼내기 | 알림 종류에 따라 갈립니다. 댓글 쪽은 내 계정이 단 댓글을 제외하고, DM 쪽은 내가 보낸 메시지(is_echo)를 제외합니다 |
| 규칙 불러오기 → 키워드 확인 | dm_rules에 등록된 게시물이고 키워드가 들어 있을 때만 통과. 대소문자와 띄어쓰기는 무시합니다 |
| 이미 보낸 댓글 제외 | dm_log에 같은 comment_id가 있으면 멈춤 |
| 팔로우 안내 DM (Private Reply) | 팔로우 안내 문구와 [팔로우 완료] 버튼이 담긴 비공개 답장을 보냅니다 |
| 팔로우 안내 DM (버튼 없이 재시도) | 위 호출이 실패하면 버튼 없이 문구만 다시 보냅니다. 이 단계까지 실패하면 failed로 기록 |
| IGSID 붙이기 → 댓글에 답글 달기 → 기록 | 공개 답글을 달고, 상대 Instagram ID(IGSID)와 함께 awaiting_follow로 기록 |
| 팔로우 대기 요청 찾기 → 요청 묶기 | DM을 보낸 사람의 대기 요청이 있는 경우만 통과합니다. 일반 문의 DM은 여기서 멈춥니다 |
| 팔로우 여부 확인 | 그 사람의 프로필에서 is_user_follow_business를 조회합니다 |
| 팔로우 중? | 참이면 링크 DM을 보내고 기록을 sent로 갱신, 거짓이면 재안내 DM을 보냅니다 |
DM을 보내는 핵심 호출은 한 줄입니다. 댓글에 답하는 첫 DM은 받는 사람을 사용자 ID가 아니라 댓글 ID로 지정하고, 그 뒤의 추가 DM은 IGSID로 보냅니다.
POST https://graph.instagram.com/v24.0/{내 인스타 사용자 ID}/messages
Authorization: Bearer {토큰}
{"recipient": {"comment_id": "{댓글 ID}"}, "message": {"text": "팔로우 후 버튼을 눌러주세요.", "quick_replies": [{"content_type": "text", "title": "팔로우 완료", "payload": "FOLLOW_CHECK"}]}}
버튼이 눌리면 payload가 FOLLOW_CHECK로 DM에 실려 옵니다. 빠른 답장은 데스크톱에서 표시되지 않으므로, 안내 문구에 "버튼이 안 보이면 '완료'라고 답장 주세요"를 함께 넣고 DM 분기에서는 text만으로 들어온 답장도 받습니다.
Step 6. 워크플로우를 게시하고 주소를 먼저 확인합니다
오른쪽 위 Publish를 눌러 게시합니다. 게시해야 운영용 웹훅 주소(https://내-n8n-주소/webhook/ig-comment-dm)가 살아납니다.
Meta에 등록하기 전에 브라우저로 직접 확인합니다.
https://내-n8n-주소/webhook/ig-comment-dm?hub.mode=subscribe&hub.challenge=12345&hub.verify_token=내가_정한_토큰
화면에 12345만 나오면 정상입니다. 토큰을 일부러 틀리게 넣으면 forbidden이 나와야 합니다. 둘 다 확인됐다면 Meta 쪽 설정으로 넘어갑니다.
Step 7. Meta에 웹훅 주소를 등록하고 필요한 필드만 구독합니다
API 설정 화면 3번 칸 Webhooks 구성에서:
- 콜백 URL에 Step 6의 웹훅 주소를, 인증 토큰에 내가 정한 verify_token을 넣고 확인 및 저장을 누릅니다. Meta가 GET 요청을 보내 확인하고, 성공하면 필드 목록이 나타납니다.
- 필드 목록에서
comments와messages만 켜 두고 나머지는 꺼 두세요.messages가 있어야 상대가 버튼을 눌렀을 때 그 DM을 받을 수 있습니다.live_comments같은 필드를 켜 두면 매니페스트 채팅까지 붙잡아 실행만 늘어납니다. comments줄의 테스트 → 서버로 보내기를 누르면 Meta가 서명된 샘플 알림을 보냅니다. n8n Executions에서 실행이 생기고 Meta가 보낸 게 맞나? 노드가 true로 통과하면 서명 확인까지 맞게 된 것입니다. 샘플의 게시물 ID는 가짜라 키워드 확인에서 멈추는 것이 정상입니다.
마지막으로 내 계정이 이 앱으로 알림을 보내도록 구독을 켭니다. 이 호출은 POST라서 브라우저 주소창이 아니라 n8n의 HTTP Request 노드나 터미널에서 한 번 실행합니다.
curl -X POST "https://graph.instagram.com/v24.0/me/subscribed_apps?subscribed_fields=comments,messages&access_token=발급받은_토큰"
{"success":true}가 나오면 됩니다.
Step 8. 앱을 게시(Live)로 바꿉니다
대시보드에 "Webhooks를 수신하려면 앱이 공개 상태여야 합니다"라는 문구가 있습니다. 개발 모드에서는 테스트 버튼 알림만 오고, 실제 댓글 알림은 오지 않습니다.
- 앱 설정 → 기본 설정에서 개인정보처리방침 URL과 데이터 삭제 안내 URL을 넣고 저장합니다.
- 왼쪽 메뉴 게시에서 "모든 필수 앱 설정이 완료되었습니다"가 보이면 게시를 누릅니다.
게시는 앱 검수와 다릅니다. 앱 검수 없이도 게시는 됩니다. 다만 Meta 웹훅 문서는 comments 알림에 고급 액세스(Advanced Access) 가 필요하다고 적고 있습니다. 고급 액세스는 앱 검수를 통과해야 받을 수 있습니다. 실제로 어디까지 동작하는지는 Step 9의 결과로 확인했습니다.
Step 9. 실제 댓글로 확인합니다
이제 내 계정이 아닌 다른 계정으로 dm_rules에 등록한 릴스에 키워드 댓글을 답니다. 내 계정으로 단 댓글은 댓글만 꺼내기에서 일부러 버리니 테스트가 되지 않습니다.
실제로 이 앱에 아무 역할이 없는 개인 계정으로 서울둘레길 15코스 릴스에 GPX라고 댓글을 달았을 때 결과는 이랬습니다.
| 시각(KST) | 일어난 일 |
|---|---|
| 00:06:27 | 개인 계정이 GPX 댓글 작성 |
| 00:06:31 | n8n 실행 시작. 서명 확인 → 키워드 확인 → 중복 확인 모두 통과 |
| 00:06:37 | 비공개 답장 DM 발송 성공(응답에 message_id 반환), 댓글에 "보내드렸어요! DM 확인해 주세요." 답글 |
| 00:06:41 | 방금 단 내 답글 때문에 웹훅이 한 번 더 옴. 작성자가 내 계정이라 27ms 만에 걸러짐 |
댓글부터 공개 답글까지 약 10초였고, dm_log에는 sent로 한 줄이 남았습니다. 이 테스트는 앱 검수 없이 Step 8의 게시(Live)만 한 상태에서 했습니다.
다만 Meta 문서는 여전히 comments 알림에 고급 액세스가 필요하다고 적고 있고, 이 결과는 2026년 10월 3일 댓글 1건으로 확인한 것입니다. 팔로워가 많은 계정에서 이벤트를 크게 돌릴 계획이라면, 앱 대시보드 5번 칸의 앱 검수로 instagram_business_manage_comments, instagram_business_manage_messages 고급 액세스를 신청해 두는 편이 안전합니다. 검수에는 비즈니스 인증과 기능 시연 영상이 필요합니다.
자주 막히는 지점
| 증상 | 원인과 해결 |
|---|---|
| Meta에서 콜백 URL 확인이 실패함 | 워크플로우를 Publish하지 않았거나, 테스트용 URL(/webhook-test/)을 넣은 경우입니다. 운영용 /webhook/ 주소를 넣으세요 |
| Meta 테스트 알림이 서명 확인에서 계속 false | POST 웹훅 노드의 Raw Body 옵션이 꺼져 있으면 n8n이 JSON을 다시 만들면서 원문이 바뀝니다. 또 Facebook 앱 시크릿이 아니라 Instagram 앱 시크릿을 넣어야 합니다 |
DM 호출이 요청한 사용자를 찾을 수 없습니다(code 100, subcode 2534014)로 실패 | 댓글 ID가 실제 댓글이 아니거나(테스트용 가짜 ID), 댓글이 삭제된 경우입니다. 7일이 지난 댓글도 보낼 수 없습니다 |
| 같은 사람에게 DM이 두 번 감 | dm_log의 조건 컬럼이 비어 있는 경우입니다. 이미 보낸 댓글 제외 노드를 열어 Column이 comment_id로 잡혀 있는지 확인하세요 |
| 노드를 열었는데 Column이 "Loading options..."에서 멈춤 | Data table 목록에서 테이블을 한 번 다시 고르면 컬럼이 불러와집니다 |
media_id가 맞는데 키워드에 걸리지 않음 | media_id 컬럼이 숫자 타입이라 끝자리가 바뀐 경우입니다. string 타입으로 다시 만드세요 |
| n8n 편집기 오른쪽 위에 Offline이 뜨고 Publish 버튼이 없음 | 브라우저와 n8n 사이 연결이 끊긴 상태입니다. 새로고침으로 안 풀리면 브라우저의 연결 풀을 비우면(chrome://net-internals/#sockets → Flush socket pools) 다시 붙습니다 |
| 내 자동 답글에 다시 DM이 가려 함 | 댓글만 꺼내기에서 작성자 ID가 내 계정 ID와 같으면 제외하는 줄이 지워졌는지 확인하세요 |
새 게시물에 붙이는 법
워크플로우는 손대지 않습니다. 새 릴스를 올린 뒤 Step 4의 media/ 조회로 id를 확인하고, dm_rules에 한 줄만 추가하면 그 게시물부터 바로 적용됩니다. 등록하지 않은 게시물의 댓글은 키워드가 있어도 무시하니, 이벤트를 끝내려면 그 행을 지우면 됩니다.
마무리
정리하면 필요한 건 Meta 앱 하나, 토큰 하나, n8n 워크플로우 하나, 표 두 개입니다. 한 번 만들어 두면 새 게시물마다 표에 한 줄만 추가하면 되고, 보낸 기록이 남아 누구에게 언제 무엇을 보냈는지도 바로 확인할 수 있습니다.
직접 만들면서 가장 많이 시간을 쓴 곳은 기능 자체가 아니라 주변이었습니다. 테스터 초대가 계정 센터가 아니라 인스타그램 설정 안에 숨어 있다는 것, 17자리 미디어 ID는 반드시 문자로 저장해야 한다는 것, 개발 모드 앱은 실제 댓글 알림을 받지 못한다는 것, 팔로우 여부는 상대가 먼저 DM을 보내야 확인할 수 있다는 것입니다. 이 네 가지만 미리 알고 시작하면 한 시간 안에 첫 DM을 받아 볼 수 있습니다.
이 구조는 자료 종류가 달라도 그대로 쓸 수 있습니다. "자료", "신청", "가격" 같은 단어로 PDF, 신청서, 상품 페이지 링크를 보내는 이벤트에도 같은 워크플로우를 붙이면 됩니다. 팔로우 게이트를 없애고 싶다면 팔로우 여부 확인 노드와 팔로우 중? 분기를 지우고, 곧바로 링크를 보내도록 바꾸면 됩니다.
다른 인스타 계정에도 붙이는 법
워크플로우 하나로 여러 계정을 돌릴 수 있습니다. Meta 앱은 그대로 두고, 계정만 늘리면 됩니다.
같은 앱에 계정 추가하기. 앱 역할 → 역할에서 Instagram 테스터로 계정을 추가하고, 그 계정으로 인스타그램에 로그인해 설정 → 앱 웹사이트 권한 → 테스터 초대에서 수락합니다. 그 계정으로 API 설정 화면에서 토큰을 발급받고, 아래 구독 호출을 그 토큰으로 한 번 실행하면 끝입니다. 다른 계정에서 온 댓글도 같은 웹훅 주소로 들어오므로, 워크플로우는 손댈 필요가 없습니다.
curl -X POST "https://graph.instagram.com/v24.0/me/subscribed_apps?subscribed_fields=comments,messages&access_token=그_계정의_토큰"
토큰은 계정마다 따로입니다. DM 보내기 API는 토큰의 계정 권한으로 동작하므로, 한 계정 토큰으로 다른 계정의 게시물에 DM을 보낼 수 없습니다. 워크플로우 하나가 여러 계정을 함께 처리하려면 크리덴셜을 계수만큼 만들고, DM 호출 노드에서 계정에 맞는 크리덴셜을 고르게 만들어야 합니다. 이때 n8n Credentials의 공유 범위(Sharing)를 Personal로 두고, 계정별로 분리하는 편이 안전합니다. 같은 Meta 앱이라도 다른 사람과 워크플로우를 공유하면 그 사람이 토큰을 볼 수 있기 때문입니다.
규칙 표에서 계정을 구분하기. 지금은 dm_rules에 media_id만 있어서 계정이 섞여도 괜찮습니다. Media ID는 계정마다 겹치지 않기 때문입니다. 다만 같은 n8n에 두 앱(다른 Meta 앱)을 함께 붙인다면 media_id만으로는 구분되지 않으므로, 표에 account 컬럼을 하나 넣고 링크를 만들 때 해당 계정의 토큰과 크리덴셜을 고르는 분기를 추가하세요.
계정이 많을 때의 현실적인 기준. 계정이 2~3개면 워크플로우를 계정별로 따로 두는 편이 낫습니다. 크리덴셜이 분리되고, 한 계정에서 문제가 생겨도 다른 계정은 영향받지 않으며, 나중에 지우기 쉽습니다. 10개 이상으로 늘어나면 그때 워크플로우를 하나로 합치고 크리덴셜 분기를 붙이는 쪽이 이득입니다.
확인할 것. 다른 계트를 붙인 뒤에는 Step 9를 그 계정으로 한 번 돌려보세요. 테스터 초대를 수락했는지, 댓글이 왔을 때 IGSID가 저장되는지, 팔로우 확인 후 링크가 나가는지 세 가지만 보면 됩니다.