119 lines
4.7 KiB
C#
119 lines
4.7 KiB
C#
using System;
|
|
using AsterNET.FastAGI;
|
|
|
|
namespace AsterNET.Test
|
|
{
|
|
public class CustomIVR : AGIScript
|
|
{
|
|
private string escapeKeys = "0123456789*#";
|
|
/*
|
|
* Call -> play "wellcome" -> wait digit 5 seconds -> press 1 -> play "press-1" -> wait digit -> press * ----------------------------\
|
|
* ^ ^ ^ -> press 4 -> play "press-4" -------\ |
|
|
* | | | -> press any -> play "bad" "digit" -+ |
|
|
* | | \-----------------------------------------/ |
|
|
* | | -> press # or timeout -\ |
|
|
* | | | |
|
|
* | | -> press # or timeout -> play "goodbye" -> Hangup | |
|
|
* | | ^ | |
|
|
* | | \-----------------------------------+ |
|
|
* | | | |
|
|
* | | | |
|
|
* | | -> press 2 -> play "press-1" -> wait digit -> press # or timeout -/ |
|
|
* | | ^ -> press * ----------------------------+
|
|
* | | | -> press 4 -> play "press-4" -------\ |
|
|
* | | | -> press any -> play "bad" "digit" -+ |
|
|
* | | \-----------------------------------------/ |
|
|
* | | |
|
|
* | | -> press other -> play "bad" "digit" -\ |
|
|
* | \--------------------------------------------------/ |
|
|
* \-------------------------------------------------------------------------------------------------------------------/
|
|
*/
|
|
|
|
public override void Service(AGIRequest request, AGIChannel channel)
|
|
{
|
|
Answer();
|
|
int submenu = 0;
|
|
char key = '\0';
|
|
bool welcome = true;
|
|
|
|
while (true)
|
|
{
|
|
if (welcome)
|
|
{
|
|
key = StreamFile("welcome", escapeKeys);
|
|
welcome = false;
|
|
submenu = 0;
|
|
}
|
|
if (key == '\0')
|
|
{
|
|
key = WaitForDigit(5000);
|
|
if (key == '\0' || key == '#')
|
|
{
|
|
StreamFile("goodbye");
|
|
break;
|
|
}
|
|
}
|
|
char newKey = '\0';
|
|
switch (submenu)
|
|
{
|
|
case 0:
|
|
switch (key)
|
|
{
|
|
case '1':
|
|
newKey = StreamFile("press-1", escapeKeys);
|
|
submenu = 1;
|
|
break;
|
|
case '2':
|
|
newKey = StreamFile("press-2", escapeKeys);
|
|
submenu = 2;
|
|
break;
|
|
case '3':
|
|
newKey = StreamFile("press-3", escapeKeys);
|
|
break;
|
|
default:
|
|
newKey = StreamFile("bad", escapeKeys);
|
|
if(newKey == '\0')
|
|
newKey = StreamFile("digit", escapeKeys);
|
|
break;
|
|
}
|
|
break;
|
|
case 1:
|
|
switch (key)
|
|
{
|
|
case '*':
|
|
welcome = true;
|
|
break;
|
|
case '4':
|
|
newKey = StreamFile("press-4", escapeKeys);
|
|
break;
|
|
default:
|
|
newKey = StreamFile("bad", escapeKeys);
|
|
if (newKey == '\0')
|
|
newKey = StreamFile("digit", escapeKeys);
|
|
break;
|
|
}
|
|
break;
|
|
case 2:
|
|
switch (key)
|
|
{
|
|
case '*':
|
|
welcome = true;
|
|
break;
|
|
case '5':
|
|
newKey = StreamFile("press-5", escapeKeys);
|
|
break;
|
|
default:
|
|
newKey = StreamFile("bad", escapeKeys);
|
|
if (newKey == '\0')
|
|
newKey = StreamFile("digit", escapeKeys);
|
|
break;
|
|
}
|
|
break;
|
|
}
|
|
key = newKey;
|
|
}
|
|
Hangup();
|
|
}
|
|
}
|
|
}
|