Помощь - Поиск - Пользователи - Календарь
Полная версия этой страницы: Баланс СИМ-карты: Ответы разных операторов на запрос
Форум разработчиков электроники ELECTRONIX.ru > Интерфейсы > Форумы по интерфейсам > Сотовая связь и ее приложения
bvn123
Здравствуйте,
интересуют ответы разных операторов России, Украины, Белоруссии на запрос баланса счета

ответ Киевстар и Beeline (Украина)
+CUSD: 1,"Na rahunku 34.00 grn. Bonusy: *100# null"
+CUSD: 1,"Na rahunku 26.30 grn. Nomer die do ...

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

встречаются ли отличия в ответах ДРУГИХ операторов - цифры между кавычкой и первым числом баланса, запись баланса словами, а не цифрами, или, скажем, запись баланса в виде "34 rub. 00 kop"

Спасибо.
CADiLO
Уже обсуждали это пару лет назад. Можно поискать темку. Но если кратко, то пришли к следующему:
Каждый оператор воротит как хочет, и более того может изменить формат ответа не предупреждая.
Например перед цифрами вставить рекламу. Это расчитано на то что человек будет читать ответ, а не железка.
Поэтому тогда пришли к выводу что унифицировать разбор отчетов не получится.
megajohn
Цитата(CADiLO @ Oct 13 2015, 10:59) *
Поэтому тогда пришли к выводу что унифицировать разбор отчетов не получится.


можно частично решить проблему:
на SD иметь файлы под каждого оператора
Код
oper250_001.ini
oper250_002.ini
oper250_020.ini
oper250_099.ini


где в каждом
Код
[operator]
apn="internet.mts.ru"
login=""
password=""
dns1=""
dns2=""
balance_check="*100#"
balance_check_scanf="[b]Na rahunku %f grn[/b]"


Чуть-чего либо оператор ручками все корректирует, либо дополнение/исправление с сервера
bvn123
Спасибо за ответы,

похоже, особого смысла стремиться унифицировать ТОЛЬКО разбор ответа нет еще из-за того, что и номера для запроса баланса по операторам не одинаковы, уже вижу номера запросов *100#, *102#, *111#

тему нашел:
> Автоматическое определение баланса СИМ карточки, Выделение суммы из ответа на запрос USSD
aleksandr-zh
я делаю так
если можно - включаю ответы ussd ТРАНСЛИТОМ (латинскими буквами). Например, Россия, Теле2 *120#
делаю запрос. Жду 6-7 секунд. Принимаю ответ. Выдаю абоненту первые 25 символов ответа. Пока проблем не было
Выделение по кавычкам, точкам и самим цифрам не есть универсальный метод: иногда операторы вставляют рекламу.
Например: только 12 мая 2015 мы предлагаем... или Магазин "Солнышко" дарит детям...
mantech
Цитата(aleksandr-zh @ Oct 13 2015, 12:33) *
Выдаю абоненту первые 25 символов ответа. Пока проблем не было


Ну можно и не так ограничивать, мои аппараты выдают весь текст, влезающий в СМС или меньше.

ЗЫ. Опсосы, конечно, плевали на нас, но уж в тарифах М2М могли и унифицированный ответ сделать.
bvn123
Спасибо всем за ответы,
думаю не декодировать все это в микроконтроллере, управляющем GSM-модемом, а только искать первую цифру после кавычки;

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

Более гибкое декодирование можно будет сделать на компе.
CADiLO
И еще имейте в виду. Если Ваше устройство попадет в Эмираты или еще куда на восток, то CUSD там не работает.
Баланс получают при помощи SMS, а CUSD используется в биллинге.
megajohn
Цитата(CADiLO @ Oct 16 2015, 06:59) *
Если Ваше устройство попадет в Эмираты или еще куда на восток



даже далеко ехать не надо. Спб-МТС ( 250 01 ). Cusd говорит что "ожидайте смс с балансом"
POLL
Мы таким способом (см ReadBalance) баланс обрабатываем.
Не идеально, но в большинстве случаев годится. Т.е. ищем цифры до точки или запятой.
mantech
Цитата(POLL @ Oct 16 2015, 12:38) *
Мы таким способом (см ReadBalance) баланс обрабатываем.


Я не вижу смысла вообще его как-то обрабатывать,т.к. в 99% это информация, пересылаемая клиенту, а он уж "обработает" biggrin.gif
POLL
Цитата(mantech @ Oct 16 2015, 13:14) *
Я не вижу смысла вообще его как-то обрабатывать,т.к. в 99% это информация, пересылаемая клиенту, а он уж "обработает" biggrin.gif

Не, смысл идеи - если пороговое значение баланса сработало, клиенту будут приходить напоминалки (мол пополни баланс). А если баланс в ажуре, клиента не нужно беспокоить какими-то смсками.
jcxz
Цитата(megajohn @ Oct 16 2015, 13:00) *
даже далеко ехать не надо. Спб-МТС ( 250 01 ). Cusd говорит что "ожидайте смс с балансом"

Омск, МТС: на CUSD иногда баланс приходит в ответе, а иногда так как Вы описали - в след. СМС. Никакой системы нет.

А если разбирать, то думаю нужно искать первую группу цифр включающих опционально точку или запятую. Реклама вряд-ли будет перед балансом, скорее всегда после.
Можно сделать более сложный анализ: искать все группы цифр (соответствующих вышеуказанному шаблону). Если найдено более одной такой группы, то далее - чтобы выбрать одну из этих групп, нужно построить рейтинги для них. Анализируем слова возле этих групп на равенство обозначению одной из валют: "руб", "гр" и др., также ищем слова типа "баланс", "счёт" и подобные типичные для баланса слова. На каждое такое нахождение увеличиваем рейтинг соотв. группы на некоторое число. Предварительно можно разбить весь текст на предложения по точкам и заглавным буквам. Список искомых ключевых слов выбирать в соответствии со страной, определённой по тел. номеру - искать "руб" если номер начинается на +3 не стоит.
Число, получившее максимальный рейтинг, и есть результат.
Такой алгоритм конечно не даёт 100%-ый результат.
Если где-нить найдёте список разных ответов от разных операторов, то можете на нём протестить готовый алгоритм.

Проблему с балансом в отдельном СМС решаем так:
ответ CUSD не разбираем сразу, ждём неск. секунд СМС, если получили - объединяем оба текста и анализируем вместе. CUSD будет в первом предложении. Рейтинг чисел в первом предложении сделать выше, чем во втором.
RadikX
У оператора на любой ваш хитрый алгоритм найдется болт с винтом. Я думаю, что у каждого оператора есть в штате человек, который непрерывно думает, как максимально усложнить жизнь таким как мы людям. Как обработать такой ответ: "Положите 10 руб. на счет и будет вам счастье! Позвоните по номеру 6372 и выиграйте 1000000 рублей! У Вас остаток MINUS 142." ? Городить нейросеть в несколько слоев для такой задачи по мне так перебор.
Для просмотра полной версии этой страницы, пожалуйста, пройдите по ссылке.
Invision Power Board © 2001-2025 Invision Power Services, Inc.