Как стать автором
Обновить

Комментарии 40

Выглядит очень сложно. Понимаю, что я как сотрудник Vxoimplant предвзят, но что мешает использовать облачную телефонию для исходящих звонков, звонить из облака безо всякой «симки» и «номера», а при подключении раскидывать звонки на CRM, сотовые, SIP — куда угодно? Это вроде и по деньгам дешевле будет, и десяток строк JavaScript вместо конфигурации Asterisk, и GSM шлюз не нужен?
Можете навскидку сказать, сколько стоит исходящая минута по России из облака?
Смотря куда звонить. На городские порядка 10 копеек в минуту, на сотовые — зависит от оператора, обычно порядка 2 рублей хотят.
Через симки исходящий по России стоит 30 копеек, в т. ч. на сотовые. Через облако дорого, мы очень много звоним.
А, тада норм.
Нехорошо обманывать. Звонки по Москве/Питеру у вас по прайс-листу 95 коп/минута, по России — от 95 коп до 4,44 рублей. И лишь предположительно бесплатный 8-800 — по 10 коп.
Конечно нехорошо, кто спорит. И где вы такие цены нашли? О_О Я обычно на voximplant.ru смотрю, там у нас простой «однокликовый» прайс по кейсам. Есть еще полный на voximplant.com, но оно как бы одним генератором генерируется :)
Именно там и нашла: https://voximplant.ru/pricing.html -> Звонки по России -> Скачать все цены в CSV (http://voximplant.com/docs/rates/voximplant_outbound_rates_RUR.csv)
Т.е. на самой странице красиво написано, да, но когда по * переходишь на полный прайс — реальность оказывается более приближенной к «земным» ценам. У нас звонки в основном по областным городам России (Ярославль — 74852, Иваново 74932, Пермь 7342, для примера), так ваши цены вполне обычные (ну, подешевле Ростелекома, будем честны).
Мультифон от Мегафона нам выходит дешевле, по 1.5 руб/минуту по России.
Ну это реализация конкретного админа, причем, да, очень сложная.

Данный функционал это 10 строчек на перл/с/с++, и минимальная правка диалплана.

lib.php — не нужен
getbalance.php — переложить на цикл, запускать по крону. Убрать вот это: if ($s>10) exit;, ибо если будет проблема с конкретной симкой (блокировка например) — скрипт обречен.

и тд.
exten => _X.,n,set(SIMNUM1=${SHELL(/usr/bin/php -f %pathtoscript%/getsim1.php)})
exten => _X.,n,set(SIMNUM2=${SHELL(/usr/bin/php -f %pathtoscript%/getsim2.php)})
exten => _X.,n,set(SIMNUM3=${SHELL(/usr/bin/php -f %pathtoscript%/getsim3.php)})
exten => _X.,n,set(SIMNUM4=${SHELL(/usr/bin/php -f %pathtoscript%/getsim4.php)})
exten => _X.,n,set(SIMNUM5=${SHELL(/usr/bin/php -f %pathtoscript%/getsim5.php)})
exten => _X.,n,set(SIMNUM6=${SHELL(/usr/bin/php -f %pathtoscript%/getsim6.php)})
exten => _X.,n,set(SIMNUM7=${SHELL(/usr/bin/php -f %pathtoscript%/getsim7.php)})
exten => _X.,n,set(SIMNUM8=${SHELL(/usr/bin/php -f %pathtoscript%/getsim8.php)}


WTF?

Мало того, что PHP, так еще и разными однотипными скриптами, так еще и куча вызовов.

exten => _X.,n,Set(ARRAY(SIM1,SIM2,SIM3,SIM4)=${SHELL(/usr/bin/php -f %pathtoscript%/getsim.php)})

Ну или на край использовать аргументы при вызове скрипта.

Кроме того, какой смысл в lib.php?
Спасибо, одним скриптом конечно лучше.

В конкретном случае смысла в lib.php нет, но он используется во многих скриптах, чтобы не писать одно и то же.

Ошибся веткой.
Есть замечательная штука — unixODBC, рекомендую. Необходимость в костылях отпадет, и доступ к нужной базе будет всего одной строчкой.
Я использую БД для вывода текущих остатков.

Если вы имеете в виду записывать туда порядок вызова симок, то накладные расходы будут больше, чем записать и считать 1 байт из файлов.
Чтобы считать номер первой симки, как минимум с диска прочитается запрос «select simnumber from...», который сам по себе занимает несколько десятков байт.

Плюс найти в БД это поле и считать его значение.
Мягко говоря спорный вопрос.
Базы данных как раз и создаются для более эффективного управления данными, нежели обычные файлы.

В целом это такие малые нагрузки, что не вижу смысла спорить, поэтому и удалил свой комментарий выше.
создайте хранимую процедуру и вам база сама скажет, через какую симку звонить. это гораздо проще, чем у вас.
Ответил в ветке выше, обращение к базе накладнее, чем считать один байт.
да я не против. как скажите. если вы считаете, что это оптимально, плодить форк то пожалуйста.
Плохая практика.
Если база ляжет или неверный пароль — подвесите астериск.
ого какие есть мнения
ППД пишется кровью, а такие мнения головной болью админа.
Я Вам могу еще одно мнение дать: НИКОГДА не храните astdb на NFS.
Если есть freepbx, то можно использовать модуль trunk balance. Или еще есть скрипт через функцию RAND.
RAND не даст балансировку по финансам на симках, правильно все же как у топик стартера. Правда реализация подкачала, но мысль у него верная.
Мне интересно «как не потерять входящий звонок на симку, если по ней уже разговаривают, спросите в комментариях (на статью не тянет)»
Мы вообще не принимаем входящие звонки на симки, потому что тогда уменьшается число исходящих линий.

Вместо этого мы купили симку Мегафона, на которой есть Мультифон. Зарегистрировали Мультифон на Астериске и на всех симках настроили безусловную переадресацию на этот номер.

Астериск принимает звонок на Мультифон, в течение 1,5 секунд клиенту проигрывается сообщение «Мы перезвоним», кладется трубка и создается callback. Операторы перезванивают.

Так как мы укладываемся в 3 секунды, за звонок клиент не платит.
Есть сигнализация pre_answer (использую во FreeSWITCH). Абоненту можно проигрывать голосовые сообщения (до 20 сек) + принимать тоновые нажатия клавиш. Входящие в этом случае бесплатны ибо считаются ожиданием подъема трубки вызываемого абонента.
p.s. Часто музыка вместо гудков именно по такому принципу делается.
EarlyMedia?

Это Ring + SDP, это когда заставляете удаленную сторону думать что будете генерировать гудки сами, а вместо этого генерируете свой контент. Не везде работает кстати, например, если оператор переопределяет сообщения 180/183. Нет гарантии, что вас услышат вообщем.
Также переадресованный вызов бесплатен, так как укладывается в 3 сек.

Входящие на Мультифоне бесплатны, нужно только подкидывать пару рублей раз в 2-3 месяца и делать платный звонок, чтобы симка не заблокировалась.
Никак.
Если нагрузка маленькая, смириться или костыль, описанный выше akopylov.
А если нагрузка большая, то договорись с оператором о многоканальном СИП с сотового номера (оператор агрегатирует на своей стороне звонки на сотовые номера и выдает в единый транк по SIP, таким образом не важно сколько звонков приходит на один сотовый номер).
Операторы конечно ломаются — это доп нагрузка на их оборудование, но если хорошо нажать на глаза — предоставляют.
Мне тоже видится с оператором как то интересней и проще договориться, а то в продакшене вынимать позвонить симки и докинуть 2-3 рубля напрягают… Но каждому этапу развития компании свое решение, на какой то стадии развития и это хороший вариант.
Зачем вынимать позвонить симки?
Это я так образно, имелось ввиду от этом помнить и следить
Переадресацией на симку этого же оператора, если конечно тариф позволяет.
После внедрения колбека стало поступать много мусорных звонков.

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

О боже, вот это костыль)
в addpac 2000 это делается одной строчкой в конфиге!

OpenVox VS-GW1600-20G. В web интерфейсе
1. назначаешь лимиты на каждую sim карту.
2. устанавливаешь политику fewest call на группу sim-карт
Минуты на sim расходуются равномерно.
Минус ежемесячное сбрасывание лимита не знает сколько дней в месяце (всегда 30) — приходится корректировать вручную
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Истории