Bit of background. Up until now it's been my understanding that a Peripheral Variable (PV) can only hold 40 characters. If you were to pass in a value >40 characters it would simply truncate the value which is all well and good. It turns out however that the PV in memory actually accepts >40 and the truncation only affects what is written to the DB. So for example, if I stuff Variable1 with 200 z's I of course would expect Var1 in RCD to be 40 z's. However, if you run a len(Call.PeripheralVariable1) in your script you will see that the length is in fact 200!
So why does this matter. Well in my case this actually caused ICM Gateway requests to fail anytime a PV had been set to something >40 characters. ICM Gateway isn't prepared to handle this apparently and doesn't have error handling for it. I know what some of you are saying, "Don't stuff a value into a PV >40 and you won't have this problem". While I agree, in a complex environment using a multitude of variables, peripherals, etc it would be quite the task to do this. In fact, the only way to really to this would be to code all Set Variable nodes that are setting PV's to only push the leftmost 40 characters into the PV. So for example, let's say you have an ECC called TEST that has 200 z's. If you try to push that into Variable1 you will need to wrap the entire statement so that it only pushes 40 characters..... left(TEST,40) for example.
Although a stretch I could also see this having the potential for causing math issues, amongst other things, if the data beyond the 40 character limitation is being used by the router which it seems to be. Interesting stuff to say the least.
ICM Gateway means a parent-child environment or Application Gateway this case?
Is there a reason why you need to use the "original" PeripheralVariables? I mean, why can't you just use ECC's - they appear to be unlimited as they're NUL terminated, and the Termination_Call_Variable also accepts up to 255 bytes compared to 40 bytes in Termination_Call_Detail.
In my case it's an ICM to ICM Gateway which exists in order for two distinct ICM systems to share information. It's configured on the requesting side as an Application Gateway with a type of ICM Gateway.
As for the reason, I'm not concerned with writing the data to a database. The concern is that router memory holds a different amount than what is specified for the variable. PV's apparently aren't truly 40 byte fields from the router perspective.I have no qualms at all with PV's only being 40 bytes in the reporting tables.
Hi, actually, I can't see no reason why a 127 byte (~ > 40 bytes) PV field cannot be transmitted over GED-145, the protocol allows it, the only constraint is that the length of the PV field length can only be something that can be stored as a byte value. It must be some extra restriction on the ICM to ICM gateway communication protocol I guess.
Probably so. I'm tracking the ICM Gateway specific portion of this in the following thread. Good to know on the lack of restriction in GED-145 though. It actually brings up a good point. If a 3rd party application talking ged 145 sends something >40 characters, does it get truncated when it reaches teh ICM or is that entire value now in router memory? If the latter, this makes it even more difficult to workaround this issue since the guilty party could be a 3rd party IVR in some cases.
From a pure ICM perspective with no ICM Gateway, I'm still curious as to whether or not the storage of PV's in router memory >40 bytes is an "undocumented feature".
I will give it a try, you made me curious.
What I'll do is just try to exchange a long string between ICM and an Application Gateway node, I'll let you know the result.
actually, GED-145 was able to transmit 80 bytes long strings, tested with both 7.2.7 and 8.0.3 (sorry, I don't have a 7.5.x ICM lab). Both directions.
So the answer is actually: yes, you can assign a string longer than 40 bytes to a PeripheralVariable[1..10] and the Router will be able to transmit it using the Application Gateway.
Did you try this on an Application Gateway with the type set to 'Remote ICM'. This is the type of App Gateway that I'm failing on. It is possible that the erroring out occurs on the remote icm NIC also.
Hi, no, unfortunately, I cannot do that - actually, I am able to configure almost everything but when I try to use an Application Gateway of which type is Remote ICM in an ICM script I cannot even choose it. Sorry about that.
Actually, did you try to talk to Cisco?