Asterisk 1.6 + LCR Caller ID Problem und Queue Status Update Problem

tmace85

Neuer User
Mitglied seit
24 Aug 2006
Beiträge
16
Punkte für Reaktionen
0
Punkte
0
Hallo,

Benutzt wird:

Asterisk 1.6.2.0-RC8
LCR 1.6
Sip Telefone

Folgende Probleme habe ich:


1. Wenn ich mit eine Telefon raus wähle wird durch Asterisk die richtige Caller ID gesetzt. Bei dem der Angerufen wird erscheint dann nur Rufnummer 0 anstatt Rufnummer XXX für die korrekte CallerID.

2. Ein Anrufer kommt in die Queue. Ein Queue Member nimmt den Anruf entgegen. Status des Queue Members (mit queue show $QUEUENAME) "in use". Es wird telefoniert und der Benutzer wird auch nicht weiter angerufen, da er ja besetzt ist. Wird das Gespräch beendet, wechselt der Status sofort auf "not in use".
Wenn nun aber der Anrufer weitergeleitet wird und der Queue Member auflegt (Somit ist der Anruf ja zwischen Anrufer und neuen Angerufenen vorhanden), bleibt der der Status des Queuemembers, der jetzt nicht mehr telefoniert, bei "in use". Dieser status bleibt so lange, bis der weitergeleitet anruf beendet ist.

Vielleicht noch einfacher.

Tel 1 ruft QueueMember an.
Queue Member nimmt Anruf von Tel1 entgegen.
Verbindung zwischen Queuemember und Tel1.
Queuemember leitet Anruf von Tel 1 an Tel 2 weiter.
Verbindung zwischen Tel 1 und Tel 2 besteht.

Der Queuemember kann weiterhin anrufe tätigen. Er kann nur nicht durch die Queue angerufen werden.


Hier die Ausgabe von ASterisk nachdem der weitergeleitet Anruf beendet wird

Code:
[Jan 19 18:50:18] NOTICE[6547]: chan_lcr.c:1105 lcr_in_pattern: [call=15255 ast=lcr/10577] Incomming pattern indication from LCR.
[Jan 19 18:50:18] NOTICE[6547]: chan_lcr.c:1560 queue_send: [call=15255 ast=lcr/10577] Sending queued PROGRESS to Asterisk.
[Jan 19 18:50:18] NOTICE[6547]: chan_lcr.c:961 lcr_in_disconnect: [call=15255 ast=lcr/10577] Incomming disconnect from LCR. (cause=16)
[Jan 19 18:50:18] NOTICE[6547]: chan_lcr.c:351 send_message: [call=NULL ast=NULL] Sending MESSAGE_BCHANNEL to socket.
[Jan 19 18:50:18] NOTICE[6547]: chan_lcr.c:351 send_message: [call=NULL ast=NULL] Sending MESSAGE_RELEASE to socket.
[Jan 19 18:50:18] NOTICE[6547]: chan_lcr.c:1577 queue_send: [call=0 ast=lcr/10577] Sending queued HANGUP to Asterisk.
[Jan 19 18:50:18] ERROR[16417]: chan_lcr.c:2277 lcr_indicate: [call=15256 ast=lcr/10578] Received indicate from Asterisk with unknown condition 20.
[Jan 19 18:50:18] NOTICE[16417]: chan_lcr.c:2038 lcr_hangup: [call=15256 ast=lcr/10578] Received hangup from Asterisk thread.
[Jan 19 18:50:18] NOTICE[16417]: chan_lcr.c:2047 lcr_hangup: [call=15256 ast=lcr/10578] Releasing ref and freeing call instance.
[Jan 19 18:50:18] NOTICE[16417]: chan_lcr.c:351 send_message: [call=NULL ast=NULL] Sending MESSAGE_BCHANNEL to socket.
[Jan 19 18:50:18] NOTICE[16417]: chan_lcr.c:351 send_message: [call=NULL ast=NULL] Sending MESSAGE_RELEASE to socket.
[Jan 19 18:50:18] NOTICE[16417]: chan_lcr.c:290 free_call: [call=15256 ast=NULL] Call instance freed.
  == Spawn extension (indiwarteschlange, s, 5) exited non-zero on 'lcr/10577'
[Jan 19 18:50:18] NOTICE[16413]: chan_lcr.c:2038 lcr_hangup: [call=0 ast=lcr/10577] Received hangup from Asterisk thread.
[Jan 19 18:50:18] NOTICE[16413]: chan_lcr.c:2061 lcr_hangup: [call=0 ast=lcr/10577] Freeing call instance, because we have no ref AND we are requesting no ref.
[Jan 19 18:50:18] NOTICE[16413]: chan_lcr.c:290 free_call: [call=0 ast=NULL] Call instance freed.
  == Spawn extension (nach-extern, 9030293631916, 4) exited non-zero on 'Local/613@agents-f4a6;2'
[Jan 19 18:50:18] NOTICE[6547]: chan_lcr.c:1227 receive_message: [call=NULL ast=NULL] Received BCHANNEL_REMOVE message. (handle=0000001d)
[Jan 19 18:50:18] NOTICE[6547]: chan_lcr.c:351 send_message: [call=NULL ast=NULL] Sending MESSAGE_BCHANNEL to socket.
[Jan 19 18:50:18] NOTICE[6547]: bchannel.c:359 bchannel_receive: [call=NULL ast=NULL] ignoring data, because no call associated with bchannel
[Jan 19 18:50:18] NOTICE[6547]: bchannel.c:359 bchannel_receive: [call=NULL ast=NULL] ignoring data, because no call associated with bchannel
[Jan 19 18:50:19] NOTICE[6547]: chan_lcr.c:1227 receive_message: [call=NULL ast=NULL] Received BCHANNEL_REMOVE message. (handle=0000001c)
[Jan 19 18:50:19] NOTICE[6547]: chan_lcr.c:351 send_message: [call=NULL ast=NULL] Sending MESSAGE_BCHANNEL to socket.


Queuemember sind Dynamisch. Soll heißen, dass nicht immer der gleiche Sip Account sich an der Queue anmeldet.

Habe mir schon die Doku von LCR angesehen, gegoogelt wie verrückt. Bei issues.asterisk.org nachgesehen. Ohne erfolg.

Habt ihr ne Idee?

Danke für eure Hilfe. Bei Fragen einfach Fragen.

Hier die .conf Dateien:

auszüge Extensions.conf

Code:
[macro-setze-callerid]
;# Setzt die korrekte CalerID für abgehende Anrufe
;# Keine Parameter

exten => s,1,Set(NUMMER=${CALLERID(num)})
exten => s,n,Noop(${NUMMER})
exten => s,n,GotoIf($[ "${CALLERID(num)}" = "${RESERVIERUNG_ANDREA:4}" ]?reservierung:test1)
exten => s,n(test1),GotoIf($[ "${CALLERID(num)}" = "${RESERVIERUNG_ANITA:4}" ]?reservierung:test2)
exten => s,n(test2),GotoIf($[ "${CALLERID(num)}" = "${RESERVIERUNG_ANNIKA:4}" ]?reservierung:test3)
exten => s,n(test3),GotoIf($[ "${CALLERID(num)}" = "${RESERVIERUNG_STEFFI:4}" ]?reservierung:test4)
exten => s,n(test4),GotoIf($[ "${CALLERID(num)}" = "${RESERVIERUNG_VARIABEL:4}" ]?reservierung:test5)
exten => s,n(test5),GotoIf($[ "${CALLERID(num)}" = "${RESERVIERUNG_YVONNE:4}" ]?reservierung:test6)

exten => s,n(test6),GotoIf($[ "${CALLERID(num)}" = "6" ]?fax_control:test7)
exten => s,n(test7),GotoIf($[ "${CALLERID(num)}" = "5" ]?fax_market:test8)
exten => s,n(test8),GotoIf($[ "${CALLERID(num)}" = "4" ]?fax_leitung:test9)
exten => s,n(test9),GotoIf($[ "${CALLERID(num)}" = "3" ]?fax_zentral:test10)
exten => s,n(test10),GotoIf($[ "${CALLERID(num)}" = "2" ]?fax_reserv:test12)

exten => s,n(test11),GotoIf($[ "${CALLERID(num)}" = "321" ]?reservierung:test12)
exten => s,n(test12),GotoIf($[ "${CALLERID(num)}" = "322" ]?reservierung:test13)
exten => s,n(test13),GotoIf($[ "${CALLERID(num)}" = "323" ]?reservierung:test14)
exten => s,n(test14),GotoIf($[ "${CALLERID(num)}" = "324" ]?reservierung:test15)
exten => s,n(test15),GotoIf($[ "${CALLERID(num)}" = "325" ]?reservierung:test16)
exten => s,n(test16),GotoIf($[ "${CALLERID(num)}" = "326" ]?reservierung:test17)
exten => s,n(test17),GotoIf($[ "${CALLERID(num)}" = "327" ]?reservierung:test18)
exten => s,n(test18),GotoIf($[ "${CALLERID(num)}" = "328" ]?reservierung:test19)
exten => s,n(test19),GotoIf($[ "${CALLERID(num)}" = "329" ]?reservierung:test20)
exten => s,n(test20),GotoIf($[ "${CALLERID(num)}" = "331" ]?reservierung:test21)
exten => s,n(test21),GotoIf($[ "${CALLERID(num)}" = "320" ]?reservierung:test22)
exten => s,n(test22),GotoIf($[ "${CALLERID(num)}" = "332" ]?reservierung:test23)
exten => s,n(test23),GotoIf($[ "${CALLERID(num)}" = "333" ]?reservierung:test24)
exten => s,n(test24),GotoIf($[ "${CALLERID(num)}" = "334" ]?reservierung:ende)



exten => s,n(reservierung),Set(CALLERID(num)=${SERVICECENTER})
exten => s,n,Goto(ende)

exten => s,n(fax_control),Set(CALLERID(num)=${FAX_CONTROLLING_EXT})
exten => s,n,Goto(ende)

exten => s,n(fax_market),Set(CALLERID(num)=${FAX_MARKETING_EXT})
exten => s,n,Goto(ende)

exten => s,n(fax_leitung),Set(CALLERID(num)=${FAX_LEITUNG_EXT})
exten => s,n,Goto(ende)

exten => s,n(fax_zentral),Set(CALLERID(num)=${FAX_ZENTRALFAX_EXT})
exten => s,n,Goto(ende)

exten => s,n(fax_reserv),Set(CALLERID(num)=${FAX_RESERVIERUNG_EXT})
exten => s,n,Goto(ende)

exten => s,n(ende),NoOp(${CALLERID(num)})
exten => s,n,NoOp(${LEN(${CALLERID(num)})} **LAENGE)
exten => s,n,Set(CALLERID(num)=${IF($[${LEN(${CALLERID(num)})} > 3]?${CALLERID(num)}:${PMX_NUMMER}${CALLERID(num)})})


Auszüge extensions.ael

Code:
context servicecenter_submenu {

    includes {
        queues-loginout;
    }



    0 => goto play_english|s|1;
    1 => goto keyaccount|s|1;
    2 => goto indiwarteschlange|s|1;

    s => {
            Ringing();
            Wait(1);
            Set(attempts=0);
            Answer();
            Wait(1);
            Set(CHANNEL(language)=de);
            Background(custom/begruessung);
            WaitExten(5);
            goto indiwarteschlange|s|1;
            Hangup();
    }
}



context play_english {

    1 =>        goto keyaccount|s|1;
    2 =>        goto indiwarteschlange|s|1;

    s =>        {
                Set(CHANNEL(language)=en);
                Background(custom/en/begruessung);
                WaitExten(5);
                goto indiwarteschlange|s|1;
                Hangup();
        }
}


context keyaccount {
    s =>        {
                Ringing();
                Set(CALLERID(name)=Group ${CALLERID(name)});
                Set(CDR(accountcode)=keyaccount-in);
                SetMusicOnHold(servicecentergruppe);
                Noop(${CHANNEL(language)});
                Queue(keyaccount,t,,,30);
                goto gruppenwarteschlange|s|1;
                Hangup();
        }
}

context indiwarteschlange {
    s =>        {
                Ringing();
                Set(CDR(accountcode)=indi-in);
                Set(CALLERID(name)=Indi ${CALLERID(name)});
                SetMusicOnHold(servicecenterindi);
                Queue(indiwarteschlange,t,,,180);
                Macro (weiterleiten-nach-zeit-indi);
                Hangup();
        }
}

context gruppenwarteschlange {
    s =>        {
                Ringing();
                Set(CALLERID(name)=Gruppenwarteschlange);
                Set(CDR(accountcode)=gruppen-in);
                Queue(gruppenwarteschlange,t,,,30);
                Macro (weiterleiten-nach-zeit-indi);
                Hangup();
        }
}


context queues-loginout
{
    802 => {
            Answer();
            Read(AGENT_NUMBER,agent-user);
            VMAuthenticate(${AGENT_NUMBER}@default,s);
            Set(queue-announce-success=1);
            Set(DB(AGENT/${CALLERID(num)})=);
            Set(DB(PHONE/${AGENT_NUMBER})=);
            Set(DB(AGENT/${CALLERID(num)})=${AGENT_NUMBER});
            Set(DB(PHONE/${AGENT_NUMBER})=${CALLERID(num)});
            goto queues-manip,I${AGENT_NUMBER},1;
            }

    803 => {
            Answer();
            Read(AGENT_NUMBER,agent-user);
            Set(queue-announce-success=1);
            Set(DB(AGENT/${CALLERID(num)})=);
            Set(DB(PHONE/${AGENT_NUMBER})=);
            goto queues-manip,O${AGENT_NUMBER},1;
            }
    804 => {
            Answer();
            Set(AGENT_NUMMER=${DB(AGENT/${CALLERID(num)})});
            Noop(${AGENT_NUMMER});
            Playback(vm-youhave);
            SayDigits(${AGENT_NUMMER});
            }

}

context queues-manip {
        _[IO]511 => {
            &queue-addremove(${EXTEN},gruppenwarteschlange,10);
                &queue-addremove(${EXTEN},keyaccount,10);
            &queue-success(${EXTEN});
            }
        _[IO]512 => {
            &queue-addremove(${EXTEN},gruppenwarteschlange,10);
                &queue-addremove(${EXTEN},keyaccount,10);
            &queue-success(${EXTEN});
            }
        _[IO]513 => {
            &queue-addremove(${EXTEN},gruppenwarteschlange,10);
                &queue-addremove(${EXTEN},keyaccount,10);
            &queue-success(${EXTEN});
            }
.....

macro queue-success(extension)
{
    if( ${queue-announce-success} > 0 )
    {
        switch(${extension:0:1})
        {
            case I:
                Playback(agent-loginok);
                Hangup();
            case O:
                Playback(agent-loggedoff);
                Hangup();
        }
    }
}

macro queue-addremove(extension,queuename,penalty)
{
    switch(${extension:0:1})
    {
        case I:
            {
                AddQueueMember(${queuename},Local/${extension:1}@agents/n,${penalty});
                return;
            }
        case O:
            {
                RemoveQueueMember(${queuename},Local/${extension:1}@agents/n);
                return;
            }
        default:
            {
                Playback(invalid);
            }
    }
}

context agents {
//Gruppenwarteschlange Agenten
    511 => &callagent(${DB(PHONE/${EXTEN})},SIP/${DB(PHONE/${EXTEN})});
    512 => &callagent(${DB(PHONE/${EXTEN})},SIP/${DB(PHONE/${EXTEN})});
    513 => &callagent(${DB(PHONE/${EXTEN})},SIP/${DB(PHONE/${EXTEN})});
    514 => &callagent(${DB(PHONE/${EXTEN})},SIP/${DB(PHONE/${EXTEN})});
    515 => &callagent(${DB(PHONE/${EXTEN})},SIP/${DB(PHONE/${EXTEN})});
    516 => &callagent(${DB(PHONE/${EXTEN})},SIP/${DB(PHONE/${EXTEN})});
    517 => &callagent(${DB(PHONE/${EXTEN})},SIP/${DB(PHONE/${EXTEN})});
....

macro callagent(extension,device) {
    if( ${GROUP_COUNT(Local/${extension}@agents)} = 0 )
    {
        Noop(${MACRO_EXTEN});
        Set(OUTBOUND_GROUP=${MACRO_EXTEN}@agents);
        Dial(${device},15,tT);
        switch(${DIALSTATUS})
        {
            case BUSY:
                Busy();
                break;
            case NOANSWER:
                Set(queue-announce-success=0);
                goto queue-manip|O${MACRO_EXTEN}|1;
                break;
            default:
                Hangup();
                break;
        }
    }
    else
    {
        Busy();
    }
}

LCR interfaces.conf


Code:
# interface.conf
################

# Add your interfaces here:


[ISDN_NT]
portnum 1
nt
portnum 2
nt
portnum 3
nt
portnum 4
nt

[ISDN_TE]
portnum 0



LCR Options.conf
Code:
log /usr/local/lcr/log
alaw
#schedule 0
#tones_dir tones_american
national 0
international 00
#keypad
#dummyid 0
#email [email protected]
lock /var/run
#socketrights 0700
#gsm

LCR Routing.conf

Code:
[main]
  : remote application=asterisk context=pmx-in

queues.conf
Code:
[general]
persistentmembers = yes
autofill = yes
monitor-type = MixMonitor

[keyaccount]
musiconhold = servicecenterkey
strategy = leastrecent
timeout = 15
retry = 0
reportholdtime = no
wrapuptime = 1
maxlen = 10
announce-frequency = 0
announce-holdtime = no
joinempty=strict
timeoutrestart = yes
memberdelay = 0
context=keyaccount

[gruppenwarteschlange]
musiconhold = servicecentergruppe
strategy = leastrecent
timeout = 15
retry = 0
reportholdtime = no
ringinuse = no
wrapuptime = 0
maxlen = 10
weight = 2
announce-frequency = 0
announce-holdtime = no
joinempty=strict
timeoutrestart = yes
memberdelay = 0
context=gruppenwarteschlange

[indiwarteschlange]
musiconhold = servicecenterindi
strategy = leastrecent
timeout = 15
retry = 0
reportholdtime = no
wrapuptime = 0
maxlen = 10
weight = 1
ringinuse = no
announce-frequency = 0
announce-holdtime = no
joinempty=strict
timeoutrestart = yes
memberdelay = 0
context=indiwarteschlange
 
Zuletzt bearbeitet:
Hi,

haben dafür eine Lösung gefunden.
Man braucht in der AddQueueMember Funktion die Variable "stateinterface"

AddQueueMember(queuename[,interface[,penalty[,options[,membername[,stateinterface]]]]]))

AddQueueMember(${queuename},Local/${extension:1}@agents/n,${penalty},,,SIP/${CALLERID(num)});

Dann erkent die app_queue den Status korrekt. Gerade erfolgreich getestet.
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.