Atualize o aplicativo Express para realizar chamadas de API ao Salesforce
Nesta seção, você atualizará seu aplicativo Express para criar uma nova tarefa no Salesforce quando seu webhook for acionado por uma chamada.
Para atualizar um aplicativo ExpressJS:
-
No seu aplicativo, adicione o Biblioteca JSForce além de dotenv usando:
npm install jsforce dotenv--save -
Crie um novo arquivo chamado
.env, que conterá o seguinte:CopiarSF_USERNAME='' SF_PASSWORD='' SF_TOKEN=''O
SF_USERNAMEeSF_PASSWORDserão o nome de usuário e a senha usados para fazer login no Salesforce. OSF_TOKENé o token que você deveria ter recebido por e-mail quando seu token de segurança foi gerado pelo Salesforce. -
Crie um novo arquivo JavaScript, chamado
Salesforce.jse adicione o seguinte:Copiarvar jsforce = require('jsforce'); var conn = new jsforce.Connection(); function login() { return new Promise((resolve, reject) => { conn.login(process.env.SF_USERNAME, process.env.SF_PASSWORD + process.env.SF_TOKEN, function(err, res) { if (err) {reject(err); return} resolve(res) }) }) } function getContact(phone_number) { return new Promise((resolve, reject) => { var q = `SELECT Id FROM Contact WHERE Phone='${phone_number}'` console.log(q) conn.query(q, function(err, res) { if (err) {reject(err); console.log(err);} resolve(res) }) }) } function createContact(first_name, last_name, phone_number) { return new Promise((resolve, reject) => { //Create new contact, get the record ID console.log(`Create contact ${first_name} ${last_name} ${phone_number}`) var data = { FirstName : first_name, LastName : last_name, Phone:phone_number} if (first_name != null) { data['FirstName'] = first_name } if (last_name != null) { data['LastName'] = last_name } conn.sobject("Contact").create(data, function(err, ret) { if (err || !ret.success) { reject(err); console.error(err, ret); return } console.log("Created new contact id : " + ret.id); resolve(ret) }); }) } function addTask(subject, call_dur, recordId) { return new Promise((resolve, reject) => { conn.sobject("Task").create({ TaskSubtype : 'Call', CallDurationInSeconds : call_dur, Subject:subject, WhoId:recordId}, function(err, ret) { if (err || !ret.success) { reject(err); console.error(err, ret); return } console.log("Created new task id : " + ret.id); resolve(ret) }); }) } module.exports.login = login module.exports.getContact = getContact module.exports.createContact = createContact module.exports.addTask = addTask -
Atualize o código em
app.jspara importar esse novo arquivo:Copiarvar salesforce = require('./Salesforce.js')Quando o aplicativo carregar, escreva o código para fazer login usando suas credenciais do Salesforce.
Copiarsalesforce.login() .then(function(res) { console.log(res) }).catch((function(err) { console.log(err) })) -
Atualize o código no
app.post('/webhook) da sua aplicação para usar o novoSalesforce.jsarquivo.Copiarrequire('dotenv').config() const express = require('express') const app = express() const port = 3000 app.post('/webhook', (req, res) => { var event = req.body.event var callerId = event.callerId; var first_name = null var last_name = null var phone_number = event.phoneNumber.replace(/\D/g,'') if (typeof(callerId) != "undefined") { [last_name, first_name] = callerId.split(" ") } else { last_name = phone_number } var direction = event.direction var duration = event.duration var state = event.state if (state == "ANSWERED") { var name = `${first_name} ${last_name}` if (typeof(callerId) == "undefined") { name = phone_number } var subject = `${direction.toLowerCase()} call with ${name}` salesforce.getContact(phone_number) .then(function(contact) { console.log(contact) if (contact["totalSize"] == 0) { //Create new contact return salesforce.createContact(first_name, last_name, phone_number) .then(function(contact) { var contactId = contact["Id"] return salesforce.addTask(subject, duration, contactId) }) } else { //Grab the first contact var contactId = contact["records"][0]["Id"] return salesforce.addTask(subject, duration, contactId) } }).catch(function(err) { console.log(err) }) } res.sendStatus(200); }); app.listen(port, () => console.log(`Example app listening at http://localhost:${port}`))Este código será acionado quando for feita ou recebida uma chamada a partir do seu número VBC. Quando a chamada for concluída (
if (state == "ANSWERED")), o aplicativo procurará primeiro um contato com o número de telefone fornecido (event.phoneNumber).Isso chamará o
salesforce.getContact()função para pesquisar o Contato. Se o Contato existir, criamos uma nova Tarefa usando a funçãosalesforce.addTask(). Isso criará uma nova tarefa no Salesforce que incluirá o título e o contato associado (usando ocontactId) e a duração da ligação.Se não houver nenhum contato que corresponda ao número de telefone fornecido, use o
contact["totalSize"] == 0verificar; em seguida, o aplicativo criará um novo contato usando oevent.callerIdpropriedade do webhook e dividir a string em nome e sobrenome. Observe que as chamadas efetuadas PODEM não conter essa propriedade. Nesse caso, usaremos o número de telefone como sobrenome do contato. -
Para iniciar seu aplicativo, execute o seguinte comando:
node app.js
A partir de agora, seu aplicativo criará uma nova tarefa no Salesforce sempre que uma chamada for concluída, seja ela efetuada ou recebida.
Observação: Certifique-se de que a porta especificada (300) é a mesma porta que você usa ao criar sua URL do ngrok.
Registrar chamadas recebidas no Salesforce
Registrar chamadas recebidas no Salesforce