@pcdesign

Как Dial научить использовать Follow me?

Есть некий контекст в файле: /etc/asterisk/extensions_custom.conf

exten => s,1,Answer
exten => s,n,Wait(1)
exten => s,n,Dial(SIP/204,20,m(default)tw)

У номера 204 есть прописанный мобильник в followe me.
Как сделать так, чтобы followe me учитывался при звонке?
И чтобы звонил не только сип, но и мобильник.
Понятно, что можно прописывать для каждого случая:
exten => s,n,Dial(SIP/trunk_name/7909xxxxxxx,40,m(default)tw)

Но это очень неудобно. Номера постоянно меняются, да и вообще...
Есть ли какие-нибудь еще способы?
  • Вопрос задан
  • 641 просмотр
Решения вопроса 1
@pcdesign Автор вопроса
Изобрел велосипед.
Написал модуль на перле, который обращается к MySQL базе и вытаскивает оттуда необходимую инфу:
номер мобильного follow me и текущий трак.

#===============================================================================
#
#         FILE: followme.pm
#
#  DESCRIPTION: Модуль, который выдает текущий транк на исход, а так же выдает
#                               номер мобильного в follow me
#
#        FILES: ---
#         BUGS: ---
#        NOTES: ---
#       AUTHOR: YOUR NAME (),
# ORGANIZATION:
#      VERSION: 1.0
#      CREATED: 04/22/2015 11:58:36 AM
#     REVISION: ---
#===============================================================================

use strict;
use warnings;
use DBI;

package Followme;

our $dbh_ast = 
DBI->connect( 'dbi:mysql:dbname=asterisk;host=localhost', 'dbuser', 'pass' ) or die;

sub new {
    my ( $class, %self ) = @_;
    bless \%self, $class;
    return \%self;
}

sub get_followme {
    my $self = shift;
    my $ext  = $self->{ext};
    my $sql  = 'SELECT `grplist`  FROM `findmefollow` WHERE `grpnum` 
                           LIKE ? AND `grplist` LIKE ?';
    my ($followme_phone) = $dbh_ast->selectrow_array( $sql, undef, $ext, $ext . '-%' );
    if ($followme_phone) {
        $self->{followme_phone} = substr $followme_phone, 5, -1;
        return $self->{followme_phone};
    }
    else {
        return undef;
    }
}

sub get_current_trunk {
    my $self = shift;
    my $sql  = 'SELECT t.name, t.dialoutprefix
                           FROM  `outbound_route_trunks` o,  `trunks` t
               WHERE t.disabled LIKE  "off"
                           AND o.trunk_id = t.trunkid
                           ORDER BY o.seq ASC 
                           LIMIT 0 , 1';
    my ( $trunk_name, $dialoutprefix ) = $dbh_ast->selectrow_array($sql);
    $self->{dialoutprefix} = $dialoutprefix;
    return $trunk_name.'/'.$dialoutprefix.$self->{followme_phone};
}

1;


И используется вот так:
use Followme;
my $f = Followme->new( ext => "100" );
if ( $f->get_followme() ) {
    my $followme = $f->get_current_trunk();
    $AGI->exec( 'Dial', 'SIP/' . $followme . ',40,m(default)tw' );
}
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 1
mifistor
@mifistor
Поп-программист. Сам удивляюсь как так вышло.
Если вы желаете, чтобы звонке на 204 звонили еще и номера прописанные в follow me, то там можно выбрать стратегию дозвона "звонят все". Тогда вызов будет одновременно поступать на все устройства и кто первый ответит, тот и будет говорить.

Также не забудьте добавить к внешнему номеру знак '#', без него вызов не пройдет.
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы