Hôm nay, T.Hai Tháng 10 23, 2017 2:52 pm

Múi giờ UTC + 7 Giờ





Tạo chủ đề mới Gửi bài trả lời  [ 3 bài viết ] 
Người gửi Nội dung
 Tiêu đề bài viết: Tạo trang Web " Click to Call " bằng PHP với asterisk
Gửi bàiĐã gửi: T.Hai Tháng 10 08, 2012 9:19 am 
Ngoại tuyến

Ngày tham gia: T.Hai Tháng 4 26, 2010 10:34 am
Bài viết: 4
Để thực hiện cuộc gọi từ trang web, bài viết dưới đây hướng dẫn xây dựng một ứng dụng dựa trên thư viện của Google bạn có thể làm một ứng dụng Click to call trên website mã nguồn PHP của bạn một cách dễ dàng

Yêu cầu cần có cho bài LAB này:

  • PHP-SIP class
  • Asterisk PBX
  • PHP 5
  • Web server
  • Softphone

Sơ đồ đường đi tiến trình SIP

Hình ảnh

  • 1 Từ giao diện web url điền vào từ User1@sip gọi User2@sip
  • 2 Web server sẽ gửi INVITE đến user1
  • 3 Sau khi INVITE được chấp nhận bởi user1, máy chủ web ngay lập tức gửi REFER với sip:user2@sip trong tiêu đề “Refer-to”.
  • 4 Web Server chấm dứt "call" bằng cách gửi BYE tới user1.
  • 5 Theo hướng dẫn trong yêu cầu REFER gửi bởi máy chủ web, user1 gửi INVITE đến sip:user2@sip.

Tạo trang "Click To Call"

Tạo một tập tin click2call.php trong thư mục gốc của máy chủ web của bạn với nội dung như bên dưới. Lưu ý thông số 'setUsername', 'setPasword' và 'setFrom' trong code, phải được sửa đổi để đúng với tài khoản sip của bạn, mật khẩu và tên miền của extension mà bạn sẽ sử dụng để thực hiện cuộc gọi. Điều này là cần thiết để xác thực với tổng đài Asterisk PBX, bởi vì trên web bạn sẽ có thể gọi được như là một Extension của tổng đài.

Nội dung file click2call.php

Trích dẫn:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en">

<head><title>Click to Call</title></head>

<body>

<?php
    if ( !function_exists('sys_get_temp_dir'))
    {
    function sys_get_temp_dir()
      {
      if( $temp=getenv('TMP') ) return $temp;
      if( $temp=getenv('TEMP') ) return $temp;
      if( $temp=getenv('TMPDIR') ) return $temp;
        $temp=tempnam(__FILE__,'');
      if (file_exists($temp))
        {
        unlink($temp);
        return dirname($temp);
        }
      return null;
      }
    }
?>

<?php if (isset($_POST['from']) && isset($_POST['to'])) : ?>

<?php require_once('php-sip/PhpSIP.class.php') ?>

<?php $from = $_POST['from']; $to = $_POST['to'] ?>

Trying call from <?php echo $from ?> to <?php echo $to ?> ...<br />

<?php flush() ?>

<pre>

<?php

try{

      $api = new PhpSIP();

// if you get "Failed to obtain IP address to bind. Please set bind address manualy."
// error, use the line below instead
// $api = new PhpSIP('you_server_IP_address');

      $api->setDebug(true);
      $api->setUsername('1001');
      $api->setPassword('Password 1001');
      $api->addHeader('Subject: click2call');
      $api->setMethod('INVITE');
      $api->setFrom('sip:1001@sip.asterisk.vn');
      $api->setUri($from);

      $res = $api->send();

    if ($res == 200)
    {
      $api->setMethod('REFER');
      $api->addHeader('Refer-to: '.$to);
      $api->addHeader('Referred-By: sip:c2c@'.$api->getSrcIp());
      $api->send();
      $api->setMethod('BYE');
      $api->send();
      $api->listen('NOTIFY');
      $api->reply(481,'Call Leg/Transaction Does Not Exist');
    }

      if ($res == 'No final response in 5 seconds.')
    {
      $api->setMethod('CANCEL');
      $res = $api->send();
    }

    echo $res;

} catch (Exception $e)
      {
        echo "Opps... Caught exception:";
        echo $e;
      }

?>
</pre>
<hr />

<a href="<?php echo $_SERVER['PHP_SELF']; ?>">Back</a>

<?php else : ?>

    <form action="<?php echo $_SERVER['PHP_SELF'] ?>" method="post">
      <fieldset>
        From: <input type="text" name="from" size="25" value="" />
        To: <input type="text" name="to" size="25" value="sip:enum-test@sip.asterisk.vn" />
        <input type="submit" value="Call" />
      </fieldset>
    </form>

<?php endif ?>

</body>

</html>


Cài đặt PHP-SIP Class

Bạn Download PHP-SIP về từ code.google.com/p/php-sip/downloads/list và giải nén vào thư mục gốc của web trên máy chủ, bạn sẽ thấy như hình bên dưới

Trích dẫn:
    /web-root/click2call.php
    /web-root/php-sip/example.php
    /web-root/php-sip/PhpSIP.class.php
    /web-root/php-sip/PhpSIP.Exception.php
    /web-root/php-sip/README


Bây giờ bạn đã có thể mở http://your_web_server/click2call.php và sẽ thấy như sau:

Hình ảnh

Bây giờ chúng ta có thể test thử

Hình ảnh

Congratulation !


Đầu trang
 Xem thông tin cá nhân  
 
 Tiêu đề bài viết: Re: Tạo trang Web " Click to Call " bằng PHP với asterisk
Gửi bàiĐã gửi: T.Ba Tháng 10 09, 2012 4:34 pm 
Ngoại tuyến

Ngày tham gia: T.Ba Tháng 10 09, 2012 3:34 pm
Bài viết: 7
Cho mình hỏi trong setFrom('sip:1001@sip.asterisk.vn'); có "sip:1001@sip.asterisk.vn" là gì vậy bạn?


Đầu trang
 Xem thông tin cá nhân  
 
 Tiêu đề bài viết: Re: Tạo trang Web " Click to Call " bằng PHP với asterisk
Gửi bàiĐã gửi: T.Ba Tháng 10 09, 2012 10:40 pm 
Ngoại tuyến

Ngày tham gia: T.Hai Tháng 4 26, 2010 10:34 am
Bài viết: 4
linhsonit đã viết:
Cho mình hỏi trong setFrom('sip:1001@sip.asterisk.vn'); có "sip:1001@sip.asterisk.vn" là gì vậy bạn?

để thiết lập From Header là "sip:1001@sip.asterisk.vn"
Bạn có thể tham khảo thêm tại :
http://code.google.com/p/php-sip/wiki/API
http://level7systems.co.uk/en/blog/Clic ... th+PHP-SIP


Đầu trang
 Xem thông tin cá nhân  
 
Hiển thị bài viết cách đây:  Sắp xếp theo  
Tạo chủ đề mới Gửi bài trả lời  [ 3 bài viết ] 

Múi giờ UTC + 7 Giờ


Đang trực tuyến

Đang xem chuyên mục này: Không có thành viên nào trực tuyến.1 khách.


Bạn không thể tạo chủ đề mới.
Bạn không thể trả lời bài viết.
Bạn không thể sửa những bài viết của mình.
Bạn không thể xóa những bài viết của mình.
Bạn không thể gửi tập tin đính kèm.

Tìm với từ khóa:
Chuyển đến:  
Powered by The Vietnam Asterisk User Group © 2008