IP-телефонией уже никого не удивишь, многие пользуются услугами Skype, SipNet, TelMe и многих, многих других. Объединив усилия с единомышленниками, решили не повторять существующие решения, а создать сервис для интеграции уже существующих провайдеров Интернет-телефонии.
Зачем? Основная задача нашего сервиса – собрать воедино всех провайдеров, и дать возможность использовать одновременно разные шлюзы по самым выгодным тарифам на данное время и по данному направлению.
В топике я расскажу о том, было за «кулисами»: о выбранной архитектуре, приятных решениях и инструментариях разработки. А самых любознательных хабраюзеров ждет небольшой подарок.
Что мы реализовали?
- Единый баланс, нет необходимости пополнять аккаунты на разных сайтах, запоминать множество паролей и т. д.
- Сравнение тарифов по направлениям и выбор наиболее подходящего.
- Возможность звонить непосредственно с сайта.
- Подробную детализацию звонков.
- Удобный и безопасный API.
- Дополнительный функционал, такой как идентификация номера телефона, text-to-speech, отправка СМС.
Большая часть возможностей доступна уже сейчас на сайте uvoiceme.ru, меньшая – находится на закрытом бета-тестировании.
В прошлом году мы также подали заявку на участие в Web Ready, но в финал не пробились :)
Наши «фишки»
Имеется возможность закрепить провайдера к префиксу набора, т. е. настроить так, например, что в Канаду мы звоним, используя один шлюз, а для звонков по России – используем другой (с целью минимизации общей стоимости звонков).
Звонок можно осуществить непосредственно с сайта, без установки дополнительного программного обеспечения – для этого мы разработали соответствующий Java Applet. Мы сможем установить такой веб-телефон и на ваш сайт!
Имеется возможность соединить два телефона (в том числе, посредством API) – сервис дозвонится до участников разговора и, в случае их согласия, соединит их.
Аппаратно-программная сторона вопроса
Хостинг
- Выделенный сервер — AMD Opteron Dual Core 1218 5200+ 2 ядра, 4 GB DDR2 RAM, 2x 300GB HDD SATA2 (software RAID1), Ubuntu 10.10 x64.
- Виртуальный сервер видео-чата, VDS на Debian 5.0.
- Виртуальный хостинг от .masterhost, Windows Server 2008, ASP.NET (.NET Framework 4).
Реализация
- В качестве IP-PBX сервера используется Communigate Pro. Бесплатная лицензия на 5 пользователей.
- Биллинг самописный, база данных Postgres 8.4.6.
- Между биллингом и IP-PBX сервером есть прослойка, написанная на Cherry Python, которая обеспечивает обмен данными.
- Сайт и API реализованы на ASP.NET C# (Web Forms, WCF Services), для разработки использовалось программные продукты, полученные по программе Microsoft BizSpark.
Архитектура
Как работает биллинг?
Для любознательных я решил описать, каким именно образом работает наша система биллинга – кому-то может пригодиться, кому-то будет просто интересно.
Хранение баланса пользователя реализовано стандартным способом, путем хранения в таблице операций транзакций с признаками «приход» и «расход». Значения суммы пополнения храним с признаком «+», а все списания со счета храним с признаком «-».
Существуют следующие методы базы данных для фиксации звонков:
- INITCALL – IP-PBX вызывает данный метод с номером, на который должен позвонить пользователь. Биллинг проверяет баланс пользователя и доступность звонка, настройки провайдера по данному направлению. Отдает обратно настройки провайдера, через который необходимо осуществить звонок.
- STARTCALL – записывает в БД начало звонка. Фиксирует звонок с помощью UID звонка, с тарифами для данного направления в специальной таблице.
- PINGCALL – каждые 30 секунд проверяет состояние баланса и способность продолжения звонка, списывает сумму в соответствии с тарифом.
- ENDCALL – вызывается при завершении звонка, берет из БД последний вызов PINGCALL, вычисляет разницу во времени и списывает эквивалентные средства.
- INFO – периодически вызывается для фиксирования состоянии звонка.
- ERROR – вызывается при возникновении ошибки и фиксирует ее в БД.
Вот собственно и всё. В дальнейшем планируется реализация биллинга через RADIUS.
Наш API
Для сторонних разработчиков мы предоставляет удобный API, который позволит легко интегрировать весь разработанный нами функционал в ваше приложение (само приложение может быть абсолютно любым: веб, мобильным или просто настольным).
На сайте реализован API (REST), который состоит из следующих методов для:
- Авторизации клиента при доступе к API, возвращает sessionId для доступа к методам.
- Получения информации о пользователе.
- Поиска пользователя по логину.
- Немедленного вызова адресата (задается два номера).
- Отправки СМС.
- Отправки WAV-файлов на IP-PBX сервер для воспроизведения его адресату.
- Осуществления звонка для проверки номера телефона.
- Добавления нового контакта в список контактов пользователя.
- Удаления контакта из списка контактов пользователя.
- Получения списка контактов пользователя.
Монетизация
Сейчас все тарифы имеют минимальную наценку. В будущем планируем открыть провайдеров (сейчас они скрыты под названиями 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-ти счастливчиков – снимем наценку.