Macros Velocity pour les actions de données

Remarque :  Cet article s'applique aux intégrations AWS Lambda, Genesys Cloud, Google, Microsoft Dynamics 365, Salesforce, services web et actions de données Zendesk.

Les intégrations d’actions de données vous permettent de créer des actions personnalisées. Ces actions personnalisées incluent réponse des configurations de demande et des configurations avec des modèles qui utilisent le langage Velocity Template. Ces modèles prennent en charge une gamme de macros Velocity.

Avertissement : Échapper à toute utilisation des variables d’entrée ou de sortie dans requestTemplate, successTemplate, ou requestUrlTemplate. Si vous n'échappez pas correctement les variables avec des caractères spéciaux, vos actions de données échouent à l'exécution.
  • Utilisez esc.jsonEncode pour échapper aux chaînes de caractères dans les corps JSON. Voir esc.jsonEncode.
  • Utilisez esc.url() ou urlTool.optionalQueryParam() pour échapper au chemin d'accès ou aux paramètres de requête pour un requestUrlTemplate ou requestTemplate si vous utilisez x-www.form-urlencoded valeurs. Voir String-escaping library et URL form encoding for data actions.

Les modèles Velocity sont valides pour les champs suivants :

  • le modèle requestUrlTemplate
  • En-têtes
  • Modèle requestTemplate
  • successTemplate

Pour plus d’informations, voir Créer une action personnalisée, Configuration de la demandeet Configuration de réponse.

Remarque :  Notation formelle vs silencieuse

  • Notation formelle : $ {variable}

    Si la variable est nulle, la notation formelle produit le nom variable.

  • Notation formelle silencieuse : $!$ {variable}

    Si la variable est nulle, la notation silencieuse produit une chaîne vide.

mathématiquesbibliothèque

Préfixe : mathématiques

Utilisez ces macros mathématiques pour effectuer une opération mathématique de base. Pour plus d’informations, voir Classe MathTool dans la documentation Velocity.

Évasion de cordesbibliothèque

Préfixe : Esc

Utilisez EscapeTool pour échapper aux chaînes dans les modèles Velocity. EscapeTool fournit des méthodes pour échapper aux sorties pour Java, JSON, JavaScript, HTML, XML et SQL. EscapeTool fournit également des méthodes pour échapper à des caractères de langage de modèle de vélocité. Pour plus d’informations, voir EscapeTool de classe dans la documentation Velocity.

Les méthodes suivantes, en particulier, sont très utiles :

  • $esc.urlFormEncode(): Utilisez cette méthode pour échapper aux caractères afin de respecter les règles de codage des URL. Notez que les espaces sont encodés comme "+" par cette méthode. Il est très probable qu'il ne soit pas utilisé pour l'urlTemplate. Voir la méthode $esc.uriEncode().
  • . URL (): Alias de $esc.urlFormEncode() avec la même fonctionnalité.
  • $esc.uriEncode(): Utilisez cette méthode pour échapper aux caractères afin de respecter les règles de l'URI, par exemple l'URL. Cette méthode doit être utilisée pour échapper aux caractères dans l'urlTemplate. Notez que les espaces sont codés comme "%20" par cette méthode.
  • $esc.jsonEncode(): Utilisez cette méthode pour échapper aux caractères réservés de JSON dans la sortie. Il permet de stocker JSON sous la forme d'une chaîne de caractères.
  • $esc.jsonString(): Alias de $esc.jsonEncode() avec les mêmes fonctionnalités.
  • $esc.jsonDecode(): Utilisez cette méthode pour désencapsuler les caractères réservés de JSON, ce qui permet d'obtenir le JSON d'origine.
  • . d (): Utilisez cette méthode pour inclure le signe du dollar ($).

Le tableau suivant montre des entrées et des extrants de différentes macros. 

Avertissement : N'utilisez pas d'encodage JavaScript. $esc.javascript($input) peut créer un JSON invalide qui interrompt une action.

Macros Entrées Sorties
. Java () Il n'a pas'dis pas, "Arrêter!" Il n'a pas'ne dis pas, \"Arrêter!\"
. html () "pain" & "Beurre" "Pain au beurre"
. XML () "pain" & "Beurre" "Pain au beurre"
. SQL () McHale'Marine McHale''Marine

$esc.urlFormEncode($input)

ou

. URL ()

bonjour ici et là~ bonjour+ici+%26+là~

$esc.uriEncode($input)

bonjour ici et là~ hello%20here%20%26%20there%7E
dollar américain $
. Hash #
. backslash \
. quote "
. singleQuote '
$esc.exclamation !

Encoding. base64

Base64 encode les chaînes de caractères que vous fournissez. 

Exemple de modèle

The encoded field is $encoding.base64(\"${first} and ${second}\")

Exemple de modèle de résultats

Entrées Modèles résolus

First = = chat

second = = chien

Le champ codé est Y2F0IGFuZCBkb2c =

esc.jsonEncode

Lorsque vous créez des corps JSON pour les requêtes POST, PUT et PATH, vous devez échapper les caractères réservés dans toutes les chaînes. Cette macro échappe les guillemets et autres caractères en fonction des règles de codage JSON.

Note: esc.jsonEncode traite les caractères Unicode différemment de EscapeTool.javascript()

Exemple de modèle

$esc.jsonEncode(${input.json})

Exemple de codage

Entrée Sortie

{

"foo" : "bar"

}

{\n\t\”foo\”:\”bar\”\n}

Nul

Nul

""(chaîne vide)

""(chaîne vide)

esc.jsonDecode

Lorsque vous disposez d'une chaîne encodée en JSON et que vous souhaitez en obtenir la forme JSON, vous pouvez utiliser la macro esc.jsonDecode(). Cette macro décapsule les guillemets et autres caractères en fonction des règles d'encodage JSON.

Exemple de modèle

$esc.jsonDecode(${input.escapedjson})

Exemple de décodage

Entrée Sortie

{\n\t\”foo\”:\”bar\”\n}

{

"foo" : "bar"

}

successTemplateUtils. firstFromArray

Cette macro extrait le premier élément de la chaîne de tableau JSON fournie et a deux paramètres. Le premier paramètre, qui est le tableau d’entrée pour la valeur extraite, est requis. Le deuxième paramètre, réponse qui spécifie le qui est retourné lorsque le tableau est vide, est facultatif et par défaut ne retourne rien. Si le tableau n’est pas vide, le deuxième paramètre est ignoré. 

Si l’entrée pour firstFromArray (en) est des données extraites par le biais de la translationMap JSONPath, alors aucune chaîne s’échappant n’est nécessaire. Dans les exemples de modèles suivants, Id pourrait provenir d’une entrée translationMap, telle que "$.idArray".

Exemples de modèles et résultats

Exemples de modèles Entrées Modèles résolus
$ {successTemplateUtils.firstFromArray ( identifiants == "[1, 2, 3]" 1
identifiants == "[{\"identifiant\":1}, {\"identifiant\":2}, {\"identifiant\":3}, {\"identifiant\":4}]" {\"identifiant\":1}
identifiants == "[]"
identifiants == "" Cette entrée entraîne une erreur.
${successTemplateUtils.firstFromArray(\"${id}\", \"{}\")} identifiants == "[1, 2, 3]" 1
identifiants == "[{\"identifiant\":1}, {\"identifiant\":2}, {\"identifiant\":3}, {\"identifiant\":4}]" {\"identifiant\":1}
identifiants == "[]" {}
identifiants == "" Cette entrée entraîne une erreur.
${successTemplateUtils.firstFromArray(\"${id}\", \"$esc.quote $esc.quote\")}* identifiants == "[1, 2, 3]" 1
identifiants == "[{\"identifiant\":1}, {\"identifiant\":2}, {\"identifiant\":3}, {\"identifiant\":4}]" {\"identifiant\":1}
identifiants == "[]" «  »
identifiants == "" Cette entrée entraîne une erreur.

* Cet exemple de modèle utilise EscapeTool pour échapper aux caractères. Pour plus d’informations, voir Évasion de cordesbibliothèque.

à la réussiteTemplateUtils.moveKeysIntoArrayOfObjects

Cette macro convertit les données dans un format compatible avec Architect et a deux paramètres requis. Le premier paramètre est l’entrée de la réponse d’origine. Le deuxième paramètre est le nom de clé que la macro ajoute à un objet et la valeur est le champ dynamique de la réponse d’origine.

Remarque :  Si la macro ne peut pas convertir les données, l’action de données renvoie une erreur ou un tableau vide.

Pour renvoyer les données converties, configurez translationMap et successTemplate dans votre action de données en fonction de l’exemple suivant.

Exemple d’action de données

"config": {
  "request": {
    "requestUrlTemplate": "https://some.website.com/with/normalized/data",
    "requestType": "GET",
    "headers": {
    },
    "requestTemplateDefault": true
  },
  "response": {
    "translationMap": {
      "entitySegmentMembershipUps": "$.*.path.to.dynamic.key"
    },
    "translationMapDefaults": {},
    "successTemplate": "{\"segments\": ${successTemplateUtils.moveKeysIntoArrayOfObjects(${entitySegmentMembershipUps})},\"segmentId\")}}"
  }
}

Dans la réponse d’origine, vous ne pouvez pas accéder au GUID, car il s’agit d’une clé dynamique qui ne peut pas être aplatie correctement.

Réponse d’origine renvoyée

"segmentMembership": { 
  "ups": { 
    "a959c128-d6d9-4a42-a307-c5d278cfcbe2": { 
      "lastQualificationTime": "2020-11-16T03:23:31Z", 
      "status": "realized" 
    } 
  }
}

La macro déplace l’ID dans un objet et le renvoie en tant que segmentId. 

Macro a renvoyé une réponse

"segments": [
  {
    "lastQualificationTime": "2020-11-16T03:23:31Z",
    "status": "realized",
    "segmentId": "a959c128-d6d9-4a42-a307-c5d278cfcbe2"
  }
]

urlTool.optionalQueryParam

Cette macro formate une paire clé-valeur comme paramètre de requête, sauf si la valeur est vide. Sinon, la macro retourne une chaîne vide. N’incluez pas l'esperluet (&) dans votre template ; la macro ajoute automatiquement l’esperluet. Voir les résultats de l'exemple de modèle.  N'utilisez la macro qu'après au moins un paramètre de requête requis. Dans l’exemple de modèle suivant, le paramètre de requête requis est ${input.AMOUNT}.

Remarque :  Utilisez la notation formelle silencieuse : $!$ {variable}
Exemple de modèle

amount=${input.AMOUNT}$urlTool.optionalQueryParam(\"description\", $!{input.DESCRIPTION})

Exemple de modèle de résultats

Entrées Modèles résolus

réaction. MONTANT = = 30

réaction. DESCRIPTION - pommes de terre

montant de 30’description’pommes de terre

réaction. MONTANT = = 30

réaction. DESCRIPTION -

montant = 30

Macros de méthodes de chaîne Java

Utilisez les méthodes de chaîne Java dans les modèles Velocity pour manipuler les variables de chaîne, telles que la modification du cas d’une valeur ou l’extraction d’une valeur à partir d’une chaîne. Pour plus d'informations, voir Class String dans la documentation de Java 17.

Dans l'exemple suivant, la méthode toUpperCase() convertit la valeur de la chaîne de la variable $a en majuscules. le Split () la méthode fractionne la variable en un tableau de chaînes. La variable concatine les valeurs de variable, variable et le premier élément dans le tableau pour la variable.

Exemple de modèle

#set($a = ${input1.string1} )
#set($a = $a.toUpperCase() )
#set($b = ${input1.string2} )
#set($c = $b.split("\+") )
#set($d = "We are using ""${a}"" ""${b}"" ""$c[1]"" to render this." )
$d

Exemple de modèle de résultats

Entrées Modèles résolus

Input. chaîne u003d =

Input. chaîne u003d =

Nous utilisons "VALEUR1" "valeur1+valeur2" "valeur2" pour rendre cela.

Macros Microsoft Dynamics

msdynamics.fieldSearchFilter (en)

Cette macro construit rechercher un filtre donné une valeur et rechercher une liste de champs que vous voulez. La macro compare la valeur à chacun des champs de la liste.

Exemple de modèle

$msdynamics.fieldSearchFilter(\"$input.EMAIL_ADDRESS\", [\"emailaddress1\", \"emailadress2\"]

Exemple de modèle de résultats

Entrées Modèles résolus
input.EMAIL_ADDRESS = TestMail@example.com adresse e-mail1 eq 'TestMail@example.com' ou adresse e-mail2 eq 'TestMail@example.com'

msdynamics. phoneNumberFilter

Cette macro construit rechercher un filtre donné un numéro de téléphone rechercher et une liste de champs que vous voulez. La macro supprime les caractères non pris en charge et toutes les valeurs non chiffrées, telles que + et parenthèses, du numéro de téléphone et ajoute « ou» entre chaque champ. Ce rechercher filtre est utile pour comparer un numéro de téléphone à plusieurs numéros de téléphone dans un enregistrement de compte.

Exemple de modèle

$msdynamics.phoneNumberFilter(\"$input.PHONE_NUMBER\", [\"telephone1\", \"telephone2\"])

Exemple de modèle de résultats

Entrées Modèles résolus
réaction. PHONE_NUMBER = + 1 (555) 555-0123 telephone1 eq '+1 (555) 555-0123' ou telephone2 eq '+1 (555) 555-0123' ou telephone1 eq '15555550123' ou telephone2 eq '15555550123'

SalesforceMacros

salesforce.escReserved (en)

Cette macro échappe aux Salesforce caractères réservés des requêtes SOQL/SOSL faites dans une URL. Salesforceréserve les personnages suivants : ? ? & | ! { } [ ] ( ) ^ ~ * : \ " ' + -. Cette macro garantit que les caractères sont correctement échappés. Pour plus d’informations, voir FIND’SearchQuery’ dans Salesforce la documentation.

Exemple de modèle

FIND {$salesforce.escReserved(${input.PHONE_NUMBER})} IN PHONE FIELDS

Exemple de modèle de résultats

Entrées Modèles résolus
réaction. PHONE_NUMBER = = (555) 555-5555 {"ERROR" :{"CODE" :400000,"MESSAGE" :"ONE OF THE REQUEST INPUTS IS NOT VALID."}}

Pour plus d’informations, voir A propos des actions personnalisées pour les intégrations.

Pour plus d’informations sur l’intégration, voir À propos de l’intégration des actions de données Zendesk.