Personally, I would avoid using Data Tables for this. There is a reason you don't see a write to table operation! They are intended to be efficient read only lookup tables.
As I see it, using a Data Table to store counters in this way is not scalable, for at least two, possibly three, reasons...
- You run the risk of hitting API Rate Limits if your call center is busy.
- You run the risk of what are known as "race" conditions. Let me explain. Let us assume that you have a value, stored in a Data Table, which currently has the value 1, and which your flow will increment. Two calls (A & B) come in if VERY quick succession. Call A retrieves the current value (1), increments it and then calls the API to write the new value (2) back. However Call B retrieves the value before the write happens, so it also gets a current value of 1, increments it and then calls the API to write the new value (also 2) back. So afterwards, the value in the Data Table is 2, whereas it should be 3. This will only get worse as load increases.
- (Possibly, depending on the internal architecture of Genesys Cloud, so take this as a theory, not a fact....) Genesys Cloud, as we all know, runs in AWS, which means the Microservices are spread across multiple servers in an Amazon Datacenter. Additionally, multiple instances of each Microservice can be spun up, depending on load. Since Data Table are meant to be efficient, Read-Only lookups, it is likely they are kept in memory and synchronized as necessary. When updating periodically, latency in those updates of a few seconds won't be noticeable, but in this instance (again, under load) I can foresee serious sync issues being possible. Whether that's old (outdated) values being served up, to different instances reading the tables, or even writes "clashing" between instances that run separately, it's a risk that I don't think is worth taking.
Remember, Genesys Cloud isn't like a Prem solution (such as PureConnect) which runs on a single server that can have shared memory locations (Global Variables, Accumulators etc.) If you can, use a stochastic approach (either use a random number generator, or base the decisions on something like the last digit of the time, in milliseconds) or create an external storage location with a REST API on it that you can access to store these values.
Just my 10 cents!
------------------------------
Paul Simpson
Eventus Solutions Group
------------------------------
Original Message:
Sent: 01-29-2021 01:13
From: Reginald Sheraton
Subject: Route a call percentage ?
Good Day,
just need some clarity on the below as i don't see any option to write data back into Data Table, only to get Data, do i use a Data Action?
If your dispersion needs to be more exact, you could create a count function that updated a value in a data table to increment up by one from 0 to 10 on each inbound call. Then you can routing decisions on that value, re-setting it to 0 it after it gets to 10.
------------------------------
Reginald Sheraton
Original Message:
Sent: 01-25-2021 07:00
From: Dean Thames
Subject: Route a call percentage ?
This is a bit of a do it yourself thing as there's no built in function to accommodate it (far as I know)
Lately I've been using the GetCurrentDateTimeUtc expression to parse out the miliseconds value and use that as a random integer to make decisions on. Technically it's not random, but it's close.
For example, considering a utc date time value of 2020-11-05T13:15:30Z,
Task.RandInt == ToInt(Left(Right(ToString(GetCurrentDateTimeUtc()),3),2)) will give you an integer of 30 stored in the variable "Task.RandInt"
You can then make a decision boolean task like so: Task.RandInt > 20
True = go to Queue A
False = Go to Queue B
Using that, the volume will even out to an 80/20 split over time.
If your dispersion needs to be more exact, you could create a count function that updated a value in a data table to increment up by one from 0 to 10 on each inbound call. Then you can routing decisions on that value, re-setting it to 0 it after it gets to 10.
------------------------------
Dean Thames
Koch Business Solutions
Original Message:
Sent: 01-25-2021 06:30
From: Reginald Sheraton
Subject: Route a call percentage ?
Good day,
just a follow up if you managed to get this working as i need to distribute calls between 2 queue's at 80\20 % of incoming calls
------------------------------
Reginald Sheraton
Original Message:
Sent: 04-03-2020 04:58
From: Alexandre Brenne
Subject: Route a call percentage ?
Hi,
I was wondering if it was possible on Genesys to route a call percentage?
To give an example:I have 3 separate call centers (which we will name A, B and C) which are connected to the same queue.How to route 20% on the A, 55% on the B and 25 on the C queue?I had thought of making from Architect a call of a random number between 1 and 100 to route the call according to this number.
But I was wondering if there were not other more reliable and rather easy means to realize.
Thanks in advance,
Alexandre
#Routing(ACD/IVR)
------------------------------
Alexandre Brenne
Niji SA
------------------------------