Страница 1 из 2
скрип для очистки памяти сим карты
Добавлено: 24 дек 2012, 21:49
Alpha
Хочу написать скрипт для очистки памяти сим карты от смс
с помощью команды
dongle cmd datacard0 AT+CMGD=1,4
погулив написал
Код: Выделить всё
#!/usr/bin/perl
use warnings;
use strict;
use Asterisk::AGI;
my $AGI = new Asterisk::AGI;
my %input = $AGI->ReadParse();
my $work_dir = "/usr/local/share/asterisk/agi-bin/";
##START
$AGI->exec("asterisk -rvv 'dongle cmd datacard0 AT+CMGD=1,4' ");
exit();
#END
запускаю ошибок нет, но скрип подвисает, видимого эффекта нет
Подскажите может я чего не правильно делаю.
Заранее спасибо
Re: скрип для очистки памяти сим карты
Добавлено: 24 дек 2012, 22:40
zzuz
проблема в использовании строки
Код: Выделить всё
$AGI->exec("asterisk -rvv 'dongle cmd datacard0 AT+CMGD=1,4' ");
Re: скрип для очистки памяти сим карты
Добавлено: 24 дек 2012, 23:23
Samael28
В AGI есть функция Command. Exec - это как-то через з.... Ну и неправильные опции, да.
Re: скрип для очистки памяти сим карты
Добавлено: 25 дек 2012, 07:01
Vlad1983
Код: Выделить всё
$AGI->command("dongle cmd datacard0 AT+CMGD=1,4");
Re: скрип для очистки памяти сим карты
Добавлено: 25 дек 2012, 14:33
Alpha
заменил как написал Влад, скрипт запускается, но не завершается.
теперь другой вопрос, можно ли это скрипт запускать вручную или только через диалплан в экстеншене?
И еще погуглив так и не нашел команды AGI command, подскажит учебник или справочник по Аги
Re: скрип для очистки памяти сим карты
Добавлено: 25 дек 2012, 14:41
Vlad1983
проморгал что вы на perl замутили
то что написал работает с php-agi (в составе есть phpagi-asmanager.php) из под cron
вот пример мониторинга регистраций
Код: Выделить всё
#!/usr/bin/php -q
<?php
date_default_timezone_set('Europe/Moscow');
require_once('/var/lib/asterisk/agi-bin/phpagi-asmanager.php');
$asm = new AGI_AsteriskManager();
if($asm->connect())
{
$devices = $asm->command("sip show registry");
//print_r($devices);
foreach(explode("\n", $devices['data']) as $line)
{
if (preg_match("/^(\S+)\s+\S+\s+\S+\s+\S+\s{1,}(\S+)/i",$line,$match)) {
switch($match[2]){
case "Unregistered" : sendalarm($match[1],$match[2]); break;
case "Rejected" : sendalarm($match[1],$match[2]); break;
case "Timeout" : sendalarm($match[1],$match[2]); break;
case "No" : sendalarm($match[1],$match[2]); break; //No Authentication
case "Unknown" : sendalarm($match[1],$match[2]); break;
}
}
}
$asm->disconnect();
}
function sendalarm($peer='',$status=''){
$message = "Peer: ".$peer." Status: ".$status."\n";
mail("sovsem@pisem.net", "peer registry fail", $message, "From: ast@pisem.net"");
exec("/usr/sbin/asterisk -rx 'sip reload'");
}
?>
Re: скрип для очистки памяти сим карты
Добавлено: 25 дек 2012, 15:02
pan-user
прям все на своей волне, вместо perl - php, вместо agi - ami...
Re: скрип для очистки памяти сим карты
Добавлено: 25 дек 2012, 15:10
Vlad1983
для перла есть Asterisk::AMI
кружить на AGI подобные задачи нет смысла - не для того оно
Re: скрип для очистки памяти сим карты
Добавлено: 25 дек 2012, 16:08
Alpha
спасибо за ответ, теперь есть где копать.
Re: скрип для очистки памяти сим карты
Добавлено: 27 дек 2012, 17:45
Alpha
Кому интересно, все получилось - вот код. Cpan rules!
Код: Выделить всё
#!/usr/bin/perl
use Modern::Perl;
use Data::Dumper;
use Asterisk::AMI;
use warnings;
my $astman = Asterisk::AMI->new(PeerAddr => 'ваш ip',
PeerPort => '5038',
Events => 'on',
Username => 'admin',
Secret => 'пароль'
);die "Unable to connect to asterisk" unless ($astman);
#print Dumper\$astman;
my $response = $astman->action({
Action => 'Command',
Command => 'dongle cmd datacard0 AT+CMGD=1,4'
});