1C + jabber

0. 26 17.03.12 10:21 Сейчас в теме
Использование протокола xmpp для информационных сообщений из 1С без подключения внешних dll.

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

Комментарии
В избранное Подписаться на ответы Сортировка: Древо развёрнутое
Свернуть все
1. cool.vlad4 45 17.03.12 10:21 Сейчас в теме
А я для пыха использую http://code.google.com/p/xmpphp/
- клиентам часто требуется организовать уведомления о заказах с интернет магазинов. Собственно jabber для этого очень даже.
То, что xmpp компоненты вешают 1С, - возможная причина частый опрос клиентов сервером (на проверку соединения). Тут либо надо отключать это на сервере, либо урезать функционал компоненты. Другая причина - неправильное освобождение ресурсов(компонентой. либо в 1С коде не прописано). Из-за этого 1С вообще может крашится. На самом деле я рекомендую использовать jabber в 1С - только таким образом как у вас в статье (т.е. только для регламентных процедур - отправка сообщений по событию) - я как раз сейчас что-то такое и делаю. Для клиентов лучше использовать или какой-нибудь web клиент, либо Miranda. Для 1С-ки компонент можно использовать старый, но мне больше всех понравился - http://jabbercom.sourceforge.net/ - com server - документация, все есть(единственно, были замечены некоторые небольшие расхождения между ней и компонентой, видимо автор просто не обновил доки).
X.Leshiy; +1 Ответить
2. cool.vlad4 45 17.03.12 10:30 Сейчас в теме
мКлиентJabber = Новый COMОбъект("JabberCOM.JabberSession");
ДобавитьОбработчик мКлиентJabber.OnConnect, OnConnect;
ДобавитьОбработчик мКлиентJabber.OnMessage, OnMessage;
ДобавитьОбработчик мКлиентJabber.OnException, OnException;
ДобавитьОбработчик мКлиентJabber.OnCommError, OnCommError;
ДобавитьОбработчик мКлиентJabber.OnAuthError, OnAuthError;
ДобавитьОбработчик мКлиентJabber.OnXML, OnXML;
ДобавитьОбработчик мКлиентJabber.OnXMLTag, OnXMLTag;
ДобавитьОбработчик мКлиентJabber.OnDisconnect, OnDisconnect;
ДобавитьОбработчик мКлиентJabber.OnRosterStart, OnRosterStart;
и т.д. событий там до хера. Описание событий есть в доках. Например OnMessage - при поступлении сообщения. Также есть возможность внедрять свой xml код. В таком случае удобно событие
Процедура OnXML(Direction, txt)

// Direction = 0 --> Исходящие
// Direction = 1 --> Входящие

// dString = ?(Direction = 1 ,"SENT: ", "RECV: ");
//Сообщить(dString + txt);

КонецПроцедуры
пишу по памяти, - многое не помню. В этой компоненте главное правильно отключать соединение при завершении работы, иначе 1С-как может упасть.
25. pallid 25.11.13 16:04 Сейчас в теме
(2) cool.vlad4,У меня никак не срабатывает событие OnMessage, может там тоже какие то танцы с бубном, как и с отключением, не подскажете???
3. X.Leshiy 26 17.03.12 10:57 Сейчас в теме
Спасибо, попробую и этот вариант :)
4. Dimasik2007 416 20.03.12 23:25 Сейчас в теме
Если есть небольшие навыки по работе в Visual Studio, то можно написать свой джаббер-бот (тут)
З.Ы. Мы шли одинаковыми путями)
5. sound 531 22.03.12 11:49 Сейчас в теме
Тоже у себя замутил, а ничо так прикольно получилось, еще бы подключение работало побыстрей вообще бы было супер.
6. X.Leshiy 26 22.03.12 11:55 Сейчас в теме
Подключение да, медленное.

Я формирую массив адресатов и сообщений чтобы сообщения ушли за одно подключение.

Пока устраивает :)
7. KroVladS 16.05.12 16:56 Сейчас в теме
ЗапуститьПриложение(sender);
Не работает в серверном режиме.

Не пробовал конектить этот php класс с OpenFire+SSL?
8. X.Leshiy 26 16.05.12 17:06 Сейчас в теме
(7) KV1s, Что значит не работает? Замечательно работает. На сервере, где стоит 1С сервер, должен быть установлен php и задано соответствие для файлов с расширением .php.

Я не знаю на чем у нас jabber крутится, по идее, должно работать на всех.
KroVladS; +1 Ответить
9. KroVladS 16.05.12 17:40 Сейчас в теме
(8)

Конфигуратор выдаёт такую ошибку:
{ОбщийМодуль.jabber.Модуль(28,4)}: Процедура или функция с указанным именем не определена (ЗапуститьПриложение)
		 <<?>>ЗапуститьПриложение(sender); (Проверка: Сервер)

Синтаксис-помошник говарит:
Глобальный контекст (Global context)
ЗапуститьПриложение (RunApp)
......
Доступность:
Тонкий клиент, веб-клиент, толстый клиент.


Сервера нету :(
1С:Предприятие 8.2 (8.2.13.219)
12. X.Leshiy 26 16.05.12 18:01 Сейчас в теме
(9) KV1s,

Общий модуль с настройками Сервер и Вызов сервера.
Версия 1С 1.8.15.301 x64.
Клиент-серверный вариант.

У меня вот что выдает синтакс помощник:


Глобальный контекст (Global context)
ЗапуститьПриложение (RunApp)
Синтаксис:

ЗапуститьПриложение(<СтрокаКоманды>, <ТекущийКаталог>, <ДождатьсяЗавершения>, <КодВозврата>)
Параметры:

<СтрокаКоманды> (обязательный)

Тип: Строка.
Командная строка для запуска приложения либо имя файла, ассоциированного с некоторым приложением.
<ТекущийКаталог> (необязательный)

Тип: Строка.
Задает текущий каталог запускаемого приложения.
В режиме веб-клиента игнорируется.
<ДождатьсяЗавершения> (необязательный)

Тип: Булево.
Истина - дожидаться завершения запущенного приложения перед продолжением работы.
Значение по умолчанию: Ложь
<КодВозврата> (необязательный)

Тип: Число; Неопределено.
Параметр (если он указан) содержит код завершения работы системы - значение, передаваемое приложением операционной системе, если работа была завершена корректно, если такой код был получен. В противном случае возвращает Неопределено.
Для получения кода возврата значение параметра ДождатьсяЗавершения должно быть установлено в Истина, запускаемое приложение должно существовать и завершить свою работу корректно.
Описание:

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

Доступность:

Тонкий клиент, веб-клиент, сервер, толстый клиент.
Примечание:

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

// открытие файла MS Excel
ЗапуститьПриложение("Таблица.xls");
KroVladS; +1 Ответить
14. KroVladS 16.05.12 18:03 Сейчас в теме
(12)
Надо обновлять платформу????
15. X.Leshiy 26 16.05.12 18:30 Сейчас в теме
(14) KV1s, ну я же не знаю, что у вас там и как, опишите подробнее.
16. KroVladS 17.05.12 09:05 Сейчас в теме
(15)
1С:Предприятие 8.2 (8.2.13.219)
Сервер 1с
Надо обновлять платформу!!!
10. KroVladS 16.05.12 17:51 Сейчас в теме
Но это только пол беды сами PHP скрипты при запуске из CMD не отправляют сообшения :(

Понимаю что php скрипт не ваш но может что посовеуете, по логам видно что конект прошол и сообшение отправлено.. а ничего не приходит.
Version: Openfire 3.6.4

2012-05-16 17:29:56
Initializing class variables
2012-05-16 17:29:56
Trying to connect at server-2010:5223
2012-05-16 17:29:58
Connection made successfully at server-2010:5223
2012-05-16 17:29:58
Sending XML>>
<?xml version="1.0"?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xmlns="jabber:client" to="orion" xml:lang="en" xmlns:xml="http://www.w3.org/XML/1998/namespace">
2012-05-16 17:29:59
Sending XML>>
<message type="chat" from="helpdesk@domen" to="user@domen"><body>Тестовое сообщение</body></message>
2012-05-16 17:29:59
Sending XML>>
</stream:stream>
Показать
11. X.Leshiy 26 16.05.12 17:57 Сейчас в теме
(10) KV1s, файл с сообщенем в UTF-8 кодировке? Это обязательно.
13. KroVladS 16.05.12 18:02 Сейчас в теме
17. KroVladS 17.05.12 13:47 Сейчас в теме
(10) KV1s,
Проблема была в методе шифрования. Исправил в xmpp.class.php
stream_socket_enable_crypto($this->stream, TRUE, STREAM_CRYPTO_METHOD_TLS_CLIENT);
Заменил на
stream_socket_enable_crypto($this->stream, TRUE, STREAM_CRYPTO_METHOD_SSLv3_CLIENT);


(9) KV1s,
В общем модуле
ЗапуститьПриложение(sender);
Заменил на
WshShell = Новый COMОбъект("WScript.Shell");
WshShell.Run(sender, 0, Истина);

и платформу обновлять не надо.

Всё отправляет :) Большое Спасибо :)

Вот только $webi->connect(); медлено происходит, секунд 10.

И ещё у Вас в статье редактор испортил строчку кода.
  ТекСтрока  = "; ТекТекст.ДобавитьСтроку(ТекСтрока);
следует заменить на 
   ТекСтрока  = "<?php"; ТекТекст.ДобавитьСтроку(ТекСтрока);
X.Leshiy; +1 Ответить
18. X.Leshiy 26 17.05.12 15:33 Сейчас в теме
(17) KV1s, спасибо, ошибку исправил.
19. X.Leshiy 26 17.05.12 15:36 Сейчас в теме
Черт, все равно не прошло "<?php", я так понимаю, автоматом редактор убирает потенциально опасные слова.
20. KroVladS 17.05.12 15:45 Сейчас в теме
(19)
оформи тегом
[1C-CODE] [ /CODE]
21. electronik 18.05.12 15:58 Сейчас в теме
Интересно интересно недавно столкнулся с похожей проблемой сервер намертво зависал буду пробовать
22. X.Leshiy 26 18.05.12 16:15 Сейчас в теме
(21) electronik, обратите внимание что в публикации редактор скушал часть строки. Правильный вариант в коментарии №17.
23. denek2004 28.03.13 13:40 Сейчас в теме
Для 1с 7.7 кто -нибудь подключал ?
24. X.Leshiy 26 28.03.13 13:57 Сейчас в теме
А в чем проблема?

Принцип работы такой: формируется текстовый файл с php кодом с расширением .php, запускается с помощью интерпретатора. Чем он формируется, разницы нет.
26. pallid 25.11.13 16:12 Сейчас в теме
А проблема падением базы решилась так:

JS = Новый COMОбъект("JabberCOM.JabberSession");
ДобавитьОбработчик JS.OnConnect, OnConnect;
ДобавитьОбработчик JS.OnMessage, OnMessage;
JS.Server = "jabber.ru";  
JS.Username = логин;
JS.Password = пароль;  
JS.Resource = "Script";   
JS.Priority = 1;
DoConnect = JS.DoConnect(Ложь,0); //Без присвоения падает
	
Предупреждение("Соединение", 5); //Надо а то база падает

msg = Новый COMОбъект("JabberCOM.JabberMsg"); 

Предупреждение("Соединение", 5); //Надо а то база падает

msg.MsgType = 0;   
msg.Body = "text";  
msg.ToJID = "кому@jabber.ru";  
	
JS.SendMessage(msg);   
DoConnect = JS.DoConnect(Истина,0); //Без этого тоже падает
	  
Предупреждение("Выход", 5); //На всякий случай

JS.DoDisconnect(Истина); 
Показать
27. masspi 8 19.12.13 12:34 Сейчас в теме
Скажите, не могли бы Вы немного подробнее описать механизм интеграции?
28. Mogidin 128 26.02.14 17:29 Сейчас в теме
Обзовите меня некропостером, но...
Насколько я понимаю, чтобы сервер смог что-то записать в файлик на "\\server\e$\AddIn\jabber\", нужно пользователю, под которым запущен сервер, дать права на запись на диск Е. Так?
29. X.Leshiy 26 26.02.14 17:37 Сейчас в теме
(28) Mogidin, Да, без прав никак. Но, можно класть файлы на любую шару, не обязательно на сервер, если безопасность и все такое :)

У меня запись на E$ была, ну, потому что вот так сделал, потом просто не менял.
Никакого умысла :)
30. FlagmanGK 12.04.14 13:57 Сейчас в теме
У меня никак не получается отправить сообщение.. подскажите. что не так сделал?

Файл конфигурации:
<?php
/* UTF-8
user@domain
*/

$webi_conf['user']="login@gmail.com";
$webi_conf['pass']="password";
$webi_conf['host']="talk.google.com";
$webi_conf['port']=5222;
$webi_conf['domain']="gmail.com";


$webi_conf['logtxt']=true; // ведение лога false | true
$webi_conf['log_file_name']="loggerxmpp.log"; // файл лога
$webi_conf['tls_off'] = 1; // принудительное отключение шифрования. 1 - выключено, 0 - включено, если сервер поддерживает

?>
Показать


index.php
<?php
/* UTF-8
XMPP webi
http://webi.ru/webi_files/xmpp_webi.html

*/

include_once("xmpp.class.php");
$webi = new XMPP($webi_conf);

$webi->connect(); // установка соединения...

$webi->sendStatus('text status','chat',3); // установка статуса
$webi->sendMessage("login2@gmail.com", "soobshenie"); // отправка сообщения


while($webi->isConnected)
{
$webi->getXML();
}

?>
Показать


Запускается, окно висит, но при этом в сети "login" не появляется.

В логах пишет
2014-04-12 09:53:44
Initializing class variables

2014-04-12 09:53:44
Trying to connect at talk.google.com:5222

2014-04-12 09:53:44
Connection made successfully at talk.google.com:5222

2014-04-12 09:53:44
Sending XML>>
<?xml version="1.0"?><stream:stream xmlns:stream="http://etherx.jabber.org/streams" version="1.0" xmlns="jabber:client" to="gmail.com" xml:lang="en" xmlns:xml="http://www.w3.org/XML/1998/namespace">

2014-04-12 09:53:45
Received XML<<
<stream:stream from="gmail.com" id="59CEF98C7B349C48" version="1.0" xmlns:stream="http://etherx.jabber.org/streams" xmlns="jabber:client"><stream:features><starttls xmlns="urn:ietf:params:xml:ns:xmpp-tls"><required/></starttls><mechanisms xmlns="urn:ietf:params:xml:ns:xmpp-sasl"><mechanism>X-OAUTH2</mechanism><mechanism>X-GOOGLE-TOKEN</mechanism></mechanisms></stream:features>

2014-04-12 09:53:45
Authenticating...

2014-04-12 09:53:45
Sending XML>>


2014-04-12 09:53:46
Sending XML>>
<presence><show>chat</show><status>text status</status><priority>3</priority></presence>

2014-04-12 09:53:47
Sending XML>>
<message type="chat" from="" to="login2@gmail.com"><body>soobshenie</body></message>

2014-04-12 09:53:47
Sending XML>>
</stream:stream>

Показать
Оставьте свое сообщение
Вопросы с вознаграждением