Skype1C


Внешняя компонента для работы со Skype

Со Skype можно работать и без ВК (см. здесь), но в этом случае мы лишаемся возможности получать события от Скайпа. 

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

Для работы компоненты необходим установленный и зарегистрированный Skype4COM.dll (взять можно здесь)

Перечень событий, поступающих в 1С (в скобках название события по документации Скайпа):

  • ChatMessageChanged   (MessageStatus) 
  • OnlineStatusChanged (OnlineStatus)
  • ConnectionStatusChanged (ConnectionStatus)
  • UserStatusChanged (UserStatus)

Самое важное из этого списка MessageStatus - статус сообщения. Т.о. мы можем узнать в 1С о входящем сообщении. Остальные пока добавил просто так. 

 
В компоненте присутствуют свойства (только для чтения):

  • MessID, ИДСообщения
  • Mess, Сообщение
  • From, ОтКого
  • FromName, ОтКогоИмя
  • FromGroup, ИзГруппы

При получении сообщения его данные записываются в эти свойства.

"ОтКого" - это скайп-логин отправителя.

"ОтКогоИмя" - имя контакта отправителя в вашем скайпе.

"ИзГруппы" - группа контактов, которой принадлежит отправитель.

Со свойством "ИзГруппы"  есть проблемы. Если при запущенной компоненте в самом скайпе изменить принадлежность контакта какой-либо группе, то компонента выдаст верный результат только после переподключения. Почему так происходит - пока не разобрался. Если же не менять у контактов группу во время работы компоненты - группа выдается верно.

Если кто знает, как решить эту проблему с группами - буду благодарен за подсказку.

 
Методы, реализованные в компоненте:

  • Connect, Подключить
  • SendMess, ОтправитьСообщение
  • Dial, Позвонить

С помощью первого метода осуществляется подключение к Skype 

ЗагрузитьВнешнююКомпоненту("Skype1C.dll");
Skype = СоздатьОбъект("AddIn.Skype1C"); 
Skype.Подключить();

для 1С:Предприятие 8.х объект создаем так:

Skype = Новый("AddIn.Skype1C"); 

В самом Скайпе нужно дать доступ приложению для возможности работы.


Отправка сообщения:

Skype.ОтправитьСообщение(Кому,ТекстСообщения);

Кому - это логин контакта, которому отправляем сообщение. Для ответа на полученное сообщение используйте свойство .ОтКого


Третий метод "Позвонить" реализован, но не опробован - не было необходимости.


Компонента писалась для создания простого Скайп-бота и передачи с его помощью данных из 1С.

Процедура ОбработкаВнешнегоСобытия(Источник,Событие,Данные)
Сообщить(ТекущееВремя()+" Событие "+Событие+ " Данные = "+Данные);
Если Источник = "Skype1C" Тогда
Если Событие = "ChatMessageChanged" Тогда
//'cmsSending = 0 indicates the message is in the process of being sent.
//'cmsSent = 1 indicates the message has been sent.
//'cmsReceived = 2 indicates the message has been received.
//'cmsRead = 3 indicates the message has been read.

Статус = Данные;
Если Статус = "0" Тогда
varCmsatus = "cmsSending";
ИначеЕсли Статус = "1" Тогда
varCmsatus = "cmsSent";
ИначеЕсли Статус = "2" Тогда
varCmsatus = "cmsReceived";
ИДСообщ = Skype.ИДСообщения;
Сообщение = Skype.Сообщение;
ОтКого = Skype.ОтКого;
ОтКогоИмя = Skype.ОтКогоИмя;
Группа = Skype.ИзГруппы;
Сообщить("("+ОтКого+") "+ОтКогоИмя+": "+Сообщение+" Группа: "+Группа );
Кому = ОтКого;
ТекстСообщения = "Привет! Это отвечает 1С:Робот!";
Skype.ОтправитьСообщение(Кому,ТекстСообщения);
ИначеЕсли Статус = "3" Тогда
varCmsatus = "cmsRead";
КонецЕсли;
Сообщить(varCmsatus);
ИначеЕсли Событие = "OnlineStatusChanged" Тогда
Если Данные = "0" Тогда
varOLStatus = "olsOffline";
ИначеЕсли Данные = "1" Тогда
varOLStatus = "olsOnline";
ИначеЕсли Данные = "2" Тогда
varOLStatus = "olsAway";
ИначеЕсли Данные = "3" Тогда
varOLStatus = "olsNotAvailable";
ИначеЕсли Данные = "4" Тогда
varOLStatus = "olsDoNotDisturb";
ИначеЕсли Данные = "5" Тогда
varOLStatus = "olsSkypeOut";
ИначеЕсли Данные = "6" Тогда
varOLStatus = "olsSkypeMe";
Иначе
varOLStatus = "olsUnknown";
КонецЕсли;
Сообщить(varOLStatus);
ИначеЕсли Событие = "ConnectionStatusChanged" Тогда
Если Данные = "0" Тогда
varConStatus = "conOffline";
ИначеЕсли Данные = "1" Тогда
varConStatus = "conConnecting";
ИначеЕсли Данные = "2" Тогда
varConStatus = "conPausing";
ИначеЕсли Данные = "3" Тогда
varConStatus = "conOnline";
Иначе
varConStatus = "conUnknown";
КонецЕсли;
Если Данные = "Ошибка" Тогда
Сообщить(" Связь со Skype1C прервана");
КонецЕсли;
Сообщить(varConStatus);
ИначеЕсли Событие = "UserStatusChanged" Тогда
Если Данные = "0" Тогда
varCusStatus = "cusOffline";
ИначеЕсли Данные = "1" Тогда
varCusStatus = "cusOnline";
ИначеЕсли Данные = "2" Тогда
varCusStatus = "cusAway";
ИначеЕсли Данные = "3" Тогда
varCusStatus = "cusNotAvailable";
ИначеЕсли Данные = "4" Тогда
varCusStatus = "cusDoNotDisturb";
ИначеЕсли Данные = "5" Тогда
varCusStatus = "cusInvisible";
ИначеЕсли Данные = "6" Тогда
varCusStatus = "cusLoggedOut";
ИначеЕсли Данные = "7" Тогда
varCusStatus = "cusSkypeMe";
Иначе
varCusStatus = "cusUnknown";
КонецЕсли;
Сообщить(varCusStatus);
КонецЕсли;
КонецЕсли;
КонецПроцедуры 

ИСТОРИЯ:

2011-05-31 (v 0.1.0.1)

* Устанавливаю для входящего сообщения свойство Seen =  True. Чтобы не показывалось в клиенте Скайпа, как непрочтенное

Файлы обработки:

-