SNS 대시보드에 Threads 자동 발행 기능 직접 구현하기
소개
SNS 대시보드에서 콘텐츠를 작성하면 여러 플랫폼에 한 번에 발행할 수 있는 기능을 만들고 있었는데, X(Twitter)는 발행이 되는데 Threads는 버튼을 눌러도 아무것도 안 올라가는 문제가 있었습니다. 코드를 보니 Threads 발행 로직 자체가 없었고, 직접 Threads API를 연동해서 실제 발행이 되도록 만들고 싶었습니다.
진행 방법
사용 도구: Claude Code, Supabase Edge Functions, Threads Graph API, Meta 개발자 콘솔
1. 문제 파악 Claude Code에게 "Threads 발행이 왜 안 되냐"고 물었더니 dashboard.jsx 코드를 분석해서 X 발행 로직은 있는데 Threads 발행 코드가 아예 없다는 걸 발견했습니다.
2. Edge Function 생성 X 발행용 post-x 함수를 참고해서 post-threads Edge Function을 새로 만들었습니다. Threads Graph API는 2단계로 동작합니다:
1단계: 미디어 컨테이너 생성 (
/{userId}/threads)2단계: 게시물 발행 (
/{userId}/threads_publish)
async function createContainer(userId, text, accessToken) {
const resp = await fetch(`https://graph.threads.net/v1.0/${userId}/threads`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ media_type: "TEXT", text, access_token: accessToken }),
});
const data = await resp.json();
return data.id;
}
async function publishContainer(userId, containerId, accessToken) {
const resp = await fetch(`https://graph.threads.net/v1.0/${userId}/threads_publish`, {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify({ creation_id: containerId, access_token: accessToken }),
});
const data = await resp.json();
return data.id;
}
3. dashboard.jsx 수정 발행 버튼 클릭 시 Threads 발행 로직 추가
4. Supabase 배포
npx supabase functions deploy post-threads
→ 배포 성공
5. Access Token 발급 시도 (현재 진행 중) Meta 개발자 콘솔에서 Threads API Access Token을 발급받으려 했으나, 단기 토큰→장기 토큰 교환 과정에서 계속 오류 발생. 원인은 토큰을 URL에 넣을 때 특수문자가 깨지는 문제로 파악. OAuth 인증 코드 방식으로 다시 시도 예정.
결과와 배운 점
Threads API는 Facebook Graph API 기반이라 Meta 개발자 콘솔에서 앱을 만들고 테스터 등록을 해야 함
단기 토큰(1시간)을 장기 토큰(60일)으로 교환할 때 URL 인코딩이 필수
Edge Function 배포는 성공했고, Access Token만 연동하면 실제 발행 가능한 상태
앞으로: OAuth 코드 방식으로 토큰 발급 완료 후 실제 발행 테스트 예정
도움 받은 글
Threads API 공식 문서: developers.facebook.com/docs/threads
스터디장 코아님이 거의 떠먹여주다시피해서 잘만 따라하면하게됩니다
sns대시보드 꼭 해야하나 생각해봤는데
AI모르는 직원에게 아이디,비번 노출없이
먼저 마스터 글을 주고
프롬프트 지정하고
발행 SNS 지정하고
예약해두라고 할 수 있을것 같습니다.
생각만해도 너무 좋네요☺️
AI 모르는 직원을 어디서 부터 교육할까 생각했는데
버튼하나만으로 되게 할 생각입니다.
다음 스텝은 웹에 올려 어디서나 사용하게 해야할 듯합니다.
text를 주로 올리다 보니 x, threds, 유튜브커뮤니티(<==이건 인증키 받았는데 안되서 다시 해봐야겠습니다) 그리고 뉴스레터까지 text위주의 SNS 자동화 해보겠습니다.
다시한번 코아님 감사합니다!
댓글 0개
로그인하고 댓글을 작성하세요