gifts2017

Интеграция 1С и Skype

Опубликовал Иван Иванов (arkanru) в раздел Программирование - Практика программирования

Положа руку на сердце, практическое удобство данной интеграции лично у меня вызывает сомнения.  По той простой причине, что в этом случае вольно или невольно вы выходите «за пределы» Скайпа, и возникает угроза конфиденциальности  данных. Но, наверное, с точки зрения заказчика, это очень удобно - находясь в форме 1С, одним кликом мышки связаться с контрагентом, отправить ему текстовое сообщение, и совсем уж здорово - прослушать последний разговор с клиентом.

Должен предупредить, что сам Скайп записи разговоров не поддерживает, записывать и воспроизводить разговор придется сторонними средствами. Лично для меня вопрос конфиденциальности остро не стоит, поэтому у меня все разговоры по Скайпу пишутся сторонней утилитой Free Video Call Recorder for Skype. Почему именно этой утилитой – а бог его знает, просто первой попалась на глаза, их в интернете  есть целый зверинец, выбирай любую. Мне для экспериментов подошла эта.

Но приступим.

Для интеграции Скайпа в 1С потребуется библиотека «Skype4Com.dll». Скачать ее можно как с сайта самого Скайпа, так и из любого другого места. Ссылок на скачивание в инете великое множество.

Следующий шаг – регистрация библиотеки в системе.

Тут все как обычно, библиотека регистрируется утилитой Regsrv32, далее указываете путь и больше не заморачиваетесь. Для простоты положил библиотеку в корень диска, и регистрация прошла без проблем.

И вот после этих манипуляций переходим, собственно, к кодированию:

Тут тоже все достаточно банально:

Скайп = ПолучитьCOMОбъект("", "Skype4COM.Skype");

Если Скайп = Неопределено Тогда

                Сообщить("Ошибка создания объекта!");

КонецЕсли;

 

Раскрывая объект Скайп в отладчике, видим все,  что нам доступно, первое необходимое нам свойство – IsRunning

Если Скайп не запущен, то запускаем:

Если Не Скайп.Client.IsRunning Тогда

                Скайп.Client.Start(True,True);

                // Что бы окно Скайпа не мельтишило на экране на скорую руку придумал такой способ,

                //запускаем пустой цикл на 10 секунд, если этого не сделать,

                //то Скайп не успеет загрузиться и следующая команда 1С выдаст ошибку

                НачВремя = ТекущаяДата();

    Пока 1 = 1 Цикл

                Если ТекущаяДата() - НачВремя > 10 Тогда

                Прервать;

        КонецЕсли;

                КонецЦикла;

                // и запускаем Скайп со свернутым окном

                Скайп.Client.Minimize();

КонецЕсли;

 

Скайп запустится с текущими установками, то есть под ником и паролем, с которыми он запускался в последний раз, естественно, если он настроен таким образом.

Cледующий шаг – читаем список контактов, для удобства создадим ТаблицуЗначений с тремя колонками.

ПользователиСкайп = Новый ТаблицаЗначений;

ПользователиСкайп.Колонки.Добавить("ИДСкайп",Новый ОписаниеТипов("Строка"));

ПользователиСкайп.Колонки.Добавить("ИМЯ",Новый ОписаниеТипов("Строка"));

ПользователиСкайп.Колонки.Добавить("Статус", Новый ОписаниеТипов("Строка"));

 

В последней строке может быть и Булево, но мне проще со Строкой

И запускаем цикл

Для каждого Контакт ИЗ Скайп.Friends Цикл

                СТР = ПользователиСкайп.Добавить();

                СТР.ИДСкайп= Контакт.Handle;

                Если СОКРЛП(Контакт.FullName)="" тогда

                               СТР.ИМЯ= Контакт.Handle;

                Иначе

                               СТР.ИМЯ= Контакт.FullName;

                Конецесли;

                СТР.Статус = Контакт.OnlineStatus;

КонецЦикла;

 

 Что дальше делать с этой таблицей – дело вкуса, можно обойтись и без таблицы значений и сразу все вывести в табличное поле на форме, но для первых шагов лучше вывести в таблицу и смотреть ее в отладчике.

И финал наших манипуляций – звонок по Скайпу:

Скайп.PlaceCall(ИДСкайп);

 В том случае, если нужно позвонить на произвольный номер, то пишем строку формата "+71234567890" и подставляем ее вместо «ИДСкайп». Выскочит окошко Скайп, и пойдет звонок на указанный номер.

 Здесь приведена самая общая схема работы со Скайпом, не более того. Будет время, расскажу, как записывать звонки и, самое главное, как их воспроизводить. Но, напоминаю, в этом случае мы выходим за пределы Скайпа, и Скайп конфиденциальность не гарантирует.

См. также

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

Комментарии

1. Александр Крынецкий (echo77) 12.09.15 07:05
Пустой цикл. - не лучший способ подождать 10 секунд
2. Сергей (seermak) 12.09.15 08:43
есть соображения как убрать предупреждение Скайпа - доступ для приложений?
= сам разобрался - надо в настройках скайпа, на закладне дополнительно -контроль доступа других программ в скайп разрешить доступ из 1С
и еще = http://devdelphi.ru/?tag=skype-api = полное(надеюсь) описание по скайп API
Прикрепленные файлы:
3. Иван Иванов (arkanru) 13.09.15 12:29
4. eugenie zheludkov (eugeniezheludkov) 14.09.15 01:24
(3) arkanru, отвечу за него, 1. вынести в вашу компоненту sleep 2. вызвать sleep через cscript 3. подключить обработчик ожидания, в котором уже выполнить то что после цикла.
пустой цикл жрет ресурсы и по этому считается очень плохой практикой (хотя наверное каждый успел в этом нагрешить), а слип отдает процессор другим приложениям.
5. Алексей Роза (DoctorRoza) 14.09.15 09:12
Скажите, а зачем скайп в 1С? :)
6. eugenie zheludkov (eugeniezheludkov) 14.09.15 10:02
(5) DoctorRoza, а зачем в 1с проверка и прием почты? видимо у кого-то в компании основное средство коммуникации между сотрудниками и подразделениями: skype или lynq
7. Иван Иванов (arkanru) 14.09.15 12:48
8. Алексей Роза (DoctorRoza) 14.09.15 13:42
(6) eugeniezheludkov, ну не скажите! мне из почты нужно сохранять вложения в 1С - тут работа с почтой оправдана. А скайп из 1С, что дает?
9. Рустам Гулиев (r-guliev) 16.09.15 07:45
а "когда мы выйдем за пределы Скайпа"? )
10. Кирилл Бондаренко (karapuzzzz) 16.09.15 11:15
(9) r-guliev, Когда потребуется сохранять запись звонка
11. Кирилл Бондаренко (karapuzzzz) 16.09.15 11:33
(8) DoctorRoza, можно ответить одним словом (аббревиатурой) - CRM. Именно для этого и существуют такие решения.
А если подробнее, то существует целый зверинец решений для Asterisk. Что это такое, думаю, вы знаете (для тех, кто не знает, это система IP-телефонии). Так вот на предприятии Skype используется для связи с клиентами и удобно сделать звонок кнопкой из расходной накладной, чем искать контакт из длинющего списка. Так же, судя по описанию API, можно при входящем звонке регистрировать его как событие в CRM.
DoctorRoza; +1 Ответить
12. Сергей Фомин (sergei2k) 18.09.15 13:31
(3) arkanru,

Может так?

...
   ПодключитьОбработчикОжидания("ОжиданиеSkype", 2, Истина);

КонецПроцедуры

&НаКлиенте
Процедура ОжиданиеSkype() Экспорт

   Если Не Скайп.Client.IsRunning Тогда
      ПодключитьОбработчикОжидания("ОжиданиеSkype", 2, Истина);
   Иначе
      // Продолжить работу со скайпом
   КонецЕсли;

КонецПроцедуры
...Показать Скрыть
13. Иван Иванов (arkanru) 23.09.15 16:52
(12) sergei2k, сорри, sleep() мне больше нравится, что-то я про него забывать стал .....
Для написания сообщения необходимо авторизоваться
Прикрепить файл
Дополнительные параметры ответа