Skype1C

Опубликовал Александр Алюев (alyuev) в раздел Программирование - Внешние компоненты

Внешняя компонента для работы со 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
297
.dll 40,00Kb 297 Скачать

См. также

Добавить вознаграждение
Комментарии
1. Ийон Тихий (cool.vlad4) 41 24.05.11 14:29 Сейчас в теме
Решение мне не нужно, но все равно спс. Совет - мне кажется больше имеет смысл сделать разработку коммерческой - с поддержкой и с гарантией безопасности.
2. Ийон Тихий (cool.vlad4) 41 24.05.11 14:30 Сейчас в теме
да и еще офф: недавно микрософт купил скайп...надеюсь это хорошо отразится на последнем...
3. Михаил Ражиков (tango) 467 24.05.11 14:36 Сейчас в теме
(2) более внимательное отношение к нуждам органов обеспечено
4. ROM ROM (ROM_1C) 662 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) 662 24.05.11 15:56 Сейчас в теме
Сделать можно коммерческую, а кто ее будет применять?
8. Александр Алюев (alyuev) 198 24.05.11 15:56 Сейчас в теме
(4) Проверил на 1С:Предприятие 8.0 - работает.
9. Ийон Тихий (cool.vlad4) 41 24.05.11 15:58 Сейчас в теме
(7) А кто ее будет применять некоммерческой?
10. ROM ROM (ROM_1C) 662 24.05.11 16:04 Сейчас в теме
(9) Программисты-любители.
Кому нужен скайп в 1С ели он стоит отбельным приложением.
Хотя, если придумать что-то умное с использованием - то возможно и будут использоваться
11. Александр Алюев (alyuev) 198 24.05.11 16:05 Сейчас в теме
(10) Скайп-бот. Вот возможность использования.
12. Ийон Тихий (cool.vlad4) 41 24.05.11 16:08 Сейчас в теме
(10) Зачем? В крайнем случае есть skype + Skype4COM.dll
13. ROM ROM (ROM_1C) 662 24.05.11 16:08 Сейчас в теме
(11) я над этим давно думал, и скайп-бот, и аська-бот...
Вот только как реализировать хорошего бота?
14. Ийон Тихий (cool.vlad4) 41 24.05.11 16:10 Сейчас в теме
У менеджера есть контрагенты, часть которых использует скайп (в базе они прописаны). Так он вручную их оповещает, а так, он будет использовать (0). Но ни одно здравомыслящее руководство не позволит использовать решения, взятые с потолка, без гарантий. Может оно инфу сливает, тем более, что интернет для работы по любому должен быть открыт.
15. Александр Алюев (alyuev) 198 24.05.11 16:11 Сейчас в теме
(12) Система запросов. Например у нас: отсылаешь № контейнера на скайп-бот, а он тебе тут же ответ о статусе контейнера. И как получить в 1С уведомление о новом сообщении от skype + Skype4COM.dll без ВК?
16. ROM ROM (ROM_1C) 662 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) 198 24.05.11 16:14 Сейчас в теме
(17) И в чём именно проблема?
20. Ийон Тихий (cool.vlad4) 41 24.05.11 16:15 Сейчас в теме
:D см. 14
Но ни одно здравомыслящее руководство не позволит использовать решения, взятые с потолка, без гарантий. Может оно инфу сливает, тем более, что интернет для работы по любому должен быть открыт.
21. ROM ROM (ROM_1C) 662 24.05.11 16:17 Сейчас в теме
(19) Думаю, проблемы нет вообще. Нужно только хорошо продумать средство аутентификации (кто к чему)...
22. Ийон Тихий (cool.vlad4) 41 24.05.11 16:19 Сейчас в теме
(21) Ты смеешься? Откуда тебе знать,что эта ВК делает?
23. Александр Алюев (alyuev) 198 24.05.11 16:20 Сейчас в теме
(21) Аутентификация по скайп-логину. Он заносится в карточку контрагента. Если он прописан и контейнер этого заказчика - выдается ответ на запрос.
24. ROM ROM (ROM_1C) 662 24.05.11 16:22 Сейчас в теме
Если обработка - можно посмотреть. А если компонента - здесь нужно смотреть куда ломается. Думаю, фаерволом можно поймать если посылаются данные не туда.
25. Ийон Тихий (cool.vlad4) 41 24.05.11 16:25 Сейчас в теме
(24) про снифферы можешь мне не рассказывать :D вот именно вариант для любителей...
26. ROM ROM (ROM_1C) 662 24.05.11 16:25 Сейчас в теме
(23)пример:
имя скайпов в спр.контрагенты: Вася; Петя.
Вася делает запрос и удачно получает ответ на который должен знать только Петя.
Здесь по логину мало.
27. Александр Алюев (alyuev) 198 24.05.11 16:29 Сейчас в теме
(26) Это уже вопрос реализации алгоритма на стороне 1С, а не на стороне компоненты.
28. Maxim Kolkin (the1) 277 24.05.11 16:51 Сейчас в теме
Поясните, нужен ли для работы ВК установленный Скайп?
29. Александр Алюев (alyuev) 198 24.05.11 16:53 Сейчас в теме
30. ROM ROM (ROM_1C) 662 24.05.11 17:30 Сейчас в теме
Ну так что, кто присоединяется до создания разумного бота с интеграцией со скайпом и аськой?
31. Александр Алюев (alyuev) 198 24.05.11 17:52 Сейчас в теме
(30) И в чем должна быть заключена разумность бота? И вообще - это, наверное, уже не здесь нужно обсуждать. :-)
32. ROM ROM (ROM_1C) 662 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) 277 25.05.11 10:59 Сейчас в теме
36. Андрей Д. (detec) 122 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 OldthiefXXX (OldthiefXXX) 139 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) 198 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) 198 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) 88 10.04.12 14:11 Сейчас в теме
При подключении появляется ошибка

{Форма.Форма(3)}: Тип не определен (AddIn.Skype1C)
Скайп = Новый("AddIn.Skype1C");
50. Игорь Баринов (CrazyDave) 24.04.12 19:41 Сейчас в теме
Здравствуйте, можно узнать , умеет ли ваша компонента входить в скайп под заданным логином и паролем? Или скайп должен быть просто запущен на компьютере?
51. Александр Алюев (alyuev) 198 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) 51 07.07.14 12:21 Сейчас в теме
Доброго времени суток. Встала необходимость работы со Скайпом из 1С. Проблема в том, что перед работой необходимо добавить 1С-ку в контроль доступа программного интерфейса (в настройках скайпа). Можно ли как-то сделать это программно из той-же 1С или может скриптом каким-нибудь?
55. Александр Алюев (alyuev) 198 08.07.14 12:13 Сейчас в теме
Я делал доступ для 1С вручную из интерфейса скайпа. Один раз.
56. Макс Зеленский (mzelensky) 51 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) 90 28.10.14 17:35 Сейчас в теме
60. Konstantin Possokhov (teranp) 17.11.14 21:27 Сейчас в теме
идея хороша для отслеживания переписок сотрудников чтобы инфа не утекала супер было бы если еше агент таким же образом завязать
63. Александр Кузин (sashocq) 187 20.07.16 08:52 Сейчас в теме
Есть сведения о работоспособности компоненты сейчас под 8.3? Может, версия новая есть?
64. Александр Алюев (alyuev) 198 20.07.16 15:09 Сейчас в теме
Сведений нет. Не проверял.
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа