Asterisk 与 Symfony2 应用程序的集成

Asterisk Integration with Symfony2 application

我是 Asterisk 的新手,它已经安装并且我有所有主机详细信息,我需要的是如何在我的 symfony2 web 应用程序中使用 Asterisk;有人有想法或者他以前做过这个?

编辑

这是我应该在我的网络应用程序中做的事情的列表:

  1. 创建 Stasis 应用程序
  2. 接听电话。
  3. 播放已经安装在asterisk服务器上的“哔”声
  4. 允许用户输入美国格式的 phone 号码。
  5. 创建一个方法来验证 phone 号码。
  6. 挂断。

编辑 1

我从控制器中的那个小代码开始:

use Pastum\Component\PAMI\Client\Client;

/* These are (in order) the options we can pass to PAMI client:
 *
 * The hostname or ip address where Asterisk AMI is listening
 * The scheme can be tcp:// or tls://
 * The port where Asterisk AMI is listening
 * Username configured in manager.conf
 * Password configured for the above user
 * Connection timeout in milliseconds
 * Read timeout in milliseconds
 */
 $options = array(
'host' => '127.0.0.1',
'scheme' => 'tcp://',
'port' => 9999,
'username' => 'admin',
'secret' => 'mysecret',
'connect_timeout' => 10000,
'read_timeout' => 10000
);

$client = new Client($options);

// Open the connection
$client->open();

// Close the connection
$client->close();

但我不知道在查看页面或连接后可以做什么?

以及如何使用代码执行需要的命令?!

请看一下AGI, AMI and ARI界面。它们是 language/platform 不可知论者的方式 communicate/integrate 来自外部应用程序的星号。

也有一些很棒的 PHP 星号库。

PAGI, PAMI, PHPARI

所有这些库都可以通过 composer 获得。您可以像其他 PHP 包一样将它与 Symfony2 一起使用。

我在 Symfony 应用程序中使用了 Asterisk。我们是如何做到的:

  • 自定义 class 用于连接到 AMI 并执行所需的命令,例如发起呼叫、耳语、挂断或收听
  • 如果需要,将您的星号数据库添加为第二个数据库,生成实体。

你最大的问题是如何传输声音,一种方法是使用flash。

Phone 数字验证 - 你会在 GOOGLE.

上找到很多解决方案

更详细的说明:

  • 为 Asterisk 创建一个包,在那里创建您的实体和 Asterisk 服务 Class
  • 您需要一个控制器 - 它将处理您的请求并调用服务。例如,您必须挂断电话,您需要控制器中的操作和服务中的操作。在控制器中,您初始化服务并从将挂断电话的服务中调用挂断操作。

    public function hangupAction(Request $request)
    {
        $asteriskService = // Get the asterisk service
        $asteriskService->hangup();
    
        return new JsonReponse();
    }
    

    // 来自服务的代码

    public function hangup($agent)
    {
        fputs($this->getSocket(), "Action:Hangup\r\n");
        fputs($this->getSocket(),     "Channel:/^SIP/".$agent."-.*$/\r\n\r\n");
        fclose($this->getSocket());
    }
    

您可以尝试这个包 https://github.com/ryzhov/asterisk-bundle,但它通过 asterisk AMI 接口(5038 tcp 端口)连接用于请求和事件,而不是 stasis。

此处的代码示例https://github.com/ryzhov/example-asterisk-ami