gifts2017

WhatsApp и 1С

Опубликовал delete (delete) в раздел Программирование - Практика программирования

Однажды ночью, в паре тысяч километров от дома, я вспомнил, как, будучи ещё подростком, любил писать различных ботов.
Первый бот в моей практике был irc-ботом, второй умел отправлять смс, всё это привело к логичному завершению цепочки - их общему ребёнку, который висел в irc и по команде мог слать смс (бесплатно, без регистрации, -без смс-).
Сейчас на предприятии, где я работаю, применяется практика рассылки смс нужным людям при превышении определённой температуры в серверной.

"А почему бы мне не прикрутить оповещалку на 1С, которая будет отчитываться о выполнении регламентных процедур?" подумал я не имея на то необходимости ))

Решил посмотреть какие есть варианты и выиграл это сравнение WhatsApp:
- В WhatsApp можно создать группу нужных людей, в которой бот может сообщить о том, что что-то пошло не так, в этой же группе нужные люди могут скоординироваться по этому вопросу;
- СМС слишком коротки и выходят дороже, к тому же в нашем городе это нестабильный канал связи;

Отмазка #1
Эта публикация - не готовое решение, а лишь небольшой пример, иллюстрирующий расширение возможностей 1С и преимущества знания других языков программирования.

Отмазка #2
Код примеров приведён в минимально рабочее состояние. Ровно настолько, чтобы продемонстрировать саму возможность рассылки сообщений по WhatsApp из 1С.
В нём есть участки, в которых сознательно оставлена возможность для некорректной работы (отсутствие проверок, отсутствие перехвата исключений и т.д.).
Так же реализована очень малая часть потенциала API - только отправка текстовых сообщений.
Мотивирую это тем, что не хочу давать готовый инструмент в руки спамеров.

 

Предисловие

 

Если попытаться поискать официальный API WhatsApp, то можно узнать, что его не существует.
Однако задав в поиске "WhatsApp" на github можно найти 421 (в день написания публикации) проект на различных языках.

Я решил остановиться на проекте WhatsAPINet (https://github.com/perezdidac/WhatsAPINet). Этот проект содержит в себе API и демонстрацию его применения.

Казалось бы - как можно связать DLL на .Net с 1С?
Можно сделать внешнюю компоненту и использовать в своей конфигурации - мы этого делать не будем, потому что написание внешней компоненты всё-таки сложнее, чем переделка проекта под COM-объект, не будем усложнять наш пример.
Можно переделать проект так, чтобы на выходе DLL поставляла помимо экспортных методов ещё и COM-объект, который можно применять не только в 1С, но и в других отраслях (vbs-скрипты и прочее).

Скачав проект с github можно неприятно удивиться - тестовые примеры не будут работать.
Сервер Whatsapp будет ругаться на несоответствие версий, неправильный токен авторизации и так далее.
Это связано с тем, что какие-то участки протокола могут измениться в новой версии WhatsApp, а проект на github уже давненько не обновлялся.


Пилим COM-объект на C#


Где и что конкретно нужно исправить в проекте, чтобы заработали тестовые примеры я подробно расписывать не буду (смотри отмазку #2), скажу только, что нужно поправить 2 строки - версию и один из ключей, который берётся для генерации токена.
На момент публикации статьи этих исправлений будет достаточно, чтобы сервер WhatsApp был согласен с нами сотрудничать.

Далее, чтобы не таскать с собой 2 DLL-ки (API + COM-обёртка), мы изменим проект в VisualStudio таким образом, чтобы открыть нужный функционал в виде COM-объекта, поставляемого этой же DLL с API:

Готовых статей о том как написать COM-объект на .NET море, в том числе на инфостарте, поэтому не будем сильно останавливаться на этом вопросе
(например, Как написать COM-объект для 1С на Visual Studio C# 2008)

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

Открываем проект WhatsAppApi.csproj и далее по шагам:

1. Сделаем сборку видимой для COM:

Откроем файл AssemblyInfo.cs и изменим значение параметра сборки ComVisible на true

2. Добавим описание и реализацию интерфейсов

Добавим интерфейс IEvents. Он будет содержать описания событий, на которые мы сможем подписаться в 1С;



Добавим интерфейс IComWrapper. Он будет содержать описание методов, которые мы будем вызывать;


Добавим класс ComWrapper. Он будет наследовать IComWrapper, содержать реализацию его методов, а так же вызывать события.



3. Компилируем проект и регистрируем нашу сборку как COM

Средство регистрации сборки считывает метаданные сборки и добавляет в реестр необходимые записи, что позволяет COM-клиентам прозрачно создавать классы .NET Framework. После регистрации класса любой COM-клиент может использовать таким образом, словно это класс COM. Класс регистрируется только один раз, при установке сборки. Экземпляры классов внутри сборки не могут создаваться на основе COM-классов до их фактической регистрации.


Чтобы зарегистрировать нашу сборку, нужно выполнить следующий Код
c:\Windows\Microsoft.NET\Framework\v4.0.30319\RegAsm.exe WhatsAppApi.dll /codebase

Во вложениях есть допиленный проект со скромным функционалом (с учётом отмазки #2) и готовая скомпилированная DLL

 

Пилим обработку в 1С


Вот основная часть работы позади, нам осталось только прикрутить полученный COM-объект к 1С.

В исходном проекте многое завязано на событиях объекта, поэтому мы тоже не будем далеко уходить от этой практики.
Так как мы использовали интерфейс IEvent, основная часть вопросов будет решаться добавлением обработчиков событий COM-объекта.

 

Чтобы приступить к тестам, нам нужно зарегистрировать номер телефона в WhatsApp, получить пароль и авторизоваться. Но, перед этим, посмотрим, как мы будем работать с COM-объектом (сборка, на этом этапе, уже должна быть зарегистрирована):

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	Вацап = Новый COMОбъект("WhatsAppApi.ComWrapper");
	ДобавитьОбработчик Вацап.onGetMessage, ПолученоСообщение;
КонецПроцедуры

...

&НаКлиенте
Процедура ПолученоСообщение(ОтНомера, Имя, Текст)
	НовоеСообщение = Сообщения.Добавить();
	НовоеСообщение.Дата = ТекущаяДата();
	НовоеСообщение.От = ОтНомера;
	НовоеСообщение.Кому = "Мне";
	НовоеСообщение.Текст = Текст;
	НовоеСообщение.Доставлено = Истина;
КонецПроцедуры


Механизм регистрации

Аккаунт WhatsApp привязывается к номеру телефона, поэтому при первичной регистрации без телефона не обойтись.
В общем виде процесс регистрации выглядит так:

1. Мы отправляем на сервер WhatsApp сообщение о том, что хотим зарегистрировать свой номер. При этом указываем способ получения кода подтверждения регистрации - звонок или смс. В нашем случае это будет смс.


 2. Сервер WhatsApp отправляет на указанный номер смс с кодом.

Тут нам пригодится телефон, смотрим, что за цифры пришли в смс сообщении.

3. Называем серверу полученные в смс цифры.

 


4. Сервер выдаёт нам пароль, который мы будем использовать для авторизации.



В коде 1С это выглядит приблизительно так:

&НаКлиенте
Процедура ПриОткрытии(Отказ)	
	Вацап = ЭтаФорма.ВладелецФормы.Вацап();
	ДобавитьОбработчик Вацап.onRecievePassword, ПриПолученииПароля;
КонецПроцедуры


&НаКлиенте
Процедура ЗапроситьСМС(Команда)	
	Вацап.Create(НомерТелефона, "", "");
	Если Вацап.RequestCode() Тогда
		Сообщить("Запрос отправлен, ожидайте СМС сообщение");
	КонецЕсли;
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьКод(Команда)
	Вацап.RegisterCode(КодСМС);
КонецПроцедуры

&НаКлиенте
Процедура ПриПолученииПароля(Строка)
	Предупреждение("Пароль получен!");
	Пароль = Строка;
КонецПроцедуры

&НаКлиенте
Процедура ПриЗакрытии()
	УдалитьОбработчик Вацап.onRecievePassword, ПриПолученииПароля;
КонецПроцедуры

Механизм уведомлений, рассылки и получения сообщений

Процесс обмена сообщениями выглядит так:

1. Отправитель отправляет на сервер сообщение для указанного получателя
2. Сервер, получив сообщение, отчитывается отправителю о том, что сообщение получено сервером
3. Когда получатель получает сообщение, сервер отчитывается отправителю, что сообщение доставлено получателю

Чтобы эта цепочка корректно работала, у каждого сообщения есть свой идентификатор.
В исходном проекте этот идентификатор дополнен другими данными и выглядит неудобно для обработки внутри 1С, поэтому в своём классе ComWrapper при событии получения клиентом сообщения мы удаляем "лишнее", оставляя только цифровой идентификатор сообщения.

В коде 1С наше общение будет выглядить так:

&НаКлиенте
Перем Вацап, МойНомерТелефона;

&НаКлиенте
Функция Вацап() Экспорт
	Если Вацап = Неопределено ИЛИ Вацап = null Тогда
		Вацап = Новый COMОбъект("WhatsAppApi.ComWrapper");
	КонецЕсли;
	Возврат Вацап;
КонецФункции

&НаКлиенте
Процедура ПриОткрытии(Отказ)
	ФормаАвторизации = ПолучитьФорму("ВнешняяОбработка.ДемонстрацияWhatsApp.Форма.ФормаАвторизации", , ЭтаФорма);
	ФормаАвторизации.ОткрытьМодально();
	Если НЕ ФормаАвторизации.Авторизован Тогда
		МойНомерТелефона = ФормаАвторизации.НомерТелефона;
		Закрыть();
		Возврат;
	КонецЕсли;
	
	ДобавитьОбработчик Вацап.onError, ПриОшибке;
	ДобавитьОбработчик Вацап.onGetMessage, ПолученоСообщение;
	ДобавитьОбработчик Вацап.onClientRecieveMessage, Доставлено;
КонецПроцедуры

&НаКлиенте
Процедура ПолученоСообщение(ОтНомера, Имя, Текст)
	НовоеСообщение = Сообщения.Добавить();
	НовоеСообщение.Дата = ТекущаяДата();
	НовоеСообщение.От = ОтНомера;
	НовоеСообщение.Кому = "Мне";
	НовоеСообщение.Текст = Текст;
	НовоеСообщение.Доставлено = Истина;
КонецПроцедуры

&НаКлиенте
Процедура ОтправитьСообщение(Команда)
	КлючСообщения = Вацап().SengMessage(Адресат, Сообщение);
	
	НовоеСообщение = Сообщения.Добавить();
	НовоеСообщение.Дата = ТекущаяДата();
	НовоеСообщение.От = "Я";
	НовоеСообщение.Кому = Адресат;
	НовоеСообщение.Текст = Сообщение;
	НовоеСообщение.КлючСообщения = КлючСообщения;
	
	Сообщение = "";
КонецПроцедуры

&НаКлиенте
Процедура Доставлено(Кому, КлючСообщения)
	Отбор = Новый Структура("Кому, КлючСообщения", Кому, КлючСообщения);
	НайденныеСтроки = Сообщения.НайтиСтроки(Отбор);
	
	Для Каждого НайденнаяСтрока Из НайденныеСтроки Цикл
		НайденнаяСтрока.Доставлено = Истина;
	КонецЦикла;
КонецПроцедуры

На этом можно закончить, добавив, что допилив наш пример можно отправлять не только простые текстовые сообщения, но так же заставить бота отписываться в группах, кидать фотки с web-камеры по расписанию, записи с микрофона и вообще создать гаджет агента 007)

 

 

Скачать файлы

Наименование Файл Версия Размер Кол. Скачив.
Проект на c# с базовой доработкой до COM функционала
.rar 246,28Kb
24.09.14
122
.rar 246,28Kb 122 Скачать
Внешняя обработка + DLL для демонстрации работы примера
.rar 56,85Kb
24.09.14
218
.rar 56,85Kb 218 Скачать
Внешняя обработка без DLL
.epf 13,77Kb
24.09.14
47
.epf 13,77Kb 47 Скачать

См. также

Подписаться Добавить вознаграждение

Комментарии

1. Андрей Акулов (DrAku1a) 24.09.14 16:21
Ого! А я в своё время искал Windows-клиента... и не нашёл... видно, искал плохо )))
2. Ruslan (2casp) 24.09.14 21:24
Огромный плюс. Отличная статья :)
Alef; iov; +2 Ответить
3. Александр Зубцов (iov) 24.09.14 22:42
прикрутил к регламентным заданиям .
правда код сократил, да простит меня автор
Вацап = Null;
Вацап = Новый COMОбъект("WhatsAppApi.ComWrapper");
Вацап.Create("ЛОгин", "Пароль", "");
Вацап.Login();
КлючСообщения = Вацап.SengMessage("телефон", "Напиши мне напиши ");

теперь при ошибках получаю почти оперативно сообщение до 2 минут идет (((
4. Konstantin Konstantin (KonstB) 24.09.14 23:32
Автор молодец!

но так чисто из любопытства:

СМС... в нашем городе это нестабильный канал связи;


Это где такой город, где мобильный инет лучше смс ? )))
VanDiesel1; +1 Ответить 1
5. delete (delete) 25.09.14 00:11
(3) iov, 2 минуты - много, проверьте скорость соединения на телефоне, возможно не успевает нормально синхронизировать сообщения.
(4) KonstB, город Норильск. Представьте себе - смс нормально уходят, но прийти адресату могут через день-два
6. saint 07 (saint07) 25.09.14 01:26
Идея очень интересная,а можно ли также под Viber что-нибудь сделать ???
7. delete (delete) 25.09.14 01:52
(6) saint07, если найдёте API - беглый взгляд не выявил актуальной реализации в открытом доступе, ситуация такая же, как с whatsapp'ом - API закрытое
8. Ildar Gabdrakhmanov (spezc) 25.09.14 08:17
Отличная статья!
Сколько будет стоить готовая рабочая обработка и ДЛЛ (чтобы работали без отмазок))))?
Чтобы я мог прикрутить к своей рабочей конфе?
9. Murad Karimov (k4rimov) 25.09.14 08:40
О, Норильск) 30 лет там прожил) Но свалил) С инетом и СМС там беда, подтверждаю)
Статья отличная - можно все привести к законченной подсистеме (если еще прикрутить Viber и прочие мессенджеры на возможность выбора)
10. delete (delete) 25.09.14 08:40
(8) spezc, честно говоря даже не представляю, никогда таким образом не пытался зарабатывать. А ещё, хочу напомнить, что DLL останется рабочей ровно до того момента, как WhatsApp не поменяет версию или часть протокола. Никто не может гарантировать, что сделав полностью рабочую DLL ею можно будет пользоваться неограниченное время.

Потому лишний раз предупрежу - не стоит вешать эту оповещалку на что-то важное, она может неожиданно перестать работать.

У меня есть пара идей для следующей публикации подобной тематики, в которых участвует меньше неконтролируемых посредников)
Однако нужно сначала всесторонне изучить эти идеи
11. delete (delete) 25.09.14 08:46
(9) k4rimov, Viber, как и WhatsApp, имеет закрытое API, однако для WhatsApp есть репозитории на гитхабе, которые с горем пополам можно прикрутить, а вот с Viber'ом там в этом смысле слабовато. Ну и представьте как поддерживать многообразие сервисов с закрытым API да ещё и совмещать с работой.
Одна из идей, о которых я упомянул выше, заключается в отдельной подсистеме, а вот с чем она будет работать - пока не скажу, сначала руками на себе обкатаю)
12. Murad Karimov (k4rimov) 25.09.14 08:48
13. delete (delete) 25.09.14 09:00
(12) k4rimov, по сути всё, что имеет открытое API можно прикрутить как уведомлялку) Хоть телеграм, хоть инстаграмм, вконтакте и т.д. Они тоже требуют отслеживания изменений в API, хотя, конечно, в случае его открытости это не составляет большого труда)
14. Ildar Gabdrakhmanov (spezc) 25.09.14 09:05
(10) delete, может тогда все-таки стоит подумать над коммерческой частью проекта? сделать готовое решение и поддерживать его, по мере изменения апи ватсапа? лично для меня было бы прикольно прикрутить подобную оповещалку в компании)
15. CatMix 25.09.14 10:41
Это всё здорово, но email чем не угодил?
Отправка сообщений уже реализована, немного допилить и можно слать всё что угодно, на любой адрес, группу итд.
borodatii; adva; tunesoft; AllexSoft; +4 Ответить
16. Галина Орехова (orehova123) 25.09.14 10:41
Красиво! Согласна с (14), может, подумаете над продажей и поддержкой проекта?
17. Дмитрий Шерстобитов (DitriX) 25.09.14 12:38
Ну хоть кто нибудь - сделайте прием данных от jabber, что бы можно было к гуглю подключиться и отправлять данные и получать их.
Ну плиииииз....
Там же все открыто, не надо никаких костылей :)
18. Роман Ложкин (webester) 25.09.14 14:44
(17)Да их просто вагон. Поискомпробовали пользоваться?
19. delete (delete) 25.09.14 14:56
(14) spezc, (16) orehova123, раз людям интересно, подумаю над этим)
20. Дмитрий Шерстобитов (DitriX) 25.09.14 15:14
(18) иногда надо вчитываться в каммент, что бы понять его содержание.
Давайте еще раз повторю и выделю важные моменты:

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

Раз уж вы так ловко умеете обращаться с гуглом, то может вы поможете мне с поиском данного решения? Ибо мои скромные навыки не позволили найти его.
В замен, я готов вам перечислить 50$m. Я думаю за поиск готового варианта с использованием ВК для 1С 8.2,8.3, которая умеет работать с джабером гугла и получать и отправлять сообщения - должно хватить :)
21. Fomix (fomix) 25.09.14 15:42
Автор молодец! Спасибо за подробную инструкцию.
22. Роман Ложкин (webester) 26.09.14 10:04
(20)
иногда надо вчитываться в каммент, что бы понять его содержание

Перечитал раза три так и не понял, что вам не понравилось, вот к примеру описание одной из обработок:
Клиент способен подключаться к серверу, получать список контактов, отправлять сообщения, получать сообщения, отображать анимированные смайлики (регулярные выражения), переписка отображается с помощью html, отдельная вкладка для каждого контакта, обновление статусов и непрочитанных сообщений, сохранение/восстановление данных формы при закрытии/открытии обработки

Взято отсюда http://infostart.ru/public/83685/
23. Анатолий Ситников (acsent) 26.09.14 15:24
Эх, а ведь все апи идет через вызовы типа
https://v.whatsapp.net/v2/code?cc={0}&in={1}&to={0}{1}&method={2}&mcc={3}&mnc={4}
Поэтому можно обойтись без лишних компонент
24. delete (delete) 27.09.14 07:59
(23) acsent, с одной стороны - да, можно, с другой - многое придётся пилить с нуля (шифрование, разбор пакетов, построение пакетов, обработку событий стороны сервера и т.д.).
Но, в итоге, нет ничего невозможного)
25. andr bat (zoytsa) 27.09.14 08:23
26. Иван Мыльцов (van2) 27.09.14 12:01
Спасибо за статью) Интересно почитать подобные материалы.
27. Алексей 1 (AlX0id) 29.09.14 14:03
(23) acsent,
Да можно и свой сервер запилить, что в общем случае даже проще, пожалуй.
28. Роман Ложкин (webester) 29.09.14 14:52
(27)И второй ватсапп в аппстор :)
29. Анатолий Ситников (acsent) 30.09.14 11:42
(24) Весь код уже есть на С. Нужно только перевести на 1С )))
30. Макс Зеленский (mzelensky) 01.10.14 09:55
Да, клевая статья. Спасибо автору за идею и примеры!
31. Александр Иванов (tunesoft) 01.10.14 10:04
Автор молодец.
Основной минус данного решения: сложность и ненадёжность.
32. Виктор Яковчук (victor-tm) 01.10.14 12:28
Требуем коммерческую версию на УТ10.3!!!!
33. delete (delete) 01.10.14 16:02
(29) acsent, и правда, всего-то)
(31) tunesoft, сложность, пожалуй, для тех, кто не знаком с другими яп (c# в нашем случае), а ненадёжность - полностью согласен, огромный минус
(32) victor-tm, к сожалению оч загружен по работе, в ближайшее время ждать готового решения не стоит

хочу ещё раз обозначить - я не претендую на новизну или эксклюзивность идеи или решения
если кто-то возьмётся и реализует полноценный поддерживаемый компонент - честь, слава, хвала и почёт)

насчёт коммерческого решения тоже есть нюанс - в трактовке некоторых юристов это может быть не очень-то и законно)
34. Ildar Gabdrakhmanov (spezc) 02.10.14 12:59
(33) delete,
сделать коммерческую версию. выложить демку и рабочую за 5000р (ценообразование за вами). с учетом того, сколько скачано и сколько звезд - думаю профит будет нормальный) можно несколько ночей на разработку выделить)
35. Сергей Галюк (dj_serega) 02.10.14 15:32
Крутяк. Не знаю на сколько это актуально, так как imap на телефоне можно настроить и почту отправлять так что...
Тут разве что сравнение чата и почтовика.
36. haz haz (hazd) 05.10.14 23:41
нужная вещь, автору спасибо)
37. Андрей Гердт (AndreyNit) 09.10.14 09:36
Автору однозначно плюс. Спасибо, разработка пригодилась.
38. Ruslan (flyer) 31.10.14 13:06
Господа хотел поинтересоваться кто нибудь прикрутил возможность отправки изображений?
39. Виктор Яковчук (victor-tm) 26.11.14 22:37
Что на счет коммерческой версии?
40. Ruslan (flyer) 27.11.14 08:42
да не помешала бы. очень нужна рабочая версия с отправкой изображений
41. Roman Tarabanov (pswd) 27.11.14 13:13
(39) victor-tm,
А можно услышать что вы хотите от коммерческой версии? Какие требования к ней?
42. delete (delete) 27.11.14 18:48
Коммерческой версии не будет
Извините
43. Виктор Назаров (androgin) 19.12.14 00:00
RegAsm : error RA0000 : Unable to locate input assembly 'WhatsAppApi.dll' or one of its dependencies.
44. delete (delete) 24.12.14 13:58
(43) androgin, Проверьте, есть ли путь к фрэймворку в переменной среды (можно посмотреть пример тут - http://www.jagjot.com/2014/01/register-c-vb-net-dll-regasm-gacutil/)
45. Тимофей Горячев (Ti_Gor1) 21.01.15 08:42
смс не приходят при регистрации. как можно решить?
длл зарегистрировал, при регистрации ком объект создан. такое ощущение что в правах винды где то проблема. (вин8)
46. delete (delete) 22.01.15 10:40
(45) Ti_Gor1, уже давно изменилась версия официального приложения и токен. Чтобы всё заработало, нужно брать свежую библиотеку с github, если нужные изменения в неё уже внесли
47. Сергей Смирнов (Serginio) 15.05.15 16:15
Про DLL на .Net с 1С?
Можно так
Использование сборок .NET в 1С 7.x b 8.x 
http://infostart.ru/public/238584/

Ну и использование NuGet https://www.nuget.org/packages/WhatsAppAPI/
48. Евгений Моисеенко (bpc222) 16.07.15 09:31
49. Артем Замолодчиков (BaHgaJI) 06.10.15 11:46
А если я вытащу токен из приложения Whats app dll ка заработает?
50. Сергей Смирнов (Serginio) 06.10.15 14:42
Вот рабочий вариант https://github.com/mgp25/Chat-API-NET
Проверил рабочий. Правда я через 47
Скомпилируй и замени WhatsAppApi.dll

Победил отправку файлов
51. Альберт Сираев (stoned) 09.11.15 22:25
Камрады! Подскажите с отправкой изображений.
Добавил метод
public void SengMessageImage(string toPhoneNum, byte[] ImageData, ApiBase.ImageType imgtype)
{
instance.SendMessageImage(toPhoneNum, ImageData, imgtype);
return;
}

И никак не могу корректно передать этот ImageData!
Я так понимаю со стороны он ComSafeArray. Но как его заполнить правильно из картинки не догоняю!
Пытался переделать его через string Base64

public void SengMessageImage(string toPhoneNum, string ImageData, ApiBase.ImageType imgtype)
{
instance.SendMessageImage(toPhoneNum, Convert.FromBase64String(ImageData), imgtype);
return;
}

На стороне 1с
Данные = Base64Строка(ЭлементыФормы.Картинка.Картинка.ПолучитьДвоичныеДанные())

Данные = СтрЗаменить(Данные, Лев(Данные,4),"")
Данные = СтрЗаменить(Данные , Символы.ПС, "");
Вацап.SengMessageImage(Адресат, Данные, 0);

Подвешивает 1с!
52. Сергей Смирнов (Serginio) 09.11.15 23:40
Если у тебя вертится цикл с PollMessages();
то тебе нужно подправить в UploadFile
int i = 0;
            while (this.uploadResponse == null && i <= 100)
            {
                i++;
                //  this.pollMessage();
                System.Threading.Thread.Sleep(100);
...Показать Скрыть
}


Ну и представить номер
ApiBase.GetJID(toPhoneNum)
53. Альберт Сираев (stoned) 10.11.15 00:28
То есть вместо
<=10 поставить <=100?

А вот это не понял где!

ApiBase.GetJID(toPhoneNum)
54. Сергей Смирнов (Serginio) 10.11.15 08:15
Вместо
// this.pollMessage();
нужно
System.Threading.Thread.Sleep(100);

Так как для получения событий у тебя наверное уже крутится цикл с pollMessage() и они блокируют друг друга
WhatsApp.cs метод

protected WaUploadResponse UploadFile(string b64hash, string type, long size, byte[] fileData, string to, string contenttype, string extension)
55. Сергей Смирнов (Serginio) 10.11.15 08:21
instance.SendMessageImage(ApiBase.GetJID(toPhoneNum), Convert.FromBase64String(ImageData), imgtype);
56. Альберт Сираев (stoned) 10.11.15 11:03
(55) Serginio, Спасибо! Все заработало!
57. Сергей Смирнов (Serginio) 12.11.15 15:50
Выложил статью .NET(C#) для 1С. Динамическая компиляция класса обертки для использования .Net событий в 1С через ДобавитьОбработчик или ОбработкаВнешнегоСобытия

Именно большое количество событий в WhatsAppApi сподвигло меня на динамическую генерацию и компиляцию класса обертки и генерации модуля 1С для использования событий
58. Ildar Gabdrakhmanov (spezc) 12.11.15 22:17
ждем коммерческий продукт
59. Фарход Хакназаров (farkhod) 18.11.15 20:42
(50) Serginio,
Скомпилируй и замени WhatsAppApi.dll


Можно попросить готовый вариант dll?

Спасибо заранее
60. Сергей Смирнов (Serginio) 19.11.15 10:34
(59) Смотря какой вариант DLL тебе нужен. Если по сабжу то проси автора. Есть вариант для тестов генерации событий
http://infostart.ru/public/417830/
Там в класс добавлена запуск цикла.


Сборка=врап.загрузитьСборку(ФайлwhatsappFor1C); 
	whatsappFor1C=Сборка.GetType("WhatsAppApi.WhatsApp");
	Вацап=врап.СоздатьОбъект(whatsappFor1C,Телефон,Пароль,Логин,false,false);
	
 СоздатьОбертку(Вацап);
 Вацап.Connect();
  Сообщить(Врап.ВСтроку(Вацап.ConnectionStatus));
...Показать Скрыть


  Процедура OnLoginSuccess(Данные)
               Сообщить(Врап.ВСтроку(Данные));
			   Вацап.ProcessChat();

            КонецПроцедуры
...Показать Скрыть
61. set5553 KUKA (set5553) 25.11.15 05:42
Обнови ДЛЛ, токен и тд, по теме, если этот вариант скачаю, запыхает?
62. Гусен Халилуллаев (Afandi) 29.11.15 01:58
Спасибо автору.
Вопрос всем кто использует. Работает без глюков? и как часто нужно перекомпилировать DLL ку, что бы решение работало?
63. Альберт Сираев (stoned) 30.11.15 14:15
dll нужно пересобирать когда ключ меняют в программе.
Отправка текстов работает нормально, а вот картинки никак не хочет отправлять на рабочей базе!
Хотя у меня, с компьютера шлет все отлично и картинки и текст.
Возможно это связано с тем, что у меня выделенный канал. А на рабочей базе, 4g модем.
Я уже не знаю где искать причину!
64. set5553 KUKA (set5553) 02.12.15 10:15
Где брать рабочий токен?
65. Альберт Сираев (stoned) 02.12.15 18:57
(64) set5553, рабочий токен в библиотеке на гитхабе, ссылка есть выше.
66. set5553 KUKA (set5553) 03.12.15 05:29
(65) stoned, вы про эту ссылку? https://github.com/mgp25/Chat-API-NET
{\"status\":\"fail\",\"reason\":\"old_version\"}
68. Альберт Сираев (stoned) 04.12.15 10:30
Чего то подкрутили, ошибка авторизации!
На гитхабе пишут что сеть, однако до сих пор не пашет с утра.

https://github.com/mgp25/Chat-API-NET/issues/106
69. Сергей Смирнов (Serginio) 04.12.15 14:55
70. set5553 KUKA (set5553) 04.12.15 19:20
(69) Serginio, кстати, на наш формат постоянно ругается, что можно сделать? номер +996701775777 +996 код станы, 701 код оператора, 775777 номер телефона
71. Сергей Смирнов (Serginio) 05.12.15 14:03
По моему они поменяли протокол авторизации. То, что раньше подключалось, сейчас говорит oldversion
72. Сергей Смирнов (Serginio) 05.12.15 14:07
73. Сергей Смирнов (Serginio) 05.12.15 14:12
Кстати WaUploadResponse подправили
 while (this.uploadResponse == null && i <= 100) 
262             { 
263                 if (m_usePoolMessages) 
264                     System.Threading.Thread.Sleep(500); 
265                 else 
266                 this.pollMessage(); 
267                 i++; 
268             } 
...Показать Скрыть
75. set5553 KUKA (set5553) 09.12.15 13:53
Настроил, все работало и сегодня перестал авторизовываться. Посмотрел, номер заблокировали. Как быть? Из за чего заблокировали? Как обходить это?
76. Ислам Махмудов (astraborz) 20.02.16 22:49
Народ добрый вечер. кто-нибудь решил проблему с внедрением вацап в 1С? У кого работает нормально, отпишитесь пожалуйста
77. Сергей Смирнов (Serginio) 24.02.16 14:48
Посмотри. В декабре еще делал
Прикрепленные файлы:
WhatsApp.zip
78. Ислам Махмудов (astraborz) 25.02.16 11:07
(77) Serginio, Спасибо большое. сегодня испытаю. а у тебя до сих пор работает? интересная тема? мне это нужно чтобы в указанное время руководству шли отчеты всякие остатки, а картинки можно отправлять
79. Сергей Смирнов (Serginio) 25.02.16 11:47
Не знаю не пользуюсь, но тем кому делал вроде не жалуются. Картинки можно отправлять. Но лучше использовать свой сервер http://infostart.ru/public/434771/
Вацап постоянно авторизацию меняет, блокирует
80. Евгений Моисеенко (bpc222) 04.03.16 11:20
(76) astraborz,

у меня работает :)
81. Павел Питеев (paulpit) 08.03.16 11:26
(77) Serginio,
Скачал декабрьский архив.
При попытке получения пароля на мой номер: +79166123636
ругается:
Could not request code using either sms. SMS: {"status":"fail","reason":"old_version"}

82. Сергей Смирнов (Serginio) 09.03.16 19:41
значит опять токен поменяли
83. Евгений Багаев (sarun) 10.03.16 09:53
"Could not request code using either sms. SMS: Удаленный сервер возвратил ошибку: (407) Требуется аутентификация посредника."
84. ROM (ROM_1C) 10.11.16 13:43
У меня ошибка регистрации компоненты
RegAsm : error RA0000 : Unable to locate input assembly 'c:\WhatsAppApi.dll' or one of its dependencies.

Вчем же дело?
85. ROM (ROM_1C) 10.11.16 15:15
43, как то решили проблему?
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа