Original Message:
Sent: 03-10-2024 16:52
From: Anton Vroon
Subject: How are you handling account lookups by ANI where a customer may have multiple accounts?
Hi Jeremy
Really depends on the amount of visibility you need. If you need to report on it, and actively track the paths currently flow outcomes and milestones are your best choice. There is just a limit to the number of flow outcomes you can have. Flow milestones help and has some reporting capability but not the same as outcomes. We use these more for high level items or specific/critical data actions or paths so we can report at a high level what outcomes and journeys customers are taking or when they are using self services options for example.
However for specifics, and when we need to investigate what has happened to the call, then we use participant data. There are lots of ways to do this,
we use a common module, that takes some inputs. Usually a something that represents the flow, or the name of the flow is fine too, followed by a key input and a value input.
In the common module we combine the flow name and key into a single string, and then do Get Participant Data on the string to get what it is currently.
Then if it is empty just set participant data using the variable above as the attribute name with the value input, if not empty (that is there is already some value) append the input value with the retrieved value, we use a pipe to separate the values. eg If(IsNotSetOrEmpty(Common.LoggedValue),Common.InputValue,Append(Common.LoggedValue," | \n",Common.InputValue))
The full common module for us looks like this:

Just keeps logging nice and consistent. Some people like adding numbers for the order, or using a 3 or 4 digit system to keep the data down.
Now there is always a decision to be made on what level of logging you want to do. Personally we don't log every single variable or every single update action separately, just the sections of the flow, switch/decision paths, data action output paths etc, unless there is a known issue then we can add more in.
Genesys are working on making some participant data searchable and added as columns (https://genesyscloud.ideas.aha.io/ideas/ANLS-I-702) as well as a architect debugger (https://genesyscloud.ideas.aha.io/ideas/SSA-I-471) which would add some new options when that is released.
Hope that helps.
------------------------------
Anton Vroon
Original Message:
Sent: 03-08-2024 18:03
From: Jeremy Prevost
Subject: How are you handling account lookups by ANI where a customer may have multiple accounts?
Anton,
Thank you again for your reply. Would you be able to go into a little more detail on the mechanism you use for logging? We do not do any logging now as our IVR is very simplistic, but since we are working to enhance our IVR I'd like to have the ability to monitor it for issues. Is this done simply through setting participant data? Do you use flow outcomes at all? Any other helpful tips you would be willing to share?
Thank you!
Jeremy
------------------------------
Jeremy Prevost
Lentegrity LLC
Original Message:
Sent: 03-05-2024 14:56
From: Anton Vroon
Subject: How are you handling account lookups by ANI where a customer may have multiple accounts?
Hi Jeremey,
No problem at all.
For logging we use a common module to ensure consistent logging across our flows. We use 3 inputs, flow name, key and value. We use the flow name as the main key we can lookup and add to, we like to concatenate the values together with either a comma or pipe to separate each one. As long as it doesn't get too long, this works well for us, so we can see the journey for each flow the call went through.
For a error handling. Absolutely, we use a reusable task, though a common module could work well for consistency across flows. Remember tasks can also have inputs/outputs, so you can provide the treatment or any additional information from the flow as input to the reusable task and then have the one task able to provide different outputs, transfer to this queue or that queue or play a specific prompt first etc. We don't currently do notifications on errors, but review data action performance, flow outcomes and flow errors for those. You could use the Genesys APIs to send an email for example, or to trigger a workflow to then send a notification or some other tasks if needed.
And there may be better ways to do it, but that is what I do, hope it helps.
If you need any specific screenshots let me know.
------------------------------
Anton Vroon
Original Message:
Sent: 03-04-2024 12:36
From: Jeremy Prevost
Subject: How are you handling account lookups by ANI where a customer may have multiple accounts?
Anton,
Sorry for not replying earlier but I finally got around to implementing this (still in development stage) and it is working like a charm! Thank you so much for your help!
I did want to ask as I see you have an error handling reusable task, do you have any recommendations on best practices for what to put in something like that? I think the flow itself is dependent on the use case, for example for my flows I would likely want to route the call to an agent if an issue occurred, but is there anything I can/should be doing to either alert us that there is an issue or that will help with error logging/looking into where the issue is occurring? I thought I saw something about using participant data but any recommendations you have would be great!
Thank you again.
------------------------------
Jeremy Prevost
Lentegrity LLC
Original Message:
Sent: 02-07-2024 18:17
From: Anton Vroon
Subject: How are you handling account lookups by ANI where a customer may have multiple accounts?
Right hopefully this should get you started, I just quickly put this together so of course doing this in a bot could be better, and you will need to add additional checks like is the input within a reasonable range, logging, what to do when there is only 1 account or no accounts, or opt out options etc etc But this is the crux of it.
Data Action returns an array of accounts (as string array) and I assign that to a Variable called Task.AccountNumbers

Get the count of the array and store as Task.NumberOfAccounts

Now the tricky part

Loop is setup with loop index variable and loop count like so:

First step in the loop:
Get the current account in the loop GetAt(Task.AccountNumbers, Task.LoopIndex)

The Audio step looks like this: (you might want to only play the last 2 digits etc, just create a variable for that)


+1 is here so customer hears 1 2 3, rather than 0 1 2 (index starts at 0)
Then the Collect Input is outside the loop (input barge allows it to skip out of the loop to the input block. But you could put the collect input in the loop and add an exit loop action if there is an input). Because we put it outside, we just make the input audio blank. But assign the Input to a variable eg Task.CollectCustomerOption

Then Success path we have convert that input back to an index -1 (could combine with the next step that is fine) : ToInt(Task.CollectCustomerOption) -1
Then the final step Task.SelectedAccount (which yes could be part of the same update data action instead of using 2 update data actions) looks like this: GetAt(Task.AccountNumbers, Task.SelectedAccountIndex)
And there you have the customer selected account to do with as you please.
------------------------------
Anton Vroon
Original Message:
Sent: 02-07-2024 17:01
From: Jeremy Prevost
Subject: How are you handling account lookups by ANI where a customer may have multiple accounts?
Anton,
This is exactly what I was hoping would be possible but wasn't sure how to do. If you'd be able to show me in the flow I would appreciate it!
Thank you,
Jeremy
------------------------------
Jeremy Prevost
Lentegrity LLC
Original Message:
Sent: 02-06-2024 13:40
From: Anton Vroon
Subject: How are you handling account lookups by ANI where a customer may have multiple accounts?
We do this a lot in phone banking.
You can create a loop, and have the number of loops equal to the count of the array (collection).
Then do GetAt() using the loopIndex to get get the 'current' item in the array. And then just play that account to the customer
Then on collect input, just remember to adjust for index (-1) compared to a listed selection, or just allow pressing 0 as first item instead of 1.
IE (and use append and convert these sub expressions to variables) , "For your " + GetAt(Flow.MyArray, Flow.Loopindex) + " account, please press" + Flow.LoopIndex +1
etc
If you need to see that in a flow let me know
------------------------------
Anton Vroon
Original Message:
Sent: 02-05-2024 13:45
From: Jeremy Prevost
Subject: How are you handling account lookups by ANI where a customer may have multiple accounts?
Caleb,
This is a huge help! Thank you so much!
One question on #2. If customer 1 calls in and has 1 account, customer 2 calls in and has 3 accounts, and customer 3 calls in and has 5 accounts, how do I configure the TTS to read the options correctly for each caller? My fallback is to do an expression with ifs checking if account1, account2, account3 and so on have data in them but I'm wondering if there is a better way?
Thank you,
Jeremy
------------------------------
Jeremy Prevost
Lentegrity LLC
Original Message:
Sent: 02-05-2024 12:58
From: Caleb Smith
Subject: How are you handling account lookups by ANI where a customer may have multiple accounts?
1) How should the data be structured that is picked up by the data action? As in, can the process that is built handle an array of accounts of any size or we need to limit the size or map it to literal "account1, account2" variables? I've never used an array in this manner, but I know they exist. Genesys calls them "Collections". Create a collection variable - Genesys Cloud Resource Center (mypurecloud.com) or Maybe something with a data table? It's possible to loop through the lines within the table / update table via API. You can also map it to a literal value, which I would do if you don't have that many accounts. I would recommend looking around on the developer forum as I'm sure someone else has had a similar question. Genesys Cloud Developer Forum
2) How does the TTS look for the collect input action? Does it use an expression with a lot of IF statements to determine what to say? Example context: I have an on-call flow that uses a data action to read an agents position and name aloud in an IVR that allows a manager to call in to update the on-call rotation.
The data action outputs two variables "Task.position" and "Task.name". When I play back the variables in TTS using the Play Audio action, I can opt to have them spoken. Same for collect input / any action with an audio input.
Variables can also be inserted into expressions. Here's a simple example of playing an account balance and stating the due date as defined in the data action output:
ToAudioCurrency(ToCurrency(MakeCurrency(Flow.currentBalance,"USD")))
ToAudioDate(ToDateTime(Flow.paymentDueDate), Format.Date.monthOnly)
ToAudioDate(ToDateTime(Flow.paymentDueDate), Format.Date.dayOnly)
ToAudioDate(ToDateTime(Flow.paymentDueDate), Format.Date.shortYearOnly)
3) After the customer selects the account to use, can you set the variables that will be used for the remainder of the actions or how does that work? Yes, you can use the Update Data action to set any variable to any value whenever you like. As well as being able to access any defined variable as it is stored in memory for the duration of the entire flow. Update Data Variables do NOT transfer between call flows.
You should also look into Participant Data. As you can both SET and GET this data across flows throughout the life of the call. The data set to the customer is also stored with the call and can be accessed via API.
Simple example:
Hope this helps!
------------------------------
Caleb Smith
Interstate Gas Supply, Inc.
Original Message:
Sent: 02-05-2024 11:23
From: Jeremy Prevost
Subject: How are you handling account lookups by ANI where a customer may have multiple accounts?
Caleb,
I can create an API that will allow the data to be pulled by a data action, that is no problem. What I wanted help with is how best to structure/use that information in the inbound call flow/architect. As I'm still in the design phase and we do not have a lot of experience in architect so some of these may be obvious to you or simple to do and I just have not seen it yet.
1) How should the data be structured that is picked up by the data action? As in, can the process that is built handle an array of accounts of any size or we need to limit the size or map it to literal "account1, account2" variables?
2) How does the TTS look for the collect input action? Does it use an expression with a lot of IF statements to determine what to say?
3) After the customer selects the account to use, can you set the variables that will be used for the remainder of the actions or how does that work?
Thank you for any help!
------------------------------
Jeremy Prevost
Lentegrity LLC
Original Message:
Sent: 02-05-2024 10:50
From: Caleb Smith
Subject: How are you handling account lookups by ANI where a customer may have multiple accounts?
Hi Jeremy,
Our CRM combines all customer accounts into one customer profile. So we're able to reference one single account on lookup and have access to all associated accounts to said customer.
In theory, you'd need an exposed API you can call within your CRM to get all accounts associated to said ANI. Then, map that response inside your data action. Now you have your outputs and you can use TTS to play that to your customer inside a Collect Input action.
Was there a specific piece to this process that you wanted help with?
------------------------------
Caleb Smith
Interstate Gas Supply, Inc.
Original Message:
Sent: 01-31-2024 18:42
From: Jeremy Prevost
Subject: How are you handling account lookups by ANI where a customer may have multiple accounts?
Hello,
I'm working to build out our IVR to have more self service options and one of the things we want to do is to look up the customer's account(s) by the ANI they're calling in with. I'm not sure what the best way to handle multiple accounts is. What I would like to do is prompt the customer to select which account to use, possibly by the last 4 of the account number, and then use that account for the remainder of the flow. Has anyone been able to achieve this and if so would you be able to provide screenshots or details on your flow?
Thank you in advance for any help!
#ArchitectureandDesign
------------------------------
Jeremy Prevost
Lentegrity LLC
------------------------------