На днях столкнулся с одной неприятной вещью — Астериск,получая СМС и сохраняя его содержимое в файл,обрезал строки,если строка содержала символ @. Например в СМС присылали адрес почты [email protected], во входящей СМС в логах Астериска и в файл писалось только 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.
Ну,собсно,хоть и костыль,но вполне рабочий получился.Не зря целый день потратил на мучения))