Expressアプリを更新してSalesforceへのAPIコールを行う
このセクションでは、Webhook がコールからトリガーされたときに Salesforce に新しいタスクを作成するように Express アプリケーションを更新します。
ExpressJSアプリケーションを更新する:
アプリケーションに JSForceライブラリ のみならず ドットエンブ を使っている:
npm install jsforce dotenv--saveという新しいファイルを作成する。
.envこれは次のようなものである:SF_USERNAME='' SF_PASSWORD='' SF_TOKEN=''について
SF_USERNAMEそしてSF_PASSWORDは、Salesforce へのログインに使用するユーザ名とパスワードになります。 ユーザ名とパスワードはSF_TOKENは、Salesforce でセキュリティトークンが生成されたときにメールで受信したはずのトークンです。という新しいJavascriptファイルを作成する。
Salesforce.jsを追加する:var 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のコードを更新する。
app.jsをクリックして、この新しいファイルをインポートする:var salesforce = require('./Salesforce.js')アプリが読み込まれたら、Salesforce の認証情報を使用してログインするコードを記述します。
salesforce.login() .then(function(res) { console.log(res) }).catch((function(err) { console.log(err) }))のコードを更新する。
app.post('/webhook)セクションで新しいSalesforce.jsファイル。require('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}`))このコードは、VBC番号から発信または着信があったとき、通話が完了したときにトリガーされます。
if (state == "ANSWERED"))、アプリケーションはまず、指定された電話番号を持つコンタクトを探します(event.phoneNumber).これは
salesforce.getContact()関数を使用してコンタクトを検索します。連絡先が存在する場合、関数salesforce.addTask().これにより、Salesforce に新しいタスクが作成され、タイトル、関連する連絡先(contactId)と通話時間。指定された電話番号に一致するコンタクトがない場合は
contact["totalSize"] == 0をチェックすると、アプリケーションは次のように新しいコンタクトを作成します。event.callerIdプロパティを取得し、文字列を姓と名に分割する。発信コールにはこのプロパティがない場合があります。この場合、電話番号をコンタクトの姓として使用します。アプリケーションを起動するには、以下のコマンドを実行する:
node app.js
これで、通話発信または着信が完了すると、Salesforce に新しいタスクが作成されます。
注意: 指定したポート (300) は、ngrok URLを作成するときに使用したのと同じポートです。
セールスフォースへの着信記録
セールスフォースへの着信記録