robm | 2024-01-26 05:17:31 UTC | #1
Hi,
We use a Data Action to retrieve the amount of transfers that a conversation had. This value we show in the agent script so that the agent can see that the call has been transferred.
Input Contract
{
"title": "input",
"type": "object",
"properties": {
"conversationId": {
"type": "string"
}
},
"additionalProperties": true
}
Output Contract
{
"title": "output",
"type": "object",
"properties": {
"nTransferred": {
"type": [
"integer",
"null"
]
}
},
"additionalProperties": true
}
Request
{
"requestUrlTemplate": "/api/v2/analytics/conversations/${input.conversationId}/details",
"requestType": "GET",
"headers": {},
"requestTemplate": "${input.rawRequest}"
}
Response
{
"translationMap": {
"nTransferredArrayAsStr": "$.participants[*].sessions[*].metrics[?(@.name=='nTransferred')].value"
},
"translationMapDefaults": {
"nTransferredArrayAsStr": "[]"
},
"successTemplate": "#set ($nTransferredArray = $nTransferredArrayAsStr.replace(\"[\", \"\").replace(\"]\", \"\").replace(\" \", \"\").split(\",\")) {\"nTransferred\":$math.getTotal(${nTransferredArray})}"
}
Now if there have been some transfers it works like a charm:
But on the first transfer the value is not there so I receive an error, I have been searching and trying but cannot seem to find the solution.
Error message: 10. Apply output transformation: Transform failed to process result using 'successTemplate' template due to error:'Reference $math.getTotal(${nTransferredArray}) evaluated to null when attempting to render at successTemplate[line 1, column 131]' Template:'#set ($nTransferredArray = $nTransferredArrayAsStr.replace("[", "").replace("]", "").replace(" ", "").split(",")) {"nTransferred":$math.getTotal(${nTransferredArray})}'.
Is there anyone that has a suggestion? Thanks in advance!
BR, Rob
Jason_Mathison | 2024-01-26 05:15:56 UTC | #2
I am guessing that the issue is that you are asking $math.getTotal to add up the values in an empty array, and it isn't happy about that. The first thing I would try is to give it a value to work with
"translationMapDefaults": { "nTransferredArrayAsStr": "[0]" },
If that doesn't work, please post an example of a working and non working response from analytics so people on the forum can have something to experiment with.
--Jason
robm | 2024-01-26 08:19:27 UTC | #3
Hi Jason,
Thanks for taking the time to have a look at my question.
I did try "nTransferredArrayAsStr": "[0]" also but that doesn't work. I was experimenting with $nTransferredArrayAsStr.isEmpty() or #if( "!$nTransferredArrayAsStr" == "" ) but I can't get the syntax to work.
The problem is that for a conversation that has been transferred there is one or more nTransferred values in the metrics like in the example below.
"metrics": [ { "emitDate": "2024-01-24T09:45:03.274Z", "name": "nOutbound", "value": 1 }, { "emitDate": "2024-01-24T09:45:05.139Z", "name": "tContacting", "value": 1865 }, { "emitDate": "2024-01-24T09:45:08.576Z", "name": "tDialing", "value": 3437 }, { "emitDate": "2024-01-24T09:49:31.769Z", "name": "nBlindTransferred", "value": 1 }, { "emitDate": "2024-01-24T09:49:31.769Z", "name": "nTransferred", "value": 1 },
In the case that the calls hasn't been transferred this value is not in the result JSON of the request so the string / array is empty (not there actually).
Thanks.
BR, Rob
robm | 2024-02-01 10:09:29 UTC | #4
Hi Jason,
Is there a way to state if $nTransferredArrayAsStr is empty or null we give it a value 0 or we give the variable $nTransferredArray the value 0 in the success template?
I have tried several options and read multiple sites and documents but cannot find the correct syntax.
BR, Rob
Jerome.Saint-Marc | 2024-02-01 13:44:37 UTC | #5
Hello,
The following appears to work for me (just tried it):
{
"translationMap": {
"nTransferredArrayAsStr": "$.participants[*].sessions[*].metrics[?(@.name=='nTransferred')].value"
},
"translationMapDefaults": {
"nTransferredArrayAsStr": "[]"
},
"successTemplate": "#set ($nTransferredArray = $nTransferredArrayAsStr.replace(\"[\", \"\").replace(\"]\", \"\").replace(\" \", \"\").split(\",\")) {\"nTransferred\": #if( $nTransferredArray.get(0) == '' )0#else$math.getTotal(${nTransferredArray})#end }"
}
Using split to get the nTransferredArray: as the string used in split function is empty, it means the output will be an array with one element = empty string (just like with a scripting language). So I have a added a velocity test (if/else/end) to check if the first element is empty string, and if so, use 0 as output value.
Regards,
robm | 2024-02-01 14:20:23 UTC | #6
Jerome.Saint-Marc, post:5, topic:24282
{
"translationMap": {
"nTransferredArrayAsStr": "$.participants[*].sessions[*].metrics[?(@.name=='nTransferred')].value"
},
"translationMapDefaults": {
"nTransferredArrayAsStr": "[]"
},
"successTemplate": "#set ($nTransferredArray = $nTransferredArrayAsStr.replace(\"[\", \"\").replace(\"]\", \"\").replace(\" \", \"\").split(\",\")) {\"nTransferred\": #if( $nTransferredArray.get(0) == '' )0#else$math.getTotal(${nTransferredArray})#end }"
}
Hi Jerome,
You rock! It now works as should thank you very very much, both for the solution and for the lesson in response writing :slight_smile:
Have a great evening! BR, Rob
system | 2024-03-03 14:21:04 UTC | #7
This topic was automatically closed 31 days after the last reply. New replies are no longer allowed.
This post was migrated from the old Developer Forum.
ref: 24282