PDA

View Full Version : نحوه تشخیص رخداد تماس در تلفن گویا



JYasProgramer
شنبه 05 اردیبهشت 1394, 11:14 صبح
سلام دوستان
من یه برنامه تلفن گویا نوشتم اما در اون برنامه وقتی تماس از سمت کسی که تماس رو دریافت کرده قطع میش هبرنامه نمی تونه تشخیص بده که تماس قطع شده و خط با اینکه تماس از سمت دریافت کننده قطع شده بازم مشغوله...
سوالم اینه که چجوری میتونم قطع تماس رو تشخیص بده تا بتونم تا روال دلخواهم رو در برنامه دنبال کنم؟؟

JYasProgramer
شنبه 05 اردیبهشت 1394, 16:01 عصر
private TAPIExCtl tp = new TAPIExCtl();

private ITAPILine selectedLine;

private int callingToday;

private static int rowIndex = 0, rowNmbInExcelFile = 0;

private String debt, phoneNumber, sharingNumber, audioFileName;

private bool isNumberPhoneInList;

private List<String> dataExcel, callingListList;

public IVRSystem()
{
InitializeComponent();
}

private void IVRSystem_Load(object sender, EventArgs e)
{
tp.initialize();

tp.OnConnected += new _ITAPIExEvents_OnConnectedEventHandler(tp_OnConnec ted);
tp.OnNewCall += new _ITAPIExEvents_OnNewCallEventHandler(tp_OnNewCall) ;
tp.OnDisConnected += new _ITAPIExEvents_OnDisConnectedEventHandler(tp_OnDis Connected);

dayDownCounter.Start();

dataExcel = new List<String>();
callingListList = new List<String>();
string dir = Path.GetDirectoryName(Assembly.GetEntryAssembly(). Location) + "\\callingList\\callingList.xlsx";

if (File.Exists(dir))
{
if (!dataExcel.Any())
{
foreach (var worksheet in Workbook.Worksheets(dir))
foreach (var row in worksheet.Rows)
{
int i = 0;
foreach (var cell in row.Cells)
{
i++;
dataExcel.Add(cell.ToString());
}
rowNmbInExcelFile++;
}
lblStatus.Text = "اکسل بارکذاری شد";
}
}
else
{
MessageBox.Show("فایل اکسل بارگذاری نشده", "هشدار");
}
}

private void btnDial_Click(object sender, EventArgs e)
{
callingToday = (int)System.DateTime.Now.DayOfWeek;
debt = dataExcel.ElementAt(rowIndex++);
phoneNumber = dataExcel.ElementAt(rowIndex++);
sharingNumber = dataExcel.ElementAt(rowIndex++);
callingNumber.Text = phoneNumber;

if (!callingListList.Exists(item => item == phoneNumber))
{
callingListList.Add(phoneNumber);
}
else
{
isNumberPhoneInList = true;
}

selectedLine.MakeCall(phoneNumber);

lblStatus.Text = "تماس";
}

private void btnGetLise_Click(object sender, EventArgs e)
{
foreach (ITAPILine tmpline in tp.Lines)
{
if ((tmpline.Caps.Media_Modes & LINEMEDIAMODE.MEDIAMODE_INTERACTIVEVOICE) > 0 ||
(tmpline.Caps.Media_Modes & LINEMEDIAMODE.MEDIAMODE_AUTOMATEDVOICE) > 0)
{
cmbAllLine.Items.Add(tmpline.Name);
}
}
}

private void btnCloseLine_Click(object sender, EventArgs e)
{
selectedLine.Close();

lblStatus.Text = "بستن خط";
}

private void btnOpenLine_Click(object sender, EventArgs e)
{
try
{
for (int i = 0; i < tp.Lines.Count; i++)
{
if (tp.Lines.Item(i).Name == cmbAllLine.SelectedItem.ToString())
{
selectedLine = tp.Lines.Item(i);
}
}

if (!selectedLine.Open())
{
selectedLine.Open();

lblStatus.Text = "باز کردن خط";
}
}
catch (Exception ex)
{
}

if (selectedLine.DevStatus.OpenMediaModes.ToString() == "MEDIAMODE_INTERACTIVEVOICE")
{
modemType.Text = "Interactive";
modemType.ForeColor = Color.Lime;
}
else if (selectedLine.DevStatus.OpenMediaModes.ToString() == "MEDIAMODE_DATAMODEM")
{
modemType.Text = "Data";
modemType.ForeColor = Color.Red;
}
else
{
modemType.Text = "Other";
modemType.ForeColor = Color.Pink;
}
}

void tp_OnNewCall(ITAPICall m_Call)
{
audioMessage();

lblStatus.Text = "تماس جدید";
}

void tp_OnDisConnected(ITAPICall m_Call, LINEDISCONNECTMODE DisconnectedMode)
{
if (rowIndex > (rowNmbInExcelFile * 3))
{
debt = dataExcel.ElementAt(rowIndex++);
phoneNumber = dataExcel.ElementAt(rowIndex++);
sharingNumber = dataExcel.ElementAt(rowIndex++);

callingNumber.Text = phoneNumber;

if (!callingListList.Exists(item => item == phoneNumber))
{
callingListList.Add(phoneNumber);
}
else
{
isNumberPhoneInList = true;
}

DateTime dateHour = DateTime.Now;

int hour = dateHour.Hour;

if (hour <= Int32.Parse(endTime.Text))
{
selectedLine.MakeCall(phoneNumber);

lblStatus.Text = "تماس";
}

lblStatus.Text = "قطع";
}
else
{
MessageBox.Show("حبیب جان لیست تماس به پایان رسید", "اتمام لیست");
}
}

void tp_OnConnected(ITAPICall m_Call, LINECONNECTEDMODE ConnectedMode)
{
for (int i = 0; i < nmbStack.Count; i++)
{
m_Call.PlaybackFile(Path.GetDirectoryName(Assembly .GetEntryAssembly().Location) + "\\voice\\" + nmbStack.Pop());

lblStatus.Text = "اتصال و پخش صدا";
}
}


اینم کدش، با تپیکس کار کردم

malizergani
شنبه 05 اردیبهشت 1394, 17:16 عصر
سلام دوست عزیز


لینک (http://www.hotscripts.ir/files/my_file/bank_csharp_free_hotscripts.ir.rar)