Passer au contenu principal

Eventmaker Leads API

Mis à jour aujourd’hui

Extraire un UID à partir du code QR

Avant de créer un prospect, vous devez d'abord obtenir l'identifiant unique d'un invité (UID). Cet UID est disponible dans le code QR d'un invité. Les codes QR Eventmaker contiennent une MeCard qui intègre des données sur l'invité telles que :

le nom (N)

l'adresse e-mail (EMAIL)

le nom de l'entreprise (ORG)

le poste (TITLE)

le numéro de téléphone (TEL)

l'identifiant unique du visiteur (UID)

⚠️Notez que seul l'UID est obligatoire dans la MeCard. Les autres champs sont laissés à la discrétion de l'organisateur de l'événement.

Créer un ou plusieurs prospects

Avec l'UID, vous pouvez ensuite créer le prospect sur la plateforme Eventmaker. Cela se fait à l'aide de l'API batch_create qui vous permet de créer un ou plusieurs prospects pour un exposant. N'oubliez pas que l'exposant est authentifié par son access_token :

Exemple

curl -X POST -H 'Content-Type: application/json' https://app.eventmaker.io/api/v1/devices/<access_token>/connections/batch_create.json -d @payload.json 

💡 Remplacez le <access_token> avec le token de l'exposant

Avec payload.json :

{
"connections": [
{
"guest_uid": "<guest_uid>",
"author": "Robin"
},
{...}
]
}

💡 Remplacez le <guest_uid> avec l'UID extrait de la MeCard

Dans le payload, vous devez au moins spécifier le guest_uid et l'auteur.

Exemple de réponse :

[
{
"_id": "5c6c0c0af897748ba97644f2",
"guest_uid": "guest uid",
"exhibitor_id": "5c66dfdcf89774219591baa6",
"updated_at": "2019-02-19T14:00:42.711Z",
"created_at": "2019-02-19T14:00:42.672Z",
"author": "Robin",
"comments": [],
"exhibitor_products": []
},
{...}
]

Vous pouvez ignorer les champs comments et exhibitor_products.

Obtenir les détails des prospects

La création d'un prospect ne vous donne pas beaucoup d'informations. Vous pouvez obtenir plus de données en demandant l'API lead_guests qui renvoie une liste de champs. Ces champs sont liés à l'événement et sont mis sur liste blanche par l'organisateur de l'événement, ce qui signifie que c'est lui qui décide quels champs sont renvoyés par cette API.

Exemple

curl -X GET -H 'Content-Type: application/json' "https://app.eventmaker.io/api/v1/lead_guests/<guest_uid>.json?access_token=<access_token>" 

💡 N'oubliez pas de remplacer les valeurs entre <>

Exemple de réponse :

{
"email": "maria.hamilton@gmail.com",
"first_name": "Maria",
"last_name": "Hamilton",
"company_name": "Apple",
"uid": "S61LMJY"
}

Utilisation des codes QR chiffrés 🔐

Certains événements nécessitent des codes QR chiffrés. Pour ces événements, votre application devra récupérer une clé de chiffrement et un IV afin de déchiffrer le code QR avant de suivre le processus décrit précédemment.

Lorsque le chiffrement des codes QR est activé pour un événement, vous devez récupérer la clé de chiffrement et l'IV à l'aide de cette API :

curl -X PUT -d '{ "signature": <signature>}' -H 'Content-Type: application/json' "https://app.eventmaker.io/api/v1/events/<event_id>/exhibitors/<access_token>/activate_license.json" 

💡 N'oubliez pas de remplacer les valeurs entre <> par les valeurs correspondantes.

Exemple de réponse :

{
"qr_code_ciphering_enabled":false,
"qr_code_ciphering_key":null,
"qr_code_ciphering_iv":null,
"app":"Leads Android"
}

Exemple quand le QR code est chiffré :

{
"qr_code_ciphering_enabled":true,
"qr_code_ciphering_key":"kHxOFKTAq7xutc8MnAlmrUrQNAW/xXM8V1X5VgB444Q=",
"qr_code_ciphering_iv":"JWEVPt7lhlNcnfNNyVtnOQ==",
"app":"Leads Android"
}

Si la signature est incorrecte, vous obtiendrez un code d'état 401, sinon 200.

Calcul de la signature 🔏

Tout d'abord, votre application doit être enregistrée dans Eventmaker (contactez-nous) et nous vous fournirons un secret.

Ensuite, la clé de signature doit être la concaténation du secret et de l'identifiant de l'événement :

<secret><event_id>

Enfin, vous devez signer le jeton d'accès exposant avec la clé de signature à l'aide de hmac-sha256 :

signing_key = <secret><event_id>
signature = HmacSha256(access_token, signing_key)

Exemple de code IOS (Objective-c):

#import <CommonCrypto/CommonHMAC.h>
[...]

NSString *key = [NSString stringWithFormat:@"%@%@", kSigningSecret, eventId];

const char *cKey = [key cStringUsingEncoding:NSASCIIStringEncoding];
const char *cData = [toSign cStringUsingEncoding:NSASCIIStringEncoding];
unsigned char cHMAC[CC_SHA256_DIGEST_LENGTH];
CCHmac(kCCHmacAlgSHA256, cKey, strlen(cKey), cData, strlen(cData), cHMAC);
NSData *HMACData = [NSData dataWithBytes:cHMAC length:sizeof(cHMAC)];

const unsigned char *buffer = (const unsigned char *)[HMACData bytes];
NSMutableString *signature = [NSMutableString stringWithCapacity:HMACData.length * 2];
for (int i = 0; i < HMACData.length; ++i){
[signature appendFormat:@"%02x", buffer[i]];
}

Exemple Android (java):

String signingKey = signingSecret + eventIdK;
String toSign = "...";

Mac hmacSHA256 = Mac.getInstance("HmacSHA256");
hmacSHA256.init(new SecretKeySpec(signingKey.getBytes(), "HmacSHA256"));
byte[] result = hmacSHA256.doFinal(toSign.getBytes());
StringBuilder sb = new StringBuilder(result.length * 2);
for(byte b: result)
sb.append(String.format("%02x", b));
String signature = sb.toString();

Décryptage du code QR

Lorsque les codes QR Eventmaker sont cryptés, leur contenu ressemble à quelque chose comme ceci :

E:somecipheredunreadablestuff


Lorsque vous scannez un code QR, vous devez toujours rechercher le préfixe E: et, si vous le trouvez, vous devrez déchiffrer le contenu. Le contenu est chiffré avec AES 256 en utilisant le mode de chiffrement par blocs CBC. Les clés, l'IV et le contenu réel de la carte (tout ce qui suit E:) sont encodés en base 64 et devront d'abord être décodés (avant le processus de déchiffrement).

⚠️Assurez-vous que votre application fonctionne aussi bien avec les codes QR cryptés que non cryptés.

Exemple de code iOS (objective-c) :

NSData *data = [[NSData alloc] initWithBase64EncodedString:content options:NSDataBase64DecodingIgnoreUnknownCharacters];
NSData *keyData = [[NSData alloc] initWithBase64EncodedString:key options:0];
NSData *ivData = [[NSData alloc] initWithBase64EncodedString:iv options:0];

CCCryptorRef cryptor = NULL;
CCCryptorStatus status = CCCryptorCreateWithMode(kCCDecrypt, kCCModeCBC, kCCAlgorithmAES, kCCOptionPKCS7Padding, ivData.bytes, keyData.bytes, kCCKeySizeAES256, NULL, 0, 0, 0, &cryptor);

size_t bufsize = CCCryptorGetOutputLength(cryptor, (size_t)[data length], true);
void * buf = malloc(bufsize);
size_t bufused = 0;
size_t bytesTotal = 0;

status = CCCryptorUpdate(cryptor, [data bytes], (size_t)[data length], buf, bufsize, &bufused);
bytesTotal += bufused;

status = CCCryptorFinal(cryptor, buf + bufused, bufsize - bufused, &bufused);
bytesTotal += bufused;

NSData *decryptedData = [NSData dataWithBytesNoCopy:buf length:bytesTotal];
free(buf);
NSString *decipheredContent = [NSString stringWithUTF8String:[decryptedData bytes]];

Exemple Android (java):

String contentWithoutPrefix = content.substring("E:".length());
byte[] key = Base64.decode(qrCodeCipheringKey, Base64.DEFAULT);
byte[] iv = Base64.decode(qrCodeCipheringIv, Base64.DEFAULT);
byte[] contentData = Base64.decode(contentWithoutPrefix, Base64.DEFAULT);

SecretKeySpec keySpec = new SecretKeySpec(key, "AES");
IvParameterSpec ivSpec = new IvParameterSpec(iv)
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
cipher.init(Cipher.DECRYPT_MODE, keySpec, ivSpec);
String decodedContent = new String(cipher.doFinal(contentData));
Avez-vous trouvé la réponse à votre question ?