Twilio Client CallSid меняется в JavaScript - PullRequest
0 голосов
/ 23 ноября 2018

Я реализовал колл-центр в Salesforce с помощью клиентского пакета SDK JavaScript Twilio.Я пытаюсь сохранить информацию о записи вызова в Salesforce, и я использую connection.parameters.CallSid, чтобы определить правильную запись, когда запись вызывает обратный вызов.Однако мой CallSid на стороне клиента автоматически меняется иногда на другой формат, и, следовательно, функция обратного вызова записи не может найти конечную запись Salesforce, чтобы обновить ее с помощью RecordingUrl.Кто-нибудь испытал это раньше или оцените любые рекомендации.

Ниже приведен мой код JavaScript.Если быть более точным, в функции startCall console.log правильно выведите CallSid, ​​но при переходе к функции saveLog он имеет другое значение в другом формате и, следовательно, сохраненная запись имеет неправильное значение.

<script type="text/javascript">
    Twilio.Device.setup("{! token }");
    var callerSid;  //  hold the Twilio generated CallSid unique to this call
    var parentId;   //  hold the parent record being called in order to associate as the parent of task being logged for the call
    var newTaskId;  // hold the id of newly created task

    //  function to fire when click 2 dial executes
    var startCall = function (payload) {
        sforce.opencti.setSoftphonePanelVisibility({visible: true});  //pop up CTI softphone
        parentId = payload.recordId;    //  the record that the phone number being called belongs to
        var cleanednumber = cleanFormatting(payload.number);             
        params = {"PhoneNumber": cleanednumber};
        var connection = Twilio.Device.connect(params);
        callerSid = connection.parameters;  //  track the unique Twilio CallSid
        console.log('clk2dial : ', callerSid.CallSid); **// here it logs correcly as CAc57d05994cd69498e0353a5f4b07f2dc**
        setTimeout(function(){
            saveLog();  //  save the call information in a Task record
            }, 2000
        );
    };

    //OpenCTI!!
    sforce.opencti.enableClickToDial();
    sforce.opencti.onClickToDial({listener : startCall});   //  click 2 dial           

    function cleanFormatting(number) { 
        //changes a SFDC formatted US number, which would be 415-555-1212  into a twilio understanble number 4155551212      
        return number.replace(' ','').replace('-','').replace('(','').replace(')','').replace('+','');
    }

    //  save the call information in a Task record
    function saveLog() {
        var keyPrefix;
        var taskToSave;
        console.log('callerSid.CallSid : ', callerSid.CallSid); **// surprisingly here it logs as TJSce253eb4-c2a0-47f3-957f-8178e95162aa**
        if(parentId != null) {
            keyPrefix = parentId.slice(0,3);
        }
        if(keyPrefix != null && keyPrefix == '003') {
            taskToSave = {WhoId:parentId, Type: "Call", CallObject: callerSid.CallSid, entityApiName: "Task", Subject: "Call log"};
        } else {
            taskToSave = {WhatId:parentId, Type: "Call", CallObject: callerSid.CallSid, entityApiName: "Task", Subject: "Call log"};   
        }

        sforce.opencti.saveLog({value:taskToSave, callback: saveLogCallBack});        

    }

    //  call back function for saving the call information in a Task record
    var saveLogCallBack = function(response) {
        if(response.success) {
            newTaskId = response.returnValue.recordId;
            console.log('save success! : ', newTaskId);
        } else {
            console.error('Error saving : ', response.errors);   
        }
    }

    </script>

1 Ответ

0 голосов
/ 25 ноября 2018

Отвечая на мой собственный вопрос, как я прошел через это.Я зарегистрировал функцию для Twilio.Device.connect и в функции обратного вызова получил CallSid.Наряду с этим я обновил свою функцию набора номера клика 2 так же, как показано ниже.Однако я не смог найти этот подход в документации Twilio, и любые комментарии приветствуются.

//  function to fire when click 2 dial executes
var startCall = function (payload) {
    sforce.opencti.setSoftphonePanelVisibility({visible: true});  //pop up CTI softphone
    parentId = payload.recordId;    //  the record that the phone number being called belongs to

    var cleanednumber = cleanFormatting(payload.number);             
    params = {"PhoneNumber": cleanednumber};
    Twilio.Device.connect(params);
};

//OpenCTI!!
sforce.opencti.enableClickToDial();
sforce.opencti.onClickToDial({listener : startCall});   //  click 2 dial        

// registered a function for Twilio Device connect
Twilio.Device.connect(function(response) {
    callSid = response.parameters;  //  track the unique Twilio CallSid
    // nothing change in save function so not posting again
    saveLog();  //  save the call information in a Task record
});
...