Transmettre des informations sur le client à un clavardage en direct

Lorsque la journalisation de la conversation est activée pour une compétence, celle-ci transmet automatiquement l'historique de clavardage à Oracle B2C Service. En plus de cet historique, vous pouvez également envoyer des informations spécifiques sur le client.

  • ID incident
  • Informations sur le client de chat : Les compétences peuvent transmettre les informations suivantes sur le client de chat à Oracle B2C Service.
    • Adresse de courriel
    • Prénom
    • Nom
    • Contact
    • Organisation
    • Catégorie
    • Produit

    La compétence utilise les valeurs de profil pour alimenter et envoyer automatiquement ces champs de client de clavardage. Vous n'avez donc rien à faire pour définir ces valeurs :

    • Adresse de courriel
    • Prénom
    • Nom
  • Champs personnalisés d'incident : Vous pouvez transmettre des valeurs pour tous les champs personnalisés Oracle B2C Service de type incident.

    Pour en savoir plus sur les champs personnalisés, voir Aperçu des champs personnalisés sous Utilisation d'Oracle B2C Service.

Note

Si vous utilisez un canal Intégration d'agent créé avant la version 20.1, ou si votre canal se connecte à une instance d'Oracle B2C Service antérieure à 19A, vous pouvez également transmettre des informations sur l'interface. Avec les canaux créés dans les versions 20.1 et supérieures, qui se connectent à Oracle B2C Service 19A et ultérieures, vous pouvez inclure l'ID interface dans l'URL du canal.

Pour envoyer des informations sur le client à l'agent humain, vous transmettez des informations sur un mappage dans la propriété Propriétés personnalisées du composant Intégration d'agent. Voici la structure générale du mappage :

incidentID: # type int
customerInformation: # chat customer information object
customFields: # incident custom fields object
Pour référencer la carte, utilisez une expression semblable à la suivante :
${mapVariableName.value}

Voir Assembler l'objet Propriétés personnalisées pour obtenir un exemple d'assemblage des informations sur le client pour envoyer l'agent humain.

Propriété incidentID

Vous pouvez transmettre un ID d'incident à l'agent humain en ajoutant une propriété incidentID au mappage Propriétés personnalisées.

Conseil :

Si vous souhaitez associer une demande de clavardage à un incident existant, vous pouvez créer un composant personnalisé pour extraire la propriété incidentId en envoyant une demande REST comme dans l'exemple qui suit. Cette demande REST extrait l'incident le plus récent pour le contact dont l'adresse de courriel correspond.
https://<URL>/services/rest/connect/latest/incidents?q=primaryContact.ParentContact.Emails.EmailList.Address like 'email@gmail.com'&orderBy=createdTime:desc&limit=1

Le corps de la réponse contient un lien href, qui contient l'ID incident :

{
    "items": [
        {
            "id": 26302,
            "lookupName": "200116-000003",
            "createdTime": "2020-01-16T13:08:25.000Z",
            "updatedTime": "2020-01-16T20:25:21.000Z",
            "links": [
                {
                    "rel": "canonical",
                    "href": "https://<URL>/services/rest/connect/v1.4/incidents/26302"
                }
            ]
        }
    ],

Pour en savoir plus sur les composants personnalisés, voir Intégration à un système dorsal. Pour en savoir plus sur les API REST d'Oracle B2C Service, voir REST API pour Oracle B2C Service.

Objet customerInformation standard

Cette section présente l'objet customerInformation pour les compétences qui utilisent un canal Intégration d'agent créé dans la version 20.01 ou ultérieure, qui se connecte à Oracle B2C Service version 19A ou ultérieure.

Vous pouvez utiliser l'objet customerInformation dans le mappage Propriétés personnalisées pour transmettre les informations suivantes sur le client de clavardage :

  • incidentID: int.
  • eMailAddress: string. 80 caractères au maximum. Votre compétence définit automatiquement cette valeur à partir des propriétés .profile correspondantes ( décrites dans Variables de portée de profil pour le contexte d'utilisateur) et la transmet à Oracle B2C Service.

  • firstName: string. 80 caractères au maximum. Votre compétence définit automatiquement cette valeur à partir des propriétés .profile correspondantes ( décrites dans Variables de portée de profil pour le contexte d'utilisateur) et la transmet à Oracle B2C Service.

  • lastName: string. 80 caractères au maximum. Votre compétence définit automatiquement cette valeur à partir des propriétés .profile correspondantes ( décrites dans Variables de portée de profil pour le contexte d'utilisateur) et la transmet à Oracle B2C Service.

  • contactID : Transmettez une valeur de type int dans la sous-propriété id.

  • organizationID : Transmettez une valeur de type int dans la sous-propriété id.

  • productID : Transmettez une valeur de type int dans la sous-propriété id.

  • categoryID : Transmettez une valeur de type int dans la sous-propriété id.

Conseil :

Vous pouvez utiliser l'API REST d'Oracle B2C Service pour voir les valeurs valides dans les champs d'informations sur le client. Par exemple, cette demande GET liste les catégories :
curl --request GET \
--url https://<sitename.domain>/services/rest/connect/latest/serviceCategories \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'

Objet customerInformation existant

Cette section présente l'objet customerInformation pour les compétences qui utilisent un canal Intégration d'agent créé avant la version 20.01 ou un canal qui se connecte à une instance d'Oracle B2C Service antérieure à la version 19A.

Vous utilisez l'objet customerInformation dans le mappage Propriétés personnalisées pour transmettre des informations sur le client de clavardage, telles que l'ID interface, l'ID contact ou l'ID catégorie. L'objet customerInformation peut contenir les champs définis dans la section Chat Customer Information du WSDL d'Oracle B2C Service à http://<sitename.domain>/services/soap/connect/chat_soap?wsdl=server.

Pour les objets, remplacez l'initiale du nom par une minuscule, et mettez le nom des champs simples tout en minuscules.

Si vous ne transmettez pas l'objet interfaceID, la compétence utilise une valeur par défaut id:{id: 1}. Notez que si l'interface n'est pas activée pour le clavardage, l'établissement de la liaison de lancement échouera. Vous pouvez utiliser l'assistant de configuration d'Oracle B2C Service, auquel vous accédez à partir de Mes services, pour vérifier si une interface est activée pour le clavardage.

Bien que vous puissiez définir les champs EMailAddress, FirstName et LastName qui sont décrits dans la section Chat Customer Information du WSDL, votre compétence définit automatiquement ces valeurs à partir des propriétés .profile correspondantes (décrites dans Variables de portée de profil pour le contexte utilisateur).

Conseil :

Vous pouvez utiliser l'API REST d'Oracle B2C Service pour voir les valeurs valides dans les champs d'informations sur le client. Par exemple, cette demande GET liste les ID et les noms d'interface :
curl --request GET \
--url https://<sitename.domain>/services/rest/connect/latest/siteInterfaces \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'

Cette demande GET liste les catégories :

curl --request GET \
--url https://<sitename.domain>/services/rest/connect/latest/serviceCategories \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'

Comme mentionné ci-dessus, la structure de mappage customerInformation doit être conforme à la structure Chat Customer Information affichée dans le WSDL à l'adresse suivante :

http://<sitename.domain>/services/soap/connect/chat_soap?wsdl=server

Voici un extrait du WSDL :

<!--  ============================== -->
<!--    Chat Customer Information    -->
<!--  ============================== -->

<xs:complexType name="ChatCustomerInformation">
    <xs:sequence>
        <xs:element name="EMailAddress" minOccurs="0" maxOccurs="1">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="80"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>

        <xs:element name="FirstName" minOccurs="0" maxOccurs="1">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="80"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>

        <xs:element name="LastName" minOccurs="0" maxOccurs="1">
            <xs:simpleType>
                <xs:restriction base="xs:string">
                    <xs:maxLength value="80"/>
                </xs:restriction>
            </xs:simpleType>
        </xs:element>

        <xs:element name="InterfaceID" type="rnccm:NamedID" minOccurs="1" maxOccurs="1"/>
        <xs:element name="ContactID" type="rnccm:ID" minOccurs="0" maxOccurs="1" />
        <xs:element name="OrganizationID" type="rnccm:ID" minOccurs="0" maxOccurs="1" />
        <xs:element name="Question" type="xs:string" minOccurs="0" maxOccurs="1"/>
        <xs:element name="ProductID" type="rnccm:ID" minOccurs="0" maxOccurs="1"/>
        <xs:element name="CategoryID" type="rnccm:ID" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
</xs:complexType> 

Certains objets sont de type rnccm:ID, qui est défini dans l'extrait suivant. Notez que l'objet contient un champ id de type long.

<xs:element name="ID" type="ID"/>
<xs:complexType name="ID">
    <xs:attribute name="id" type="xs:long" use="optional"/>
</xs:complexType> 

InterfaceID est de type rnccm:NamedID. Remarquez que cet objet peut contenir un ID (long), un nom (chaîne) ou les deux.

<xs:element name="NamedID" type="NamedID"/>
<xs:complexType name="NamedID">
    <xs:sequence>
        <xs:element name="ID" type="ID" minOccurs="0" maxOccurs="1"/>
        <xs:element name="Name" type="xs:string" minOccurs="0" maxOccurs="1"/>
    </xs:sequence>
</xs:complexType>

La casse du WSDL est différente de celle du mappage Propriétés personnalisées. Dans le mappage, la première lettre d'un nom d'objet est en minuscule (cas Pascal). Par exemple, ProductID dans le WSDL sera productID pour l'objet de mappage. Les noms de champ simple sont en minuscules (Name devient name, par exemple).

Objet customFields standard

Cette section présente l'objet customFields pour les compétences qui utilisent un canal Intégration d'agent créé dans la version 20.01 ou ultérieure, qui se connecte à Oracle B2C Service version 19A ou ultérieure.

Vous utilisez l'objet customFields dans le mappage Propriétés personnalisées pour transmettre des valeurs pour tout champ personnalisé Oracle B2C Service de type incident.

L'objet customFields est un tableau de mappages qui contient les propriétés suivantes.

  • Champs simples :

    • name: Nom de colonne du champ (minuscules) précédé de c$.

    • type: Les valeurs autorisées sont BOOLEAN, DATE, DATETIME, INTEGER, LONG, STRING et DECIMAL.

    • value: Valeur du champ.

  • Champ Menu :

    • name: Nom de colonne du champ (minuscules) précédé de c$.

    • value: Vous pouvez régler la valeur à l'ID du champ ou au texte de l'élément de menu. Notez que cet objet n'a pas de propriété type.

      Conseil :

      Pour trouver l'ID d'un élément de menu, ouvrez la page de détails du champ personnalisé dans la console de service de bureau d'Oracle B2C Service. Positionnez le pointeur de la souris sur un élément de menu et attendez quelques secondes. L'infobulle s'affiche et indique l'ID de cet élément.

Voici un exemple de valeur pour l'objet :

[		
  {
    "name" : "c$text_field",        
    "type" : "STRING",
    "value" : "SILVER"
  },
  {
    "name" : "c$text_area",
    "type" : "STRING",
    "value" : "My package arrived but there were no contents in the box. Just bubble wrap."
  },
  {
    "name" : "c$integer",          
    "type" : "INTEGER",
    "value" : 21
  },
  {
    "name" : "c$yes_no", 
    "type" : "BOOLEAN",
    "value": 1
  },
  {
    "name" : "c$date_field",   
    "type" : "DATE",
    "value" : "2020-02-04T00:00:00+00:00" 
  },
  {
    "name" : "c$date_time",        
    "type" : "DATETIME",
    "value" : "2020-02-04T21:24:18+00:00" 
  },
  {
    "name" : "c$menu",            
    "value" : "12"
  }
]

Conseil :

Vous pouvez envoyer la demande GET suivante, qui utilise l'interrogation d'objet RightNow (ROQL) pour obtenir une liste des noms de colonne :
curl --request GET \
--url https://<site.domain>/services/rest/connect/latest/queryResults/?query=select%20CustomFields.c.*%20from%20Incidents \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'

Pour obtenir les valeurs valides d'un champ personnalisé, envoyez une demande GET qui utilise l'interrogation d'objet RightNow (ROQL) comme suit :

curl --request GET \
--url https://<site.domain>/services/rest/connect/latest/queryResults/?query=select%20CustomFields.c.skillType%20from%20Incidents%20where%20CustomFields.c.skillType%20IS%20NOT%20NULL \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'

Objet customFields existant

Cette section présente l'objet customFields pour les compétences qui utilisent un canal Intégration d'agent créé avant la version 20.01 ou un canal qui se connecte à une instance d'Oracle B2C Service antérieure à 19A.

Vous utilisez l'objet customFields dans le mappage Propriétés personnalisées pour transmettre des valeurs pour tout champ personnalisé Oracle B2C Service de type incident.

L'objet customFields est un tableau de mappages contenant des propriétés name, dataType et dataValue. La valeur de la propriété name est le nom de colonne du champ en minuscules, précédé de c$.

Voici un exemple de valeur pour l'objet :

[		
  {
    "name" : "c$da_text_field",        
    "dataType" : "STRING",
    "dataValue" : {
      "stringValue": "SILVER"
    }
  },
  {
    "name" : "c$da_text_area",
    "dataType" : "STRING",
    "dataValue" : {
      "stringValue": "This is a very long string that is more than 32 characters."
    }
  },
  {
    "name" : "c$da_integer",          
    "dataType" : "INTEGER",
    "dataValue" : {
      "integerValue" :21
    }
  },
  {
    "name" : "c$da_menu", 
    "dataType" : "NAMED_ID",
    "dataValue" : {
      "namedIDValue": {
        "name" : "Item 1"
      }
    }
  },
  {
    "name" : "c$da_is_from_skill",          
    "dataType" : "BOOLEAN",
    "dataValue" : {
      "booleanValue" : true
    }
  },
  {
    "name" : "c$da_date",   
    "dataType" : "DATE",
    "dataValue" : {
      "dateValue" : "2019-10-26"
    }
  },
  {
    "name" : "c$da_datetime",        
    "dataType" : "DATETIME",
    "dataValue" : {
      "dateTimeValue" : "2019-10-26T21:32:52"  
    }
  }
]

Conseil :

Vous pouvez envoyer la demande GET suivante, qui utilise l'interrogation d'objet RightNow (ROQL) pour obtenir une liste des noms de colonne :
curl --request GET \
--url https://<site.domain>/services/rest/connect/latest/queryResults/?query=select%20CustomFields.c.*%20from%20Incidents \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'

Pour obtenir les valeurs valides d'un champ personnalisé, envoyez une demande GET qui utilise l'interrogation d'objet RightNow (ROQL) comme suit :

curl --request GET \
--url https://<site.domain>/services/rest/connect/latest/queryResults/?query=select%20CustomFields.c.skillType%20from%20Incidents%20where%20CustomFields.c.skillType%20IS%20NOT%20NULL \
--header 'authorization: Basic <base64-encoded-username+:+password>' \
--header 'osvc-crest-application-context: <some-comment>'

La définition GenericField du WSDL d'Oracle B2C Service à l'adresse http://<sitename.domain>/services/soap/connect/chat_soap?wsdl=server décrit la structure dataType et dataValue :

<xs:element name="GenericField" type="GenericField"/>
  <xs:complexType name="GenericField">
    <xs:sequence>
      <xs:element name="DataValue" type="DataValue" minOccurs="1" maxOccurs="1" nillable="true"/>
    </xs:sequence>
  <xs:attribute name="dataType" type="DataTypeEnum" use="optional"/>
  <xs:attribute name="name" type="xs:string" use="required"/>

Comme pour les champs customerInformation, la même casse s'applique à l'équivalent du mappage de propriétés personnalisées (DataValue du WSDL est dataValue dans le mappage, par exemple).

Assembler l'objet de propriétés personnalisées

Vous pouvez utiliser de nombreuses approches pour créer l'objet Propriétés personnalisées. Les étapes suivantes montrent comment le faire en créant une variable distincte pour chaque groupe de propriétés, puis en les consolidant dans une carte.

  1. Déclarez des variables pour les parties à inclure dans l'objet Propriétés personnalisées :
    • Si vous voulez inclure l'ID incident dans les propriétés personnalisées, définissez une variable de type Integer pour l'ID incident. Dans cet exemple, nous l'appellerons customerTicketId.
    • Si vous voulez inclure des propriétés customerInformation dans les propriétés personnalisées, définissez une variable de type List pour contenir ces propriétés. Dans cet exemple, nous l'appellerons custInfo.
    • Si vous voulez inclure l'une des propriétés customFields dans les propriétés personnalisées, définissez une variable de type Map pour contenir ces propriétés. Dans cet exemple, nous l'appellerons custFields.

    Vous déclarez des variables de flux en sélectionnant le flux indiqué dans la page Concepteur de flux, en cliquant sur l'onglet Configuration et en cliquant sur Ajouter une variable.

  2. Dans les composants Set Variable, affectez des valeurs aux variables que vous avez créées.
    • Pour customerTicketId, utilisez une valeur ou une expression qui se résout en entier.
    • Pour custInfo, fournissez la valeur en tant que mappage JSON qui ressemble à ceci :
      {
        "contactID" : {
          "id" : "${contactId}"
      	},  
        "organizationID" : {
          "id" : "${organizationId}"
      	},
        "productID" : {
          "id" : "${productId}"
      	},
        "categoryID" : {
          "id" : "${categoryId}"
      	}
      }
    • Pour custFields, fournissez la valeur en tant que tableau JSON d'objets ressemblant à ceci :
      [		
        {
          "name" : "c$text_field",        
          "type" : "STRING",
          "value" : "SILVER"
        },
        {
          "name" : "c$text_area",
          "type" : "STRING",
          "value" : "My package arrived but there were no contents in the box. Just bubble wrap."
        },
        {
          "name" : "c$integer",          
          "type" : "INTEGER",
          "value" : 21
        },
        {
          "name" : "c$yes_no", 
          "type" : "BOOLEAN",
          "value": 1
        },
        {
          "name" : "c$date_field",   
          "type" : "DATE",
          "value" : "2020-02-04T00:00:00+00:00" 
        },
        {
          "name" : "c$date_time",        
          "type" : "DATETIME",
          "value" : "2020-02-04T21:24:18+00:00" 
        },
        {
          "name" : "c$date_time", 
          "type" : "DATETIME",	  
          "value" : "2020-02-04T21:24:18+00:00" 
        },
        {
          "name" : "c$menu",            
          "value" : "12"
        }
      ]
  3. Utilisez un composant Set Variable pour consolider les variables de l'étape précédente en une seule variable de mappage.

    Par exemple, vous pouvez nommer la variable liveChatInfo et lui donner la valeur suivante :

    {
      "incidentId" : "${customerTicketId}",
      "customerInformation" : "${custInfo.value}",
      "customFields" : "${custFields.value}"
    }
  4. Dans le composant Lancement de l'agent du flux, réglez la valeur de la propriété Propriétés personnalisées à la valeur de la variable de mappage consolidée, par exemple : ${liveChatInfo.value}.