모찌앤잡

댓글 달면 DM이
자동으로 가게 만들기

매니챗 없이, 월 요금 0원으로 돌리는 방법입니다.

방법이 두 가지예요. A는 코딩이 하나도 없고 5분이면 끝납니다. 대신 한 달에 보낼 수 있는 개수가 정해져 있어요. B는 개수 제한이 아예 없는 대신 처음 세팅에 30분쯤 걸립니다.

일단 A로 시작하세요. 계정이 커져서 한 달에 몇 천 건씩 나가기 시작하면 그때 B로 넘어오시면 됩니다. 저는 릴스 하나에 290건이 나가서 B를 쓰고 있어요.

A코딩 없이 5분

매니챗이 유명하긴 한데, 2026년 3월부터 무료가 25명까지로 줄었습니다. 릴스 하나만 터져도 첫날에 막혀요. 그래서 다른 걸 쓰시는 게 낫습니다.

무료 한도가 큰 곳들

각 서비스가 공지한 숫자입니다. 이런 도구는 요금이 자주 바뀌니 가입 전에 한 번 확인해보세요.

어디를 쓰든 순서는 같습니다

답글 문구에 이 말을 꼭 넣으세요 서로 팔로우가 아니면 DM이 상대방 요청함으로 들어갑니다. 못 받았다는 연락이 제일 많이 오는 이유예요. "DM 보내드렸어요! 요청함에 있을 수 있으니 확인해주세요" 처럼 같이 안내해두시면 됩니다.
여기까지가 A입니다. 대부분 이걸로 충분해요. 한 달에 1,500건을 넘길 정도가 되면 아래 B를 보시면 됩니다.

B개수 제한 없이 쓰기

인스타가 공식으로 열어둔 통로에 직접 연결하는 방법입니다. 중간에 껴 있는 서비스가 없으니 개수 제한도 없고 월 요금도 없어요. 대신 처음 한 번은 손이 갑니다. 복사해서 붙여넣는 부분만 그대로 하시면 되고, 30분쯤 걸립니다.

B-1준비물 세 가지

전부 무료입니다.

페이스북 페이지를 따로 만들 필요는 없습니다. 예전 방식에는 필요했는데 지금은 인스타 계정만 연결하면 돼요.

B-2메타 앱 만들기

developers.facebook.com/apps 에 들어가서 앱 만들기를 누릅니다.

권한은 이 두 개가 꼭 필요합니다

심사 안 받아도 됩니다 앱이 개발 모드여도 본인 계정에서는 바로 작동합니다. 심사는 남의 계정까지 다룰 때 필요한 거예요. 내 계정 자동화는 지금 바로 됩니다.

B-3토큰 받기

토큰은 인스타가 나 대신 일해도 된다고 허락해주는 열쇠라고 보시면 됩니다.

https://graph.instagram.com/access_token
  ?grant_type=ig_exchange_token
  &client_secret=여기에_앱시크릿
  &access_token=여기에_방금받은토큰

줄바꿈 없이 한 줄로 이어 붙여야 합니다. 화면에 나온 access_token 값이 60일짜리 토큰이에요. 이 값을 따로 적어두세요.

내 계정 번호도 같이 받아둡니다

https://graph.instagram.com/v22.0/me?fields=id,username&access_token=긴토큰

여기 나오는 id가 내 계정 번호입니다.

B-4자동으로 돌려줄 곳 만들기

내 폰이 꺼져 있어도 돌아가야 하니까, 클라우드에 아주 작은 프로그램 하나를 올려둡니다.

const V = "v22.0";

async function api(env, path, opts) {
  const sep = path.includes("?") ? "&" : "?";
  const url = `https://graph.instagram.com/${V}/${path}${sep}access_token=${env.IG_TOKEN}`;
  const r = await fetch(url, opts);
  return r.json();
}

export default {
  async scheduled(event, env) {
    const KEYWORD = env.KEYWORD;
    const MESSAGE = env.MESSAGE;
    const REPLY   = env.REPLY;

    const done = new Set(JSON.parse((await env.DM.get("done")) || "[]"));

    for (const mid of env.MEDIA_IDS.split(",")) {
      const res = await api(env, `${mid.trim()}/comments?fields=id,text,username&limit=100`);
      for (const c of res.data || []) {
        if (done.has(c.id)) continue;
        if (!(c.text || "").replace(/\s+/g, "").includes(KEYWORD)) continue;

        const dm = await api(env, "me/messages", {
          method: "POST",
          headers: { "Content-Type": "application/json" },
          body: JSON.stringify({
            recipient: { comment_id: c.id },
            message: { text: MESSAGE },
          }),
        });

        if (!dm.error && REPLY) {
          await api(env, `${c.id}/replies?message=${encodeURIComponent(REPLY)}`, { method: "POST" });
        }
        done.add(c.id);
      }
    }

    await env.DM.put("done", JSON.stringify([...done].slice(-3000)));
  },
};
여기가 핵심입니다 DM을 보낼 때 상대 아이디가 아니라 댓글 번호로 보냅니다. 인스타는 아무한테나 먼저 DM을 못 보내게 막아두는데, 댓글에 대한 답장은 열어놨거든요. 그래서 이 방식이면 막히지 않습니다.

B-5보낸 사람 기억하게 하기

같은 사람한테 DM이 두 번 가면 안 되니까, 이미 보낸 댓글을 적어두는 공간이 필요합니다.

B-6키워드와 보낼 문구 넣기

워커의 Settings → Variables and Secrets에서 아래 다섯 개를 넣습니다.

릴스 번호는 이렇게 찾습니다

https://graph.instagram.com/v22.0/내계정번호/media?fields=id,caption,permalink&access_token=긴토큰

주소를 브라우저에 붙여넣으면 내 게시물 목록이 나옵니다. 자동 DM을 걸고 싶은 릴스의 id를 가져오시면 됩니다.

B-72분마다 돌게 하기

마지막입니다. 워커의 Settings → Trigger Events → Cron Triggers에서 아래를 넣습니다.

*/2 * * * *

2분에 한 번씩 새 댓글을 확인하고, 키워드가 보이면 바로 DM을 보냅니다. 이제 폰을 꺼놔도 알아서 돌아갑니다.

B-8알아두시면 좋은 것

토큰은 60일마다 바뀝니다

60일이 지나면 멈춥니다. 만료 전에 아래 주소로 새로 받아서 IG_TOKEN만 바꿔주시면 돼요.

https://graph.instagram.com/refresh_access_token
  ?grant_type=ig_refresh_token&access_token=지금쓰는토큰

댓글이 갑자기 많이 달려도 괜찮습니다

인스타가 정해둔 호출 한도가 넉넉해서, 하루에 수백 명이 달아도 문제가 없었습니다. 저는 릴스 하나에 댓글 290개를 받았는데 전부 나갔어요.

DM이 요청함으로 가기도 합니다

서로 팔로우가 아니면 상대방 요청함으로 들어가는 경우가 있습니다. 그래서 댓글 답글에 요청함을 확인해달라는 말을 같이 넣어두는 게 좋습니다.

여기까지 하시면 끝입니다. 다음 릴스부터는 MEDIA_IDS에 번호만 추가하면 되고, 다시 만들 필요는 없어요. 한 번 세팅해두면 계속 씁니다.