Использование Skype в бизнес-целях — история создания решения по интеграции Skype и офисной телефонии. В статье рассказывается о том, как сотрудники компании «АТС Дизайн» разработали программное решение, позволяющее подключить офисную АТС к сети Skype с использованием Asterisk, а также решить возникающую при этом проблему набора Skype абонентов с обычных кнопочных телефонов.
Интеграция Skype в бизнес-коммуникации
Skype — самая крупная сеть IP телефонии в мире, недавно перешагнувшая рубеж в 200,000,000 абонентов онлайн, настойчиво стучится в двери офисов.
И это немудрено. Люди, привыкшие вести личные коммуникации в Skype, не видят причин, почему бы им не использовать это бесплатное и эффективное средство в целях бизнес-коммуникаций.
Что дает Skype для компании? Давайте рассмотрим подробнее, по мере важности (по нашему мнению).
- Новые возможности для клиентов и экономия для клиентов (устранение барьеров) — клиенты могут звонить в компанию из любой страны, абсолютно бесплатно. Поэтому компании, публикующие свой
корпоративный Skype ID на сайте, получают новое конкурентное преимущество, предлагая клиентам удобный, бесплатный и привычный им способ позвонить в компанию. - Новые возможности для сотрудников и экономия денег компании — сотрудники компании, находящиеся в командировках, могут бесплатно звонить в офис со своего ноутбука при помощи Skype клиента и USB телефона, а не затрачивая значительные денежные средства на роуминг, международные и междугородние звонки.
- Экономия на междугородних и международных звонках (услуга SkypeOut) — при помощи Skype можно делать дешевые междугородние и
международные звонки по всему миру, правда, отразить затраты на такие звонки по всем правилам учета весьма затруднительно. - Следует также сказать о мало распространенной в России (по законодательным ограничениям) услуге SkypeIn. Данная услуга позволяет подключить реальный географический номер разных городов разных стран мира. Подключив такой номер к своему корпоративному Skype эккаунту, компания получает возможности принимать звонки из выбранного региона с обычных телефонов, а звонящие на такой номер абоненты даже представить себе не смогут, что звонок через сеть Skype примет сотрудник компании в другой стране.
Итак, использование Skype в бизнес-целях может предоставить существенную экономию на МГ/МН связь (которую, впрочем, непросто будет использовать по причине зарегулированной отрасли связи в России). Поэтому основной заслугой Skype можно назвать возможность звонить в организацию из любой точки мира клиентам и сотрудникам компании.
«Звонить в»... А как же насчет «звонить из»? Почему у нас связь получается односторонней? В компанию звонить из Skype могут, а из компании звонить в Skype не могут? Могут, но не совсем...
Проблема звонков в Skype
Дело в том, что идентификатор абонента сети Skype состоит не из цифр, как номер телефона, а из цифр и букв, например, vasea_pupkin123. Как набрать такой «номер» с обычного кнопочного телефона?
В существующих технических решениях по интеграции АТС и Skype (Skype шлюзах) существует возможность назначить некий короткий номер идентификатору Skype абонента (Skype ID). При получении номера Skype шлюз осуществляет поиск по своей таблице номеров и сопоставляет номер со Skype ID (если таковой был найден).
Таким образом, сотрудники, находящиеся в офисе, могут звонить своим коллегам, которые в данный момент в командировке, или клиентам. Для этого им надо попросить системного администратора компании добавить Skype ID требуемого абонента. Решение? Возможно.
Однако, представим такую ситуацию. Потенциальный клиент позвонил через Skype в компанию, попал в главное интерактивное меню с приветствием, далее перешел на секретаря, который соединил клиента с менеджером, у которого IP телефон с дисплеем, на котором отобразился Skype идентификатор звонящего (это если есть поддержка показа callerid name, многие телефоны могут показывать только цифры, и в этом случае ничего не покажут). В какой-то момент в результате короткого перебоя в работе сети связь разорвалась. Что делать менеджеру? У него два варианта:
ждать, пока клиент перезвонит снова;- переписать с телефона Skype ID клиента, бежать к системному администратору, и просить его добавить короткий номер. Можно конечно же перезвонить с личного Skype клиента, работающего на компьютере, но обязательно найдется случай, когда это будет невозможно (не установлен, личный skype, запрещен политикой безопасности, нет в данный момент гарнитуры, не будет записан разговор, и другое).
С учетом множества человеческих факторов, вероятнее всего, сотрудник пассивно будет ждать повторного звонка от клиента... Которого может и не
быть — контакт утерян, продажи не будет.
Решение
Как решить описанную проблему? - Автоматизировать взаимодействие с сетью Skype. Но каким образом?
Во-первых, при входящих звонках из сети Skype, шлюз должен:
- автоматически генерировать внутренний номер для нового Skype ID;
- устанавливать номер звонящего абонента, равный сгенерированному или найденному эккаунту;
- направить звонок в АТС.
В этом случае, сотрудники компании всегда будут видеть короткий внутренний номер звонящего из Skype абонента, и всегда смогут вызвать его по этому номеру.
Во-вторых, интерфейс по добавлению Skype ID должен быть доступен сотрудникам компании, чтобы они могли самостоятельно добавить требуемого Skype абонента, а не просить об этом системного администратора (чем меньше человеческого фактора, тем меньше потенциальных явных и скрытых препятствий).
Такое решение позволит извлечь максимальную пользу от интеграции офисной телефонии и Skype. Однако, где его взять? Рассмотрим имеющиеся варианты:
- использование аппаратного Skype шлюза — нами были рассмотрены несколько моделей популярных Skype шлюзов, ни одна из них не предоставляла настолько гибкий функционал функционал.
- Использование свободного ПО, поддерживающего Skype, и реализация на нем требуемой бизнес-логики. Из известного нам открытого ПО таковым является только Asterisk и FreeSWITCH. Мы реализовали требуемое решение на базе Asterisk.
Asterisk, распространяемый в исходных кодах
Компания Digium, создавшая Asterisk и выпустившая его в свободное плавание, совместно со Skype, разработали специальный канал-драйвер к сети Skype, позволяющий прозрачно коммутировать каналы Skype с любыми другими типами каналов (SIP, H323, FXS или FXO) - chan_skype.
Back-end
Asterisk обладает целым рядом интерфейсов по интеграции с внешними приложениями. В этом решении мы воспользовались самыми простыми, встроенными в Asterisk инструментами, а именно стандартным планом набора (диалпланом) и функцией func_odbc, позволяющей из диалплана напрямую взаимодействовать с базой данных. Таким образом, back-end требуемой бизнес логики был реализован следующими строчками диалплана, которые даже для непосвященному в Asterisk IT специалисту покажут всю мощь и простоту Asterisk.
Выдержка из extensions.conf:
| ; Context for outgoing skype calls [skype-out] exten => _XXXX,1,Set(DST=${EXTEN}) exten => _XXXX,2,Goto(s,1) exten => s,1,Set(skype_name=${ODBC_SKYPE_NAME(${DST})}) exten => s,n,ExecIf($["${skype_name}" = ""]|Hangup) exten => s,n,Dial(Skype/${skype_name}) ; Context for incoming Skype calls [skype-in] ; Save dialed exten exten => _X.,1,Set(DST=${EXTEN}) exten => _X.,2,Goto(s,1) ; If from skype comes start exten ;exten => s,1,ExecIf($["${DST}" = ""]|Set|DST=s); 1.4 version exten => s,1,ExecIf($["${DST}" = ""]?Set(DST=s)); 1.6 version ; Let see if we already have this account exten => s,n,Set(skype_name=${CALLERID(num)}) exten => s,n,Set(skype_ext=${ODBC_SKYPE_EXT(${skype_name})}) exten => s,n,GotoIf($["${skype_ext}" = ""]?not-found:found) ; Existing account found exten => s,n(found),NoOp(Found Skype ID ${skype_name} with exten ${skype_ext}) exten => s,n,Set(CALLERID(num)=${skype_ext}) exten => s,n,Set(CALLERID(name)=${skype_name}) exten => s,n,Goto(from-skype,${DST},1) ; New Skype account calling exten => s,n(not-found),Set(skype_ext=${ODBC_SKYPE_MAX_EXT()}); Get maximum extension number ;if database is empty we initialize 1-st exten 1000 ;exten => s,n,ExecIf($["${skype_ext}" = ""]|Set|skype_ext=1000); 1.4. version exten => s,n,ExecIf($["${skype_ext}" = ""]?Set(skype_ext=1000)); 1.6 version ; Add new record with next available exten ;exten => s,n,Set(ODBC_SKYPE_ADD()=$[${skype_ext}+1]\,${skype_name}); 1.4 version exten => s,n,Set(ODBC_SKYPE_ADD()=$[${skype_ext}+1],${skype_name}); 1.6 version exten => s,n,Set(CALLERID(num)=${skype_ext}) exten => s,n,Set(CALLERID(name)=${skype_name}) exten => s,n,Goto(from-skype,${DST},1) |
Front-end

Для реализации front-end, т.е. WEB интерфейса, был выбран скриптовый язык программирования Lua
, особым отличием которого является «легковесность», что очень важно в для приложений реального времени типа АТС, где запуск «тяжелых» процессов может сказаться на качестве связи.
В качестве хранилища данных (номеров и Skype ID) была выбран пакет SQLite3, специальная база данных дня встраиваемых (embedded) приложений.
Вот что мы получили в результате:
Так как Asterisk уже сам по себе является IP АТС, то для тех, кому уже посчастливилось его внедрить, получить описанное
решение проще простого. По адресу http://asteriskpbx.ru/wiki/skype-for-asterisk находится инструкция по свободному получению и простой установке пакета.
Если в компании уже используется АТС другого типа, это решение также легко можно интегрировать в существенную телефонную наноструктуру. Для этого надо установить Asterisk на виртуальный или реальный сервер в роли простого Skype шлюза.
Вот так выглядит схема современного офиса с использованием Skype, Asterisk и DECT IP телефонов:

Ссылки
- Главный сайт по Asterisk - www.asterisk.org
- Документация по Asterisk - www.asteriskpbx.ru
- Форум поддержки пользователей Asterisk - www.asterisk-support.ru
Подробное техническое описание решения — http://asteriskpbx.ru/wiki/skype-for-asterisk
