스레드
이온디

스레드 AI 자동 포스팅 봇 만드는 법

인스타그램이나 스레드에서 "홈페이지 제작은 OO" 같은 문구가 날마다 조금씩 바뀌어 올라오는 계정을 본 적이 있을 겁니다. 이런 계정 상당수는 AI로 글을 만들고 예약 발행 도구로 올립니다. 이 글은 내 스레드 계정 하나를 로컬 봇으로 자동 운영하는 방법을 처음부터 순서대로 정리한 것입니다. 앱 심사 없이 본인 계정만으로 바로 시작할 수 있습니다.

전체 구조

자동화는 두 부분으로 나뉩니다.

  • 글 만들기 (AI) — Claude나 ChatGPT API에 주제·말투·길이를 정해 주고 초안을 여러 개 받습니다.
  • 올리기 (Threads API) — Meta가 공개한 Threads API로 글을 게시합니다. 예약은 cron 같은 스케줄러가 맡습니다.

코드 없이 하려면 Make, Zapier, n8n, Buffer 같은 도구가 이 두 단계를 이미 연결해 두었습니다. 아래는 직접 만드는 방법입니다.

1단계. Meta 개발자 앱 만들기

  1. developers.facebook.com에 페이스북 계정으로 로그인해 개발자로 등록합니다.
  2. 내 앱 > 앱 만들기를 누르고, 사용 사례(Use case) 선택 화면에서 Threads API 액세스(Threads use case)를 고릅니다.
  3. 앱을 만들면 앱 ID와 시크릿이 두 쌍 생깁니다. 일반 앱용 한 쌍과 Threads 전용 한 쌍인데, 이 글에서 쓰는 것은 Threads 전용 값입니다. 사용 사례 > Threads > 설정 화면에서 확인할 수 있습니다. 여기서 헷갈려 인증이 계속 실패하는 경우가 많습니다.
  4. 같은 설정 화면에서 유효한 OAuth 리디렉션 URI를 등록합니다. 나중에 인증 요청에 넣는 주소와 글자 하나까지 똑같아야 합니다. 로컬 봇이라면 내 사이트 아무 페이지나 적어 두고, 로그인 후 주소창에 붙어 오는 code 값만 복사해 쓰면 됩니다.
  5. 권한(사용 사례 > 맞춤 설정)에서 threads_basic(기본, 모든 호출에 필요)과 threads_content_publish(게시)를 켭니다. 댓글 관리나 통계가 필요하면 threads_manage_replies, threads_manage_insights를 추가합니다.

2단계. 내 계정을 테스터로 등록하기

앱 심사를 받지 않은 개발 모드에서도 테스터로 등록된 계정은 API를 쓸 수 있습니다. 나 혼자 쓰는 봇이면 이걸로 충분합니다.

  1. 앱 대시보드 > 앱 역할 > 역할 탭에서 사람 추가를 누르고, 역할을 Threads 테스터로 골라 내 스레드 사용자 이름을 넣습니다.
  2. 스레드 앱(또는 웹)에서 계정 설정 > 웹사이트 권한으로 들어가 초대를 수락합니다. 수락하지 않으면 인증 화면에서 오류가 납니다.

주의. 다른 사람 계정까지 대신 운영하는 서비스를 만들 거라면 정식 앱 심사가 필요합니다. 개인 봇은 해당되지 않습니다.

3단계. 액세스 토큰 받기

브라우저로 아래 주소를 열어 로그인하고 허용하면, 리디렉션 주소 뒤에 ?code=...가 붙어 돌아옵니다.

https://threads.com/oauth/authorize
  ?client_id=앱ID
  &redirect_uri=등록한_리디렉션_URI
  &scope=threads_basic,threads_content_publish
  &response_type=code

code는 1시간 동안만 유효합니다. 이 code를 토큰으로 바꾸고, 1시간짜리 단기 토큰을 60일짜리 장기 토큰으로 교환합니다.

# code -> 단기 토큰 (응답에 user_id 도 함께 옵니다)
curl -X POST https://graph.threads.com/oauth/access_token \
  -F client_id="$THREADS_APP_ID" \
  -F client_secret="$THREADS_APP_SECRET" \
  -F grant_type=authorization_code \
  -F redirect_uri="$REDIRECT_URI" \
  -F code="$CODE"

# 단기 토큰 -> 장기 토큰 (60일)
curl "https://graph.threads.com/access_token?grant_type=th_exchange_token&client_secret=$THREADS_APP_SECRET&access_token=$SHORT_TOKEN"

받은 장기 토큰과 user_id는 코드에 적지 말고 .env 파일에 넣어 둡니다. 코드를 깃허브에 올리거나 남에게 보여 주다가 토큰이 새는 경우가 가장 흔합니다.

4단계. 글 올리는 코드

게시는 두 번의 호출로 이루어집니다. 먼저 컨테이너(올릴 글 묶음)를 만들고, 그 ID로 발행합니다.

import os, time, httpx

API = "https://graph.threads.com/v1.0"
USER_ID = os.environ["THREADS_USER_ID"]
TOKEN = os.environ["THREADS_TOKEN"]

def post_thread(text: str, image_url: str | None = None) -> str:
    params = {"access_token": TOKEN, "text": text}
    if image_url:
        params |= {"media_type": "IMAGE", "image_url": image_url}
    else:
        params["media_type"] = "TEXT"

    # 1) 컨테이너 생성
    r = httpx.post(f"{API}/{USER_ID}/threads", params=params)
    r.raise_for_status()
    creation_id = r.json()["id"]

    # 이미지가 있으면 서버 처리 시간을 기다린다 (공식 권장 약 30초)
    if image_url:
        time.sleep(30)

    # 2) 발행
    r = httpx.post(f"{API}/{USER_ID}/threads_publish",
                   params={"creation_id": creation_id, "access_token": TOKEN})
    r.raise_for_status()
    return r.json()["id"]  # 게시물 ID

이미지는 파일 업로드가 아니라 공개 URL로 넘깁니다. 내 서버나 스토리지에 올려 둔 이미지 주소를 쓰면 됩니다.

5단계. AI로 글 만들기

AI에게는 "무엇을 쓰라"보다 "어떤 사람이 어떤 말투로 쓰는지"를 구체적으로 주는 편이 결과가 좋습니다.

너는 10년차 웹 에이전시 대표다. 스레드에 올릴 글을 쓴다.
- 주제: {오늘의 주제}
- 500자 이내, 반말 섞인 편한 말투, 해시태그 1개 이하
- 첫 줄에 실무에서 겪은 구체적인 장면을 넣을 것
- 광고 문구처럼 같은 문장을 반복하지 말 것
서로 다른 관점으로 3개를 써 줘.

주제는 미리 목록(스프레드시트나 텍스트 파일)으로 쌓아 두고 하나씩 꺼내 쓰면, 매일 비슷한 글이 반복되는 걸 막을 수 있습니다.

6단계. 예약 실행과 토큰 갱신

로컬 봇이면 cron 한 줄이면 됩니다. 예를 들어 매일 오전 9시에 실행하려면:

0 9 * * * cd ~/threads-bot && ./venv/bin/python bot.py >> bot.log 2>&1

장기 토큰은 60일이 지나면 만료됩니다. 발급 후 24시간이 지났고 아직 만료되지 않은 토큰은 아래 호출로 다시 60일 연장할 수 있으니, 봇이 일주일에 한 번쯤 갱신하게 해 두면 잊어버릴 일이 없습니다.

curl "https://graph.threads.com/refresh_access_token?grant_type=th_refresh_token&access_token=$THREADS_TOKEN"

알아 둘 제한과 주의점

항목 내용 글자 수게시물당 500자 게시 횟수계정당 24시간에 250개 토큰 수명장기 토큰 60일, 주기적으로 갱신 이미지공개 URL로 전달, 발행 전 처리 대기

한도가 넉넉해 보여도 하루 1~3개가 적당합니다. 같은 문장을 키워드만 바꿔 반복하면 도달이 떨어지고 스팸으로 판정될 수 있습니다. 처음에는 AI가 만든 초안을 사람이 한 번 보고 승인한 것만 올라가게 해 두는 것을 권합니다. 완전 무인은 글 품질이 안정된 뒤에 켜도 늦지 않습니다.

정리

  1. Meta 개발자 앱 생성, 권한 두 개 선택
  2. 내 계정을 테스터로 등록하고 수락
  3. code, 단기 토큰, 장기 토큰 순으로 발급해 .env에 저장
  4. 컨테이너 생성 후 발행, 두 번 호출로 게시
  5. AI에게 인물·말투·제약을 주고 초안 생성
  6. cron으로 예약, 토큰은 주기적으로 갱신

여기까지면 나만 쓰는 스레드 봇이 돌아갑니다. 막히는 단계가 있으면 댓글로 남겨 주세요.

인스타그램이나 스레드에서 "홈페이지 제작은 OO" 같은 문구가 날마다 조금씩 바뀌어 올라오는 계정을 본…
0 좋아요 0 답글 35 조회