Skip to content

Latest commit

 

History

2 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

SIP-Phone-PushRelay

Servizio di push relay per HomeSIP: quando arriva una chiamata per l'interno configurato e l'app potrebbe dover essere risvegliata da una VoIP push (era sospesa o terminata), Asterisk mette la chiamata in pausa in un'app Stasis (ARI) invece di tentare subito il collegamento con un timeout indovinato — questo relay invia la push, aspetta un segnale reale "il device si è ri-registrato", poi restituisce la chiamata al dialplan.

Containerizzato con Docker, pensato per girare sullo stesso router (NanoPi R6S / FriendlyWRT) che ospita Asterisk.

Per l'architettura completa del progetto e le altre milestone, vedi PIANO_SVILUPPO.md nel repo dell'app iOS.

Come funziona

  1. Si collega ad Asterisk REST Interface (ARI, WebSocket eventi + REST) e riceve l'evento StasisStart quando un canale entra nell'app homesip-wakeup (il dialplan ci arriva solo se un primo tentativo diretto è già fallito).
  2. Manda un'indicazione di squillo (ring) al chiamante, cosi' non sente silenzio durante l'attesa.
  3. Invia una VoIP Push APNs (auth key .p8, topic <bundle-id>.voip) al device registrato.
  4. Aspetta (con timeout) che l'app segnali di essersi ri-registrata tramite /device-ready, poi restituisce il canale al dialplan (continue) perché il vero Dial() possa procedere.
  5. Espone tre endpoint HTTP (HTTP_PORT, in ascolto su tutte le interfacce — raggiungibile da LAN/WireGuard):
    • POST /register-token — registra il device token dell'app, protetto da bearer secret (REGISTER_SHARED_SECRET)
    • POST /device-ready — segnala che l'app si è ri-registrata (stesso bearer secret)
    • GET /healthz — riflette lo stato della connessione ARI (200 se connesso, 503 altrimenti)

Configurazione

Copia .env.example in .env e compila i valori:

cp .env.example .env

Serve inoltre abilitare ARI su Asterisk (/etc/asterisk/ari.conf + http.conf, con un utente dedicato) e instradare il dialplan attraverso Stasis(homesip-wakeup,101) come fallback dopo un primo tentativo diretto fallito — vedi dettagli in PIANO_SVILUPPO.md.

Sviluppo locale

go run ./cmd/pushrelay

Deploy (Docker, sul router)

docker compose up -d --build

network_mode: host è necessario per raggiungere ARI su 127.0.0.1 senza dover esporre porte o toccare il firewall del router.

Nota: su FriendlyWRT/OpenWrt la porta 8080 è tipicamente occupata da uhttpd (interfaccia LuCI). Verificare con ss -tlnp prima di scegliere le porte — su questo router sono in uso 8088 (HTTP del relay) e 8089 (HTTP/ARI di Asterisk).

Deploy senza build locale sul router

Il router ha risorse limitate: conviene costruire l'immagine sul proprio Mac e trasferirla, invece di far scaricare a Docker sul router l'immagine builder golang:1.23-alpine:

docker build -t sip-phone-pushrelay:latest .
docker save sip-phone-pushrelay:latest -o pushrelay-image.tar
scp pushrelay-image.tar .env docker-compose.yml gateway.manuzzi.home:/root/PushRelay_app/
scp secrets/AuthKey.p8 gateway.manuzzi.home:/root/PushRelay_app/secrets/
ssh gateway.manuzzi.home "cd /root/PushRelay_app && docker load -i pushrelay-image.tar && docker compose up -d"

Sul router usare un docker-compose.yml con image: sip-phone-pushrelay:latest al posto di build: ..

About

Push relay per HomeSIP: inoltra le chiamate in arrivo su Asterisk come VoIP Push APNs (vedi manuzzi/SIP-Phone-iOs)

Resources

Stars

1 star

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages