buti × Forest
工作流程

我用 Telegram 機器人發 IG:設定全流程

從 0 到能在 TG 拍照直接發到 IG — 用什麼帳號、什麼 API、寫多少 code、踩過哪些坑。完整步驟、不藏私。

· 紀錄 · 16 分鐘讀完 ·
#自動化#Telegram#Instagram#工具#35+

我每天發 IG 不開 app。

拍完照、丟進一個 Telegram 群、按一顆按鈕 — 30 秒後 IG 已經上線。 caption 自動寫好、繁體、加標籤、配色照原圖、不裁切。

這篇拆給你看怎麼接。

全程花我 1 個週末 + 大概 USD$10/月 的 API。


為什麼這樣做

35+ 經營個人品牌 / 副業 / 公司,IG 是不可能不發的。 但每次:

  • 開 app
  • 滑半天找上次拍的照片
  • 打字打半天又被 LINE 打斷
  • 想配色又開不同 app
  • 寫完 caption 才發現繁簡混雜

一次發文 15 分鐘起跳。一週 5 篇 = 75 分鐘。一個月 = 5 小時。

把這 5 小時拿回來。不是為了多發文、是為了少痛苦


你需要準備的(5 樣)

#工具用途花費
1Instagram Business 帳號一定要 Business 不是 Creator 也不是 Personal免費
2Facebook Page(隨便建一個)IG Business 必須綁 FB Page免費
3Upload-Post API key真正幫你 POST 到 IG 的 API$10/月 起
4Telegram Bot你的遙控器免費
5一台 24 小時開機的機器跑 Node.js botMac mini / NAS / VPS 都行

⚠️ 不用 Meta Graph API 直接接。我試過、35+ 的人不要浪費生命在 IG Business Login 審核地獄。


Step 1 — IG 切 Business 模式(5 分鐘)

如果你 IG 還是 Personal 帳號:

  1. IG App → 設定 → 帳號類型與工具 → 切換為專業帳號
  2. 商家(不是創作者)
  3. 連結到 FB Page(沒有就現場建一個)

這步沒做、後面 API 全部會 401。


Step 2 — 申請 Upload-Post(10 分鐘)

https://upload-post.com

開帳號、付月費(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 分鐘)

  1. TG 搜 @BotFather
  2. /newbot
  3. 取名字(顯示用)、取 username(要 _bot 結尾)
  4. BotFather 回給你一個 token、形如 123456:ABC-DEF...
  5. 這個 token 等同密碼、不要外洩

順手做:

  • /setprivacy → Disable(讓 bot 看得到群組訊息)
  • /setcommands → 加幾個指令例如 startstatus

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 個坑

  1. mDNSResponder cache 問題 — Mac 上跑、IG OAuth 回 callback 偶爾被本機 DNS 卡住。解:sudo dscacheutil -flushcache; sudo killall -HUP mDNSResponder

  2. Node 18 內建 fetch IPv6 bug — 某些網路環境下 node-fetch 比 Node 內建 fetch 穩。或加旗標 --no-network-family-autoselection --dns-result-order=ipv4first

  3. 照片 ratio — IG Feed 接受 4:5 到 1.91:1。超出就被裁。發前先檢查、必要時 ffmpeg padding。

  4. caption 4 行 truncate — IG 在 Feed 只顯示前 4 行就要按「更多」。最重要的 hook 寫第 1 行。

  5. 配額限制 — 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」、第一期月信寄到你信箱。

buti 月信

每月 4 期、固定週四

Stack 月報 / 便當週記 / 35+ 觀點 / Q&A。免費、可隨時退訂。

繼續看

下一篇推薦