- Что такое MyChat Integration API и зачем он нужен?
- Как отправить сообщение в чат для пользователя?
- Пример на Delphi XE3
- Как и где это можно применить?
1. Что такое MyChat Integration API и зачем он нужен?
Во многих компаниях MyChat используется как вспомогательная программа для организации корпоративного общения и обмена файлами. Но хотелось бы не только пользоваться готовой программой, но и меть возможность встроить её в другие программы, которые используются в компании.
Согласитесь, было бы здорово отправлять уведомления администраторам, когда закончили делаться резервные копии на удалённых серверах, а бухгалтерам - сообщения о том, что получены выписки по клиент-банку. Информировать менеджеров по продажам, что необходимый товар уже есть на складе и его можно предлагать клиентам. Причём всё это - в автоматическом режиме.
Как раз для этой задачи и создан механизм MyChat Integration API. Это обычная DLL библиотека, которую вы можете подключить к вашей программе на любом языке программирования и вызывать оттуда нужные функции, чтобы иметь возможность отправлять сообщения непосредственно в MyChat.
2. Как отправить сообщение в чат для пользователя?
Для этого необходимо знать IP адрес и порт MyChat сервера.
Проще всего посмотреть их на уже работающем сервере чата MyChat , в разделе "Настройки" - "Сеть":

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

Здесь как раз и включается доступ к технологии интеграции. Необходимо установить галочку "Включить поддержку интеграции со сторонним программным обеспечением" и ввести придуманный ключ или сгенерировать его. Ключ - это пароль на доступ к серверу из внешней DLL библиотеки, с помощью которой мы будем отправлять сообщения. Пароль нужен для того, чтобы к серверу мог подключиться только тот, кому это разрешено, даже если сервер имеет выход в Интернет и к нему подключаются не только пользователи вашей локальной сети.
С серверными настройками покончено, теперь перейдём к самому интересному, написанию тестовой программы для отправки сообщения.
3. Пример на Delphi XE3
Строго говоря, программа может быть написана на чём угодно, потому что используется стандартный для всех программ в Windows механизм динамических библиотек - DLL. Но автору статьи ближе всего среда программирования Delphi, поэтому пример будет именно на ней.
Наше приложение будет консольным, без интерфейса пользователя. Запускаем среду программирования и выбираем в главном меню "File" - "New" - "Other":

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

Поскольку для нашей первой программы не нужен никакой графический интерфейс, консольное приложение подойдёт лучше всего.
Нам понадобится библиотека 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).
Полученное сообщение на клиенте выглядит вот так:

Приходит оно от имени встроенного робота, Elisa, имя которого и аватар можно сменить в настройках сервера MyChat.
4. Как и где это можно применить?
Сфера применения этой технологии огромна. Вы можете отправлять сообщения в MyChat из любой программы или скрипта, где есть возможность использования стандартных DLL библиотек. На любом языке программирования. Из CRM/ERP систем, из простых консольных программ, созданных для своих нужд, в "вертушках" CMD/BAT файлов на серверах, которые занимаются выполнением регламентных работ по расписанию.
Причём, даже если пользователя не будет в сети, сообщения всё равно будут ему переданы в целости и сохранности, как только он подключится к серверу, с указанием времени, когда они были отправлены.
Используйте MyChat Integration API для организации автоматической отправки сообщений и плотной интеграции программных систем, которые используются в вашей компании!
API расширяется по запросам пользователей, поэтому, если у вас есть какие-то предложения или вопросы - пишите к нам в онлайн службу поддержки. Мы внимательно читаем все предложения и оперативно на них отвечаем.

