Как отправить сообщение в MyChat из внешней программы или пример использования MyChat Integration API

  1. Что такое MyChat Integration API и зачем он нужен?
  2. Как отправить сообщение в чат для пользователя?
  3. Пример на Delphi XE3
  4. Как и где это можно применить?

 

1. Что такое MyChat Integration API и зачем он нужен?


Во многих компаниях MyChat используется как вспомогательная программа для организации корпоративного общения и обмена файлами. Но хотелось бы не только пользоваться готовой программой, но и меть возможность встроить её в другие программы, которые используются в компании.

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

Как раз для этой задачи и создан механизм MyChat Integration API. Это обычная DLL библиотека, которую вы можете подключить к вашей программе на любом языке программирования и вызывать оттуда нужные функции, чтобы иметь возможность отправлять сообщения непосредственно в MyChat.

 

2. Как отправить сообщение в чат для пользователя?


Для этого необходимо знать IP адрес и порт MyChat сервера.

Проще всего посмотреть их на уже работающем сервере чата MyChat , в разделе "Настройки" - "Сеть":

Выбор сетевого интерфейса MyChat

В ниспадающем списке "Привязка сервера к IP (bind)" отображаются все доступные IP адреса сетевых интерфейсов компьютера, на котором работает MyChat Server. Порт указан в этом же окне, обычно его номер - 2004. Соединяться следует на тот адрес, который выбран в ниспадающем списке, если же выбрано "слушать всё", то тогда можно соединяться на любой адрес, который есть в списке.

Итак, с адресом и портом сервера разобрались, теперь переходим в раздел настроек программы под названием "Общие":

Генерация ключа для взаимодействия со сторонним ПО

Здесь как раз и включается доступ к технологии интеграции. Необходимо установить галочку "Включить поддержку интеграции со сторонним программным обеспечением" и ввести придуманный ключ или сгенерировать его. Ключ - это пароль на доступ к серверу из внешней DLL библиотеки, с помощью которой мы будем отправлять сообщения. Пароль нужен для того, чтобы к серверу мог подключиться только тот, кому это разрешено, даже если сервер имеет выход в Интернет и к нему подключаются не только пользователи вашей локальной сети.

С серверными настройками покончено, теперь перейдём к самому интересному, написанию тестовой программы для отправки сообщения.

 

3. Пример на Delphi XE3


Строго говоря, программа может быть написана на чём угодно, потому что используется стандартный для всех программ в Windows механизм динамических библиотек - DLL. Но автору статьи ближе всего среда программирования Delphi, поэтому пример будет именно на ней.

Наше приложение будет консольным, без интерфейса пользователя. Запускаем среду программирования и выбираем в главном меню "File" - "New" - "Other":

Пример создания DLL в Delphi XE3

И из открывшегося окна выбираем "Console Application":

Выбор типа приложения при создании DLL

Поскольку для нашей первой программы не нужен никакой графический интерфейс, консольное приложение подойдёт лучше всего.

Нам понадобится библиотека mychat.dll, благодаря которой мы сможем подключиться к серверу MyChat и отправить текстовое сообщение нужному нам пользователю. Скачаем её с официального сайта MyChat.

В простом примере мы проверим, онлайн ли нужный нам пользователь, и, если да, отправим ему сообщение, состоящее из двух строчек.

Текст программы (скачать можно здесь):

        // MyChat Integration API sample
        // Copyright (c) 2012-2013 by Alexey Pikurov / Network Software Solutions
        // http://www.nsoft-s.com/aboutmychat.html
        // support @nsoft-s.com
        //
        // Тестировалось на Delphi 7 и Delphi XE2, Delphi XE3
        // Поддержка, вопросы, комментарии: http://www.feedback.nsoft-s.com
        //
        // 02.01.2013
        //
        // Описание:
        // mychatIsUserOnline       - проверка, подключен ли пользователь с указанным
        // UIN к серверу или нет;
        //
        // mychatSendPrivateMessage - отправить пользователю приватное сообщение.
        // Получатель может быть в офлайн.
        //
        // Коды возврата для функций MyChat Integration API:
        //
        // 0 - всё Ок
        // 1 - UIN-а не существует
        // 2 - запрашиваемый UIN находится в онлайн
        // 3 - запрашиваемый UIN отключен от сервера
        // 4 - MyChat Integration API отключен
        // 5 - неправильный ключ для работы с MyChat Integration API
        //
        // Важно!
        // в функции указывается, помимо IP адреса сервера и порта, ещё и ключ, который
        // должен совпадать с ключом, указанным в настройках сервера (сервер MyChat,
        // "Настройки" -> "Общие" -> "Включить поддержку интеграции со сторонним
        //программным обеспечением"

        program TestMyChatDLL;

        {$APPTYPE CONSOLE}

        uses Windows;

        var
            // объявление импортируемых функций
            // проверка, в сети ли указанный пользователь
            mychatIsUserOnline: function(sIP: PAnsiChar; iPort: dword; sServerKey: PAnsiChar; iUIN:dword):dword;stdcall;

            // отправка сообщения указанному пользователю
            mychatSendPrivateMessage: function(sIP: PAnsiChar; iPort: dword; sServerKey: PAnsiChar; iUIN:dword; sMsg: PAnsiChar):dword;stdcall;
            LibHandle: THandle;

        begin
            // чистим переменные от мусора
            @mychatIsUserOnline       := nil;
            @mychatSendPrivateMessage := nil;
    
            // пытаемся загрузить библиотеку
            LibHandle := LoadLibrary('mychat.dll');
    
            // если все Ок
            if LibHandle >= 32 then begin
                // ...то пытаемся получить адрес функции в библиотеке
                @mychatIsUserOnline := GetProcAddress(LibHandle, 'mychatIsUserOnline');

                // если и здесь все Ок
                if @mychatIsUserOnline <> nil then
                    // ...то вызываем эту функцию и показываем результат. 74 - UIN пользователя,
                    // у вас он может быть другим, смотрите в "Управлении пользователями" на сервере
                    writeln(mychatIsUserOnline('192.168.1.7', 2004, 'iddqd' , 74));
        
                @mychatSendPrivateMessage := GetProcAddress(LibHandle, 'mychatSendPrivateMessage');
    
                // если и здесь все OK}
                if @mychatSendPrivateMessage <> nil then
                //...то вызываем эту функцию и показываем результат
                writeln(mychatSendPrivateMessage('192.168.1.7', 2004, 'iddqd' , 74, 'Строка №1[CRLF]...И строка №2'));
            end;

            // ...и не забываем освободить память и выгрузить DLL
            FreeLibrary(LibHandle);
    
            readln;
        end.
    

В примере вызываются всего две функции. Сначала проверяется, находится ли в сети пользователь с UIN 74 (функция mychatIsUserOnline), а потом, если нужный нам пользователь онлайн, то отправляется сообщение из двух строчек (функция mychatSendPrivateMessage).

Полученное сообщение на клиенте выглядит вот так:

Пример принятого сообщения от внешней DLL

Приходит оно от имени встроенного робота, Elisa, имя которого и аватар можно сменить в настройках сервера MyChat.

 

4. Как и где это можно применить?


Сфера применения этой технологии огромна. Вы можете отправлять сообщения в MyChat из любой программы или скрипта, где есть возможность использования стандартных DLL библиотек. На любом языке программирования. Из CRM/ERP систем, из простых консольных программ, созданных для своих нужд, в "вертушках" CMD/BAT файлов на серверах, которые занимаются выполнением регламентных работ по расписанию.

Причём, даже если пользователя не будет в сети, сообщения всё равно будут ему переданы в целости и сохранности, как только он подключится к серверу, с указанием времени, когда они были отправлены.

Используйте MyChat Integration API для организации автоматической отправки сообщений и плотной интеграции программных систем, которые используются в вашей компании!

API расширяется по запросам пользователей, поэтому, если у вас есть какие-то предложения или вопросы - пишите к нам в онлайн службу поддержки. Мы внимательно читаем все предложения и оперативно на них отвечаем.

Служба поддержки