Fonctions sans serveur - Utilisation d'une clé API
Table des matières
Clés API de fonctions
Une fonction sans serveur au sein de votre CRM peut être invoquée à partir de n'importe quelle application tierce ou du CRM, à l'aide d'un webhook. Cependant, à quelques exceptions près, les webhooks ne prennent généralement pas en charge OAuth2. Dans ce cas, vous pouvez exécuter la fonction à l'aide de la méthode d'authentification par clé API, que vous, ainsi que d'autres utilisateurs, pouvez employer pour invoquer la fonction, où que vous soyez.
La différence entre la clé API et OAuth2 réside dans le mode d'authentification. La clé API doit être authentifiée dans l'URL de la demande, et non comme en-tête.
Voir aussi :
- Fonctions dans Zoho CRM.
- Tâches d'intégration pour les fonctions utilisant la version 2.0 des API
- Deluge Script - Guide de référence.
- Connexions : connectez votre Zoho CRM à n'importe quelle application tierce en invoquant leurs API dans une fonction.
- Zoho Desk - Logiciel de support technique, par Zoho.
Exemple de fonction :
Scénario :
Les logiciels d'assistance et de support technique sont indispensables dans une entreprise dont les activités reposent sur une interaction avec les clients. L'intégration de vos logiciels de support technique avec votre CRM vous fera gagner beaucoup de temps et d'efforts en vous permettant de gérer toutes vos informations commerciales depuis un seul et même endroit.
Zendesk est l'un de ces logiciels. Zoho Desk, développé par Zoho, appartient également à cette catégorie, mais la différence est que l'intégration de Zoho Desk est automatisée dans Zoho CRM, alors que vous devez intégrer Zendesk en utilisant uniquement des widgets. En outre, le transfert des informations sur les tickets d'un service de support technique à un autre n'est pas une mince affaire. L'intégration de Zendesk et Zoho Desk, par l'intermédiaire de fonctions sans serveur dans Zoho CRM, est donc à la fois pratique et utile.
Le scénario que nous allons maintenant utiliser repose sur une base similaire. Chaque fois qu'un « Ticket » est créé dans « Zendesk », un ticket doit également être créé dans Zoho Desk, avec les mêmes informations.
Applications requises :
- Zendesk
- Zoho Desk
Partie 1 : Établir une connexion
Pour que la fonction puisse utiliser des applications tierces et faciliter le transfert de données, vous devez d'abord établir une connexion entre Zoho CRM et le logiciel tiers. Dans ce cas, il s'agit de Zendesk. En savoir plus.
Créez une connexion à Zoho Desk :

Partie 2 : Créer la fonction
Créez une fonction dans Zoho CRM (y compris le code de la connexion).
Partie 2.1 : Écrire la fonction

Le code de fonction est :
string createTicket(string requestBody){
if(isNull(requestBody))
{
return "Pas de contenu";
}
if(!requestBody.contains("arguments"))
{
return "Format non valide";
}
requestBody = requestBody.get("arguments");
requestBody = requestBody.get("requestBody");
requestBody = requestBody.get("details");
deskURL = "https://desk.zoho.com/api/v1/";
header = {"orgId":"664950682"};
departmentId = "264631000000006907"; //Obtenir les détails du ticket et de l'utilisateur depuis requestBody
userDetails = requestBody.get("user");
ticketDetails = requestBody.get("ticket"); //Créer un mappage
param = Map(); //Insérer les détails
param.put("departmentId",departmentId);
if(!userDetails.contains("email"))
{
return "Un e-mail est obligatoire";
}
email = userDetails.get("email");
param.put("email",email);
contactName = "Guest";
if(userDetails.contains("full_name"))
{
contactName = userDetails.get("full_name");
}
else if(userDetails.contains("first_name") && userDetails.contains("last_name"))
{
contactName = userDetails.get("first_name") + " " + userDetails.contains("last_name");
}
else if(userDetails.contains("first_name"))
{
contactName = userDetails.get("first_name");
}
else if(userDetails.contains("last_name"))
{
contactName = userDetails.get("last_name");
}
//Obtenir l'ID de contact à partir du nom de contact
//Obtenir tous les contacts
contactList = invokeurl
[
url :deskURL + "contacts"
type :GET
headers:header
connection:"zoho_desk9"
];
isExistingCustomer = false;
contactId = "";
contactList = contactList.get("data");
for each contactInfo in contactList
{
contactEmail = contactInfo.get("email");
if(!isNull(contactEmail))
{
if(email.equals(contactEmail))
{
isExistingCustomer = true;
contactId = contactInfo.get("contactId");
break;
}
}
}
info isExistingCustomer;
if(!isExistingCustomer)
{
//Créer un nouveau contact
contactParam = Map();
contactParam.put("firstName",userDetails.get("first_name"));
contactParam.put("lastName",userDetails.get("last_name"));
contactParam.put("mobile",userDetails.get("mobile"));
contactParam.put("email",userDetails.get("email"));
contactParam.put("accountId","264631000000081178");
contactList = invokeurl
[
url :deskURL + "contacts"
type :POST
parameters:contactParam.toString()
headers:header
connection:"zoho_desk9"
];
contactId = contactList.get("id");
}
param.put("contactId",contactId);
if(!ticketDetails.contains("title"))
{
return "title is mandatory";
}
param.put("subject",ticketDetails.get("title"));
if(!ticketDetails.contains("status"))
{
return "status is mandatory";
}
param.put("status",ticketDetails.get("status"));
if(ticketDetails.contains("priority"))
{
param.put("priority",ticketDetails.get("priority"));
}
if(userDetails.contains("organization"))
{
organization = userDetails.get("organization");
if(organization.contains("name"))
{
param.put("accountName",organization.get("name"));
}
}
if(userDetails.contains("mobile"))
{
param.put("phone",userDetails.get("mobile"));
}
if(userDetails.contains("description"))
{
param.put("description",userDetails.get("description"));
}
info param;
response = invokeurl
[
url :deskURL + "tickets"
type :POST
parameters:param.toString()
headers:header
connection:"zoho_desk9"
];
if(response.contains("errorMessage"))
{
return "Sorry Something went wrong. error ::: " + response.get("errorMessage");
}
//Envoyer une notification à l'équipe de support technique
sendmail
[
from :zoho.adminuserid
to :"deborah.g@zohocorp.com"
subject :"no-reply"
message :"'Bonjour,<expression></expression><div><br></div><div>Un nouveau ticket a été créé dans Zoho DESK via Zendesk.</div><div><br></div><div>Détails du ticket - </div><div><br></div><div>User Name - ' + contactName + '</div><div><br></div><div><br></div><div>Request Body = " + requestBody + "</div><div><br></div>'"
]
return response;
}
Partie 2.2 : Pour rendre la fonction disponible en tant que clé API :
- Cliquez sur l'icône Settings (Paramètres) pour la fonction correspondante qui doit devenir une API.
- Cliquez surREST API.
- Activez le curseur API Key (Clé API).
- Cliquez sur Save (Enregistrer).
Partie 3 : Créer un webhook dans Zendesk :
- Allez à Admin > Extension > HTTP Target (Admin > Extension > Cible HTTP).
- Fournissez les informations suivantes :
- URL de la fonction
- Méthode - GET ou POST
- Sélectionnez JSON sous Content-type. Pour en savoir plus, cliquez ici.

Remarque :
- La fonction URL est la clé API URL que vous obtenez à partir de l'étape 2.
Partie 4 : Créer un déclencheur dans Zendesk :
- Condition - lorsqu'un ticket est créé.
- Notifier la cible - Nom de cible HTTP


JSON - Corps d'arguments
{"arguments":
{
"requestBody":{
"details":{
"ticket":
{
"title":"{{ticket.title}}",
"description":"{{ticket.description}}",
"source":"{{ticket.via}}",
"priority":"{{ticket.priority}}",
"due_date":"{{ticket.due_date}}",
"URI":"{{ticket.url}}",
"status":"{{ticket.status}}"
},
"assigne":
{
"email":"{{ticket.assignee.email}}",
"name":"{{ticket.assignee.name}}",
"first_name":"{{ticket.assignee.first_name}}",
"last_name":"{{ticket.assignee.last_name}}"
},
"user":
{
"full_name":"{{current_user.name}}",
"first_name":"{{current_user.first_name}}",
"language":"{{current_user.language}}",
"details":"{{current_user.details}}",
"mobile":"{{current_user.phone}}",
"email":"{{current_user.email}}",
"organization":
{
"details":"{{current_user.organization.details}}",
"name":"{{current_user.organization.name}}"
}}
}}
}}
Partie 5 : Configurer un argument contenant tout le corps de la demande.
Lorsqu'un webhook envoie des données à une fonction, il n'y a aucun moyen de connaître le nombre d'arguments qu'elle contient. Pour résoudre ce problème, vous pouvez faire en sorte que la fonction contienne tout le corps de la demande dans un seul argument.
Appelez l'API Desk depuis la fonction et enregistrez la fonction.
Le résultat :
Création d'un ticket dans Zendesk :


Le ticket est créé dans Zoho Desk
