如何在twilio函数调用节点库中获取可用的工作人员计数?

时间:2019-07-29 19:46:44

标签: twilio twilio-functions

我希望调用twilio函数并获取可用工作程序的数量。

我觉得这可能与TaskQueues和可用的Matching Workers有关?

我提出了以下内容。但是,当用户与任务进行交互时,仍将其列为可用用户,这意味着此操作不一定有效。

List<byte[]> memoryUsage = new List<byte[]>();
while (true)
{
    try
    {
        memoryUsage.Add(new byte[1024]);
    }
    catch (OutOfMemoryException)
    {
        throw;
    }
}

};

1 个答案:

答案 0 :(得分:0)

我知道这有点晚了,但这是我在 twilio 函数中使用的代码块来做到这一点。我们从工作室流程中调用该函数并使用结果来决定我是否要将呼叫路由到语音邮件或播放一些 IVR 选项来选择他们应该放入的队列。要使用它,您可以将可选技能传递给进一步过滤代理。我们抓住所有可用的员工,然后筛选出具有所需技能的员工。

然后您可以使用它并检查是否有任何可用的代理也分配给了任务,然后将它们从计数中删除。

const fetch = require("node-fetch");

exports.handler = function(context, event, callback) {
    let response = new Twilio.Response();

    // Set the status code to 200 OK
    response.setStatusCode(200);

    // Set the Content-Type Header
    response.appendHeader('Access-Control-Allow-Origin', '*');
    response.appendHeader('Access-Control-Allow-Methods', 'OPTIONS, POST, GET');
    response.appendHeader('Access-Control-Allow-Headers', 'Content-Type');
    response.appendHeader('Content-Type', 'application/json');

    let body = {
        TotalAvailable: 0
    };
    
    let client = context.getTwilioClient();
    client.taskrouter.workspaces(context.WorkspaceSid)
        .workers
        .list({
            available: 'true',
            limit: 50
        })
        .then((workers) => {
            let agents = [];
            let i = 0;
            if(workers){
                for(i = 0; i < workers.length; i++){
                    let worker = workers[i];
                    let item = {};
                    let attributes = JSON.parse(worker.attributes);

                    if(attributes && attributes.routing && attributes.routing.skills && attributes.routing.skills.length > 0){
                        item.skills = attributes.routing.skills;
                        item.nid = attributes.nid;
                        item.first_name = attributes.first_name;
                        item.last_name = attributes.last_name;
                        
                        if(event.skill){
                            if(item.skills.includes(event.skill)){

                                // TODO: filter here 

                                agents.push(item);
                            }    
                        }else{
                            agents.push(item);
                        }
                    }
                }
            }
            body.TotalAvailable = agents.length;
            body.Agents = agents;

            response.setBody(body);
            callback(null, response);
        })
        .catch((ex) => {
            body.error = true;
            body.message = ex;
            response.setBody(body);
            callback(null, response);
        });
};