首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >向Ozeki Voip SDK注册电话线阻止电话铃声

向Ozeki Voip SDK注册电话线阻止电话铃声
EN

Stack Overflow用户
提问于 2017-11-08 11:59:01
回答 1查看 596关注 0票数 0

我正在使用Ozeki.VoIP.SDK来处理我们的Elastix系统中的传入VoIP呼叫。我想要做的是在我的应用程序中读取和显示有关来电的信息,让桌面电话也响起来。

问题是,当我注册从VoIP池到Ozeki控制器的电话线时,到该线路的来电将不再在我的桌面电话上响起。但是当我不注册那条电话线时,当它接到电话时,我的办公桌电话就会再次响起来。

我不知道为什么Ozeki会阻止我在应用程序中看到的调用。

代码语言:javascript
复制
    private ISoftPhone _softphone;
    private Dictionary<string,IPhoneLine> _phoneLines;

    public Softphone()
    {
        _softphone = SoftPhoneFactory.CreateSoftPhone(IP_ADDRESS, MIN_PORT, MAX_PORT, SIP_PORT);
        _softphone.ChangeNATSettings(Ozeki.Network.Nat.NATTraversalMethodType.NONE, "", "", "");
        _softphone.IncommingCall += softphone_IncommingCall;
        _phoneLines = new Dictionary<string, IPhoneLine>();
    }
    public bool IsRegistered(string username)
    {
        return (_phoneLines.Keys.Contains(username));
    }
    public void Register(SIPAccount account)
    {
        if (IsRegistered(account.UserName))
        {
            Unregister(account);
            Thread.Sleep(1000);
        }
        //throw new Exception(string.Format("The account with username={0} already registered.", account.UserName));

        // With the SIP account and the NAT configuration, we can create a phoneline.
        IPhoneLine phoneLine = _softphone.CreatePhoneLine(account);
        // If our phoneline is created, we can register that.
        _softphone.RegisterPhoneLine(phoneLine);

        _phoneLines.Add(account.UserName, phoneLine);
    }
    public void Unregister(SIPAccount account)
    {
        IPhoneLine phoneLine = _softphone.CreatePhoneLine(account);
        _phoneLines.Remove(account.UserName);
        _softphone.UnregisterPhoneLine(phoneLine);
    }

    private void DispatchAsync(Action action)
    {
        var task = new WaitCallback(o => action.Invoke());
        ThreadPool.QueueUserWorkItem(task);
    }

    private void softphone_IncommingCall(object sender, VoIPEventArgs<IPhoneCall> e)
    {
        DispatchAsync(() =>
        {
            onIncomingCall(e);
        });
    }
    private void onIncomingCall(VoIPEventArgs<IPhoneCall> e)
    {
        if (IncomingCall != null)
            IncomingCall(this, e);
    }

以前有人见过这种行为吗?毫无线索。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-11-19 09:37:36

在mjwills提到的链接之后,我发现这是VoIP系统的一种已知行为,它的解决方法是为每一行定义一条跟随行,并使应用程序注册仅限于跟踪行,而不是由台式电话注册的行。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/47179157

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档