Questa pagina descrive in dettaglio le configurazioni specifiche richieste per l'integrazione, nonché la risoluzione dei problemi comuni.
Requisiti di rete di telefonia
Se la tua rete filtra il traffico in uscita, deve consentire il traffico in uscita per la segnalazione SIP e lo streaming multimediale.
Per la segnalazione SIP, deve essere consentito l'intero intervallo IP 74.125.88.128/25 (TCP) sulla porta 5672. Per un insieme di regole firewall più restrittive, puoi limitare la segnalazione SIP a uno o più server SIP GTP regionalizzati:
- Regione Stati Uniti:
us.telephony.goog
(74.125.88.132) - Regione UE:
eu.telephony.goog
(74.125.88.133) - Regione APAC:
ap.telephony.goog
(74.125.88.134) - Regione Sud America:
sa.telephony.goog
(74.125.88.135)
Per i contenuti multimediali RTP, devi configurare le regole del firewall per consentire il traffico destinato all'intervallo IP CIDR 74.125.39.0/24. In genere, le porte richieste per i contenuti multimediali sono solo 16384-32767 (TCP+UDP), ma questo intervallo di porte potrebbe essere ampliato in futuro.
Fornitori o modelli SBC supportati
La tabella seguente elenca i fornitori o i modelli SBC e le versioni firmware supportati. Le istruzioni dettagliate per l'integrazione di ciascun fornitore sono collegate alla versione del firmware.
Fornitori e modelli | Versioni firmware |
---|---|
AudioCodes VE SBC | v7.40A.500.786 |
Avaya Session Border Controller for Enterprise | v8.1.3.2-38-22279, v10.2.0.0-86-24077 |
Oracle E-SBC Acme Packet 3900 | SCZ9.3.0 GA (build 46) |
Ribbon Swe Core SBC | v11.01.01R005 |
Cisco Unified Border Element (CUBE) | v17.15.03a |
Protocolli di segnalazione e multimediali SBC supportati
Protocollo di segnalazione | SIP su TLS |
Media | SRTP |
Crittografia per contenuti multimediali | SDES |
Suite di crittografia multimediale supportata | AES_CM_128_HMAC_SHA1_80 |
Codec multimediali supportati | G.711 µ-law (PCMU), G.711 A-law (PCMA) |
Intestazioni SIP
Quando hai configurato un profilo di conversazione e un numero di telefono,
hai creato un profilo di conversazione CCAI con
sipConfig.createConversationOnTheFly
impostato su true
. L'ID conversazione deve
essere generato dinamicamente durante l'INVITO SIP utilizzando il valore dell'intestazione SIP di
Call-Info
o UUI
.
Il valore dell'intestazione SIP punta all'endpoint Dialogflow definendo l'ID progetto e l'ID conversazione:Google Cloud
- L'ID progetto Google Cloud è il progetto che hai utilizzato quando hai configurato un progetto Google Cloud .
- L'ID conversazione
deve essere generato dinamicamente dall'SBC. L'ID conversazione deve essere
conforme alla formula dell'espressione regolare
[a-zA-Z][a-zA-Z0-9_-]*
con la lunghezza dei caratteri compresa nell'intervallo[3,64]
. Per generare dinamicamente l'ID conversazione, un pattern comune è utilizzare il valore Call-ID nell'INVITE SIP e anteporre delle lettere per renderlo conforme all'espressione regolare specificata in precedenza. Ad esempio, se il valore dell'ID chiamata è297363723_79131759_799783510
, l'aggiunta del prefisso"CID-"
al valore dell'ID chiamata lo renderebbe conforme all'espressione regolare[a-zA-Z][a-zA-Z0-9_-]*
.
Call-Info
Intestazione SIP
Inserisci un'intestazione SIP personalizzata chiamata Call-Info
nell'INVITO SIP per impostare in modo univoco
l'ID conversazione:
Call-Info: <http://dialogflow.googleapis.com/v2beta1/projects/$PROJECT_ID/conversations/$CONVERSATION_ID>;purpose=Goog-ContactCenter-Conversation
Esempio:
none
Call-Info: <http://dialogflow.googleapis.com/v2beta1/projects/gcp-project-id-12345/conversations/CID-297363723_79131759_799783510>;purpose=Goog-ContactCenter-Conversation
UUI
Intestazione SIP
Se l'impostazione dell'intestazione SIP personalizzata Call-Info
non è supportata, puoi configurare
l'intestazione SIP UUI
(User-to-User) nell'invito SIP per trasmettere l'ID conversazione.
Utilizza gli stessi dati richiesti in Call-Info
con l'URL codificato in esadecimale e lo scopo impostato su Goog-ContactCenter-Conversation
. Di seguito è riportato un esempio
di intestazione, in cui la stringa esadecimale decodificata è
http://dialogflow.googleapis.com/v2beta1/projects/gcp-project-id-12345/conversations/CID-297363723_79131759_799783510
:
User-to-User: 687474703a2f2f6469616c6f67666c6f772e676f6f676c65617069732e636f6d2f763262657461312f70726f6a656374732f6763702d70726f6a6563742d69642d31323334352f636f6e766572736174696f6e732f4349442d3239373336333732335f37393133313735395f373939373833353130;encoding=hex;purpose=Goog-ContactCenter-Conversation
È possibile inviare dati aggiuntivi utilizzando intestazioni UUI
separate con valori "purpose" diversi. Questi valori vengono aggiunti all'oggetto
Conversation.telephonyConnectionInfo
. Tieni presente che questi dati non sono disponibili per l'agente Conversational Agents (Dialogflow CX) in fase di runtime.
Trasmettere le informazioni dell'agente umano
Se devi trasmettere informazioni specifiche per gli agenti umani, puoi impostare l'attributo dell'etichetta media Session
Description Protocol (SDP) per lo stream Real-time
Transport Protocol (RTP) dell'agente umano sul valore dei dati richiesto.
Esempio:
none
a=label:7382373482
Questi dati verranno inseriti nel campo sip_recording_media_label
e saranno disponibili nell'argomento Pub/Sub New message notification
contenente le trascrizioni. Cerca il campo sip_recording_media_label
nel messaggio pub/sub Message.attributes
.
Configurare i ruoli dei partecipanti e l'ordine dei flussi multimediali
Per impostazione predefinita, il primo flusso multimediale è associato al ruolo di partecipante END_USER
e i flussi multimediali successivi sono associati al ruolo di partecipante HUMAN_AGENT
.
Se hai bisogno di un comportamento diverso (ad esempio in un sistema di chiamate in uscita), l'URL passato nell'intestazione deve avere il parametro dei ruoli aggiunto.
Esempio:
none
http://dialogflow.googleapis.com/v2beta1/projects/gcp-project-id-12345/conversations/CID-297363723_79131759_799783510?roles=HUMAN_AGENT,END_USER
L'URL specifica che il primo stream multimediale deve avere il ruolo HUMAN_AGENT
e il secondo stream multimediale deve avere il ruolo END_USER
. Puoi applicare il parametro
roles con l'intestazione
Call-Info
o UUI
SIP.
Impostare parametri aggiuntivi per una determinata conversazione
Per impostare parametri aggiuntivi in una determinata conversazione, utilizza la chiamata RPC
MatchIntentRequest
. Puoi impostare query_params.parameters
sulle coppie chiave-valore richieste
e query_input.text
su un valore come "Impostazione dei parametri".
Effettua la chiamata API dopo la risposta 200 OK per l'INVITO SIP iniziale, a quel punto la conversazione è stata creata. L'ID sessione per
MatchIntentRequest
è lo stesso ID conversazione fornito nell'intestazione
Call-Info
nell'INVITE.
Utilizzare SIP REFER
per trasferire una chiamata a un endpoint SIP
Per trasferire una chiamata da un agente virtuale a un endpoint SIP, utilizza il metodo SIP REFER. Includi un payload nel campo Live agent handoff
e imposta il campo
Telephony transfer call
sul numero impostato nel campo
SIP REFER
Refer-To
in uscita. Il payload dovrebbe essere simile al seguente
esempio di codice.
{
"sip-refer": true
}
Risoluzione dei problemi
Il team di Google potrebbe chiederti di fornire i seguenti artefatti per facilitare la risoluzione dei problemi del ping SIP OPTIONS e delle chiamate di test effettuate:
- Acquisizione del pacchetto di rete
- Traccia di debug SIP che mostra l'intestazione completa e l'SDP SIP:
- Valore Call-ID
- Valore
Call-Info
(se esistente)
Acquisizione del pacchetto di rete
L'acquisizione del pacchetto di rete deve mostrare quanto segue:
Un handshake TCP a tre vie completo (SYN, SYN-ACK, ACK) tra il tuo SBC e i server SIP GTP comunicati tramite la porta TCP 5672. Se non è stato possibile stabilire la connessione TCP, i possibili problemi sono:
- La tua rete blocca il traffico in uscita.
- La comunicazione non viene inviata a uno dei server SIP GTP regionalizzati. Consulta Requisito di rete per la connettività di telefonia.
- La comunicazione non viene inviata tramite la porta TCP 5672.
Un handshake completo della connessione TLS con quanto segue:
- TLS v1.2 o versioni successive avviate dal tuo SBC.
- Il tuo SBC che avvia un "Client Hello" e GTP che risponde con "Server Hello".
- Processo di autenticazione TLS reciproca.
- GTP risponde con il proprio certificato TLS del server, che viene autenticato dal tuo SBC.
- L'SBC invia il proprio certificato TLS client, autenticato da GTP.
- Il canale criptato è stato stabilito come dimostrato dal "Messaggio di handshake criptato".
- Prova della trasmissione dei "dati dell'applicazione" tramite il canale TLS.
Se non è stato possibile stabilire la connessione TLS, i possibili problemi sono:
- Il trunk SIP non è stato creato sul lato GTP.
- Il nome di dominio completo (FQDN) configurato del trunk SIP non corrisponde a quello presentato nel certificato TLS (attributo CN o SAN) dell'SBC.
- La versione di TLS non è supportata. Sono supportate solo TLS versione 1.2 o versioni successive.
- La suite di crittografia richiesta non è supportata, vedi Configurazione TLS di SBC.
- Fornitori di certificati TLS non attendibili, vedi Configurazione TLS di SBC.
La traccia di debug SIP dovrebbe mostrare quanto segue:
Intestazione SIP
Call-Info
del cliente inserita in questo formato:none Call-Info: <http://dialogflow.googleapis.com/v2beta1/projects/$PROJECT_ID/conversations/$CONVERSATION_ID>;purpose=Goog-ContactCenter-Conversation
Esempio:
none Call-Info: <http://dialogflow.googleapis.com/v2beta1/projects/gcp-project-id-12345/conversations/CID-297363723_79131759_799783510>;purpose=Goog-ContactCenter-Conversation
Le intestazioni SIP mostrano il numero di telefono nel formato E.164 (+16501234567).
Le intestazioni SIP mostrano gli indirizzi IP pubblici utilizzati nell'URI della richiesta e in altri campi di intestazione SIP (ad esempio To, From, Via). Gli indirizzi IP privati verrebbero rifiutati.
Le informazioni di connessione SIP SDP (c= …) sono specificate con un indirizzo IP pubblico. Gli indirizzi IP privati verranno rifiutati.
Assicurati che la priorità dei contenuti multimediali invii prima lo stream degli utenti finali e poi lo stream dei contenuti multimediali dell'operatore umano, perché GTP considera il primo stream di contenuti multimediali come quello degli utenti finali per impostazione predefinita.
Se ricevi un codice di risposta di errore SIP:
- Il codice di risposta di errore SIP 400 (ad esempio 488 Not Acceptable Here) indica probabilmente che GTP ha rifiutato un'intestazione SIP o una configurazione SDP multimediale SIP.
- Un codice di risposta di errore SIP 600 (errore SIP 603 rifiutato) indica probabilmente un problema relativo alla quota. Per maggiori dettagli su come richiedere un aumento, consulta la pagina Quote e limiti.
Attivare un'azione quando il chiamante remoto riaggancia
La nuova API BiDi (use_bidi_streaming=True
in ConversationProfile)
supporta l'attivazione di una chiamata allo strumento all'interno di un playbook o di una chiamata webhook
all'interno di un flusso quando il chiamante remoto riaggancia.
Quando il chiamante remoto riaggancia e Conversational Agents (Dialogflow CX) riceve un messaggio SIP BYE, viene attivato l'evento personalizzato sys.remote-call-disconnected
.
Se crei un gestore con questo nome evento specifico,
puoi utilizzarlo per attivare una chiamata di strumento con un playbook
o una chiamata webhook all'interno di un flusso.