Страница 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'
});