L'integrazione di Zadarma e Twilio consente di indirizzare le chiamate in entrata dai numeri virtuali di Zadarma al tuo Twilio e di elaborarle in base alle tue attuali impostazioni Twilio. Puoi anche effettuare chiamate in uscita da Twilio tramite il tuo account Zadarma con le tariffe convenienti di Zadarma.
1. Configurazione delle chiamate in entrata
Aggiunta di un dominio SIP in Twilio.
Nel tuo account Twilio, apri la sezione Twilio Console. → Voice → SIP Domains e clicca sul pulsante + per aggiungere un nuovo dominio.
Esempio di configurazione del dominio SIP:
- FRIENDLY NAME - nome di dominio, ad esempio zadarma;
- SIP URI - dominio, nome arbitrario, per comodità è possibile utilizzare un numero virtuale.

Nella sezione Voice Authentication, aggiungi uno alla volta gli IP ACCESS CONTROL LISTS che conterranno gli indirizzi IP affidabili di Zadarma dai quali Twilio riceverà le chiamate in entrata.
- FRIENDLY NAME - sipurifr.zadarma.com
- CIDR NETWORK ADDRESS - 185.45.152.216 /32
- FRIENDLY NAME - sipuriny.zadarma.com
- CIDR NETWORK ADDRESS - 185.45.155.33 /32
- FRIENDLY NAME - pbxfr1.zadarma.com
- CIDR NETWORK ADDRESS - 185.45.152.164 /32
- FRIENDLY NAME - pbxfr2.zadarma.com
- CIDR NETWORK ADDRESS - 185.45.152.177 /32
- FRIENDLY NAME - pbxfr3.zadarma.com
- CIDR NETWORK ADDRESS - 185.45.152.200 /32
- FRIENDLY NAME - pbxny1.zadarma.com
- CIDR NETWORK ADDRESS - 185.45.155.14 /32
- FRIENDLY NAME - pbxny2.zadarma.com
- CIDR NETWORK ADDRESS - 185.45.155.16 /32
- FRIENDLY NAME - pbxlv1.zadarma.com
- CIDR NETWORK ADDRESS - 195.122.19.20 /32
- FRIENDLY NAME - pbxlv2.zadarma.com
- CIDR NETWORK ADDRESS - 195.122.19.29 /32
- FRIENDLY NAME - pbxsg1.zadarma.com
- CIDR NETWORK ADDRESS - 15.235.128.70 /32
- FRIENDLY NAME - pbxal1.zadarma.com
- CIDR NETWORK ADDRESS - 31.31.222.201 /32
- FRIENDLY NAME - pbxma1.zadarma.com
- CIDR NETWORK ADDRESS - 185.45.154.15 /32
Assicurati che tutti gli IP ACCESS CONTROL LISTS aggiunti siano selezionati nelle impostazioni del dominio SIP.
Più in basso, nella sezione Call Control Configuration nel parametro A CALL COMES IN , seleziona cosa gestirà le chiamate in arrivo. Se hai già configurato l'instradamento in Twilio, seleziona la tua opzione, ad esempio Studio e il tuo Flow (scenario) per le chiamate in arrivo, quindi premi Save per salvare le impostazioni del tuo dominio SIP.

Esempio di Flow (scenario) per le chiamate in entrata▾
Se hai scelto la tua opzione in A CALL COMES IN - Salta questo punto, qui viene mostrato un esempio di creazione di un semplice Flow per le chiamate in entrata nell'editor visivo Twilio Studio.
1. Vai alla Twilio Console → Studio e clicca sul pulsante Create new Flow. Inserisci FLOW NAME, ad esempio Incoming calls.
2. Seleziona il modello Start from scratch e clicca su Next.
3. Trascina il blocco Gather Input on Call (per il menu IVR) e collegarlo al Trigger (Incoming Call).
4. Indica il messaggio vocale (Text to Speech o Audio URL).
5. Configura la gestione delle opzioni selezionate (1 – per le vendite, 2 – per l'assistenza, ecc).
Successivamente, è necessario creare due Set Variables per modificare il numero del chiamante dall'intestazione From.
Crea il primo Set Variables con Variable Name: step1_caller_id e Value:
{{contact.channel.address | replace: "sip:", "" }}
Crea il secondo Set Variables (dopo il primo) Variable Name: clean_caller_id e Value:
{{flow.variables.step1_caller_id | replace: "@sip.zadarma.com", "" }}
{{flow.variables.step1_caller_id | replace: "@pbx.zadarma.com", "" }}
Aggiungi il trasferimento delle chiamate in entrata al numero interno utilizzando Connect Call To.
CONNECT CALL TO – Seleziona SIP Endpoint.
In SIP ENDPOINT, inserisci il suo URL, ad esempio sip:11111@15551111111.sip.twilio.com
In CALLER ID
{{flow.variables.clean_caller_id}}
Salva le impostazioni dei widget e pubblica Flow cliccando su Publish.

Successivamente, nelle impostazioni SIP Domain nella sezione SIP Registration è necessario abilitare la possibilità di registrarsi, spostando l'interruttore su Enabled.

Di seguito, in CREDENTIAL LISTS, è necessario selezionare SIP Endpoint esistente che riceverà le chiamate in entrata tramite softphone. Se non disponi ancora di un SIP Endpoint, creane uno cliccando sul pulsante “+”.
Aggiunta di un SIP Endpoint▾
Se disponi già di un SIP Endpoint - salta questo passaggio.
- FRIENDLY NAME - my twilio extension.
- USERNAME - login arbitrario, ad esempio 11111.
- PASSWORD - password per l'autorizzazione, crea una password complessa, almeno 12 caratteri.
Il softphone si collegherà al tuo dominio, ad esempio 15551111111.sip.twilio.com, e utilizzerà USERNAME e PASSWORD per l'autorizzazione.

La configurazione del dominio SIP è stata completata, fare clic sul pulsante Salva.
Inoltro delle chiamate a Twilio
Nel punto precedente abbiamo aggiunto un dominio SIP a Twilio che contiene l'URI SIP necessario per l'instradamento:
- Vai alla sezione Zadarma Impostazioni → Numeri virtuali.
- Di fronte al tuo numero, clicca sull'icona ⚙ (ingranaggio).
- Aprire la scheda "Server esterno".
- Attiva l'opzione "Server esterno (SIP URI)".
Nel campo visualizzato, inserisci 15551111111@15551111111.sip.twilio.com
- dove 15551111111.sip.twilio.com è il tuo SIP URI dalle impostazioni del dominio SIP in Twilio.
- Clicca su "Salva".
- Vai su Zadarma alla sezione Il mio centralino → Numeri interni.
- Nelle impostazioni del numero interno, accanto al parametro "Inoltro e segreteria telefonica", clicca su "Attiva".
- Selezionare la condizione di inoltro, ad esempio "Sempre".
- Nel parametro "Inoltro a" seleziona "Server esterno (SIP URI)".
Nella finestra pop-up, inserisci 15551111111@15551111111.sip.twilio.com
- dove15551111111.sip.twilio.com è il tuo SIP URI dalle impostazioni del dominio SIP in Twilio.
- Clicca su "Salva".
Configurazione delle chiamate in entrata completata.
2. Configurazione delle chiamate in uscita da Twilio
Le chiamate in uscita da Twilio possono essere effettuate tramite diverse opzioni. Vediamo l'esempio di come avviare una chiamata tramite Twilio REST API (Calls API).
L'esempio seguente mostra la creazione di una conferenza tra un SIP Endpoint su cui è configurato il softphone e un numero esterno (chiamata tramite Zadarma).
Nell'esempio verrà utilizzato uno script in Python. Prima di iniziare, assicurati che Python e la libreria twilio siano installati sul tuo sistema (www.twilio.com/docs/libraries/reference/twilio-python).
Per autenticare la richiesta è necessario utilizzare l'Account SID e l'Auth Token, che puoi trovare su Twilio nell'Account Dashboard nell'angolo in alto a sinistra della pagina.
Per autorizzare la chiamata in uscita verranno utilizzati il login Sip e la password dall'area personale di Zadarma.
Per autorizzare la chiamata in uscita verrà utilizzato il numero interno del centralino e la password dall'area personale di Zadarma.
Crea uno script call.py con il seguente contenuto:
from twilio.rest import Client
# Dati dell'account Twilio
ACCOUNT_SID = "Account_SID_value"
AUTH_TOKEN = "Auth_Token_value"
TWILIO_NUMBER = "+15559999999" # Numero confermato in Twilio per Caller ID
CONFERENCE_NAME = "MyConferenceRoom"
# Zadarma SIP dati dell'account
ZADARMA_SIP_URI = "sip:+525500000777@sip.zadarma.com" # Dove chiamiamo tramite Zadarma
ZADARMA_SIP_USER = "12345" # al posto di 12345 deve esserci il tuo login SIP di Zadarma
ZADARMA_SIP_PASSWORD = "my_sip_password" # Password per il login SIP Zadarma
# SIP Endpoint (locale)
SIP_ENDPOINT = "sip:11111@15551111111.sip.twilio.com" # Il tuo SIP Endpoint su cui è configurato il softphone per ricevere le chiamate
# Inizializzazione del client Twilio
client = Client(ACCOUNT_SID, AUTH_TOKEN)
# Funzione di aggiunta di un partecipante alla conferenza
def add_to_conference(to_number, from_number=None, sip_auth_user=None, sip_auth_password=None):
call_params = {
"to": to_number,
"from_": from_number if from_number else TWILIO_NUMBER,
"twiml": f"""<Response>
<Dial>
<Conference>{CONFERENCE_NAME}</Conference>
</Dial>
</Response>"""
}
# Aggiungiamo l'autenticazione
if sip_auth_user and sip_auth_password:
call_params["sip_auth_username"] = sip_auth_user
call_params["sip_auth_password"] = sip_auth_password
call = client.calls.create(**call_params)
print(f"Chiamata a {to_number} avviata, SID: {call.sid}")
# Avvio delle chiamate
add_to_conference(ZADARMA_SIP_URI, from_number=TWILIO_NUMBER, sip_auth_user=ZADARMA_SIP_USER, sip_auth_password=ZADARMA_SIP_PASSWORD) # Chiamata a un numero esterno tramite Zadarma
add_to_conference(SIP_ENDPOINT) # Collegamento dell SIP Endpoint
print(f"La conferenza '{CONFERENCE_NAME}' è stata creata!")
from twilio.rest import Client
# Dati dell'account Twilio
ACCOUNT_SID = "Account_SID_value"
AUTH_TOKEN = "Auth_Token_value"
TWILIO_NUMBER = "+15559999999" # Numero confermato in Twilio per Caller ID
CONFERENCE_NAME = "MyConferenceRoom"
# Zadarma SIP dati dell'account
ZADARMA_SIP_URI = "sip:+525500000777@pbx.zadarma.com" # Dove chiamiamo tramite Zadarma
ZADARMA_SIP_USER = "1234-100" # al posto di 1234-100 deve esserci il tuo numero interno del centralino Zadarma
ZADARMA_SIP_PASSWORD = "my_pbx_password" # Password dal numero interno del centralino Zadarma
# SIP Endpoint (locale)
SIP_ENDPOINT = "sip:11111@15551111111.sip.twilio.com" # Il tuo SIP Endpoint su cui è configurato il softphone per ricevere le chiamate
# Inizializzazione del client Twilio
client = Client(ACCOUNT_SID, AUTH_TOKEN)
# Funzione di aggiunta di un partecipante alla conferenza
def add_to_conference(to_number, from_number=None, sip_auth_user=None, sip_auth_password=None):
call_params = {
"to": to_number,
"from_": from_number if from_number else TWILIO_NUMBER,
"twiml": f"""<Response>
<Dial>
<Conference>{CONFERENCE_NAME}</Conference>
</Dial>
</Response>"""
}
# Aggiungiamo l'autenticazione
if sip_auth_user and sip_auth_password:
call_params["sip_auth_username"] = sip_auth_user
call_params["sip_auth_password"] = sip_auth_password
call = client.calls.create(**call_params)
print(f"Chiamata a {to_number} avviata, SID: {call.sid}")
# Avvio delle chiamate
add_to_conference(ZADARMA_SIP_URI, from_number=TWILIO_NUMBER, sip_auth_user=ZADARMA_SIP_USER, sip_auth_password=ZADARMA_SIP_PASSWORD) # Chiamata a un numero esterno tramite Zadarma
add_to_conference(SIP_ENDPOINT) # Colleghiamo SIP Endpoint
print(f"La conferenza '{CONFERENCE_NAME}' è stata creata!")
Salva e avvia il tuo script call.py. Se tutto è configurato correttamente, le chiamate arriveranno al softphone e al numero esterno dal tuo login SIP Zadarma.
Salva e avvia il tuo script call.py. Se tutto è configurato correttamente, le chiamate arriveranno al softphone e al numero esterno dal tuo numero interno del centralino virtuale Zadarma.