getback-broadcast
SkillDocs & knowledgeLets your agent publish announcements across Discord, Threads, KakaoTalk, email, and Notion with verified posting steps.
Use getback-broadcast in Claude, ChatGPT or Ahel Desktop
Free. Sign in, add getback-broadcast and connect your AI. About a minute.
Also: Claude Code · Cursor · Codex
Then ask your AI: use the getback-broadcast skill
Details
Instructions available. Your AI can read the instructions. Execution depends on the setup they require.
Account requirements not reviewed. Check the skill instructions before use; Ahel provides instructions and does not run this skill.
No other account needed.
Add Ahel to your AI once: Claude, ChatGPT, Cursor, Claude Code or Codex. Then ask it to use this.
About this skill
Read this when publishing content to the GETBACK (GET100) community channels, Discord announcements (Bamnyang-i bot), the thread @get100.official publishing queue, KakaoTalk, and Notion HQ API access paths.
What this skill tells your AI
The instructions your AI receives, as published by bam-bam-2/solo-skills in skills/getback-broadcast/SKILL.md and read by Ahel’s review.
이 스킬이 시스템에 하는 일 (설치 전 확인)
- 공개 채널에 글을 실제로 게시합니다. 봇 토큰이 필요합니다.
- 토큰은 환경변수·
.env에서만 읽습니다. 스킬에는 값이 들어 있지 않습니다.- 게시 후 다시 읽어서 검증하는 단계가 포함돼 있습니다.
겟백 채널 발행 (getback-broadcast)
겟백 커뮤니티에 뭔가를 "뿌릴" 때의 검증된 경로. 인프라는 전부 mac-mini(SSH alias mac-mini)에 있다.
채널별 발행 방법
1. 디스코드 #공지 (밤냥이 봇 명의)
- 봇 토큰/채널 ID: mac-mini
~/Projects/getback/discord_bot/.env(DISCORD_TOKEN,CHANNEL_공지=<DISCORD_ID>,GUILD_ID=<DISCORD_ID>) - 함정: urllib 기본 User-Agent는 Cloudflare가 403(error code 1010)으로 차단. 반드시
User-Agent: DiscordBot (https://get100.co.kr, 1.0)헤더를 넣을 것. - 멤버 멘션 롤:
<@&<DISCORD_ID>>+allowed_mentions: {"parse":["roles"]} - 공지 톤: 밤냥이 해요체,
**볼드 섹션 헤더**+ 절제된 이모지 1개, 서명— 운영진 (운영진). 과거 공지를 1~2개 읽고 톤 맞출 것. - 게시 후
GET /channels/{id}/messages?limit=1로 반드시 검증.
1-b. 디스코드 DM + 파일 첨부 (밤떑이 봇 명의)
길드장·운영진 개인에게 자료(PDF 등)를 보낼 때. 카톡은 kmsg로 텍스트·이미지만 되고 PDF는 못 보낸다 — 문서 전달은 디스코드 DM이 정답.
// 1) DM 채널 생성 (상대 디스코드 유저 ID 필요 — 노션 길드 DB의 "길드장 디스코드 ID" 등)
POST /users/@me/channels { recipient_id }
// 응답의 recipients[0].username 으로 대상을 반드시 검증할 것
// 2) multipart 로 본문 + 파일
const fd = new FormData();
fd.append('payload_json', JSON.stringify({ content: body }));
fd.append('files[0]', new Blob([buf], {type:'application/pdf'}), 'NAME.pdf');
POST /channels/{dmId}/messages // headers 에 Authorization + User-Agent 둘 다
- 파일명은 ASCII로. 한글 파일명을 넣으면 디스코드가 날려버린다(
네트워킹길드_긴급회의_0817.pdf→0817.pdf). - 사이즈 제한 8MB. 막 보낸 걸 고칠 때는
DELETE /channels/{id}/messages/{msgId}후 재전송하되, 상대가 이미 읽었을 시간이면 지우지 말고 정정 메시지를 덧붙인다. - 봇 명의라 AI임이 드러나므로 카톡용 AI 서명은 붙이지 않는다. 밤백 대신 전달할 땐 "밤백님이 ~하셨어요"로 주체를 분리해 쓴다.
2. 스레드 @get100.official (겟천 파이프라인)
- 큐 파일: mac-mini
~/Projects/getback/마케팅/threads-1000/queue.json. 러너(launchd, 10분 간격)가status=pending+scheduled_at지난 항목을 자동 발행. LLM 무관 순수 파이썬이라 큐에 올바른 스키마로 넣기만 하면 됨. - 항목 스키마:
id(수동 주입은d{MMDD}-{NN}),scheduled_at(KST ISO),mode("single"),kind(운영일지/뉴스 코멘터리/참여형 질문),text,comment(null),images([]),status("pending"),permalink/published_at/error(null),created_at,fact_source(근거 명시),craft_experiment(null) - 발행 전 린트 필수:
/usr/bin/python3 ~/Projects/getback/운영/scripts/caption_lint.py --channel threads --kind text --file <파일>(줄당 35자, em-dash 금지, 최상급·거래톤 금지, 멤버 실명 금지, 아라비아 숫자) - 밤냥이 페르소나: 짧은 줄바꿈, 캐주얼 존대, 숫자는 결론이 아니라 경과로, 솔직한 build-in-public 톤. 최근 발행글 2~3개 읽고 맞출 것.
- 큐 쓰기는 tmp 파일 →
shutil.move로 원자적으로. 발행 확인은 큐 재조회(status,permalink).
3. 카톡 단톡방/오픈채팅
- 전송 가능해짐 (2026-08-15).
kmsg를ssh localhost경유로 실행하면 방 이름만으로 발송된다. 한글·줄바꿈 보존. 절차는~/.aside/u/0/skills/user/kakaotalk-send/SKILL.md참고. - 밤밤 명의로 나가므로 본문 끝에
— 이 메시지는 밤밤을 대신해 AI가 정리해서 보냈습니다서명을 붙인다. - (구정보) "KakaoTalk.app 깨짐"은 오진이었다. Aside 샌드박스가 GUI 실행·프로세스 조회를 막아서 생긴 착각이다.
4. 구독자 이메일 (네이버 SMTP, GET100 명의)
- 크리덤션: 맥북
~/Projects/getback/.env의NAVER_MAIL_USER/NAVER_MAIL_APP_PASSWORD/NAVER_SMTP_SERVER/NAVER_SMTP_PORT(사이트 레포.env.local은 베르셀 암호화 변수라 빈 값 — 쓰지 말 것). nodemailer 없으므로 python3 smtplib로 발송. - 구독자 DB
<NOTION_DB_ID>읽기·쓰기는 맥미니 discord_bot의NOTION_TOKEN으로 curl (Aside 노션 클라이언트 토큰은 이 DB에 401). - 발송 후 반드시 해당 row 메모에
[YYYY-MM-DD 어드민] … 발송마커 append (어드민의 발송/미발송 필이 이 마커를 읽음). 수신거부 링크는api/lead.js의unsubUrl()HMAC(기본값 시크릿)과 동일하게 생성. - 톤: 담백한 확인·안내 ("신청 확인했습니다. 오픈하면 알려드릴게요"). 사람인 척 연출 금지, 서명은 "GET100 드림". 여러 명이면 무조건 1통씩 개별 발송. 실제 발송은 어드민 화면이 아니라 이 경로로 (밤밤 확정 원칙).
4-b. 기수 모집 대량 발송 (2026-08-26 실전 확립)
발송 스크립트: mac-mini:~/Projects/getback/scripts/get100_letter_7gi.py (레터), get100_7gi_notify.py (사전알림·리마인드).
둘 다 --dry-run 으로 대상부터 확인하고, --preview-to <메일> 로 실물 1통 받아본 뒤 발송한다.
대상 선별 규칙 (구독자 DB <NOTION_DB_ID>)
- 광고성 수신 동의 O + 구독 상태가 '수신 거부'/'반송' 아님 — 미동의자 발송은 정보통신망법 위반이다. 118명 중 동의자는 69명뿐이었다.
- 명단 구분
뉴스레터 구독만 보낼지, 동의자 전체로 확대할지는 밤밤이 정한다. DB 설명란의 "행사 신청자를 레터 명단에 섞지 말 것"은 정기 레터 기준이고, 모집 안내는 별도 판단이었다(2026-08-26에는 확대 선택). - 수신 근거 문구를 대상에 맞춘다. 행사 신청자에게 "레터를 구독하신 분께"라고 쓰면 사실과 다르다 → "신청 과정에서 광고성 정보 수신에 동의하신 분께".
- 제목 앞에 (광고) 를 붙이고 본문에 수신거부 링크·문의처를 넣는다(법정 표기).
반드시 걸리는 함정 두 개
- 네이버 SMTP는 한 연결에서 명령이 많아지면
452 Too many commands로 끊는다. 36통째에 끊겨 7명이 실패했다. 15통마다s.quit()후 재연결하고, 실패 시에도 재연결 후 이어간다. - 노션 메모 필드는 1,900자 상한. 발송 마커를 메모에 append하는 방식은 이력이 긴 사람에게서 조용히 실패한다. 발송 후 반드시 마커 개수와 보낸편지함 통수를 대조한다.
발송 후 검증 4종 — ① 스크립트 성공/실패 카운트 ② IMAP Sent Messages 수신자 대조(중복 없는지) ③ 노션 마커 개수 ④ 반송 스캔(get100_bounce_watch.py, 2시간마다 자동).
중복 방지 — 노션 메모 마커로 건다. 사전알림 안내를 이미 받은 사람은 레터에서 자동 제외, 이미 신청서를 낸 사람은 리마인드에서 자동 제외(기수 신청 DB 이메일 대조).
열람 추적 — api/track.js 가 이미 구현돼 있다. 오픈 픽셀 <img src="https://get100.co.kr/api/track?e=<email>&t=<sig>&v=<호수>">, 클릭은 같은 URL에 &u=<대상URL>. 서명은 수신거부와 동일한 HMAC(UNSUB_SECRET, email) 앞 20자. 오픈율은 이미지 차단 때문에 과소집계되니 클릭 수를 지표로 본다.
4-c. 신청 즉시 알림 (2026-08-26 구축)
폼 접수 서버 api/lead.js 가 노션에 행을 쓰자마자 밤냥이 봇으로 밤밤에게 DM한다(제출→DM 1초). Vercel 환경변수 DISCORD_TOKEN·BAMBAM_USER_ID 사용.
맥미니의 com.get100.notion-form-watch(5분 폴러, 5개 DB 감시)는 백업으로 남아 있으므로, 즉시 DM에 성공하면 노션 행에 [즉시알림 발송됨] 마커를 남겨 폴러가 건너뛰게 한다. 이 장치가 없으면 실제로 DM이 2통 간다.
⚠️ 모집 기수를 바꿀 때 두 곳을 같이 고친다 — api/lead.js 의 CURRENT_COHORT 와 apply.html 의 <input type="hidden" name="cohort">. 7기 모집 중에 기본값이 "6기"로 남아 있어 신청이 6기로 기록되던 버그가 있었다.
5. 노션 (운영본부 기록)
- Aside 노션 클라이언트의 쓰기(
addRow/addNew)가 404로 실패할 수 있음 (2026-08-03 확인). 우회 2가지:- 디스코드 봇의 노션 통합 토큰 (mac-mini
.env의NOTION_TOKEN, 공식 API): Get100 운영본부 전체 접근 가능. 회의록 DB<NOTION_DB_ID>, 길드 DB<NOTION_DB_ID>, 길드 지원 이력 DB<NOTION_DB_ID> - 브라우저 UI + 합성 paste: 본문은
DataTransfer에 text/html 담아new ClipboardEvent('paste', {clipboardData})디스패치 (시스템 클립보드는 샌드박스에서 pbcopy/osascript 모두 실패)
- 디스코드 봇의 노션 통합 토큰 (mac-mini
전파 내용 가공 원칙 (2026-08-03 확립)
- 운영진 회의 내용 중 멤버 전파는 선별한다: PM 보수·에어비앤비 재무·VIP 조율·전환율 진단 같은 운영진 전용 내용 제외. 제도 변경은 "폐지"가 아니라 멤버 입장에서 "새로 생기는 것"으로 프레이밍.
- 문안 톤 지적을 받으면 원안을 버리지 말고 수정안과 나란히 비교 제시 (feedback_tone_revision_keep_original).
Signals
- GitHub stars
- 367
- Forks
- 89
- Last commit
- Sep 2026
Advanced
- Item type
- skill
- Key
getback-broadcast- Source
- github.com/bam-bam-2/solo-skills
github.com/bam-bam-2/solo-skills
Related picks
Skill · leoyeai
The pick for Discorddiscord
Skill · anil-matcha
The pick for Discordgws-gmail
Skill · googleworkspace
The pick for Gmailopenakita/skills@gmail-automation
Skill · openakita
The pick for Gmailnewsletter-monetization-planner
Skill · aaron-he-zhu
The pick for Newsletternewsletter-writer
Skill · cbrock84
The pick for Newsletter