Integração com Salesforce: Apex Triggers personalizados

Se você não quiser usar nosso conector Salesforce ou precisar configurar uma integração rápida sem passar por sua equipe de TI, você pode configurar Apex Triggers personalizados (gatilhos de Apex) para enviar novas entradas de CampaignMember para seu evento InEvent.

Para realizar esta tarefa, criamos duas classes de Apex:

PushLeadToInEventTrigger.apxt

Este é um acionador Apex que funciona toda vez que uma nova entrada de CampaignMember é adicionada à sua conta Salesforce. Como o gatilho é universal, precisamos filtrar apenas as entradas que são adicionadas à nossa campanha (Campaign), e isso é definido por nossa variávelSF_CAMPAIGN_ID . Também precisamos definir para qual evento queremos enviar esses leads, e isso é definido por nossa variável IN_EVENT_ID. Neste exemplo, temos os seguintes valores:

  • SF_CAMPAIGN_ID = '7015G000000SZIUQA4' essa é nossa Campaign no Salesforce;
  • IN_EVENT_ID = '69442441' esse é nosso Event na InEvent;

Aqui está o código fonte completo para este gatilho:

trigger PushLeadToInEventTrigger on CampaignMember (after insert) {
// Your settings variables
String SF_CAMPAIGN_ID = '7015G000000SZIUQA4'; // Your Salesforce CampaignId
String IN_EVENT_ID = '69442441'; // Your InEvent eventID

for (CampaignMember cm: Trigger.new) {
// Skip other campaigns
if (cm.CampaignId != SF_CAMPAIGN_ID) continue;

// If you need more fields or custom fields, you can check our API documentation
Map<String, String> body = new Map<String, String>();
body.put('firstName', cm.FirstName);
body.put('lastName', cm.LastName);
body.put('username', cm.Email);
body.put('email', cm.Email);
body.put('password', ''); // leave empty if using block password tool
body.put('role', cm.Title);
body.put('company', cm.CompanyOrAccount);
body.put('telephone', cm.Phone);
body.put('feedbackContent', '[]'); // custom fields would go here (required, even if empty, expects a serialized JSON)

PushLeadToInEvent.push(IN_EVENT_ID, body);
}
}

// MIT License

PushLeadToInEvent.apxc

Esta classe tem o método future que empurra o conteúdo recebido de nosso Apex Trigger para a InEvent. Você só precisa fazer alterações se quiser adicionar campos adicionais ou se quiser sincronizar para um ponto final diferente na InEvent.

Este código cria um novo participante na InEvent, de modo que ele consumirá um crédito de registro por submissão.

Aqui está o código fonte completo para esta classe:

public class PushLeadToInEvent {
@future (callout=true)
public static void push(String eventID, Map<String, String> body) {

// Our HTTP request configuration
Http http = new Http();
HttpRequest request = new HttpRequest();
request.setMethod('POST');
request.setHeader('Content-Type', 'application/x-www-form-urlencoded;charset=UTF-8');

// Our query string builder
Map<String, String> query = new Map<String, String>();
query.put('action', 'form.respondRegistration');
query.put('version', '2');
query.put('eventID', eventID);

String cQuery = '';
for (String key : query.keySet()) {
if (String.isEmpty(cQuery)) {
cQuery += '?' + key + '=' + query.get(key);
} else {
cQuery += '&' + key + '=' + query.get(key);
}
}

String cBody = '';
for (String key : body.keySet()) {
String val = body.get(key);
if (val == null) val = '';
val = EncodingUtil.urlEncode(val, 'UTF-8');

if (String.isEmpty(cBody)) {
cBody += key + '=' + val;
} else {
cBody += '&' + key + '=' + val;
}
}

request.setEndpoint('https://app.inevent.com/api/' + cQuery);
request.setBody(cBody);

HttpResponse response = http.send(request);

System.debug('Calling [POST] ' + 'https://app.inevent.com/api/' + cQuery);
System.debug('Body: ' + cBody);

// Parse the JSON response
if (response.getStatusCode() >= 400) {
System.debug('The status code returned was not expected: ' +
response.getStatusCode() + ' ' + response.getStatus() + ' ' + response.getBody());
} else {
System.debug(response.getBody());
}
}
}

// MIT License


Este artigo foi útil?