
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
| Fitur | Penjelasan |
|---|---|
| Closed Learning Loop | Agent membuat skill dari pengalaman, memperbaikinya saat digunakan, dan mengingat konteks antar sesi |
| Persistent Memory | Informasi lingkungan dan preferensi pengguna disimpan di MEMORY.md dan USER.md, dimuat otomatis ke system prompt |
| Skill System | Proses kompleks disimpan sebagai file Markdown di ~/.hermes/skills/, bisa digunakan ulang dan diperbaiki sendiri |
| Multi-Platform Gateway | CLI, Telegram, Discord, Slack, WhatsApp, dan 20+ platform lainnya dari satu gateway |
| Tool & API Integration | 60+ tool bawaan termasuk pencarian web, eksekusi terminal, operasi file, browser automation |
| Eksekusi 24/7 | Setelah 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
| Fitur | Penjelasan |
|---|---|
| OpenAI-Compatible API | Endpoint /v1/chat/completions yang bisa dipakai oleh tool apa pun yang mendukung OpenAI API |
| 40+ Provider | OpenRouter, 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 Fallback | Auto-route: Subscription → Cheap → Free, zero downtime |
| Token Saver | RTK Token Saver mengompres output tool sebelum dikirim ke LLM, hemat 20-40% token |
Kategori Provider

| Kategori | Contoh | Cara Connect |
|---|---|---|
| Custom Providers | OpenRouter, vpskali, OpenAI, Anthropic | Input API key manual |
| OAuth Providers | Claude Code, GitHub Copilot, Cursor IDE, Cline | Login via OAuth |
| Media Providers | Untuk image/audio generation | Tergantung provider |
| Local Providers | Ollama/vLLM via custom endpoint | Input 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

| # | Strategi | Cara Kerja |
|---|---|---|
| 1 | Fallback | Coba model 1, kalau gagal coba model 2, dst. (default) |
| 2 | Round Robin | Rotasi antar model per request untuk bagi beban |
| 3 | Fusion | Panggil semua model paralel, lalu Judge model gabungkan jawaban. Paling mahal & paling bagus kualitasnya |
| 4 | Capacity Auto-Switch | Pindah 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:

- User kirim pesan
→ Telegram sebagai client - Hermes Gateway terima pesan
→ Long polling ke Telegram API
→ Proses dengan agent logic (memory, skill, tool) - Hermes kirim ke 9Router
→ Endpoint: http://localhost:20128/v1/chat/completions
→ Model: xcodepodfallback - 9Router resolve combo
→ Coba model [1]: or/openrouter/auto - OpenRouter route ke provider
→ Kembalikan response ke 9Router
→ Kalau gagal → coba [2], [3], [4] - Ollama lokal (fallback terakhir)
→ vpskali/deepseek-r1:1.5b
→ Jalan di server xcodepod - 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→ ✅ Connectedvpskali→ ✅ 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
| # | Model | Keterangan |
|---|---|---|
| 1 | or/openrouter/auto | OpenRouter auto-route (utama) |
| 2 | mmf/mimo-auto | MiMo auto |
| 3 | oc/muse-spark-1.2-contributor-free | Muse Spark gratis |
| 4 | vpskali/deepseek-r1:1.5b | Lokal, 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-compatiblebase_url→ arahkan ke 9Routerdefault: xcodepodfallback→ nama combo, sesuai yang di dashboardapi_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
- Buka Telegram, cari @BotFather
- Kirim
/newbot - Kasih nama bot
- Kasih username (wajib diakhiri
bot, misalmy_vps_agent_bot) - 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
| Field | Arti |
|---|---|
fact_id | ID unik fakta |
content | Isi fakta yang tersimpan |
category | Kategori (user_pref, fact, dll) |
trust_score | Tingkat kepercayaan (default 0.5) |
created_at | Waktu 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
xcodepoddan 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
| Error | Penyebab | Solusi |
|---|---|---|
Bot diam, Stale gateway_state.json | Proses mati gak wajar | rm ~/.hermes/gateway_state.json, restart |
| Bot diam padahal connected | Config Telegram duplikat | Sisain satu blok di .env |
connection refused | Gateway gak bisa akses 9Router | Ganti localhost jadi IP host |
Model not found | Nama model salah atau provider belum connect | Test curl dulu, connect provider |
No active credentials for provider: openai | Model 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
.envdengan permission ketat:chmod 600 ~/.hermes/.env - Batasi akses dashboard 9Router ke
localhostsaja
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:
- Test tiap model satu-satu sebelum dimasukkan combo
- Pastikan semua provider yang dipakai di combo udah connected
- Test komponen satu-satu (9Router → Hermes → Telegram)
- Langsung
hermes gateway run, jangan install service dulu sebelum yakin jalan - Bersihin config duplikat
- 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