Nachtschaltung & Asterisk

baschdieh

Mitglied
Mitglied seit
15 Sep 2005
Beiträge
416
Punkte für Reaktionen
0
Punkte
0
Hallo,

habe hier ein sehr extremes Problem mit der Programmierung meiner Nachtschaltung. Folgendes Scenario:

Ein Snom 360 Telefon hat via Funktionstaste ein Weiterleitungsziel zur Aktivierung der "Nachtschaltung". Sobald dies ausgefuehrt wird, werden die Anrufe der Zentrale auf die Nebenstelle "5555" geleitet. An dieser "5555" gibts eine GoToIfTime Schleife, die dann jeweils unterschiedliche Queues ausfuehrt. Hinter den Queues sind angemeldete Agenten, die dann die Gespraeche entgegen nehmen sollen:

extensions.conf
Code:
exten => 5555,1,GoToIfTime(*|mon|*|*?montag|1,1)
exten => 5555,2,GoToIfTime(*|tue|*|*?dienstag|1,1)
exten => 5555,3,GoToIfTime(*|wed|*|*?mittwoch|1,1)
exten => 5555,4,GoToIfTime(*|thu|*|*?donnerstag|1,1)
exten => 5555,5,GoToIfTime(*|fri|*|*?freitag|1,1)

dazu gibts dann fuer jeden Tag folgendes:

[montag]
exten => 1,1,Set(TIMEOUT(Digit)=5)
exten => 1,2,Set(TIMEOUT(Response)=10)
exten => 1,3,Queue(montag|r|||)
exten => 1,4,Hangup()

usw.

queues.conf
Code:
[montag]
strategy=leastrecent
timeout=70000
retry=0
wrapuptime=10
timeoutrestart = yes
announce-frequency = 0
announce-holdtime = no
member => Agent/529
member => Agent/538
member => Agent/537
member => Agent/543
member => Agent/534
member => Agent/548

usw.

Die Logik funktioniert, allerdings stuertzt der Asterisk (1.2.13) komplett ab, wenn um was zu sagen 2 gleichzeitige Gespraeche umgeleitet werden. Leider sehe ich weder im verbose noch im debug irgendwelche Anhaltspunkte. Kann man mein Scenario irgendwie verbessern oder anders gestallten?

Als die Nachtschaltung rausgenommen wurde, laeuft die Kiste normal weiter. Also ohne Probleme.

danke im voraus!
 
Hallo Basti,

komplett ab, wenn um was zu sagen 2 gleichzeitige Gespraeche umgeleitet werden

Was heisst das ?

Grundsätzlich sollte etwas im Verbose kommen, wenigstens als WARNING oder ggf. ein ERROR, wenn Asterisk abstürzt so tut er dies mW immer mit einem Exitcode - ggf. kannst Du diesen mal auswerten, ich würde das ganze reproduzieren (es ist ja anscheinend reproduzierbar) , alles entnehmen und dann Stück für Stück Code im Dialplan einsetzen, so wirst Du recht schnell merken an welcher Stelle er sich weghängt, das ganze dann natürlich mit einem Verbose = 4 o.ä. und einem Debug = 4 o.ä.

Die Log Ausgaben kannst Du Dir auch ganz bequem benutzerdefiniert speichern lassen (siehe logger.conf)

Schreib mal was passiert wenn das ganze noch aktuell ist.

Grüsse, Stefan
 
Hallo,

vielen Dank fuer Deine Antwort:

Leider kommt in der Tat keinerlei Fehlermeldung im Debug/Verbose vor, hier mal ein Auszug, wenn die "Nachtschaltung" aktiviert wurde:

Code:
Dec 27 09:13:46 VERBOSE[14267] logger.c:     -- Executing Dial("Zap/25-1", "SIP/empfang|240") in new stack
Dec 27 09:13:46 VERBOSE[14267] logger.c:     -- Called empfang
Dec 27 09:13:47 VERBOSE[13995] logger.c:     -- Got SIP response 302 "Moved Temporarily" back from 1.1.2.44
Dec 27 09:13:47 VERBOSE[14267] logger.c:     -- Now forwarding Zap/25-1 to 'Local/5555@intern' (thanks to SIP/empfang-0824cab8)
Dec 27 09:13:47 VERBOSE[14269] logger.c:     -- Executing GotoIfTime("Local/5555@intern-ec04,2", "*|mon|*|*?montag|1|1") in new stack
Dec 27 09:13:47 VERBOSE[14269] logger.c:     -- Executing GotoIfTime("Local/5555@intern-ec04,2", "*|tue|*|*?dienstag|1|1") in new stack
Dec 27 09:13:47 VERBOSE[14269] logger.c:     -- Executing GotoIfTime("Local/5555@intern-ec04,2", "*|wed|*|*?mittwoch|1|1") in new stack
Dec 27 09:13:47 VERBOSE[14269] logger.c:     -- Goto (mittwoch,1,1)
Dec 27 09:13:47 VERBOSE[14269] logger.c:     -- Executing Set("Local/5555@intern-ec04,2", "TIMEOUT(Digit)=5") in new stack
Dec 27 09:13:47 VERBOSE[14269] logger.c:     -- Digit timeout set to 5
Dec 27 09:13:47 VERBOSE[14269] logger.c:     -- Executing Set("Local/5555@intern-ec04,2", "TIMEOUT(Response)=10") in new stack
Dec 27 09:13:47 VERBOSE[14269] logger.c:     -- Response timeout set to 10
Dec 27 09:13:47 VERBOSE[14269] logger.c:     -- Executing Queue("Local/5555@intern-ec04,2", "mittwoch|r|||") in new stack
Dec 27 09:13:47 VERBOSE[14267] logger.c:     -- Local/5555@intern-ec04,1 is ringing
Dec 27 09:13:47 VERBOSE[14269] logger.c:     -- outgoing agentcall, to agent '532', on 'Local/32@intern-7ae8,1'
Dec 27 09:13:47 VERBOSE[14269] logger.c:     -- Called Agent/532
Dec 27 09:13:47 VERBOSE[14272] logger.c:     -- Executing Dial("Local/32@intern-7ae8,2", "SIP/test") in new stack
Dec 27 09:13:47 VERBOSE[14272] logger.c:     -- Called test
Dec 27 09:13:47 VERBOSE[14272] logger.c:     -- SIP/test-0842bc60 is ringing
Dec 27 09:13:47 VERBOSE[14269] logger.c:     -- Agent/532 is ringing
Dec 27 09:13:47 VERBOSE[14272] logger.c:     -- SIP/test-0842bc60 is ringing
Dec 27 09:13:48 VERBOSE[14272] logger.c:     -- SIP/test-0842bc60 is ringing
Dec 27 09:13:52 VERBOSE[14269] logger.c:     -- Agent/532 answered Local/5555@intern-ec04,2
Dec 27 09:13:52 VERBOSE[14267] logger.c:     -- Local/5555@intern-ec04,1 answered Zap/25-1
Dec 27 09:14:12 VERBOSE[13995] logger.c:     -- Stopped music on hold on @i;H8XX55@intern-ec04,1<ZOMBIE>
Dec 27 09:14:16 VERBOSE[14331] logger.c: Asterisk Event Logger Started /var/log/asterisk/event_log
Dec 27 09:14:16 VERBOSE[14331] logger.c:   == Parsing '/etc/asterisk/dnsmgr.conf': Dec 27 09:14:16 VERBOSE[14331] logger.c:   == Parsing '/etc/asterisk/dnsmg
Dec 27 09:14:16 VERBOSE[14331] logger.c: Asterisk Dynamic Loader loading preload modules:
Dec 27 09:14:16 VERBOSE[14331] logger.c:   == Parsing '/etc/asterisk/modules.conf': Dec 27 09:14:16 VERBOSE[14331] logger.c:   == Parsing '/etc/asterisk/modu
Dec 27 09:14:16 VERBOSE[14331] logger.c:   == Manager registered action Ping
Dec 27 09:14:16 VERBOSE[14331] logger.c:   == Manager registered action Events

So sieht das aus - man sieht, er restartet einfach - kein Segmentation Fault bzw. Core Dump - nichts..einfach ein restart. Ich versteh es nicht?!

Der Agent "532" ist der SIP-Account "Test". Kannst Du irgendwelche Auffaelligkeiten entdecken? Sieht doch alles lt. Log gut aus ?!
 
So - habe nun mehr oder weniger das Problem gefunden. Es scheint wohl an der konfigurierten Snom Taste zu liegen.

Beim Snom habe ich mittels KEY_EVENT eine Funktion F_REDIRECT:<nebenstelle> eingerichtet. Verweisse ich statisch innerhalb der extensions.conf die Rufnummer auf die Queue bzw. GoToIfTime Schleife, funktioniert es ohne Reset.
Sobald allerdings am Telefon diese Funktionstaste aktiviert wird, bricht der Asterisk ab. Schade nur, dass ich keinerlei Fehler im Log sehen. Nichts desto trotz werde ich nun die Sache mit einem Dialstatus realisieren, somit kann man ja dann einfach das Telefon auf DND setzen und es sollte funktionieren.

Wer mir bei den Dialstatus "s-busy" helfen moechte - siehe bitte meinen naechsten Thread "Dialstatus konfigurieren".

Vielen Dank schon mal an Dich Stefan ! :-)
 
Kein Problem, schön das Du es hinbekommen hast - auch wenn mir nicht so ganz klar ist warum das ein Problem produziert und nicht einfach "geschluckt" wird - aber ein Workaround hierzu wäre ein SIP DEBUG um zu sehen was da genau passiert - ich würde dazu raten.

Grüsse, Stefan
 
Mmm - aufgrund der Tatsache, dass ich in einem anderen Thread ebenfalls weitere Probleme hatte, sprich die Agenten die sich dort in diese Nachtschaltung einbuchen, konnten keinen Transfer durchführen. Auf der Seite von Digium habe ich dann einen bereits erkannten Bug gefunden, dieser Bug ist wohl seit der Asterisk 1.2.7.1 in der channel.c.

Der Bug (bei einem Transfer der Agenten) führt wohl zu einem Core Dump (auch wenn ich kein *.dump file liegen habe).

Jedenfalls habe ich in der channel.c, wie beschrieben zwei Zeilen gelöscht und recompiled.

Nach diesem "Löschvorgang dieser Zeilen" konnte ich sogar die "Nachtschaltung" auf die Snom Funktionstaste legen. Seitdem scheint alles sehr stabil zu funktionieren.

Weitere Infos zum Bug:
http://bugs.digium.com/bug_view_page.php?bug_id=8064&history=1#history

Gruss,
basty
 
Kostenlos!

Statistik des Forums

Themen
248,885
Beiträge
2,304,044
Mitglieder
378,567
Neuestes Mitglied
toenizz