Дата: 2026-04-29 Контекст: Вова завів Threads для Pediatric News. Тепер треба завершити налаштування щоб ми могли автоматично публікувати пости.
app_id=969901575530112 (від Вови, 24.04)/srv/passepartout/meta/threads/pediatric-news-app.txtЗайти на https://developers.facebook.com/apps/969901575530112/
1.1. Use cases → Edit
threads_basic — обов'язковоthreads_content_publish — щоб поститиthreads_manage_replies — опційно (якщо хочемо реагувати на коментарі)1.2. App Settings → Basic
31-131-26-203.nip.iohttps://31-131-26-203.nip.io/privacy (можу зробити заглушку)1.3. Threads → Settings
https://31-131-26-203.nip.io/threads/callback1.4. App Mode
Що скинути мені після цього: скрін з налаштованими Redirect URI і списком scopes — щоб я побачив що все на місці.
Я підніму на нашому Caddy маленьку сторінку https://31-131-26-203.nip.io/threads/callback, яка:
?code=... від Meta після OAuthcode → short-lived token → long-lived token (60 днів)/srv/passepartout/meta/threads/Робити цей крок паралельно з Вовиним кроком 1 — кажи коли готовий, і я запускаю.
Я згенерую URL виду:
https://threads.net/oauth/authorize?client_id=969901575530112&redirect_uri=https://31-131-26-203.nip.io/threads/callback&scope=threads_basic,threads_content_publish&response_type=code
Вова:
Що повернути: скрін успіху або скрін помилки якщо щось не так.
Як тільки токен у passepartout — я роблю тестовий пост через API:
POST https://graph.threads.net/v1.0/{threads-user-id}/threads
text=Тестовий пост від PharmaGen-pipeline 🧪
media_type=TEXT
→ container_id
POST https://graph.threads.net/v1.0/{threads-user-id}/threads_publish
creation_id=container_id
→ post_id
Якщо пост з'явився у акаунті — pipeline працює, можемо рухатись до workflow.
Створю workflow Pediatric News — Threads Publisher:
Schedule (cron) АБО Webhook
↓
HTTP Request: фетч контенту з джерела
(TBD: звідки контент? RSS? Notion? Google Sheets? PharmaGen KZ?)
↓
HTTP Request: POST /threads (create container)
↓
HTTP Request: POST /threads_publish (publish)
↓
Telegram нотифікація: «✓ опубліковано»
Що мені треба знати від тебе перед побудовою:
- Звідки тягнути контент? Варіанти:
- Готові пости з Notion / Google Sheets
- Згенеровані через PharmaGen KZ (тобто інтеграція з нашим тулом)
- RSS-фід когось іншого (передруки)
- Ручний trigger (Сергій кидає в Telegram → бот публікує)
- Як часто постити? Раз на день? Через день? По ручному triggerу?
- Картинки чи тільки текст? Threads підтримує обидва — але для картинок треба public URL (ми вже хостимо PharmaGen-картинки, можна підкласти)
- Чи хочемо Telegram-апрув перед публікацією? Тобто Настя/Сергій бачать чорновик у TG → тиснуть «✓ публікувати» → тільки тоді постимо
Long-lived токен живе 60 днів. Треба cron який раз на 30 днів робить:
GET https://graph.threads.net/v1.0/refresh_access_token?grant_type=th_refresh_token&access_token=...
→ новий токен на 60 днів
Налаштую через /etc/cron.d/threads-token-refresh.cron — щоб ти забув про токени взагалі.
Коли все працює — у Meta Dashboard перевести App Mode з Development у Live. Meta робить базовий рев'ю (~1-3 дні). Для нашого простого read+publish use-case проходить майже завжди.
Після Live:
| Крок | Хто | Час |
|---|---|---|
| 1. Налаштувати App у Meta Dashboard | Вова | 5 хв |
| 2. Підняти callback на VPS | Я | 15 хв |
| 3. OAuth flow під Threads-акаунтом Pediatric News | Вова | 2 хв |
| 4. Тестовий пост | Я | 5 хв |
| 5. n8n workflow | Я (треба узгодження джерела контенту) | 30-60 хв |
| 6. Cron на refresh токена | Я | 10 хв |
| 7. App у Live mode | Вова + Meta review | 1-3 дні |
Перший крок — на стороні Вови (пункт 1). Як тільки скине скрін з налаштованим Redirect URI і scopes — я підніму callback і генерую OAuth URL.
Перед пунктом 5 (workflow) — треба узгодити з тобою 4 питання вище: джерело контенту, частота, картинки, апрув-флоу.