Как стать автором
Обновить
8
0
Мирослав @miroslav

Пользователь

Отправить сообщение

Как вернуть нормальный цвет кнопок? кнопки пересказать и перевод видео стали розовыми

Раньше был мессенджер Viber и фиолетовый цвет стал причиной его удаления

Для целей определения мобильного оператора корректнее использовать базу перенесенных номеров MNP.
При исходящем звонке запрашивать и кэшировать оператора и даже регион, можно с сайта мегафона moscow.shop.megafon.ru/get_ajax_page.php?action=getMsisdnInfo&msisdn=79000000000 или с теле2 mnp.tele2.ru/gateway.php?9000000000

Если нужно список кодов мобильных операторов www.rossvyaz.ru/docs/MNC_25.11.2013-1.rtf
и список кодов регионов (он не совпадает с автомобильными) www.rossvyaz.ru/docs/Identifikator_regiona.doc

У меня как-то так получается /var/lib/asterisk/agi-bin/mnp:
#!/bin/bash

declare -a array
while read -e ARG && [ "$ARG" ] ; do
        array=(` echo $ARG | sed -e 's/://'`)
        export ${array[0]}=${array[1]}
done

checkresults() {
        while read line
        do
        case ${line:0:4} in
        "200 " ) echo $line >&2
                 return;;
        "510 " ) echo $line >&2
                 return;;
        "520 " ) echo $line >&2
                 return;;
        *      ) echo $line >&2;;       #keep on reading those Invlid command
                                        #command syntax until "520 End ..."
        esac
        done
}

echo "DATABASE GET MNP $agi_extension"
read line
if [[ ${line:0:14} != "200 result=1 (" ]]; then
    MNP=$(/usr/bin/wget -q "http://mnp.tele2.ru/gateway.php?${agi_extension:1}" -O - | /usr/local/bin/jq -r '.response.geocode.code+.response.mnc.code')
    [[ -n $MNP ]] && echo DATABASE PUT MNP $agi_extension \"$MNP\" && checkresults
fi

exit 0;


и в extensions.ael
if (${DB_EXISTS(MNP/${EXTEN})} = 0)
{
        AGI(mnp);
}

if ("${DB(MNP/${EXTEN}):2}" = "02" && ${DB(balance/multifon)} > 100)
{
        if (${GROUP_COUNT(megafon)} < 5) {
                GROUP()=megafon;
                Dial(SIP/megafon/${EXTEN},90);
                if (${DIALSTATUS} = BUSY) Busy();
        };
}


для простоты результаты кэшируем в бд самого астериска: первые 2 цифры — регион, вторые 2 цифры — код оператора

(ессно если нужно только определить регион абонента, то база rossvyaz работает намного лучше, надежнее, быстрее и тд)
Да, почта России отжигает…

21.07.2013 получил смс от Qiwi с номером трекинга: 14301764083661

дальше я следил на номеру трекинга на сайте и ждал извещение в почтовый ящик, но у почты России были другие планы:

22.07.2013 Прием, Москва 143009
23.07.2013 Обработка, Москва 143016, Покинуло сортировочный центр
24.07.2013 Обработка, Москва 140992, Покинуло сортировочный центр
28.07.2013 Обработка, Челябинск 454960, Сортировка
жду, думаю вот вот в ящике извещение будет, но нет
!!!
03.08.2013 Возврат, Челябинск 454080, Отсутствие адресата по указанному адресу

и моя карточка отправляется в обратный путь
04.08.2013 Обработка, Челябинск 454962, Покинуло сортировочный центр
причем последние два события в трекинге появились на сайте только 05.08.2013

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

Прости QIWI, но даже бесплатную карточку мне получить не получится :-(

PS: зачем Qiwi пользуется услугами почты России?
у Qiwi же в каждом городе есть представители или даже почтоматы, что может быть проще бросить карточку в почтовый ящик…
Уважаемый MegaFon, Ваш сервис UMS это технологический прорыв в будущее, такой прорыв как сервис Мультифон!
Я думаю МегаФон лучший оператор связи!

Пожалуйста, сделайте API для пользование сервисом UMS в автоматическом режиме.
Интересует получение (и отправка) SMS с номера абонента, разумеется с его согласия, без ввода капчи.

Номер телефона мой, и я хочу пользоваться им как мне удобно. Даже без сим карты.
МегаФон прогрессивный оператор и у Вас уже есть необходимые технологии. Откройте свои возможности для компьютерных гиков!
Спасибо netAn за капчу!

Давай еще возьмем исходники AnyBalance и на каждую ссылку капчу поставим!

Вот самое простое для Столичного Мегафона:
moscowsg.megafon.ru/TRAY_INFO/TRAY_INFO?LOGIN=%НОМЕР%&PASSWORD=%ПАРОЛЬ%
или
moscowsg.megafon.ru/SESSION/GET_SESSION?MSISDN=%НОМЕР%&PASS=%ПАРОЛЬ%&CHANNEL=WWW

А с UMS пусть еще и клиента на Android с капчей перепишут, а то вдруг что.

Все как в бородатом анекдоте:
Хакер в столовой
День первый
Хакер приходит в общественную столовую и с возмущением обнаруживает, что солонку на столе может открутить кто попало и насыпать туда что угодно. Хакер приходит домой и пишет гневное письмо директору столовой: «Я, meG@Duc, обнаружил уязвимость солонки в Вашей столовой. Злоумышленник может вскрыть солонку и насыпать туда яду! Примите меры срочно!»

День второй
Директор среди прочих деловых писем, запросов о поставках еды и курьерских уведомлений получает письмо, и пожимает плечами: «Кому этот бред только в голову пришёл?»

День пятый
Хакер приходит в столовую, насыпает во все солонки яду. Погибает триста человек, директора три месяца таскают по судам и, в конце концов, оправдывают за отсутствием состава преступления. Хакер пишет письмо в стиле «ну что, видали?».

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

День 97-ой
Хакер обнаруживает, что дырки в солонках пропускают соль в обе стороны. И не только соль, а вообще всё, что угодно. Он пишет возмущенное письмо директору и ссыт во все солонки столовой. Триста человек перестают посещать эту столовую вообще, тридцать попадают в больницы с отравлением. Хакер вдогонку посылает директору смс-ку «Ну как вам?». Директора тем временем три месяца таскают по судам и дают год условно.

День 188-ой
Директор столовой клянется в жизни больше не работать ни в одной столовой, а тихо-мирно грузить лес в Сибири. Инженеры работают над новой солонкой с односторонним клапаном. Официантки тем временем изымают все старые солонки и раздают соль вручную.

День 190-ый
Хакер тырит солонку из столовой и изучает дома её устройство. Пишет гневное письмо директору: «Я, meG@Duc, стырил солонку и нахожу этот факт возмутительным! Любой может стырить солонку из Вашей столовой!» До этого непьющий директор читает письмо, идет домой и выпивает водки.

День 193-ый
Хакер обнаруживает, что все солонки в столовой прибиты цепями к столам. Он приезжает на очередной хакерский СПРЫГ и докладывает о своих успехах, получая там заслуженную награду за защиту интересов общества и потребителя. К счастью, директор ничего про это не знает и не сопьется раньше времени.

День 194-ый
В рамках дьявольски гениально продуманной операции хакеры всем СПРЫГом вламываются в столовую и высыпают соль из всех солонок себе в карманы. Хакер meG@Duc пишет возмущенное письмо директору, намекая на то, что никакой заботы о посетителях в столовой нет и любой гад может лишить честных людей соли в одно мгновение. Дозатор соли с авторизацией необходим просто позарез.

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

День 200-ый
Посетители столовой с ужасом находят, что, чтобы насыпать соли, они должны подойти к официанту, предьявить паспорт, получить специальный 8-значный одноразовый код к солонке. Для получения перца процедуру следует повторить.
В общих чертах
главная функция ums
логинится, кэширует куки, разбирает смс от определенных получателей и сохраняет их в БД

Код
import webapp2, re, base64, Cookie
from google.appengine.api import memcache
from google.appengine.api import urlfetch
from google.appengine.ext import db
from xml.dom import minidom
from datetime import datetime, timedelta

url_login = "https://messages.megafon.ru/userjson/weblogin.do?webloginReq.user=%s&webloginReq.secinfo=%s&imageVerifyCode=&__checkbox_remember=false&__checkbox_keepmeloggedin=false"
url_chatlist = "https://messages.megafon.ru/onebox/getChatList.do?startNum=1&endNum=100&reFreshFlag=1&operation=1&chatMsgType=10100000000100000000000000000000"
url_messages = "https://messages.megafon.ru/onebox/oneboxList.do?umReq.ctlg=1%%2C2&umReq.mType=2053&umReq.bNum=1&umReq.eNum=20&umReq.snd=%s&umReq.rcv=7%s"

def ums(username, password, senders):
    try:
        total_result = True
        for sender in senders:
            session_id = memcache.get(username)
            action_result = None
            if session_id:
                action_result = messages(session_id, username, sender)
            if action_result is False or session_id is None:
                session_id = login(username, password)
                action_result = messages(session_id, username, sender)
            if action_result != True:
                total_result = False
        
        return total_result
    except:
        return

#get session id (cookie)
def login(login, password):
    try:
        result = urlfetch.fetch(url=url_login % (base64.b64encode(login), base64.b64encode(password)))
        if result.content != '{"returnFlg":true}':
            return False
        
        cookie = Cookie.SimpleCookie()
        cookie.load(result.headers.get('Set-Cookie'))
        
        memcache.set(login, cookie['JSESSIONID'].value)
        return cookie['JSESSIONID'].value
    
    except:
        return

#get and put to db messages from sender to username
def messages(session_id, username, sender):
    try:
        result = urlfetch.fetch(url=url_messages % (sender, username), follow_redirects=False,
                        headers={'Cookie': 'JSESSIONID=' + session_id})
                        
        if result.status_code == 302:
            return False
        xmldoc = minidom.parseString(result.content.replace("\r",'').replace("\n",''))
        msg_list = xmldoc.getElementsByTagName('uniMsg')
        for msg_element in msg_list:
            msgID = msg_element.getElementsByTagName('msgID')[0].firstChild.nodeValue
            msgText = msg_element.getElementsByTagName('ttl')[0].firstChild.nodeValue
            msgTime = msg_element.getElementsByTagName('t')[0].firstChild.nodeValue
            
            if sms.get_by_key_name(msgID) is None:
                sms(key_name=msgID,msgID=msgID,msgTime=datetime.strptime(msgTime,"%Y%m%d%H%M%S"),msgText=msgText)
                sms.put()

        return True
        
    except:
        return        

#get numbers and messages list (get xml for example)
def chatlist(session_id):
    try:
        result = urlfetch.fetch(url=url_chatlist,
                        headers={'Cookie': 'JSESSIONID=' + session_id})
        return result.content
    except:
        return

class sms(db.Model):
    msgID = db.StringProperty(required=True)
    msgTime = db.DateTimeProperty(required=True) #UTC
    msgText = db.TextProperty()

Сейчас сервис UMS от Мегафона это единственный способ приема входящих SMS без железа! По этому не хочется чтобы его задушили капчей, когда есть другие способы защиты.

Да, я понимаю что намного романтичнее Sim карту в Huawei модем, Huawei в сервер, сервер в интернет и в питание 24/7. Такие варианты уже описаны на хабре: SMS и SIP шлюз — Мультифон, Asterisk, Kannel, Приём и обработка SMS-сообщений на Linux-машине, Делаем VoIP GSM шлюз из Tp-link mr-3020 и Huawei E-171 — часть вторая — добавляем Siemens Gigaset c470IP и SMS
Но нет у меня такого сервера, как и у многих нет, зато есть надежный и бесплатный Google App Engine с проверкой SMS каждую минуту.

Свой номер телефона нужно держать в тайне, но сейчас почти все что есть в интернете хочет отправить SMS для регистрации или авторизации. Решение это UMS от Мегафона, позволяет пользоваться сразу несколькими номерами и не светить свой основной номер.
Не нужно капчу! У меня программка для разбора входящих смс :-)
Лучше пароли разные с Сервис Гидом и чтобы не пускало без подключенной услуги.
Из Сервис Гида смс уходят с другого номера. А вот сайт messages.megafon.ru сделан чтобы писать смс со своего номера и принимать! входящие на свой номер. Ессно при входе в этот messages.megafon.ru приходит смс, но в настройках ее можно отключить.
Ан нет, и без UMS пускает и даже предлагает подключить эту услугу одной галочкой :-( Фигово
Вроде если услуга UMS не активна войти на сайт messages.megafon.ru невозможно… Или можно?
не Wolksvagen, а Volkswagen!
Steam прекрасный магазин, мне очень нравится что можно купить игру одновременно под Windows и Mac OS.
Да, все покупки привязаны к одному аккаунту, достижения и сохранения загружаются в облако, все класно.

Вот мой негативный опыт работы с магазином Steam:
Магазин часто проводит распродажи, на такой вот распродаже под новый год я накупил много игр и с хорошей скидкой. За все платил своей картой Visa и дорожил своим аккаунтом. Но в один прекрасный день я не смог зайти в Steam — клиент сказал что мой аккаунт заблокирован. Пароль был верный, почтовый ящик работал, но играть в купленное я не мог.
Как-то нашел на сайте магазина форму для обращения в техническую поддержку, оказалось русский язык сразу заканчивается если на шаг отойти от процесса покупки. На вопрос о причине блокировки, спросили взламали меня или нет, ответил незнаю и что пароль остался без изменений, потом техподдержка стала спрашивать имя моего paypal аккаунта (paypal есть, но для покупок я всегда пользовался картой), написал его — ответили что paypal «неверный», написал что все оплачивал картой и даже дал номер карты, спросил о причине блокировки, ответа просто нет. Прошло около двух недель и запрос стал помечен как закрытый. Фирма американская, говорит на английском, в России представительства нет.

Получается, в схеме с одним «своим» аккаунтом у тебя нет никаких гарантий что завтра у тебя останется, то за что ты уже отдал деньги. В любой момент кто-то может закрыть мой аккаунт, навсегда и даже без объяснения причин.
Звонить некуда, писать через переводчик, тому кто не хочет помогать, смысла нет.

Мой вывод:
Не стоит хранить все в одном мешке, особенно если этот мешок забугорный.
По этому даже в App Store ничего не покупаю :-)
На +883-140 можно звонить с ТЕЛЕ2 (Челябинск), только минута стоит 60 рублей (тариф по направлению «Остальные страны») :-)

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

Теле2, неверное, чтобы не следить за префиксами, отправляют любой неизвестный номер в МТТ и считают звонок как «Остальные страны».
Ну так, для «встроенного движка в mac os» нужен сам Mac OS, также как для Microsoft Speech нужен Windows.
То есть, нужно или астериск под macos/windows ставить или придумывать как все связать, не говоря уже о покупке лицензий и фруктового железа.

Или, если ты говоришь о разовом синтезе (по готовому сценарию) и ручном переносе, то да, все верно.
Хотя живой человек еще лучше прочитает. С тем же успехом можно позвонить в свой call-центр (или можно даже в чужой) и сказать: «Привет девчонки! Повторяйте за мной».

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

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

Фразы из кэше можно произносить без php:
Playback(/var/lib/asterisk/festivalcache/${MD5(Здравствуйте)});

Информация

В рейтинге
Не участвует
Откуда
Челябинск, Челябинская обл., Россия
Дата рождения
Зарегистрирован
Активность