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

62 Comments

  1. cool.vlad4

    Решение мне не нужно, но все равно спс. Совет — мне кажется больше имеет смысл сделать разработку коммерческой — с поддержкой и с гарантией безопасности.

    Reply ↓
  2. cool.vlad4

    да и еще офф: недавно микрософт купил скайп…надеюсь это хорошо отразится на последнем…

    Reply ↓
  3. tango

    (2) более внимательное отношение к нуждам органов обеспечено

    Reply ↓
  4. ROM_1C

    (1) А как можно применить скайп + 1С в коммерции?

    (0) +1. Компонента с 1С 8 работает? Чтобы лучше смотрелось сделайте обработки для примера.

    Reply ↓
  5. cool.vlad4

    (4) Не моя забота, и потом коммерческая и коммерция — разные слова.

    Reply ↓
  6. cool.vlad4

    коммерческая разработка обязывает автора заключать договор, по которому обе стороны могут прописать все пункты. А бесплатная разработка не обязывает ни к чему, в том числе гарантий по отсутствию всяких шалостей.

    Reply ↓
  7. alyuev

    (4) Проверил на 1С:Предприятие 8.0 — работает.

    Reply ↓
  8. ROM_1C

    Сделать можно коммерческую, а кто ее будет применять?

    Reply ↓
  9. cool.vlad4

    (7) А кто ее будет применять некоммерческой?

    Reply ↓
  10. ROM_1C

    (9) Программисты-любители.

    Кому нужен скайп в 1С ели он стоит отбельным приложением.

    Хотя, если придумать что-то умное с использованием — то возможно и будут использоваться

    Reply ↓
  11. alyuev

    (10) Скайп-бот. Вот возможность использования.

    Reply ↓
  12. ROM_1C

    (11) я над этим давно думал, и скайп-бот, и аська-бот…

    Вот только как реализировать хорошего бота?

    Reply ↓
  13. cool.vlad4

    (10) Зачем? В крайнем случае есть skype + Skype4COM.dll

    Reply ↓
  14. cool.vlad4

    У менеджера есть контрагенты, часть которых использует скайп (в базе они прописаны). Так он вручную их оповещает, а так, он будет использовать (0). Но ни одно здравомыслящее руководство не позволит использовать решения, взятые с потолка, без гарантий. Может оно инфу сливает, тем более, что интернет для работы по любому должен быть открыт.

    Reply ↓
  15. alyuev

    (12) Система запросов. Например у нас: отсылаешь № контейнера на скайп-бот, а он тебе тут же ответ о статусе контейнера. И как получить в 1С уведомление о новом сообщении от skype + Skype4COM.dll без ВК?

    Reply ↓
  16. ROM_1C

    (14) У меня рассылка делаешься через пошту)

    Reply ↓
  17. cool.vlad4

    или вот например 15 . Вещь полезная, но вот проблема как раз безопасности.

    Reply ↓
  18. cool.vlad4

    (16) какая разница как у тебя делается рассылка, я взял пример наобум, смотри 15

    Reply ↓
  19. alyuev

    (17) И в чём именно проблема?

    Reply ↓
  20. cool.vlad4

    😀 см. 14

    Но ни одно здравомыслящее руководство не позволит использовать решения, взятые с потолка, без гарантий. Может оно инфу сливает, тем более, что интернет для работы по любому должен быть открыт.
    Reply ↓
  21. ROM_1C

    (19) Думаю, проблемы нет вообще. Нужно только хорошо продумать средство аутентификации (кто к чему)…

    Reply ↓
  22. cool.vlad4

    (21) Ты смеешься? Откуда тебе знать,что эта ВК делает?

    Reply ↓
  23. alyuev

    (21) Аутентификация по скайп-логину. Он заносится в карточку контрагента. Если он прописан и контейнер этого заказчика — выдается ответ на запрос.

    Reply ↓
  24. ROM_1C

    Если обработка — можно посмотреть. А если компонента — здесь нужно смотреть куда ломается. Думаю, фаерволом можно поймать если посылаются данные не туда.

    Reply ↓
  25. ROM_1C

    (23)пример:

    имя скайпов в спр.контрагенты: Вася; Петя.

    Вася делает запрос и удачно получает ответ на который должен знать только Петя.

    Здесь по логину мало.

    Reply ↓
  26. cool.vlad4

    (24) про снифферы можешь мне не рассказывать 😀 вот именно вариант для любителей…

    Reply ↓
  27. alyuev

    (26) Это уже вопрос реализации алгоритма на стороне 1С, а не на стороне компоненты.

    Reply ↓
  28. the1

    Поясните, нужен ли для работы ВК установленный Скайп?

    Reply ↓
  29. alyuev

    (28) Конечно нужен.

    Reply ↓
  30. ROM_1C

    Ну так что, кто присоединяется до создания разумного бота с интеграцией со скайпом и аськой?

    Reply ↓
  31. alyuev

    (30) И в чем должна быть заключена разумность бота? И вообще — это, наверное, уже не здесь нужно обсуждать. 🙂

    Reply ↓
  32. ROM_1C

    (31) от как раз-то это главный вопрос!

    Reply ↓
  33. cool.vlad4

    Ходячий анекдот 😀

    Reply ↓
  34. DoctorRoza

    + однозначно .. 🙂 .. Хотя бы идею и, пусть мало-мальскую, но реализацию. Подобные интеграции хорошо развивают креативность мысли! А для IT-ника это самое главное! P.s. Было бы шикарно соединить 1С и, например, Pacman’а! 😉 🙂

    Reply ↓
  35. the1

    (29) Спасибо, тогда в топку

    Reply ↓
  36. detec

    Интересная идея, но пока не вижу реального практического применения в рамках 1С 8. Мессенджер он на то и мессенджер, чтобы человек человеку руками писал вопросы-ответы. А в асинхронном режиме ИМХО, этот канал проигрывает электронной почте.

    Reply ↓
  37. lion11

    Вот можно еще вариант использования (для продвинутых директоров, например): Висит 1с-ка с запущенным ботом (скайпа или аськи — не важно). И у директора на мобиле запущено. Он с мобилы посылает запрос боту, например «ОСВ 51», и ему в ответ — остаток по банковским счетам, «ОСВ 62» — остаток дебиторов (например, первые 10 крупных), «ОСВ 62 Рога и копыта» — задолженность конкретного контрагента.

    Reply ↓
  38. cool.vlad4

    (37) Эту идею собственно автор и подчеркнул, читайте выше. Тут уж полет мысли не остановит — через скайп можно показывать демонстрационные конф-ции(на кодпроекте плагин), через скайп можно быстро обменятся данными (через xml естесн), потребуется только скайп, без настройки vpn и прочего, в общем что хотите. В прелесть скайп (в этом же его порок) — это хитрая пиринговая прога, устанавливающая связь практически где угодно (главное чтоб интернет был), а как использовать этот канал связи решайте сами. Хоть черную отчетность передавайте. 😀

    Reply ↓
  39. oaf_is

    Isq, Skype — это же online сервисы, всё время слушающие и передающие инет. Вполне может быть что-то типа RAdmina или снифера. 😎 Если дать доступ для компоненты с нескольких ПК, то надо их опубликовать на файерволе каждую. Почта безопаснее… сервер ОДИН и может бывть в ДМЗ зоне. 😉

    Reply ↓
  40. OldthiefXXX

    Мой вариант http://infostart.ru/profile/98833/

    Reply ↓
  41. nikk911

    Компоненту загрузил,

    команды:

     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

    Подскажите, пожалуйста, что поправить.

    Reply ↓
  42. alyuev

    (41) Skype4COM.dll установлен?

    Reply ↓
  43. winise

    Вот уж не думал что такое возможно, приятно удивили )))))))))))))

    Reply ↓
  44. realist

    Пытаюсь запустить.

    попытка

    ЗагрузитьВнешнююКомпоненту(«D: empSkype1C.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

    Reply ↓
  45. alyuev

    (44) А где Skype.Подключить()?

    Reply ↓
  46. realist

    (45) Спасибо. Уже разобрался. Спать, пожалуй, пора

    Reply ↓
  47. realist

    Вопрос решен. Ступил.

    Reply ↓
  48. svcoopers

    Отличное решение. Было бы неплохо сделать это же с другими мессенджерами с возможностью вставлять переписку

    Reply ↓
  49. dgonson

    При подключении появляется ошибка

    {Форма.Форма(3)}: Тип не определен (AddIn.Skype1C)

    Скайп = Новый(«AddIn.Skype1C»);

    Reply ↓
  50. CrazyDave

    Здравствуйте, можно узнать , умеет ли ваша компонента входить в скайп под заданным логином и паролем? Или скайп должен быть просто запущен на компьютере?

    Reply ↓
  51. alyuev

    (50) Нет, не умеет входить под логином, только подключается к уже запущенному скайпу. При первом подключении нужно в самом Скайпе разрешить подключение внешней компоненты.

    Reply ↓
  52. PolAlex2

    Сейчас читаю по ссылке, приведенной для скачивания Skype4COM.dll

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

    То есть похоже что возможность такой работы зарежут?

    Reply ↓
  53. mamaev.biz

    (105) Gazza, похоже на то. вот мерзавцы.

    Reply ↓
  54. mzelensky

    Доброго времени суток. Встала необходимость работы со Скайпом из 1С. Проблема в том, что перед работой необходимо добавить 1С-ку в контроль доступа программного интерфейса (в настройках скайпа). Можно ли как-то сделать это программно из той-же 1С или может скриптом каким-нибудь?

    Reply ↓
  55. alyuev

    Я делал доступ для 1С вручную из интерфейса скайпа. Один раз.

    Reply ↓
  56. mzelensky

    (55) Сейчас встала еще пара вопросов:

    1) Как можно переключаться между несколькими запущенными сеансами скайпа (разные учетки)?

    2) Как закрыть определенный сеанс скайпа?

    Reply ↓
  57. 3762515

    подписался

    Reply ↓
  58. atlantooo

    Далее пойдут темы с интеграцией VK, Мой мир, Одноклассники. Ну а чо, настрочил отчеты и сразу по одной кнопке в соц сети новость разослал. Уплатил налоги — сразу уведомление в аську главному налоговому инспектору. А уж коли просрочил уплату в ПФР — 1С сама стук стук кому надо по почте. Автоматизация епта, нет предела совершенству!

    Reply ↓
  59. maXon777

    Эх, не работает больше API с чатом…Звонки работают!

    https://support.skype.com/ru/faq/FA12384/kak-prilozenie-tret-ego-lica-rabotaet-so-skype-i-kak-izmenenia-v-skype-povliaut-na-nego

    Reply ↓
  60. teranp

    идея хороша для отслеживания переписок сотрудников чтобы инфа не утекала супер было бы если еше агент таким же образом завязать

    Reply ↓
  61. sashocq

    Есть сведения о работоспособности компоненты сейчас под 8.3? Может, версия новая есть?

    Reply ↓
  62. alyuev

    Сведений нет. Не проверял.

    Reply ↓

Leave a Comment

Ваш адрес email не будет опубликован. Обязательные поля помечены *