Статьи

  Резюме
  [-] 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 
user varchar(50) 
from_text varchar(50)
from_value varchar(50) 

to_places (таблица описывает места, куда может позвонить звонящий)

ID bigint(20) auto_increment 
user varchar(50) 
to_text varchar(50)
context varchar(50)
extention varchar(50)

Программа на 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
ПнВтСрЧтПтСбВс