netgescon-day0/docs/SMDR-INTEGRAZIONE-OPERATIVA.md

3.0 KiB
Executable File

SMDR Panasonic NS1000 - Integrazione Operativa

Stato attuale

  • Listener attivo via comando Laravel smdr:listen.
  • Ingestione su:
    • communication_messages (channel = smdr)
    • chiamate_post_it (record operativi)

Comando base

php artisan smdr:listen \
  --host=192.168.0.101 \
  --port=2300 \
  --user=SMDR \
  --pass=PCCSMDR \
  --write-postit=1 \
  --write-communications=1 \
  --reconnect=1 \
  --reconnect-delay=5

Wrapper operativo consigliato

Per evitare comandi manuali lunghi e mantenere la stessa configurazione tra sviluppo e staging:

cd /home/michele/netgescon/netgescon-day0
bash scripts/ops/netgescon-smdr-listener.sh

Configurazione opzionale via file dedicato .env.smdr nella root applicativa:

NETGESCON_SMDR_HOST=192.168.0.101
NETGESCON_SMDR_PORT=2300
NETGESCON_SMDR_USER=SMDR
NETGESCON_SMDR_PASS=PCCSMDR
NETGESCON_SMDR_RECONNECT=1
NETGESCON_SMDR_RECONNECT_DELAY=5
NETGESCON_SMDR_WRITE_POSTIT=1
NETGESCON_SMDR_WRITE_COMMUNICATIONS=1
NETGESCON_SMDR_TIMEOUT=0
NETGESCON_SMDR_MAX_LINES=0
NETGESCON_SMDR_NO_AUTH=0

Daemon systemd consigliato

Il blocco osservato il 13/03/2026 e stato coerente con un listener non piu in esecuzione. La soluzione stabile e tenerlo sotto systemd con restart automatico.

Template repo:

  • scripts/systemd/netgescon-smdr-listener.service.template
  • scripts/ops/install-smdr-systemd.sh

Installazione tipica sviluppo:

cd /home/michele/netgescon/netgescon-day0
RUN_AS=michele RUN_GROUP=michele bash scripts/ops/install-smdr-systemd.sh

Installazione tipica staging:

cd /var/www/netgescon
RUN_AS=www-data RUN_GROUP=www-data bash scripts/ops/install-smdr-systemd.sh

Verifica:

systemctl status netgescon-smdr-listener.service --no-pager
journalctl -u netgescon-smdr-listener.service -n 100 --no-pager

Opzioni utili

  • --no-auth: se il centralino non richiede credenziali su socket.
  • --max-lines=50: test rapido su N righe e stop.
  • --timeout=30: timeout lettura socket.

Verifica dati acquisiti

php artisan tinker --execute="echo App\\Models\\CommunicationMessage::where('channel','smdr')->count();"
php artisan tinker --execute="echo App\\Models\\ChiamataPostIt::count();"
php artisan tinker --execute="echo optional(App\\Models\\CommunicationMessage::where('channel','smdr')->latest('created_at')->first())->created_at;"

URL operativi correlati

  • Fornitore: /fornitore/tickets
  • Mobile admin: /admin/mobile
  • Mobile tickets: /admin/tickets-mobile

Note parsing SMDR

  • Le righe vengono salvate raw per audit.
  • Esempio formato rilevato:
    • 03/02/26 15:22 206 03 3333395405 00:00'03 EU00000.00
    • 03/02/26 17:03 201 03 <I>3478160508 00:00'59 EU00000.00
  • \u003cI\u003e indica tipicamente ingresso; numeri esterni senza \u003cI\u003e tipicamente uscita; EXTxxx chiamata interna.

Prossimo step consigliato

  • Mappare parser SMDR su campi strutturati (interno, trunk, numero, durata, costo, direzione) e dashboard live chiamate in ingresso/uscita.