Sip Cisco可视消息等待指示器(VMWI或MVI)

Sip Cisco可视消息等待指示器(VMWI或MVI),sip,voip,cisco,Sip,Voip,Cisco,如何以编程方式点亮Cisco IP电话可视消息等待指示灯(VMWI或MWI) 对于sipwiz回答: IP地址10.1.1.2=>是本地IP,我将在其中发送SIP Notify消息 IP地址10.1.1.9=>是我将发送SIP消息的思科手机的IP地址 我发送SIP消息的Cisco手机确实“关心”我的消息,我 在我尝试从Cisco手机获取响应消息时出现异常:“一个 现有连接已被远程主机强制关闭” 实际上,直接向Cisco手机发送SIP消息以改变其行为似乎是不对的。因为这可能会导致许多安全违规。我认

如何以编程方式点亮Cisco IP电话可视消息等待指示灯(VMWI或MWI)

对于sipwiz回答:

IP地址10.1.1.2=>是本地IP,我将在其中发送SIP Notify消息

IP地址10.1.1.9=>是我将发送SIP消息的思科手机的IP地址

我发送SIP消息的Cisco手机确实“关心”我的消息,我 在我尝试从Cisco手机获取响应消息时出现异常:“一个 现有连接已被远程主机强制关闭”

实际上,直接向Cisco手机发送SIP消息以改变其行为似乎是不对的。因为这可能会导致许多安全违规。我认为Cisco不会允许这样做

“sipwiz”我是否需要在Cisco手机上进行额外配置才能 这个功能有用吗?你真的能让它在真正的机器上工作吗 思科电话?如果是这样,你在电话里会做什么样的额外配置


下面是一些粗糙的代码,它构造了一个虚拟SIP NOTIFY请求,可以发送到Cisco IP电话(仅使用Cisco 7960进行测试),允许设置和取消设置可视消息等待指示器

您需要更改sip:user@server.com连接到Cisco手机识别的SIP URI。当然,还可以根据需要调整IP地址和端口

更新:更新了代码示例,使其更清楚地显示SIP请求中IP地址的位置

using System;
using System.Collections.Generic;
using System.Net;
using System.Net.Sockets;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Cisco MWI Test Console:");

        string setMWIRequest =
            "NOTIFY {0} SIP/2.0\r\n" +
            "Via: SIP/2.0/UDP {1}:{2};branch=z9hG4bK{3}\r\n" +
            "To: <{0}>\r\n" +
            "From: <{0}>\r\n" +
            "Call-ID: {4}\r\n" +
            "CSeq: 1 NOTIFY\r\n" +
            "Max-Forwards: 70\r\n" +
            "Contact: {1}:{2}\r\n" +
            "Content-Length: {5}\r\n" +
            "Content-Type: application/simple-message-summary\r\n" +
            "Event: message-summary\r\n" +
            "\r\n" +
            "{6}";

        string mwiBody = "Messages-Waiting: no"; // Change to no to unset MWI.

        var localSIPEP = new IPEndPoint(IPAddress.Parse("192.168.33.116"), 5091);
        Socket udpSocket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);
        udpSocket.Bind(localSIPEP);

        setMWIRequest = String.Format(setMWIRequest, "sip:user@server.com", localSIPEP.Address.ToString(), localSIPEP.Port, Guid.NewGuid().ToString().Replace("-", ""), Guid.NewGuid().ToString().Replace("-", ""), mwiBody.Length, mwiBody);

        byte[] buffer = Encoding.UTF8.GetBytes(setMWIRequest);

        Console.WriteLine("Sending to Cisco:");
        Console.WriteLine(setMWIRequest);

        udpSocket.SendTo(buffer, new IPEndPoint(IPAddress.Parse("192.168.33.155"), 5060));

        byte[] recvBuffer = new byte[4096];
        int bytesRead = udpSocket.Receive(recvBuffer);

        Console.WriteLine(Encoding.UTF8.GetString(recvBuffer.Take(bytesRead).ToArray()));

        Console.ReadLine();
    }
}
使用系统;
使用System.Collections.Generic;
Net系统;
使用System.Net.Sockets;
使用System.Linq;
使用系统文本;
使用System.Threading.Tasks;
班级计划
{
静态void Main(字符串[]参数)
{
Console.WriteLine(“Cisco MWI测试控制台:”);
字符串setMWIRequest=
“通知{0}SIP/2.0\r\n”+
“Via:SIP/2.0/UDP{1}:{2};branch=z9hG4bK{3}\r\n”+
“发送至:\r\n”+
“发件人:\r\n”+
“调用ID:{4}\r\n”+
“CSeq:1通知\r\n”+
“最大转发数:70\r\n”+
“联系人:{1}:{2}\r\n”+
“内容长度:{5}\r\n”+
“内容类型:应用程序/简单消息摘要\r\n”+
“事件:消息摘要\r\n”+
“\r\n”+
"{6}";
string mwiBody=“Messages Waiting:no”;//更改为no以取消设置MWI。
var localSIPEP=new-IPEndPoint(IPAddress.Parse(“192.168.33.116”),5091);
Socket udpSocket=新套接字(AddressFamily.InterNetwork,SocketType.Dgram,ProtocolType.Udp);
udpSocket.Bind(localSIPEP);
setMWIRequest=String.Format(setMWIRequest,“sip:user@server.com,localSIPEP.Address.ToString(),localSIPEP.Port,Guid.NewGuid().ToString().Replace(“-”,”),Guid.NewGuid().ToString().Replace(“-”,”),mwiBody.Length,mwiBody);
byte[]buffer=Encoding.UTF8.GetBytes(setMWIRequest);
Console.WriteLine(“发送到Cisco:”);
控制台写入线(setMWIRequest);
udpSocket.SendTo(缓冲区,新的IPEndPoint(IPAddress.Parse(“192.168.33.155”),5060));
字节[]recvBuffer=新字节[4096];
int bytesRead=udpSocket.Receive(recvBuffer);
WriteLine(Encoding.UTF8.GetString(recvBuffer.Take(bytesRead.ToArray());
Console.ReadLine();
}
}

您可以通过向手机发送SIP NOTIFY请求来完成此操作。如果这就是你想要的,我可以提供一个如何用代码实现的例子。是的。对我来说没问题。实际上我更喜欢SIP消息而不是自定义Cisco API。谢谢sipwiz。但对我来说,这似乎不起作用。可以看到我问题的更多细节。我在我的Cisco 7941工作电话上进行了测试,它工作正常。您必须在Cisco手机上安装SIP固件才能正常工作。如果您有默认的Cisco Call Manager软件,则手机将无法理解SIP请求。除此之外,手机上不需要特殊配置,并且接受SIP NOTIFY请求的手机周围没有额外的安全措施。我有Cisco 7942。将尝试安装SIP固件并检查我似乎没有机会在每部Cisco手机上安装SIP固件。我应该使用Cisco API。但你得到了赏金:因为似乎没有人对我的问题感兴趣。。。。