Tayyab
Tayyab

Reputation: 349

Multiple Validation Errors Aws SDK

I am working on lambda function and creating a method for AWS-SDK historical metric report using node, js and I am getting the following errors. Have look at a SS of error enter image description here

here is my code

function getKeyByValue(object, value) { 
    return Object.keys(object).find(key =>  
            object[key] === value); 
} 
exports.handler = async (event) => {
    const AWS = require('aws-sdk');
    var connect = new AWS.Connect({ apiVersion: '2017-08-08' });
    let queueARN = event.queueARN || null;
    const connectInstanceId = process.env.instanceID;
    let flag =0, nextToken = null;
    let queueARNsObject = {}, queueARNsArray=[], queueTypeObject={};
    do{
        let listQueuesParams = {
            InstanceId: connectInstanceId, /* required */
            QueueTypes: [
                "STANDARD",
            ],
            NextToken: nextToken,
        };
        let listQueuesPromise = connect.listQueues(listQueuesParams).promise();
        listQueuesResult = await listQueuesPromise;
        // console.log(listQueuesResult);
        listQueuesResult.QueueSummaryList.forEach(queue => {
            if(queueARN != null){
                if (queue.Arn == queueARN){
                    queueARNsArray = [queue.Arn];  
                    queueARNsObject[queue.Name]= queue.Arn;
                    queueTypeObject[queue.QueueType]= queue.Arn;
                    flag = 1;
                    return;
                }
            }else{
                queueARNsObject[queue.Name]= queue.Arn;
                queueTypeObject[queue.QueueType]= queue.Arn;
                queueARNsArray.push(queue.Arn);
                nextToken = listQueuesResult.NextToken;

            }
        });
        
    }while (flag=0 && nextToken != null);
    const metricsList = [
        {
            Name : 'CONTACTS_HANDLED',
            Unit : 'COUNT',
            Statistic : 'SUM'
        },
        {
            Name : 'CONTACTS_ABANDONED',
            Unit : 'COUNT',
            Statistic : 'SUM'
        },
      ];
    // Metrics params
    var getMetricParams = {
        InstanceId: connectInstanceId,
        StartTime: 1592854200,
        EndTime: 1592855700,
        Filters: {
            Channels: ["VOICE"],
            Queues: queueARNsArray
        },
        CurrentMetrics: metricsList,
        Groupings: ["QUEUE"]
    };
    // get current metrics by queues
    var getMetricsPromise = connect
        .getMetricData(getMetricParams)
        .promise();
    var getMetricsResult = await getMetricsPromise;
    // console.log("current |||||||| 1 metrics:", JSON.stringify(getCurrentMetricsResult));
    let queueMetricsArray = [];
    if(getMetricsResult.MetricResults.length){
        getMetricsResult.MetricResults.forEach(queue => {
            let queueMetrics = {
                "Queue_Name" : getKeyByValue(queueARNsObject ,queue.Dimensions.Queue.Arn),
                "CallsHandled": queue.Collections[0].Value , 
                "CallsAbanoded": queue.Collections[1].Value , 
            }
            queueMetricsArray.push(queueMetrics);
            console.log("TYPE||||", getKeyByValue(queueTypeObject ,queue.Dimensions.Queue.Arn))
        });
    }else{
        keys.forEach(key => {
            let queueMetrics = {
                "Queue_Name" : getKeyByValue(event ,queue.Dimensions.Queue.Arn),
                "CONTACTS_HANDLED": 0,
                "CONTACTS_ABANDONED": 0
            }
            queueMetricsArray.push(queueMetrics);
        })
    }

    const response = {
        responseCode: 200,
        metricResults: queueMetricsArray
    };
    return response;

};

I don't have any idea what this is an error about. if anyone of you knows please help me to fix it Thanks. I don't know where the Missing required key 'HistoricalMetrics' in params" I've checked the params but I didn't get anything.

Upvotes: 0

Views: 631

Answers (1)

Dennis Traub
Dennis Traub

Reputation: 51664

The error message relates to this part of your code:

// Metrics params
var getMetricParams = {
    InstanceId: connectInstanceId,
    StartTime: 1592854200,
    EndTime: 1592855700,
    Filters: {
        Channels: ["VOICE"],
        Queues: queueARNsArray
    },
    CurrentMetrics: metricsList,
    Groupings: ["QUEUE"]
};

The attribute CurrentMetrics cannot be used here and the required attribute HistoricMetrics is missing.

Please have a look at the GetMetricData API reference for more information.

Upvotes: 1

Related Questions