Визуальный индикатор ожидания сообщения Cisco (VMWI или MVI)

Как программно включить визуальный индикатор ожидающего сообщения IP-телефонов Cisco (VMWI или MWI)?

Ответ для sipwiz:

IP-адрес 10.1.1.2 => — это локальный IP-адрес, на который я буду отправлять SIP-уведомления.

IP-адрес 10.1.1.9 => — это IP-адрес телефона Cisco, на который я отправлю SIP-сообщение

Телефон Cisco, которому я отправляю сообщение SIP, «заботится» о моих сообщениях, и я получил исключение, когда пытаюсь получить ответное сообщение от телефона Cisco: «Существующее соединение было принудительно закрыто удаленным хостом».

На самом деле кажется неправильным напрямую отправлять SIP-сообщение на телефон Cisco, чтобы изменить его поведение. Потому что это открыто для многих нарушений безопасности. И я думаю, что Cisco этого не допустит.

«sipwiz» нужно ли выполнять дополнительную настройку телефона Cisco, чтобы эта функция работала? Вы действительно можете заставить его работать на реальном телефоне Cisco? Если да, то какие дополнительные настройки вы делаете на телефоне?


person Hippias Minor    schedule 21.01.2014    source источник
comment
Вы можете сделать это, отправив на телефон запрос SIP NOTIFY. Если это то, что вам нужно, я могу привести пример того, как это сделать в коде.   -  person sipsorcery    schedule 24.01.2014
comment
да. Это ОКЕЙ для меня. На самом деле я предпочитаю SIP Message вместо Custom Cisco API.   -  person Hippias Minor    schedule 24.01.2014


Ответы (1)


Ниже приведен грубый код, который создает фиктивный запрос SIP NOTIFY, который можно отправить на IP-телефон Cisco (проверено только с Cisco 7960), что позволит установить и отключить визуальный индикатор ожидающего сообщения.

Вам нужно будет изменить sip:[email protected] на 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:[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();
    }
}
person sipsorcery    schedule 27.01.2014
comment
Спасибо сипвиз. Но, похоже, это не работает в моем случае. Можно посмотреть подробнее по моему вопросу. - person Hippias Minor; 27.01.2014
comment
Я проверил на своем рабочем телефоне Cisco 7941, и он работает. Для его работы на телефоне Cisco должна быть установлена ​​прошивка SIP. Если у вас установлено программное обеспечение Cisco Call Manager по умолчанию, то SIP-запросы не будут пониматься телефоном. Кроме того, на телефоне не требуется никакой специальной настройки, и нет никакой дополнительной безопасности вокруг телефона, принимающего запросы SIP NOTIFY. - person sipsorcery; 28.01.2014
comment
У меня Cisco 7942. Попробую поставить SIP прошивку и проверить - person Hippias Minor; 28.01.2014
comment
Кажется, у меня нет возможности установить прошивку SIP на каждый телефон Cisco. - person Hippias Minor; 30.01.2014
comment
Я должен иметь дело с Cisco API. Но вы получили награду: так как кажется, что никто не интересуется моим вопросом.... - person Hippias Minor; 30.01.2014
comment
Честно говоря, вы пометили вопрос SIP, что указывало бы на то, что вы использовали свой телефон Cisco с прошивкой SIP. Я бы не стал давать ответ, если бы вы не хотели SIP-решение, поскольку я понятия не имею, как это сделать с помощью Skinny или есть ли на телефонах вообще какой-либо веб-API (я не верю, что есть но ни разу не заглядывал). - person sipsorcery; 30.01.2014