asternet/Asterisk.2013/Asterisk.NET.Test/Asterisk.NET.Test/CustomIVR.cs
2014-01-08 14:16:39 +00:00

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();
}
}
}