2014-01-21 19 views
1

如何以编程方式照亮思科IP电话可视消息等待指示器(VMWI或MWI)?思科可视消息等待指示器(VMWI或MVI)

对于sipwiz答:

IP地址10.1.1.2 =>是本地的IP中,我将发送SIP NOTIFY消息

IP地址10.1.1.9 =>为IP地址思科电话,我将发送SIP消息

我发送SIP消息的Cisco电话d oes“关心”我的消息,并且我尝试从Cisco Phone获得响应消息时发生异常:“一个 现有连接被远程主机强制关闭”。

Actully它似乎没有权利直接发送SIP消息,思科电话改变其behaviour.Because它是开放了许多安全violations.And我认为思科将不允许这样做。

“sipwiz”我是否需要在Cisco电话上进行额外配置才能使 此功能有效?你真的能够在真正的 思科电话上工作吗?如果是这样,在手机上做什么样的额外配置?

+0

您可以通过向手机发送SIP NOTIFY请求来完成此操作。如果这就是你想要的,我可以提供一个如何在代码中完成的例子。 – sipwiz

+0

是的。对我来说这是OKEY。其实我更喜欢SIP消息而不是自定义思科API。 –

回答

1

下面是构造一个虚设SIP NOTIFY请求可被发送到一个思科IP电话(仅与Cisco 7960测试),使该可视消息等待指示器被设置和取消一些粗代码。

您需要将sip:[email protected]更改为思科手机可识别的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:[email protected]", 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(); 
    } 
} 
+0

谢谢sipwiz。但它似乎不适用于我的情况。可以在我的问题上看到更多细节。 –

+0

我在我的思科7941工作电话上测试过,它可以工作。您必须在您的思科电话上安装SIP固件才能工作。如果您有默认的Cisco Call Manager软件,则SIP请求将不被电话理解。除此之外,在电话上不需要特殊配置,并且在接受SIP NOTIFY请求的电话周围没有额外的安全措施。 – sipwiz

+0

我有Cisco 7942.将尝试安装SIP固件并检查 –