На днях столкнулся с одной неприятной вещью - Астериск,получая СМС и сохраняя его содержимое в файл,обрезал строки,если строка содержала символ @. Например в СМС присылали адрес почты test@mail.com, во входящей СМС в логах Астериска и в файл писалось только test.Все что шло вместе с @ тупо обрезалось.

Очень долго искал решение в интернете,но как оказалось,его там нет. Совсем. Как будь то у меня одного такая проблема.

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

1)Смс принимается по такому вот екстеншену в Астериск:

[Mani-incoming]
exten => sms,1,Verbose(Incoming SMS from ${CALLERID(num)} ${SMS})
exten => sms,n,System(/usr/bin/php /usr/local/bin/smsconv-mani.php ${SMS_BASE64} ${CALLERID(num)})
exten => sms,n,Hangup()

То есть тут текст СМСки в Base64 и номер отправителя передаются РНР скрипту,который уже и обрабатывает данные и кладет все в нужный файл.

2)Вот сам РНР скрипт:

<?php
if (!empty($argv[1]) and !empty($argv[2]))
{
$data=base64_decode($argv[1]);
$data2 = str_replace(chr(0x00),"@",$data);
$file = "/home/asterisk/sms/Mani/".$argv[2]."-".date('Y-m-d-H:i:s').".html";
$fp = fopen($file, "w");
fwrite($fp,"<meta charset=\"utf-8\">");
fwrite($fp,$data2);
fclose($fp);
}
?>

Скрипт принимает два аргумента - кодированную строку содержимого СМС и номер отправителя.Далее она обрабатывает строку как раз так,что б заменить наш гребаный символ с кодом 0х00 на символ @, после чего наша строка уже не обрезается и мы видим где надо символ-разделитель почты.

Так как у меня оно сохраняет в файлы для просмотра в браузере,потому там добавляется строка-заголовок <meta charset> и файлы имеют расширение html.

Ну,собсно,хоть и костыль,но вполне рабочий получился.Не зря целый день потратил на мучения))

Добавить комментарий

%d такие блоггеры, как: