---
title: "Serverom upravljam preko WhatsApp-a — sa Claude Code sa druge strane"
date: 2026-08-06
author: "Damjan Savić"
canonical: https://damjan-savic.com/sr/znanje/claude-on-whatsapp
language: sr
keywords: "Claude Code, Automatizacija, AI agenti, Self-hosting, WhatsApp"
video: https://www.youtube.com/watch?v=sCUYUuk4WqE
---
# Serverom upravljam preko WhatsApp-a — sa Claude Code sa druge strane

**Ukratko** — Glasovna poruka na WhatsApp-u, i server odgovara: zdrav je, radi 5 od 5 kontejnera. Kontrolna tabla prikazuje brojeve, ali ne može ništa da uradi. Ovde Claude Code ionako već živi na mašini, sa stvarnim pristupom, a aplikacija za poruke je samo vrata — Telegram i Slack stoje u istom kodu.

---

Glasovna poruka na WhatsApp-u: „Hej Claude, kako mi je server?" Odgovor: server je zdrav, radi 5 od 5 kontejnera.

Problem iza toga je sasvim neefektan. Držati [sopstveni server](/sr/znanje/vercel-to-root-server) znači SSH. SSH znači terminal, a terminal znači sedenje za stolom. Postoje SSH klijenti za telefon, koristio sam ih. Kucati `systemctl` komandu na ekranu osetljivom na dodir u vozu nije tok rada, to je kazna.

Uobičajen odgovor na to je kontrolna tabla — Grafana, Uptime Kuma, šta god voliš. Kontrolne table su u redu. Prikazuju brojeve. Ali kontrolna tabla ne može ništa da **uradi**. Kaže ti da je kontejner pao. Ne može da ga podigne, ne može da pročita log i ne može da ti kaže zašto.

Ono što zapravo hoću jeste da postavim pitanje običnim jezikom i dobijem odgovor od nečega što ume i da postupi.

## Šta tamo radi

Claude Code radi na ovom serveru još od videa o self-hostingu. Ista postavka, ništa novo. Dakle koristim Claude Code da instaliram ono čime posle razgovaram sa Claude Code.

Sam bot je moj projekat i javno stoji na GitHub-u. Govori Slack, Telegram i WhatsApp; ovde radi samo WhatsApp. Uz njega idu: PostgreSQL kao pamćenje sesije, da bot pamti tok razgovora, i usmerivač koji jednostavna pitanja šalje na Haiku za brz odgovor, a teška na Opus.

Dve stavke spadaju na početak, jer znače novac odnosno rizik:

- **Glasovne poruke idu preko OpenAI Whisper-a**, odvojenog servisa koji se plaća. Delovi centa po poruci, ali nije besplatno.
- **Broj koji povezujem je prepaid SIM**, kupljen baš za ovo. Ne moj lični. Zašto, piše niže.

## Faza 1 · Instalacija

```text
Kloniraj ovaj repozitorijum u moj home direktorijum i pokreni ga na ovom
serveru.
```

Prvo `npm install`. To povlači `whatsapp-web.js`, to povlači Puppeteer, a to povlači ceo Chromium pregledač. Na svežem Ubuntu serveru sistemske biblioteke koje Chromium traži ne postoje.

Jedan savet uz to koji štedi petnaest minuta: **nemoj da nagađaš spisak paketa.** Pokreni servis, pročitaj log, instaliraj tačno ono što on imenuje. To je dva minuta umesto dvadeset.

### 27 putanja

Prolazeći kroz repozitorijum, Claude Code je našao nešto što nisam očekivao: **27 tvrdo upisanih putanja.** Svaka od njih pokazivala je na `/home/damjan`. Moj korisnik na ovom serveru zove se drugačije. I putanja do Claude izvršnog fajla bila je tvrdo upisana, direktno u modulu za pokretanje.

Ovaj projekat sam pisao na drugoj mašini i nikada nisam primetio, jer je tamo putanja bila tačna.

Postojala su dva izlaza: napraviti korisnika sa odgovarajućim imenom i nastaviti, ili uredno prepisati putanje. Pustio sam da se prepišu.

To je pošten razlog zašto je ova faza u videu. Ne zato što je `npm install` zanimljiv, nego zato što se upravo to dešava kada projekat pređe na mašinu za koju nije pisan. Pouka je banalna i skupa: **piši putanje kao promenljive okruženja.** Nisam, i koštalo me je jedne faze ovog videa.

### Podela

Claude Code ne može da izvršava `sudo`. Dakle on piše konfiguracije, a ja sam pokrećem privilegovane komande.

To nije zaobilaženje, to je ispravan raspored. Agent piše, ja izvršavam.

## Faza 2 · Baza

Instalirati PostgreSQL i pustiti migracije. Prvi prolaz je vratio grešku; predao sam grešku Claude-u, on je pripremio dodatnu migraciju i dopunio tabele koje su nedostajale dok svih dvanaest nije odgovaralo referencama u kodu.

Na kraju je pisalo `DB available: true` — nijedan upit nije oborio zastavicu dostupnosti. Zatim su redovi iz probnog testa izbačeni.

## Faza 3 · Uparivanje

Bot se pokreće, PostgreSQL je povezan, Slack uredno isključen, WhatsApp se inicijalizuje, kontrolna tabla na portu 3800.

Uparivanje ide preko QR koda. On ističe za nekoliko sekundi, pa se generiše svež i skenira odmah: na telefonu „poveži uređaj", skeniraj, gotovo. WhatsApp posle toga prikaže sesiju iz Chrome pregledača — to je sesija koju bot koristi.

Sesija se čuva u folderu unutar projekta, pa ponovno pokretanje ne košta uparivanje. Ali: **telefon mora da se javi na mrežu otprilike na svakih četrnaest dana**, inače veza pukne i skeniraš ponovo.

### Pošten deo

Ovo **nije** zvanični WhatsApp Business API. To je Puppeteer koji vozi pregledač bez prikaza i predstavlja se kao WhatsApp Web. Metini uslovi to zabranjuju, i nalozi zbog toga bivaju blokirani.

Baš zato ovde stoji prepaid SIM, a ne moj sopstveni broj. Ako bude blokiran, gubim SIM karticu, a ne svoje poruke. Ko ovo pravi za sebe, nabavi SIM **pre** početka, a ne posle. Deset evra, i to je razlika između projekta i problema.

## Faza 5 · Razgovor

Probna poruka, i odgovor stiže: kontejneri rade, opterećenje 0,26, disk na 4 posto.

Redosled je ono što upada u oči. Kratak odgovor stiže gotovo odmah, duži sledi za njim. To je usmerivač: Haiku razvrstava poruku. Ako je jednostavna, Haiku odgovara direktno i time je gotovo. Ako je složena, Haiku šalje brzu potvrdu prijema da ne buljiš u prazno, a Opus preuzima iza toga.

Ta dvostepena postavka je razlika između „ovo deluje kao razgovor" i „ovo deluje kao poslat formular".

![Dijagram · Usmerivač: Haiku razvrstava, Opus preuzima iza toga](/media/website/article/figures/claude-on-whatsapp-router.avif)

Glasovna poruka ide istim putem: audio ide na Whisper, vraća se kao tekst i prolazi kroz tačno isti lanac kao da sam kucao. Granica je 25 megabajta, dakle nekoliko minuta govora — to se ne dostiže.

A onda ono zbog čega sam ovo zapravo napravio: izveštaj o serveru. Docker kontejneri i njihov status, disk na root i home, memorija, nginx, uptime. To je funkcija koja pravi presek, izvršava šest komandi na mašini i rezultat upisuje u tabelu stanja. Čuva 24 sata istorije.

## Šta nije išlo

1. **27 tvrdo upisanih putanja u projektu koji sam sam napisao.** Promenljive okruženja. Uvek.
2. **Chromium sistemske biblioteke na svežem serveru.** Predvidivo, zamorno, pet minuta.
3. **Setiti se da se prepaid telefon uključi na svakih četrnaest dana.**

## Tri pravila

1. **Bela lista je tvoj bezbednosni model**, a ne olakšica. Ko sme da piše, sme i da postupa.
2. **Daj agentu radni direktorijum, ne ceo disk.** Konfiguracija ima podešavanje za to. Koristi ga.
3. **Sve što traži root, pokrećeš sam.** Agent piše konfiguraciju, ti je izvršavaš. Ta podela je ono što ovu postavku drži bezbednom.

## Zaključak

Bot nije zanimljiv deo. Nešto slično se sa Telegramom napravi za jedno popodne.

Ono što ovo čini upotrebljivim jeste to što Claude Code ionako već živi na tom serveru, sa stvarnim pristupom. Aplikacija za poruke je samo vrata — Telegram i Slack već stoje u istom kodu. Ista mašina, druga vrata.

Sučelje ka tvom serveru ne mora da bude terminal. Mora da bude nešto što ionako imaš otvoreno.

## Poglavlja snimka

- [0:46 — Zašto kontrolna tabla nije dovoljna](https://youtu.be/sCUYUuk4WqE?t=46)
- [1:35 — Pet faza i postavka](https://youtu.be/sCUYUuk4WqE?t=95)
- [2:24 — Chromium i onih 27 putanja](https://youtu.be/sCUYUuk4WqE?t=144)
- [4:00 — Faza 2: baza](https://youtu.be/sCUYUuk4WqE?t=240)
- [4:49 — Uparivanje preko QR koda](https://youtu.be/sCUYUuk4WqE?t=289)
- [5:39 — Zašto prepaid SIM](https://youtu.be/sCUYUuk4WqE?t=339)
- [6:27 — Usmerivač: Haiku napred, Opus iza](https://youtu.be/sCUYUuk4WqE?t=387)
- [8:05 — Tri pravila](https://youtu.be/sCUYUuk4WqE?t=485)

## Česta pitanja

### Zašto prepaid SIM, a ne sopstveni broj?

Zato što ovo nije zvanični WhatsApp Business API, nego Puppeteer koji vodi bezglavi pregledač i predstavlja se kao WhatsApp Web. Metini uslovi to zabranjuju i nalozi se zbog toga blokiraju. Ako broj bude blokiran, gubim SIM karticu, a ne svoje poruke. Deset evra, i to je razlika između projekta i problema.

### Čemu služi usmerivač sa dva modela?

Haiku razvrstava svaku poruku. Ako je jednostavna, Haiku odgovara odmah. Ako je složena, Haiku šalje brzu potvrdu prijema da ne buljiš u prazno, a Opus preuzima iza toga. To je razlika između „ovo deluje kao čet" i „ovo deluje kao poslat formular".

### Šta je bilo najskuplje iznenađenje pri instalaciji?

27 tvrdo upisanih putanja u projektu koji sam sam napisao — svaka je pokazivala na /home/damjan, a moj korisnik na ovom serveru se zove drugačije. I putanja do Claude binarnog fajla bila je tvrdo upisana. Nikada nisam primetio, jer je na mašini na kojoj sam ga pisao putanja bila tačna. Pouka je banalna i skupa: putanje spadaju u promenljive okruženja.

---

Serverom upravljam preko WhatsApp-a — sa Claude Code sa druge strane — https://damjan-savic.com/sr/znanje/claude-on-whatsapp
Sadržaj generisan veštačkom inteligencijom: https://damjan-savic.com/sr/transparentnost-vi
© 2026 Damjan Savić. https://damjan-savic.com
