Plate-forme de téléphonie Google

Ce guide vous explique comment créer et configurer un numéro de téléphone Google Telephony Platform (GTP) pour votre application d'agent. Cette fonctionnalité prête à l'emploi vous permet d'associer un nouveau numéro de téléphone à votre agent, qui pourra gérer le trafic entrant en quelques minutes seulement.

Si vous souhaitez utiliser un numéro de téléphone préexistant, vous pouvez configurer votre système SBC (Session Border Control) pour qu'il redirige automatiquement le numéro existant vers le nouveau numéro GTP. Pour obtenir des instructions détaillées sur l'intégration et la configuration de SBC, consultez la documentation sur la téléphonie Dialogflow CX.

Avant de commencer

  1. Suivez les étapes de la page configuration et nettoyage pour créer ou configurer le projet que vous souhaitez utiliser pour le déploiement.
  2. Créez et configurez une application d'agent à utiliser dans le déploiement.
  3. Activez l'API Dialogflow dans le projet.

Limites

Les limites suivantes s'appliquent :

  • Les numéros de téléphone PSTN (Public Switched Telephone Network) standards sont compatibles avec l'emplacement multirégional us. Pour l'emplacement multirégional eu, vous pouvez utiliser des numéros de téléphone virtuels.
  • Seuls les numéros de téléphone américains sont acceptés dans l'emplacement multirégional us.
  • Les numéros de téléphone virtuels ne peuvent pas être appelés depuis des téléphones PSTN standards.

Associer une application d'agent à un numéro de téléphone GTP

  1. Ouvrez la console CX Agent Studio et sélectionnez votre application d'agent.
  2. En haut de la console, cliquez sur l'onglet Deploy (Déployer), puis sur Connect to a platform (Se connecter à une plate-forme). Si vous avez déjà déployé des canaux, cliquez sur +New channel (+Nouveau canal).
  3. Saisissez un Name (Nom) pour le canal, puis sélectionnez Google Telephony Platform (GTP) dans le menu Platform (Plate-forme).
  4. L'option par défaut consiste à provisionner un numéro de téléphone virtuel pour tester votre application d'agent dans le navigateur. Pour provisionner un numéro de téléphone PSTN (Public Switched Telephone Network) standard, sélectionnez cette option dans le menu déroulant Connection type (Type de connexion).
  5. Sélectionnez une Version à déployer. Si vous n'avez pas de versions préexistantes, créez-en une.
  6. (Facultatif) Cliquez sur le bouton Channel-specific behavior (Comportement spécifique au canal) pour configurer des options supplémentaires. Vous pouvez modifier la longueur de la réponse de l'agent, activer l'entrée DTMF et autoriser les utilisateurs à interrompre l'agent au milieu de sa réponse. Pour en savoir plus sur ces paramètres, consultez la documentation sur les paramètres de l'application d'agent.
  7. Cliquez sur Create channel (Créer un canal). Vous pouvez désormais voir le numéro de téléphone et l'ID de déploiement du canal.
  8. Si vous avez provisionné un numéro de téléphone PSTN, appelez-le pour vérifier qu'il se connecte à votre application d'agent, puis cliquez sur Done (OK). Le nouveau canal s'affiche sur la page Deployed channels (Canaux déployés) de l'application d'agent. Vous pouvez désormais utiliser ce numéro pour que les clients appellent votre agent. Si vous avez provisionné un numéro de téléphone virtuel, vous pouvez le tester dans le widget WebRTC.

Tester l'application d'agent dans le widget WebRTC

Que vous ayez provisionné un numéro de téléphone PSTN standard ou un numéro de téléphone virtuel, vous pouvez tester votre application d'agent dans le widget WebRTC à l'aide d'audio, de vidéo ou de texte.

  1. En haut de la console, cliquez sur l'onglet Deploy (Déployer).
  2. Cliquez sur l'icône à côté du nom de la chaîne déployée. Un widget WebRTC s'ouvre sur la droite.
  3. Si le widget WebRTC vous y invite, autorisez le navigateur à accéder à votre micro et à votre caméra.
  4. Interagissez avec votre agent par audio, vidéo ou texte. Lorsque vous utilisez la vidéo, vous pouvez également passer au partage d'écran à l'aide du menu déroulant situé à côté de l'icône de la caméra.

Configurer le comportement de l'application d'agent

Vous pouvez personnaliser le comportement de votre agent en ce qui concerne la fin et le transfert des appels.

Configurer la fin d'appel de l'agent

Pour autoriser l'agent à mettre fin à un appel :

  1. Cliquez sur le signe plus en haut à droite de l'agent, puis sur Add tools (Ajouter des outils).
  2. Ajoutez l'outil end_session à l'agent (et à tous les sous-agents, le cas échéant). Cet outil système est automatiquement disponible pour chaque agent par défaut.
  3. Ajoutez une description du comportement de fin d'appel aux instructions. Par exemple : End the call by executing the end_session tool with arguments reason="customer_query_ended".

Transférer un appel à un agent humain

Pour configurer l'agent afin qu'il transfère l'appel à un agent humain et mette fin à la partie de l'appel avec l'agent virtuel :

  • Ajoutez l'outil système end_session à l'agent (et à tous les sous-agents, le cas échéant).
  • Créez les variables suivantes :
    • escalationMessage: vous pouvez ajouter du texte au champ Default value (Valeur par défaut) si vous souhaitez que l'agent prononce un message avant de transférer l'appel.
    • telephonyTransferCall : définissez le Type sur Custom schema (Schéma personnalisé). Saisissez l'objet JSON suivant dans la zone de saisie Schema (Schéma) avec le numéro de téléphone vers lequel vous souhaitez que l'agent transfère les appels (format E.164 requis).
{
  "phoneNumber": "+PHONE_NUMBER"
}
  • Ajoutez une description de ce comportement à vos instructions. Par exemple : Escalate the call to a human agent by executing the end_session tool with session_escalated=true

Transfert d'un agent humain avec l'aide d'un partenaire

Si votre système intègre un partenaire non Google deux options sont disponibles pour le transfert d'un agent humain : une liveAgentHandoff variable ou une telephonyPayload variable. Dans les deux cas, la charge utile JSON peut varier en fonction des instructions du partenaire.

Transfert d'un agent humain avec l'aide d'un partenaire :

  • Ajoutez l'outil système end_session à l'agent (et à tous les sous-agents, le cas échéant).
  • Créez la variable suivante :
    • liveAgentHandoff: définissez le Type sur Custom schema (Schéma personnalisé) et ajoutez le schéma JSON requis par le partenaire, par exemple :
{
  "PARTNER_NAME": {
    "type": "action",
    "action": "deflection",
    "deflection_type": "sip",
    "sip_uri": "SIP_URI",
    "sip_refer": true,
    "sip_parameters": {
      "x-header": "value"
    }
  }
}
  • Ajoutez une description de ce comportement à vos instructions. Par exemple : Escalate the call to a human agent by executing the end_session tool with session_escalated=true

Transfert d'un agent humain avec une charge utile personnalisée :

  • Ajoutez l'outil système end_session à l'agent (et à tous les sous-agents, le cas échéant).
  • Créez la variable suivante :
    • telephonyPayload: définissez le Type sur Custom schema (Schéma personnalisé) et ajoutez le schéma JSON requis par le partenaire, par exemple :
{
  "PARTNER_NAME": {
    "type": "action",
    "action": "deflection",
    "deflection_type": "sip",
    "sip_uri": "SIP_URI",
    "sip_refer": true,
    "sip_parameters": {
      "x-header": "value"
    }
  }
}
  • Ajoutez une description de ce comportement à vos instructions. Par exemple : Escalate the call to a human agent by executing the end_session tool with session_escalated=true

Utiliser la signalisation SIP pour transmettre des données à l'agent et depuis l'agent

Si vous avez effectué une intégration SBC, vous pouvez utiliser la signalisation SIP pour transmettre des données à l'agent à l'aide d'en-têtes SIP. Vous pouvez également transmettre des données lorsqu'un BYE, un REFER ou un INVITE est déclenché par l'agent.

Toutes les données transmises à l'agent sont accessibles à l'aide de variables. Vous devez d'abord créer les variables pour accéder aux données.

Le numéro de téléphone de l'appelant (ANI) est stocké dans la variable telephony-caller-id de type Text.

Si l'agent doit prononcer un message avant de procéder à une escalade, le message doit être stocké dans la variable escalationMessage de type Text.

Pour effectuer un SIP REFER ou un SIP INVITE, la variable telephonyTransferCall de type Custom schema (advanced) doit exister avec les variables phoneNumber et useOriginatingTrunk spécifiées.

Toutes les données à transmettre doivent être présentes dans la variable liveAgentHandoff de type Custom schema (advanced).

En-tête SIP UUI

Vous pouvez transmettre 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. Pour y accéder dans l'agent, créez une variable nommée uui-headers et de type List.

Par exemple, si la chaîne key1=value1;key2=value2 doit être transmise, l'en-tête UUI suivant doit être envoyé, où la charge utile est la valeur encodée au format hexadécimal key1=value1;key2=value2.

User-to-User: 6B6579313D76616C7565313B6B6579323D76616C756532;encoding=hex;purpose=Goog-Session-Param

La variable uui-headers contiendra l'objet suivant :

"uui-headers": ["key1=value1;key2=value2"]

Pour transmettre uuiHeaders lors de l'appel de l'outil end_session, spécifiez params={"liveAgentHandoff": {"uuiHeaders": [ {uui-headers}[0] ]}}

Par exemple, si les en-têtes UUI transmis devaient être transmis lors d'un SIP BYE, vous auriez une instruction semblable à la suivante :

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "liveAgentHandoff":{"uuiHeaders": [ {uui-headers}[0] ]}}.

En-têtes SIP x

Les en-têtes SIP commençant par x- peuvent être transmis à l'agent et enregistrés en tant que variable x-headers et de type Custom schema (advanced). Le préfixe x- est supprimé du nom de l'en-tête dans la variable.

Par exemple, si le SIP INVITE contient l'en-tête suivant :

x-billing-id: 12345

La variable x-headers contiendra l'objet suivant :

{
  "x-headers": {
    "billing-id": "12345"
  }
}

Pour transmettre xHeaders lors de l'appel de l'outil end_session, spécifiez params={"liveAgentHandoff": {"xHeaders": {x-headers} }}

Par exemple, si les en-têtes x transmis devaient être transmis lors d'un SIP BYE, vous auriez une instruction semblable à la suivante :

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "liveAgentHandoff":{"xHeaders": {x-headers} }}.

Envoyer un SIP BYE

Lorsque l'agent met fin à l'appel, un SIP BYE est envoyé. Pour envoyer uuiHeaders et xHeaders dans le SIP BYE, utilisez une instruction semblable à l'exemple suivant :

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "liveAgentHandoff":{"xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.

Envoyer un SIP REFER

Si l'agent doit transférer l'appel à un agent humain et quitter l'appel, un SIP REFER doit être utilisé. Un SIP REFER est déclenché en spécifiant "sipRefer": true dans la variable liveAgentHandoff, et le numéro refer-to doit être fourni dans la variable telephonyTransferCall. Exemple d'instruction pour effectuer un SIP REFER et transmettre les uuiHeaders et xHeaders :

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "telephonyTransferCall": {"phoneNumber": "+19496855555", "useOriginatingTrunk": true}, "liveAgentHandoff":{"sipRefer": true, "xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.

Envoyer un SIP INVITE

Si l'agent doit transférer l'appel à un agent humain et rester en ligne pour pouvoir utiliser les fonctionnalités d'Agent Assist, un SIP INVITE doit être utilisé. Un SIP INVITE est déclenché par le phoneNumber dans la variable telephonyTransferCall. Exemple d'instruction pour effectuer un SIP INVITE et transmettre les uuiHeaders et xHeaders :

If the user says that they would like to speak to an agent, escalate the call to the agent by executing the end_session tool with session_escalated=true and params={"escalationMessage": "I am transferring you to an agent", "telephonyTransferCall": {"phoneNumber": "+19496855555", "useOriginatingTrunk": true}, "liveAgentHandoff":{"xHeaders": {x-headers}, "uuiHeaders": [{uui-headers[0]}] }}.

Créer un gestionnaire pour les déconnexions d'appel à distance

Lorsqu'un client raccroche, un événement spécifique, sys.remote-call-disconnected, est déclenché. Il peut être utilisé pour déclencher un appel d'outil dans CX Agent Studio. Dans l'exemple suivant, l'outil sum est appelé lorsque le client raccroche.

L'outil sum est défini comme un outil de code Python et contient le code suivant :

def sum(x: int, y: int) -> int:
  """
  Computes the sum of two numbers.

  Args:
    x: The first number.
    y: The second number.

  Returns:
    The sum of the two numbers.
  """
  return x+y

Dans l'agent racine, créez un rappel Before LLM avec la logique permettant de surveiller l'événement de déconnexion de l'appel. Dans LlmResponse, effectuez l'appel d'outil sum, puis appelez l'outil end_session.

def before_model_callback(callback_context: CallbackContext, llm_request: LlmRequest) -> Optional[LlmResponse]:

  for part in callback_context.get_last_user_input():
    if part.text == "<event>sys.remote-call-disconnected</event>":
      return LlmResponse.from_parts(
        [Part.from_function_call('sum', {'x': 1, 'y': 2}),
         Part.from_end_session(reason='sum tool called after caller disconnected')]
      )
  return None