Cette page décrit les configurations spécifiques requises pour l'intégration, ainsi que le dépannage des problèmes courants.
Configuration réseau requise pour la téléphonie
Si votre réseau filtre le trafic sortant, il doit autoriser le trafic sortant pour la signalisation SIP et le streaming multimédia.
Pour la signalisation SIP, l'ensemble de la plage d'adresses IP 74.125.88.128/25 (TCP) sur le port 5672 doit être autorisé. Pour un ensemble de règles de pare-feu plus restrictif, vous pouvez limiter la signalisation SIP à un ou plusieurs serveurs GTP SIP régionalisés :
- Région États-Unis :
us.telephony.goog(74.125.88.132) - Région Europe :
eu.telephony.goog(74.125.88.133) - Région APAC :
ap.telephony.goog(74.125.88.134) - Région Amérique du Sud :
sa.telephony.goog(74.125.88.135)
Pour les médias RTP, vous devez configurer des règles de pare-feu afin d'autoriser le trafic destiné à la plage d'adresses IP CIDR 74.125.39.0/24. En règle générale, les ports requis pour les médias sont uniquement 16384-32767 (TCP+UDP). Toutefois, cette plage de ports pourra être étendue à l'avenir.
Fournisseurs ou modèles de SBC compatibles
Le tableau suivant répertorie les fournisseurs ou modèles de SBC compatibles, ainsi que les versions du micrologiciel. Des instructions d'intégration détaillées pour chaque fournisseur sont disponibles dans la version du micrologiciel.
| Fournisseurs et modèles | Versions du micrologiciel |
|---|---|
| AudioCodes VE SBC | v7.60A.100.022 (SIPREC, SIP) |
| Avaya Session Border Controller for Enterprise | v10.2.1.1-104-25336 (SIPREC, SIP) |
| Oracle E-SBC Acme Packet 4600 | SCZ9.3.0 GA (Build 46) (SIPREC, SIP) |
| Ribbon Swe Core SBC | v12.01.07R000 (SIPREC, SIP) |
| Cisco Unified Border Element (CUBE) | v17.15.4 (SIPREC, SIP) |
Protocoles de signalisation et multimédias SBC compatibles
| Protocole de signalisation | SIP sur TLS |
| Médias | SRTP |
| Chiffrement multimédia | SDES |
| Suite de chiffrement multimédia compatible | AES_CM_128_HMAC_SHA1_80, AEAD_AES_256_GCM |
| Codecs multimédias compatibles | G.711 µ-law (PCMU), G.711 A-law (PCMA), Opus |
En-têtes SIP
Lorsque vous avez configuré un profil de conversation et un numéro de téléphone,
vous avez créé un profil de conversation CCAI avec le
sipConfig.createConversationOnTheFly défini sur true. L'ID de conversation doit être généré de manière dynamique lors de l'invitation SIP à l'aide de la valeur d'en-tête SIP Call-Info ou UUI.
La valeur d'en-tête SIP pointe vers le point de terminaison Dialogflow en définissant l' Google Cloud ID de projet et l'ID de conversation :
- L'ID du projet correspond au projet que vous avez utilisé lorsque vous avez configuré un Google Cloud projet. Google Cloud
- L'ID de conversation
doit être généré de manière dynamique par le SBC. L'ID de conversation doit être conforme à la formule d'expression régulière
[a-zA-Z][a-zA-Z0-9_-]*avec une longueur de caractères comprise entre[3,64]. Pour générer dynamiquement l'ID de conversation, un modèle courant consiste à utiliser la valeur Call-ID dans l'invitation SIP et à la préfixer avec des lettres pour la rendre conforme à l'expression régulière, comme indiqué précédemment. Par exemple, si la valeur Call-ID est297363723_79131759_799783510, la préfixer avec"CID-"la rendrait conforme à l'expression régulière[a-zA-Z][a-zA-Z0-9_-]*.
En-tête SIP Call-Info
Insérez un en-tête SIP personnalisé appelé Call-Info dans l'invitation SIP pour définir de manière unique l'ID de conversation :
Call-Info: <http://dialogflow.googleapis.com/v2beta1/projects/$PROJECT_ID/conversations/$CONVERSATION_ID>;purpose=Goog-ContactCenter-Conversation
Exemple :
Call-Info: <http://dialogflow.googleapis.com/v2beta1/projects/gcp-project-id-12345/conversations/CID-297363723_79131759_799783510>;purpose=Goog-ContactCenter-Conversation
En-tête SIP UUI
Si la configuration de l'en-tête SIP personnalisé Call-Info n'est pas acceptée, vous pouvez configurer l'en-tête SIP UUI (User-to-User) dans l'invitation SIP pour transmettre l'ID de conversation.
Utilisez les mêmes données que celles demandées dans Call-Info avec l'URL encodée au format hexadécimal et l'objectif défini sur Goog-ContactCenter-Conversation. Voici un exemple d'en-tête, où la chaîne hexadécimale, une fois décodée, est 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
Si des données supplémentaires doivent être transmises à l'agent et définies comme paramètre de session, vous pouvez le faire en transmettant une liste de paires clé-valeur séparées par un point-virgule, encodée au format hexadécimal, suivie de ;encoding=hex;purpose=Goog-Session-Param.
Un paramètre de session sera alors créé avec le nom uui-headers contenant une liste de chaînes de charge utile décodées.
Par exemple, si la chaîne key1=value1;key2=value2 doit être transmise, l'en-tête UUI suivant est envoyé, où la charge utile est la valeur encodée au format hexadécimal de key1=value1;key2=value2.
User-to-User: 6B6579313D76616C7565313B6B6579323D76616C756532;encoding=hex;purpose=Goog-Session-Param
Le paramètre de session suivant est alors créé.
{
"uui-headers": ["key1=value1;key2=value2"]
}
Si votre SBC est compatible avec l'envoi de plusieurs en-têtes UUI, vous pouvez envoyer des chaînes de paires clé-valeur individuelles par en-tête UUI. Elles seront disponibles en tant que valeurs individuelles dans le paramètre de session uui-headers.
L'extrait suivant prend la valeur de paramètre, puis la divise plusieurs fois pour accéder à la valeur appropriée de la variable key2 dans la chaîne.
$sys.func.GET($sys.func.SPLIT($sys.func.GET($sys.func.SPLIT($session.params.uui-headers,";"),1),"="),1)
L'exemple suivant montre une fonction appelée à partir d'un déclencheur dans les blocs de code du playbook, par exemple. @PlaybookStartHandler, qui est appelé lors de l'accès au playbook. D'autres fonctions appellent cette fonction pour obtenir des valeurs à partir du paramètre uui-headers.
def _get_fromuui(attribute):
try:
uui_headers_src = history.playbook_input.action_parameters['uui-headers']
# If uui_headers_src is a string, split by ';'
if isinstance(uui_headers_src, str):
headers = uui_headers_src.split(';')
else:
# If it's a list, join and split
headers = ';'.join(uui_headers_src).split(';')
for header in headers:
header = header.strip()
if header.lower().startswith(f"{attribute.lower()}="):
return header[len(attribute) + 1:]
return ""
except Exception:
return ""
Des données supplémentaires peuvent être envoyées à l'aide d'en-têtes UUI distincts ayant des valeurs "purpose" différentes. Ces valeurs sont ajoutées à l'
Conversation.telephonyConnectionInfo
objet. Notez que ces données ne sont pas disponibles pour l'agent Dialogflow CX au moment de l'exécution.
En-têtes x-headers SIP
Les en-têtes SIP commençant par x- peuvent être transmis à l'agent et définis comme paramètre de session. Les en-têtes SIP sont disponibles dans le paramètre de session x-headers. Le préfixe x- est supprimé du nom de l'en-tête dans le paramètre de session.
Par exemple, si l'invitation SIP contient l'en-tête suivant :
x-billing-id: 12345
Le paramètre de session x-headers contient :
{
"x-headers": {
"billing-id": "12345"
}
}
Pour accéder à la valeur :
$session.params.x-headers.billing-id
Transmettre des informations sur l'agent humain
Si vous devez transmettre des informations spécifiques aux agents humains, vous pouvez définir l'attribut de libellé multimédia SDP (Session Description Protocol) pour l'agent humain, le flux RTP (Real-time Transport Protocol) sur la valeur de données requise.
Exemple:
none
a=label:7382373482
Ces données seront renseignées dans le champ sip_recording_media_label
et disponibles dans la rubrique Pub/Sub New message notification
contenant les transcriptions. Recherchez le sip_recording_media_label
champ dans le message Message.attributes
Pub/Sub.
Configurer les rôles des participants et l'ordre des flux multimédias
Par défaut, le premier flux multimédia est associé au rôle de participant END_USER, et les flux multimédias suivants sont associés au rôle de participant HUMAN_AGENT.
Si vous avez besoin d'un comportement différent (par exemple, dans un système d'appel sortant), l'URL transmise dans l'en-tête doit comporter le paramètre roles.
Exemple:
none
http://dialogflow.googleapis.com/v2beta1/projects/gcp-project-id-12345/conversations/CID-297363723_79131759_799783510?roles=HUMAN_AGENT,END_USER
L'URL spécifie que le premier flux multimédia doit avoir le rôle HUMAN_AGENT et que le deuxième flux multimédia doit avoir le rôle END_USER. Vous pouvez appliquer le
paramètre roles avec l'
Call-Info ou UUI en-tête SIP.
Définir des paramètres supplémentaires pour une conversation donnée
Pour définir des paramètres supplémentaires pour une conversation donnée, utilisez l'
MatchIntentRequest
appel RPC. Vous pouvez définir query_params.parameters sur les paires clé-valeur requises et query_input.text sur une valeur telle que "Setting parameters" (Définition des paramètres).
Effectuez l'appel d'API après la réponse 200 OK pour l'invitation SIP initiale, moment où la conversation a été créée. L'ID de session pour MatchIntentRequest est le même ID de conversation que celui fourni dans l'en-tête Call-Info de l'invitation.
Utiliser SIP REFER pour transférer un appel vers un point de terminaison SIP
Pour transférer un appel d'un agent virtuel vers un point de terminaison SIP, utilisez la méthode SIP REFER. Incluez une charge utile dans le champ Live agent handoff et définissez le champ Telephony transfer call sur le numéro défini dans le champ Refer-To SIP REFER sortant. Votre charge utile Live agent handoff doit ressembler à l'exemple de code suivant.
{
"sip-refer": true
}
Si des données doivent être transmises en dehors de Dialogflow CX, les en-têtes UUI et x-headers peuvent être utilisés pour transmettre des chaînes de données. Si vous souhaitez effectuer une SIP REFER et transmettre deux paires clé-valeur dans un en-tête UUI et deux en-têtes x-headers, vous pouvez utiliser une charge utile Live agent handoff semblable à l'exemple de code suivant.
{
"sip-refer": true,
"uui-headers": [
"key1=value1;key2=value2"
],
"x-headers": {
"header1": "value1",
"header2": "value2"
}
}
Un SIP REFER est alors généré avec les en-têtes UUI et x-headers suivants.
User-to-User: <hex encoded "key1=value1;key2=value2">;encoding=hex;purpose=Goog-Session-Param
x-header1: value1
x-header2: value2
Utiliser SIP INVITE pour mettre en conférence un appel avec un autre point de terminaison SIP
Pour mettre en conférence un appel d'un client final à un agent humain accessible à l'aide d'un point de terminaison SIP, utilisez la méthode SIP INVITE. Google reste ainsi dans le chemin multimédia et permet d'utiliser les fonctionnalités d'Agent Assist. Définissez le champ Telephony transfer call sur le numéro défini dans le champ To SIP INVITE sortant.
Si des données doivent être transmises en dehors de Dialogflow CX, les en-têtes UUI et x-headers peuvent être utilisés pour transmettre des chaînes de données. Si vous souhaitez effectuer une SIP INVITE et transmettre deux paires clé-valeur dans un en-tête UUI et deux en-têtes x-headers, vous pouvez utiliser une charge utile Live agent handoff semblable à l'exemple de code suivant.
{
"uui-headers": [
"key1=value1;key2=value2"
],
"x-headers": {
"header1": "value1",
"header2": "value2"
}
}
Un SIP INVITE est alors généré avec les en-têtes UUI et x-headers suivants.
User-to-User: <hex encoded "key1=value1;key2=value2">;encoding=hex;purpose=Goog-Session-Param
x-header1: value1
x-header2: value2
Transmettre des données dans un SIP BYE
L'accès à End Session déclenche un SIP BYE. Si vous souhaitez transmettre des données en dehors de Dialogflow CX, les en-têtes UUI ou x-headers peuvent être utilisés pour transmettre des chaînes de données. Vous devez acheminer l'appel vers une page qui définit la charge utile Live agent handoff semblable à l'exemple de code suivant avant de passer à End Session.
{
"uui-headers": [
"key1=value1;key2=value2"
],
"x-headers": {
"header1": "value1",
"header2": "value2"
}
}
Un SIP BYE est alors généré avec les en-têtes UUI et x-headers suivants.
User-to-User: <hex encoded "key1=value1;key2=value2">;encoding=hex;purpose=Goog-Session-Param
x-header1: value1
x-header2: value2
Déclencher une action lorsque l'appelant distant raccroche
La nouvelle API BiDi (use_bidi_streaming=True dans ConversationProfile) permet de déclencher un appel d'outil dans un playbook ou un appel de webhook dans un flux lorsque l'appelant distant raccroche.
Lorsque l'appelant distant raccroche et que Dialogflow CX reçoit un message SIP BYE, l'événement personnalisé sys.remote-call-disconnected est déclenché.
Si vous créez un gestionnaire avec ce nom d'événement spécifique, vous pouvez ensuite l'utiliser pour déclencher un appel d'outil avec un playbook ou un appel de webhook dans un flux.
Autoriser les appels uniquement à partir du SBC
Pour refuser les appels provenant du RTC et ne connecter que les appels provenant de votre
SBC, mettez à jour l'
PhoneNumber
objet afin de spécifier le allowedSipTrunks message. Si l'intégration utilise une jonction SIP, vous pouvez spécifier une liste d'ID de jonction SIP spécifiques. Si le message est créé avec une liste vide, toute jonction SIP est autorisée. Si une interconnexion privée est établie, fournissez l'ID d'opérateur provisionné par l'équipe Google Telephony.
Dépannage
L'équipe Google peut vous demander de fournir les artefacts suivants pour faciliter le dépannage du ping SIP OPTIONS et des appels de test effectués :
- Capture de paquets réseau
- Trace de débogage SIP affichant l'en-tête complet et le SDP SIP :
- Valeur Call-ID
- Valeur
Call-Info(si elle existe)
Capture de paquets réseau
La capture de paquets réseau doit afficher les éléments suivants :
Un handshake TCP complet en trois étapes (SYN, SYN-ACK, ACK) entre votre SBC et les serveurs GTP SIP communiquant via le port TCP 5672. Si la connexion TCP n'a pas pu être établie, les problèmes possibles sont les suivants :
- Votre réseau bloque le trafic sortant.
- La communication n'est pas envoyée à l'un des serveurs GTP SIP régionalisés. Consultez la section Configuration réseau requise pour la connectivité téléphonique.
- La communication n'est pas envoyée via le port TCP 5672.
Un handshake de connexion TLS complet avec les éléments suivants :
- TLS v1.2 ou version ultérieure initiée par votre SBC.
- Votre SBC lance un "Client Hello" et GTP répond avec "Server Hello".
- Processus d'authentification TLS mutuelle.
- GTP répond avec son propre certificat TLS de serveur, qui est authentifié par votre SBC.
- Le SBC envoie son propre certificat TLS client, qui est authentifié par GTP.
- Canal chiffré établi, comme en témoigne le message "Encrypted Handshake Message".
- Preuve de la transmission de "Application Data" sur le canal TLS.
Si la connexion TLS n'a pas pu être établie, les problèmes possibles sont les suivants :
- La jonction SIP n'a pas été créée côté GTP.
- Le nom de domaine complet configuré de la jonction SIP ne correspond pas au nom de domaine complet présenté dans le certificat TLS (attribut CN ou SAN) du SBC.
- La version de TLS n'est pas compatible. Seules les versions 1.2 ou ultérieures de TLS sont compatibles.
- La suite de chiffrement demandée n'est pas compatible. Consultez la section Configuration TLS du SBC.
- Fournisseurs de certificats TLS non fiables. Consultez la section Configuration TLS du SBC.
La trace de débogage SIP doit afficher les éléments suivants :
En-tête SIP
Call-Infodu client inséré au format suivant :none Call-Info: <http://dialogflow.googleapis.com/v2beta1/projects/$PROJECT_ID/conversations/$CONVERSATION_ID>;purpose=Goog-ContactCenter-ConversationExemple:
none Call-Info: <http://dialogflow.googleapis.com/v2beta1/projects/gcp-project-id-12345/conversations/CID-297363723_79131759_799783510>;purpose=Goog-ContactCenter-ConversationLes en-têtes SIP affichent le numéro de téléphone au format E.164 (+16501234567).
Les en-têtes SIP affichent les adresses IP publiques utilisées dans l'URI de la demande et d'autres champs d'en-tête SIP (par exemple, To, From, Via). Les adresses IP privées sont refusées.
Les informations de connexion SDP SIP (c= ... ) sont spécifiées avec une adresse IP publique. Les adresses IP privées sont refusées.
Assurez-vous que la priorité des médias envoie d'abord le flux des utilisateurs finaux, puis le flux multimédia de l'agent humain, car GTP traite le premier flux multimédia comme celui des utilisateurs finaux par défaut.
Si vous recevez un code de réponse d'erreur SIP :
- Le code de réponse d'erreur SIP 400 (par exemple, 488 Not Acceptable Here) indique probablement que GTP a refusé un en-tête SIP ou une configuration SDP multimédia SIP.
- Le code de réponse d'erreur SIP 600 (erreur SIP 603 Declined) indique probablement un problème lié aux quotas. Pour savoir comment demander une augmentation, consultez la page Quotas et limites.