IVR - Automate Regression testing for Hosted VXML based IVR - automated-tests

I have been assigned the task to automate regression testing for a VXML based IVR hosted in cloud.
This is a DTMF based IVR where IVR plays a audio prompt and then waits for caller input. I am not sure how to automate this part.
How do I automate DTMF digits collection?
I have seen a few suggestion where it was mentioned that I need to playback audio files that represent the telephone keypad input (DTMF). But that doesn't seem optimal. Is there a way I can specify the input in a text file and have IVR read it.
I have found few suggestions online but that would require.
I have to find a solution which is Free. Meaning I am allowed to use only tools that are freely available on Internet.
I will be grateful if I can get suggestions on how to get this done.

There are a couple of commercial solutions, but since you indicate you need free, I'll skip those.
You can blindly treat it as a web application and test the navigation between pages. This won't allow you to test the call flow, but you can test some of the back end logic that drives page generation.
You can write another IVR application to call your current application. Without speech recognition, it is hard to confirm that the call flow is correct, but an call that ends unexpectedly would fail. If you can change the existing application, you may be able to swap out recordings of voice with tones and use those to keep the test case and call flow in sync.
You could use one of the open source voicexml engines and modify them to drive the call flow. You might have dependencies in your infrastructure that require a real call flow versus a simulation. I have been able to get JVoiceXML to process a voice application in a simulation/test case manner.
In summary, you're going to need to be creative if the requirement is no external cost, just your time.

The DTMF tone wave files can be made dynamic by using script. Say you want to enter DOB 22111984, write a OE/ECMA script which will input those wave file. It's same like playing dynamic audio file.
Assuming your are using another IVR(outbound) which will play back to inbound IVR.
i.e :
<script> <![CDATA[
function sayDTMF(n)
{
//generate VXML page which will play audio file
// depending upon the input
//2.wav 2.wav 1.wav 1.wav 1.wav 9.wav 8.wav 4.wav
}
]]> </script>
<goto expr="sayDTMF(DOB)"/>

Related

Are the Smart Home API Error Messages supposed to make Alexa respond with more usefully information?

I've nearly finished my lambda service for my smart home skill, and everything works great. The Echo is receiving my confirmations and correctly relaying their information. I'm now trying to build in error handling.
From the SHS API reference, there are a bunch of error messages listed that correspond to different circumstances. Are these errors supposed to change what Alexa says? Regardless of which one, if any, that I use Alexa just responds that the command doesn't work on that device. Right now I'm literally just using callback(err) and return the copy and pasted object from the API reference and still Alexa responds with the generic error.
It's easy to put in a bunch of constants to define error returns. It's harder to wire all of that into a firmware patch of a hardware device. Also, they only release an update to the SDK a few times a year. While they patch the hardware every couple of weeks.
Given that, I suspect that they put those error returns into the SDK to meet with a ship date with the SDK. More as placeholders than specific functionality. Over time, and if there is increased adoption of home skills, they will roll out updates to the hardware device that will take advantage of those returns.
My advice would be to use them. But not to expect there to be a difference right now. And don't mention differences in your documentation. If there is another place you can surface diagnostic information, you might want to do that so your customers can fix their problems.

asterisk get credit card info

I`m trying to build a script that will capture the credit card info like card number,cvc and expiration date using asterisk 11.x and asterisk-java library for AMI/AGI integration.
Right now I am able to build a script that will acquire that info if it is called via dialplan but i have a different scenario:
1. A call enters a queue.
2. An agent from the specific queue answer the call
3. The caller wants to input the card details
4. After the caller has entered the card details is redirected back to agent to continue the call.
My specific problem is related to step 3 as I do not know how to route the caller to my AGI and then back to the same agent. (eventually the agents has to be still involved in (some) call to guarantee that when the caller returns from agi it is still available)
Any idea how can I achieve that ? I know that this is a common practice so I think that there has to be a way.
When the call is delivered to the agent, use a macro to set a custom channel variable with the agent ID or extension in it.
Then, when your credit-card authentication function is done, read the variable and use an AGI command to transfer the call back to the agent.
Further Reading
http://www.voip-info.org/wiki/view/Asterisk+variables
http://www.voip-info.org/wiki/view/Asterisk+manager+Example:+Transfer
Note if this solution solves your problem, please 'accept' it to make it easier for others with the same issue to find it. thanks!
There are no any common practice for business process like you have. That depend of you and your client only.
You can use features conf or transfer. Can transfer to special extension or to conference room.
No way say what suite you better.
For sure you need understand how asterisk work before write any AGI/AMI or dialplan application. I can recommend ORelly's "Asterisk the future of telephony" book as start point.

Accessing Asterisk Recorded Calls , built in solution

dose asterisk have any solution to access the recorded calls by itself , i mean no tricky way like saving recorded calls to DB or using Ftp or other third party solutions ...
looking for built in solution.
No.
But you can build a macro that will play the recorded calls
Asterisk does not provide a built in mechanism to access recorded calls (via Monitor or MixMonitor). All calls will be recorded to /var/spool/asterisk/monitor (unless specified differently).
You can check out a project called ARI (Asterisk Recording Interface), not to be confused with Asterisk REST Interface. It should provide you with the solution you are seeking.
Pay attention to one thing - recording everything into a single directory will end up with thousands of files in one directory. Depending on your file system, ext3/4 for example, may not really like the idea that there are 10,000 files in one directory.
My suggestion to you is this, if you are building a recording system for an enterprise, develop a catalog mechanism with a database, so that you don't have to run daily archiving and sh**ty procedures to keep your system working.

How to capture biometric information on a webpage by using Java

what's the proper way to capture biometric information (pressure, speed...) by signing with a stylus on a canvas developed in a JSP web Page
Alright, since no one else has attempted to answer this question, I shall elaborate on my comment and opefully it will serve as an answer to others as well.
First, Java Server Pages (JSP) is a server-side language. It is meant to run on the web-server and not on the user's browser. The same goes for other server-side languages like PHP and ASP.
So a server-side language is not able to directly interact with devices (keyboard, scanners, cameras, etc). Only when the data is submitted by the browser or client program, the server receives it for processing.
For a device to receive input, there are two key pieces of software needed.
The device driver: which must be installed on the user's machine
The application program to capture inputs and do any processing.
If either one is missing, the device cannot function. And then there's another issues. Depending on the device, there's various feedback from the driver/API that should go back to the application that reads it. For example, if a fingerprint scan was not very successful for some reason, the scanner should tell this to the user. So again, there's the need for interactivity between the device and the user's application.
Thus, using any server-side language is out of the question for such applicatoins.
Now, in order to make this possible, you may use a client-side program. Here are some options.
A native application in VB, C/C++, Pascal or other language. If this is an option, the user must install this application on their computer.
A browser-based program. This can be a program created using JAVA (not Javascript or JSP), or ActiveX component. ActiveX is largely OS/browser dependent. And the TRUTH is that even Java is not truly platform independent when it comes to different operating systems. There are some technical differences that you'll need to look into. But for the most part of interactivity and high-level operations, yes, Java is more platform-independent than the others. But on a personal note, Java is my worst language. I try not to use it anywhere anymore. That's a different story.
In both options above, every client machine must have their own proprietory drivers and often some sort of API for browser integration.
A year or so ago, I had to program a Bio-Mini fingerprint scanner using VB. It was all sweet in the beginning. Then due to the restrictions of networkability and concurrent usage, the drivers/SDK could not take the load and things were going wrong. By the way, the drivers/SDK were meant for MS-Access. Knowing that the DB was the problem, I started to port this to MySQL. And it was a severe climb from there. I had to do a near-rewrite of the SDK for capturing and comparing data using arrays in VB. And to make things worst, the device was changed and things went wrong again. But do note that the new device was from the same manufacturer.
So keep in mind that even a simple change like that can cause a problem.

Programmatically read Adobe game variables / interact with the game / game bot

Basicly, I'm trying to read a game's chat and catch actions from the user.
Here is the image which I will explain the situation with :
1: I took a message in the chat
2: I tryed to find it in the game's memory with Cheat-Engine
3: By examining every addresses where it was found, I ended up to this one, which contains the chat formated with what seems to be html..
That part is only the bottom part of the chat. (I see the rest of it if I scroll up)
So, I asked myself how could I read game variable to interact with the game.
Another thing I'm trying to achieve is to catch the user's actions so I can display some information in a winform.
I've just read about packet sniffing, it seems interesting for what I'm trying to do.
I tryed to read packets going in and out of this app with WireShark. Every action in game was sending a few packets, but I couldn't read them as they were just a bunch of weird characters. I tryed to decrypt them using a few methods I got on WireShark's forum without success. I was asking myself, even if I could see them in Wireshark, how am I gonna do that programmatically..
There is certainly a good way to do this, as we often see bots in this game.
Considering the number of bots playing "in team", I'm pretty sure they do not use clicks, but they run something in background that sends requests.
How do you make such a bot that fight, talk, interact with players automatically?
This game is Dofus, powered by Adobe Air.
I usually program with c++ and c#, but I was wondering what's the best way to do this.
I need a kick in the right direction!
Maybe trying a tcp/ip listner control (or use tcplistner class in c#) in your c# project with the appropriate port to catch requests (& responses). Information sended could be compressed so you may want to try some standard algo.
Did you try reverse engineer the AIR app ?

Resources