Asterisk,Snom und unbeantwortete Anrufe

henk469

Neuer User
Mitglied seit
18 Apr 2007
Beiträge
52
Punkte für Reaktionen
0
Punkte
0
Hallo, habe hier folgendes Problem bei uns,
zwei Snom 360 sind an die Asterisk angeschlossen und die Asterisk ist so konfiguriert, das bei der wahl einer bestimmten nummer beide Telefone klingeln, über Dial(SIP/XXX&SIP/YYY) so funktioniert alles super...allerdings wird ein Anruf, der an einem der beiden Telefone angenommen wird, an dem anderen Telefon als Anruf in abwesenheit angezeigt...und das sollte ja eigentlich nicht sein, mi fällt allerdings ehrlichgesagt nichts ein wie ich das problem lösen kann...Wäre für jede Idee dankbar,
Danke schonmal,
MFG
henk469
 
Wäre für jede Idee dankbar,

Da hab ich eine - Benutze mal die Suchfunktion, Du bist nämlich nicht der erste, der diese Frage hier im Forum stellt.
 
betateilchen schrieb:
Da hab ich eine - Benutze mal die Suchfunktion, Du bist nämlich nicht der erste, der diese Frage hier im Forum stellt.

Ich will ja nicht unken, aber... ich kann mich nicht erinnern, dass es eine wirklich zufriedenstellende Lösung für dieses Problem gegeben hätte. OK, ich nicht alle Freds im Kopf, aber wenn mir ein entsprechender untergekommen wäre, hätte ich ihn längst umgesetzt...
 
Probier mal diesen Patch, sollte auch auf die letzte Asterisk-Version funktionieren:
Code:
--- asterisk-1.2.18-orig/include/asterisk/channel.h	2007-06-12 08:40:01.000000000 +0200
+++ asterisk-1.2.18/include/asterisk/channel.h	2007-06-12 14:15:10.000000000 +0200
@@ -446,6 +446,8 @@
 						*/
 #define AST_FLAG_NOTNEW 	(1 << 10)	/*!< see bug:7855 incorrect Newchannel event generation */
 /* @} */
+#define AST_FLAG_ANSWERED_ELSEWHERE (1 << 15)	/*!< Flag to show channels that this call is hangup due to the fact that
+						    the call was indeed answered, but in another channel    */
 
 #define AST_FEATURE_PLAY_WARNING	(1 << 0)
 #define AST_FEATURE_REDIRECT		(1 << 1)
--- asterisk-1.2.18-orig/apps/app_dial.c	2007-06-12 08:40:01.000000000 +0200
+++ asterisk-1.2.18/apps/app_dial.c	2007-06-12 08:52:11.000000000 +0200
@@ -289,14 +289,17 @@
 
 LOCAL_USER_DECL;
 
-static void hanguptree(struct localuser *outgoing, struct ast_channel *exception)
+static void hanguptree(struct localuser *outgoing, struct ast_channel *exception, int answered_elsewhere)
 {
 	/* Hang up a tree of stuff */
 	struct localuser *oo;
 	while (outgoing) {
 		/* Hangup any existing lines we have open */
-		if (outgoing->chan && (outgoing->chan != exception))
+		if (outgoing->chan && (outgoing->chan != exception)) {
+			if (answered_elsewhere)
+			    ast_set_flag(outgoing->chan, AST_FLAG_ANSWERED_ELSEWHERE);
 			ast_hangup(outgoing->chan);
+		}
 		oo = outgoing;
 		outgoing=outgoing->next;
 		free(oo);
@@ -1270,7 +1273,7 @@
 		/* Ah ha!  Someone answered within the desired timeframe.  Of course after this
 		   we will always return with -1 so that it is hung up properly after the 
 		   conversation.  */
-		hanguptree(outgoing, peer);
+		hanguptree(outgoing, peer, 1);
 		outgoing = NULL;
 		/* If appropriate, log that we have a destination channel */
 		if (chan->cdr)
@@ -1504,7 +1507,7 @@
 			ast_parseable_goto(peer, opt_args[OPT_ARG_GOTO]);
 			peer->priority++;
 			ast_pbx_start(peer);
-			hanguptree(outgoing, NULL);
+			hanguptree(outgoing, NULL, 0);
 			LOCAL_USER_REMOVE(u);
 			if (continue_exec)
 				*continue_exec = 1;
@@ -1684,7 +1687,7 @@
 		sentringing = 0;
 		ast_indicate(chan, -1);
 	}
-	hanguptree(outgoing, NULL);
+	hanguptree(outgoing, NULL, 0);
 	pbx_builtin_setvar_helper(chan, "DIALSTATUS", status);
 	ast_log(LOG_DEBUG, "Exiting with DIALSTATUS=%s.\n", status);
 	
--- asterisk-1.2.18-orig/channels/chan_sip.c	2007-06-12 08:40:01.000000000 +0200
+++ asterisk-1.2.18/channels/chan_sip.c	2007-06-12 14:39:17.000000000 +0200
@@ -564,6 +564,7 @@
 #define SIP_OSPAUTH_PROXY	(2 << 26)
 #define SIP_OSPAUTH_EXCLUSIVE	(3 << 26)
 /* Call states */
+#define SIP_ANSWEREDELSEWHERE	(1 << 27)
 #define SIP_CALL_ONHOLD		(1 << 28)	 
 #define SIP_CALL_LIMIT		(1 << 29)
 /* Remote Party-ID Support */
@@ -2441,6 +2442,13 @@
 	if (option_debug)
 		ast_log(LOG_DEBUG, "Hangup call %s, SIP callid %s)\n", ast->name, p->callid);
 
+	if (ast_test_flag(ast, AST_FLAG_ANSWERED_ELSEWHERE)) {
+	    if(option_debug)
+		ast_log(LOG_DEBUG, "This call was answered elsewhere\n");
+	    append_history(p, "Cancel", "Call answered elsewhere");
+	    ast_set_flag(p, SIP_ANSWEREDELSEWHERE);
+	}
+	
 	ast_mutex_lock(&p->lock);
 #ifdef OSP_SUPPORT
 	if ((p->osphandle > -1) && (ast->_state == AST_STATE_UP)) {
@@ -5875,6 +5883,9 @@
 {
 	struct sip_request resp;
 	reqprep(&resp, p, sipmethod, seqno, newbranch);
+	if (sipmethod == SIP_CANCEL && ast_test_flag(p, SIP_ANSWEREDELSEWHERE))
+	    add_header(&resp, "Reason", "SIP;cause=200;text=\"Call completed elsewhere\"");
+	
 	add_header_contentLength(&resp, 0);
 	add_blank_header(&resp);
 	return send_request(p, &resp, reliable, seqno ? seqno : p->ocseq);
 
tomster schrieb:
ich kann mich nicht erinnern, dass es eine wirklich zufriedenstellende Lösung für dieses Problem gegeben hätte.

Und ich kann mich nicht daran erinnern, irgendwo behauptet zu haben, daß es eine wirklich zufriedenstellende Lösung gibt :rolleyes:
 
Got me on that.

[50% Off-Topic]
Aber unter uns Sportsfreunden:
Besonders hilfreich sind dann solche Postings, wie dein Obiges dennoch nicht. Ich gehe davon aus, dass henk469 mit "Wäre für jede Idee dankbar" nicht gemeint hat, Threads zu lesen, in denen unterm Strich rauskommt: es hat keiner eine (funktionierende) Idee.

Ich weiß zwar nicht, ob henk469 entsprechend lang das Forum verfolgt, um zu wissen, dass du zunächst Mal gern auf die Suchfunktion verweist, wenn du grad Mal (ausnahmsweise) keinen Einfall zu einer Fragestellung hast, aber wenn nicht, dann weiß er es jetzt ;-)
[/50% Off-Topic]

@speedy1980

Du meinst vermutlich V1.4.x mit "letzte Asterisk-Version"? Kannst du mir/ uns vielleicht auch sagen, ob es mit dem 1.2 branch auch funzt? Patche einzubauen und die dann wieder rauszufrickeln, ist bei einem Produktiv-System etwas ungut, wie ich aus leidvoller Erfahrung berichten muss.

--edit--
nur eine "typo"
 
Zuletzt bearbeitet:
tomster schrieb:
um zu wissen, dass du zunächst Mal gern auf die Suchfunktion verweist, wenn du grad Mal (ausnahmsweise) keinen Einfall zu einer Fragestellung hast

Falsch. Auf die Suchfunktion verweise ich nur dann, wenn ich weiß, daß es dadurch auch schon etwas zu finden gibt. Und eine Information in einem Thread, die besagt "es gibt keine Lösung" ist doch eigentlich genausoviel wert wie eine in einem Thread beschriebene Lösung selbst, oder? ;)
 
tomster schrieb:
@speedy1980

Du meinst vermutlich V1.4.x mit "letzte Asterisk-Version"? Kannst du mir/ uns vielleicht auch sagen, ob es mit dem 1.2 branch auch funzt? Patche einzubauen und die dann wieder rauszufrickeln, ist bei einem Produktiv-System etwas ungut, wie ich aus leidvoller Erfahrung berichten muss.

Es ist für Asterisk 1.2.X, siehe erste Zeile im Patch. Läuft bei mir im Büro momentan. Einen der letzten Bristuff's nehmen und download.sh ausführen. Dann den Patch im Asterisk-Verzeichnis einspielen und das compile.sh vom Bristuff ausführen.
 
speedy1980 schrieb:
Es ist für Asterisk 1.2.X, siehe erste Zeile im Patch.
OOOPS, rot anlauf. Des is mir jetz peinlich...

Aber nun weiß ich wenigstens, dass der Patch für bri-ge-stuff'te Asterisks ist. Und damit "not applicable" bei mir, wie man so schön sagt.

@betateilchen
Lass mer Mal die Wert-oder-Kein-Wert-Diskussion. Mein Posting sollte eher als "grundlegende" Information für Noobs verstanden werden zum Thema: "Wie ist damit zu verfahren, wenn auf eine gestellte Frage das erste Antwort-Posting von betateilchen ist". Und dabei soll es fürwahr keine Kritik an deiner Person sein, als vielmehr der Versuch dem Fragensteller weiterhin Mut zu machen (neben dem Benutzen der SuFu), hartnäckig weiterzuposten. Ned dass einen gleich der Mut verlässt, wenn er dein Lieblingsposting zum ersten Mal liest ;-)
 
wildzero schrieb:
@speedy1980
Das bist Du doch hier, oder?:
http://archives.free.net.ph/message/...044a75.en.html

d.h. hier tut sich noch was für *1.4?

...

Gute Frage, Dein Link geht nicht. Aber ich hab mit Olle Johansson auf asterisk-dev ab dem 6.6. darüber diskutiert. Er hat einen eigenen Branch, in dem er Anrufe, die an einer anderen Nebenstelle angenommen wurden, auf den restlichen Telefonen nicht mehr als "in Abwesenheit" zählt. Ich glaube das basierte auf Asterisk 1.4. Ich brauchte es für Asterisk 1.2 und hab es also rückportiert, was ihm nicht so gut gefiel.
Egal, mit etwas Handarbeit geht mein Patch auch auf einem ungepatchtem Asterisk 1.2 (also kein Bristuff). Ich habs schon länger im Büro im Einsatz, keine Probleme bisher.
 
Hallo,

der Patch sieht ja recht nachvollziehbar aus. Funktioniert das (cause 200 bei cancel) auch mit anderen Telefonen?
Gibe es eigentlich auch bei IAX Telefonen irgendeine Möglichkeit?
 
Das ist eine gute Frage. Die Snoms können es alle (logischerweise). Leider hab ich zusätzlich nur noch ein Aastra 57i (neueste Firmware) und ein Sipura SPA-841 (ältere Firmware) hier. Die beiden können es zumindest nicht.
Wäre nett, wenn jemand andere Geräte zur Verfügung hat. Einen gepatchten Asterisk könnte ich zum Testen zur Verfügung stellen.
Bei IAX Telefonen ist mir keine Möglichkeit bekannt, aber ich hab mich mit denen nicht wirklich viel beschäftigt.
Und ja, der Patch ist recht einfach. Ich sag ja mit etwas Handarbeit bekommt man den auf jeden gepatchten oder ungepatchten Asterisk 1.2 drauf.
 
Hab den Patch grad Mal per Hand in meinen 1.2.17 eingepflegt. Erste Test schauen seehr vielversprechend aus. Bei 3 Test-Anrufen zeigen die Snoms genau was sie sollen: Nämlich nix.

Prima und Danke speedy1980! Wieder ein Problem weniger.
 
Sorry, wenn ich einen alten Thread wieder aufwärmen muss.

Ich habe den Patch auch eingespielt. Nachdem ich gemerkt habe dass es sich um insgesamt 3 Patches handelt, hat es auch wunderbar geklappt :-D

Er funktioniert auch wunderbar. Ein Problem habe ich aber noch damit.

Sobald man durch ein Failover in eine andere Ringgroup übergibt, wird der Anruf trotzdem angezeigt. Zugegeben: Es hat niemand abgenommen. Aber es wäre besser wenn die asterisk merkt wenn es in eine andere Ringgroup geht und nicht "nur niemand abnimmt".
Ich hoffe es ist verständlich wie ich das meine.

Vllt. gibt es ja auch für das eine Lösung.

THX my friends
 
Das geht so einfach nicht. Asterisk ruft eine Rufgruppe an und in der nächsten Wählplan-Priorität eine andere Gruppe. Das sind zwei fast unabhängige Vorgänge. Da müßte man einen Dial-Parameter einführen und im ersten Aufruf übergeben. Der Parameter müßte dann die gleiche Funktion haben als wenn jemand abgenommen hat.
Also ich kriege das nicht hin. Wenn sich jemand dran versuchen will: Immer her mit den Ideen! Snoms zum Testen und Zeit nehme ich mir dann.
 
Ich hab das derzeit so gelöst, dass alle betroffenen Snoms mit zwei SIP-Accounts angemeldet sind, der eine für direkte Anrufe, der 2. für Gruppen. Am 2. Account ist dann im Snom das Aufzeichnen der Anrufer deaktiviert und ausserdem ein anderer Klingelton drauf.
 
Hallo,

ich nutze Asterisk 1.4.13 und habe das gleiche Problem mit nem Snom300.
Gibts da auch ein Lösung? Wird das evtl. in eine zukünftige Version (Tag) eingebaut? Weiß da jemand etwas?
Ach ja: Ich habe das System im Einsatz - darum ist ein Patchen etc. nicht umbedingt mein Wunsch.

Danke
Heiko
 
Hallo,

hat hier jemand für v1.4.* eine vernünftige Lösung gefunden? Um das Problem noch ein wenig zu "verschärfen", bei mir klingeln zwei Snoms sowie zwei analoge Siemens DECT Gigasets, die über Sipura/Linksys angeschlossen sind, parallel. Die Gigasets blinken dann auch immer so schön, wenn der Anruf z.B. mit einem Snom angenommen wurde.

Sprich ich suche eine Lösung, wie ich die Message Waiting Indication Lampe an den Snoms sowie das Blinken an den Gigasets für jeweils verpasste Anrufe löschen kann.

Danke, Guido
 
Die Siemens Geräte können das sicher nicht, müßte man mal bei denen anfragen. Ursprünglich hat Olle Johansson es auf Asterisk 1.4 entwickelt:
http://svn.digium.com/view/asterisk/team/oej/cancel_answer_elsewhere/?pathrev=74256
Das ist der Branch, den es heute aber nicht mehr gibt. Hier die 3 Dateien, in denen Änderungen gemacht wurden (ich hoffe das sind wirklich alle und ich habe keine vergessen):
include/asterisk/channel.h
apps/app_dial.c
channels/chan_sip.c

Die Diffs wenn wir schon dabei sind (sind in dieser Reihenfolge anzuwenden):
http://svn.digium.com/view/asterisk...isk/channel.h?r1=66434&r2=66436&pathrev=74256
http://svn.digium.com/view/asterisk...ps/app_dial.c?r1=66434&r2=66436&pathrev=74256
(optional) http://svn.digium.com/view/asterisk...ps/app_dial.c?r1=73072&r2=73097&pathrev=74256
http://svn.digium.com/view/asterisk...ps/app_dial.c?r1=73097&r2=73910&pathrev=74256
http://svn.digium.com/view/asterisk...ls/chan_sip.c?r1=66434&r2=66436&pathrev=74256
http://svn.digium.com/view/asterisk...ls/chan_sip.c?r1=67094&r2=67640&pathrev=74256
http://svn.digium.com/view/asterisk...ls/chan_sip.c?r1=69831&r2=69949&pathrev=74256

So nun sollten alle Infos gesammelt sein für Asterisk 1.4. Macht sich jetzt jemand die Arbeit einen Patch für Asterisk 1.4.18 zu erstellen?
 
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.