Membangun agen briefing pagi dengan News Search API

Setiap founder, PM, dan analis menginginkan hal yang sama pada pukul 8 pagi: ringkasan rapi tentang apa yang berubah semalam. Dengan News Search API, sebuah LLM, dan platform cron berbasis HTTP, Anda bisa merilisnya dalam satu sore.
TL;DR
- •Arsitektur: cron → News Search → URL Extract untuk berita yang menjanjikan → ringkasan LLM → posting Slack/email.
- •Atur kesegaran dengan <code>start_date</code> = hari ini − 1; atur locale dengan <code>country_code</code>.
- •Pecah briefing per topik dengan kueri News Search paralel; LLM menggabungkan dan menghilangkan duplikat.
- •Total biaya sekitar ~15 credits per topik per hari, ditambah token LLM. Briefing 5 topik < $0,10/hari pada harga daftar.
Bentuk briefing yang berguna
Agen briefing pagi harus menjawab satu pertanyaan: 'apa yang berubah semalam yang perlu saya ketahui?' Standarnya lebih tinggi dari kelihatannya. Tumpukan judul gagal — itu sama saja dengan RSS dan akan di-mute dalam seminggu. Yang bertahan adalah digest 5 poin dengan tautan, tersusun per topik, dengan gaya bahasa pengguna.
Itu terurai menjadi pipeline kecil:
- Ambil berita terkini di N topik — News Search API.
- Ekstrak isi setiap tautan yang ingin dikutip model — URL Extract API.
- Ringkas + kelompokkan dengan LLM — model pilihan Anda.
- Posting ke Slack / email / Notion — channel komunikasi Anda yang sudah ada.
- Jadwalkan dengan cron — Vercel Cron, GitHub Actions, n8n, dll.
Langkah 1: pilih topik Anda
Batasi 3–6 topik. Briefing dengan 12 topik akan dilewati dengan scroll. Contoh:
- Untuk founder SaaS B2B: 'putaran funding AI', 'berita OpenAI / Anthropic', 'gerakan kompetitor'.
- Untuk analis keuangan: 'FOMC dan Treasury', 'rantai pasok semikonduktor', 'ticker tertentu'.
- Untuk PM healthcare: 'persetujuan FDA', 'hasil uji klinis', 'perubahan reimbursement'.
Langkah 2: ambil sinyal mentah
Jalankan satu panggilan News Search per topik secara paralel. Gunakan start_date untuk membatasi kesegaran:
from datetime import date, timedelta
import asyncio, aiohttp
KEY = "pk_yourkey"
TOPICS = [
"AI agent infrastructure funding",
"OpenAI Anthropic Google new releases",
"RAG and LLM tool calling research",
]
async def fetch_topic(session, q):
yesterday = (date.today() - timedelta(days=1)).isoformat()
async with session.post(
"https://www.apipick.com/api/search/news",
headers={"x-api-key": KEY},
json={"query": q, "start_date": yesterday},
) as r:
return q, await r.json()
async def fetch_all():
async with aiohttp.ClientSession() as s:
return await asyncio.gather(*[fetch_topic(s, q) for q in TOPICS])Setiap panggilan mengembalikan hingga 5 judul terperingkat (maks 10 dengan num_results). Untuk briefing 3 topik itu 3 × 15 = 45 credits per run. Pada tarif $5 / 5.000 credits, $0,045/hari. Biaya harian didominasi oleh LLM, bukan News API.
Langkah 3: ekstrak isi secara selektif
Anda tidak butuh konten penuh dari setiap berita — hanya yang ingin dikutip model secara rinci. Heuristik sederhana: ekstrak 2 berita teratas per topik. Dengan API Pick itu satu panggilan batch:
import requests
urls = [r["url"] for topic, payload in results for r in payload["results"][:2]]
extracted = requests.post(
"https://www.apipick.com/api/extract",
headers={"x-api-key": KEY},
json={"urls": urls, "extract_effort": "auto"},
).json()Pada 2 credits per URL, langkah ekstrak menambah ~12 credits/hari untuk briefing 3 topik.
Langkah 4: prompt peringkas
Prompt adalah tempat gaya bahasa briefing hidup. Titik awal:
You are an assistant that writes a morning briefing in <Sarah's> voice:
direct, no fluff, no marketing language.
Input: a JSON list of {topic, headlines, extracted_bodies}.
Output rules:
- 1 short paragraph per topic, max 60 words.
- Each paragraph ends with up to 3 inline source links.
- If a topic has fewer than 2 substantive stories overnight, omit it.
- If the entire briefing has fewer than 2 substantive topics, output the
literal token SKIP and nothing else.
- Never editorialise. Quote facts and figures verbatim from the sources.
Output format: Slack-flavoured markdown.Instruksi 'SKIP jika sinyal rendah' adalah aturan dengan daya ungkit tertinggi. Itulah alasan briefing Anda tidak akan di-mute.
Langkah 5: posting dan jadwalkan
Untuk cron Python, seluruh skripnya < 80 baris. Posting Slack:
if briefing.strip() == "SKIP":
return
requests.post(
SLACK_WEBHOOK_URL,
json={"text": briefing, "username": "Morning Briefing", "icon_emoji": ":sunrise:"},
)Jadwalkan dengan Vercel Cron (di vercel.json), GitHub Actions, AWS EventBridge, atau n8n. Jalankan pukul 7:45 pagi di zona waktu Anda — tujuannya agar sudah menunggu saat Anda duduk pukul 8.
Melakukannya di n8n jika Anda lebih suka no-code
- Schedule trigger — harian, 7:45 zona waktu pengguna.
- Node HTTP Request (satu per topik), POST
/api/search/newsdenganstart_datedari kemarin. - Node Merge menggabungkan hasil topik.
- Node HTTP Request memanggil
/api/extractdengan URL teratas. - Node OpenAI / Anthropic menjalankan prompt peringkas.
- Node If memeriksa bahwa output bukan SKIP.
- Node Slack memposting briefing.
Apa yang perlu diwaspadai di produksi
- Pergeseran topik. 'AI agents' jadi terlalu luas setelah 6 bulan — indeks API bertambah; briefing Anda harus tetap spesifik. Perketat kueri setiap kuartal.
- Pengulangan antarhari. Berikan ke model URL hari sebelumnya dengan 'don't re-cover stories from this list' jika berita yang sama terus muncul.
- Akhir pekan yang sepi. Aturan SKIP sudah menangani ini; cukup jangan mengikat kebiasaan check-in harian Anda pada briefing.
Iterasi, jangan rilis-lalu-lupakan
Baca briefing setiap pagi selama seminggu. Catat di mana model berbohong, salah mengelompokkan, atau melewatkan sesuatu. Perbarui prompt. Setelah seminggu iterasi, briefing menjadi kebiasaan — dan Anda telah membangun agen yang berfungsi dengan sekitar 80 baris kode dan tiga panggilan API.
Pertanyaan yang Sering Diajukan
Kenapa tidak pakai Google News atau agregator RSS saja?
Keduanya bisa — dan keduanya menyisakan bagian membosankan untuk Anda: mengelompokkan, menghapus duplikat, meringkas, dan menulis briefing yang sebenarnya. Agen melakukan bagian itu dengan LLM. RSS memberi Anda judul; agen memberi Anda paragraf yang menjelaskan apa yang penting dan menautkan ke sumber.
Seberapa segar News Search API itu?
API mengindeks media besar nyaris secara real-time. Untuk briefing pukul 8 pagi yang mencakup 24 jam sebelumnya, atur start_date ke kemarin. Untuk bot berita terkini yang berjalan tiap jam, atur start_date ke hari ini dan jalankan ulang agen dengan deduplikasi terhadap run terakhir Anda.
Bagaimana kalau briefing tidak punya hal baru untuk dikatakan?
Masukkan ke dalam prompt: 'If fewer than 3 substantive stories changed overnight, return SKIP.' Cron job Anda harus menghormati SKIP dan tidak memposting briefing bersinyal rendah. Kelelahan briefing adalah jalan tercepat untuk membuat channel Slack di-mute.
Bisakah saya menjalankannya tanpa n8n?
Bisa. Alur yang sama berjalan sebagai skrip Python 30 baris di cron — lihat contoh di bawah. n8n praktis untuk debugging visual dan integrasi Slack, tapi tidak wajib.
Bagaimana mencegah berita yang sama diringkas di beberapa topik?
Berikan ke model URL dari kueri sebelumnya dalam run yang sama dengan instruksi: 'do not re-mention any URL already covered.' Atau jalankan satu pencarian multi-topik dan biarkan model membaginya. Keduanya bisa; yang kedua lebih murah.
API yang digunakan dalam artikel ini
Sarah Choy adalah CEO API Pick. Ia menulis tentang membangun API siap produksi untuk AI agent dan alur kerja LLM.