Twilio 客户端 CallSid 在 JavaScript 中发生变化

Twilio Client CallSid Getting Changed in JavaScript

我使用 Twilio 客户端 JavaScript SDK 在 Salesforce 中实施了一个呼叫中心。我正在尝试将通话记录信息保存在 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>

在解决这个问题时回答我自己的问题。我为 Twilio.Device.connect 注册了一个函数,并在回调函数中检索了 CallSid。除此之外,我还更新了我的 click 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
});