Kembali ke panduan Bot Telegram

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.

Workflow AI Agent: When chat message received → AI Agent (dengan OpenAI Chat Model, Window Buffer Memory, SerpAPI, Call n8n Workflow Tool) → If → cabang Success dan Failure.
Workflow acuan kita — setiap kotak adalah satu "part" yang akan kita terjemahkan jadi kode.

Trigger

Pesan masuk = bot langsung jalan.

AI Agent

Model + memori + tools jadi satu otak.

If

Berhasil → kirim, gagal → minta maaf.

1
Konsep dulu

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:

Peta flow (tree)
⚡ 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"
Intinya cuma 3 fase: (1) terima pesan (2) olah di AI Agent (3) cek hasil & balas. Tiga fase ini persis tiga "Part" yang akan kita kode.
2

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.

Di n8n kamu mengisi setting ini lewat klik-klik. Di kode, setting yang sama jadi baris pengaturan — misalnya system (system prompt), model (chat model), dan MAX_PESAN (context window memory).
3

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:

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 zod

Simpan semua kunci rahasia di file .env (jangan ditulis di dalam kode, jangan di-upload ke GitHub):

bot-ai/.env
TELEGRAM_TOKEN=123456789:AAE-ContohTokenKamu_RAHASIA
AI_GATEWAY_API_KEY=vck_contoh_key_dari_vercel
SERPAPI_KEY=serpapi_contoh_key_buat_pencarian
Tiga kunci di atas: dari BotFather, dari Vercel AI Gateway, dan (opsional) dari serpapi.com kalau mau fitur pencarian. Tambahkan .env ke .gitignore.
4

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
// 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.
5
Bagian terpenting

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
// 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 kodeNode 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
Mau menambah "Call n8n Workflow Tool"? Tinggal bikin satu tool() lagi (mis. cekStok atau buatOrder) dan masukkan ke tools: { cariGoogle, cekStok }. Agent akan memilih sendiri tool mana yang dipakai.
6

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
// 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

Halo, kamu bisa apa?10:01
Halo! Aku bisa menjawab pertanyaan dan mencari info terbaru di Google. Mau tanya apa? 😊10:01
Harga emas hari ini berapa?10:02
Sebentar, aku cek dulu... 🔍 Per hari ini harga emas Antam sekitar Rp1.3jt/gram (sumber pencarian).10:02
7

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 — lengkap
// 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...')
Struktur rapi: bot.js mengurus Telegram (trigger + balasan), agent.jsmengurus "otak" AI. Mau ganti bot jadi asisten lain? Cukup ubah system dan tools di agent.js.
8
Tayang!

Jalankan bot 24/7

Tes dulu di komputer/HP:

Terminal
# tes dulu di komputer/HP (memuat .env otomatis)
node --env-file=.env bot.js

Sudah jalan? Pindahkan ke VPS dan jaga dengan PM2 agar tetap online walau terminal ditutup:

Terminal (VPS)
# jalankan terus-menerus di VPS dengan PM2
pm2 start "node --env-file=.env bot.js" --name bot-ai
pm2 save
pm2 status
Selesai! Kamu baru saja meniru workflow AI Agent gaya n8n jadi bot Telegram beneran — lengkap dengan trigger, memori, tool pencarian, dan percabangan success/failure.

Lanjut ke mana?