fehlendes Besetzt-Signal vom Umleitungsziel

  • Ersteller Ersteller anhalter42
  • Erstellt am Erstellt am
A

anhalter42

Guest
Hallo Leute,

habe ein Problem bei folgendem Szenario:
  • bei unserem * (1.2.14. Bristuffed 0.3.0-1x) leitet Teilnehmer (Snom-Telefon) alle Anrufe auf Teilnehmer 2 um.
  • Teilnehmer zwei ist im Gespräch.
  • Teilnehmer 1 wird von außen angerufen.
Ich erwarte, dass der Anrufende das Besetzt-Signal erhält. Was er aber hört, ist dreimal kurz "Piep" und dann ist Stille. Ohne Umleitung kommt das Besetzt-Signal ganz wie erwartet.

Das CLI sagt mir, dass in oben beschriebenen Szenario der Zap- und der SIP-Kanal zu Teilnehmer 1 zusammengeschaltet wurden und das Telefon von Teilnehmer 1 dann einen Local-Kanal zum Umleitungsziel, also Teilnehmer 2, öffnet. Dieser Local-Kanal meldet ordentlich "BUSY" zurück, aber (jetzt kommts!) dieses wird nicht in den SIP-Kanal übernommen.

Kann das jemand reproduzieren? Bzw. tritt dies auch noch mit 1.2.17 (Bristuffed 0.3.0-1y-d) auf oder muss der große Schritt zu 1.4 gemacht werden?

Danke!

EDIT: habe auf Bitte von magic911 noch die entspechenden Abschnitte der extensions.conf hineingetan:
Code:
[system-msgs]
exten => 0-NOANSWER,1,Set(LANGUAGE()=de)
exten => 0-NOANSWER,n,Playback(invalid)
exten => 0-NOANSWER,n,Hangup

exten => 0-BUSY,1,Set(LANGUAGE()=de)
exten => 0-BUSY,2,Answer
exten => 0-BUSY,3,Busy
exten => 0-BUSY,4,Hangup

exten => 0-CONGESTION,1,Goto(0-NOANSWER,1)

exten => _s.,1,Goto(0-NOANSWER,1)

[macro-stdexten];
;
; Standard extension macro:
;   ${ARG1} - Extension  (we could have used ${MACRO_EXTEN} here as well
;   ${ARG2} - Device(s) to ring
;
exten => s,1,NoOp(${ALERT_INFO})
exten => s,2,Dial(${ARG2},${RINGTIME},M(record^${ARG1}))				; Ring the interface, 20 seconds maximum
exten => s,3,Goto(s-${DIALSTATUS},1)				; Jump based on status (NOANSWER,BUSY,CHANUNAVAIL,CONGESTION,ANSWER)

exten => s-NOANSWER,1,NoOP,"Durchwahl: ",${INTERNAL}
exten => s-NOANSWER,2,GotoIf($["${INTERNAL}" = "yes"]?5)   ; fuer interne Anrufe gibt es keine Mailbox
exten => s-NOANSWER,3,Macro(record,${ARG3})		; If unavailable, send to voicemail w/ unavail announce
exten => s-NOANSWER,4,Voicemail(u${ARG3})		; If unavailable, send to voicemail w/ unavail announce
exten => s-NOANSWER,5,Goto(h,1)			; If they press #, return to start

exten => s-BUSY,1,NoOP,"Durchwahl: ",${INTERNAL}
exten => s-BUSY,2,Goto(5)   
;exten => s-BUSY,2,GotoIf($["${INTERNAL}" = "yes"]?5)   ; fuer interne Anrufe gibt es keine Mailbox
exten => s-BUSY,3,Macro(record,${ARG3})		; If unavailable, send to voicemail w/ unavail announce
exten => s-BUSY,4,Voicemail(b${ARG3})			; If busy, send to voicemail w/ busy announce
exten => s-BUSY,5,Answer
exten => s-BUSY,6,Set(LANGUAGE()=de)
exten => s-BUSY,7,Busy
exten => s-BUSY,8,Hangup(${HANGUPCAUSE})

exten => _s-.,1,Goto(h,1)				; Treat anything else as no answer
exten => s-CHANUNAVAIL,1,Goto(s-NOANSWER,1)				; Treat anything else as no answer
exten => s-CONGESTION,1,Goto(s-NOANSWER,1)				; Treat anything else as no answer

exten => a,1,VoicemailMain(${ARG3})				; If they press *, send the user into VoicemailMain

;gegebnenfalls eine eMail verschicken
exten => h,1,GotoIf($["${VMSTATUS}" != "FAILED"]?3)
exten => h,2,DeadAGI(sendmail.agi)
exten => h,3,GotoIf($["${DIALSTATUS}" != "BUSY"]?5)
exten => h,4,DeadAGI(sendmail.agi)
exten => h,5,NoOp(${VMSTATUS}|${DIALSTATUS})
exten => h,6,HangUp

Der Vollständigkeit halber hier auch noch der Mitschnitt des CLI. Teilnehmer 25 hat auf 24 umgeleitet. 24 war besetzt, der externe Anrufer hatte aber kein Besetzt-Zeichen.

Code:
-- Accepting overlap voice call from '0160XXXXXXXX' to 'YYYYYY25' on channel 0/1, span 2
    -- Starting simple switch on 'Zap/4-1'
    -- Executing Set("Zap/4-1", "__ALERT_INFO=http://192.168.1.51/sounds/Durchwahl.wav") in new stack
    -- Executing Set("Zap/4-1", "__VOICEMAIL=25") in new stack
    -- Executing Set("Zap/4-1", "__RINGTIME=20") in new stack
    -- Executing Set("Zap/4-1", "__CALLED=25") in new stack
    -- Executing Set("Zap/4-1", "__INTERNAL=NO") in new stack
    -- Executing Macro("Zap/4-1", "dispatch|25|25") in new stack
    -- Executing Set("Zap/4-1", "LANGUAGE()=de") in new stack
    -- Executing GotoIf("Zap/4-1", "0?4") in new stack
    -- Executing Set("Zap/4-1", "CALLERID(number)=00160XXXXXXXX") in new stack
    -- Executing Macro("Zap/4-1", "stdexten|25|SIP/25|25") in new stack
    -- Executing NoOp("Zap/4-1", "http://192.168.1.51/sounds/Durchwahl.wav") in new stack
    -- Executing Dial("Zap/4-1", "SIP/25|20|M(record^25)") in new stack
    -- Called 25CLI>
    -- Got SIP response 302 "Moved Temporarily" back from 192.168.1.130
    -- Now forwarding Zap/4-1 to 'Local/24@from-intern' (thanks to SIP/25-081c9430)
    -- Executing Set("Local/24@from-intern-f3f5,2", "__ORIG_CALLED=25") in new stack
    -- Executing Set("Local/24@from-intern-f3f5,2", "__CALLED=24") in new stack
    -- Executing Set("Local/24@from-intern-f3f5,2", "__INTERNAL=yes") in new stack
    -- Executing Set("Local/24@from-intern-f3f5,2", "__VOICEMAIL=24") in new stack
    -- Executing GotoIf("Local/24@from-intern-f3f5,2", "1?101") in new stack
    -- Goto (from-intern,24,101)
    -- Executing Set("Local/24@from-intern-f3f5,2", "__ALERT_INFO=http://192.168.1.51/sounds/Durchwahl.wav") in new stack
    -- Executing AGI("Local/24@from-intern-f3f5,2", "sendmail.agi|25|Verpasster Anruf|Der Anrufer mit der Rufnummer XXXXX wurde an die Rufnummer 24 weitergeleitet.|0160XXXXXXXX") in new stack
    -- Launched AGI Script /var/lib/asterisk/agi-bin/sendmail.agi
    -- AGI Script sendmail.agi completed, returning 0
    -- Executing Set("Local/24@from-intern-f3f5,2", "CALLERID(number)=0160XXXXXXXX") in new stack
    -- Executing Set("Local/24@from-intern-f3f5,2", "__RINGTIME=19") in new stack
    -- Executing Set("Local/24@from-intern-f3f5,2", "__INTERNAL=NO") in new stack
    -- Executing Macro("Local/24@from-intern-f3f5,2", "dispatch|24|24") in new stack
    -- Executing Set("Local/24@from-intern-f3f5,2", "LANGUAGE()=de") in new stack
    -- Executing GotoIf("Local/24@from-intern-f3f5,2", "0?4") in new stack
    -- Executing Set("Local/24@from-intern-f3f5,2", "CALLERID(number)=00160XXXXXXXX") in new stack
    -- Executing Macro("Local/24@from-intern-f3f5,2", "stdexten|24|SIP/24|24") in new stack
    -- Executing NoOp("Local/24@from-intern-f3f5,2", "http://192.168.1.51/sounds/Durchwahl.wav") in new stack
    -- Executing Dial("Local/24@from-intern-f3f5,2", "SIP/24|19|M(record^24)") in new stack
    -- Called 24CLI>
    -- Got SIP response 486 "Busy Here" back from 192.168.1.143
    -- SIP/24-081d4990 is busy
  == Everyone is busy/congested at this time (1:1/0/0)
    -- Executing Goto("Local/24@from-intern-f3f5,2", "s-BUSY|1") in new stack
    -- Goto (macro-stdexten,s-BUSY,1)
    -- Executing NoOp("Local/24@from-intern-f3f5,2", ""Durchwahl: ",NO") in new stack
    -- Executing Goto("Local/24@from-intern-f3f5,2", "5") in new stack
    -- Goto (macro-stdexten,s-BUSY,5)
    -- Executing Answer("Local/24@from-intern-f3f5,2", "") in new stack
    -- Local/24@from-intern-f3f5,1 answered Zap/4-1
    -- Executing Set("Local/24@from-intern-f3f5,2", "LANGUAGE()=de") in new stack
    -- Executing Busy("Local/24@from-intern-f3f5,2", "") in new stack
    -- Executing GotoIf("Local/24@from-intern-f3f5,1", "1?7") in new stack
    -- Goto (macro-record,s,7)
    -- Executing NoOp("Local/24@from-intern-f3f5,1", "EndRecord") in new stack
  == Spawn extension (macro-stdexten, s-BUSY, 7) exited non-zero on 'Local/24@from-intern-f3f5,2' in macro 'stdexten'
  == Spawn extension (macro-stdexten, s-BUSY, 7) exited non-zero on 'Local/24@from-intern-f3f5,2' in macro 'dispatch'
  == Spawn extension (macro-stdexten, s-BUSY, 7) exited non-zero on 'Local/24@from-intern-f3f5,2'
    -- Executing GotoIf("Local/24@from-intern-f3f5,2", "1?3") in new stack
    -- Goto (macro-stdexten,h,3)
    -- Executing GotoIf("Local/24@from-intern-f3f5,2", "0?5") in new stack
    -- Executing DeadAGI("Local/24@from-intern-f3f5,2", "sendmail.agi") in new stack
  == Spawn extension (macro-stdexten, s, 2) exited non-zero on 'Zap/4-1' in macro 'stdexten'
    -- Launched AGI Script /var/lib/asterisk/agi-bin/sendmail.agi
  == Spawn extension (macro-stdexten, s, 2) exited non-zero on 'Zap/4-1' in macro 'dispatch'
  == Spawn extension (macro-stdexten, s, 2) exited non-zero on 'Zap/4-1'
    -- Executing GotoIf("Zap/4-1", "1?3") in new stack
    -- Goto (macro-stdexten,h,3)
    -- Executing GotoIf("Zap/4-1", "1?5") in new stack
    -- Goto (macro-stdexten,h,5)
    -- Executing NoOp("Zap/4-1", "|ANSWER") in new stack
    -- Executing Hangup("Zap/4-1", "") in new stack
  == Spawn extension (macro-stdexten, h, 6) exited non-zero on 'Zap/4-1'
    -- Hungup 'Zap/4-1'
    -- AGI Script sendmail.agi completed, returning 0
    -- Executing NoOp("Local/24@from-intern-f3f5,2", "|BUSY") in new stack
    -- Executing Hangup("Local/24@from-intern-f3f5,2", "") in new stack
  == Spawn extension (macro-stdexten, h, 6) exited non-zero on 'Local/24@from-intern-f3f5,2'
server-asterisk*CLI>
 
Zuletzt bearbeitet von einem Moderator:
Poste mal den entsprechenden Abschnitt der extensions.conf

Kann durchaus hilfreich sein.

Gruß Magic911
 
Hmmm... ist das so, wie ich es beschrieb, nicht nachvollziehbar? Oder doch?

Eventuell hat ja das Einfügen des CLI-Mitschnitts abgeschreckt. Meines Erachtens passiert das Spannende weit unten, bei der Beendigung des Gesprächs:

Code:
   (...........)
    -- Executing Dial("Local/24@from-intern-f3f5,2", "SIP/24|19|M(record^24)") in new stack
    -- Called 24
    -- Got SIP response 486 "Busy Here" back from 192.168.1.143
    -- SIP/24-081d4990 is busy
  == Everyone is busy/congested at this time (1:1/0/0)
    -- Executing Goto("Local/24@from-intern-f3f5,2", "s-BUSY|1") in new stack
    -- Goto (macro-stdexten,s-BUSY,1)
    -- Executing Goto("Local/24@from-intern-f3f5,2", "5") in new stack
    -- Goto (macro-stdexten,s-BUSY,5)
    -- Executing Answer("Local/24@from-intern-f3f5,2", "") in new stack
    -- Local/24@from-intern-f3f5,1 answered Zap/4-1
    -- Executing Busy("Local/24@from-intern-f3f5,2", "") in new stack
  == Spawn extension (macro-stdexten, s-BUSY, 7) exited non-zero on 'Local/24@from-intern-f3f5,2' in macro 'stdexten'
  == Spawn extension (macro-stdexten, s-BUSY, 7) exited non-zero on 'Local/24@from-intern-f3f5,2' in macro 'dispatch'
  == Spawn extension (macro-stdexten, s-BUSY, 7) exited non-zero on 'Local/24@from-intern-f3f5,2'
    -- Executing GotoIf("Local/24@from-intern-f3f5,2", "1?3") in new stack
  (...........)
  == Spawn extension (macro-stdexten, s, 2) exited non-zero on 'Zap/4-1' in macro 'stdexten'
  == Spawn extension (macro-stdexten, s, 2) exited non-zero on 'Zap/4-1' in macro 'dispatch'
  == Spawn extension (macro-stdexten, s, 2) exited non-zero on 'Zap/4-1'
    -- Executing GotoIf("Zap/4-1", "1?3") in new stack
    -- Goto (macro-stdexten,h,3)
    -- Executing GotoIf("Zap/4-1", "1?5") in new stack
    -- Goto (macro-stdexten,h,5)
    -- Executing NoOp("Zap/4-1", "|ANSWER") in new stack
   (...........)
  == Spawn extension (macro-stdexten, h, 6) exited non-zero on 'Zap/4-1'
    -- Hungup 'Zap/4-1'
  (...........)
    -- Executing NoOp("Local/24@from-intern-f3f5,2", "|BUSY") in new stack
    -- Executing Hangup("Local/24@from-intern-f3f5,2", "") in new stack
  == Spawn extension (macro-stdexten, h, 6) exited non-zero on 'Local/24@from-intern-f3f5,2'
server-asterisk*CLI>

Wie zu sehen ist, meldet der Local-Kanal ein BUSY als DIALSTATUS, aber der Zap-Kanal besteht auf dem Status ANSWER. Die "Kopplung" eines SIP-Kanals mit einem Zap-Kanal klappt jedoch problemlos.

Danke für Eure Mühen!
 
[ERLEDIGT] fehlendes Besetzt-Signal vom Umleitungsziel

Offenbar scheint das für niemand anders ein Problem zu sein (ist in drei Minuten mit zwei Snom-Telefonen und einem Handy getestet). Ich habe mir versichern lassen, dass Asterisk 1.4 mit mISDN dieses Problem nicht mehr hat. Für die anderen:

Ich habe die Umleitungsfunktionalität von Snom weggenommen und auf den Asterisk verlagert. Ab FW 7.1.30 (definitiv nicht drunter!) kann verlässlich im Webinterface des Telefons ein "Umleitung-an-Code" und ein "Umleitung-aus-Code" hinterlegt werden. Diese Codes werden in der extensions.conf verarbeitet. In ersterem Fall setzen sie eine Variable in der AstDB, im letzteren Fall löschen sie sie wieder.
Code:
exten => _*21*.,1,NoOP("set ${CALLERID(num)} = ${EXTEN:4}")
exten => _*21*.,n,Set(DB(CFW/${CALLERID(num)})=${EXTEN:4})
exten => _*21*.,n,Hangup()

exten => *21*,1,NoOP("delete ${CALLERID(num)}")
exten => *21*,n,DBdel(CFW/${CALLERID(num)})
exten => *21*,n,Hangup()
An einer anderen Stelle in der extensions.conf, kurz vor dem eigentlichen Wählen, wird dann in der AstDB nachgesehen, wohin denn umgeleitet wurde. Erst das Ende der "Kette" wird von Asterisk angewählt (intern SIP, extern Zap). Dabei habe ich mir zu Nutze gemacht, dass das Ganze ja ohne Umleitung solide funktioniert. Die Länge der "Kette" habe ich al gusto auf 5 Glieder beschränkt. Der Code stellt ein eigenes Makro dar. Es erwartet die Zielnummer unter als ARG1 und schreibt die schließlich zu wählende nach FINAL_EXT.

Code:
exten => s,1,Set(FINAL_EXT=${ARG1})
exten => s,n,NoOP(${DB_EXISTS(CFW/${FINAL_EXT})})
exten => s,n,Set(i=1)
exten => s,n,While($[${i} < 6])

exten => s,n,GotoIf($[${DB_EXISTS(CFW/${FINAL_EXT})} = 0]?EndOfChain)
exten => s,n,Set(FINAL_EXT=${DB(CFW/${FINAL_EXT})})
exten => s,n,GotoIf($[${FINAL_EXT} = ""]?EndOfChain)
exten => s,n,Set(i=$[${i} + 1])
exten => s,n,EndWhile()
exten => s,n,NoOp("Call forwarding chain is too long (${i})")

;exten => s,n,DeadAGI(sendmail.agi|${ARG1}|Verpasster Anruf|Text ,usw usf. wg. weitergeleitetem Anruf|${FINAL_EXT}

Das Ganze kann und sollte dann noch verfeinert werden: keine Loops in den Umleitungsketten zuzulassen usw. usf.

Happy Frickling.
 
Kostenlos!

Statistik des Forums

Themen
248,907
Beiträge
2,303,654
Mitglieder
378,541
Neuestes Mitglied
telefonieverzweiflung