如何以编程方式点亮 Cisco IP 电话可视消息等待指示灯(VMWI 或 MWI)?
对于 sipwiz 的回答:
IP地址10.1.1.2=> 是我将在其中发送 SIP 通知消息的本地 IP
IP地址10.1.1.9=> 是 IP 地址思科电话我将发送 SIP 消息
我发送 SIP 消息的 Cisco 电话确实“关心”我的消息,并且我
当我尝试从 Cisco 电话获取响应消息时出现异常:“An
现有连接被远程主机强制关闭”。
实际上,直接向 Cisco Phone 发送 SIP 消息来改变其行为似乎并不正确。因为它容易出现许多安全违规行为。而且我认为 Cisco 不会允许这样做。
“sipwiz”我需要在 Cisco Phone 上进行额外配置才能使
这个功能有用吗?你真的能够让它在真实的环境中工作吗
思科电话?如果是这样,您在电话上进行了哪些额外配置?
下面是一些构建虚拟 SIP NOTIFY 请求的粗略代码,该请求可以发送到 Cisco IP 电话(仅使用 Cisco 7960 进行测试),从而允许设置和取消设置可视消息等待指示器。
您需要更改 sip:[电子邮件受保护] /cdn-cgi/l/email-protection到您的 Cisco 电话可识别的 SIP URI。当然,还要根据需要调整 IP 地址和端口。
Update:更新了代码示例,使其更清楚 IP 地址需要出现在 SIP 请求中的位置。
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] /cdn-cgi/l/email-protection", 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();
}
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)