Interne Mailbox - sent into invalid extension

Danke, dachte was wie email aussieht muss email sein ;-) Die Nachricht an 2 Email-Adressen kann man auch über das Mailsystem lösen.

Einen kleinen Schönheitsfehler habe ich noch, der Wochentag von ${VM_DATE} wird auf Englisch angezeigt, in der sip.conf habe ich "language=de"

Gibt es eine Variable, die die _gewählte_ Rufnummer enthält. Es wäre manchmal interessant zu wissen, welche VOIP-Nr. angerufen wurde. Im Asterisk-Buch ist dort keine Variable dazu gelistet, wo auch VM_DATE angeführt ist.


Nach dem Kurs hier, sollte die Mailbox ohne PW abefragt werden. Es wird aber Mailboxnr und PW abgefragt.

aus der extension.conf

Code:
[mailbox_own]
exten => 99,1,answer
exten => 99,n,wait,1
exten => 99,n,voicemailmain,s${CALLERIDNUM}
exten => 99,n,hangup

[mailbox]
exten => 98,1,answer
exten => 98,n,wait,1
exten => 98,n,voicemailmain
exten => 98,n,hangup

...

[ankommend]
exten => _XX.,1,Dial(SIP/${EXTEN:0:2},10)
exten => _XX.,n,VoiceMail(${EXTEN:0:2})
exten => _XX.,n,Hangup()

exten => i,1,NoOp("Invalid extension dialed")
exten => i,n,Hangup()


Wenn ich nun unterschiedliche Ansagen für die Softphones 23 und 48 haben möchte, mache ich dann am besten [23_ankommend] und [48_ankommend]?

Wäre es besser sich vorher um das grundsätzliche Funktionieren bei besetzt, unerreichbar, etc. zu kümmern, also zuerst allgemein anzupassen?
 
Durch das "VoiceMail(${EXTEN:0:2})" nimmt er immer die mailboxansage von der entsprechenden Person. Wird die Person "23" angerufen steht da "Voicemail(23)", wird die Person 48 angerufen steht da "Voicemail(48)" - somit ertönen auch die personalisierten mailboxen.

Damit mailboxnr und PIN nicht abgefragt werden: VoiceMailMain(s${CALLERID(num)})
 
Danke, das ist nun schon der 2. Sache, die lt. Kurs nicht funktioniert. Ebenso deine Korrektur des Kursteils mit "[lokal]" und "exten => _NX,n,Dial,SIP/${EXTEN}|55|Ttr", wo du kritisiert hast, dass "Dial" hier nicht hin gehört. Als Anfänger tut man sich ziemlich schwer, wenn der Kurs Fehler enthält oder hängt das alles mit meinen individuellen Konfigurationen zusammen? Speziell bei der Boxabfrage ohne PW kann ich mir das nicht vorstellen.

Die Mailboxabfrage ohne PW klappt nun. In die individuelle Mailboxkonfiguration muss ich mich erst einlesen. (wo man die wav-Dateien austauschen kann, damit die Qualität besser ist)

Könntest du mir bitte noch die Mailboxkonfiguration von "b" und "u" nennen?

Das ist der augenblickliche Stand:
Code:
[ankommend]
exten => _XX.,1,Dial(SIP/${EXTEN:0:2},10)
exten => _XX.,n,VoiceMail(${EXTEN:0:2})
exten => _XX.,n,Hangup()

exten => i,1,NoOp("Invalid extension dialed")
exten => i,n,Hangup()


Wie inkludiere ich ein Mail bei unerreicht, aber ohne, dass etwas auf die Sprachbox gesagt wurde?

Anders formuliert, ich möchte über jeden Anruf ein Email erhalten, außer wenn persönlich abgehoben wurde, also auch für den Fall, dass das Softphone gar nicht angemeldet ist.
 
Zuletzt bearbeitet:
Das Hauptproblem besteht wohl darin, dass du warscheinlich Asterisk 1.4.x benutzt und der Kurs für Asterisk 1.0.x geschrieben wurde (eventuell für 1.2.x - aber in der Version war schon klar, dass ${CALLERIDNUM} in 1.4.x nicht mehr funktionieren wird). So ist der Syntax veraltet und manche Sachen komplett raus genommen.
 
Ich benutze Asterisk 1.4.21.2 unter Opensuse 10.3.

Code:
http://www.ip-phone-forum.de/showthread.php?t=141960
Grundsätzlich sollte sich der Asterisk aber wie im Kurs beschrieben, auch unter 1.4 konfigurieren lassen.

Ich sehe den Kurs zwiespältig. Zum einen hat er mir natürlich geholfen und dafür bin ich dankbar, zum anderen wurde ich aber auch sehr verunsichert. Wenn man sich andere Asterisk-Kurse, Tutorials ansieht, dann stellt man fest, "viele Wege führen nach Rom" and trotzdem kann man den Weg verfehlen. ;-)

Ich würde mich sehr freuen, wenn mir noch bei der Erweiterung auf die verschiedenen Sprachboxvarianten geholfen würde. Wahrscheinlich ist das in Verbindung mit ${DIALSTATUS} gar nicht so schwer.
 
Alles was ich hier schreibe sind nur Vorschläge wie man es machen könnte... Natürlich gibt es tausende und abertausende von Wegen - das ist das schöne an Asterisk.
Ich kann dir echt nur empfehlen wenn du etwas neues machen willst einfach die Command-Übersicht von Voip-Info (hab ich schon mal verlinkt) auf zu machen, sich die Befehle anzuschauen und zu überlegen wie du es damit realisieren kannst. Auf der Seite hast du im Prinzip alles was du benötigst.

Hier mein Vorschlag:
Code:
[ankommend]
exten => _XX.,1,Dial(SIP/${EXTEN:0:2},10)
exten => _XX.,n,Set(opt=${IF($["${DIALSTATUS}" = "BUSY"]?b:u)}) 
exten => _XX.,n,VoiceMail(${opt}${EXTEN:0:2})
exten => _XX.,n,Hangup()

exten => i,1,NoOp("Invalid extension dialed")
exten => i,n,Hangup()
 
Ich habe mir natürlich alles angesehen, was gepostet wurde, aber verstehen ist etwas anderes. Ich merke, dass ich noch viel zu wenig in Variablen denke. So etwas schreibt man nicht, ohne Erfahrung zu haben und die fehlt mir noch völlig. Darum bin ich dir sehr dankbar, dass du mir soviel hilfst!

Code:
exten => _XX.,n,Set(opt=${IF($["${DIALSTATUS}" = "BUSY"]?b:u)})
Allein schon das Klammern setzen, muss gekonnt sein.

Grundsätzlich funktioniert dein Vorschlag, es kommt aber diese Meldung:

Code:
[Aug 12 11:08:44] WARNING[4647]: app_voicemail.c:7078 vm_exec: Prefixing the mailbox with an option is deprecated ('u23').
[Aug 12 11:08:44] WARNING[4647]: app_voicemail.c:7079 vm_exec: Please move all leading options to the second argument.

Hmmh, nun stehe ich wieder an. Also kein u23 oder b23 mehr, sondern?
 
Sorry:
VoiceMail(${EXTEN:0:2},${opt})

Sollte da immer noch eine Warnmeldung kommen ersetze das "," durch ein "|".
 
Vielen Dank, passt so mit dem Komma, schön langsam lerne ich Fehlermeldungen zu interpretieren.

Code:
    -- Executing [23_sipgate22@ankommend:1] Dial("SIP/sipgate.at-0822d0b0", "SIP/23|20") in new stack
    -- Called 23
    -- SIP/23-08233a10 is ringing
    -- Nobody picked up in 20000 ms
    -- Executing [23_sipgate22@ankommend:2] Set("SIP/sipgate.at-0822d0b0", "opt=u") in new stack
    -- Executing [23_sipgate22@ankommend:3] VoiceMail("SIP/sipgate.at-0822d0b0", "23|u") in new stack
    -- <SIP/sipgate.at-0822d0b0> Playing 'vm-theperson' (language 'de')
    -- <SIP/sipgate.at-0822d0b0> Playing 'digits/2' (language 'de')
    -- <SIP/sipgate.at-0822d0b0> Playing 'digits/3' (language 'de')
    -- <SIP/sipgate.at-0822d0b0> Playing 'vm-isunavail' (language 'de')
    -- <SIP/sipgate.at-0822d0b0> Playing 'vm-intro' (language 'de')
    -- <SIP/sipgate.at-0822d0b0> Playing 'beep' (language 'de')
    -- Recording the message
    -- x=0, open writing:  /var/spool/asterisk/voicemail/default/23/tmp/NGatkR format: wav, 0x82185b0
    -- User hung up
  == Spawn extension (ankommend, 23_sipgate22, 3) exited non-zero on 'SIP/sipgate.at-0822d0b0'
 
Wie wäre es wenn du deine sip.conf Einträge eher so machst:
Code:
; user 23
register => xxxx:[email protected]/23provider1
register => xxxx:[email protected]/23provider2

; user 48
register => xxxx:[email protected]/48provider1
register => xxxx:[email protected]/48provider2

Dann dein "ankommend" context so:
Code:
[ankommend]
exten => _XX.,1,Dial(SIP/${EXTEN:0:2})
exten => _XX.,n,VoiceMail(${EXTEN:0:2})
exten => _XX.,n,Hangup()
Dieser Code unterscheidet nicht zwischen "u" und "b", sollte aber vorerst funktionieren und ist dann leicht zu erweitern. (PS: code ist nicht getestet, kann also tippfehler o.ä. enthalten)

So hast du viel wirrwarr in deiner extensions.conf gespart und es ist super leicht einen neuen Benutzer hinzuzufügen - einfach sip.conf und voicemail.conf ändern - die extensions.conf musst du dann für eingehende Anrufe nicht mehr anfassen.

Nun bin ich am überlegen, ob dieses Konzept für mich optimal ist.

Bis jetzt habe ich an die Situationen gedacht, die die Regel ist und dafür passt das sehr gut.

Was mache ich aber, wenn der User an einem anderen Client sitzt? Dieser Client sollte jedenfalls intern erreichbar sein bzw. dorthin verbunden werden können. Die "Rechte" des Users bleiben am anderen Client gleich, d.h. er darf genau wieder seine Provider nutzen.

Ich habe aber jetzt eine Problem mit Dial(SIP/${EXTEN:0:2}) in ankommend, denn nun würde das falsche Telefon läuten. Ich bin mir noch nicht klar, ob es sinnvoll ist, einfach alle möglichen Extensions läuten zu lassen.

Bevor ich mich weiter mit ENUM beschäftige, will ich dafür eine Entscheidung treffen.

Welche Möglichkeiten haben ich?
 
Im Prinzip ist es doch egal mit welchem Client sich der Benutzer einloggt, solange er sich mit dem gleichen Account einloggt (sprich Account "23" oder "48"). Mit "Dial(SIP/23)" klingelst du ja einfach den Client an, an dem sich der Benutzer "23" angemeldet hat. Du hast ja keinen festen Domainnamen oder IP da drinn stehen.
Hat jeder Client einen festen Account dann haben die Benutzer in der sip.conf ja nurnoch was mit dem Client zu tun und nicht mehr mit dem menschlichen Benutzer. Somit musst du dein Konzept komplett überdenken.
Wie soll sich dann der Benutzer identifizieren? Soll er eine geheime Nummer vom Client aus wählen damit Asterisk merkt "am Client X sitzt gerade Benutzer Y"? Oder hat jeder Client nur einen bestimmten Benutzer - warum aber sollte er sich dann nicht immer in den gleichen Account einloggen?

Sollte es eine bestimmte Anzahl von Benutzern und Clients geben, wobei jeder Benutzer sich an jedem Client einloggen kann, aber jeder Client seine eigenen Eintrag in der sip.conf hat, kommst du um die Benutzung von globalen Variablen oder Datenbankeinträgen nicht herum.
Dann könntest du etwas in dieser Art machen:
Code:
exten => _XX.,1,Dial(SIP/${DB(/current_client/user_${EXTEN:0:2})})
exten => _XX.,n,VoiceMail(${EXTEN:0:2})
exten => _XX.,n,Hangup()
In diesem Beispiel gehe ich davon aus, dass sich der Benutzer an einem Client irgendwie bei Asterisk registriert hat und im DB-Eintrag "/current_client/user_23" der Benutzername des Clients an dem der Benutzer 23 sich eingeloggt hat steht.
Sollte der Benutzer 23 sich am Client 232 eingeloggt haben (somit ist DB(/current_client/user_23) = 232, und jemand wählt die "23" wird das Programm "Dial(SIP/232)" ausführen und schon klingelt es dort, wo Benutzer 23 ist.

Solltest du mit deinem Asterisk echt großes vorhaben lohnt es sich eventuell bevor du in irgend einer weise weiter machst dich hin zu setzen, das ganz von vorne bis hinten zu durchdenken und eine art Pflichtenheft zu erstellen. Eine exakte Dokumentation, was alles möglich sein soll.
Auf dieser Basis kannst du dann anfangen Asterisk zu konfigurieren - andernfalls kann es sein, dass du noch etliche male deine komplette extensions.conf und ein Teil der sip.conf löschen musst und von vorne anfangen darfst... :P
Hast du allerdings ein Pflichtenheft kannst du deine .confs Stück für Stück aufbauen und so konzipieren, dass du spätere Funktionalitäten ohne Probleme einbauen kannst und dein Asterisk auch in Zukunft leicht und erweiterbar und wartbar ist.
 
Im Prinzip ist es doch egal mit welchem Client sich der Benutzer einloggt, solange er sich mit dem gleichen Account einloggt (sprich Account "23" oder "48"). Mit "Dial(SIP/23)" klingelst du ja einfach den Client an, an dem sich der Benutzer "23" angemeldet hat. Du hast ja keinen festen Domainnamen oder IP da drinn stehen.
Hat jeder Client einen festen Account dann haben die Benutzer in der sip.conf ja nurnoch was mit dem Client zu tun und nicht mehr mit dem menschlichen Benutzer. Somit musst du dein Konzept komplett überdenken.
Wie soll sich dann der Benutzer identifizieren? Soll er eine geheime Nummer vom Client aus wählen damit Asterisk merkt "am Client X sitzt gerade Benutzer Y"? Oder hat jeder Client nur einen bestimmten Benutzer - warum aber sollte er sich dann nicht immer in den gleichen Account einloggen?

Das war eine sehr hilfreiche Erklärung. Bei mir geistert im Kopf etwas "von eindeutig zuzuordnen rum". So wie du es erklärst, ist dem "physischen" USB-Hörer, der mit dem Softphone verbunden ist, keine eindeutige Nummer zugeordnet, sondern sie hängt von der Anmeldung beim Softphone ab.

Was passiert, wenn man sich bei 2 Clients mit den gleichen Logindaten anmeldet.

Zum Verständnis:
Ich habe nichts von Bedeutung vor. Was leicht geht, wird gemacht, auf anderes verzichtet. Das Konzept ändert sich mit dem Erkennen von Möglichkeiten. Es handelt sich um ein paar Linux-Clients und 1 Windows-Client mit jeweils verschiedenen Nutzern, wobei sich jeder User bei jedem Client anmelden kann. An jedem dieser Client hängt ein USB-Telefonhörer. Das Softphone meldet sich automatisch beim Asterisk-Server an, sobald sich der User einloggt. Manchmal ist ein User an mehreren Clients gleichzeitig angemeldet, die örtlich im Nachbarraum sind. Dies ist zB bei rechenintensiven Aufgaben der Fall um den "Hauptrechner" nicht zu bremsen.

Ich überlege mir gerade noch den Ausnahmefall, wenn auf einem Client mehrere X-sessions mit KDE laufen. Für alle User wird ja Twinkle automatisch gestartet. Nehmen wir also an, 23 hat sich auf F7 und 48 auf F8 mit 2 KDE-Sessions angemeldet. Läutet dann das Telefon, wenn 23 _oder_ 48 angerufen wird oder läutet dann gar nichts mehr? Das ist IMHO eher eine Frage der Rechner-Konfiguration. Vielleicht kann man für diesen Fall unterschiedliches Läuten beimn Softphone definieren. Jetzt bin ich aber schon ziemlich theoretisch. Man könnte in diesem Ausnahmenfallen das 2. Softphone einfach manuell abmelden.
 
Kostenlos!

Statistik des Forums

Themen
248,887
Beiträge
2,303,985
Mitglieder
378,568
Neuestes Mitglied
me2k