- Что такое 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 расширяется по запросам пользователей, поэтому, если у вас есть какие-то предложения или вопросы - пишите к нам в онлайн службу поддержки. Мы внимательно читаем все предложения и оперативно на них отвечаем.