Да, Астериск в данной заметке только косвенно — метод (и скрипт) предназначены для дальнейшей интеграции в него, в зависимости от задач. Но более удачного хаба не нашлось.
Если пропустил — укажите, поправлю. Спасибо!
Итак, имеем GOIP — GSM шлюз. К нему есть разработанный производителем SMS-сервер, но я не хотел выделять под простую задачу ресурсы на vds, да и он рассчитан (имеет смысл) на работу с несколькими шлюзами и хорошим объемом. Если же у нас один-два шлюза, и смс хочется видеть «постольку — поскольку» — данный путь вполне может иметь смысл.
В вебморде шлюза sms-ки доступны в разделе «Tools» => «SMS in box». Да да, этот вопрос не ко мне — к китайцам 🙂
Шлюз хранит по 5 смс на канал.
Оттуда и будем их выдирать, скриптом на PHP. Постараюсь прокомментировать происходящее в исходнике.
<?php /* Прием SMS из GOIP whoim, whoim@mail.ru */ $goip_addr = "http://goip_external_ip:7454/"; #Внешний (если работа ведется через интернет) адрес goip. Возможно, придется пробросить порт на роутере, например, 7454 => local_goip_addr:80 $goip_user = "admin"; $goip_password = "goip-password"; #Это нужно для авторизации на goip-е $context = stream_context_create(array( 'http' => array( 'header' => "Authorization: Basic " . base64_encode("$goip_user:$goip_password") ) )); #получаем сырые данные - html $data = file_get_contents($goip_addr."/default/en_US/tools.html?type=sms_inbox", false, $context); #у меня встречались такие косяки, правим $data = str_replace('\"', '"', $data); //fix #выдираем содержимое sms из js-скрипта в html, ключ = каналу sim preg_match_all("|sms= \[(.*?)\]|is", $data, $sms_dump_arr); $sms = array(); #первый цикл - по "каналам sim", которые содержат 5 смс-ок, разделенных запятой и в кавычках. То есть в csv. #Во втором цикле мы с помощью str_getcsv добываем валидно данные уже по каждой смс раздельно. foreach($sms_dump_arr[1] as $sim_key => $sim_val) foreach(str_getcsv($sim_val) as $sms_key => $sms_val) { $sms[$sim_key][$sms_key] = explode(',', $sms_val, 3); #ключи 0,1,2 содержат датувремя, номер, текст смс. $sms[$sim_key][$sms_key][] = md5($sms_val); #ключ 3 содержит хеш первых трех, для упрощения идентификации sms-ки в дальнейшем } #смотрим результат print_r($sms); ?>
Данный скрипт — заготовка. Что делать с данными — Ваше дело. Я буду сверять по хешу, нет ли ее еще в базе, и если нет — класть в mysql табличку. Это нужно, ибо страничка содержит всегда 5 последних смс, то есть — данные при отсутствии изменений все равно будут, следите за дубликатами.
Удачи!
ссылка на оригинал статьи http://habrahabr.ru/post/258561/
Добавить комментарий