gifts2017

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 297
.dll 40,00Kb
10.04.12
297
.dll 40,00Kb Скачать

См. также

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

Комментарии

1. Ийон Тихий (cool.vlad4) 24.05.11 14:29
Решение мне не нужно, но все равно спс. Совет - мне кажется больше имеет смысл сделать разработку коммерческой - с поддержкой и с гарантией безопасности.
2. Ийон Тихий (cool.vlad4) 24.05.11 14:30
да и еще офф: недавно микрософт купил скайп...надеюсь это хорошо отразится на последнем...
3. Михаил Ражиков (tango) 24.05.11 14:36
(2) более внимательное отношение к нуждам органов обеспечено
4. ROM (ROM_1C) 24.05.11 15:35
(1) А как можно применить скайп + 1С в коммерции?
(0) +1. Компонента с 1С 8 работает? Чтобы лучше смотрелось сделайте обработки для примера.
5. Ийон Тихий (cool.vlad4) 24.05.11 15:48
(4) Не моя забота, и потом коммерческая и коммерция - разные слова.
6. Ийон Тихий (cool.vlad4) 24.05.11 15:50
коммерческая разработка обязывает автора заключать договор, по которому обе стороны могут прописать все пункты. А бесплатная разработка не обязывает ни к чему, в том числе гарантий по отсутствию всяких шалостей.
7. ROM (ROM_1C) 24.05.11 15:56
Сделать можно коммерческую, а кто ее будет применять?
8. Александр Алюев (alyuev) 24.05.11 15:56
(4) Проверил на 1С:Предприятие 8.0 - работает.
9. Ийон Тихий (cool.vlad4) 24.05.11 15:58
(7) А кто ее будет применять некоммерческой?
10. ROM (ROM_1C) 24.05.11 16:04
(9) Программисты-любители.
Кому нужен скайп в 1С ели он стоит отбельным приложением.
Хотя, если придумать что-то умное с использованием - то возможно и будут использоваться
11. Александр Алюев (alyuev) 24.05.11 16:05
(10) Скайп-бот. Вот возможность использования.
12. Ийон Тихий (cool.vlad4) 24.05.11 16:08
(10) Зачем? В крайнем случае есть skype + Skype4COM.dll
13. ROM (ROM_1C) 24.05.11 16:08
(11) я над этим давно думал, и скайп-бот, и аська-бот...
Вот только как реализировать хорошего бота?
14. Ийон Тихий (cool.vlad4) 24.05.11 16:10
У менеджера есть контрагенты, часть которых использует скайп (в базе они прописаны). Так он вручную их оповещает, а так, он будет использовать (0). Но ни одно здравомыслящее руководство не позволит использовать решения, взятые с потолка, без гарантий. Может оно инфу сливает, тем более, что интернет для работы по любому должен быть открыт.
15. Александр Алюев (alyuev) 24.05.11 16:11
(12) Система запросов. Например у нас: отсылаешь № контейнера на скайп-бот, а он тебе тут же ответ о статусе контейнера. И как получить в 1С уведомление о новом сообщении от skype + Skype4COM.dll без ВК?
16. ROM (ROM_1C) 24.05.11 16:13
(14) У меня рассылка делаешься через пошту)
17. Ийон Тихий (cool.vlad4) 24.05.11 16:13
или вот например 15 . Вещь полезная, но вот проблема как раз безопасности.
18. Ийон Тихий (cool.vlad4) 24.05.11 16:14
(16) какая разница как у тебя делается рассылка, я взял пример наобум, смотри 15
19. Александр Алюев (alyuev) 24.05.11 16:14
(17) И в чём именно проблема?
20. Ийон Тихий (cool.vlad4) 24.05.11 16:15
:D см. 14
Но ни одно здравомыслящее руководство не позволит использовать решения, взятые с потолка, без гарантий. Может оно инфу сливает, тем более, что интернет для работы по любому должен быть открыт.
21. ROM (ROM_1C) 24.05.11 16:17
(19) Думаю, проблемы нет вообще. Нужно только хорошо продумать средство аутентификации (кто к чему)...
22. Ийон Тихий (cool.vlad4) 24.05.11 16:19
(21) Ты смеешься? Откуда тебе знать,что эта ВК делает?
23. Александр Алюев (alyuev) 24.05.11 16:20
(21) Аутентификация по скайп-логину. Он заносится в карточку контрагента. Если он прописан и контейнер этого заказчика - выдается ответ на запрос.
24. ROM (ROM_1C) 24.05.11 16:22
Если обработка - можно посмотреть. А если компонента - здесь нужно смотреть куда ломается. Думаю, фаерволом можно поймать если посылаются данные не туда.
25. Ийон Тихий (cool.vlad4) 24.05.11 16:25
(24) про снифферы можешь мне не рассказывать :D вот именно вариант для любителей...
26. ROM (ROM_1C) 24.05.11 16:25
(23)пример:
имя скайпов в спр.контрагенты: Вася; Петя.
Вася делает запрос и удачно получает ответ на который должен знать только Петя.
Здесь по логину мало.
27. Александр Алюев (alyuev) 24.05.11 16:29
(26) Это уже вопрос реализации алгоритма на стороне 1С, а не на стороне компоненты.
28. Maxim Kolkin (the1) 24.05.11 16:51
Поясните, нужен ли для работы ВК установленный Скайп?
29. Александр Алюев (alyuev) 24.05.11 16:53
30. ROM (ROM_1C) 24.05.11 17:30
Ну так что, кто присоединяется до создания разумного бота с интеграцией со скайпом и аськой?
31. Александр Алюев (alyuev) 24.05.11 17:52
(30) И в чем должна быть заключена разумность бота? И вообще - это, наверное, уже не здесь нужно обсуждать. :-)
32. ROM (ROM_1C) 24.05.11 17:59
(31) от как раз-то это главный вопрос!
33. Ийон Тихий (cool.vlad4) 24.05.11 18:13
34. Алексей Роза (DoctorRoza) 24.05.11 19:42
+ однозначно .. :) .. Хотя бы идею и, пусть мало-мальскую, но реализацию. Подобные интеграции хорошо развивают креативность мысли! А для IT-ника это самое главное! P.s. Было бы шикарно соединить 1С и, например, Pacman'а! ;) :)
35. Maxim Kolkin (the1) 25.05.11 10:59
36. Андрей Д. (detec) 25.05.11 11:00
Интересная идея, но пока не вижу реального практического применения в рамках 1С 8. Мессенджер он на то и мессенджер, чтобы человек человеку руками писал вопросы-ответы. А в асинхронном режиме ИМХО, этот канал проигрывает электронной почте.
37. Ден (lion11) 25.05.11 13:31
Вот можно еще вариант использования (для продвинутых директоров, например): Висит 1с-ка с запущенным ботом (скайпа или аськи - не важно). И у директора на мобиле запущено. Он с мобилы посылает запрос боту, например "ОСВ 51", и ему в ответ - остаток по банковским счетам, "ОСВ 62" - остаток дебиторов (например, первые 10 крупных), "ОСВ 62 Рога и копыта" - задолженность конкретного контрагента.
38. Ийон Тихий (cool.vlad4) 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) 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) 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) 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) 10.04.12 14:11
При подключении появляется ошибка

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