Tema
Salesforce
Salesforce chamando o Falia
- Setup → Named Credentials → External Credentials → New: protocolo Custom; crie um Principal com o parâmetro
ApiKey= sua chavefal_live_.... - Em Custom Headers da External Credential:
Authorization=Bearer {!$Credential.FaliaApi.ApiKey}. - Named Credential
FaliaApicom URLhttps://falia.com.br/api/v1usando a External Credential. - Dê acesso ao Principal pelo Permission Set do usuário de integração.
apex
// Avisa o cliente quando a Oportunidade é ganha.
HttpRequest req = new HttpRequest();
req.setEndpoint('callout:FaliaApi/messages');
req.setMethod('POST');
req.setHeader('Content-Type', 'application/json');
req.setHeader('Idempotency-Key', 'opp-ganha-' + opp.Id);
req.setBody(JSON.serialize(new Map<String, Object>{
'to' => opp.Account.Phone,
'text' => 'Olá! Seu pedido foi confirmado. Obrigado pela confiança.'
}));
HttpResponse res = new Http().send(req);Em Flow: ação HTTP Callout apontando para a Named Credential FaliaApi.
Falia avisando o Salesforce
Crie um endpoint Apex REST num site público (ou Experience Cloud), cadastre a URL como webhook e valide a assinatura com o exemplo Apex de Webhooks antes de processar.
apex
@RestResource(urlMapping='/falia/webhook')
global without sharing class FaliaWebhook {
@HttpPost
global static void receive() {
RestRequest req = RestContext.request;
String body = req.requestBody.toString();
String sig = req.headers.get('X-Proton-Signature');
if (!WebhookVerifier.verify(FaliaSettings__c.getOrgDefaults().Secret__c, sig, body)) {
RestContext.response.statusCode = 401;
return;
}
// Enfileire (ex.: criar Task/Case por message.received) e responda rápido.
System.enqueueJob(new ProcessarEventoFalia(body, req.headers.get('traceparent')));
RestContext.response.statusCode = 202;
}
}