IE 2017

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

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

Наименование Файл Версия Размер
Skype1C.dll
.dll 40,00Kb
10.04.12
303
.dll 40,00Kb 303 Скачать

См. также

Комментарии
1. Ийон Тихий (cool.vlad4) 41 24.05.11 14:29 Сейчас в теме
Решение мне не нужно, но все равно спс. Совет - мне кажется больше имеет смысл сделать разработку коммерческой - с поддержкой и с гарантией безопасности.
2. Ийон Тихий (cool.vlad4) 41 24.05.11 14:30 Сейчас в теме
да и еще офф: недавно микрософт купил скайп...надеюсь это хорошо отразится на последнем...
3. Михаил Ражиков (tango) 475 24.05.11 14:36 Сейчас в теме
(2) более внимательное отношение к нуждам органов обеспечено
4. ROM ROM (ROM_1C) 663 24.05.11 15:35 Сейчас в теме
(1) А как можно применить скайп + 1С в коммерции?
(0) +1. Компонента с 1С 8 работает? Чтобы лучше смотрелось сделайте обработки для примера.
5. Ийон Тихий (cool.vlad4) 41 24.05.11 15:48 Сейчас в теме
(4) Не моя забота, и потом коммерческая и коммерция - разные слова.
6. Ийон Тихий (cool.vlad4) 41 24.05.11 15:50 Сейчас в теме
коммерческая разработка обязывает автора заключать договор, по которому обе стороны могут прописать все пункты. А бесплатная разработка не обязывает ни к чему, в том числе гарантий по отсутствию всяких шалостей.
7. ROM ROM (ROM_1C) 663 24.05.11 15:56 Сейчас в теме
Сделать можно коммерческую, а кто ее будет применять?
8. Александр Алюев (alyuev) 199 24.05.11 15:56 Сейчас в теме
(4) Проверил на 1С:Предприятие 8.0 - работает.
9. Ийон Тихий (cool.vlad4) 41 24.05.11 15:58 Сейчас в теме
(7) А кто ее будет применять некоммерческой?
10. ROM ROM (ROM_1C) 663 24.05.11 16:04 Сейчас в теме
(9) Программисты-любители.
Кому нужен скайп в 1С ели он стоит отбельным приложением.
Хотя, если придумать что-то умное с использованием - то возможно и будут использоваться
11. Александр Алюев (alyuev) 199 24.05.11 16:05 Сейчас в теме
(10) Скайп-бот. Вот возможность использования.
12. Ийон Тихий (cool.vlad4) 41 24.05.11 16:08 Сейчас в теме
(10) Зачем? В крайнем случае есть skype + Skype4COM.dll
13. ROM ROM (ROM_1C) 663 24.05.11 16:08 Сейчас в теме
(11) я над этим давно думал, и скайп-бот, и аська-бот...
Вот только как реализировать хорошего бота?
14. Ийон Тихий (cool.vlad4) 41 24.05.11 16:10 Сейчас в теме
У менеджера есть контрагенты, часть которых использует скайп (в базе они прописаны). Так он вручную их оповещает, а так, он будет использовать (0). Но ни одно здравомыслящее руководство не позволит использовать решения, взятые с потолка, без гарантий. Может оно инфу сливает, тем более, что интернет для работы по любому должен быть открыт.
15. Александр Алюев (alyuev) 199 24.05.11 16:11 Сейчас в теме
(12) Система запросов. Например у нас: отсылаешь № контейнера на скайп-бот, а он тебе тут же ответ о статусе контейнера. И как получить в 1С уведомление о новом сообщении от skype + Skype4COM.dll без ВК?
16. ROM ROM (ROM_1C) 663 24.05.11 16:13 Сейчас в теме
(14) У меня рассылка делаешься через пошту)
17. Ийон Тихий (cool.vlad4) 41 24.05.11 16:13 Сейчас в теме
или вот например 15 . Вещь полезная, но вот проблема как раз безопасности.
18. Ийон Тихий (cool.vlad4) 41 24.05.11 16:14 Сейчас в теме
(16) какая разница как у тебя делается рассылка, я взял пример наобум, смотри 15
19. Александр Алюев (alyuev) 199 24.05.11 16:14 Сейчас в теме
(17) И в чём именно проблема?
20. Ийон Тихий (cool.vlad4) 41 24.05.11 16:15 Сейчас в теме
:D см. 14
Но ни одно здравомыслящее руководство не позволит использовать решения, взятые с потолка, без гарантий. Может оно инфу сливает, тем более, что интернет для работы по любому должен быть открыт.
21. ROM ROM (ROM_1C) 663 24.05.11 16:17 Сейчас в теме
(19) Думаю, проблемы нет вообще. Нужно только хорошо продумать средство аутентификации (кто к чему)...
22. Ийон Тихий (cool.vlad4) 41 24.05.11 16:19 Сейчас в теме
(21) Ты смеешься? Откуда тебе знать,что эта ВК делает?
23. Александр Алюев (alyuev) 199 24.05.11 16:20 Сейчас в теме
(21) Аутентификация по скайп-логину. Он заносится в карточку контрагента. Если он прописан и контейнер этого заказчика - выдается ответ на запрос.
24. ROM ROM (ROM_1C) 663 24.05.11 16:22 Сейчас в теме
Если обработка - можно посмотреть. А если компонента - здесь нужно смотреть куда ломается. Думаю, фаерволом можно поймать если посылаются данные не туда.
25. Ийон Тихий (cool.vlad4) 41 24.05.11 16:25 Сейчас в теме
(24) про снифферы можешь мне не рассказывать :D вот именно вариант для любителей...
26. ROM ROM (ROM_1C) 663 24.05.11 16:25 Сейчас в теме
(23)пример:
имя скайпов в спр.контрагенты: Вася; Петя.
Вася делает запрос и удачно получает ответ на который должен знать только Петя.
Здесь по логину мало.
27. Александр Алюев (alyuev) 199 24.05.11 16:29 Сейчас в теме
(26) Это уже вопрос реализации алгоритма на стороне 1С, а не на стороне компоненты.
28. Maxim Kolkin (the1) 283 24.05.11 16:51 Сейчас в теме
Поясните, нужен ли для работы ВК установленный Скайп?
29. Александр Алюев (alyuev) 199 24.05.11 16:53 Сейчас в теме
30. ROM ROM (ROM_1C) 663 24.05.11 17:30 Сейчас в теме
Ну так что, кто присоединяется до создания разумного бота с интеграцией со скайпом и аськой?
31. Александр Алюев (alyuev) 199 24.05.11 17:52 Сейчас в теме
(30) И в чем должна быть заключена разумность бота? И вообще - это, наверное, уже не здесь нужно обсуждать. :-)
32. ROM ROM (ROM_1C) 663 24.05.11 17:59 Сейчас в теме
(31) от как раз-то это главный вопрос!
33. Ийон Тихий (cool.vlad4) 41 24.05.11 18:13 Сейчас в теме
34. Алексей Роза (DoctorRoza) 24.05.11 19:42 Сейчас в теме
+ однозначно .. :) .. Хотя бы идею и, пусть мало-мальскую, но реализацию. Подобные интеграции хорошо развивают креативность мысли! А для IT-ника это самое главное! P.s. Было бы шикарно соединить 1С и, например, Pacman'а! ;) :)
35. Maxim Kolkin (the1) 283 25.05.11 10:59 Сейчас в теме
36. Андрей Д. (detec) 128 25.05.11 11:00 Сейчас в теме
Интересная идея, но пока не вижу реального практического применения в рамках 1С 8. Мессенджер он на то и мессенджер, чтобы человек человеку руками писал вопросы-ответы. А в асинхронном режиме ИМХО, этот канал проигрывает электронной почте.
37. Ден (lion11) 139 25.05.11 13:31 Сейчас в теме
Вот можно еще вариант использования (для продвинутых директоров, например): Висит 1с-ка с запущенным ботом (скайпа или аськи - не важно). И у директора на мобиле запущено. Он с мобилы посылает запрос боту, например "ОСВ 51", и ему в ответ - остаток по банковским счетам, "ОСВ 62" - остаток дебиторов (например, первые 10 крупных), "ОСВ 62 Рога и копыта" - задолженность конкретного контрагента.
38. Ийон Тихий (cool.vlad4) 41 25.05.11 13:44 Сейчас в теме
(37) Эту идею собственно автор и подчеркнул, читайте выше. Тут уж полет мысли не остановит - через скайп можно показывать демонстрационные конф-ции(на кодпроекте плагин), через скайп можно быстро обменятся данными (через xml естесн), потребуется только скайп, без настройки vpn и прочего, в общем что хотите. В прелесть скайп (в этом же его порок) - это хитрая пиринговая прога, устанавливающая связь практически где угодно (главное чтоб интернет был), а как использовать этот канал связи решайте сами. Хоть черную отчетность передавайте. :D
39. Oleg . (oaf_is) 28.05.11 15:14 Сейчас в теме
Isq, Skype - это же online сервисы, всё время слушающие и передающие инет. Вполне может быть что-то типа RAdmina или снифера. 8-) Если дать доступ для компоненты с нескольких ПК, то надо их опубликовать на файерволе каждую. Почта безопаснее... сервер ОДИН и может бывть в ДМЗ зоне. ;)
40. Илья Пешкичев (OldthiefXXX) 145 30.05.11 13:02 Сейчас в теме
41. nikk niki (nikk911) 26.10.11 15:35 Сейчас в теме
Компоненту загрузил,
команды:
	Skype.Подключить();
	Skype.ОтправитьСообщение("MSV","TEST");


вызывают ошибки:
Skype1C : Ошибка ActiveX component can't create object
Skype1C : Ошибка Object variable or With block variable not set

платформа 1с7.7
skype 5.3.0.120

Подскажите, пожалуйста, что поправить.
42. Александр Алюев (alyuev) 199 26.10.11 16:54 Сейчас в теме
43. Владимир (winise) 29.10.11 00:24 Сейчас в теме
Вот уж не думал что такое возможно, приятно удивили )))))))))))))
44. realist (realist) 20.12.11 23:33 Сейчас в теме
Пытаюсь запустить.

попытка
ЗагрузитьВнешнююКомпоненту("D:\temp\Skype1C.dll");
Skype = Новый("AddIn.Skype1C");
Исключение
Сообщить(ОписаниеОшибки());
КонецПопытки;

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

НА ОтправитьСообщение Выдает ошибку:

Skype1C : Ошибка Object variable or With block variable not set.

В чем может быть проблема?
Операционка windows7, skype 5.6.59.110, 1c 8.1.14.15
45. Александр Алюев (alyuev) 199 20.12.11 23:40 Сейчас в теме
46. realist (realist) 20.12.11 23:47 Сейчас в теме
47. realist (realist) 20.12.11 23:47 Сейчас в теме
(45) Спасибо. Уже разобрался. Спать, пожалуй, пора
48. Mottor (svcoopers) 03.01.12 22:49 Сейчас в теме
Отличное решение. Было бы неплохо сделать это же с другими мессенджерами с возможностью вставлять переписку
49. Dgonson Dgonson (dgonson) 90 10.04.12 14:11 Сейчас в теме
При подключении появляется ошибка

{Форма.Форма(3)}: Тип не определен (AddIn.Skype1C)
Скайп = Новый("AddIn.Skype1C");
50. Игорь Баринов (CrazyDave) 24.04.12 19:41 Сейчас в теме
Здравствуйте, можно узнать , умеет ли ваша компонента входить в скайп под заданным логином и паролем? Или скайп должен быть просто запущен на компьютере?
51. Александр Алюев (alyuev) 199 24.04.12 21:27 Сейчас в теме
(50) Нет, не умеет входить под логином, только подключается к уже запущенному скайпу. При первом подключении нужно в самом Скайпе разрешить подключение внешней компоненты.
52. Алексей Полубенский (PolAlex2) 119 26.08.13 13:42 Сейчас в теме
Сейчас читаю по ссылке, приведенной для скачивания Skype4COM.dll

"Important: The Desktop API is no longer supported and some of its features will be gradually discontinued."

То есть похоже что возможность такой работы зарежут?
53. Павел Мамаев (mamaev.biz) 09.09.13 15:49 Сейчас в теме
(105) Gazza, похоже на то. вот мерзавцы.
54. Макс Зеленский (mzelensky) 53 07.07.14 12:21 Сейчас в теме
Доброго времени суток. Встала необходимость работы со Скайпом из 1С. Проблема в том, что перед работой необходимо добавить 1С-ку в контроль доступа программного интерфейса (в настройках скайпа). Можно ли как-то сделать это программно из той-же 1С или может скриптом каким-нибудь?
55. Александр Алюев (alyuev) 199 08.07.14 12:13 Сейчас в теме
Я делал доступ для 1С вручную из интерфейса скайпа. Один раз.
56. Макс Зеленский (mzelensky) 53 09.07.14 10:43 Сейчас в теме
(55) Сейчас встала еще пара вопросов:
1) Как можно переключаться между несколькими запущенными сеансами скайпа (разные учетки)?
2) Как закрыть определенный сеанс скайпа?
57. Юрий Вячеславович (3762515) 28.07.14 10:17 Сейчас в теме
58. Владимир Иванов (atlantooo) 28.07.14 11:31 Сейчас в теме
Далее пойдут темы с интеграцией VK, Мой мир, Одноклассники. Ну а чо, настрочил отчеты и сразу по одной кнопке в соц сети новость разослал. Уплатил налоги - сразу уведомление в аську главному налоговому инспектору. А уж коли просрочил уплату в ПФР - 1С сама стук стук кому надо по почте. Автоматизация епта, нет предела совершенству!
59. Максим Сафонов (maXon777) 94 28.10.14 17:35 Сейчас в теме
60. Konstantin Possokhov (teranp) 17.11.14 21:27 Сейчас в теме
идея хороша для отслеживания переписок сотрудников чтобы инфа не утекала супер было бы если еше агент таким же образом завязать
63. Александр Кузин (sashocq) 189 20.07.16 08:52 Сейчас в теме
Есть сведения о работоспособности компоненты сейчас под 8.3? Может, версия новая есть?
64. Александр Алюев (alyuev) 199 20.07.16 15:09 Сейчас в теме
Сведений нет. Не проверял.
Оставьте свое сообщение