Jabber клиент (xmpp) для мгновенного обмена сообщениями, NativeAPI внешняя компонента (ВК) для 1С (версия 3.0) платформы x32, x64 (работает на клиенте и сервере)

Внешняя компонента для 1С предприятие, для мгновенного обмена сообщениями, написана по технологии NativeAPI (не требует регистрации в системе как COM компоненты).
Это полноценный Jabber клиент для 1С (xmpp протокол). Работает на платформах x32 и x64 на клиенте и сервере, в том числе и на сервере приложений, в фоновом сеансе и регламентных заданиях.

Перейти к публикации

Комментарии
1. Дмитрий Шерстобитов (DitriX) 2555 24.10.15 08:25 Сейчас в теме
Во, вот теперь именно то, что нужно :) Огромное спасибо. И цену поставьте не 1$m, а 5 или 10, она достойна этого :)
46. Александр Закиров (sasha777666) 261 11.08.17 15:53 Сейчас в теме
(1) её когда-то можно было за 1 см скачать?
3. Сергей Филькин (FSerg) 63 27.10.15 18:48 Сейчас в теме
При попытке выполнить: Об.Соединиться();
платформа вылетает с ошибкой (Win 7 32bit Eng)
8.3.6.2100
(3) FSerg, Об.Создать("Сервер", "Порт", "Логин", "Пароль"); предварительно объявляли? Если да проверяйте внимательно параметры Логин, Пароль, Сервер, Порт, попробуйте с этими учетными данными предварительно авторизоваться с помощью обычного jabber клиента, авторизация проходит? Какой метод аутентификаци используется на сервере, PLAIN, SASL?
5. Сергей Филькин (FSerg) 63 10.11.15 13:49 Сейчас в теме
(4) Обработку запускал из вашего же демо-примера.
На сервере протокол точно не PLAIN, потому что хотел делать это модных сейчас Slack и HipChat.
Но в любом случае, какой бы протокол и ответ сервера не был - не очень клево что валится платформа.
(5) FSerg, исправил компоненту, добавил обработчики исключений - теперь не валит платформу, а также выдает сообщение об ошибке, напишите почту в личку, я вышлю Вам (и все кто качал пишите в личку или на почту с указанием логина на infostart отправлю) новую компоненту, чтобы не перекачивать платно тут.
7. Василий Тёркин (1С_Мастер) 63 22.12.15 17:01 Сейчас в теме
На линукс сервере компонента, к сожалению, подключаться отказывается. Жаль
(7) 1С_Мастер, Компонента писалась под Win x32, x64. Пока так и не смог добиться того, чтобы она заработала на сервере. И вообще пока не нашел ни одной компоненты xmpp которая работала бы на сервере.
(7) 1С_Мастер, Переработал компоненту, теперь работает и на сервере. Попробую теперь запустить ее на Linux.
10. zavedeev (zavedeev) 15.01.16 20:48 Сейчас в теме
(10) zavedeev, исходники не даю. Нигде не написано, что в архиве есть исходники или их Вам дадут.
12. Александр Тарасюк (Aletar) 18.02.16 05:58 Сейчас в теме
Добрый день.

Компонента работает. Но если имя пользователя на русском (у нас имя совпадает с учетной записью AD), то не происходит подключения к серверу (у нас openfire). При этом демонстрационная конфигурация говорит, что подключение выполнено, но при этом состояние оффлайн. Попытка подключения (кнопка Подключить) ситуацию не меняет. Если же при этом попробовать отправить сообщение, то платформа падает (версия 8.2.19.121).

Когда имя пользователя задано латиницей, все нормально.
(12) Aletar, добрый день. Я попробую разобраться в ситуации. Быть может дело в кодировке. Но это уже копаться надо в самой компоненте. Я напишу и выложу обновление как будет результат.
(12) Aletar, Проверено на jabber.ua совместно с TLS. Все работает прекрасно. Попробуйте зарегистрируйте там пользователей с русскими именами, код:

Компонента = ПолучитьМакетССервера(); //Получаем макет компоненты с сервера
	ИмяФайлаКомпоненты = ПолучитьИмяВременногоФайла("dll"); //Получаем имя файла в который сохраним компоненту
	Компонента.Записать(ИмяФайлаКомпоненты); //Сохраняем компоненту в файл
	ПодключитьВнешнююКомпоненту(ИмяФайлаКомпоненты, "j3321", ТипВнешнейКомпоненты.Native); //Подключаем компоненту
	Об = Новый("AddIn.j3321.JabberClient"); //Вызываем класс из компоненты
	
	Результат = Об.Создать("jabber.ua", "5222", "тест_май_джабер2@jabber.ua", "*************ПАРОЛЬ_Я_СКРЫЛ**********", Истина); // Создаем экземпляр Jabber клиента с шифрованием
	Об.ОтправитьСообщение("тест_май_джабер@jabber.ua", "Тестовое сообщение из 1С!");
	Результат = Об.ПолучитьСообщения(); // Обязательно получить сообщения прежде чем выходить в онлайн с помощью Об.Соединиться(), чтобы не потерять сообщения которые
	                                    // были отправлены нам в оффлайн. Команда Об.ПолучитьСообщения() выведет нас в онайн и сразу вернет список сообщений в "Резултат"
	Если ЗначениеЗаполнено(Результат) Тогда // Если есть какая-то строка, значит получили сообщения, будем обрабатывать
		Попытка
			МассивСообщений = ПеревестиСтрокуНаСервере(Результат); // Переводим получнную из компоненты строку в массив 1С	
			Для Каждого Сообщение Из МассивСообщений Цикл
				Лог = "Сообщение от: " + Сообщение.Отправитель + ", текст сообщения: " + Сообщение.Сообщение + Символы.ПС + Лог;
			КонецЦикла;
		Исключение
		КонецПопытки;
	КонецЕсли;
	
	Элементы.Подключиться.Доступность = Истина;
	Элементы.Отключиться.Доступность = Истина;
	Элементы.СписокПользователей.Доступность = Истина;
	Элементы.СостояниеКлиента.Доступность = Истина;
	Элементы.ОтправитьСообщение.Доступность = Истина;
	Элементы.Версия.Доступность = Истина;
Показать
14. it it (it@1c-usoft.ru) 20.02.16 12:56 Сейчас в теме
С talk.google.com не получается настроить. Кто то пробовал?
(14) it@1c-usoft.ru, Исправлено. Перекачайте компоненту будет работать с talk.google.com (не забудьте включить шифрование)
17. it it (it@1c-usoft.ru) 24.02.16 15:02 Сейчас в теме
Соединение проходит нормально.
Все функции работают.
Но.
К аккаунту на talk.google.com подключент через qip. Сообщения проходят. Но сообщения на hangouts не проходят.
В чем может быть проблема?
19. Алексей Б (windsurf) 30 15.05.16 20:39 Сейчас в теме
Спасибо за Вашу разработку! Получилось запустить компоненту, но сильно не хватает пары вещей:
1) инфы о статусе контактов (онлайн/офлайн) - не понятно кому можем писать, а кому бессмысленно
2) На jabber сервере, кроме логина контакта, хранится и его представление (удобочитаемое имя) - вот его бы тоже вытаскивать
(19) windsurf, я попробую что-нибудь придумать.
21. Константин Манычев (kostyaCD) 10.11.16 16:32 Сейчас в теме
Благодарю за компоненты и хотел бы узнать не поменялось ли что-то касательно Онлайн\Оффлайн. И интересует можно ли как-то отправлять свой статус на сервер, чтоб и остальные видели, что я в онлайне?
(21) kostyaCD, не поменялось ничего касательно оффлайн/онлайн, этот момент пока в разработке. По поводу статуса, клиент при подключении отправляет автоматически уведомление, что он онлайн и переходит в статус "Готов поболтать". Таким образом все видят что вы онлайн если подключены или оффлайн если нет.
23. Константин Манычев (kostyaCD) 22.11.16 13:14 Сейчас в теме
Хм... Странно, вроде подключаюсь и могу писать, а на другом устройстве все-равно в оффе. И еще хотел спросить есть ли способ с помощью этой компоненты добавлять пользователей в контакт лист? Не нашел что-то такого метода.
(23) Добавил функцию добавления пользователей в контакт лист. см. описание
24. Константин Манычев (kostyaCD) 24.11.16 12:20 Сейчас в теме
И еще хотел спросить. Есть свой сервере, маковский. Не удается получить список существующих пользователей, я так понимаю потому-что оно там должно у них подтягивать всех кто на этом сервере. И не получить/отправить сообщение. Схожая проблема есть у клиента PSI+, но Spark работает и вроде нормально с этим сервером. На самом деле не сильно разбираюсь во всех этих джабберах и хотел поинтересоваться, может что-то подскажете, что им на сервере подкрутить или как компоненту поднастроить?
(24) к сожалению на счет сервера не подскажу
27. sergej anonymous (ksv74) 86 08.12.16 23:20 Сейчас в теме
Под какую платформу файл выгрузки?
Не получается загрузить.
Ошибка "Не верный формат для загрузки информационной базы"
(27) 8.3 попробуйте последнюю версию платформы
29. Алексей Ру (rubezh) 13.12.16 13:30 Сейчас в теме
Подскажите, какие-нибудь параметры при отправке сообщений еще можно задавать? Интересует установка типа сообщения, что-то вроде type=>"chat". Потому как иначе выглядит как рассылка.
31. Алексей Ру (rubezh) 14.12.16 09:53 Сейчас в теме
(30) Здорово, спасибо! Новую версию как можно будет получить?
(31) Напишите почту в личку, получите компоненту
33. Информационно-технического развития Служба (SITR-utyos) 739 30.01.17 17:35 Сейчас в теме
Пробовал поиграться в тестовой базе. Выяснил, что не работает &насервере версия ВК x64.dll из архива. Та, что в dt в макете x64 - сообщения отправляет. Платформа 1С 8.3.9 x64, Windows server 2008 x64.

Так лучше будет может? )))
Процедура СоздатьНаСервере()
	Если 
		ПодключитьВнешнююКомпоненту("ОбщийМакет.JabCli64", "JabCli", ТипВнешнейКомпоненты.Native)
	Тогда
		Лог = "Компонента загружена" + Символы.ПС + Лог;
	Иначе
		Лог = "Ошибка при загрузке компоненты" + Символы.ПС + Лог;
		Возврат;
	КонецЕсли;
Показать
(33) 64x компонента предназначена только для работы &НаСервере если база запущена на сервере приложений 1С. И только в контексте &НаСервере. Если используется &НаСервере в файловом варианте или &НаКлиенте, не важно какая ОС x64 или x32 (даже если вы запустили это на x64 сервере) то использовать нужно x32 компоненту.
35. Информационно-технического развития Служба (SITR-utyos) 739 31.01.17 10:41 Сейчас в теме
(34)
64x компонента предназначена только для работы &НаСервере если база запущена на сервере приложений 1С.
Так и было. Речь о том, что в поставке получается две разные версии компоненты x64, одна из которых не работает (???).
(35) работают обе компоненты. Для работы брать dll в каталогах. Они самые актуальные.
36. Информационно-технического развития Служба (SITR-utyos) 739 01.02.17 08:32 Сейчас в теме
[quote]Версия 2.0

Переаботан алгоритм. Теперь не нудно вызывать процедуры Создать() и Уничтожить(), это делает конструктор с деструктором при подключении и отключении компоненты. Отлажена работа в фоновм задании и на сервере.[/quote]Правильно понимаю, что для компоненты x64 это тоже неактуально?
(36)
ы x64 это тоже неактуально?


Правильно. Описание актуально для обоих версий компоненты 64 и 32
ВНИМАНИЕ

Компонента х64 РАБОЧАЯ

в базе примере не поправлен вызов функции. Всегда внимательно читайте описание обновления. Было

Результат = Об.ОтправитьСообщение("test_my_jabber1@jabber.ru", "Тестовое сообщение из 1С!");


а нужно

Результат = Об.ОтправитьСообщение("test_my_jabber1@jabber.ru", "Тестовое сообщение из 1С!", "chat");




40. Igor Urinev (woodoo2garik) 16.02.17 16:06 Сейчас в теме
Не получается использовать компоненту, платформа 8.3.9.2170, клиентское приложение. При попытке выполнить ОтправитьСообщение или СписокПользователей результат одинаков: "Ошибка: Access violation at address 09AD24C0 in module 'JabberClient32.dll'. Read of address 0000002C". При вызове метода Создать - ошибка "Метод объекта не обнаружен".
В свойствах JabberClient32.dll указана версия 1.0.0.0, компонента получена с Инфостарта вчера.
(40)
Код в студию. Компонету как подключали? Просто взяли базу пример и попробовали понажимать кнопки? Если так то для начала в макетах базы примера замените компоненты на те что лежат файлами в папке, там актуальные. Сборка версии файла dll и версия компоненты разные вещи. Также рекомендую внимательно прочитать описание в теме.
42. Igor Urinev (woodoo2garik) 16.02.17 17:44 Сейчас в теме
Компонента взята из каталога, размер JabberClient32.dll 1387008 байт. Тестировал на демо-базе, компоненты в макетах заменил на скачанные с Инфостарта (архив получен по электронной почте), в коде указал путь к ним же и заменил адрес сервера и учётные данные на свои. Соединение отрабатывает: "Событие в компоненте на клиенте: Связь установлена 0 OK", но далее при вызове любого метода возвращается указанная выше ошибка. Из самодельной тестовой обработки получается то же самое.
Проверялось на Server 2008 x64 и Windows 7 x32.
(42) вы код так и не предоставили. Я по фотографии не лечу.
44. Igor Urinev (woodoo2garik) 17.02.17 11:56 Сейчас в теме
&НаКлиенте
Перем Об;

&НаКлиенте
Процедура Соединиться(Команда)

ПодключитьВнешнююКомпоненту("C:\ext\jabber\JabberClient32.dll", "JabCli32", ТипВнешнейКомпоненты.Native); //Подключаем компоненту
Об = Новый("AddIn.JabCli32.JabberClient"); //Вызываем класс из компоненты
Об.Сервер = "openfire.xxx.zzz.ru";
Об.Порт = 5222;
Об.Логин = "test@openfire.xxx.zzz.ru";
Об.Пароль = "987654321";
Об.Ресурс = "";
Об.ИспользоватьШифрование = Истина;
ВнутрСтрокаСМассивомСообщений = Об.ПолучитьСообщения(); // Обязательно получить сообщения в первую очередь чтобы не потерять сообщения которые были отправлены нам в оффлайн.
                                                                                                                                             // далее метод Об.Соединиться() не обязателен - клиент выходит на связь автомактически,
Если ЗначениеЗаполнено(ВнутрСтрокаСМассивомСообщений) Тогда // Если есть какая-то строка, значит получили сообщения, будем обрабатывать
                Попытка
                               МассивСообщений = ПеревестиСтрокуНаСервере(ВнутрСтрокаСМассивомСообщений); // Переводим получнную из компоненты строку в массив 1С            
                               Для Каждого Сообщение Из МассивСообщений Цикл
                                               Лог = "Сообщение от: " + Сообщение.Отправитель + ", текст сообщения: " + Сообщение.Сообщение + Символы.ПС + Лог;
                               КонецЦикла;
                Исключение
                КонецПопытки;
КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьСообщение(Команда)
                
                Результат = Об.ОтправитьСообщение("user1@openfire.xxx.zzz.ru", "Тестовое сообщение из 1С!", "chat");
                Если Результат Тогда
                               Лог = "Сообщение для успешно отправлено" + Символы.ПС + Лог;
                КонецЕсли;
                
КонецПроцедуры

&НаКлиенте
Процедура СписокПользователей(Команда)
                
                СписокПользователей.Очистить();
                Результат = Об.СписокПользователей();
                Если Значениезаполнено(Результат) Тогда
                               Массив = ПеревестиСтрокуНаСервере(Результат);
                               Для Каждого Юзер Из Массив Цикл
                                               СписокПользователей.Добавить(Юзер, Юзер);
                               КонецЦикла;
                КонецЕсли;
                
КонецПроцедуры


При выполнении ОтправитьСообщение() и СписокПользователей() Результат="Ошибка: Access violation at address 09BD24C0 in module 'JabberClient32.dll'. Read of address 0000002C"
Показать
(44)
Соединиться(Команда)


А если так, что говорит?

ПодключитьВнешнююКомпоненту("C:\ext\jabber\JabberClient32.dll", "JabCli32", ТипВнешнейКомпоненты.Native); //Подключаем компоненту
Об = Новый("AddIn.JabCli32.JabberClient"); //Вызываем класс из компоненты;
Об.Сервер = "openfire.xxx.zzz.ru";
Об.Порт = 5222;
Об.Логин = "test@openfire.xxx.zzz.ru";
Об.Пароль = "987654321";
Об.Ресурс = "";
Об.Подключиться();
Если Об.Онлайн Тогда
         Сообщить("Онлайн");
Иначе
        Сообщить("Оффлайн");
КонецЕсли;
Показать


Что сообщает? Больше чем уверен - Оффлайн.
Оставьте свое сообщение