Реализация задачи неухода "в минус" в A2B

Всё о биллингах.

Модераторы: Admins, Модераторы

Gear
Сообщения: 3
Зарегистрирован: 01 авг 2011, 17:43

Сообщение Gear » 01 авг 2011, 23:30

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

Аватара пользователя
busc
Модератор
Сообщения: 150
Зарегистрирован: 12 фев 2008, 10:28
Откуда: Kiev
Контактная информация:

Сообщение busc » 02 авг 2011, 07:37

В А2В это трудно сделать, очень трудно. Много переписывать
.
..:

Gear
Сообщения: 3
Зарегистрирован: 01 авг 2011, 17:43

Сообщение Gear » 02 авг 2011, 09:01

Какие есть нормальные альтернативы а2billing, без этих проблем? Недорогие или бесплатные?

nixon
Сообщения: 146
Зарегистрирован: 11 ноя 2008, 20:56
Откуда: Pattaya
Контактная информация:

Сообщение nixon » 16 фев 2012, 14:42

1.Как я уже светил... если идти по линии наименьшего сопротивления, чтобы не переписывать слишком громадные куски а2б, то можно начать с того что по окончании звонка в котором кончился баланс сбрасывать все остальные платные соединения этого клиента. При таком подходе уже будет уход в минус громадно меньше.
То Gear: "Недорогие", это сколько?
2.Гораздо проще будет в астере завести динамически меняемое аппроксимированное время до конца соединения звонков в общей группе. Чем переписывать а2б.
Я так понимаю Gear, делает первый взнос программисту;)

Аватара пользователя
busc
Модератор
Сообщения: 150
Зарегистрирован: 12 фев 2008, 10:28
Откуда: Kiev
Контактная информация:

Сообщение busc » 16 фев 2012, 20:23

Вот есть у меня какая мысль, точнее 2ве
1. При инициации каждого следующего звонка можно считать сколько уже есть звонков и высчитывать таймаут соответсвенно. По окончанию разговора по таймауту завершать остальные звонки (как предложили до меня). Это снизит риск ухода в минус, но не исключит.
Неудобно то что если завершится не по таймауту последний (самый короткий по логике) звонок, то предыдущие даже не узнают о том что деньги уменьшились на балансе.
Писать такое вроде не долго, по крайней мере обозримо по объему.
2. есть функция TIMEOUT, если умудриться ее выполнять в контексте не текущего канала, то можно переопределять на старте и завершении звонков все остальные по одному клиенту. Это совсем снизит (почти к нулю) вероятность отрицательного остатка на счету.
Но пока не знаю как выполнить это дело в контексте другого звонка, что делает этот вариант пока не рабочим.
Писать такое тоже обозримое количество ночей )))
.
..:

Аватара пользователя
toxi
Сообщения: 4
Зарегистрирован: 28 июл 2014, 14:14
Откуда: Украина, Житомир
Контактная информация:

Сообщение toxi » 21 фев 2015, 10:13

Здравствуйте.
Хотел бы поинтересоваться, сделал ли кто-то первые шаги в написании кода в этом направлении?

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

То есть я вижу такую логику:
Звонок пришел в контекст, далее отправился на AGI, далее скрипт проверил текущий баланс, если он положительный, то отправляем звонок в транк через себя, при этом, если с другой стороны ответили, то скрипт каждую секунду обновляет баланс в базе с учетом стоимости направления, потом считывает новые значение баланса и проверяет, если на балансе больше 0, то продолжать выполнять звонок/обновление баланса. При этом второй звонок с этого же аккаунта получит уже актуальный баланс и отсчет получится быстрее. При достижении 0 на балансе, скрипт, который получил 0 при проверке, автоматически останавливает все остальные подсчеты и разрывает все активные соединения аккаунта. При этом последующие звонки будут уже заблокированы, так как на балансе 0 (даже если за 1 сек. будет два вызова одновременно, в одну и ту же секунду, что практически невозможно)

Я в AGI не силен, поэтому не могу пока написать такой скрипт.

Ответить