Nach Answer Script starten mit Info wer angenommen hat.

EazyAdm

Neuer User
Mitglied seit
1 Jun 2005
Beiträge
109
Punkte für Reaktionen
0
Punkte
0
Hallo,

ich bin mir nicht sicher ob ich auf dem Schlauch stehe oder mir eine wichtige Info fehlt die ich nicht finde.

Ich habe bei uns in der Firma einen * am laufen der aktuell für die Hauptnummer 12345 veranwortlich ist. Wenn auf dieser Nummer ein Anruf via ISDN reinkommt klingel intern 3 SIP Teilnehmer. Ich möchte nun ein Skript starten sobald der Anruf von einem SIP Teilnehmer beantwortet wurde mit der Info welcher Teilnehmer das Gespräch angenommen hat.

Wenn ich einen System Call nach Dial einfüge also also Prio 2 dann wird das ganze ja erst ausgeführt wenn aufgelegt wurde. Und leider finde ich keine Variable in der steht wer das Gespräch nun hat.

Code:
exten => 12345,1,Dial(SIP/70&SIP/60&SIP/50)
exten => 12345,2,Hangup()

Habt Ihr mir da evtl. einen Tipp. Die Variable würde ich noch finden ansonsten würde ich direkt nach aufruf die CDR abfragen, aber wie ich den Aufruf mache wäre mir super wichtig, denn ich komm kein Stück mehr vorran.

Danke

bye
eazy

=== Nachtrag ===
Anich ist dieses Beispiel von voip-info.org garnicht schlecht.
Code:
; Extension 200 Mini Call ID WinPopup Example
exten => 200,1,NoOp(${CALLERID} ${DATETIME})
exten => 200,2,System(/bin/echo -e "'Incoming Call From: ${CALLERID} \\r Received: ${DATETIME}'"|/usr/bin/smbclient -M target_netbiosname)
exten => 200,3,Dial,sip/sipuser|30|t        
exten => 200,4,Congestion
nur ist es auch hier so das das ganze vor der rufannahme passiert und nicht danach.
 
Zuletzt bearbeitet:
Auch wenn ich deine Frage nicht wirklich beantworten kann, hat sie mich auf einen Punkt gebracht, der mich schon seit längerem ärgert.

Auch bei uns lässt ein eingehender ISDN-Anruf 2 SIP-Telefone klingeln. Nimmt nun einer ab, dann hat er das Gespräch logischerweise. Allerdings steht auf dem anderen Telefon dieser Anruf in der Anrufliste -> Verpasste Anrufe.
Das geht natürlich wechselweise so weiter, ohne dass Apparat A weiß, ob der Anruf von B angenommen wurde (oder umgekehrt) oder ein Rückruf noch aussteht.
Ich weiß zwar nicht, ob man mittels Script z.B. bei Snoms Einträge aus der Anrufliste löschen kann, oder eben eine Benachrichtigung gesendet wird wer den Anruf tatsächlich angenommen hat, aber irgendeine Lösung muss her ;-)

Sollte ich aber dein Posting falsch verstanden haben, dann darf meins geflissentlich ignoriert werden...

TOM
 
Also Ihr habt da zwei völlig unterschiedliche Probleme.

Die Sache mit den "verpaßten Anrufen" bei ISDN ist lösbar. Der einfachste ist z.B. bei Grandstream GXP2000 die Einstellmöglichkeit, gar keine verpaßten Anrufe anzuzeigen. Es dürfte generell recht gerätespezifisch sein, da die ISDN Channels von Asterisk die Signalisierung der Annahme durch einen anderen Apparat wohl noch nicht unterstützen Schau mal im ISDN Bereich hier im Asterisk-Forum, da solltest Du schon Diskussionen zu diesem Thema finden.

Das eigentliche Problem weswegen dieser Thread eröffnet wurde, ist aber ein anderes. Und die Idee mit der CDR Auswertung bringt Dich auch nicht weiter, da der CDR Eintrag erst nach Beendigung des Gespräches geschrieben wird.
Was mir spontan einfällt, wäre die Auswertung der SIP-Header des aktiven Channels. Dort müßte sich die Information finden lassen. Aber wie Du das innerhalb eines laufenden Gespräches feststellen willst, ist mir im Moment noch unklar. Dazu fällt mir grade gar nix ein. Sollte mir noch ein Geistesblitz kommen, werde ich es Dich wissen lassen.
 
Nein, die abwesenheits dinger sind mir ansich egal. Ich will nur bei dem jenigen der den Anruf bekommt direkt die wichtigsten Kundendaten aufpoppen lassen. Also letzte Gespräche Probleme usw.

Danke

bye
eazy
 
Das ist aber nun was völlig anderes als das was Du eingangs wolltest :wiejetzt:

Der Titel Deine Threads heißt

Nach Answer Script starten mit Info wer angenommen hat.

Die Rufnummer des Anrufers kriegst Du auch über die CallerID raus.

Schau Dir mal diese Doku an, und dort speziell den Teil

M(x): Executes the macro (x) upon connect of the call (i.e. when the called party answers)

und

G(context^exten^pri): If the call is answered, transfer both parties to the specified context and extension. The calling party is transferred to priority x, and the called party to priority x+1. This allows the dialplan to distinguish between the calling and called legs of the call (new in v1.2).
 
Super @ betateilchen, vielen Dank das ist genau das was ich brauche.

Jetzt hab ich nur noch ein kleines Problem das ich in der Vergangenheit schonmal hatte. Wenn ich ein Macro aufrufe dann kann ich nicht mehr die Nummer des Anrufers auslesen. In ${CALLERIDNUM} steht die gewählte Nummer drin, und in ${DNID} steht nichts drin.

Vielen DANK

bye
eazy
 
dann gib doch die CALLERID einfach als separaten Parameter beim Aufruf des Makros mit, damit hast Du die Möglichkeit, die CallerID unter z.B. ${ARG3} innerhalb des Makros zu verwenden.
 
Urgs, das ist peinlich. Jetzt wo du es sagst finde ich es selbst. Das muss ich immer überlesen haben. So wird manches viel einfacher ;-)

Vielen Dank, somit sind all meine aktuellen Probleme gelöst.

MFG

bye
eazy
 
betateilchen schrieb:
Die Sache mit den "verpaßten Anrufen" bei ISDN ist lösbar.

Hallo betateilchen,

wo Du es gerade erwähnst. Ist das auch bei SIP lösbar? Gibt es einen Befehl, den ich an ein SIP Telefon senden kann, um einen verpassten Anruf wieder zu löschen? Oder ist das Gerätespezifisch?

Gruß
delmo
 
Das ist gerätespezifisch und kann meines Wissens derzeit noch nicht standardmäßig per SIP signalisiert werden.
 
Bei den Snoms geht es ab Firmware 7. Hat jemand eine Idee, wie ich das meinem Asterisk beibringe? Mit SIPAddHeader kommt man sicher nicht weit.
http://kb.snom.com/kb/index.php?View=entry&CategoryID=35&EntryID=72

Edit: Gerade mal die CANCEL Nachricht aus meinem aktuellen Asterisk angesehen. 192.168.101.19 ist das Snom Telefon:
Code:
CANCEL sip:[email protected]:5090;line=vrl2tbvy SIP/2.0
Via: SIP/2.0/UDP 192.168.101.250:5060;branch=z9hG4bK7dd1e8ef;rport
From: "asterisk" <sip:[email protected]>;tag=as033adbe1
To: <sip:[email protected]:5090;line=vrl2tbvy>
Call-ID: [email protected]
CSeq: 102 CANCEL
User-Agent: MeinePBX
Max-Forwards: 70
Content-Length: 0
 
Zuletzt bearbeitet:
Daß der Asterisk inzwischen in einem solchen Fall die CANCEL Message schickt, war mir wohl entgangen. Wieder was dazugelernt :D danke für den Hinweis!

Aber das SNOM wird das noch nicht auswerten können, weil der REASON nicht korrekt mitgegebenm sondern nur eine leere Nachricht geschickt wird.

Es könnte also durchaus Geräte (auch von anderen Herstellern) geben, die eine solche Message auswerten können. Eventuell sogar eine leere Nachricht. Aber dann sind wir ja schon wieder bei gerätespezifisch :cool:
 
Wenn ich es richtig sehe wird in chan_sip.c ca. zwischen Zeile 4200 und 4300* das SIP Paket erzeugt, dass für den CANCEL zuständig ist. Ob man hier das für die Snoms wichtige "Reason: SIP;cause=200;text="Call completed elsewhere"" einbauen könnte? Natürlich müßte man an der Stelle wissen, ob wirklich ein anderes Telefon das Gespräch entgegen genommen hat...
Na vielleicht teste ich da mal etwas rum oder frag auf asterisk-dev nach.

Edit: Gerade etwas interessantes gefunden:
http://lists.digium.com/pipermail/asterisk-users/2006-July/160393.html
Snom hält sich also an ein RFC und macht nichts selbst erfundenes. Dann sollte einer Umsetzung in Asterisk nichts entgegen stehen, oder? In Asterisk 1.2 wird das sicher nichts mehr (siehe Diskussionen auf asterisk-users wegen Weiterentwicklung/Einstellung Support etc), aber in 1.6 sollte es doch was werden. Ich bleib dran :)



* Gepatchter Asterisk, bristuff 0.3.0-PRE-1y-e
 
Zuletzt bearbeitet:
Das Problem ist vermutlich, daß es wohl auch noch andere Gründe für ein CANCEL geben könnte.

Aber wenn Du schonmal auf asterisk-dev bist, dann schau doch einfach mal in den Bug-Tracker ob es dazu schon was gibt.
 
na dann mal viel Erfolg!
 
Jemand mit besseren C Kenntnissen hier? Dieses if ist nicht wahr, woran kann das liegen? AST_FLAG_ANSWERED_ELSEWHERE ist jedenfalls 1, das sehe ich an anderen Debug-Ausgaben. Muss also was mit p->owner sein.
Code:
static int transmit_request(struct sip_pvt *p, int sipmethod, int seqno, enum xmittype reliable, int newbranch) {
...
if (sipmethod == SIP_CANCEL && p->owner && ast_test_flag(p->owner, AST_FLAG_ANSWERED_ELSEWHERE)) 
		add_header(&resp, "Reason:", "SIP;cause=200;text=\"Call completed elsewhere\"");

...
}

Für heute mache ich erst einmal Feierabend.
 
Problem gelöst, aber ich muss trotzdem mit dem lieben Olle noch ein paar EMails schreiben. Heute hat er nach meinem Posting auf asterisk-dev schon eine Änderung im SVN gemacht, aber da ist noch nen Fehler drin. Soviel schon vorab: Es funktioniert, und es funktioniert auch mit Snom Firmware 6. Ein paar Tests hab ich schon durch. Aber es soll ja richtig rund laufen :)
 
ich muss das mal rauskramen. Wie ist denn hier die Lösung gewesen?

Problem: Mehrere Snoms mit jeder Menge "Missed Calls" bei Anrufen, die z.B. vom Kollegen auf "Sammelnummern" angenommen wurden oder per Pickup übernommen wurden.
 
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.