我用 Telegram 機器人發 IG:設定全流程
從 0 到能在 TG 拍照直接發到 IG — 用什麼帳號、什麼 API、寫多少 code、踩過哪些坑。完整步驟、不藏私。
我每天發 IG 不開 app。
拍完照、丟進一個 Telegram 群、按一顆按鈕 — 30 秒後 IG 已經上線。 caption 自動寫好、繁體、加標籤、配色照原圖、不裁切。
這篇拆給你看怎麼接。
全程花我 1 個週末 + 大概 USD$10/月 的 API。
為什麼這樣做
35+ 經營個人品牌 / 副業 / 公司,IG 是不可能不發的。 但每次:
- 開 app
- 滑半天找上次拍的照片
- 打字打半天又被 LINE 打斷
- 想配色又開不同 app
- 寫完 caption 才發現繁簡混雜
一次發文 15 分鐘起跳。一週 5 篇 = 75 分鐘。一個月 = 5 小時。
把這 5 小時拿回來。不是為了多發文、是為了少痛苦。
你需要準備的(5 樣)
| # | 工具 | 用途 | 花費 |
|---|---|---|---|
| 1 | Instagram Business 帳號 | 一定要 Business 不是 Creator 也不是 Personal | 免費 |
| 2 | Facebook Page(隨便建一個) | IG Business 必須綁 FB Page | 免費 |
| 3 | Upload-Post API key | 真正幫你 POST 到 IG 的 API | $10/月 起 |
| 4 | Telegram Bot | 你的遙控器 | 免費 |
| 5 | 一台 24 小時開機的機器 | 跑 Node.js bot | Mac mini / NAS / VPS 都行 |
⚠️ 不用 Meta Graph API 直接接。我試過、35+ 的人不要浪費生命在 IG Business Login 審核地獄。
Step 1 — IG 切 Business 模式(5 分鐘)
如果你 IG 還是 Personal 帳號:
- IG App → 設定 → 帳號類型與工具 → 切換為專業帳號
- 選商家(不是創作者)
- 連結到 FB Page(沒有就現場建一個)
這步沒做、後面 API 全部會 401。
Step 2 — 申請 Upload-Post(10 分鐘)
開帳號、付月費(free plan 有限額、確定要用就直接 starter)、拿 API key。
關鍵動作:Connect Instagram。 畫面會跳 IG OAuth、用你的 Business 帳號登入、授權。
授權完後你會看到一個 profile_username(這是 Upload-Post 端的 profile 名稱、不是你 IG handle)。記下來。
到這步、用 curl 就能發 IG:
curl -X POST "https://api.upload-post.com/api/upload_photo" \
-H "Authorization: Apikey YOUR_KEY" \
-F "user=YOUR_PROFILE" \
-F "platform[]=instagram" \
-F "caption=測試發文" \
-F "photo=@/path/to/photo.jpg"
成功一次、才往下走。沒成功就回頭查授權。
Step 3 — 建 Telegram Bot(3 分鐘)
- TG 搜
@BotFather /newbot- 取名字(顯示用)、取 username(要
_bot結尾) - BotFather 回給你一個 token、形如
123456:ABC-DEF... - 這個 token 等同密碼、不要外洩
順手做:
/setprivacy→ Disable(讓 bot 看得到群組訊息)/setcommands→ 加幾個指令例如start、status
Step 4 — Node.js Bot 骨架(20 分鐘)
挑一台 24 小時開機的機器(我用 Mac mini)。
mkdir my-ig-bot && cd my-ig-bot
npm init -y
npm i telegraf node-fetch dotenv form-data
建 .env:
TG_TOKEN=你剛拿到的 BotFather token
UPLOAD_POST_KEY=你的 Upload-Post API key
UPLOAD_POST_PROFILE=你的 profile_username
⚠️ .env 一定要 chmod 600、加進 .gitignore、永遠不要 commit。
建 index.js:
import { Telegraf } from 'telegraf';
import fetch from 'node-fetch';
import FormData from 'form-data';
import fs from 'fs';
import 'dotenv/config';
const bot = new Telegraf(process.env.TG_TOKEN);
bot.on('photo', async (ctx) => {
// 抓最大尺寸照片
const photo = ctx.message.photo.at(-1);
const link = await ctx.telegram.getFileLink(photo.file_id);
// 下載到本機
const tmpPath = `/tmp/${photo.file_id}.jpg`;
const res = await fetch(link.href);
fs.writeFileSync(tmpPath, Buffer.from(await res.arrayBuffer()));
// caption 從 TG 訊息抓、空的話給一句預設
const caption = ctx.message.caption || '無題';
// 推 Upload-Post
const form = new FormData();
form.append('user', process.env.UPLOAD_POST_PROFILE);
form.append('platform[]', 'instagram');
form.append('caption', caption);
form.append('photo', fs.createReadStream(tmpPath));
const upload = await fetch('https://api.upload-post.com/api/upload_photo', {
method: 'POST',
headers: { Authorization: `Apikey ${process.env.UPLOAD_POST_KEY}` },
body: form,
});
const result = await upload.json();
fs.unlinkSync(tmpPath);
if (result.success) {
await ctx.reply(`✅ 已發 IG\n${result.permalink || ''}`);
} else {
await ctx.reply(`❌ 失敗:${JSON.stringify(result)}`);
}
});
bot.launch();
console.log('bot 已啟動');
跑:
node index.js
打開 Telegram、找你的 bot、丟一張照片 + caption。 30 秒內你 IG 應該出現新貼文。
如果這步通了、你已經贏了。
Step 5 — 跑 24 小時不掛(必做)
node index.js 終端機關掉就死了、要常駐:
Mac mini / Linux(用 pm2):
npm i -g pm2
pm2 start index.js --name ig-bot
pm2 save
pm2 startup # 跟著指示設定開機自啟
Synology NAS:用 Docker Compose 跑(Dockerfile 自己寫個 FROM node:20-alpine)。
踩過的坑:用 nohup node index.js > log.txt & 跑的話、Node console.log 會被 buffer 卡住、log 延遲分鐘級看不到即時狀況。要在 index.js 開頭加:
process.stdout.setBlocking?.(true);
process.stderr.setBlocking?.(true);
Step 6 — 進階加值(可選、但都很值得)
到這你已經能用了。下面這些是 1.5 年累積、讓每天發文真的不費力的加值:
A. caption 草稿自動產生
照片內容 → 丟 LLM(OpenAI / Claude)→ 出 3 個版本繁體 caption + 標籤建議。 按鈕選一個發出去。 省最多時間的一塊。
B. 配色濾鏡(ffmpeg)
所有照片過一個 LUT、保證色調一致。 35+ 經營品牌、配色一致比照片好看更重要。
ffmpeg -i in.jpg -vf "lut3d=your_preset.cube" out.jpg
C. 影片自動上字幕
TG 丟影片 → whisper 跑 SRT → PNG overlay → 推 Reels。 35+ 不錄旁白也能發 Reels。
D. 多帳號分流
我同時管 3 個 IG(個人 / 主題帳 / 客戶)。 Telegram 群裡用不同 chat_id 路由到不同 Upload-Post profile。 一個 bot 全包。
E. 失敗草稿保留
API 偶爾會 429 / 超月配額。 把照片 + caption 寫進 SQLite、隔天補發、不會丟內容。
真實踩過的 5 個坑
-
mDNSRespondercache 問題 — Mac 上跑、IG OAuth 回 callback 偶爾被本機 DNS 卡住。解:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder。 -
Node 18 內建 fetch IPv6 bug — 某些網路環境下
node-fetch比 Node 內建 fetch 穩。或加旗標--no-network-family-autoselection --dns-result-order=ipv4first。 -
照片 ratio — IG Feed 接受 4:5 到 1.91:1。超出就被裁。發前先檢查、必要時 ffmpeg padding。
-
caption 4 行 truncate — IG 在 Feed 只顯示前 4 行就要按「更多」。最重要的 hook 寫第 1 行。
-
配額限制 — Upload-Post starter plan 一天 500 次、發太多會 429。月底前留 buffer。
為什麼推這個給 35+
不是叫你變網紅。 是讓經營內容的痛苦下降到不會放棄的程度。
35 後時間是最貴的資源。 自動化值得寫的不是省時、是降低啟動門檻。
從「想到要發 IG 就煩」、變成「拍完隨手丟 TG 就好」。 這個差異會讓你從一週發 1 次變一週發 5 次。
而 IG 的演算法、就是吃這個頻率。
完整 stack 我跑了什麼
→ Node.js + Telegraf + Upload-Post + ffmpeg + whisper + SQLite → 跑在 Mac mini、24 小時開機、年耗電大概 NT$300 → 月固定費用:Upload-Post $10 + OpenAI API ~$5(caption 草稿用) → 總成本:USD$15/月
少喝 3 杯咖啡的錢、換每天 15 分鐘。
如果你想要我的完整 repo + 設定範本(包含 caption prompt、ffmpeg LUT preset、Docker compose、systemd unit):
→ DM 我「TG bot」、第一期月信寄到你信箱。
每月 4 期、固定週四
Stack 月報 / 便當週記 / 35+ 觀點 / Q&A。免費、可隨時退訂。