Benutzer-Werkzeuge

Webseiten-Werkzeuge


doku:asteriskdoku

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen der Seite angezeigt.


doku:asteriskdoku [2010-07-04 08:32] (aktuell) – angelegt - Externe Bearbeitung 127.0.0.1
Zeile 1: Zeile 1:
 +======  Asterisk Dokumentation  ======
  
 +Mini-HowTos von [[/ueber_kfr|Klaus Franken]]
 +
 +
 +===== Sammelruf auf mehrere SIP-Clients  =====
 +
 +Es sollen mehrere SIP-Clients gleichzeitig bei einem Anruf klingeln, wo als erstes der Anruf entgegengenommen wird, hat die Leitung und die anderen Telefone hören auf zu klingeln.
 +Die SIP-Clients können auch an verschiedenen externen Standorten sein, solange sie Zugriff zum Asterisk-Server haben.
 +
 +Das Problem: Selbstverständlich könnte man bei einem SIP-Account mehrere Telefone mit denselben SIP-Daten registrieren lassen. Aber in der Praxis hat sich gezeigt, dass es ungewiss ist, ob sich die Registierungen nicht untereinander stören. Im Klartext: es klingelt zufeälligerweise das Telefon, was sich zuletzt registriert hat. Ausserdem könnte man die einzelnen Apparate nicht mehr einzeln anklingeln oder man müsste an jedem Apparat mehrere SIP-Accounts eintragen (was nicht immer geht und womit man die Flexibilität verliert das über Asterisk selbst zu konfigurieren).
 +
 +Die Lösung:
 +  *  es wird pro Apparat ein SIP-Account definiert, z.B. 1000 und 1001. Damit hat man also Apparate-Nummern.
 +    *  vi /etc/asterisk/sip.conf:
 +  <code>
 +[1000]
 +callerid=Klaus Franken am App. 1000 <1000>   ; überschreibt name des sip clients
 +type=friend
 +username=1000
 +secret=geheim
 +host=dynamic
 +context=default
 +nat=yes
 +canreinvite=no ; kein RTP direkt
 +mailbox=1000,9999
 +
 +[1001]
 +callerid=Klaus Franken am App. 1001 <1001>   ; überschreibt name des sip clients
 +type=friend
 +username=1001
 +secret=geheim2
 +host=dynamic
 +context=default
 +nat=yes
 +canreinvite=no ; kein RTP direkt
 +mailbox=1001,9999
 +</code>
 +      *  Hinweis: hier ist sogar noch definiert, dass dieser Apparat für mehrere Nummer die Mailbox anzeigen lassen soll (siehe MWI).
 +    *  vi /etc/asterisk/extension.conf:
 +  <code>
 +; alle 4 stelligen Nr. intern betrachten
 +exten => _XXXX,1,Dial(SIP/${EXTEN},15,tT)
 +exten => _XXXX,2,Wait(1)
 +exten => _XXXX,3,Voicemail(${EXTEN})
 +exten => _XXXX,4,Hangup
 +</code>
 +      *  alle 4 stelligen Nummern werden an den SIP Account mit diesem Namen durchgestellt (oder zum Voicemail-System für den Apparat weitergeleitet).
 +
 +  *  man definiert als zweites Teilnehmernummer, z.B. 9999, die man auf die Apparate verteilt.
 + <code>
 +; Sammelruf direkt auf mehrere SIPs
 +exten => 9999,1,Ringing
 +exten => 9999,2,Set(LANGUAGE()=de)
 +exten => 9999,3,Dial(SIP/1000&SIP/1001,20)
 +exten => 9999,4,Wait(1)
 +exten => 9999,5,Voicemail(${EXTEN})
 +exten => 9999,6,Hangup
 +</code>
 +    *  Diese Definition kann in der Extensions.conf vor oder nach den obigen Zeilen für <nowiki>_XXXX</nowiki> stehen das die <nowiki>9999</nowiki> spezieller ist und daher Priorität vor der anderen Anweisung hat.
 +
 +==== Benutzerabfrage: Voicemail oder Weiterleitung aufs Handy  ====
 +
 +Aufgabe: der Teilnehmer für Notfälle immer erreichbar sein, aber im Normalfall soll der Anrufer eine Nachricht auf dem Anrufbeantworter hinterlassen. Es wird per Tastendruck eine Weiterleitung auf eine Telefonnummer veranlasst, die dem Anrufer garnicht bekannt ist. Das könnte z.B. die Handy-Nummer der Teilnehmers sein.
 +
 +Lösung:
 +  *  Es wird Ansage aufgenommen mit dem Text ``...bei Bedarf können Sie ein Rufumleitung aufs Handy veranlassen. Drücken Sie dazu jetzt an Ihrem Telefon die Nummer 8. Ansonsten hinterlassen Sie bitte nach dem piepton eine Nachricht ...``
 +  *  Diese Ansage wird unter <nowiki>/var/lib/asterisk/sounds/</nowiki> oder <nowiki>/var/lib/asterisk/sounds/de</nowiki> z.B. in der Datei <nowiki>msg-voice.gsm</nowiki> abgelegt.
 +  *  in der extensions.conf wird für diese spezielle Zielrufnummer (z.B. 9999) hinterlegt (Erweiterung vom Beispiel oben):
 + <code>
 +exten => 9999,1,Ringing
 +exten => 9999,2,Set(LANGUAGE()=de)
 +exten => 9999,3,Dial(SIP/1000&SIP/1001,20)
 +exten => 9999,4,Goto(menu9999,s,1)
 +
 +[menu9999]
 +exten => s,1,ResponseTimeout,         ; Set Response Timeout
 +exten => s,2,Answer
 +exten => s,3,Wait(2)
 +exten => s,4,Background(msg-voice)
 +exten => 8,1,Playback(transfer)
 +exten => 8,2,SetCallerID(StrukturPunkt/Franken)
 +exten => 8,3,Dial(SIP/0172xxxxxx@dusnet-out)
 +exten => 8,4,Hangup
 +exten => t,1,Voicemail(9999)            ; timeout: Default
 +exten => t,2,Hangup
 +exten => i,1,Background(KFRmsg0006)     ; incorrect: Fange neu an
 +</code>
 +===== automatisch wählen, callfile  =====
 +
 +Aufgabe: Anstatt eine Nummer manuell am Telefonapparat zu wählen, soll der Asterisk-Server die Verbindung herstellen, der Anwender braucht nur den Hörer abzunehmen.
 +
 +Unter <nowiki>/var/spool/asterisk/outgoing/</nowiki> eine Datei erstellen, z.B. <nowiki>1000-97797117</nowiki>
 +<code>
 +Channel: SIP/1000
 +Callerid: Wähle 97797117 <97797117>
 +Context: default
 +Extension: 97797117
 +MaxRetries: 0
 +Retrytime: 3
 +WaitTime: 5
 +Priority: 1
 +</code>
 +
 +Erklärung:
 +  *  Channel: Dieses SIP-Telefon wird angerufen und bei Erfolg wird dann die externe Verbindung hergestellt.
 +    *  Es geht auch <nowiki>Local/9999</nowiki>, das kann dann z.B. ein Sammelruf sein.
 +  *  Callerid: Das wird dem Sip-Telefon als Nr. angezeigt. Man kann z.B. die Zielnr. angeben, dann klappt ein Rückruf am Telefon. In <> ist die Nr. das andere Text. Zeichenssatz: latin1
 +  *  Context, Extension: in diesem Context wird diese Extension gestartet, also diese Nummer angerufen. Das ergibt das gleiche, als wenn an diesem Telefon diese Nr. direkt gewählt wird.
 +  *  MaxRetries: so oft wird ggf. Wiederholt. Hierfür am besten 0 (nur ein Versuch).
 +  *  WaitTime: Solange klingelt es am SIP-Telefon.
 +
 +Getestet mit Asterisk 1.0 und 1.2
 +
 +Mit dem folgenden Programm <nowiki>dial</nowiki> kann das Wählbefehl (genauer: das Spoolfile)  automatisch erzeugt werden:
 +
 +<code>
 +/* !/bin/sh */
 +/*  (c) 2006, 2007 Klaus.Franken@StrukturPunkt.de */
 +
 +SPOOLDIR=/var/spool/asterisk/outgoing
 +SELF=9999
 +NR="$1$2$3$4$5$6$7$8$9"
 +CALLNR=`echo $NR | perl -ne '$_ =~ s?[\(\)/-\s]??g; print $_;'`
 +SPOOLFILE="$SELF-$CALLNR.$$"
 +
 +if [-z "$NR" ]; then
 +    echo "keine Nr. angegbene" >&2
 +    exit 1
 +fi
 +
 +echo "
 +Channel: Local/$SELF
 +Callerid: Waehle $NR <$CALLNR>
 +Context: default 
 +Extension: $CALLNR
 +MaxRetries: 0
 +Retrytime: 3
 +WaitTime: 15
 +Priority: 1 
 +" > $SPOOLDIR/$SPOOLFILE
 +</code>
 +
 +Anpassung:
 +  *  SELF: die lokale Nummer die angerufen und dann verbunden werden soll.
 +
 +Die Zielrufnummer kann in einem (fast) beliebigen Format sein, z.B. <nowiki>0911 / 123 456-7</nowiki>
 +
 +Das Script muss ausführbar sein und der Benutzer muss Schreibrechte in <nowiki>/var/spool/asterisk/outgoing</nowiki> haben. Gestartet wird der Wähvorgang mit (Beispiel): <nowiki>dial 123456</nowiki>
 +==== Alternative: Adressbuch-Plugin ====
 +  * Client: http://www.rho.cc/click/
 +  * Server: http://www.rho.cc/click/Setup/ServerSetup.php
 +  * [[/intern/AsteriskC2D]]
 +
 +===== Makeln, Weiterleiten  =====
 +  *  /etc/asterisk/features.conf aktivieren:
 + <code>
 +[featuremap]
 +/* blindxfer => #1                ; Blind transfer */
 +disconnect => *0                ; Disconnect
 +atxfer => *2                    ; Attended transfer
 +</code>
 +  *  Beispiel: A spricht mit B, soll aber mit C
 +  *  Während Gespräch:
 +    *  B drückt: <nowiki>*2</nowiki> und sofort die Zielnummer eingeben
 +    *  B legt auf : A spricht mit C
 +    *  B drückt: <nowiki>*0</nowiki> A spricht wieder mit B
 +===== mit VoIP-Provier IAX sprechen  =====
 +
 +Beispiel Simply-Connect.de
 +
 +  *  iax.conf
 + <code>
 +register => 100398976:SECRET@iax.simply-connect.de
 +
 +...
 +
 +[100398976]
 +type=user
 +username=100398976
 +host=62.112.132.111
 +secret=SECRET
 +</code>
 +
 +  *  extensions.conf
 + <code>
 +; rauswählen:
 +exten => _0XXXXX.,n,Dial(IAX2/100398976:SECRET@iax.simply-connect.de/${EXTEN})
 +
 +...
 +
 +; Anruf (aus iax.conf) an SIP-Account leiten:
 +exten => 100398976,1,SetCallerID(IAX)
 +exten => 100398976,n,Dial(SIP/7099)
 +exten => 100398976,n,Hangup
 +
 +; Anruf (aus iax.conf) an SIP-Account leiten:
 +; besser als 1. Bsp.: kein Ueberschrieben der CallerID, im dialplan so als wäre gleich der Account 1005 angerufen worden (Goto)
 +exten => 10030811201,1,Goto(1005,1)
 +exten => 10030811201,n,Hangup
 +</code>
 +
 +  * Debuggen mit: <code>
 +iax2 set debug
 +...
 +iax2 set debug off
 +</code>
 +
 +===== Loggen: messages wie in CLI  =====
 +  *  asterisk -rx "set verbose 9" # Verbose-Level hochsetzen
 +  *  <nowiki>/etc/asterisk/logger.conf</nowiki>
 +    *  <nowiki>messages => notice,warning,error,verbose</nowiki>
 +===== Voicemail in IMAP-Server speichern =====
 +
 +Ziel: Abfrage über E-Mail Client **und** Telefon, ohne Verdoppelung der Voicemail.
 +
 +Geht mit UW-IMAP Toolkit. :?: nur mit UW-IMAP Server ? :?:
 +
 +In ''voicemail.conf'': ''imapserver=localhost'' (und weitere...)
 +
 +Links:
 +  * http://asteriskcookbook.com/wiki/index.php/Storing_Voicemail_on_an_IMAP_server
 +  * [[snom-tipps#snom_groupware_kopplung]] PDF, 4. Seite
 +===== Wartemusik, Music-on-hold =====
 +  * lame installieren:
 +    * wget http://sourceforge.net/projects/lame/files/lame/3.98.2/lame-398-2.tar.gz/download
 +    * configure...make... make install
 +  * sox installieren:
 +    * apt-get install sox libsox-fmt-gsm
 +  * mkdir /var/lib/asterisk/mohnative
 +  * cd !$
 +  * %%lame --decode ../mohmp3/test.mp3 test.wav%%
 +  * %%sox -V -v 0.4 test.wav -r 8000 -c 1 test.raw%%
 +    * %%-v%%: Volume/Lautstärke auf 40% setzen
 +  * %%sox -V test.wav -r 8000 -c 1 test.gsm%%
 +  * /etc/asterisk/musiconhold.conf <code>
 +[default]
 +mode=files
 +directory=/var/lib/asterisk/mohnative
 +random=yes
 +</code>
 +  * asterisk restart
 +    * besser in CLI: ''moh reload''
 +
 +Freie MP3s:
 +  * http://www.classiccat.net/
 +
 +===== Registrierung checken =====
 +
 +Wenn das folgende Script eine Ausgabe liefert, stimmt irgendwas mit der SIP- oder IAX-Registrierung beim VoIP-Provider nicht. 
 +
 +<code>
 +#!/bin/sh
 +
 +# checke dass registry-Einträge auch wirklich "Registered" sind
 +
 +SIPREG=`/usr/sbin/asterisk -rx "sip show registry"`
 +IAXREG=`/usr/sbin/asterisk -rx "iax2 show registry"`
 +
 +
 +echo "$SIPREG" | while read HOST USERNAME REFRESH STATE TIME; do
 + if test $HOST = 'Host'; then
 + continue
 + fi
 + if test $STATE = 'Registered'; then
 + continue # OK
 + fi
 + echo "$HOST: $STATE"
 +done
 +
 +echo "$IAXREG" | while read HOST DNSMGR USERNAME PERCEIVED REFRESH STATE; do
 + if test $HOST = 'Host'; then
 + continue
 + fi
 + if test $STATE = 'Registered'; then
 + continue # OK
 + fi
 + echo "$HOST: $STATE"
 +done
 +</code>
 +
 +Das Script kann als Cronjob ausgeführt werden: ''/etc/cron.d/asterisk_check'' <code>
 +MAILTO=support@meine_firma.deee
 +*/15 * * * * root /usr/local/bin/asterisk_check_registry
 +</code>
 +
 +====== Links  ======
 +  *  http://www.ip-phone-forum.de/
 +  *  http://www.digium.com/en/supportcenter/documentation/viewdocs/asterisk_handbook
 +  *  http://www.das-asterisk-buch.de
 +  *  Vortrag Chemnitzer Linux Tage 2007: {{AsteriskEinsatzChemnitz07.pdf}}
 +  *  [[snom-tipps]]

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki