Panduan: Bot Telegram AI dengan Hermes + RAG + 9Router + Combo Fallback dengan xcodepod.cloud

Punya bot Telegram yang bisa jawab pakai AI, tapi tahan banting saat provider down? Ini caranya.

Di era AI yang berkembang pesat, memiliki akses ke berbagai model LLM dari satu endpoint tunggal adalah kebutuhan yang semakin umum. 9Router hadir sebagai solusi gateway yang memungkinkan kamu menggabungkan berbagai provider AI, mulai dari model lokal hingga provider cloud seperti OpenRouter, ke dalam satu antarmuka yang kompatibel dengan OpenAI API.

Artikel ini mendokumentasikan setup lengkap: dari konfigurasi 9Router dengan combo fallback berlapis, Hermes sebagai agent, sampai bot Telegram yang siap dipakai 24/7.


Arsitektur

Telegram ──> Hermes Gateway ──> 9Router ──> Combo Fallback ──> Provider
  • Telegram = client (HP/laptop)
  • Hermes = agent yang nerima pesan, punya memory & skill
  • 9Router = gateway multi-model dengan combo fallback
  • Provider = OpenRouter, Ollama lokal, dll

Yang perlu di-setting: 3 lapis — 9Router, Hermes, Telegram. Urutannya dari bawah ke atas.


Bagian 1: Apa Itu Hermes Agent?

Hermes Agent adalah AI agent otonom yang dibangun oleh Nous Research. Berbeda dengan chatbot biasa atau coding copilot yang terikat IDE, Hermes dirancang untuk berjalan terus-menerus dan belajar dari pengalaman.

Fitur Utama

FiturPenjelasan
Closed Learning LoopAgent membuat skill dari pengalaman, memperbaikinya saat digunakan, dan mengingat konteks antar sesi
Persistent MemoryInformasi lingkungan dan preferensi pengguna disimpan di MEMORY.md dan USER.md, dimuat otomatis ke system prompt
Skill SystemProses kompleks disimpan sebagai file Markdown di ~/.hermes/skills/, bisa digunakan ulang dan diperbaiki sendiri
Multi-Platform GatewayCLI, Telegram, Discord, Slack, WhatsApp, dan 20+ platform lainnya dari satu gateway
Tool & API Integration60+ tool bawaan termasuk pencarian web, eksekusi terminal, operasi file, browser automation
Eksekusi 24/7Setelah diinstall sebagai systemd service, agent terus aktif menerima pesan dan menjalankan cron job

Bagian 2: Apa Itu 9Router?

9Router adalah proxy/gateway Node.js yang menyediakan endpoint OpenAI-compatible dan meneruskan request ke berbagai provider AI.

Fitur Utama

FiturPenjelasan
OpenAI-Compatible APIEndpoint /v1/chat/completions yang bisa dipakai oleh tool apa pun yang mendukung OpenAI API
40+ ProviderOpenRouter, OpenAI, Anthropic, Groq, Ollama lokal, dan banyak lagi
Combo (Fallback Chain)Kumpulan model dengan urutan prioritas. Jika model pertama gagal, otomatis coba model berikutnya
Smart 3-Tier FallbackAuto-route: Subscription → Cheap → Free, zero downtime
Token SaverRTK Token Saver mengompres output tool sebelum dikirim ke LLM, hemat 20-40% token

Kategori Provider

KategoriContohCara Connect
Custom ProvidersOpenRouter, vpskali, OpenAI, AnthropicInput API key manual
OAuth ProvidersClaude Code, GitHub Copilot, Cursor IDE, ClineLogin via OAuth
Media ProvidersUntuk image/audio generationTergantung provider
Local ProvidersOllama/vLLM via custom endpointInput base URL lokal

Bagian 3: Apa Itu Combo dan Strategi Fallback?

Combo adalah “model virtual” — kumpulan model dengan urutan prioritas. Ketika kamu memanggil combo dengan namanya, 9Router akan mencoba model satu per satu sampai ada yang berhasil.

4 Strategi Combo di 9Router

#StrategiCara Kerja
1FallbackCoba model 1, kalau gagal coba model 2, dst. (default)
2Round RobinRotasi antar model per request untuk bagi beban
3FusionPanggil semua model paralel, lalu Judge model gabungkan jawaban. Paling mahal & paling bagus kualitasnya
4Capacity Auto-SwitchPindah otomatis berdasarkan kapabilitas model (misal prioritaskan model yang support vision untuk gambar)

Kapan Pakai yang Mana

  • Fallback → paling umum, untuk production (hemat biaya, model cadangan cuma kepakai saat utama gagal)
  • Round Robin → load balancing (hindari rate limit per model)
  • Fusion → task kritis yang gak boleh salah (mahal, N+1 call per request)
  • Capacity Auto-Switch → multimodal (auto pilih model berdasarkan jenis input)

Combo Fallback Berlapis

Contoh combo dengan 4 model dari provider berbeda:

Nama: xcodepodfallback
Strategi: Fallback

[1] or/openrouter/auto
[2] mmf/mimo-auto
[3] oc/muse-spark-1.2-contributor-free
[4] vpskali/deepseek-r1:1.5b

Cara kerja fallback:

Request masuk → coba [1] or/openrouter/auto
                ↓ gagal?
                coba [2] mmf/mimo-auto
                ↓ gagal?
                coba [3] oc/muse-spark-1.2-contributor-free
                ↓ gagal?
                coba [4] vpskali/deepseek-r1:1.5b
                ↓ gagal?
                return error

Modelnya jalan di server data center xcodepod sendiri

Makin banyak lapisan = makin kecil kemungkinan bot mati total.

Catatan penting: Pastikan semua provider yang dipakai di combo udah connected. Kalau mmf/ atau oc/ belum connect, model itu bakal error dan langsung di-skip oleh 9Router.


Bagian 4: Urutan Aliran Data

Berikut alur lengkap dari pesan Telegram sampai jawaban kembali:

  1. User kirim pesan
    → Telegram sebagai client
  2. Hermes Gateway terima pesan
    → Long polling ke Telegram API
    → Proses dengan agent logic (memory, skill, tool)
  3. Hermes kirim ke 9Router
    → Endpoint: http://localhost:20128/v1/chat/completions
    → Model: xcodepodfallback
  4. 9Router resolve combo
    → Coba model [1]: or/openrouter/auto
  5. OpenRouter route ke provider
    → Kembalikan response ke 9Router
    → Kalau gagal → coba [2], [3], [4]
  6. Ollama lokal (fallback terakhir)
    → vpskali/deepseek-r1:1.5b
    → Jalan di server xcodepod
  7. Response kembali
    → 9Router → Hermes → Telegram
    → User terima jawaban

Penjelasan Setiap Langkah

1-4: Hermes Gateway

  • Hermes gateway menggunakan long polling ke Telegram API
  • Setiap beberapa detik, Hermes kirim request ke Telegram: “ada pesan baru?”
  • Jika ada, Telegram kirim array update
  • Hermes proses pesan dengan agent logic (memory, skill, tool yang tersedia)

5-8: Hermes kirim ke 9Router

  • Hermes kirim request ke http://localhost:20128/v1/chat/completions
  • Model yang dikirim: xcodepodfallback (nama combo)
  • 9Router terima request, resolve combo, mulai coba model satu per satu

9-14: 9Router Fallback Chain

  • Coba model [1]: or/openrouter/auto
  • Jika berhasil → return response
  • Jika gagal (429, quota, 404) → coba model [2]: mmf/mimo-auto
  • Jika gagal → coba model [3]: oc/muse-spark-1.2-contributor-free
  • Jika gagal → coba model [4]: vpskali/deepseek-r1:1.5b
  • Terus sampai ada yang berhasil

15-19: Response Kembali

  • 9Router kembalikan response ke Hermes
  • Hermes kirim balik ke Telegram via API
  • User terima jawaban

Bagian 5: Setup 9Router + Combo Fallback

5.1 Cek Provider yang Udah Connect

Buka dashboard 9Router → menu Providers.

Yang udah connect kelihatan titik hijau + tulisan “Connected”. Dari setup kamu:

  • openrouter → ✅ Connected
  • vpskali → ✅ Connected

5.2 Combo yang Aktif: xcodepodfallback

Di dashboard → Combo & Vision Adapter, combo kamu namanya xcodepodfallback, dengan strategi Fallback (Fallback — try in order).

Isi combo:

Nama: xcodepodfallback
Strategi: Fallback

[1] or/openrouter/auto
[2] mmf/mimo-auto
[3] oc/muse-spark-1.2-contributor-free
[4] vpskali/deepseek-r1:1.5b
#ModelKeterangan
1or/openrouter/autoOpenRouter auto-route (utama)
2mmf/mimo-autoMiMo auto
3oc/muse-spark-1.2-contributor-freeMuse Spark gratis
4vpskali/deepseek-r1:1.5bLokal, fallback terakhir

5.3 Test Combo

export NINE_KEY="<key-9router-kamu>"

curl -sS http://localhost:20128/v1/chat/completions \
  -H "Content-Type: application/json" \
  -H "Authorization: Bearer $NINE_KEY" \
  -d '{"model":"xcodepodfallback","messages":[{"role":"user","content":"test"}]}' \
  > /tmp/r.json

jq '{model, provider, error: (.error.message // null)}' /tmp/r.json

Output yang diharapkan:

{
  "model": "deepseek/deepseek-v4-flash-0731",
  "provider": "Makora",
  "error": null
}

Field model menunjukkan model aktual yang dipakai. Kalau muncul model cadangan, berarti fallback bekerja.


Bagian 6: Setup Hermes

6.1 Konfigurasi Model

Edit file ~/.hermes/config.yaml:

model:
  default: xcodepodfallback
  provider: custom
  base_url: http://localhost:20128/v1
  api_key: ${NINE_KEY}
  api_mode: chat_completions
database:
  journal_mode: wal

Poin penting:

  • provider: custom → ngasih tau Hermes ini endpoint OpenAI-compatible
  • base_url → arahkan ke 9Router
  • default: xcodepodfallback → nama combo, sesuai yang di dashboard
  • api_key: ${NINE_KEY} → pakai environment variable biar key gak kelihatan

6.2 Simpan Key di Environment Variable

File ~/.hermes/.env:

NINE_KEY=<key-9router-kamu>

File ~/.bashrc:

export NINE_KEY="<key-9router-kamu>"

Load ulang:

source ~/.bashrc

6.3 Hapus OPENROUTER_API_KEY dari Hermes .env

Key OpenRouter itu buat 9Router, bukan buat Hermes. Kalau ada di dua tempat, bisa bikin konflik:

sed -i '/^OPENROUTER_API_KEY=/d' ~/.hermes/.env

6.4 Jalankan Hermes

hermes -z "kamu siapa?"

Kalau jawabannya keluar, berarti Hermes udah konek ke 9Router.


Bagian 7: Setup Bot Telegram

7.1 Buat Bot di BotFather

  1. Buka Telegram, cari @BotFather
  2. Kirim /newbot
  3. Kasih nama bot
  4. Kasih username (wajib diakhiri bot, misal my_vps_agent_bot)
  5. BotFather ngasih Token (format: 123456789:ABCdef...)

7.2 Dapatkan User ID

Cari @userinfobot, kirim pesan apa saja. Dia balas dengan User ID numerik kamu.

7.3 Konfigurasi Telegram di Hermes

Edit file ~/.hermes/.env:

# TELEGRAM INTEGRATION
TELEGRAM_BOT_TOKEN=<token-dari-botfather>
TELEGRAM_ALLOWED_USERS=<user-id-kamu>
NINE_KEY=<key-9router-kamu>

Untuk multiple users, pisahkan dengan koma:

TELEGRAM_ALLOWED_USERS=111,222,333

⚠️ Pastikan gak ada duplikat blok Telegram. Kalau ada dua, yang kedua menimpa yang pertama dan ALLOWED_USERS bisa jadi kosong.

7.4 Jalankan Gateway

Test di foreground dulu:

hermes gateway run

Coba kirim pesan dari HP.

Kalau udah jalan, install as service:

hermes gateway install
hermes gateway start

Untuk VPS/headless host yang harus comeback at boot:

sudo hermes gateway install --system

Bagian 8: Setup Memory Holographic

Setelah Hermes dan Telegram jalan, tambahkan memory biar bot bisa ingat konteks antar sesi.

8.1 Aktifkan Holographic

Holographic adalah provider memory paling ringan — nol dependensi eksternal, semua jalan di SQLite lokal .

bash

hermes memory setup
# Pilih "holographic"

Atau manual:

bash

hermes config set memory.provider holographic

8.2 Konfigurasi Auto-Extract

Default-nya auto_extract: false, yang berarti bot tidak otomatis nyimpen fakta dari percakapan. Kamu harus eksplisit nyuruh (misal: “ingat ya…”). Ini justru bagus — database tetap bersih.

Kalau mau bot otomatis nyimpen, edit ~/.hermes/config.yaml:

yaml

plugins:
  hermes-memory-store:
    auto_extract: true
    default_trust: 0.5
    hrr_dim: 1024

8.3 Verifikasi Memory Holographic

Setelah Holographic diaktifkan, kamu perlu memastikan database-nya beneran bekerja.

Install SQLite

SQLite biasanya udah ada di Ubuntu, tapi kalau belum:

bash

sudo apt update
sudo apt install sqlite3 -y
sqlite3 --version

Cek Isi Database Memory

Database Holographic tersimpan di ~/.hermes/memory_store.db. Lihat semua fakta yang tersimpan:

bash

sqlite3 ~/.hermes/memory_store.db "SELECT fact_id, content, category, trust_score, created_at FROM facts;"

Contoh output:

text

2|User's name is Kurniawan (Telegram DM, chat_id 1520328623). Communicates in informal Indonesian/Malay mix.|user_pref|0.5|2026-09-12 01:48:13
FieldArti
fact_idID unik fakta
contentIsi fakta yang tersimpan
categoryKategori (user_pref, fact, dll)
trust_scoreTingkat kepercayaan (default 0.5)
created_atWaktu penyimpanan

Lihat Semua Fakta (Ringkas)

bash

sqlite3 ~/.hermes/memory_store.db "SELECT fact_id, content, trust_score FROM facts;"

Cek Skema Tabel

bash

sqlite3 ~/.hermes/memory_store.db ".schema facts"

Statistik per Kategori

bash

sqlite3 ~/.hermes/memory_store.db "SELECT category, COUNT(*) FROM facts GROUP BY category;"

Cara Kerja Trust Score

Trust score mulai dari 0.5 (default). Mekanismenya:

  • Naik → kalau fakta sering dikonfirmasi
  • Turun → kalau fakta dibantah

Ini fitur self-correcting dari Holographic — database-nya bisa “belajar” mana fakta yang akurat .

Uji Fungsional

Cara paling nyata buat mastiin memory-nya jalan:

Langkah 1 — Minta bot nyimpen fakta:

“Tolong ingat, server produksi kita namanya xcodepod dan jalan di Ubuntu.”

Langkah 2 — Tanya di sesi baru:

“Server produksi kita namanya apa?”

Kalau bot jawab xcodepod, berarti memory-nya bekerja. ✅

Catatan: Model kecil (kayak deepseek-r1:1.5b) kadang sulit memanggil tool fact_store — kalau memory gak muncul di konteks, coba panggil manual: “Apa yang kamu ingat tentang saya?”

Bagian 9: Error yang Sering Muncul

ErrorPenyebabSolusi
Bot diam, Stale gateway_state.jsonProses mati gak wajarrm ~/.hermes/gateway_state.json, restart
Bot diam padahal connectedConfig Telegram duplikatSisain satu blok di .env
connection refusedGateway gak bisa akses 9RouterGanti localhost jadi IP host
Model not foundNama model salah atau provider belum connectTest curl dulu, connect provider
No active credentials for provider: openaiModel tanpa prefix or/Ganti ke or/openai/...

Bagian 10: Keamanan

⚠️ Token dan API key jangan disebar.

  • Jangan paste token Telegram / API key ke chat publik
  • Kalau bocor → revoke di @BotFather (/mybots → API Token → Revoke)
  • API key OpenRouter → revoke di openrouter.ai/keys
  • Simpan di .env dengan permission ketat: chmod 600 ~/.hermes/.env
  • Batasi akses dashboard 9Router ke localhost saja

Pakai environment variable biar key gak kelihatan di config atau history:

# ~/.bashrc
export NINE_KEY="<key-9router-kamu>"

Lalu di curl:

curl -H "Authorization: Bearer $NINE_KEY" ...

Hermes memiliki sistem approval:

approvals:
  mode: manual  # manual | smart | off
  timeout: 60

Kesimpulan

Setup Hermes + 9Router + Telegram dengan combo fallback berlapis memberikan:

  • Bot Telegram AI yang bisa diakses dari mana aja
  • Fallback berlapis — beberapa model berbeda dicoba berurutan sampai ada yang berhasil
  • Kontrol penuh — ganti model tanpa sentuh bot, cukup edit combo di 9Router
  • Biaya terkendali — model gratis jadi “lantai” yang jaga bot tetap hidup
  • Persistent memory — Hermes mengingat konteks proyek
  • API key tersembunyi — pakai environment variable, gak kelihatan di config atau history

Kunci suksesnya:

  1. Test tiap model satu-satu sebelum dimasukkan combo
  2. Pastikan semua provider yang dipakai di combo udah connected
  3. Test komponen satu-satu (9Router → Hermes → Telegram)
  4. Langsung hermes gateway run, jangan install service dulu sebelum yakin jalan
  5. Bersihin config duplikat
  6. Simpan API key di environment variable, bukan di config

Setup ini diuji dengan Hermes, 9Router, dan OpenRouter sebagai provider utama + Ollama sebagai fallback.

Kurniawan – xcodepod.cloud

Tinggalkan komentar