СтатьиРезюме[-] IT [-] Asterisk Мониторинг сервера Несколько серверов Позвони мне Установка G729 [+] Ubuntu Desktop [+] Ubuntu Server [+] Windows Server [+] Программирование [+] 1C ASP.NET & VB.NET bash & sh [+] HTML + CSS [+] Java PHP [+] QB - Quick Basic 4-4.5 [+] T-SQL [+] VB - Visual Basic 1-6 VBScript & JScript [+] Творчество Кофейная тема Наброски Размышления |
Позвони мне
Представьте, что не можете воспользоваться услугами SIP, но у Вас есть доступ по http. В этом случае, было бы здорово, если бы Asterisk позвонил Вам сам и соединил бы с нужным абонентом. Такая функция называется CallMe. Существует множество реализаций функции CallMe для Asterisk. Все, что я видел, имело монстрическую архитектуру и нерапотоспособный /недоделанный вид. Т.к. готового решения я не нашел, пришлось изобретать велосипед. Пример работы
Структура БД Две таблицы: from_places (таблица описывает как найти звонящего) ID bigint(20) auto_increment to_places (таблица описывает места, куда может позвонить звонящий) ID bigint(20) auto_increment Программа на php <?php include 'include/sql.php'; ?> <?php include 'include/dataradio/dataradio.php'; ?> <?php include 'include/textbox/textbox.php'; ?> <?php //Check for PostBack if ($_POST["submit_form"] <> "") { if ( ($_POST['dr_dr1']<>"")and(($_POST['dr_dr2']<>"")or($_POST['tb_tb1']<>"")) ) $tryMakeCall = true; else $tryMakeCall = false; } else { $tryMakeCall = false; } ?> <?php $user = & JFactory::getUser (); ?> <?php if ($tryMakeCall == false) { ?> <form name="postbackForm" method="post" action="" id="aspnetForm"> <?php echo $_POST['submit_form']; ?> <br> <div id="callmebody"> <table> <tr> <td widht='50%'> <p><strong>Позвонить мне:</strong></p> </td> <td width='50%'> <p><strong>И соединить меня с:</strong></p> </td> </tr> <tr> <td> <?php $dr1 = new dataradio("dr1"); $dr1->sql="SELECT ID,from_text FROM from_places where user='".$user->username."'"; echo $dr1->show(); ?> </td> <td> <?php $dr2 = new dataradio("dr2"); $dr2->sql="SELECT ID,to_text FROM to_places where user='".$user->username."'"; echo $dr2->show(); ?> <p>или с другим абонентом с номером:</p> <?php $tb1 = new textbox("tb1"); echo $tb1->show(); ?> </td> </tr> </table> </div> <br> <br> <input name="submit_form" type=submit value='Ok' /> </form> <?php } else { ?> <div id="callmebody"> <p>Звонок создан</p> </div> <?php } ?> <?php if ($tryMakeCall==true) { $ssql = new sql; $ssql->open_db(); $fromsql = $ssql->select("SELECT from_value FROM from_places WHERE ID=".$_POST['dr_dr1']); $fromrow = mysql_fetch_row($fromsql); $fromCall = $fromrow[0]; if ($_POST['dr_dr2']<>"") { $tosql = $ssql->select("SELECT context,extention FROM to_places WHERE ID=".$_POST['dr_dr2']); $torow = mysql_fetch_row($tosql); $toContext = $torow[0]; $toExtention = $torow[1]; } if ($_POST['tb_tb1']<>"") { $toExtention = $_POST['tb_tb1']; if (strlen($toExtention)==4) $toContext = 'DefaultContexForInternal'; else $toContext = 'DefaultContexForExternal'; } $file=fopen("/tmp/tocall.call","w"); fputs($file, "Channel: ".$fromCall."n"); fputs($file, "MaxRetries: 0n"); fputs($file, "RetryTime: 60n"); fputs($file, "WaitTime: 60n"); fputs($file, "#n"); fputs($file, "# Assuming that your outgoing call logic is kept in then"); fputs($file, "# context called [outgoing]n"); fputs($file, "#n"); fputs($file, "Context: ".$toContext."n"); fputs($file, "Extension: ".$toExtention."n"); fputs($file, "Priority: 1n"); fclose($file); $ssql->close_db(); $tmp = system('call.sh',$out); echo $tmp; echo '<br>'; echo $out; } ?> Программа на bash #!/bin/bash sudo chown asterisk:asterisk /tmp/tocall.call sudo mv /tmp/tocall.call /var/spool/asterisk/outgoing/1.call |
X | ||||||
Пн | Вт | Ср | Чт | Пт | Сб | Вс |