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 не будет опубликован. Обязательные поля помечены *