Search code examples
rubysoapwsdlsoap-client

Get multiple values out of a SOAP hash in ruby


I have a SOAP response in ruby. I am trying to get two or more values out of it. I can successfully get the data I am looking for if there is only one instance, but if there is more than one I get the following error:

can't convert String into Integer (TypeError)

The code I am using is:

p activecall["GetActiveCallsResult"]["ShoreTelCallStateInfo"]["callInfo"].callID

And an example of the SOAP response is below. Any idea how I can parse through the different values when there are more than one? The two values I would like to get from the example below are 70342 and 68496.

<SOAP::Mapping::Object:0x..fdb7aa9f8 {http://www.ShoreTel.com/ProServices/SDK/Web}GetActiveCallsResult=#
<SOAP::Mapping::Object:0x..fdb7aa8d6 {http://www.ShoreTel.com/ProServices/SDK/Web}ShoreTelCallStateInfo=[#
    <SOAP::Mapping::Object:0x..fdb7aa796 {http://www.ShoreTel.com/ProServices/SDK/Web}callInfo=#
        <SOAP::Mapping::Object:0x..fdb7aa656 {http://www.ShoreTel.com/ProServices/SDK/Web}lineID="20837" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callID="68496" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}isExternal="true" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}isInbound="false" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callReason="None" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}connectedID="9+18012624550" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callerID="1955" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callerIDName="Joel Lewis" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}calledID="9+13852045017" 
            {http://www.ShoreTel.com/ProServices/SDK/Web}callParties=#
                <SOAP::Mapping::Object:0x..fdb7a7d98 {http://www.ShoreTel.com/ProServices/SDK/Web}CallPartyInfo=[#
                    <SOAP::Mapping::Object:0x..fdb7a7c94 {http://www.ShoreTel.com/ProServices/SDK/Web}partyNumber="1" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}partyType="Trunk" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}partyCCOID="1073742591" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkInfo=#
                            <SOAP::Mapping::Object:0x..fdb7a6e8e {http://www.ShoreTel.com/ProServices/SDK/Web}trunkType="DigitalPRI" 
                                {http://www.ShoreTel.com/ProServices/SDK/Web}trunkSwitch="5" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPort="21" 
                                {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPortName=" E-Link  (21)">>, #
                    <SOAP::Mapping::Object:0x..fdb7a569c {http://www.ShoreTel.com/ProServices/SDK/Web}partyNumber="2" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}partyType="Trunk" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}partyCCOID="1073742590" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkInfo=#
                            <SOAP::Mapping::Object:0x..fdb7a486e {http://www.ShoreTel.com/ProServices/SDK/Web}trunkType="DigitalPRI" 
                                {http://www.ShoreTel.com/ProServices/SDK/Web}trunkSwitch="5" 
                                {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPort="20" 
                                {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPortName=" E-Link  (20)">>]> 
                {http://www.ShoreTel.com/ProServices/SDK/Web}callUniqueID="3219803974" 
                {http://www.ShoreTel.com/ProServices/SDK/Web}callGUID="{00030000-E023-537E-3FD3-0010492377D9}"> 
                {http://www.ShoreTel.com/ProServices/SDK/Web}callState="Conferenced" 
                {http://www.ShoreTel.com/ProServices/SDK/Web}callStateDetail=#
                    <SOAP::Mapping::Object:0x..fdb7a20be> {http://www.ShoreTel.com/ProServices/SDK/Web}callProperties=#
                        <SOAP::Mapping::Object:0x..fdb7a1ce0 {http://www.ShoreTel.com/ProServices/SDK/Web}KeyValuePair=#
                            <SOAP::Mapping::Object:0x..fdb7a1bd2 {http://www.ShoreTel.com/ProServices/SDK/Web}propertyName="_ST_CONF_ROLE" 
                                {http://www.ShoreTel.com/ProServices/SDK/Web}propertyValue="CRL:1">>>, #
                    <SOAP::Mapping::Object:0x..fdb7a0a16 {http://www.ShoreTel.com/ProServices/SDK/Web}callInfo=#
                        <SOAP::Mapping::Object:0x..fdb7a08cc {http://www.ShoreTel.com/ProServices/SDK/Web}lineID="20837" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}callID="70342" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}isExternal="true" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}isInbound="false" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}callReason="None" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}connectedID="1955" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}connectedIDName="Joel Lewis" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}callerID="1955" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}callerIDName="Joel Lewis" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}calledID="9+13852045017" 
                            {http://www.ShoreTel.com/ProServices/SDK/Web}callParties=#
                                <SOAP::Mapping::Object:0x..fdb79dbc2 {http://www.ShoreTel.com/ProServices/SDK/Web}CallPartyInfo=#
                                    <SOAP::Mapping::Object:0x..fdb79daa0 {http://www.ShoreTel.com/ProServices/SDK/Web}partyNumber="1" 
                                        {http://www.ShoreTel.com/ProServices/SDK/Web}partyType="Trunk" 
                                        {http://www.ShoreTel.com/ProServices/SDK/Web}partyCCOID="1073742591" 
                                        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkInfo=#
                                    <SOAP::Mapping::Object:0x..fdb79cc90 {http://www.ShoreTel.com/ProServices/SDK/Web}trunkType="DigitalPRI" 
                                        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkSwitch="5" 
                                        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPort="21" 
                                        {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPortName=" E-Link  (21)">>> 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}callUniqueID="3219803974" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}callGUID="{00030000-E022-537E-3FD3-0010492377D9}"> 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}callState="Connected" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}callStateDetail="Active" 
                        {http://www.ShoreTel.com/ProServices/SDK/Web}callProperties=#
                            <SOAP::Mapping::Object:0x..fdb799e00 {http://www.ShoreTel.com/ProServices/SDK/Web}KeyValuePair=#
                                <SOAP::Mapping::Object:0x..fdb799cfc {http://www.ShoreTel.com/ProServices/SDK/Web}propertyName="_ST_CONF_ROLE" 
                                    {http://www.ShoreTel.com/ProServices/SDK/Web}propertyValue="CRL:1">>>, #
                        <SOAP::Mapping::Object:0x..fdb798e10 {http://www.ShoreTel.com/ProServices/SDK/Web}callInfo=#<SOAP::Mapping::Object:0x..fdb798c9e {http://www.ShoreTel.com/ProServices/SDK/Web}lineID="20837" {http://www.ShoreTel.com/ProServices/SDK/Web}callID="70777" {http://www.ShoreTel.com/ProServices/SDK/Web}isExternal="true" {http://www.ShoreTel.com/ProServices/SDK/Web}isInbound="false" {http://www.ShoreTel.com/ProServices/SDK/Web}callReason="None" {http://www.ShoreTel.com/ProServices/SDK/Web}connectedID="9+13852045017" {http://www.ShoreTel.com/ProServices/SDK/Web}callerID="1955" {http://www.ShoreTel.com/ProServices/SDK/Web}callerIDName="Joel Lewis" {http://www.ShoreTel.com/ProServices/SDK/Web}calledID="9+13852045017" {http://www.ShoreTel.com/ProServices/SDK/Web}callParties=#<SOAP::Mapping::Object:0x..fdb79641c {http://www.ShoreTel.com/ProServices/SDK/Web}CallPartyInfo=[#<SOAP::Mapping::Object:0x..fdb796318 {http://www.ShoreTel.com/ProServices/SDK/Web}partyNumber="1" {http://www.ShoreTel.com/ProServices/SDK/Web}partyType="Trunk" {http://www.ShoreTel.com/ProServices/SDK/Web}partyCCOID="1073742591" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkInfo=#<SOAP::Mapping::Object:0x..fdb795558 {http://www.ShoreTel.com/ProServices/SDK/Web}trunkType="DigitalPRI" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkSwitch="5" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPort="21" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPortName=" E-Link  (21)">>, #<SOAP::Mapping::Object:0x..fdb793d7a {http://www.ShoreTel.com/ProServices/SDK/Web}partyNumber="2" {http://www.ShoreTel.com/ProServices/SDK/Web}partyType="Trunk" {http://www.ShoreTel.com/ProServices/SDK/Web}partyCCOID="1073742590" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkInfo=#<SOAP::Mapping::Object:0x..fdb792f4c {http://www.ShoreTel.com/ProServices/SDK/Web}trunkType="DigitalPRI" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkSwitch="5" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPort="20" {http://www.ShoreTel.com/ProServices/SDK/Web}trunkPortName=" E-Link  (20)">>]> {http://www.ShoreTel.com/ProServices/SDK/Web}callUniqueID="3219803974" {http://www.ShoreTel.com/ProServices/SDK/Web}callGUID="{00030000-E022-537E-3FD3-0010492377D9}"> {http://www.ShoreTel.com/ProServices/SDK/Web}callState="Conferenced" {http://www.ShoreTel.com/ProServices/SDK/Web}callStateDetail=#<SOAP::Mapping::Object:0x..fdb790706> {http://www.ShoreTel.com/ProServices/SDK/Web}callProperties=#<SOAP::Mapping::Object:0x..fdb79030a {http://www.ShoreTel.com/ProServices/SDK/Web}KeyValuePair=#<SOAP::Mapping::Object:0x..fdb7901c0 {http://www.ShoreTel.com/ProServices/SDK/Web}propertyName="_ST_CONF_ROLE" {http://www.ShoreTel.com/ProServices/SDK/Web}propertyValue="CRL:1">>>]>>

Solution

  • From the error message it looks like you have an array when there is more than one result as it is looking for an Integer rather than String in the []s

    You will need to loop through the array and pull out the elements you want.

    I would guess it's ShoreTelCallStateInfo that is the array but it's not entirely clear to me from the data dump as it appears to be truncated in the middle.

    Something like:

    activecall["GetActiveCallsResult"]["ShoreTelCallStateInfo"].each do |info|
      p info["callInfo"].callID  
    end