πŸ“‹ ACTION PLAN v1.0 β€” AGUSTUS 2026

Action Plan: Hermes AI Agent Γ— Panorama Nur Mecca

From Manual to Automated β€” Step by Step

Hermes v0.17.0 β€” VM-1-102
Telegram Gateway: ACTIVE
agenumroh.my.id β€” VPS 200

0. Current State Assessment

Where we stand today β€” infrastructure, wins, and gaps

Infrastructure

πŸ–₯️
Hermes v0.17.0 on VM-1-102-ubuntu
Telegram gateway: ACTIVE
🌐
agenumroh.my.id on VPS 200
Laravel 11 + MariaDB
πŸ—„οΈ
DB: agenumroh @ 43.157.241.200
SSH tunnel from current VPS

Database Tables

πŸ‘₯ jamaah β€” customer records
πŸ“¦ partner_packages β€” umrah packages
✈️ kloters β€” departure groups
πŸ“ umroh_registrations β€” bookings
πŸ—ΊοΈ itineraries β€” trip schedules
πŸ•Œ manasik_* β€” rituals guide
🏨 hotel_* β€” accommodation
🀝 vendor_* β€” vendor data

What's Working Now

  • Telegram bot responding (user 227752163)
  • Cron: umroh clusters generator (daily 10am)
  • agenumroh CRM: jamaah, packages, kloters
  • SSH tunnel: current VPS β†’ VPS 200 DB
  • Hermes memory & skills framework ready

What's Missing

  • No API bridge between Hermes and agenumroh DB
  • No automated content pipeline
  • No customer communication automation
  • No reporting automation
  • No multi-agent setup
⚑

Phase 1 β€” Quick Wins

Minggu 1-2 Target: Hemat 5-8 jam/minggu Zero coding required
Phase 1 Progress0%

1.1 Content Drafting Bot

TODO
Create skill pnm-content-drafter in Hermes
Admin kirim ke Telegram: "Buat konten paket [nama paket]"
Hermes reads partner_packages from DB (via SSH + mysql command) β†’ generates 3 caption variants (hard-sell, emotional, informatif) + posting schedule
Test dengan paket existing, check output quality
write_file, terminal (SSH mysql), memory
2 jam
Fernando β€” Minggu 1, Hari 1-2

1.2 Daily Booking Summary

TODO
Create cron job, schedule 0 8 * * *
"Query agenumroh DB for new registrations in last 24h, summarize by status (baru/dihubungi/jadi_jamaah/batal), count seats available per active kloter. Format as morning briefing."
Telegram to user (227752163)
SELECT status, COUNT(*) as cnt FROM umroh_registrations WHERE created_at >= NOW() - INTERVAL 1 DAY GROUP BY status;
Check Telegram each morning for 1 minggu
1 jam
Fernando β€” Minggu 1, Hari 2-3

1.3 Document Checklist Monitor

TODO
Create cron job, schedule 0 9 * * 1 (setiap Senin)
"Kloter B3: 3 jamaah belum lengkap (2 belum vaksin, 1 belum upload foto)"
SELECT j.nama, j.dok_vaksin, j.dok_foto, k.kode as kloter FROM jamaah j JOIN umroh_registrations r ON j.id = r.jamaah_id JOIN kloters k ON r.kloter_id = k.id WHERE (j.dok_vaksin IS NULL OR j.dok_foto IS NULL) AND k.status != 'selesai';
Manual check against DB
1 jam
Fernando β€” Minggu 1, Hari 3

1.4 Weekly Financial Snapshot

TODO
Create cron job, schedule 0 8 * * 1 (Senin 8am)
Count registrations, estimate revenue dari partner_packages.harga_jual Γ— registrations per kloter
Telegram summary card: total pax, revenue estimate, kloter breakdown
1 jam
Fernando β€” Minggu 1, Hari 3-4
πŸ”§

Phase 2 β€” Core Automation

Minggu 3-4 Target: Hemat 12-15 jam/minggu Requires DB API setup
Phase 2 Progress0%

2.1 Build REST API Bridge

TODO
On VPS 200: Create simple Laravel API routes untuk Hermes query. Routes: GET /api/v1/jamaah/stats, GET /api/v1/kloter/active, GET /api/v1/package/{id}/seats. Auth: API key di .env
routes/api.phpuse Illuminate\Http\Request; use Illuminate\Support\Facades\DB; Route::middleware('auth:api')->group(function () { Route::get('/jamaah/stats', function () { $stats = DB::select(" SELECT status, COUNT(*) as cnt FROM umroh_registrations GROUP BY status "); return response()->json([ 'registrations' => $stats, 'total' => array_sum(array_column($stats, 'cnt')), ]); }); Route::get('/kloter/active', function () { $kloters = DB::table('kloters') ->where('status', 'active') ->get(); return response()->json($kloters); }); Route::get('/package/{id}/seats', function ($id) { $pkg = DB::table('partner_packages')->find($id); $booked = DB::table('umroh_registrations') ->where('package_id', $id) ->whereNotIn('status', ['batal']) ->count(); return response()->json([ 'package' => $pkg->name, 'total_seats' => $pkg->kuota, 'booked' => $booked, 'available' => $pkg->kuota - $booked, ]); }); });
curl -H "Authorization: Bearer $API_KEY" \ https://agenumroh.my.id/api/v1/jamaah/stats
3-4 jam
Fernando β€” Minggu 3, Hari 1-2

2.2 Itinerary Auto-Generator

TODO
Admin kirim: "Generate itinerary kloter [kode], hotel [nama]"
Hermes queries kloter + package data β†’ uses itinerary_templates and template_days from DB β†’ generates formatted itinerary (HTML/PDF)
File saved to workspace + Telegram notification with preview
4 jam
Fernando β€” Minggu 3, Hari 3-4

2.3 Auto-Reply FAQ Bot

TODO
Seseorang kirim pesan ke Telegram bot dengan pertanyaan umum
"Berapa harga?", "Kapan berangkat?", "Hotel mana?", "Dokumen apa saja?"
Hermes checks FAQ skill/knowledge base β†’ auto-respond with data dari DB β†’ escalate "Hubungi admin" untuk complex questions
3 jam
Fernando β€” Minggu 4, Hari 1-2

2.4 Lead Follow-Up Scheduler

TODO
umroh_registrations WHERE status='baru' AND first_contact_at IS NULL β†’ generate follow-up draft
umroh_registrations WHERE status='dihubungi' AND last_contact_at > 3 hari β†’ "Follow-up needed"
"3 leads baru perlu dihubungi: [names, phone, package]"
2 jam
Fernando β€” Minggu 4, Hari 3
🧠

Phase 3 β€” Intelligent Assistance

Minggu 5-8 Target: Hemat 20-25 jam/minggu
Phase 3 Progress0%

3.1 Customer Communication Pipeline

TODO
H-30 Welcome Message H-14 Doc Checklist H-7 Departure Briefing H-3 Meeting Point H-1 Final Reminder
Hermes generates draft β†’ Telegram ke admin β†’ admin approve β†’ send ke jamaah. Uses jamaah + kloter data.
4 jam
Fernando β€” Minggu 5-6

3.2 Post-Trip Feedback Collection

TODO
Kloter status berubah ke 'selesai'
Auto-draft feedback survey β†’ auto-send thank-you β†’ aggregate responses β†’ improvement report
3 jam
Fernando β€” Minggu 6-7

3.3 Content Calendar Automation

TODO
Weekly: Hermes generates 7-day content calendar based on upcoming departures, Islamic events, testimonials
Daily posting plan dengan captions ready. Admin approve Senin, Hermes auto-post sisa minggu
4 jam
Fernando β€” Minggu 7

3.4 Vendor Performance Tracker

TODO
Hotel vendors: room quality, response time, issues. Ticket partners: price, availability
Monthly report with recommendations
3 jam
Fernando β€” Minggu 8
πŸš€

Phase 4 β€” Full Integration

Minggu 9-12 Target: Transform operations
Phase 4 Progress0%

4.1 Multi-Agent Setup

TODO
Agent 1: Marketing Agent 2: Operations Agent 3: CS
Content, social media, campaigns
Itinerary, coordination, logistics
Customer inquiries, FAQ, follow-up
Via Kanban board. Each agent has own Hermes profile with specialized skills.
8 jam β€” Fernando β€” Minggu 9-10

4.2 Real-Time Dashboard

TODO
Active kloters, seat occupancy, revenue, pending tasks β€” accessible via browser
Via cron, Hermes regenerates HTML dashboard periodically
6 jam
Fernando β€” Minggu 10-11

4.3 WhatsApp Blast Automation

TODO
Fonnte/WABiz gateway. Hermes drafts β†’ admin approve β†’ auto-send to segment
Per kloter, per status, per location
Opt-out handling, message limits
4 jam
Fernando β€” Minggu 11-12

5. Prompt Library

Copy-paste ready prompts β€” tested, with SQL examples

1. Generate Caption for Paket

PHASE 1
Buat konten promosi untuk paket umroh berikut: Nama: [NAMA_PAKET] Harga: [HARGA] Durasi: [HARI] hari Hotel: [NAMA_HOTEL] Maskapai: [MASKAPAI] Keberangkatan: [TANGGAL] Buat 3 varian caption: 1. Hard-sell (urgensi, harga, CTA) 2. Emotional (impian, perjalanan spiritual) 3. Informatif (detail lengkap, FAQ) Sertakan 5 hashtag populer + jadwal posting ideal.
SELECT name, harga_jual, durasi_hari, hotel_name, maskapai, tanggal_berangkatan, kuota, deskripsi FROM partner_packages WHERE name LIKE '%[NAMA_PAKET]%';

Ganti variabel dalam [] dengan data dari DB. Tambahkan brand voice guidelines di skill setup.

2. Morning Booking Summary

PHASE 1
Query agenumroh DB for new registrations in last 24 hours. Summarize by status: baru, dihubungi, jadi_jamaah, batal. Count seats available per active kloter. Format as morning briefing for admin β€” concise, actionable.
-- Registrations last 24h SELECT status, COUNT(*) as cnt FROM umroh_registrations WHERE created_at >= NOW() - INTERVAL 1 DAY GROUP BY status; -- Active kloters with seat count SELECT k.kode, k.nama, p.kuota, COUNT(CASE WHEN r.status != 'batal' THEN 1 END) as booked, p.kuota - COUNT(CASE WHEN r.status != 'batal' THEN 1 END) as available FROM kloters k JOIN partner_packages p ON k.package_id = p.id LEFT JOIN umroh_registrations r ON r.kloter_id = k.id WHERE k.status = 'active' GROUP BY k.id;
πŸ“‹ Expected Output
Selamat Pagi Fernando! β˜€οΈ

πŸ“Š Booking Summary (24h)
β€’ Baru: 2 | Dihubungi: 1 | Jadi Jamaah: 3 | Batal: 0

✈️ Active Kloters
β€’ A1 (14 Apr): 28/40 seat (12 tersisa)
β€’ B3 (21 Apr): 35/35 seat ⚠️ FULL
β€’ C2 (28 Apr): 12/45 seat (33 tersisa)

3. Document Checklist for Kloter

PHASE 1
Cek kelengkapan dokumen jamaah untuk kloter [KODE_KLOTER]. Query dok_* fields, list jamaah dengan dokumen yang belum lengkap. Format: per kloter, per jamaah, apa yang kurang.
SELECT j.nama, j.no_hp, CASE WHEN j.dok_vaksin IS NULL THEN '❌ Vaksin' ELSE 'βœ… Vaksin' END as vaksin, CASE WHEN j.dok_paspor IS NULL THEN '❌ Paspor' ELSE 'βœ… Paspor' END as paspor, CASE WHEN j.dok_foto IS NULL THEN '❌ Foto' ELSE 'βœ… Foto' END as foto, CASE WHEN j.dok_ktp IS NULL THEN '❌ KTP' ELSE 'βœ… KTP' END as ktp FROM jamaah j JOIN umroh_registrations r ON j.id = r.jamaah_id JOIN kloters k ON r.kloter_id = k.id WHERE k.kode = '[KODE_KLOTER]' AND r.status != 'batal' HAVING vaksin LIKE '❌%' OR paspor LIKE '❌%' OR foto LIKE '❌%' OR ktp LIKE '❌%';
πŸ“‹ Expected Output
πŸ“‹ Dokumen Kloter B3 β€” 3 jamaah belum lengkap:

1. Ahmad Fauzi (0812xxx) β€” ❌ Vaksin, ❌ Paspor
2. Siti Rahma (0813xxx) β€” ❌ Foto
3. Budi Santoso (0815xxx) β€” ❌ KTP

4. Generate Itinerary for Kloter

PHASE 2
Generate itinerary untuk kloter [KODE_KLOTER]. Query data kloter, package, dan itinerary_templates dari DB. Format: day-by-day schedule, waktu sholat, lokasi, hotel, catatan penting. Output sebagai HTML yang bisa di-share ke jamaah.
SELECT k.kode, p.name as package, p.durasi_hari, k.tanggal_berangkatan, k.tanggal_pulang, h.nama as hotel, h.alamat as hotelAlamat FROM kloters k JOIN partner_packages p ON k.package_id = p.id LEFT JOIN hotels h ON k.hotel_id = h.id WHERE k.kode = '[KODE_KLOTER]'; -- Template hari SELECT * FROM itinerary_templates WHERE package_id = (SELECT package_id FROM kloters WHERE kode = '[KODE_KLOTER]') ORDER BY hari_ke;
πŸ“‹ Expected Output
πŸ“„ Itinerary Kloter B3 β€” Umroh 12 Hari
File saved: itinerary-B3-14Apr2026.html
Telegram: Preview + link to download

5. Follow-Up Leads Status Baru

PHASE 2
Cek leads umroh yang perlu dihubungi: 1. Status 'baru' + first_contact_at NULL β†’ generate draft pesan perkenalan 2. Status 'dihubungi' + last_contact_at > 3 hari β†’ generate follow-up Kirim ke admin Telegram dengan nama, no_hp, package info.
-- Leads baru, belum dihubungi SELECT j.nama, j.no_hp, p.name as package, r.created_at FROM umroh_registrations r JOIN jamaah j ON r.jamaah_id = j.id JOIN partner_packages p ON r.package_id = p.id WHERE r.status = 'baru' AND r.first_contact_at IS NULL ORDER BY r.created_at ASC; -- Perlu follow-up (3+ hari) SELECT j.nama, j.no_hp, p.name as package, r.last_contact_at FROM umroh_registrations r JOIN jamaah j ON r.jamaah_id = j.id JOIN partner_packages p ON r.package_id = p.id WHERE r.status = 'dihubungi' AND r.last_contact_at < NOW() - INTERVAL 3 DAY;

6. Weekly Content Calendar

PHASE 3
Generate content calendar untuk minggu [TANGGAL_MINGGU]. Berdasarkan: - Kloter yang berangkat minggu ini - Event Islami mendatang - Testimoni jamaah terakhir - Tips perjalanan ibadah Output: 7 hari Γ— 2 konten (pagi + sore), lengkap dengan caption + hashtag + waktu posting.
πŸ“‹ Expected Output
πŸ“… Content Calendar β€” Minggu 14-20 Apr 2026

🟒 Senin: Testimoni jamaah (pagi), Tips dokumen (sore)
πŸ”΅ Selasa: Countdown B3 (pagi), Manasik reminder (sore)
🟣 Rabu: Hotel showcase (pagi), Doa perjalanan (sore)
...dst

7. Customer H-7 Reminder Draft

PHASE 3
Draft H-7 reminder untuk jamaah kloter [KODE_KLOTER]. Include: - Tanggal keberangkatan - Meeting point & waktu - Dokumen yang harus dibawa - Checklist barang bawaan - Nomor darurat - Doa perjalanan Bahasa: friendly, ramah, tapi informatif.
πŸ“‹ Expected Output
πŸ“± Draft untuk admin review:

"Assalamualaikum Bapak/Ibu, πŸ•Œ

InsyaAllah 7 hari lagi kita berangkat umroh!

πŸ“… Berangkat: 14 April 2026, pukul 20:00
πŸ“ Meeting Point: Terminal 3, Soekarno-Hatta

πŸ“‹ Yang harus dibawa:
β€’ Paspor + visa
β€’ Bukti vaksin
β€’ Uang saku
β€’ ...

πŸ“ž Hubungi admin: 0812-xxxx-xxxx
Selamat bersiap! Semoga menjadi h yang mabrur 🀲"

8. Monthly Performance Report

PHASE 3
Generate monthly performance report untuk [BULAN] [TAHUN]. Include: - Total registrations (new vs last month) - Revenue estimate (harga_jual Γ— count) - Kloter completion rate - Document readiness rate - Vendor performance summary - Content metrics (if available) - Recommendations for next month
-- Monthly registrations SELECT status, COUNT(*) as cnt FROM umroh_registrations WHERE MONTH(created_at) = [BULAN] AND YEAR(created_at) = [TAHUN] GROUP BY status; -- Revenue estimate SELECT k.kode, p.name, p.harga_jual, COUNT(r.id) as pax, p.harga_jual * COUNT(r.id) as estimated_revenue FROM kloters k JOIN partner_packages p ON k.package_id = p.id LEFT JOIN umroh_registrations r ON r.kloter_id = k.id AND r.status != 'batal' WHERE MONTH(k.tanggal_berangkatan) = [BULAN] GROUP BY k.id;
πŸ“‹ Expected Output
πŸ“Š Monthly Report β€” April 2026

πŸ“ˆ Registrasi: 45 (↑12% dari Maret)
πŸ’° Revenue Est: Rp 850,000,000
✈️ Kloter selesai: 2/3 (67%)
πŸ“‹ Doc ready: 88% (40/45 jamaah)
⭐ Hotel avg rating: 4.2/5
πŸ’‘ Rekomendasi: Fokus promosi kloter C2 yang masih banyak slot

6. KPI Dashboard

Target metrics per phase

5-8
Jam/Minggu
Phase 1 β€” Quick Wins
12-15
Jam/Minggu
Phase 2 β€” Core Automation
20-25
Jam/Minggu
Phase 3 β€” Intelligent
40+
Jam/Minggu
Phase 4 β€” Full Integration
10x
Response Time
From hours β†’ minutes
3x
Content Output
15 β†’ 45+ posts/month
95%
Doc Readiness
Before departure target
+20%
Revenue Impact
Through better follow-up

7. Risk Register

Identified risks and mitigation strategies

# Risk Probabilitas Impact Mitigation Owner
1 DB connection failure (SSH tunnel down) MEDIUM HIGH Fallback to manual query via VPS 200 SSH. Auto-reconnect script. Fernando
2 AI generates wrong information HIGH HIGH Human review mandatory for all customer-facing content. Never auto-send without approval. Fernando
3 Telegram rate limit LOW MEDIUM Use batching for bulk messages. Respect 30 msg/sec limit. Hermes
4 Staff resistance to AI tools MEDIUM MEDIUM Start with quick wins (Phase 1). Demonstrate value before pushing automation. Fernando
5 Data privacy breach LOW HIGH Never expose credentials. API keys in .env only. SSH tunnel encrypted. Fernando
6 API breaking changes (Laravel upgrade) LOW MEDIUM Version pinning (v1 prefix). Test suite before production deploy. Fernando

8. Resources Needed

Investment breakdown β€” mostly sweat equity

Item Cost Priority Status
Hermes v0.17.0 (VM-1-102) Free P0 βœ… DONE
Telegram Bot Free P0 βœ… DONE
SSH Tunnel to VPS 200 Free P0 βœ… DONE
REST API on VPS 200 Free (dev time: 3-4h) P1 TODO
Fonnte WA Gateway ~50k/bulan P2 TODO
Additional Hermes profile (Marketing) Free P2 TODO
Hosting dashboard (static) Free (can use VPS) P2 TODO

9. Timeline β€” 12 Week Gantt

Visual overview of all phases and tasks

Task W1W2W3W4 W5W6W7W8 W9W10W11W12
Phase 1 β€” Quick Wins
1-2
3-4
1.1 Content Drafting Bot
●
1.2 Daily Booking Summary
●
1.3 Doc Checklist Monitor
●
1.4 Weekly Financial Snapshot
●
Phase 2 β€” Core Automation
5-6
7-8
2.1 Build REST API Bridge
●
2.2 Itinerary Auto-Generator
●
2.3 Auto-Reply FAQ Bot
●
2.4 Lead Follow-Up Scheduler
●
Phase 3 β€” Intelligent
9-10
11-12
13-14
15-16
3.1 Communication Pipeline
●
●
3.2 Post-Trip Feedback
●
●
3.3 Content Calendar
●
3.4 Vendor Tracker
●
Phase 4 β€” Full Integration
17-18
19-20
21-22
23-24
4.1 Multi-Agent Setup
●
●
4.2 Real-Time Dashboard
●
●
4.3 WhatsApp Blast
●
●