Dmitrich
Dec 14 2011, 06:31
Ответы на запрос баланса по USSD у всех операторов, мало того, что разные, так они ещё и меняются время от времени.
Я у себя делаю так:
- ловлю в ответе слово "Баланс" ("Balace", "Balans","OCTATOK") и считываю первое число после него,
- если этих слов нет, считываю первое число и проверяю, что за ним есть буква 'р' или 'r', а в ответе нет слов "Ошибка", "Недоступен".
Но это срабатывает не всегда.
Например, из Казахстана прислали любопытный текст ответа (привожу по памяти): "На 12.11.2011 остаток на Вашем счету составляет...".
Естественно, моё устройство этот ответ не распознало.
Приглашаю поделится опытом - кто как распознаёт ответ оператора на запрос баланса по USSD.
KARLSON
Dec 14 2011, 06:57
А что если искать в тексте выражение число с точкой/запятой, после которой 2 цифры дальше пробел? Хотя если баланс например 10 р/$ нули после запятой/точки покажет?))
Вы этот баланс пользователю сообщаете? Может весь текст показывать?
Dmitrich
Dec 14 2011, 12:23
Цитата(KARLSON @ Dec 14 2011, 10:57)

А что если искать в тексте выражение число с точкой/запятой, после которой 2 цифры дальше пробел? Хотя если баланс например 10 р/$ нули после запятой/точки покажет?))
Вы этот баланс пользователю сообщаете? Может весь текст показывать?
Нужно именно число. Во первых - для предупреждения о недопустимом снижении. А во вторых - для воспроизведения голосом.
Цитата(Dmitrich @ Dec 14 2011, 13:31)

Ответы на запрос баланса по USSD у всех операторов, мало того, что разные, так они ещё и меняются время от времени.
Я у себя делаю так:
- ловлю в ответе слово "Баланс" ("Balace", "Balans","OCTATOK") и считываю первое число после него,
- если этих слов нет, считываю первое число и проверяю, что за ним есть буква 'р' или 'r', а в ответе нет слов "Ошибка", "Недоступен".
Но это срабатывает не всегда.
Например, из Казахстана прислали любопытный текст ответа (привожу по памяти): "На 12.11.2011 остаток на Вашем счету составляет...".
Естественно, моё устройство этот ответ не распознало.
Приглашаю поделится опытом - кто как распознаёт ответ оператора на запрос баланса по USSD.
Не очень понял проблему...
Вы парсите слово"остаток", затем ищете цифры. Если за словом "остаток" не цифры а текст листаете сообщение до цифр.
Но если будет: "Остаток на 12.01.2011 на Вашем счету составляет..." нужен другой вариант. Надо подумать...
Чем плохо найти 2 цифры, разделитель и еще 2 цифры? при том чтоб за ними на протяжении 3х символов не следовало одновременно точек, запятых и цифр. Предпочтительно чтоб перед этим было что-то типа "баланс"
CADiLO
Dec 14 2011, 14:07
Может быть искать название денег - рубли-гривны-тугрики, наверняка всегда будет после суммы.....
ssokol
Dec 14 2011, 15:12
а я еще всегда запрашиваю ответ транслитом - некая независимость от языка, и заметил, что ответы лаконичнее , без лишних слов
Beeline - Vash balans 100.20 rub
Megafon - 100.93 14.12.11 10:56
Украинские сисопы все передают баланс только транслитом, без возможности переключения на кириллицу.
Я тупо искал первую цифру и далее atof
Вроде как работает в серии устройств (хотя это вспомогательная функция: светодиод мигает столько раз, сколько целых гривен на счету), пользователи могли ляпа и не заметить.
Пример из Казахстана озадачил, пока концепции нет

Цитата(pau62 @ Dec 14 2011, 17:01)

Чем плохо найти 2 цифры, разделитель и еще 2 цифры? при том чтоб за ними на протяжении 3х символов не следовало одновременно точек, запятых и цифр. Предпочтительно чтоб перед этим было что-то типа "баланс"
Наверное, именно так. Но слово "баланс" неуместно: например, МТС UA начинает прямо со значения баланса.
KARLSON
Dec 14 2011, 18:00
Вот что ляпают операторы в Нижегородской области:
ТЕЛЕ-2 "ОСТАТОК 82.96 р."
Мегафон "399.20руб.Далее реклама"
МТС "Баланс:679,67р,Лимит:650р"
Получается самый верный результат ищем число (например не более 6 цифр), затем разделитель, затем 2 цифры, после них цифр быть не должно.
Одно НО - не знаю как выглядят сообщения с целым балансом.
Вообще, если есть связь с компьютером, то лучше через регулярные выражения.
Velund
Dec 14 2011, 22:32
Гм... А почему бы не _попросить_ у операторов нужный для м2м формат выдачи баланса?

По отдельному USSD запросу.
Что нибудь вообще без слов, с идентификатором валюты. В стиле 320,RUR,0,RUR,1,1,1,0
(320 руб на счету, кредитный лимит 0, GPRS доступен, CSD доступен, SMS доступен, голос недоступен)
Если будут хорошие идеи как сформатировать - обязуюсь довести эту просьбу до "правильных" людей по меньшей мере у одного оператора "тройки".
Andreymai
Dec 15 2011, 04:12
а интернет помощник/личный кабинет/сервис-гид не подходят?
Dmitrich
Dec 15 2011, 05:09
Цитата(Velund @ Dec 15 2011, 02:32)

Гм... А почему бы не _попросить_ у операторов нужный для м2м формат выдачи баланса?

По отдельному USSD запросу.
Во первых, вряд ли услышат.
Во вторых, мне же неизвестно в каком месте, у какого оператора, и с каким тарифом будет работать устройство. Я уж упоминал Казахстан. Как туда его занесло?
Цитата
Что нибудь вообще без слов, с идентификатором валюты. В стиле 320,RUR,0,RUR,1,1,1,0
Было бы здорово... Но, видимо, не в этой жизни.
Цитата
Если будут хорошие идеи как сформатировать - обязуюсь довести эту просьбу до "правильных" людей по меньшей мере у одного оператора "тройки".

Придумать форматирование - не проблема. Насчёт реализации сомневаюсь.
А было бы здорово. Ведь появились же у операторов тарифные планы, ориентированнные на м2м.
Та же "Телематика" у МТС. Приятные цены на трафик, разумная тарификация + термостойкая СИМка без зловредных счётчиков - позволяют решить кучу проблем.
Да к этому добавить бы ещё дополнительную информацию по USSD - было бы вообще здорово!
Ну вот, опять размечтался...
Цитата(CADiLO @ Dec 14 2011, 18:07)

Может быть искать название денег - рубли-гривны-тугрики, наверняка всегда будет после суммы.....
Не подходит. Во первых, не всегда они есть. Во вторых - часто приходит ответ типа "Сервис недоступен", а за этим текстом идёт какая нибудь реклама с указанием цены.
Искал по сочетанию подходящее по формату число(десятичное с возможной одной '.' или ',') + имя денежной единицы с возможным пробелом между ними. Имя денежной единицы задает пользователь. Даже если после числа нет денежной единицы вместо нее можно ввести пустую строку, тогда просто поймаем первое подходящее число. Для большей определенности можно добавить слово перед числом, например ballans, тоже задаваемое пользователем.
Т.е. ищем строку (число + [" "] + "денежная единица") или ("слово" + " " + число + [" "] + "денежная единица").
ilya_nn
Dec 15 2011, 07:54
Цитата(Dmitrich @ Dec 14 2011, 10:31)

Ответы на запрос баланса по USSD у всех операторов, мало того, что разные, так они ещё и меняются время от времени.
Я у себя делаю так:
- ловлю в ответе слово "Баланс" ("Balace", "Balans","OCTATOK") и считываю первое число после него,
- если этих слов нет, считываю первое число и проверяю, что за ним есть буква 'р' или 'r', а в ответе нет слов "Ошибка", "Недоступен".
Но это срабатывает не всегда.
Например, из Казахстана прислали любопытный текст ответа (привожу по памяти): "На 12.11.2011 остаток на Вашем счету составляет...".
Естественно, моё устройство этот ответ не распознало.
Приглашаю поделится опытом - кто как распознаёт ответ оператора на запрос баланса по USSD.
Из своего опыта - 100% достоверного результата получить не удастся: ответы операторов не формализованы, положение баланса в строке может быть различным, денежные единицы обозначаются по разному, дополнительно к значению баланса может быть реклама типа "получите 25 р на ваш счет". Остановился на том, что отдаю целиком результат запроса пользователю в виде "как есть".
Цитата(ilya_nn @ Dec 15 2011, 11:54)

Из своего опыта - 100% достоверного результата получить не удастся: ответы операторов не формализованы, положение баланса в строке может быть различным, денежные единицы обозначаются по разному, дополнительно к значению баланса может быть реклама типа "получите 25 р на ваш счет".
Но у одного оператора ответ всегда одинаков, по крайней мере ключевые места меняется не часто. Поэтому надо просто дать возможность пользователю задавать маску.
Цитата
Остановился на том, что отдаю целиком результат запроса пользователю в виде "как есть".
Это хорошо если стоит задача по запросу пользователя передать ему ответ. Но часто задача стоит по другому - автоматически контролировать состояние счета и отправить сообщение если сумма на счету меньше заданной и в этом случае без парсинга ответа не обойтись.
Цитата(Velund @ Dec 15 2011, 05:32)

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

Эдак мы и до разработки стандарта договоримся.
А реально это никому не нужно. Большинству нужны универсальные системы, работающие со всеми операторами. А там кто о чем.
Цитата(=F8= @ Dec 15 2011, 15:11)

Но у одного оператора ответ всегда одинаков, по крайней мере ключевые места меняется не часто. Поэтому надо просто дать возможность пользователю задавать маску.
Да вот хрен там.
Тот же МТС может написать: "Ваш баланс...", а может: "Балан отправлен вам по СМС".
KARLSON
Dec 15 2011, 09:33
А вообще с операторами кто-нибудь может поговорить. Может есть стандарт / команды? просто мы про них не знаем?
13amator
Dec 15 2011, 09:43
Цитата(=F8= @ Dec 15 2011, 12:11)

Это хорошо если стоит задача по запросу пользователя передать ему ответ. Но часто задача стоит по другому - автоматически контролировать состояние счета и отправить сообщение если сумма на счету меньше заданной и в этом случае без парсинга ответа не обойтись.
Как вариант для конечного пользователя. Корпоративные тарифы,с мониторингом счёта через иНет.
Цитата(KARLSON @ Dec 15 2011, 16:33)

А вообще с операторами кто-нибудь может поговорить. Может есть стандарт / команды? просто мы про них не знаем?
Конечно! Например с МТС, любой абонент мтс может поговорить позвонив по номеру 0890.
KARLSON
Dec 15 2011, 13:47
C обычными пользователями разговаривать там не будут, скорее всего, вежливо пошлют. Нужно разговаривать тем, кто покупает симкм не для телефонов, а для любых других устройств.
Цитата(sobr @ Dec 15 2011, 13:18)

Да вот хрен там.
Тот же МТС может написать: "Ваш баланс...", а может: "Балан отправлен вам по СМС".
Ничего страшного. Делать маску на "Ваш баланс...", а "Балан отправлен вам по СМС" игнорировать и повторить запрос через 1-2 часа.
PS В нашей деревне МТС всегда отвечает одинаково.
Цитата
Как вариант для конечного пользователя. Корпоративные тарифы,с мониторингом счёта через иНет.
Корпоративные тарифы это вообще отдельная песня. Им проверка счета ussd запросами не нужна. А вот самый обычный GSM шлюз, с самой обычной карточкой который умеет сам контролировать счет это удобно.
ssokol
Dec 15 2011, 15:59
Цитата(sobr @ Dec 15 2011, 13:18)

Тот же МТС может написать: "Ваш баланс...", а может: "Балан отправлен вам по СМС".
да да да и вместо юссд прислать баланс эсэмэской, да еще не сразу а через полчаса, да и в присланой эсэмэске может оказаться не баланс , а
типа "На данный момент баланс не может быть запрошен. Повторите запрос позже".
Одна и таже область, один и тот-же Билайн, одно и то-же место подключения, только разные тариф. планы.
Цитата(=F8= @ Dec 15 2011, 21:05)

Ничего страшного. Делать маску на "Ваш баланс...", а "Балан отправлен вам по СМС" игнорировать и повторить запрос через 1-2 часа.
А зачем игнорировать? Я после этого и смс парсить на баланс начал.
Цитата(KARLSON @ Dec 15 2011, 20:47)

C обычными пользователями разговаривать там не будут, скорее всего, вежливо пошлют. Нужно разговаривать тем, кто покупает симкм не для телефонов, а для любых других устройств.
Здесь ваша правда, с обычным не будут. С нами разговаривают, мы ключевые клиенты со своим пулом симок и своими тарифами. Но нифига не легче от этого. Разговаривать то разговаривают, но сделать ничего не могут. Т.к. МТС огромная и неповоротливая машина, думаю другие операторы то же. Пример запуск проекта с сим-чипами, мы образцы получали, когда они еще под грифом "Скоро в продаже" были. Так и похоронили проект. По причине того, что МТС не мог предоставить технологию "свободных" чипов. Они у них привязаны были к коммутатору, читай городу. Как сейчас не знаю, тогда говорили, что не раньше 2012 года реализовать смогут и то, мол это очень оптимистичный прогноз. Кому хуже сделали то? Мы заложили сим-холдер, в результате юзер выиграл - получил возможность выбора оператора. А МТС потерял тысячи активных юзеров. Ну не всех конечно, кто то и МТС карты вставит. И преговоры сиеровцев с МТС и Пчелайном ничем закончились, не потому, что не интересно, кому не интересно сотни тысяч "лишних" абонентов. А потому, что реализовать не могут. Мозгов не хватает. Согласованности действий внутри команды нет.
И полное отсутствие конкуренции. Не, там есть конечно умные люди, но их так мало, что создается впечатление, что их нет. А остальные только и могут констатировать: "С вашего счета зафиксировано подключение к интернет". На вопрос: "Что значит подключение к интернет? Ко всему сразу,или на какой то конкретный IP?", ответ: "У нас нет такой информации". Вот они - IT магнаты!
ssokol
Dec 16 2011, 16:16
Цитата(sobr @ Dec 15 2011, 20:58)

А зачем игнорировать? Я после этого и смс парсить на баланс начал.
это мы так скоро и GPRS трафик и MMS , да еще если GSM c GPS то и NMEA на баланс парсить начнем....

до тех пор , пока у операторов с выдачей баланса бардак , то как говорит один мой знакомый - БАРДАК АВТОМАТИЗИРОВАТЬ НЕЛЬЗЯ.
Это я к тому, что приходят СМС типа: "Ваш баланс меньше 30 руб." те нужно еще и слово "меньше" парсить иначе будете думать , что у вас все еще 30 рублей. Или "Ваш баланс -100 руб" то еще и минус парсить...
stream
Dec 19 2011, 07:45
Цитата(ssokol @ Dec 16 2011, 20:16)

БАРДАК АВТОМАТИЗИРОВАТЬ НЕЛЬЗЯ.
Золотые слова!
Цитата(ssokol @ Dec 16 2011, 20:16)

Это я к тому, что приходят СМС типа: "Ваш баланс меньше 30 руб." те нужно еще и слово "меньше" парсить иначе будете думать , что у вас все еще 30 рублей. Или "Ваш баланс -100 руб" то еще и минус парсить...
А еще есть вот такие замечательные сообщения:
"Ваша задолженность 500 рублей"
"Кредитный лимит по вашему лицевому счету составляет 3000 рублей".
Успехов ребятам.
vintick
Dec 19 2011, 13:38
А на Life , если запрашивать через *100# , иногда приходит
ответ по балансу, но просит ответить 0,1... Если не ответишь,
сессия некоторое время не закрыта и повторный запрос не
работает. Надо ответить AT+CUSD=2 тогда ок. Или я чего
не понял.
ssokol
Dec 19 2011, 17:13
Цитата(vintick @ Dec 19 2011, 17:38)

А на Life , если запрашивать через *100# , иногда приходит
ответ по балансу, но просит ответить 0,1... Если не ответишь,
сессия некоторое время не закрыта и повторный запрос не
работает.
Это, типа того, проверка, не робот ли запросил баланс
Сейчас проверил баланс
Мегафон 0,28руб. *Не забудь пополнить счет, будь на связи в Новый Год!
Теле2 ОСТАТОК55.99р. НОВОгОDНии ХиТ-пАРАD,ЗВОНи 2012 (3руб.МиН) - вперемешку с капслоком, русская "Д" видимо вносит эстетический хаос во всеобщую гармонию текста, посему заменена английской.
krdmitry
Dec 29 2011, 21:13
Позвольте вклиниться по поводу МТС: порекомендую использовать #100#, в этом случае баланс всегда приходит в виде Balans:XXX, и всегда по USSD.
Вроде как сделано специально для М2М. А есть ли подобное у других операторов большой тройки?
Цитата(Ответ МТС на USSD запрос)
Баланс:156,17р Хиты вместо гудков на месяц-0руб! *728*87#
Ну не пи****сы ли?
ArtemKAD
Feb 19 2012, 00:21
Цитата(Dmitrich @ Dec 14 2011, 08:31)

Приглашаю поделится опытом - кто как распознаёт ответ оператора на запрос баланса по USSD.
Мой, за много лет проверенный вариант:
AUTOCHECK x y z
где
x - порядковый номер числа в тексте USSD-ответа. Число - целая часть баланса без запятых, точек и других разделителей.
y- лимит ниже которого начинать оповещение,
z -сколько часов между проверками
ЗЫ. Ну и естественно надо настроить номер куда слать запрос...
Цитата(sobr @ Feb 18 2012, 11:26)

==Баланс:156,17р Хиты вместо гудков на месяц-0руб! *728*87#==
Ну не пи****сы ли?
Все ж баланс - с ПЕРВОЙ ЦИФРЫ в ответе (и так в подавляющем большинстве случаев). Впрочем, ответ на вопрос вообщем то положительный... Жаль, не в хорошем смысле этого слова
Цитата(ArtemKAD @ Feb 19 2012, 03:21)

AUTOCHECK x y z
А это как и где?
ArtemKAD
Feb 19 2012, 22:23
Цитата
А это как и где?
Команда настройки автопроверки. Отправляется через SMS (что не суть важно). Настройка обычно требуется один раз под конкретного оператора.
Не понимаю, зачем нужно определять баланс именно в самом устройстве? Ответ на USSD-запрос можно отправить на сервер целиком, а уже наверху, по маскам, выделять из него нужную информацию, например:
Оператор1: "Ваш баланс составляет 25,40 тугриков. ..реклама.."
Оператор2: "Vash balans 10,22tgr. ..реклама.."
В перввом случае баланс - это число между "составляет " и " тугриков", во втором - это число между "balans " и "tgr".
MKdemiurg
Feb 21 2012, 11:43
Как вы предлагаете автоматизировать поиск по минимуму баланса среди 1000 устройств?
Хранить в базе такую кучу мусора. Тем более что механимы поиска будут теже что и на устройстве.
Цитата(MKdemiurg @ Feb 21 2012, 14:43)

Хранить в базе такую кучу мусора. Тем более что механимы поиска будут теже что и на устройстве.
Мне неизвестна структура вашей системы, но хранить в базе можно только уже выделенный баланс. Если выделять его в устройсве , то должна быть возможность изменения масок, поскольку форматы ответов на USSD-запрос иногда меняются.
MKdemiurg
Feb 21 2012, 12:46
НУ вот мы тут и обсуждали "маски".
Я ещё проверяю в устройстве - если меньше 1 грн - запрещаю передачу - но только при условии полного совпадения маски и типа ответа.
ЗЫ У нас в хохляндии обычно первые цифры это баланс... Вроде БЫ пока другого не встречал.
Цитата(MKdemiurg @ Feb 21 2012, 15:46)

если меньше 1 грн - запрещаю передачу
Думаю, что вопрос, поставленный в топике, общего решения не имеет, а сильно зависит от структуры и назначения системы (например, можно ли позволить устройству запрещать передачу). На мой взгляд более актуальныно было бы решить вопрос с автоматическим пополнением.
MKdemiurg
Feb 21 2012, 13:35
Цитата(MVJ @ Feb 21 2012, 16:14)

Думаю, что вопрос, поставленный в топике, общего решения не имеет, а сильно зависит от структуры и назначения системы (например, можно ли позволить устройству запрещать передачу). На мой взгляд более актуальныно было бы решить вопрос с автоматическим пополнением.
Это как? Вводить в память код с карточки?
ArtemKAD
Feb 21 2012, 18:51
Цитата
На мой взгляд более актуальныно было бы решить вопрос с автоматическим пополнением.
Зачем? Если знать (лучше заранее), что денег нет, пополнить всегда можно. Входящие SMS никто ведь не отменял...
Цитата
Не понимаю, зачем нужно определять баланс именно в самом устройстве?
Затем, что отправка сообщения стоит денег. И тратить их надо когда необходимо, а не просто так. Да и отправка сообщений по каждому чиху в первую очередь задолбает хозяина, что приведет к логичному результату - он забьет на эти оповещения.
CADiLO
Feb 22 2012, 07:15
Одни товарищи сделали следующее автопополнение - они с MTC работают, но думаю что можно на любом операторе организовать.
На карточку стоящую на серверном модеме ложим допустим 1000 гривен.
Затем когда кто нибуть из клиентских модулей сообщает что у него денег нет или мало, то автоматом при помощи USSD на этот модуль переводится N денег.
Как пример перевода
*150* номер куда перевести*сумма#
по приходу SMS с подтверждением отправить
*150*код 4 цифры#
Ну а основную карточку можно периодически и вручную пополнять.
ArtemKAD
Feb 22 2012, 09:02
Цитата
Затем когда кто нибуть из клиентских модулей сообщает что у него денег нет или мало, то автоматом при помощи USSD на этот модуль переводится N денег.
Все бы хорошо, но некоторые операторы при переводе денег не сдвигают время актуальности карточки. В результате можно оказаться с заблокированной картой на которой есть деньги...
CADiLO
Feb 22 2012, 09:44
У меня предоплатные МТС и Киевстар - пофигу как пополнять, время сдвигается.
В описании пакета нет ограничений на то каким образом я пополняю карточку.
Может это касается корпоративных пакетов.......
ArtemKAD
Feb 22 2012, 12:41
Насколько помню это касалось в первую очередь Лайфа...
CADiLO
Feb 22 2012, 12:45
Там да, могут чудить.... Впрочем у Лайфа и без этого приколов выше крыши.....
Velund
Feb 23 2012, 04:34
QUOTE (ArtemKAD @ Feb 22 2012, 13:02)

Все бы хорошо, но некоторые операторы при переводе денег не сдвигают время актуальности карточки. В результате можно оказаться с заблокированной картой на которой есть деньги...
Вежливо, в мануале на устройство, не рекомендуем пользоваться услугами таких операторов ввиду сложности контроля за состоянием счета и истечением срока действия баланса применительно к карточке, стоящей в удаленном устройстве.
Andreymai
May 31 2012, 07:15
кто сделал пересылку ответа на USSD-запрос через SMS на другой номер?
есть проблема с перекодировкой из UCS2 с кирилицей.
может самому делать транслит через таблицу перекодировки....
подскажите, у кого есть рабочее решение?
andrewlekar
May 31 2012, 07:42
Я делал. Чё за проблема то?
Andreymai
May 31 2012, 07:45
проблема в том, чтобы запихать полученный ответ в SMS и отправить.
USSD приходит в UCS2, текст м.б. на русском и на транслите.
просто так это через SMS не передать, модем не поддерживает отправку SMS в UCS2
andrewlekar
May 31 2012, 07:49
В PDU передавайте.
Для просмотра полной версии этой страницы, пожалуйста,
пройдите по ссылке.