Случайны выбор дневника Раскрыть/свернуть полный список возможностей


Найдено 1453 сообщений
Cообщения с меткой

телефония - Самое интересное в блогах

Следующие 30  »
rss_rss_hh_new

Как виртуальному мобильному оператору (MVNO) работать с наибольшей выгодой для абонентов и для себя?

Понедельник, 30 Мая 2016 г. 15:37 (ссылка)


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



В предыдущих записях блога мы рассказывали в целом о сущности виртуальных мобильных операторов (MVNO), а также о технологии мульти-SIM. В рамках нового поста нам хотелось бы рассказать о прикладном решении, которое облегчает жизнь виртуальных операторов, обеспечивает комфортное общение абонентов в рамках проектов всех наших операторов и позволяет существенно сократить расходы на трафик.

Читать дальше →

https://habrahabr.ru/post/276083/

Комментарии (0)КомментироватьВ цитатник или сообщество
bcinform

Полезные компании на БЦИнформ

Понедельник, 23 Мая 2016 г. 10:24 (ссылка)


Компания «Северен-Телеком», успешно работающая в сфере коммуникаций, предлагает корпоративным клиентам услуги связи в Петербурге и Ленобласти: телефонию, установку Интернета, создание корпоративной сети, комплексные телекоммуникационные решения и многое другое. Подробнее: http://bcinform.ru/companies/spb/severen.html



5582936_severen (700x563, 134Kb)

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
bcinform

Полезные компании на БЦИнформ

Вторник, 17 Мая 2016 г. 10:52 (ссылка)


«ОБИТ» – телекоммуникационные услуги частным клиентам и организациям в России и Казахстане.


Подробнее о компании и предоставляемых услугах: http://bcinform.ru/companies/spb/obit.html


5582936_obit (700x563, 123Kb)
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
bcinform

Полезные компании на БЦИнформ

Среда, 27 Апреля 2016 г. 09:53 (ссылка)


«ОБИТ» – телекоммуникационные услуги частным клиентам и организациям в России и Казахстане.



5582936__2_ (700x563, 123Kb)
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Sipnet WebRTS

Пятница, 08 Апреля 2016 г. 18:38 (ссылка)


IP-телефония уже давно и прочно завоевала большую долю телекоммуникационного рынка. Это настолько выгодный и несложный инструмент голосовой связи, что даже традиционные операторы переводят часть своих мощностей на технологии IP-телефонии. Как бы то ни было, конечный смысл голосовой связи — сделать общение на расстоянии простым и доступным. Технологии успешно развиваются и, благодаря проекту WebRTC, стало возможно совершать звонки прямо из окна браузера, не используя никаких сторонних инструментов на стороне клиента.

Компания SipNet пристально следит за новинками VoIP, поэтому одной из первых реализовала законченное решение на базе WebRTC. Читать далее

https://habrahabr.ru/post/279217/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
bcinform

Полезные компании на БЦИнформ

Пятница, 08 Апреля 2016 г. 09:41 (ссылка)


«ОБИТ» – предоставление качественных и надежных услуг связи корпоративным клиентам, объектам коммерческой недвижимости, операторам связи, жильцам новостроек и домов повышенной комфортности.



5582936__2_ (700x563, 123Kb)
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
bcinform

Полезные компании на БЦИнформ

Среда, 30 Марта 2016 г. 09:49 (ссылка)


«ОБИТ» – предоставление качественных и надежных услуг связи корпоративным клиентам, объектам коммерческой недвижимости, операторам связи, жильцам новостроек и домов повышенной комфортности.



5582936_obit (700x563, 123Kb)
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Кейс разработки на Golang: платформа Виртуальной АТС ITooLabs

Воскресенье, 27 Марта 2016 г. 23:12 (ссылка)

Публикуем получасовое видео с кейсом разработки собственной телефонной платформы на Golang. Почему мы отказались от других вендорских решений и стали сами вендором, почему выбрали Golang, какие преимущества и недостатки он имеет перед другими языками программирования?



В докладе описаны кейсы разработки и эксплуатации платформы виртуальной АТС для операторов связи (свыше 20 000 аккаунтов) и голосовой почты для одного из крупнейших мобильных операторов юго-восточной Азии (70 миллионов пользователей).



Докладывает CEO ITooLabs Алексей Найденов (@growler).







Очень ждем обратной связи: понравилась ли тема доклада? Какие есть вопросы и о чем хотелось бы узнать? Будем рады развить тему для технических специалистов.



Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/280276/

Комментарии (0)КомментироватьВ цитатник или сообщество
bcinform

Полезные компании на БЦИнформ

Понедельник, 28 Марта 2016 г. 09:46 (ссылка)


 



Оператор связи «Смарт Телеком» осуществляет полный спектр деятельности по предоставлению услуг связи в Санкт-Петербурге и его регионах. Подробнее: http://bcinform.ru/companies/spb/smart-telekom.html



5582936_smart (700x563, 128Kb)

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Рынок Виртуальных АТС и ITooLabs. Итоги-2015

Вторник, 22 Марта 2016 г. 20:49 (ссылка)

Прошлый год был богат на события в телеком-отрасли и в жизни нашей компании. Подводить итоги в конце марта, наверное, не совсем обычно, но нам требовалось какое-то время на агрегацию всех результатов. Наконец, мы смогли подготовить интересную инфографику для операторов связи, где рассказываем о наших основных успехах и приоткрываем аналитику рынка Виртуальных АТС.







Начнем с достижений. 2015 год стал для нас знаковым: наши партнеры сделали нас самой продаваемой платформой Виртуальных АТС среди вендоров! Да и само количество операторов выросло практически вдвое. Причем значительный приток дали региональные операторы — все же в регионах облачные сервисы пока развиты слабо. Интересно, что у всех операторов было какое-то решение ВАТС (свое или от вендора), но продавалось оно плохо — пользователи ничего не понимали, ВАТС не решала их бизнес-проблемы. С чем бы нас не сравнивали, тестовые продажи нашей ВАТС превосходили все ожидания. Все же одно дело покупать ВАТС у вендора «до кучи», другое дело — выбирать вдумчиво и с прицелом на реальных клиентов.



Еще из интересного стоит отметить интерес к нашей платформе за рубежом. Мы поучаствовали в нескольких международных конференциях и заключили ряд договоров. Больше четверти выручки нам принесли именно зарубежные продажи, но мы рассчитываем на значительный рост в 2016 году. Конечно, ослабление рубля здесь сыграло свою роль. Вот оно, правильное импортозамещение — экспорт.







В 2015 году мы концентрировались на трех направлениях: Виртуальная АТС для операторов связи, разработка VAS-сервисов на базе нашей платформы и заказная разработка. В 2016 году мы открываем как минимум 2 новых направления, о которых скоро расскажем.







Нет необходимости еще раз рассказывать, что Виртуальная АТС должна быть у каждого оператора и желательно на нашей платформе.:) Что касается продаж, то кризисный 2015 год для рынка ВАТС стал самым успешным. Да, мы можем подтвердить корреляцию оттока с данными Росстата, малый бизнес стал чаще закрываться, но приток у нас увеличился. Всё же альтернативы у конечного клиента немного: стоимость железных решений выросло в 2 раза, а содержать в штате собственного телефониста малый бизнес не может. Также связываем такой серьезный рост с развитием функционала нашей платформы: мы выкатили новый интерфейс, объявили о новых интеграциях и возможностях, а также научили продавцов операторов как продавать правильно.







Весьма интересно, что по итогам 2015 года средний клиент немного укрупнился. Связано это опять же с возрастающим доверием средних и крупных компаний (от 30 сотрудников) к облачным сервисам. Довольно неожиданно было обнаружить, что мы стали серьезной заменой зарубежным софтсвитчам в крупных компаниях. Поэтому в этом году мы не сможем игнорировать хотелки крупных клиентов и колл-центров. Отдельно стоит отметить невероятную популярность продвинутого функционала Виртуальных АТС. Свыше 40% клиентов платят операторам больше за опции, которые помогают решить их бизнес-задачи.







Самым крупным проектом года в части VAS-сервисов стало внедрение нашей платформы голосовой почты в сеть одного из крупнейших операторов Юго-Восточной Азии. Сегодня ею пользуются свыше 70 млн. абонентов, а в пике проходит аж 1 500 звонков в секунду!



Здесь случилась даже забавная история. CEO этого азиатского оператора был очень доволен нашей работой по замене старой платформы голосовой почты и решил получше раскрутить свой сервис в стране, показывая это как преимущество перед операторами (да, голосовой почтой там действительно активно пользуются!). Он придумал такую схему: если вы звоните абоненту этого оператора и вы впервые дозваниваетесь на голосовую почту, то он приветствует клиента: «Привет! Я — CEO этого прекрасного оператора. Добро пожаловать в лучшую голосовую почту страны. Оставь свое сообщение после сигнала и я гарантирую, что мы доставим его твоему товарищу.» Только на мелодичном азиатском языке. Вы бы знали, как это сказалось на продажах и росте популярности услуги! Ну а мы считаем эти слова оценкой своего труда. Кстати, обязательно расскажем про этот кейс подробнее, но всему свое время.



Из профессиональных сервисов мы отметим уверенное развитие проекта по DPI для операторов связи и разработке функционала для крупных компаний и колл-центров. Чаще всего это интеграции различных софтсвитчей с различными CRM.







Ну и немного интересных фактов, связанных с 2015 годом.







Таким получился наш 2015-й. Скоро — новые статьи о текущих проектах, а также грядущее обновление нашего сайта.



Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/279941/

Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Calltracking в Minecraft или как быстро сделать трехмерный UI

Четверг, 17 Марта 2016 г. 15:52 (ссылка)

Пару месяцев назад назад я показал детям Minecraft, а чуть позже — купил им книгу по программированию в MineCraft. Правда, детям купил, чес-слово. Ну сам взял полистить, ну написал пару скриптов.

И на этом история и закочнилась бы, но на днях мне довелось поучаствовать в хакатоне одного calltracking сервиса. Для тех кто не в курсе, calltracking эта такая штука, которая предоставляет статистику звонков. И что важно для нашей истории — эта статистика доступна по API.

В этот момент отдельные части сложились в цельную картину и я подумал — о! статистика звонков в Minecrfat :)



Ну что ж, формат хакатона располагает к безумным идеям, а эта идея показалась мне достаточно безумной, чтобы быть реализованной :)

А если серьезно — то кто сказал что интерфейсы должны быть двумерными?

И кто сказал что трехмерный интерфейс это долго и сложно?

Вся затея у меня заняла 3 часа (57 строк на питоне), учитывая, что первые полчаса я разбирался как на python парсить джейсон %)



Под катом — вся история целиком, видео с результатом и бонус для дочитавших до конца — все 3 часа разработки в 3 минутном time-lapse видео.



Чтобы это все заработало мне понадобилось 3 простых шага:



1. Поднимаем сервер Minecraft который позволяет взаимодействовать с миром Minecraft по API на Python

2. Берем статистику звонков по calltracking API

3. Создаем кубики в Minecraft.



Ок, поехали!



1. Сервер Minecraft



Сервер майнкрафта с красивым названием bukkit у меня уже был готов (скачать его можно с сайта книги вместе с очень подробными видеоинструкциями)

Версия игры — 1.6.4, скрипты будем писать на Python, т.к. этот сервер их понимает.



2. Берем статистику звонков по API



Тут тоже все просто, пару строк на питоне и все готово

import json, requests
data = requests.get("https://istat24.com.ua/api/{your_api_key}/calls.json?counter_start_date=2016-02-01&counter_end_date=2016-02-05")
json = json.loads(data.content)


Пару слов про сам API.

Я использую API Calltracking сервиса iStat24 (в отделе разработки которого и происходил этот самый хакатон), он возвращает журнал звонков в JSON, а чтобы получить данные для определенного аккаунта нужно в этом самом аккаунте сгенерировать API_key, который у меня к хакатону был заготовлен заранее.

Пример звонка из JSON:

{
call_id: 5555555,
numberA: "380555555555",
numberB: "380555555555",
start: "2016-02-05 15:11:13",
duration: "00:03:57",
wait_duration: "00:00:07",
speak_duration: "00:03:50",
record: "http://url_to_the_audio_record.mp3",
accepted: 1,
direction: "incoming",
reklama_name: "Google organic",
reklama_id: 729
}




Из этого всего нас интересует

wait_duration — время ожидания звонка (гудки, короче говоря)

speak_duration — время разговора

accepted — значение 1/0 определяет был звонок принят или пропущен.



Итого, имеем массив звонков. Теперь осталось их только представить визуально.



3. Создаем кубики в Minecraft.



До этого все было просто, да? даже не просто — тривиально.

Вы наверное думаете что с этого места начнется какая-то магия? А вот и нет :)

Дело в том, что все написано до нас.

Есть расчудесная библиотека на питоне — minecraftstuff, которая умеет делать все основные вещи в Minecraft.

Нам осталось только описать где и какого типа кубик мы хотим создать.



Подключаем и инициализируем библиотеку:

import mcpi.minecraft as minecraft
import mcpi.block as block
import mcpi.minecraftstuff as minecraftstuff

mc = minecraft.Minecraft.create()
mcdrawing = minecraftstuff.MinecraftDrawing(mc)




Теперь координаты. Minecraft — мир трехмерный, поэтому очевидно что нам нужны x,y и z.

Можно брать текущие координаты персонажа командой mc.player.getTilePos(), но я решил захардкодить определенное место в мире Minecrft (просто потому, что после каждой итерации мне нужно было очищать все пространство с предыдущей попыткой «строительства».) Для дебага удобнее, в общем.



Кубик рисуется командой mc.setBlock(x, y, z, blockType)

А как удалить кубик?

Как оказалось — воздух в Minecraft — это тоже кубик :) Поэтому вместо удаления кубиков — нужно просто нарисовать кубики с воздухом.

Можно делать это поштучно при помощи это же команды mc.setBlock(x, y, z, block.AIR.id) — указывая тип блока «block.AIR.id»

А можно использовать команду mc.setBlocks() которая забивает прямоугольную область кубиками нужного типа. В книжке написано что это быстрее, чем рисовать кубики поштучно.



В итоге у меня получился вот такой код для очистки пространства:

mc.postToChat("START")

startX=146; startY=0; startZ=-30 // хардкод начальных координат

# Clean up
mc.setBlocks(startX-2, startY-20, startZ+5, startX+2, startY+200, startZ-250, 8)
time.sleep(2)
mc.setBlocks(startX-3, startY-1, startZ+6, startX+3, startY+210, startZ-551, block.AIR.id)
time.sleep(2)

# cleanUp(pos.x, pos.y, pos.z, 40) # Clean up self
mc.postToChat("Clean up is done")


Лайвхак. Здесь я сначала забиваю пространство кубиками с ID=8 а потом забиваю это же пространство воздухом.

Это делается исключительно для дебага, чтобы было видно какой же именно участок через 2 секунды будет очищен. Иначе это совершенно не очевидно и занимает кучу времени подгадать нужные координаты.

Вообще, весь этот участок кода можно заменить на всего одну команду: mc.setBlocks(startX-3, startY-1, startZ+6, startX+3, startY+210, startZ-551, block.AIR.id), все остальное исключительно для дебага.



Чтобы было красивее, я решил что каждый звонок будет представлен в виде башни шириной (и толщиной) в 2 кубика — а длительность звонка будет представлена высотой башни (1 секунда = 1 кубик)

Поэтому простенькая процедурка которая рисует башню заданной высоты

def drawCall(x, y, z, length, blockType):
length = (length, 200)[length>200]
for i in range(y, y+length):
mc.setBlock(x, i, z, blockType)
mc.setBlock(x+1, i, z, blockType)
mc.setBlock(x+1, i, z+1, blockType)
mc.setBlock(x, i, z+1, blockType)


Обратите внимание, что в нее встроен дисторшн — потому что высота мира в Minecraft, как оказалось, 255 кубиков, поэтому если звонок был длиннее 255 секунд (а таких конечно же много) — они уходят выше «крыши мира» и продолжаются с «дна мира», что конечно же не эстетично.



Теперь у нас готово все, чтобы нарисовать звонки.

Просто пробегаемся по массиву звонков полученному из API и рисуем башни (используя кубики разных типов, чтобы визуально представить время ожидания звонка, время разговора и пропущенные звонки — красным цветом).

for call in json:
offset+=3
duration = get_sec(call['duration'])
wait_duration = get_sec(call['wait_duration'])
speak_duration = get_sec(call['speak_duration'])

if call['accepted'] == 1:
drawCall(startX, startY, startZ-offset, wait_duration, 41) # wait_duration
drawCall(startX, startY+wait_duration, startZ-offset, speak_duration, 133) #speak_duration
else:
drawCall(startX, startY, startZ-offset, duration, 152) # duration




На этом все, заходим в майнкрафт и любуемся трехмерной статистикой звонков.

Кстати, одно видео я записал сам, а второе — записал ребенок. Угадаете какое где? :)







Желтые кубики — время ожидания(гудки), зеленые — время разговора, красные — пропущенный звонок.



Исходник скрипта на Python



И обещанное в начале поста видео 3 часов разработки сжатое до 3 минут:







И напоследок вопрос, какие процессы/данные, по вашему, смотрелись бы лучше в трехмерном виде?

Навскидку:

— дашборд для отображения продакшн-серверов, в случае падения какого-либо из них — скрипт автоматически добавляет кубик-динамит и взрывает его :) если Minecraft вывести на офисный монитор и настроить звук погромче — должно впечатлять :)

Еще идеи?



Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/278995/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Yota Air: чему учит работа вне офиса

Четверг, 17 Марта 2016 г. 13:21 (ссылка)





О плюсах работы вне офиса рассказано немало. Для любой IT-компании, шагающей в ногу со временем, не составляет особого труда грамотно организовать удалённую работу сотрудников. Да и кого сейчас можно удивить работой дома, в парке или кафе? Но мы в Yota решили выйти за рамки обычной удалённой работы и сделали интересный проект в области улучшения качества клиентского обслуживания.



Воплощение идей



Проект, о котором идет речь — Yota Air — не новая инициатива. Первая подобная акция прошла в нашей компании в сентябре 2010 года. Причём идея не была «спущена сверху», а зародилась у самих сотрудников. Креативное предложение всем понравилось и быстро нашло воплощение. Было бы ошибкой, работая в Yota, не изучить и не ощутить на себе возможности нашего мобильного интернета. И вот уже шестой год любой сотрудник Yota может раз в месяц поработать не в офисе, а там, где ему заблагорассудится.



Итак, Yota Air — это не только способ проверить себя в условиях полной свободы и персонального тайм-менеджмента, но и дополнительный инструмент исследования качества связи (работать сотрудники могут как в отдалённом уголке парка, так и хоть в полуподвальной библиотеке).







За годы наблюдений было подмечено, что участие в Yota Air активирует креативное мышление — вы удивитесь, насколько необычными могут быть конференции, участники которых находятся одновременно в бассейне, посреди пробки, в кафе и на поле для гольфа. Многие департаменты используют Yota Air именно для проведения выездных совещаний.



В Air-день наши сотрудники могут помогать другим подразделениям или, к примеру, работать на наших торговых точках, где есть шанс посмотреть на наши услуги и продукты глазами клиентов, спросить их мнение напрямую и помочь компании стать лучше. Такая возможность есть у сотрудников Yota во всех регионах.



Как это происходит: сотрудник заранее сообщает о своём желании посетить какую-то определенную торговую точку, проходит небольшое обучение и в указанный день работает вместе с командой ритейла. После этого он составляет краткий отчёт, который помогает нам улучшить взаимодействие с партнёрами и посмотреть свежим взглядом в первую очередь на свои рабочие процессы. К тому же непосредственно в точках продаж можно пообщаться с самими клиентами.











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



Виртуальный офис



Когда-то необходимыми рабочими инструментами офисного сотрудника были пишущая ручка и пачка бумаги или тетрадь. Сегодня — компьютер и доступ в интернет. И тем, и другим в Yota обеспечивается каждый сотрудник. Когда новый человек приходит к нам в команду, ему выдаётся ноутбук и модем Yota с подключённым к корпоративному тарифу мобильным безлимитным интернетом.



Из программного обеспечения мы обычно используем:




  • Yammer — наша внутренняя соцсеть;

  • Jira — небезызвестный планировщик задач;

  • iKnow — корпоративная база знаний Yota, аналог Wiki;

  • Skype, как обычный, так и для бизнеса.





А как быть сотруднику, если ему для работы вне офиса требуется использовать, скажем, базу 1С или какое-то иное корпоративное приложение? Для этого у нас активно используется один из продуктов Citrix, позволяющий полностью виртуализировать рабочую цифровую среду — IaaS. Достаточно ввести один пароль на нашем VPN-сервере, и становятся доступны все корпоративные сервисы.



Что имеем в итоге? В день проведения Yota Air сотрудник может сидеть в парке с ноутбуком и работать с необходимыми «тяжёлыми» приложениями. Только выполняются они не на самом ноуте, а на наших серверах, и всё взаимодействие осуществляется удалённо через Citrix. Главное — чтобы был более-менее стабильный интернет со скоростью 1-2 Мбит/сек. Так что когда сотрудник решает принять участие в Yota Air, ничто не мешает пользоваться всё той же привычной рабочей цифровой средой. То же самое можно сказать и обо всех других ситуациях, когда членам нашей команды приходится работать вне офиса. Гибкость облачной системы позволяет каждому сотруднику быть очень мобильным.



Необходимые условия



Разница между предложением «давайте все работать без офиса — сэкономим на аренде» и стремлением повысить качество оказания услуг кроется в неприметных мелочах. Многие пытаются обратить наше внимание на то, что для Yota Air опасно выбирать пятницу или понедельник — мол, тогда сотрудники просто добавят себе лишний выходной день. У нас никогда не было такой проблемы. Yota Air может «выпасть» на любой день недели. За много лет мы убедились, что качество работы, выражаемое в простых KPI (продажи, подготовка документов, отчеты и т.д.) в этот день не снижается, а только растёт — достаточно заранее сообщить об акции, чтобы люди начали соответственно планировать свой календарь.







В общем, любим мы Yota Air! Любим еще и за то, что по его итогам мы можем получить самые неожиданные результаты, ведь неформальные условия работы помогают находить нестандартные способы решения обычных задач.



Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/279525/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
bcinform

Полезные компании на БЦИнформ

Понедельник, 14 Марта 2016 г. 10:28 (ссылка)


«ОБИТ» – предоставление качественных и надежных услуг связи корпоративным клиентам, объектам коммерческой недвижимости, операторам связи, жильцам новостроек и домов повышенной комфортности.



5582936_54266d18d6d573fdc529756ff5da6cd1_4cdead583a36353b37fdc8a077c0dc6e (300x300, 13Kb)
Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество
rss_rss_hh_new

Собственный «Кто звонил?» на базе Мультифона

Воскресенье, 06 Марта 2016 г. 07:23 (ссылка)

На какие вопросы вы найдёте ответы в этой статье:




  • как отправлять USSD через GSM/3G/4G-модем и читать ответы;

  • как отправлять SMS через Мультифон;

  • как использовать Яндекс SpeechKit в автоответчике на Asterisk.



На какие вопросы вы не найдёте ответов:




  • зачем нужен собственный «Кто звонил?».



Все понимают механизм сервиса, аналогичного «Кто звонил?»: по недоступности звонок уходит на специальный номер, там его принимают, сообщают звонящему, что абонент недоступен, и отправляют абоненту СМС с информацией о звонке. В приёме звонка с Мультифона на Астериске никаких тонкостей нет.



Вкратце
Регистрация:



register => 79xxxxxxxxx@multifon.ru::79xxxxxxxxx@sbc.megafon.ru/79xxxxxxxxx


Транк:



[multifon](!)
type=peer
insecure=port,invite
host=sbc.megafon.ru
fromdomain=multifon.ru
context=from_multifon
dtmfmode=inband

[multifon-in](multifon)

; Если мы ещё и звонить хотим
[multifon-out](multifon)
defaultuser=79xxxxxxxxx
fromuser=79xxxxxxxxx
secret=




Первый вопрос, который встал передо мной в полный рост…



Как отправить СМС?



Самый простой путь, конечно же, купить человеческий HTTP API у какого-нибудь гейта и задёшево отправлять через него. Но во-первых, это неспротивно. А во-вторых, у меня на тарифе несколько сотен СМС включено в абонплату, и с телефона я их почти не отправляю.

Перепробовав все возможные варианты с MessageSend (и через диалплан, и через АМИ, и через чёрта лысого), а также помурыжив SipSak, я сдался и попробовал скрипт для Yate.

О чудо! СМС через Мультифон отправляются.

Но Yate – слишком тяжеловесный движок, подумал я. Yate должен крутиться демоном и требует совершенно избыточной для этих задач конфигурации, подумал я. Поэтому, изучив перловый скрипт, я вычленил из него главное и вернулся к сипсаку. Главным оказался набор нестандартных заголовков (включая обязательного совершенно определённого юзер-агента, ага):



User-Agent: MCPC-MG-1-0-34-3490/2.0.0.5301
X-Movial-Content: sms/text
X-Movial-DeliveryReport: true
Content-Type: text/plain; charset=ISO-10646-UCS-2


Кстати, кастомный юзер-агент, насколько я понимаю, изначально полностью исключал возможность отправки через Астериск.

На первый взгляд, всё казалось просто. Но сообщения всё равно не уходили. Включив дебаг у сипсака, я понял, что эта скотина имеет набор предопределённых заголовков, которые тупо дублируются, если заданы в командной строке. Пришлось брать в руки напильник.

Обработав сипсак так, чтобы кастомные заголовки он считал приоритетными, а дубли отбрасывал, я добился наконец первого результата. Но моя радость была бы неполной, если бы сипсак корректно кодировал передаваемое сообщение. Расписывать всю эпопею вкостыливания в код, построенный на нуль-терминированных строках, UCS2-BE я не буду, сразу представлю на ваш суд результаты своих трудов: https://github.com/wolandtel/sipsak. Сам процесс отправки СМС я обернул в удобный скрипт. Для комплекта в последнем репозитории есть скрипт settings.sh, который упрощает настройку пароля и маршрутизации (SIP, GSM+SIP, GSM) на мультифоне.

Ну, вот, отправлять СМС мы умеем. Теперь можно настроить сам…



Автоответчик



Здесь нам поможет AGI. Скажу сразу, что от природной лени протокол AGI реализовывать я не стал, а лишь сделал в скрипте такую эмуляцию, которая позволяет выполнить задачу. А именно, скрипт должен дождаться от астериска ответа на команду STREAM FILE, чтобы проигрывание не закончилось раньше времени.



Диалплан
; autoresponder
exten => 79xxxxxxxxx,1,NoOp
same => n,AGI(notify.agi)
same => n,Set(MSG="Абонент умер. Когда воскреснет, может перезвонить. Но хотите ли Вы этого?")
same => n,Answer
; Params: speaker, emotion, robot
; speaker: [мужские]: zahar, ermil; [женские]: jane, omazh.
; emotion: good, neutral, evil, mixed.
; robot: true, false.
same => n,AGI(tts.agi,${MSG},ermil,neutral,true)
same => n,Hangup




Можно было, конечно, отправлять СМС из того же скрипта, которым проигрывается сообщение, но с точки зрения структуры приложения логично было их разнести.



notify.agi
#!/bin/bash

while read line; do
[ -z "$line" ] && break
num=$(echo $line | grep 'agi_callerid: ' | sed 's/agi_callerid: //')
[ -n "$num" ] && break
done < /dev/stdin

[ -z "$num" ] && exit 1

/usr/local/multifon/sms.sh 79xxxxxxxxx "Пропущенный вызов [$(date '+%Y-%m-%d %H:%M:%S')] с номера +$num"




Абсолютно никакого AGI, по факту. Просто делаем, что требуется, и закругляемся.



tts.agi
#!/bin/bash

text="$1"
speaker="$2"
emotion="$3"
robot="$4"

key=
dir=/var/lib/asterisk/tts
url=https://tts.voicetech.yandex.net/generate
dbg=${0/.agi/.log}

fname="$dir/$(echo -n "$text-$speaker-$emotion-$robot" | md5sum | cut -d' ' -f1)"
wav="${fname}.wav"

echo -e "$@" > "$dbg"
while read line; do
echo $line >> "$dbg"
[ -z "$line" ] && break
done < /dev/stdin

[ -f "$wav" ] || /usr/bin/curl -s --data-urlencode "text=$text" \
--data-urlencode format=wav \
--data-urlencode lang=ru-RU \
--data-urlencode "speaker=$speaker" \
--data-urlencode "key=$key" \
--data-urlencode "emotion=$emotion" \
--data-urlencode "robot=$robot" \
"$url" > "$wav" || exit 1

for f in al ul gsm; do
[ -f "${fname}.$f" ] || /usr/bin/sox "$wav" -r8k "${fname}.$f" || exit 2
done

echo -e "STREAM FILE $fname 0"

read line < /dev/stdin
echo $line >> "$dbg"




Здесь тоже нет AGI. Мы только дожидаемся ответа от Астериска командой read, чтобы не закрыться раньше, чем он проиграет сообщение. Прошу обратить внимание на параметр -r8k для сокса. Почему-то без параметров он неправильно выставляет рейт выходному файлу, и сообщение получается замедленным в два раза. Подробности самого Яндекс SpeechKit API и то, как получить ключ, есть в документации.



Основная часть на этом закончена. Но статья будет неполной без описания нюансов.



Подготовка сим-карты



Очевидно, чтобы всё это завелось, потребуется отдельный номер с Мультифоном. Вы покупаете сим-карту и…? Простой и очевидный путь – вставить её в телефон, набрать необходимые запросы и начать использовать. Но мы не ищем лёгких путей. У меня с давних времён валяется пачка 3G-модемов (знаменитый E1550 и чуть менее знаменитые E150), но нет ни одного свободного телефона. А использовать свой для таких операций я не люблю: лишний раз выключать, вскрывать.

Итак, для получения и отправки СМС мы будем использовать давно и хорошо всем известный smstools. Настройку я описывать не буду, ибо боян. Только автодекодинг не включайте. А то будет вам мусор вместо тела сообщения.

Итак, после приобретения сим-карты нужно сделать две вещи:




  • получить пароль для личного кабинета (ибо эти бабуины убили Сервис-гид, и теперь для каждого номера требуется собственный логин);

  • подключить Мультифон (ибо эти бабуины сломали веб-интерфейс, и без USSD не обойтись).



И если с приёмом СМС всё понятно, то USSD – не такая прозрачная вещь.

Перед тем, как продолжить, можете ознакомиться с [репозиторием|(https://github.com/wolandtel/smstools) дополнений к smstools, облегчающих работу с SMS и USSD. В разделе example репозитория есть перловый инструмент работы с USSD, который я использовал для понимания сути кодирования/декодирования символов в USSD. Авторство не указано, и ссылок нет потому, что я не помню, где его взял. Можно использовать его, но лично я не понимаю perl, а техномагию я не люблю. Поэтому чтобы почувствовать контроль над ситуацией я написал утилиты encode и decode. Как мне кажется, код на си куда проще для понимания, поэтому утилиты будут полезны тем, кто тоже захочет знаний.

Подозреваю, что если выставить другую кодировку командой AT+CSCS, проблема отпадёт сама собой, но мы же не ищем…

В остальном работа с USSD проста: модем регистрирует три девайса ttyUSB. Пишем в первый, читаем из последнего.

Для подключения личного кабинета достаточно просто отправить 105: ./ussd.sh '*105#' (подразумевается, что /dev/modem указывает на первый из ttyUSB модема). Дожидаемся СМС с паролем (удобнее всего это делать командой ls -lrt /var/spool/incoming), после чего смотрим ./viewsms .

Мультифон подключается в два этапа: запустив cat /dev/ttyUSB2, отправляем *137#. Копируем ответ и выясняем, что там написано, с помощью decode. А приходит в ответ менюшка, где для подключения нужно выбрать пункт 1. Выполняем ./ussd 1 и получаем в СМС пароль.



На этом можно было бы и завершить, но так как мы имеем дело с бабуинами, стоит упомянуть про…



Организационные моменты




  1. Обязательно укажите, чтобы новую сим-карту подключили на существующий лицевой счёт. Насколько я понял, отключение по неактивности не работает, если на все номера один баланс. Да и вообще удобнее. Когда был жив сервис-гид с возможностью управлять всеми номерами из-под одной учётной записи, этот совет был ещё актуальнее.

  2. В современном мире наебизнеса уже никому не надо объяснять, что сразу после покупки сим-карты необходимо отключать все условно-бесплатные опции (в том числе, «Кто звонил?», ага). Но! Бабуины пошли дальше и некоторые из условно-бесплатных опций не отображаются в личном кабинете. Отключить их можно только звонком в контакт-центр. Желательно подробно прочитать описание тарифа, чтобы выяснить, каких же замечательных вещей вам впарилипродали.

  3. В качестве номера для отправки СМС я использую свой основной номер, потому что на нём есть предоплаченный пакет. Естественно, для этого Мультифон на нём тоже должен быть включен (но совершенно не обязательно держать его постоянно зарегистрированным). Дополнительный номер используется только для приёма звонков.



PS



К сожалению, Мультифон не передаёт номер, переадресовавший звонок. Поэтому, если вы хотите подключить свой бонусный «Кто звонил?» друзьям/родным, придётся на каждого человека покупать отдельный номер под автоответчик. Ещё можно попробовать переадресацию с доп. набором (+79XXXXXXXXXpXX), но я не проверял. Если проверите, пишите.



А вот теперь – всё!





Original source: habrahabr.ru (comments, light).

https://habrahabr.ru/post/278679/

Метки:   Комментарии (0)КомментироватьВ цитатник или сообщество

Следующие 30  »

<телефония - Самое интересное в блогах

Страницы: [1] 2 3 ..
.. 10

LiveInternet.Ru Ссылки: на главную|почта|знакомства|одноклассники|фото|открытки|тесты|чат
О проекте: помощь|контакты|разместить рекламу|версия для pda