Hallo zusammen,
für alle die es Interessiert.... :roll:
Hatte gestern folgendes Problem mit meinen Voicemail-Boxen. (Asterisk-1.0.9, Amportal, bristuff-0.2.0-RC8j, chan_capi_vm)
Habe einen großen Haufen PSTN und SIP Leitungen, zahlreiche SIP User und Analoge Telefone an meinem Asterisk. Problem nun, einige User haben Catchall Mailboxen, also ein Postfach, auf das mehrere Rufnummern auflaufen.
Beispiel: Rufnummer: 12345 - Mailbox-Teilnehmer: 210
Die Standardansage meldet sich nun mit "blabla Teilnehmer 210 ist nicht erreichbar...".
Nun möchte ich aber, dass die Mailbox sich mit "blabla Teilnehmer 12345 ist nicht erreichbar..." meldet und außerdem selbsttätig erkennt, welche Rufnummer wurde angerufen und diese in den Text mit einbezieht.
:arrow: Vorweg: Ich weiß, dass es einfacher ist, eine Ansage aufzunehmen und gut ist...Allerdings möchten einige Benutzer keine Ansage aufnehmen und lieber den Standard behalten. Daher nun die folgende Problemlösung.
Bringen wir der voicemail app also bei, dass sie ausser der eigentlichen extension number auch noch andere Nummern in den Text aufnehmen kann.
Zunächst einmal, teilen wir in der extensions.conf eine kleine Änderung mit:
Somit wird die Voicemail() funktion interpretiert als: Voicemail("u210|12345"). Wobei die jetzige Konfiguration alles nach dem "|" ignoriert und somit das System wie gehabt weiter funktioniert.
Nun allerdings müssen wir der app_voicemail.c ein wenig auf den Zahn.... :!: Schließlich soll sie die Nummer hinter einem "|" als Rufnummer in den Standardtext aufnehmen.
Dies erreichen wir mit diesem Patch (Code ist GPL):
Wir kopieren einfach den obigen Inhalt in die Datei app_voicemail.patch und kopieren diese in unser Asterisk-src Unterverzeichnis apps. Nun geben wir ein cat app_voicemail.patch | patch app_voicemail.c und wechseln ins Asterisk-src Verzeichnis.
:arrow: Nun wird Asterisk angehalten!!!
Eingabe: make
:idea: Nun die Datei apps/app_voicemail.so ins Asterisk modules Verzeichnis kopieren (Sometimes /usr/lib/asterisk/modules) und Asterisk neu starten.
Rufen wir nun die externe Nummer 12345 an, an dem sich die Voicemailbox 210 befindet, so meldet diese sich mit "blablabla Teilnehmer 12345 ist nicht erreichbar..."
BTW: Die Ansage kann nun beliebig durch austauschen der ${DNID} Variablen geändert werden.
Gruß AreaZ
für alle die es Interessiert.... :roll:
Hatte gestern folgendes Problem mit meinen Voicemail-Boxen. (Asterisk-1.0.9, Amportal, bristuff-0.2.0-RC8j, chan_capi_vm)
Habe einen großen Haufen PSTN und SIP Leitungen, zahlreiche SIP User und Analoge Telefone an meinem Asterisk. Problem nun, einige User haben Catchall Mailboxen, also ein Postfach, auf das mehrere Rufnummern auflaufen.
Beispiel: Rufnummer: 12345 - Mailbox-Teilnehmer: 210
Die Standardansage meldet sich nun mit "blabla Teilnehmer 210 ist nicht erreichbar...".
Nun möchte ich aber, dass die Mailbox sich mit "blabla Teilnehmer 12345 ist nicht erreichbar..." meldet und außerdem selbsttätig erkennt, welche Rufnummer wurde angerufen und diese in den Text mit einbezieht.
:arrow: Vorweg: Ich weiß, dass es einfacher ist, eine Ansage aufzunehmen und gut ist...Allerdings möchten einige Benutzer keine Ansage aufnehmen und lieber den Standard behalten. Daher nun die folgende Problemlösung.
Bringen wir der voicemail app also bei, dass sie ausser der eigentlichen extension number auch noch andere Nummern in den Text aufnehmen kann.
Zunächst einmal, teilen wir in der extensions.conf eine kleine Änderung mit:
Code:
; Alter code....
;exten => s-BUSY,1,Voicemail(b${ARG1}) ; Voicemail Busy message
;exten => s-BUSY,2,Hangup()
;exten => _s-.,1,Voicemail(u${ARG1}) ; Voicemail Unavailable message
;exten => _s-.,2,Hangup()
; Neuer code....
exten => s-BUSY,1,Voicemail(b${ARG1},${DNID}) ; Voicemail Busy message
exten => s-BUSY,2,Hangup()
exten => _s-.,1,Voicemail(u${ARG1},${DNID}) ; Voicemail Unavailable message
exten => _s-.,2,Hangup()
Somit wird die Voicemail() funktion interpretiert als: Voicemail("u210|12345"). Wobei die jetzige Konfiguration alles nach dem "|" ignoriert und somit das System wie gehabt weiter funktioniert.
Nun allerdings müssen wir der app_voicemail.c ein wenig auf den Zahn.... :!: Schließlich soll sie die Nummer hinter einem "|" als Rufnummer in den Standardtext aufnehmen.
Dies erreichen wir mit diesem Patch (Code ist GPL):
Code:
12a13,14
>
> /* vmid patch: Oliver Welter <[email protected]> */
1114c1116
< static int invent_message(struct ast_channel *chan, char *context, char *ext, int busy, char *ecodes)
---
> static int invent_message(struct ast_channel *chan, char *context, char *ext, int busy, char *ecodes, char *toldnum)
1133c1135,1144
< res = ast_say_digit_str(chan, ext, ecodes, chan->language);
---
> if (!toldnum)
> {
> ast_log(LOG_VERBOSE, "No vmid override. Using '%s' as vmid\n", ext);
> res = ast_say_digit_str(chan, ext, ecodes, chan->language);
> }
> else
> {
> ast_log(LOG_VERBOSE, "Got override. Using '%s' as vm-identifier\n", toldnum);
> res = ast_say_digit_str(chan, toldnum, ecodes, chan->language);
> }
1298c1309
< static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int busy, int unavail)
---
> static int leave_voicemail(struct ast_channel *chan, char *ext, int silent, int busy, int unavail, char *toldnum)
1385c1396
< res = invent_message(chan, vmu->context, ext, busy, ecodes);
---
> res = invent_message(chan, vmu->context, ext, busy, ecodes, toldnum);
2318c2329
< cmd=leave_voicemail(chan,username,0,0,0);
---
> cmd=leave_voicemail(chan,username,0,0,0, NULL);
3720a3732
> char * tmp2, *toldnum;
3734c3746,3753
< ext = tmp;
---
>
> ast_log(LOG_DEBUG, "Got data token '%s'\n",tmp);
> tmp2 = strtok(tmp, "|");
> ext = tmp2;
> tmp2 = strtok(NULL, "|");
> toldnum = tmp2;
>
> //ext = tmp;
3748c3767,3768
< res = leave_voicemail(chan, ext, silent, busy, unavail);
---
>
> res = leave_voicemail(chan, ext, silent, busy, unavail, toldnum);
4567c4587
< leave_voicemail(chan, num, 1, 0, 1);
---
> leave_voicemail(chan, num, 1, 0, 1, NULL);
Wir kopieren einfach den obigen Inhalt in die Datei app_voicemail.patch und kopieren diese in unser Asterisk-src Unterverzeichnis apps. Nun geben wir ein cat app_voicemail.patch | patch app_voicemail.c und wechseln ins Asterisk-src Verzeichnis.
:arrow: Nun wird Asterisk angehalten!!!
Eingabe: make
:idea: Nun die Datei apps/app_voicemail.so ins Asterisk modules Verzeichnis kopieren (Sometimes /usr/lib/asterisk/modules) und Asterisk neu starten.
Rufen wir nun die externe Nummer 12345 an, an dem sich die Voicemailbox 210 befindet, so meldet diese sich mit "blablabla Teilnehmer 12345 ist nicht erreichbar..."
BTW: Die Ansage kann nun beliebig durch austauschen der ${DNID} Variablen geändert werden.
Gruß AreaZ