Pull to refresh

UVoiceMe — сервис интеграции шлюзов IP-телефонии

Reading time4 min
Views1.5K


IP-телефонией уже никого не удивишь, многие пользуются услугами Skype, SipNet, TelMe и многих, многих других. Объединив усилия с единомышленниками, решили не повторять существующие решения, а создать сервис для интеграции уже существующих провайдеров Интернет-телефонии.
Зачем? Основная задача нашего сервиса – собрать воедино всех провайдеров, и дать возможность использовать одновременно разные шлюзы по самым выгодным тарифам на данное время и по данному направлению.

В топике я расскажу о том, было за «кулисами»: о выбранной архитектуре, приятных решениях и инструментариях разработки. А самых любознательных хабраюзеров ждет небольшой подарок.

Что мы реализовали?


  • Единый баланс, нет необходимости пополнять аккаунты на разных сайтах, запоминать множество паролей и т. д.
  • Сравнение тарифов по направлениям и выбор наиболее подходящего.
  • Возможность звонить непосредственно с сайта.
  • Подробную детализацию звонков.
  • Удобный и безопасный API.
  • Дополнительный функционал, такой как идентификация номера телефона, text-to-speech, отправка СМС.

Большая часть возможностей доступна уже сейчас на сайте uvoiceme.ru, меньшая – находится на закрытом бета-тестировании.
В прошлом году мы также подали заявку на участие в Web Ready, но в финал не пробились :)

Наши «фишки»


Имеется возможность закрепить провайдера к префиксу набора, т. е. настроить так, например, что в Канаду мы звоним, используя один шлюз, а для звонков по России – используем другой (с целью минимизации общей стоимости звонков).

Звонок можно осуществить непосредственно с сайта, без установки дополнительного программного обеспечения – для этого мы разработали соответствующий Java Applet. Мы сможем установить такой веб-телефон и на ваш сайт!


Имеется возможность соединить два телефона (в том числе, посредством API) – сервис дозвонится до участников разговора и, в случае их согласия, соединит их.

Аппаратно-программная сторона вопроса


Хостинг
  1. Выделенный сервер — AMD Opteron Dual Core 1218 5200+ 2 ядра, 4 GB DDR2 RAM, 2x 300GB HDD SATA2 (software RAID1), Ubuntu 10.10 x64.
  2. Виртуальный сервер видео-чата, VDS на Debian 5.0.
  3. Виртуальный хостинг от .masterhost, Windows Server 2008, ASP.NET (.NET Framework 4).

Реализация
  1. В качестве IP-PBX сервера используется Communigate Pro. Бесплатная лицензия на 5 пользователей.
  2. Биллинг самописный, база данных Postgres 8.4.6.
  3. Между биллингом и IP-PBX сервером есть прослойка, написанная на Cherry Python, которая обеспечивает обмен данными.
  4. Сайт и API реализованы на ASP.NET C# (Web Forms, WCF Services), для разработки использовалось программные продукты, полученные по программе Microsoft BizSpark.


Архитектура




Как работает биллинг?


Для любознательных я решил описать, каким именно образом работает наша система биллинга – кому-то может пригодиться, кому-то будет просто интересно.
Хранение баланса пользователя реализовано стандартным способом, путем хранения в таблице операций транзакций с признаками «приход» и «расход». Значения суммы пополнения храним с признаком «+», а все списания со счета храним с признаком «-».
Существуют следующие методы базы данных для фиксации звонков:
  1. INITCALL – IP-PBX вызывает данный метод с номером, на который должен позвонить пользователь. Биллинг проверяет баланс пользователя и доступность звонка, настройки провайдера по данному направлению. Отдает обратно настройки провайдера, через который необходимо осуществить звонок.
  2. STARTCALL – записывает в БД начало звонка. Фиксирует звонок с помощью UID звонка, с тарифами для данного направления в специальной таблице.
  3. PINGCALL – каждые 30 секунд проверяет состояние баланса и способность продолжения звонка, списывает сумму в соответствии с тарифом.
  4. ENDCALL – вызывается при завершении звонка, берет из БД последний вызов PINGCALL, вычисляет разницу во времени и списывает эквивалентные средства.
  5. INFO – периодически вызывается для фиксирования состоянии звонка.
  6. ERROR – вызывается при возникновении ошибки и фиксирует ее в БД.

Вот собственно и всё. В дальнейшем планируется реализация биллинга через RADIUS.

Наш API


Для сторонних разработчиков мы предоставляет удобный API, который позволит легко интегрировать весь разработанный нами функционал в ваше приложение (само приложение может быть абсолютно любым: веб, мобильным или просто настольным).
На сайте реализован API (REST), который состоит из следующих методов для:
  • Авторизации клиента при доступе к API, возвращает sessionId для доступа к методам.
  • Получения информации о пользователе.
  • Поиска пользователя по логину.
  • Немедленного вызова адресата (задается два номера).
  • Отправки СМС.
  • Отправки WAV-файлов на IP-PBX сервер для воспроизведения его адресату.
  • Осуществления звонка для проверки номера телефона.
  • Добавления нового контакта в список контактов пользователя.
  • Удаления контакта из списка контактов пользователя.
  • Получения списка контактов пользователя.
Более подробно с разработанным API можно ознакомиться непосредственно по адресу uvoiceme.ru/services.aspx#api

Монетизация


Сейчас все тарифы имеют минимальную наценку. В будущем планируем открыть провайдеров (сейчас они скрыты под названиями SIP1..SIPN), убрать наценку и брать оплату только за дополнительные услуги, например API или введем абонентскую плату.
Сейчас пополнять баланс можно через систему WebMoney или посредством активации PIN-кода. В дальнейшем предполагаем реализацию PIN-кодов в виде предоплаченных карт.
Сам PIN-код можно приобрести и за Яндекс.Деньги. Для этого после авторизации необходимо зайти на эту страницу и выбрать PIN-код. Доступны номиналы 3, 5, 10, 15, 20.

Наша команда


Читая схожие топики, меня всегда интересует команда, который делает этот проект. Поэтому привожу максимально полный список участников проекта.

nodir – общее руководство, БД, сайт, вспомогательные утилиты
dilshod (tdilshod@gmail.com) – прослойка между Communigate и биллингом
albertum (я), morgun, SoberPlatypus – сайт, API, тестирование
Алексей (ICQ: 233082107) – дизайн
Регина (ICQ: 248258665, solaris.ar@gmail.com) – копирайт


Члены команды, от которых пока не получено разрешение на публикацию персональных данных в данном топике:
Anonymous – настройка и скрипты для Communigate
Александр – «звонилка» на Java Applets
Anonymous – вёрстка
Андрей – информационная безопасность

Хочу также заметить, что в ходе разработке сайта и API был получен потрясающий опыт по удаленному парному программированию, найдены и обойдены грабли Npgsql и пр. Было на самом деле интересно!

Хабрабонус


Первым 50 хабраюзерам, зарегистрировавшимся на нашем сайте и написавшим nodir свою учетную запись (вашлогин@uvoiceme.ru), будет предоставлен бонус в виде пополнения счета на 1 USD. Прямо как ваучер от Skype, только без заморочек =)

Всем остальным хабраюзерам, не попавшим в число 50-ти счастливчиков – снимем наценку.
Tags:
Hubs:
+35
Comments64

Articles

Change theme settings