Lanjutan — bot AI Agent gaya trigger (n8n)
Bikin bot Telegram AI Agent (versi trigger)
Pernah lihat workflow seperti di bawah ini — Trigger → AI Agent → If → Success/Failure? Di sini kita tiru jadi bot Telegram beneran: kamu kirim pesan, AI menjawab (boleh pakai memori & pencarian Google), lalu hasilnya dikirim balik. Tiap part kita jelaskan settingannya untuk apa, plus ada tombol Salin di setiap kode supaya tinggal tempel.

Trigger
Pesan masuk = bot langsung jalan.
AI Agent
Model + memori + tools jadi satu otak.
If
Berhasil → kirim, gagal → minta maaf.
Pahami flow-nya dulu (diagram tree)
Sebelum koding, lihat arah jalannya data. Bedanya dengan bot menu biasa: ini berbasis trigger — bot tidak menunggu tombol, tapi langsung bereaksi tiap ada pesan. Pesan mengalir dari atas ke bawah seperti pohon berikut:
⚡ When chat message received ← TRIGGER (akar): pesan masuk
│
▼
🤖 AI Agent (Tools Agent) ← OTAK: memutuskan & menjawab
│
├─ 🧠 OpenAI Chat Model ← cara berpikir (model bahasa)
├─ 💾 Window Buffer Memory ← ingatan (pesan terakhir)
├─ 🔍 SerpAPI ← tool: cari di Google
└─ 🧩 Call n8n Workflow ← tool: jalankan aksi lain
│
▼
🔀 If (hasilnya berhasil?) ← PERCABANGAN
├─ ✅ true → Success: kirim jawaban ke user
└─ ❌ false → Failure: kirim pesan "maaf, error"Kenali tiap part & settingannya untuk apa
Tiap kotak di workflow punya tugas sendiri. Ini "kamus"-nya — baca sekali biar paham fungsinya, nanti tinggal cocokkan dengan kode di langkah berikutnya.
When chat message received
Trigger (akar)
Untuk apa: Titik mulai. Aktif setiap ada pesan masuk dari user.
Settingnya: Tidak perlu setting khusus — cukup tahu "pesan masuk = workflow jalan".
AI Agent (Tools Agent)
Otak utama
Untuk apa: Membaca pesan, memutuskan harus menjawab langsung atau memakai tool.
Settingnya: Isi "System Prompt" = kepribadian & tugas bot. Pilih model, memory, dan tools di bawahnya.
OpenAI Chat Model
Cara berpikir
Untuk apa: Model bahasa yang dipakai agent untuk menyusun jawaban.
Settingnya: Pilih model (mis. gpt-4o-mini) + API key. Makin pintar model = makin mahal.
Window Buffer Memory
Ingatan
Untuk apa: Mengingat beberapa pesan terakhir agar bot nyambung saat ngobrol.
Settingnya: Atur "Context Window" = berapa pesan terakhir yang diingat (mis. 10).
SerpAPI
Tool: cari Google
Untuk apa: Memberi agent kemampuan mencari info terbaru di internet.
Settingnya: Tempel SerpAPI key. Agent memanggilnya sendiri saat butuh data baru.
Call n8n Workflow Tool
Tool: aksi lain
Untuk apa: Menjalankan workflow/fungsi lain (mis. cek stok, buat order).
Settingnya: Di kode = tinggal tambah satu tool() lagi dengan tugas berbeda.
If
Percabangan
Untuk apa: Mengecek hasil agent: berhasil (true) atau gagal (false).
Settingnya: Cabang true → kirim jawaban. Cabang false → kirim pesan error.
system (system prompt), model (chat model), dan MAX_PESAN (context window memory).Siapkan project & token
Buat bot di @BotFather dan ambil tokennya (sama seperti di panduan Bot Telegram langkah 1). Lalu buat project dan pasang library-nya — klik Salin, tempel di terminal:
# 1. buat folder project
mkdir bot-ai && cd bot-ai
# 2. siapkan package.json
npm init -y
# 3. pasang library yang dibutuhkan
# - node-telegram-bot-api : sambungan ke Telegram (Trigger + kirim pesan)
# - ai + zod : AI Agent, tools, dan validasi input
npm install node-telegram-bot-api ai zodSimpan semua kunci rahasia di file .env (jangan ditulis di dalam kode, jangan di-upload ke GitHub):
TELEGRAM_TOKEN=123456789:AAE-ContohTokenKamu_RAHASIA
AI_GATEWAY_API_KEY=vck_contoh_key_dari_vercel
SERPAPI_KEY=serpapi_contoh_key_buat_pencarian.env ke .gitignore.Part 1 — Trigger: terima pesan masuk
Ini terjemahan kotak "When chat message received". Buat file bot.js. Fungsi bot.on('message') adalah trigger-nya: dipanggil otomatis tiap ada pesan, lalu meneruskannya ke AI Agent.
// bot.js — PART 1: TRIGGER "When chat message received"
const TelegramBot = require('node-telegram-bot-api')
const { jalankanAgent } = require('./agent')
const bot = new TelegramBot(process.env.TELEGRAM_TOKEN, { polling: true })
// trigger: setiap ada pesan masuk, fungsi ini jalan
bot.on('message', async (msg) => {
const chatId = msg.chat.id
const teks = msg.text || ''
if (!teks) return
// tampilkan "sedang mengetik..." biar terasa hidup
await bot.sendChatAction(chatId, 'typing')
// ⬇️ pesan diteruskan ke AI Agent (Part 2) lalu dicek di Part 3
await tanganiPesan(chatId, teks)
})
console.log('Bot AI Agent berjalan...')sendChatAction(chatId, 'typing')memunculkan tulisan "sedang mengetik…" di Telegram — trik kecil biar bot terasa responsif saat AI sedang berpikir.Part 2 — AI Agent: model + memory + tools
Inilah jantung workflow — kotak AI Agent beserta tiga anaknya. Buat file agent.js. Perhatikan tiga blok bertanda (a), (b), (c) — masing-masing adalah node di gambar:
// agent.js — PART 2: AI AGENT (otak dari workflow)
const { generateText, tool, stepCountIs } = require('ai')
const { z } = require('zod')
// (a) MEMORY — "Window Buffer Memory":
// simpan beberapa pesan terakhir per chat, bukan seluruh riwayat.
const ingatan = {}
const MAX_PESAN = 10
const ambilMemori = (chatId) => ingatan[chatId] || []
function simpanMemori(chatId, role, content) {
ingatan[chatId] = [...ambilMemori(chatId), { role, content }].slice(-MAX_PESAN)
}
// (b) TOOL — "SerpAPI": alat agar agent bisa cari info terbaru di Google
const cariGoogle = tool({
description: 'Cari informasi terbaru di internet lewat Google (SerpAPI).',
inputSchema: z.object({ query: z.string().describe('kata kunci pencarian') }),
execute: async ({ query }) => {
const url =
'https://serpapi.com/search.json?q=' +
encodeURIComponent(query) +
'&api_key=' + process.env.SERPAPI_KEY
const res = await fetch(url)
const data = await res.json()
return (
data.organic_results?.slice(0, 3).map((r) => r.snippet).join('\n') ||
'Tidak ada hasil.'
)
},
})
// (c) AGENT — gabungkan MODEL + MEMORY + TOOLS jadi satu "otak"
async function jalankanAgent(chatId, pesanUser) {
simpanMemori(chatId, 'user', pesanUser)
const { text } = await generateText({
model: 'openai/gpt-4o-mini', // ← "OpenAI Chat Model"
system: 'Kamu asisten yang ramah, menjawab singkat dalam Bahasa Indonesia.',
messages: ambilMemori(chatId), // ← "Window Buffer Memory"
tools: { cariGoogle }, // ← "SerpAPI" (tool yang boleh dipakai)
stopWhen: stepCountIs(5), // batas: maksimal 5 langkah berpikir
})
simpanMemori(chatId, 'assistant', text)
return text
}
module.exports = { jalankanAgent }| Di kode | Node di workflow |
|---|---|
| model: "openai/gpt-4o-mini" | OpenAI Chat Model |
| messages: ambilMemori(chatId) | Window Buffer Memory |
| tools: { cariGoogle } | SerpAPI |
| system: "Kamu asisten..." | System Prompt di AI Agent |
tool() lagi (mis. cekStok atau buatOrder) dan masukkan ke tools: { cariGoogle, cekStok }. Agent akan memilih sendiri tool mana yang dipakai.Part 3 — If: cabang Success / Failure
Kotak If mengecek: apakah agent berhasil? Di kode, ini cukup memakai try / catch. Kalau sukses → kirim jawaban (cabang true / Success). Kalau error → kirim pesan maaf (cabang false / Failure). Tempel fungsi ini di bot.js:
// bot.js — PART 3: IF (cek hasil) → Success / Failure
// tempel fungsi ini di bawah Part 1.
async function tanganiPesan(chatId, teks) {
try {
// panggil AI Agent (Part 2)
const jawaban = await jalankanAgent(chatId, teks)
// ✅ CABANG TRUE — "Success: Send message"
await bot.sendMessage(chatId, jawaban)
} catch (err) {
// ❌ CABANG FALSE — "Failure: Send message"
console.error('Agent gagal:', err)
await bot.sendMessage(
chatId,
'⚠️ Maaf, lagi ada gangguan sebentar. Coba kirim lagi ya.',
)
}
}Hasilnya di HP user kira-kira begini:
Bot AI Agent
online
Gabung jadi satu bot.js
Biar gampang, ini bot.js versi utuh (Part 1 + Part 3). File agent.js dari langkah 5 tetap terpisah. Klik Salin, tempel, selesai:
// bot.js — versi lengkap (Part 1 + Part 3 jadi satu file)
const TelegramBot = require('node-telegram-bot-api')
const { jalankanAgent } = require('./agent')
const bot = new TelegramBot(process.env.TELEGRAM_TOKEN, { polling: true })
// PART 1 — TRIGGER: pesan masuk
bot.on('message', async (msg) => {
const chatId = msg.chat.id
const teks = msg.text || ''
if (!teks) return
await bot.sendChatAction(chatId, 'typing')
await tanganiPesan(chatId, teks)
})
// PART 3 — IF: berhasil → Success, gagal → Failure
async function tanganiPesan(chatId, teks) {
try {
const jawaban = await jalankanAgent(chatId, teks) // PART 2 (otak)
await bot.sendMessage(chatId, jawaban) // ✅ Success
} catch (err) {
console.error('Agent gagal:', err)
await bot.sendMessage(chatId, '⚠️ Maaf, lagi ada gangguan. Coba lagi ya.') // ❌ Failure
}
}
console.log('Bot AI Agent berjalan...')bot.js mengurus Telegram (trigger + balasan), agent.jsmengurus "otak" AI. Mau ganti bot jadi asisten lain? Cukup ubah system dan tools di agent.js.Jalankan bot 24/7
Tes dulu di komputer/HP:
# tes dulu di komputer/HP (memuat .env otomatis)
node --env-file=.env bot.jsSudah jalan? Pindahkan ke VPS dan jaga dengan PM2 agar tetap online walau terminal ditutup:
# jalankan terus-menerus di VPS dengan PM2
pm2 start "node --env-file=.env bot.js" --name bot-ai
pm2 save
pm2 status