Das Ausführen einer Sternchen-Shell bei einem eingehenden Anruf fühlt sich für mich einfach nicht richtig an. Es funktioniert wahrscheinlich in Ordnung, aber sollte der Status eines Peers Asterisk nicht bereits bekannt sein?
Ich benutze die Funktion, SIPPEER()
mit der Sie den Status eines Peers abfragen können. Wenn die ersten 3 Zeichen (von OK (44 ms)
) sind OK
, können Sie den Peer anrufen. Alle anderen Situationen können Sie an einen anderen Peer weiterleiten.
Ich mache so etwas:
exten => _202,1,Log(NOTICE,Dial Status of ${EXTEN}: ${SIPPEER(${EXTEN},status)})
exten => _202,n,GotoIf($["${SIPPEER(${EXTEN},status):0:3}"="OK "]?ok1:forward)
exten => _202,n(ok1),Log(NOTICE,Calling number is available)
exten => _202,n,Dial(SIP/${EXTEN},50,wW)
exten => _202,n,Hangup()
exten => _202,n(forward),Log(NOTICE,Calling forward number)
exten => _202,n,Dial(SIP/201,50,wW)
exten => _202,n,Hangup()
Dies überprüft den Status, bevor wir zu gehen Dial()
und geht zu, n(forward)
wenn der Peer nicht verfügbar, beschäftigt oder anderweitig nicht OK ist.
Es gibt jedoch ein kleines Problem damit. Wenn der Peer den Anruf ablehnt (oder aus einem anderen Grund nicht erreichbar ist, z. B. er vor unserem nächsten Online-Check online gegangen ist), kommt der Anruf nicht durch.
Es gibt eine Funktion, mit der DIALSTATUS
wir nach dem Dial()
überprüfen können, ob der Anruf erfolgreich beantwortet wurde. Verwenden Sie dies also nach dem Dial()
und wenn es nicht beantwortet wird, führen Sie auch die Weiterleitung durch. (Es hat in einem von mir durchgeführten Test funktioniert. Das Ablehnen des Anrufs wurde BUSY
im Protokoll vermerkt und ging zum nächsten Peer.)
Sie erhalten so etwas:
exten => _202,1,Log(NOTICE,Dial Status of ${EXTEN}: ${SIPPEER(${EXTEN},status)})
exten => _202,n,GotoIf($["${SIPPEER(${EXTEN},status):0:3}"="OK "]?ok1:forward)
exten => _202,n(ok1),Log(NOTICE,Calling number is available)
exten => _202,n,Dial(SIP/${EXTEN},50,wW)
exten => _202,n,Log(NOTICE,Dial status: ${DIALSTATUS})
exten => _202,n,GotoIf($["${DIALSTATUS)}"="ANSWER"]?ok2:forward)
exten => _202,n(ok2),Log(NOTICE,Successfull call)
exten => _202,n,Hangup()
exten => _202,n(forward),Log(NOTICE,Calling forward number)
exten => _202,n,Dial(SIP/201,50,wW)
exten => _202,n,Hangup()
Ich habe dieses letzte Bit (mit DIALSTATUS
) nicht ausgiebig getestet, deshalb solltest du einen Test machen, aber hier scheint es zu funktionieren.