用于解析数组的 Twilio Javascript 函数

问题描述

我有一个 twilio Javascript 函数,它会在有人拨打相关的工作室流程电话后立即在我的工作室流程中执行。此函数应该检查当前是否有正在进行的电话会议并返回“真”或“假”,以便我可以在 if/else 小部件中使用该字符串来连接呼叫者或发起新会议.

    // This is your new function. To start,set the name and path on the left.

exports.handler = function(context,event,callback) {
  
    var XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest;
    var xhr = new XMLHttpRequest();
    xhr.withCredentials = true;
    
xhr.open("GET","https://api.twilio.com/2010-04-01/Accounts/myAccountSid/Conferences.json?FriendlyName=mySidDocumentName");
xhr.setRequestHeader("Authorization","Basic myAuthString");
xhr.send();

    xhr.addEventListener("readystatechange",function() {
        if(this.readyState == 4) {
            console.log(JSON.stringify(xhr.responseText));
            var jsonResponse = JSON.parse(xhr.responseText);
            var arrayLength = Object.keys(jsonResponse.Conferences[jsonResponse]).length;
            if (arrayLength > 0) {
              var isConferenceOngoing = "True"
            } else {
              var isConferenceOngoing = "False"
            }
        }
        return callback(null,isConferenceOngoing);
    });
};

响应中我感兴趣的“会议”键是一个数组,这会导致问题,因为 Twilio 无法解析工作室流程中的数组,因此必须在函数调用中完成:{ {3}}“请注意,尽管数组是有效的 JSON,但如果您的请求返回对象数组,则不会对其进行解析。”

所以我只需要检查会议数组是否为空,如果是,则返回“False”到我的工作室流程,或者是否有活动会议(即数组长度 > 0)然后返回“真的”。返回“True”或“False”将允许我在我的工作室流程中执行一个 if/else 小部件,以将呼叫者连接到现有会议或开始新的电话会议。

当没有活动的电话会议时,Postman 中的响应如下所示(注意会议数组为空): https://www.twilio.com/docs/studio/widget-library/http-request

我对 Javascript 的了解几乎为零,但我认为我已经接近了。

解决方法

更新:添加了基于注释的 async/await 函数。

exports.handler = function(context,event,callback) {
      
const twilioClient = context.getTwilioClient();

let responseObject = twilioClient.conferences
      .list({status: 'in-progress'})
 
var isConferenceOngoing = null     
  
async function setConferenceVariable() {  
      if (responseObject.Length > 0)
      {
            isConferenceOngoing = "True"
      } else {
            isConferenceOngoing = "False"
      }
}

async function getConferenceDetails() {
     await setConferenceVariable();
     return callback(null,isConferenceOngoing);
}
getConferenceDetails()
};

最新更新:下面更简单的方法。

exports.handler = function(context,callback) {
    const twilioClient = context.getTwilioClient();
    twilioClient.conferences
        .list({status: 'in-progress'})
        .then(conferences => { callback(null,!conferences.length)})
};
,

最新更新看起来好多了@dylan。我在 false 时没有看到返回值,所以这样做了:

exports.handler = function(context,callback) {
    const twilioClient = context.getTwilioClient();
    twilioClient.conferences
        .list({status: 'in-progress'})
        .then(conferences => callback(null,{result: !conferences.length}))
        .catch(err => callback(err));
};