0

每次有呼入时,我们需要调用包含主叫号码的 URL,我们使用的是 Grandstream UCM6204 PBX。

有一个名为 SendURL() 的函数可以通过 Asterisk 使用,我使用 PuTTy 连接到 Asterisk 但我不确定下一步该怎么做?

经过一番研究,我发现我无法通过 UCM 设备直接访问 Asterisk,这将不允许我们修改拨号计划。

是创建第三方应用程序与 AMI 通信并完成工作的唯一方法吗?这种情况下的问题是这个应用程序应该在线并且 24/7 工作。

我编写了 C# 代码来完成此操作,但它没有按预期工作。

    public FormMain()
    {
        InitializeComponent();

        AstCon = new ManagerConnection(ConfigurationManager.AppSettings["astHost"],
                int.Parse(ConfigurationManager.AppSettings["astPort"]),
                ConfigurationManager.AppSettings["astUser"], ConfigurationManager.AppSettings["astPass"]);

        AstCon.NewState += astCon_NewState;
        AstCon.ConnectionState += astCon_ConnectionState;

        try
        { 
        AstCon.Login();
        }
        catch (Exception ex)
        {
            MessageBox.Show(
                $"Error connecting to {ConfigurationManager.AppSettings["astHost"]}. Error: {ex.Message}");

            // Terminate Application
            Application.Exit();
        }

    }


    private void astCon_NewState(object sender, NewStateEvent e)
    {


        if (e.ChannelStateDesc.ToLower() == "ring" && e.Connectedlinenum == "6401")
        {


                if (ConfigurationManager.AppSettings["ScreenPopPath"] != null)
                {
                    var runString = ConfigurationManager.AppSettings["ScreenPopPath"];
                    runString = runString.Replace("{callerid-number}", e.CallerId);


                    Process.Start(runString);
                }


            }

    }

    void astCon_ConnectionState(object sender, ConnectionStateEvent e)
    {
        connectionStateLbl.Text = AstCon.IsConnected() ? $"Connected to: {AstCon.Username}@{AstCon.Hostname}" : $"Disconnected, reconnecting to {AstCon.Hostname}...";
    }
}
4

1 回答 1

1

您可以使用 CURL 功能。但是对于调用它需要了解 PBX 拨号方案和挂钩

您可以使用外部 AMI 应用程序。

您可以读取数据库中的 CEL 事件。

于 2019-06-25T14:46:45.280 回答