Legacy Dev Forum Posts

 View Only

Sign Up

TranslationMap Nested arrays

  • 1.  TranslationMap Nested arrays

    Posted 06-05-2025 18:46

    SwRuiz | 2024-06-05 14:07:53 UTC | #1

    Good afternoon, I am working with Pure Cloud's /api/v2/analytics/conversations/details/query and I am receiving a Json like the one attached below:

    {
      "conversations": [
        {
          "conversationId": "1d35e375-d871-4ca0-83fc-d32936e20573",
          "conversationStart": "2024-05-31T22:21:45.266Z",
          "originatingDirection": "outbound",
          "participants": [
            {
              "participantId": "56ab1482-791c-4bd1-843e-96587b062f14",
              "purpose": "agent",
              "userId": "cfaa49e6-7b89-4f20-aa70-1370448be7d5",
              "sessions": [
                {
                  "ani": "sip:61dc7bef83074c1d249c63c3@localhost",
                  "segments": [
                    {
                      "conference": false,
                      "queueId": "dc3146fb-2622-43c5-b59d-20f7a9b9ca89",
                      "segmentEnd": "2024-05-31T22:21:56.241Z",
                      "segmentStart": "2024-05-31T22:21:45.266Z",
                      "segmentType": "contacting"
                    },
                    {
                      "conference": false,
                      "queueId": "dc3146fb-2622-43c5-b59d-20f7a9b9ca89",
                      "segmentEnd": "2024-05-31T22:22:05.104Z",
                      "segmentStart": "2024-05-31T22:21:56.241Z",
                      "segmentType": "dialing"
                    },
                    {
                      "conference": false,
                      "disconnectType": "transfer",
                      "queueId": "dc3146fb-2622-43c5-b59d-20f7a9b9ca89",
                      "segmentEnd": "2024-05-31T22:23:38.581Z",
                      "segmentStart": "2024-05-31T22:22:05.104Z",
                      "segmentType": "interact"
                    },
                    {
                      "conference": false,
                      "disconnectType": "transfer",
                      "errorCode": "error.ininedgecontrol.session.inactive",
                      "queueId": "dc3146fb-2622-43c5-b59d-20f7a9b9ca89",
                      "segmentEnd": "2024-05-31T22:23:47.889Z",
                      "segmentStart": "2024-05-31T22:23:38.581Z",
                      "segmentType": "wrapup",
                      "wrapUpCode": "09ebe4af-963a-4891-853a-10d9b6d9c864"
                    }
                  ]
                }
              ]
            },
            {
              "participantId": "bf340b66-25fb-4d34-b00c-9e60b942479a",
              "purpose": "agent",
              "userId": "307138ab-94a7-4718-9b39-9801d8bcc96a",
              "sessions": [
                {
                  "ani": "sip:61dc7bef83074c1d249c63c3@localhost",
                  "segments": [
                    {
                      "conference": false,
                      "disconnectType": "client",
                      "queueId": "0b2d8799-5d36-4cd5-bc6f-f865236faad4",
                      "segmentEnd": "2024-05-31T22:24:03.747Z",
                      "segmentStart": "2024-05-31T22:23:55.261Z",
                      "segmentType": "alert"
                    }
                  ]
                }
              ]
            },
            {
              "participantId": "b56d7a4a-7c70-4636-a5a9-e5ea38570d80",
              "purpose": "agent",
              "userId": "cfaa49e6-7b89-4f20-aa70-1370448be7d5",
              "sessions": [
                {
                  "ani": "sip:61dc7bef83074c1d249c63c3@localhost",
                  "direction": "inbound",
                  "dnis": "tel:9980728252",
                  "edgeId": "f5efbfaa-1369-4917-a420-b327bca71749",
                  "mediaType": "voice",
                  "peerId": "72f88961-51df-4755-a7b0-61e739272fa9",
                  "protocolCallId": "700750f6-0853-49ca-bed6-43490c6666c6",
                  "provider": "Edge",
                  "remote": "Llamada saliente",
                  "selectedAgentId": "cfaa49e6-7b89-4f20-aa70-1370448be7d5",
                  "sessionDnis": "sip:61dc7bef83074c1d249c63c3@localhost",
                  "sessionId": "e728ec6d-fda7-4330-aea2-d2378871d5a1",
                  "usedRouting": "Standard",
                  "segments": [
                    {
                      "conference": false,
                      "queueId": "0b2d8799-5d36-4cd5-bc6f-f865236faad4",
                      "segmentEnd": "2024-05-31T22:24:13.714Z",
                      "segmentStart": "2024-05-31T22:24:13.661Z",
                      "segmentType": "alert"
                    },
                    {
                      "conference": false,
                      "disconnectType": "client",
                      "queueId": "0b2d8799-5d36-4cd5-bc6f-f865236faad4",
                      "segmentEnd": "2024-05-31T22:25:17.634Z",
                      "segmentStart": "2024-05-31T22:24:13.714Z",
                      "segmentType": "interact"
                    },
                    {
                      "conference": false,
                      "disconnectType": "client",
                      "queueId": "0b2d8799-5d36-4cd5-bc6f-f865236faad4",
                      "segmentEnd": "2024-05-31T22:25:47.634Z",
                      "segmentStart": "2024-05-31T22:25:17.634Z",
                      "segmentType": "wrapup",
                      "wrapUpCode": "ININ-WRAP-UP-TIMEOUT"
                    }
                  ]
                }
              ]
            }
          ]
        },
      ],
      "totalHits": 20
    }

    I am using the following TranslationMap:

    {
      "translationMap": {
        "conversationStart": "$.conversations[1].conversationStart",
        "wrapUpCode0": "$.conversations[1].participants[?(@.purpose == 'agent')].sessions[0].segments[?(@.segmentType == 'wrapup' && @.disconnectType == 'transfer')].wrapUpCode",
        "wrapUpCode1": "$.conversations[1].participants[?(@.purpose == 'agent')].sessions[0].segments[?(@.segmentType == 'wrapup' && @.disconnectType != 'transfer')].wrapUpCode",
        "mediaType": "$.conversations[1].participants[?(@.purpose == 'customer')].sessions[0].mediaType",
        "originatingDirection": "$.conversations[1].originatingDirection",
        "wrapUpNote0": "$.conversations[1].participants[?(@.purpose == 'agent')].sessions[0].segments[?(@.segmentType == 'wrapup' && @.disconnectType == 'transfer')].wrapUpNote",
        "wrapUpNote1": "$.conversations[1].participants[?(@.purpose == 'agent')].sessions[0].segments[?(@.segmentType == 'wrapup' && @.disconnectType != 'transfer')].wrapUpNote",
        "userId0": "$.conversations[1].participants[?(@.purpose == 'agent' && @.sessions[0].segments[?(@.segmentType == 'wrapup')].disconnectType == 'transfer')].userId",
        "userId1": "$.conversations[1].participants[?(@.purpose == 'agent' && @.sessions[0].segments[?(@.segmentType == 'wrapup')].disconnectType != 'transfer')].userId"
      },
      "translationMapDefaults": {},
      "successTemplate": "{\"conversationStart\": ${conversationStart}, \"mediaType\": ${successTemplateUtils.firstFromArray(\"${mediaType}\", \"$esc.quote$esc.quote\")}, \"originatingDirection\": ${originatingDirection}, \"userId0\": ${successTemplateUtils.firstFromArray(\"${userId0}\", \"$esc.quote$esc.quote\")}, \"userId1\": ${successTemplateUtils.firstFromArray(\"${userId1}\", \"$esc.quote$esc.quote\")}, \"wrapUpCode0\": ${successTemplateUtils.firstFromArray(\"${wrapUpCode0}\", \"$esc.quote$esc.quote\")}, \"wrapUpNote0\": ${successTemplateUtils.firstFromArray(\"${wrapUpNote0}\", \"$esc.quote$esc.quote\")}, \"wrapUpCode1\": ${successTemplateUtils.firstFromArray(\"${wrapUpCode1}\", \"$esc.quote$esc.quote\")}, \"wrapUpNote1\": ${successTemplateUtils.firstFromArray(\"${wrapUpNote1}\", \"$esc.quote$esc.quote\")}}"
    }

    My objective is to obtain the UserId and the WrapUp of the participant who made a transfer (userId0 and wrapUpCode0) and the same of the one who did not make a transfer (userid1 and wrapUpCode1); I get the wrapUp without problem, but the userId0 does not return anything, despite using almost the same filter logic.

    userId0 = userId1 = cfaa49e6-7b89-4f20-aa70-1370448be7d5 wrapUpCode0 = 09ebe4af-963a-4891-853a-10d9b6d9c864 wrapUpCode1 = ININ-WRAP-UP-TIMEOUT

    Could you help me identify my mistake.

    Thank you very much for your kind answer.


    Jason_Mathison | 2024-06-05 23:28:21 UTC | #2

    I spent a bunch of time trying to figure this out, and finally pulled in a coworker who finally figured out the problem.

    So why doesn't this work?

        "userId1": "$.conversations[1].participants[?(@.purpose == 'agent' && @.sessions[0].segments[?(@.segmentType == 'wrapup')].disconnectType != 'transfer')].userId"

    It is because this

    @.sessions[0].segments[?(@.segmentType == 'wrapup')].disconnectType 

    has a filter in it [?(... )]. Any time you use a filter, you could any number of results, so it always returns an array. In this case it Is going to return an array of disconnectType values. So something like [], or ['transfer'], or ['transfer', 'hold'], none of which is going to exactly match 'transfer'. The solution is to replace the == with

    contains 'transfer'

    which will look for one of the entries in the array to be "transfer", and should get you working. Kudos for solving this go to @Tyler_Bath I am just the messenger.

    --Jason


    system | 2024-07-06 23:28:33 UTC | #3

    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: 26593