Со 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. Чтобы не показывалось в клиенте Скайпа, как непрочтенное