Индикатор визуального ожидания сообщения Cisco ( VMWI или MVI)
Как я могу программно подсвечивать индикатор ожидания визуального сообщения IP-телефонов Cisco (VMWI или MWI)?
Для sipwiz Ответ:
IP-адрес 10.1.1.2 => - это локальный IP-адрес, на который я отправлю сообщение SIP Notify.
IP-адрес 10.1.1.9 => - это IP-адрес телефона Cisco, на который я отправлю сообщение SIP
Телефон Cisco, которому я отправляю сообщение SIP, "заботится" о моих сообщениях, и я получил исключение, когда я пытаюсь получить ответное сообщение от телефона Cisco:"Существующее соединение было принудительно закрыто удаленным хостом".
На самом деле, по-видимому, он не вправе напрямую отправлять SIP-сообщение на телефон Cisco для изменения своего поведения. Потому что оно открыто для многих нарушений безопасности. И я думаю, что Cisco не допустит этого.
"sipwiz" мне нужно сделать дополнительную настройку на Cisco Phone, чтобы эта функция работала? Вы действительно можете заставить его работать на реальном телефоне Cisco? Если да, то какие дополнительные настройки вы делаете на телефоне?
1 ответ
Ниже приведен некоторый грубый код, который создает фиктивный запрос SIP NOTIFY, который можно отправить на IP-телефон Cisco (тестируется только с Cisco 7960), что позволит устанавливать и сбрасывать визуальный индикатор ожидания сообщения.
Вам нужно будет изменить sip:user@server.com на SIP URI, который распознает ваш телефон Cisco. А также, конечно, настройте IP-адреса и порты по мере необходимости.
Обновление: обновлен пример кода, чтобы было немного понятнее, где 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: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();
}
}