Einrichten von Asterisk 14.x unter CentOS7

Asterisk Logo Asterisk ist eine OpenSource Telekommunkationssystem, entwickelt von Marc Spencer / Digium für Linux Systeme.

Hinweise zum Release 14 finden sich auf der Dokumentationsseite von Asterisk. Alle Neuerungen des aktuellen Release finden sich auf der Seite New in 14. Die Seite Asterisk 14 Command Reference beinhaltet weitere Unterseiten zu den Kommandos und APIs.

Die Installation von Asterisk unetr CentOS 7 könnte man an Hand der Programm-Sourcen vornehmen. Dazu müsste auf dem VoIP-Server aber unter anderem Entwicklungstools wie „gcc & Coinstalliert werden; was natürlich auf einem Produktivsystem mehr als zweifelhaft ist und aus Sicherheitsüberlegungen heraus tunlichst vermieden werden sollte.

Als Alternative bedienen wir uns daher eines aktuell gepfegten Repositories, welches uns für CentOS 7 aktuelle und gepatchte RPM-Pakete zur Verfügung stellen kann. Eines dieser Repository ist von Tucny.

Priorities installieren

Als erstes installieren wird das Paket priorities.

 # yum install yum-priorities -y

Anschließend prüfen wir, ob in der Konfigurationsdatei /etc/yum/pluginconf.d/priorities.conf folgende Zeilen eingetragen sind:

 [main]
 enabled = 1

Dazu benutzen wir z.B. den Editor vim:

# vim /etc/yum/pluginconf.d/priorities.conf

Anschliessend tragen wir die differenzierten Prioritäten in der Konfig-Datei /etc/yum.repos.d/CentOS-Base.repo nach:

 vim /etc/yum.repos.d/CentOS-Base.repo

Interessant ist für uns hier jeweils die Zeile:

 priority=n

n ist hierbei eine Zahl zwischen 1 und 99.

Den Quellen [base], [updates], [extras] geben wir die priority=1.
[centosplus], [contrib] erhält die priority=2.

Den 3rd party repositories, wie z.B. epel geben wir nun eine Priorität größer-gleich „10“, also z.B. priority=10.

ast.tucny.com

Nun holen wir uns die Repo-Datei auf unseren Server; zuvor wechseln wir aber noch in das Verzeichnis /etc/yum.repos.d/.

 # cd /etc/yum.repos.d/
 # wget https://ast.tucny.com/repo/tucny-asterisk.repo

Nun könnnen wir noch die Priorität unserer neuen Programmpeketquelle ast.tucny.com anpassen:

 # vim /etc/yum.repos.d/tucny-asterisk.repo
/etc/yum.repos.d/tucny-asterisk.repo
# tucny-asterisk.repo
# 
# This repo file contains 4 repositories, all disabled by default.
# If you want to use any of the Asterisk release, you should enable
# the repository for that version and the asterisk-common repository
# by setting enabled=1.
#
# All packages are signed, so it is recommended to manually import
# the key prior to enabling the repositorys, this can by done by
# running:
# rpm --import https://ast.tucny.com/repo/RPM-GPG-KEY-dtucny
#
 
[asterisk-common]
name=Asterisk Common Requirement Packages @ tucny.com
baseurl=https://ast.tucny.com/repo/asterisk-common/el$releasever/$basearch/
#mirrorlist=https://ast.tucny.com/mirrorlist.php?release=$releasever&arch=$basearch&repo=asterisk-common
enabled=1
gpgcheck=1
gpgkey=https://ast.tucny.com/repo/RPM-GPG-KEY-dtucny
priority=5
 
[asterisk-1.8]
name=Asterisk 1.8 Packages @ tucny.com
#baseurl=https://ast.tucny.com/repo/asterisk-1.8/el$releasever/$basearch/
mirrorlist=https://ast.tucny.com/mirrorlist.php?release=$releasever&arch=$basearch&repo=asterisk-1.8
enabled=0
gpgcheck=1
gpgkey=https://ast.tucny.com/repo/RPM-GPG-KEY-dtucny
priority=5
 
[asterisk-11]
name=Asterisk 11 Packages @ tucny.com
#baseurl=https://ast.tucny.com/repo/asterisk-11/el$releasever/$basearch/
mirrorlist=https://ast.tucny.com/mirrorlist.php?release=$releasever&arch=$basearch&repo=asterisk-11
enabled=0
gpgcheck=1
gpgkey=https://ast.tucny.com/repo/RPM-GPG-KEY-dtucny
priority=5
 
[asterisk-13]
name=Asterisk 13 Packages @ tucny.com
#baseurl=https://ast.tucny.com/repo/asterisk-13/el$releasever/$basearch/
mirrorlist=https://ast.tucny.com/mirrorlist.php?release=$releasever&arch=$basearch&repo=asterisk-13
enabled=0
gpgcheck=1
gpgkey=https://ast.tucny.com/repo/RPM-GPG-KEY-dtucny
priority=5
 
[asterisk-14]
name=Asterisk 14 Packages @ tucny.com
baseurl=https://ast.tucny.com/repo/asterisk-14/el$releasever/$basearch/
#mirrorlist=https://ast.tucny.com/mirrorlist.php?release=$releasever&arch=$basearch&repo=asterisk-14
enabled=1
gpgcheck=1
gpgkey=https://ast.tucny.com/repo/RPM-GPG-KEY-dtucny
priority=5

Hier passen wir nun die Eingangs erwähnte Priorität an, z.B. priority=5 und im Falle von Asterisk 14 die zugehörigen Zeilen nach.

Abschliessend installieren wir den GPG Schlüssel des tucny-asterisk-repos:

 # rpm --import https://ast.tucny.com/repo/RPM-GPG-KEY-dtucny

Nun können wir testen, ob die Konfigurationsanpassung den gewünschten Erfolg bringt. Dazu fragen wir ab, ob es ein Paket asterisk gibt und was dies ggf. mitbringt.

 # yum info asterisk
Loaded plugins: changelog, priorities
323 packages excluded due to repository priority protections
Available Packages
Name        : asterisk
Arch        : x86_64
Version     : 14.2.1
Release     : 1.el7.centos
Size        : 3.8 M
Repo        : asterisk-14/7/x86_64
Summary     : The Open Source PBX
URL         : https://www.asterisk.org/
License     : GPLv2
Description : Asterisk is a complete PBX in software. It runs on Linux and provides
            : all of the features you would expect from a PBX and more. Asterisk
            : does voice over IP in three protocols, and can interoperate with
            : almost all standards-based telephony equipment using relatively
            : inexpensive hardware.

asterisk

Nachdem unsere Vorbereitungen erst einmal abgeschlossen sind, können wir uns nun daran machen, das Grundpaket Asterisk zu installieren.

 # yum install asterisk -y

Den recht umfangreichen Inhalt des RPM-Paketes können wir uns mit Hilfe des folgenden Aufrufs bei Interesse anzeigen lassen.

 # rpm -qil asterisk
Name        : asterisk
Version     : 14.2.1
Release     : 1.el7.centos
Architecture: x86_64
Install Date: Wed 18 Jan 2017 03:08:52 PM CET
Group       : Applications/Internet
Size        : 14393335
License     : GPLv2
Signature   : RSA/SHA1, Thu 08 Dec 2016 11:58:05 PM CET, Key ID ccf40e16b9a46fa9
Source RPM  : asterisk-14.2.1-1.el7.centos.src.rpm
Build Date  : Thu 08 Dec 2016 11:57:54 PM CET
Build Host  : olive.ph.tucny.com
Relocations : (not relocatable)
URL         : https://www.asterisk.org/
Summary     : The Open Source PBX
Description :
Asterisk is a complete PBX in software. It runs on Linux and provides
all of the features you would expect from a PBX and more. Asterisk
does voice over IP in three protocols, and can interoperate with
almost all standards-based telephony equipment using relatively
inexpensive hardware.
/etc/asterisk
/etc/asterisk/acl.conf
/etc/asterisk/adsi.conf
/etc/asterisk/agents.conf
/etc/asterisk/alarmreceiver.conf
/etc/asterisk/amd.conf
/etc/asterisk/ari.conf
/etc/asterisk/asterisk.adsi
/etc/asterisk/asterisk.conf
/etc/asterisk/ccss.conf
/etc/asterisk/cdr.conf
/etc/asterisk/cdr_custom.conf
/etc/asterisk/cdr_manager.conf
/etc/asterisk/cdr_syslog.conf
/etc/asterisk/cel.conf
/etc/asterisk/cel_custom.conf
/etc/asterisk/cli.conf
/etc/asterisk/cli_aliases.conf
/etc/asterisk/cli_permissions.conf
/etc/asterisk/codecs.conf
/etc/asterisk/confbridge.conf
/etc/asterisk/dnsmgr.conf
/etc/asterisk/dsp.conf
/etc/asterisk/dundi.conf
/etc/asterisk/enum.conf
/etc/asterisk/extconfig.conf
/etc/asterisk/extensions.conf
/etc/asterisk/features.conf
/etc/asterisk/followme.conf
/etc/asterisk/http.conf
/etc/asterisk/indications.conf
/etc/asterisk/logger.conf
/etc/asterisk/manager.conf
/etc/asterisk/modules.conf
/etc/asterisk/musiconhold.conf
/etc/asterisk/muted.conf
/etc/asterisk/osp.conf
/etc/asterisk/phoneprov.conf
/etc/asterisk/queuerules.conf
/etc/asterisk/queues.conf
/etc/asterisk/res_parking.conf
/etc/asterisk/res_stun_monitor.conf
/etc/asterisk/resolver_unbound.conf
/etc/asterisk/rtp.conf
/etc/asterisk/say.conf
/etc/asterisk/sla.conf
/etc/asterisk/smdi.conf
/etc/asterisk/sorcery.conf
/etc/asterisk/stasis.conf
/etc/asterisk/statsd.conf
/etc/asterisk/telcordia-1.adsi
/etc/asterisk/udptl.conf
/etc/asterisk/users.conf
/etc/asterisk/vpb.conf
/etc/logrotate.d/asterisk
/run/asterisk
/usr/lib/systemd/system/asterisk.service
/usr/lib/tmpfiles.d/asterisk.conf
/usr/lib64/asterisk
/usr/lib64/asterisk/modules
/usr/lib64/asterisk/modules/app_adsiprog.so
/usr/lib64/asterisk/modules/app_agent_pool.so
/usr/lib64/asterisk/modules/app_alarmreceiver.so
/usr/lib64/asterisk/modules/app_amd.so
/usr/lib64/asterisk/modules/app_authenticate.so
/usr/lib64/asterisk/modules/app_bridgeaddchan.so
/usr/lib64/asterisk/modules/app_bridgewait.so
/usr/lib64/asterisk/modules/app_cdr.so
/usr/lib64/asterisk/modules/app_celgenuserevent.so
/usr/lib64/asterisk/modules/app_chanisavail.so
/usr/lib64/asterisk/modules/app_channelredirect.so
/usr/lib64/asterisk/modules/app_chanspy.so
/usr/lib64/asterisk/modules/app_confbridge.so
/usr/lib64/asterisk/modules/app_controlplayback.so
/usr/lib64/asterisk/modules/app_db.so
/usr/lib64/asterisk/modules/app_dial.so
/usr/lib64/asterisk/modules/app_dictate.so
/usr/lib64/asterisk/modules/app_directed_pickup.so
/usr/lib64/asterisk/modules/app_disa.so
/usr/lib64/asterisk/modules/app_dumpchan.so
/usr/lib64/asterisk/modules/app_echo.so
/usr/lib64/asterisk/modules/app_exec.so
/usr/lib64/asterisk/modules/app_externalivr.so
/usr/lib64/asterisk/modules/app_followme.so
/usr/lib64/asterisk/modules/app_forkcdr.so
/usr/lib64/asterisk/modules/app_getcpeid.so
/usr/lib64/asterisk/modules/app_image.so
/usr/lib64/asterisk/modules/app_macro.so
/usr/lib64/asterisk/modules/app_milliwatt.so
/usr/lib64/asterisk/modules/app_mixmonitor.so
/usr/lib64/asterisk/modules/app_morsecode.so
/usr/lib64/asterisk/modules/app_nbscat.so
/usr/lib64/asterisk/modules/app_originate.so
/usr/lib64/asterisk/modules/app_playback.so
/usr/lib64/asterisk/modules/app_playtones.so
/usr/lib64/asterisk/modules/app_privacy.so
/usr/lib64/asterisk/modules/app_queue.so
/usr/lib64/asterisk/modules/app_read.so
/usr/lib64/asterisk/modules/app_readexten.so
/usr/lib64/asterisk/modules/app_record.so
/usr/lib64/asterisk/modules/app_saycounted.so
/usr/lib64/asterisk/modules/app_sayunixtime.so
/usr/lib64/asterisk/modules/app_senddtmf.so
/usr/lib64/asterisk/modules/app_sendtext.so
/usr/lib64/asterisk/modules/app_setcallerid.so
/usr/lib64/asterisk/modules/app_sms.so
/usr/lib64/asterisk/modules/app_softhangup.so
/usr/lib64/asterisk/modules/app_speech_utils.so
/usr/lib64/asterisk/modules/app_stack.so
/usr/lib64/asterisk/modules/app_stasis.so
/usr/lib64/asterisk/modules/app_statsd.so
/usr/lib64/asterisk/modules/app_system.so
/usr/lib64/asterisk/modules/app_talkdetect.so
/usr/lib64/asterisk/modules/app_test.so
/usr/lib64/asterisk/modules/app_transfer.so
/usr/lib64/asterisk/modules/app_url.so
/usr/lib64/asterisk/modules/app_userevent.so
/usr/lib64/asterisk/modules/app_verbose.so
/usr/lib64/asterisk/modules/app_waitforring.so
/usr/lib64/asterisk/modules/app_waitforsilence.so
/usr/lib64/asterisk/modules/app_waituntil.so
/usr/lib64/asterisk/modules/app_while.so
/usr/lib64/asterisk/modules/app_zapateller.so
/usr/lib64/asterisk/modules/bridge_builtin_features.so
/usr/lib64/asterisk/modules/bridge_builtin_interval_features.so
/usr/lib64/asterisk/modules/bridge_holding.so
/usr/lib64/asterisk/modules/bridge_native_rtp.so
/usr/lib64/asterisk/modules/bridge_simple.so
/usr/lib64/asterisk/modules/bridge_softmix.so
/usr/lib64/asterisk/modules/cdr_csv.so
/usr/lib64/asterisk/modules/cdr_custom.so
/usr/lib64/asterisk/modules/cdr_manager.so
/usr/lib64/asterisk/modules/cdr_syslog.so
/usr/lib64/asterisk/modules/cel_custom.so
/usr/lib64/asterisk/modules/cel_manager.so
/usr/lib64/asterisk/modules/chan_bridge_media.so
/usr/lib64/asterisk/modules/chan_rtp.so
/usr/lib64/asterisk/modules/codec_a_mu.so
/usr/lib64/asterisk/modules/codec_adpcm.so
/usr/lib64/asterisk/modules/codec_alaw.so
/usr/lib64/asterisk/modules/codec_g722.so
/usr/lib64/asterisk/modules/codec_g726.so
/usr/lib64/asterisk/modules/codec_gsm.so
/usr/lib64/asterisk/modules/codec_ilbc.so
/usr/lib64/asterisk/modules/codec_lpc10.so
/usr/lib64/asterisk/modules/codec_resample.so
/usr/lib64/asterisk/modules/codec_speex.so
/usr/lib64/asterisk/modules/codec_ulaw.so
/usr/lib64/asterisk/modules/format_g719.so
/usr/lib64/asterisk/modules/format_g723.so
/usr/lib64/asterisk/modules/format_g726.so
/usr/lib64/asterisk/modules/format_g729.so
/usr/lib64/asterisk/modules/format_gsm.so
/usr/lib64/asterisk/modules/format_h263.so
/usr/lib64/asterisk/modules/format_h264.so
/usr/lib64/asterisk/modules/format_ilbc.so
/usr/lib64/asterisk/modules/format_jpeg.so
/usr/lib64/asterisk/modules/format_ogg_speex.so
/usr/lib64/asterisk/modules/format_ogg_vorbis.so
/usr/lib64/asterisk/modules/format_pcm.so
/usr/lib64/asterisk/modules/format_siren14.so
/usr/lib64/asterisk/modules/format_siren7.so
/usr/lib64/asterisk/modules/format_sln.so
/usr/lib64/asterisk/modules/format_vox.so
/usr/lib64/asterisk/modules/format_wav.so
/usr/lib64/asterisk/modules/format_wav_gsm.so
/usr/lib64/asterisk/modules/func_aes.so
/usr/lib64/asterisk/modules/func_audiohookinherit.so
/usr/lib64/asterisk/modules/func_base64.so
/usr/lib64/asterisk/modules/func_blacklist.so
/usr/lib64/asterisk/modules/func_callcompletion.so
/usr/lib64/asterisk/modules/func_callerid.so
/usr/lib64/asterisk/modules/func_cdr.so
/usr/lib64/asterisk/modules/func_channel.so
/usr/lib64/asterisk/modules/func_config.so
/usr/lib64/asterisk/modules/func_cut.so
/usr/lib64/asterisk/modules/func_db.so
/usr/lib64/asterisk/modules/func_devstate.so
/usr/lib64/asterisk/modules/func_dialgroup.so
/usr/lib64/asterisk/modules/func_dialplan.so
/usr/lib64/asterisk/modules/func_enum.so
/usr/lib64/asterisk/modules/func_env.so
/usr/lib64/asterisk/modules/func_extstate.so
/usr/lib64/asterisk/modules/func_frame_trace.so
/usr/lib64/asterisk/modules/func_global.so
/usr/lib64/asterisk/modules/func_groupcount.so
/usr/lib64/asterisk/modules/func_hangupcause.so
/usr/lib64/asterisk/modules/func_holdintercept.so
/usr/lib64/asterisk/modules/func_iconv.so
/usr/lib64/asterisk/modules/func_jitterbuffer.so
/usr/lib64/asterisk/modules/func_lock.so
/usr/lib64/asterisk/modules/func_logic.so
/usr/lib64/asterisk/modules/func_math.so
/usr/lib64/asterisk/modules/func_md5.so
/usr/lib64/asterisk/modules/func_module.so
/usr/lib64/asterisk/modules/func_periodic_hook.so
/usr/lib64/asterisk/modules/func_pitchshift.so
/usr/lib64/asterisk/modules/func_presencestate.so
/usr/lib64/asterisk/modules/func_rand.so
/usr/lib64/asterisk/modules/func_realtime.so
/usr/lib64/asterisk/modules/func_sha1.so
/usr/lib64/asterisk/modules/func_shell.so
/usr/lib64/asterisk/modules/func_sorcery.so
/usr/lib64/asterisk/modules/func_speex.so
/usr/lib64/asterisk/modules/func_sprintf.so
/usr/lib64/asterisk/modules/func_srv.so
/usr/lib64/asterisk/modules/func_strings.so
/usr/lib64/asterisk/modules/func_sysinfo.so
/usr/lib64/asterisk/modules/func_talkdetect.so
/usr/lib64/asterisk/modules/func_timeout.so
/usr/lib64/asterisk/modules/func_uri.so
/usr/lib64/asterisk/modules/func_version.so
/usr/lib64/asterisk/modules/func_volume.so
/usr/lib64/asterisk/modules/pbx_config.so
/usr/lib64/asterisk/modules/pbx_dundi.so
/usr/lib64/asterisk/modules/pbx_loopback.so
/usr/lib64/asterisk/modules/pbx_realtime.so
/usr/lib64/asterisk/modules/pbx_spool.so
/usr/lib64/asterisk/modules/res_adsi.so
/usr/lib64/asterisk/modules/res_agi.so
/usr/lib64/asterisk/modules/res_ari.so
/usr/lib64/asterisk/modules/res_ari_applications.so
/usr/lib64/asterisk/modules/res_ari_asterisk.so
/usr/lib64/asterisk/modules/res_ari_bridges.so
/usr/lib64/asterisk/modules/res_ari_channels.so
/usr/lib64/asterisk/modules/res_ari_device_states.so
/usr/lib64/asterisk/modules/res_ari_endpoints.so
/usr/lib64/asterisk/modules/res_ari_events.so
/usr/lib64/asterisk/modules/res_ari_model.so
/usr/lib64/asterisk/modules/res_ari_playbacks.so
/usr/lib64/asterisk/modules/res_ari_recordings.so
/usr/lib64/asterisk/modules/res_ari_sounds.so
/usr/lib64/asterisk/modules/res_chan_stats.so
/usr/lib64/asterisk/modules/res_clialiases.so
/usr/lib64/asterisk/modules/res_clioriginate.so
/usr/lib64/asterisk/modules/res_convert.so
/usr/lib64/asterisk/modules/res_crypto.so
/usr/lib64/asterisk/modules/res_endpoint_stats.so
/usr/lib64/asterisk/modules/res_format_attr_celt.so
/usr/lib64/asterisk/modules/res_format_attr_g729.so
/usr/lib64/asterisk/modules/res_format_attr_h263.so
/usr/lib64/asterisk/modules/res_format_attr_h264.so
/usr/lib64/asterisk/modules/res_format_attr_ilbc.so
/usr/lib64/asterisk/modules/res_format_attr_opus.so
/usr/lib64/asterisk/modules/res_format_attr_silk.so
/usr/lib64/asterisk/modules/res_format_attr_siren14.so
/usr/lib64/asterisk/modules/res_format_attr_siren7.so
/usr/lib64/asterisk/modules/res_format_attr_vp8.so
/usr/lib64/asterisk/modules/res_http_media_cache.so
/usr/lib64/asterisk/modules/res_http_post.so
/usr/lib64/asterisk/modules/res_http_websocket.so
/usr/lib64/asterisk/modules/res_limit.so
/usr/lib64/asterisk/modules/res_manager_devicestate.so
/usr/lib64/asterisk/modules/res_manager_presencestate.so
/usr/lib64/asterisk/modules/res_monitor.so
/usr/lib64/asterisk/modules/res_musiconhold.so
/usr/lib64/asterisk/modules/res_mutestream.so
/usr/lib64/asterisk/modules/res_parking.so
/usr/lib64/asterisk/modules/res_phoneprov.so
/usr/lib64/asterisk/modules/res_realtime.so
/usr/lib64/asterisk/modules/res_rtp_asterisk.so
/usr/lib64/asterisk/modules/res_rtp_multicast.so
/usr/lib64/asterisk/modules/res_security_log.so
/usr/lib64/asterisk/modules/res_smdi.so
/usr/lib64/asterisk/modules/res_sorcery_astdb.so
/usr/lib64/asterisk/modules/res_sorcery_config.so
/usr/lib64/asterisk/modules/res_sorcery_memory.so
/usr/lib64/asterisk/modules/res_sorcery_memory_cache.so
/usr/lib64/asterisk/modules/res_sorcery_realtime.so
/usr/lib64/asterisk/modules/res_speech.so
/usr/lib64/asterisk/modules/res_srtp.so
/usr/lib64/asterisk/modules/res_stasis.so
/usr/lib64/asterisk/modules/res_stasis_answer.so
/usr/lib64/asterisk/modules/res_stasis_device_state.so
/usr/lib64/asterisk/modules/res_stasis_playback.so
/usr/lib64/asterisk/modules/res_stasis_recording.so
/usr/lib64/asterisk/modules/res_stasis_snoop.so
/usr/lib64/asterisk/modules/res_statsd.so
/usr/lib64/asterisk/modules/res_stun_monitor.so
/usr/lib64/asterisk/modules/res_timing_pthread.so
/usr/lib64/asterisk/modules/res_timing_timerfd.so
/usr/lib64/libasteriskssl.so
/usr/lib64/libasteriskssl.so.1
/usr/sbin/astcanary
/usr/sbin/astdb2sqlite3
/usr/sbin/asterisk
/usr/sbin/astgenkey
/usr/sbin/astman
/usr/sbin/astversion
/usr/sbin/autosupport
/usr/sbin/check_expr
/usr/sbin/check_expr2
/usr/sbin/muted
/usr/sbin/rasterisk
/usr/sbin/smsq
/usr/sbin/stereorize
/usr/sbin/streamplayer
/usr/share/asterisk
/usr/share/asterisk/agi-bin
/usr/share/asterisk/documentation
/usr/share/asterisk/documentation/appdocsxml.dtd
/usr/share/asterisk/documentation/appdocsxml.xslt
/usr/share/asterisk/documentation/core-en_US.xml
/usr/share/asterisk/documentation/thirdparty
/usr/share/asterisk/images
/usr/share/asterisk/images/asterisk-intro.jpg
/usr/share/asterisk/images/kpad2.jpg
/usr/share/asterisk/keys
/usr/share/asterisk/moh
/usr/share/asterisk/phoneprov
/usr/share/asterisk/rest-api
/usr/share/asterisk/rest-api/applications.json
/usr/share/asterisk/rest-api/asterisk.json
/usr/share/asterisk/rest-api/bridges.json
/usr/share/asterisk/rest-api/channels.json
/usr/share/asterisk/rest-api/deviceStates.json
/usr/share/asterisk/rest-api/endpoints.json
/usr/share/asterisk/rest-api/events.json
/usr/share/asterisk/rest-api/mailboxes.json
/usr/share/asterisk/rest-api/playbacks.json
/usr/share/asterisk/rest-api/recordings.json
/usr/share/asterisk/rest-api/resources.json
/usr/share/asterisk/rest-api/sounds.json
/usr/share/asterisk/sounds
/usr/share/asterisk/static-http
/usr/share/asterisk/static-http/ajamdemo.html
/usr/share/asterisk/static-http/appdocsxml.xslt
/usr/share/asterisk/static-http/astman.css
/usr/share/asterisk/static-http/astman.js
/usr/share/asterisk/static-http/core-en_US.xml
/usr/share/asterisk/static-http/mantest.html
/usr/share/asterisk/static-http/prototype.js
/usr/share/doc/asterisk-14.2.1
/usr/share/doc/asterisk-14.2.1/BUGS
/usr/share/doc/asterisk-14.2.1/CREDITS
/usr/share/doc/asterisk-14.2.1/ChangeLog
/usr/share/doc/asterisk-14.2.1/README
/usr/share/doc/asterisk-14.2.1/README-SERIOUSLY.bestpractices.txt
/usr/share/doc/asterisk-14.2.1/README-addons.txt
/usr/share/doc/asterisk-14.2.1/UPGRADE-1.2.txt
/usr/share/doc/asterisk-14.2.1/UPGRADE-1.4.txt
/usr/share/doc/asterisk-14.2.1/UPGRADE-1.6.txt
/usr/share/doc/asterisk-14.2.1/UPGRADE-1.8.txt
/usr/share/doc/asterisk-14.2.1/UPGRADE-10.txt
/usr/share/doc/asterisk-14.2.1/UPGRADE-11.txt
/usr/share/doc/asterisk-14.2.1/UPGRADE-12.txt
/usr/share/doc/asterisk-14.2.1/UPGRADE-13.txt
/usr/share/doc/asterisk-14.2.1/UPGRADE.txt
/usr/share/doc/asterisk-14.2.1/Zaptel-to-DAHDI.txt
/usr/share/doc/asterisk-14.2.1/asterisk-14.2.1-summary.txt
/usr/share/doc/asterisk-14.2.1/asterisk.sgml
/usr/share/doc/asterisk-14.2.1/configs
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx/README
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx/asterisk.conf
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx/cdr.conf
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx/cdr_custom.conf
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx/confbridge.conf
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx/extensions.conf
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx/indications.conf
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx/logger.conf
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx/modules.conf
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx/musiconhold.conf
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx/pjsip.conf
/usr/share/doc/asterisk-14.2.1/configs/basic-pbx/voicemail.conf
/usr/share/doc/asterisk-14.2.1/configs/samples
/usr/share/doc/asterisk-14.2.1/configs/samples/acl.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/adsi.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/agents.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/alarmreceiver.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/alsa.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/amd.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/app_mysql.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/app_skel.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/ari.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/asterisk.adsi
/usr/share/doc/asterisk-14.2.1/configs/samples/asterisk.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/calendar.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/ccss.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cdr.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cdr_adaptive_odbc.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cdr_custom.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cdr_manager.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cdr_mysql.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cdr_odbc.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cdr_pgsql.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cdr_sqlite3_custom.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cdr_syslog.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cdr_tds.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cel.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cel_custom.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cel_odbc.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cel_pgsql.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cel_sqlite3_custom.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cel_tds.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/chan_dahdi.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/chan_mobile.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cli.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cli_aliases.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/cli_permissions.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/codecs.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/confbridge.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/config_test.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/console.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/dbsep.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/dnsmgr.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/dsp.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/dundi.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/enum.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/extconfig.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/extensions.ael.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/extensions.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/extensions.lua.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/extensions_minivm.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/features.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/festival.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/followme.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/func_odbc.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/hep.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/http.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/iax.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/iaxprov.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/indications.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/logger.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/manager.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/meetme.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/mgcp.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/minivm.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/misdn.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/modules.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/motif.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/musiconhold.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/muted.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/ooh323.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/osp.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/oss.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/phone.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/phoneprov.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/pjproject.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/pjsip.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/pjsip_notify.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/pjsip_wizard.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/queuerules.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/queues.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_config_mysql.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_config_sqlite.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_config_sqlite3.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_corosync.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_curl.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_fax.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_ldap.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_odbc.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_parking.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_pgsql.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_pktccops.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_snmp.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/res_stun_monitor.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/resolver_unbound.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/rtp.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/say.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/sip.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/sip_notify.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/skinny.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/sla.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/smdi.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/sorcery.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/ss7.timers.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/stasis.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/statsd.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/telcordia-1.adsi
/usr/share/doc/asterisk-14.2.1/configs/samples/test_sorcery.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/udptl.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/unistim.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/users.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/voicemail.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/vpb.conf.sample
/usr/share/doc/asterisk-14.2.1/configs/samples/xmpp.conf.sample
/usr/share/man/man8/astdb2bdb.8.gz
/usr/share/man/man8/astdb2sqlite3.8.gz
/usr/share/man/man8/asterisk.8.gz
/usr/share/man/man8/astgenkey.8.gz
/usr/share/man/man8/autosupport.8.gz
/usr/share/man/man8/safe_asterisk.8.gz
/var/lib/asterisk
/var/log/asterisk
/var/log/asterisk/cdr-csv
/var/log/asterisk/cdr-custom
/var/spool/asterisk
/var/spool/asterisk/monitor
/var/spool/asterisk/outgoing
/var/spool/asterisk/tmp
/var/spool/asterisk/uploads
/var/spool/asterisk/voicemail

asterisk-iax2

Da wir später z.B. für die Clients auf das InterAsterisk eXchange Protokoll oder kurz IAX2 zurückgreifen wollen, installieren wir hierzu das zugehörige RPM.

 # yum install asterisk-iax2

Was genau diese RPM-Paket in unserern Server mitgebracht hat zeigt uns wie immer der Aufruf des Befehls rpm mit der Option -qil.

 # rpm -qil asterisk-iax2
Name        : asterisk-iax2
Version     : 14.2.1
Release     : 1.el7.centos
Architecture: x86_64
Install Date: Wed 18 Jan 2017 07:08:23 PM CET
Group       : Applications/Internet
Size        : 389194
License     : GPLv2
Signature   : RSA/SHA1, Thu 08 Dec 2016 11:58:07 PM CET, Key ID ccf40e16b9a46fa9
Source RPM  : asterisk-14.2.1-1.el7.centos.src.rpm
Build Date  : Thu 08 Dec 2016 11:57:54 PM CET
Build Host  : olive.ph.tucny.com
Relocations : (not relocatable)
URL         : https://www.asterisk.org/
Summary     : IAX2 channel driver for Asterisk
Description :
IAX2 channel driver for Asterisk
/etc/asterisk/iax.conf
/etc/asterisk/iaxprov.conf
/usr/lib64/asterisk/modules/chan_iax2.so
/usr/share/asterisk/firmware
/usr/share/asterisk/firmware/iax

asterisk-pjsip

Für die Anbindung unseres Asterisk-Servers an den Provider nutzen wir das Session Initiation Protocol - SIP. Statt dem alten chan_sip Modulen benutzen wir unter Asterisk 14 nunmehr die neuen, auf den PJSIP-Bibliotheken basierenden, SIP-Stack. die wesentlichen Unterschiede bei der Konfiguration sind auf dieser Seite ausführlich beschrieben.

Wie installieren also auch hier das passende RPM.

 # yum install asterisk-pjsip

Was genau diese RPM-Paket in unseren Server mitgebracht hat zeigt uns wie immer der Aufruf des Befehls rpm mit der Option -qil.

 # rpm -qil asterisk-pjsip
Name        : asterisk-pjsip
Version     : 14.2.1
Release     : 1.el7.centos
Architecture: x86_64
Install Date: Thu 19 Jan 2017 02:21:55 PM CET
Group       : Applications/Internet
Size        : 1554633
License     : GPLv2
Signature   : RSA/SHA1, Thu 08 Dec 2016 11:58:06 PM CET, Key ID ccf40e16b9a46fa9
Source RPM  : asterisk-14.2.1-1.el7.centos.src.rpm
Build Date  : Thu 08 Dec 2016 11:57:54 PM CET
Build Host  : olive.ph.tucny.com
Relocations : (not relocatable)
URL         : https://www.asterisk.org/
Summary     : SIP channel based upon the PJSIP library
Description :
SIP channel based upon the PJSIP library
/etc/asterisk/pjproject.conf
/etc/asterisk/pjsip.conf
/etc/asterisk/pjsip_notify.conf
/etc/asterisk/pjsip_wizard.conf
/usr/lib64/asterisk/modules/chan_pjsip.so
/usr/lib64/asterisk/modules/func_pjsip_aor.so
/usr/lib64/asterisk/modules/func_pjsip_contact.so
/usr/lib64/asterisk/modules/func_pjsip_endpoint.so
/usr/lib64/asterisk/modules/res_pjproject.so
/usr/lib64/asterisk/modules/res_pjsip.so
/usr/lib64/asterisk/modules/res_pjsip_acl.so
/usr/lib64/asterisk/modules/res_pjsip_authenticator_digest.so
/usr/lib64/asterisk/modules/res_pjsip_caller_id.so
/usr/lib64/asterisk/modules/res_pjsip_config_wizard.so
/usr/lib64/asterisk/modules/res_pjsip_dialog_info_body_generator.so
/usr/lib64/asterisk/modules/res_pjsip_diversion.so
/usr/lib64/asterisk/modules/res_pjsip_dlg_options.so
/usr/lib64/asterisk/modules/res_pjsip_dtmf_info.so
/usr/lib64/asterisk/modules/res_pjsip_empty_info.so
/usr/lib64/asterisk/modules/res_pjsip_endpoint_identifier_anonymous.so
/usr/lib64/asterisk/modules/res_pjsip_endpoint_identifier_ip.so
/usr/lib64/asterisk/modules/res_pjsip_endpoint_identifier_user.so
/usr/lib64/asterisk/modules/res_pjsip_exten_state.so
/usr/lib64/asterisk/modules/res_pjsip_header_funcs.so
/usr/lib64/asterisk/modules/res_pjsip_history.so
/usr/lib64/asterisk/modules/res_pjsip_logger.so
/usr/lib64/asterisk/modules/res_pjsip_messaging.so
/usr/lib64/asterisk/modules/res_pjsip_mwi.so
/usr/lib64/asterisk/modules/res_pjsip_mwi_body_generator.so
/usr/lib64/asterisk/modules/res_pjsip_nat.so
/usr/lib64/asterisk/modules/res_pjsip_notify.so
/usr/lib64/asterisk/modules/res_pjsip_one_touch_record_info.so
/usr/lib64/asterisk/modules/res_pjsip_outbound_authenticator_digest.so
/usr/lib64/asterisk/modules/res_pjsip_outbound_publish.so
/usr/lib64/asterisk/modules/res_pjsip_outbound_registration.so
/usr/lib64/asterisk/modules/res_pjsip_path.so
/usr/lib64/asterisk/modules/res_pjsip_phoneprov_provider.so
/usr/lib64/asterisk/modules/res_pjsip_pidf_body_generator.so
/usr/lib64/asterisk/modules/res_pjsip_pidf_digium_body_supplement.so
/usr/lib64/asterisk/modules/res_pjsip_pidf_eyebeam_body_supplement.so
/usr/lib64/asterisk/modules/res_pjsip_publish_asterisk.so
/usr/lib64/asterisk/modules/res_pjsip_pubsub.so
/usr/lib64/asterisk/modules/res_pjsip_refer.so
/usr/lib64/asterisk/modules/res_pjsip_registrar.so
/usr/lib64/asterisk/modules/res_pjsip_registrar_expire.so
/usr/lib64/asterisk/modules/res_pjsip_rfc3326.so
/usr/lib64/asterisk/modules/res_pjsip_sdp_rtp.so
/usr/lib64/asterisk/modules/res_pjsip_send_to_voicemail.so
/usr/lib64/asterisk/modules/res_pjsip_session.so
/usr/lib64/asterisk/modules/res_pjsip_sips_contact.so
/usr/lib64/asterisk/modules/res_pjsip_t38.so
/usr/lib64/asterisk/modules/res_pjsip_transport_management.so
/usr/lib64/asterisk/modules/res_pjsip_transport_websocket.so
/usr/lib64/asterisk/modules/res_pjsip_xpidf_body_generator.so

Abwohl wie noch keine individuellen Konfigurationsänderungen vorgenommen haben, können wir den Asterisk-Daemon schon starten. Hierzu nutzen wir das systemd Startscript.

 # systemctl start asterisk.service

Den erfolgreichen Start des Daemon können wir nun abfragen.

 # systemctl status asterisk.service -l

asterisk.service - Asterisk PBX and telephony daemon.
   Loaded: loaded (/usr/lib/systemd/system/asterisk.service; disabled; vendor preset: disabled)
   Active: active (running)  since Wed 2017-01-18 19:27:13 CET; 29s ago
 Main PID: 12988 (asterisk)
   CGroup: /system.slice/asterisk.service
           └─12988 /usr/sbin/asterisk -f -C /etc/asterisk/asterisk.conf

Jan 18 19:27:14 vml000177.dmz.nausch.org asterisk[12988]: [Jan 18 19:27:14] WARNING[12988]: res_phoneprov.c:1231 get_defaults: Unable to find a valid server address or name.
Jan 18 19:27:14 vml000177.dmz.nausch.org asterisk[12988]: [Jan 18 19:27:14] ERROR[12988]: ari/config.c:314 process_config: No configured users for ARI
Jan 18 19:27:14 vml000177.dmz.nausch.org asterisk[12988]: 19:27:14.532 os_core_unix.c !pjlib 2.3 for POSIX initialized
Jan 18 19:27:14 vml000177.dmz.nausch.org asterisk[12988]: [Jan 18 19:27:14] WARNING[12988]: res_musiconhold.c:1767 load_moh_classes: A directory must be specified for class 'general'!
Jan 18 19:27:14 vml000177.dmz.nausch.org asterisk[12988]: [Jan 18 19:27:14] WARNING[12988]: res_musiconhold.c:1945 load_module: No music on hold classes configured, disabling music on hold.
Jan 18 19:27:14 vml000177.dmz.nausch.org asterisk[12988]: 19:27:14.539          pjlib !select() I/O Queue created (0x7f33ac000948)
Jan 18 19:27:14 vml000177.dmz.nausch.org asterisk[12988]: SIP channel loading...
Jan 18 19:27:14 vml000177.dmz.nausch.org asterisk[12988]: [Jan 18 19:27:14] NOTICE[12988]: confbridge/conf_config_parser.c:2126 verify_default_profiles: Adding default_menu menu to app_confbridge
Jan 18 19:27:14 vml000177.dmz.nausch.org asterisk[12988]: [Jan 18 19:27:14] NOTICE[12988]: cel_custom.c:97 load_config: No mappings found in cel_custom.conf. Not logging CEL to custom CSVs.
Jan 18 19:27:15 vml000177.dmz.nausch.org asterisk[12988]: Asterisk Ready.

Im Verzeichnis /var/log/asterisk beschreibt der Daemon auch ein eigene Logdatei

 # less /var/log/asterisk/messages
[Jan 18 19:27:13] Asterisk 14.2.1 built by mockbuild @ olive.ph.tucny.com on a x86_64 running Linux on 2016-12-08 22:53:51 UTC
[Jan 18 19:27:14] NOTICE[12988] cdr.c: CDR simple logging enabled.
[Jan 18 19:27:14] NOTICE[12988] loader.c: 223 modules will be loaded.
[Jan 18 19:27:14] WARNING[12988] res_phoneprov.c: Unable to find a valid server address or name.
[Jan 18 19:27:14] ERROR[12988] ari/config.c: No configured users for ARI
[Jan 18 19:27:14] WARNING[12988] res_musiconhold.c: A directory must be specified for class 'general'!
[Jan 18 19:27:14] WARNING[12988] res_musiconhold.c: No music on hold classes configured, disabling music on hold.
[Jan 18 19:27:14] NOTICE[12988] confbridge/conf_config_parser.c: Adding default_menu menu to app_confbridge
[Jan 18 19:27:14] NOTICE[12988] cel_custom.c: No mappings found in cel_custom.conf. Not logging CEL to custom CSVs.

Damit der Daemon später beim Hochfahren des Asterisk-Servers automatisch gestartet wird, aktivieren wir den Autostart des Daemon.

 # systemctl enable asterisk.service 
Created symlink from /etc/systemd/system/multi-user.target.wants/asterisk.service to /usr/lib/systemd/system/asterisk.service.

Wollen wir prüfen ob der Autostart des Daemon richtig gesetzt wurde, fragen wir den Status entsprechend wie folgt ab.

 # systemctl is-enabled asterisk.service 
enabled

Der laufende Asterisk-Server stellt zur Interaktion eine eigene Konsole zur Verfügung. Mit der Option -r können wir uns beim Aufruf des Befehls asterisk mit dieser Konsole verbinden.

 # asterisk -r
Asterisk 14.2.1, Copyright (C) 1999 - 2016, Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 14.2.1 currently running on vml000177 (pid = 12988)
vml000177*CLI>

Eine Übersicht über den Befehlsumfang den uns die Asterisk-Konsole zur Verfügung stellt, können wir uns mit dem Befehl help anzeigen lassen.

vml000177*CLI> help
!                              -- Execute a shell command
acl show                       -- Show a named ACL or list all named ACLs
agent logoff                   -- Sets an agent offline
agent show all                 -- Show status of all agents
agent show online              -- Show status of online agents
agent show                     -- Show information about an agent
agi dump html                  -- Dumps a list of AGI commands in HTML format
agi exec                       -- Add AGI command to a channel in Async AGI
agi set debug [on|off]         -- Enable/Disable AGI debugging
agi show commands [topic]      -- List AGI commands or specific help
aoc set debug                  -- enable cli debugging of AOC messages
ari mkpasswd                   -- Encrypts a password
ari set debug                  -- Enable/disable debugging of an ARI application
ari show apps                  -- List registered ARI applications
ari show app                   -- Display details of a registered ARI application
ari show status                -- Show ARI settings
ari show users                 -- List ARI users
ari show user                  -- List single ARI user
bridge kick                    -- Kick a channel from a bridge
bridge show all                -- List all bridges
bridge show                    -- Show information about a bridge
bridge technology show         -- List registered bridge technologies
bridge technology {suspend|unsuspend} -- Suspend/unsuspend a bridge technology
cc cancel                      -- Kill a CC transaction
cc report status               -- Reports CC stats
cdr set debug [on|off]         -- Enable debugging in the CDR engine
cdr show active                -- Display active CDRs for channels
cdr show status                -- Display the CDR status
cdr submit                     -- Posts all pending batched CDR data
cel show status                -- Display the CEL status
channel originate              -- Originate a call
channel redirect               -- Redirect a call
channel request hangup         -- Request a hangup on a given channel
cli check permissions          -- Try a permissions config for a user
cli reload permissions         -- Reload CLI permissions config
cli show aliases               -- Show CLI command aliases
cli show permissions           -- Show CLI permissions
confbridge kick                -- Kick participants out of conference bridges.
confbridge list                -- List conference bridges and participants.
confbridge lock                -- Lock a conference.
confbridge mute                -- Mute participants.
confbridge record start        -- Start recording a conference
confbridge record stop         -- Stop recording a conference.
confbridge show menu           -- Show a conference menu
confbridge show menus          -- Show a list of conference menus
confbridge show profile bridge -- Show a conference bridge profile.
confbridge show profile bridges -- Show a list of conference bridge profiles.
confbridge show profile user   -- Show a conference user profile.
confbridge show profile users  -- Show a list of conference user profiles.
confbridge unlock              -- Unlock a conference.
confbridge unmute              -- Unmute participants.
config list                    -- Show all files that have loaded a configuration file
config reload                  -- Force a reload on modules using a particular configuration file
config show help               -- Show configuration help for a module
core abort shutdown            -- Cancel a running shutdown
core clear profile             -- Clear profiling info
core ping taskprocessor        -- Ping a named task processor
core reload                    -- Global reload
core restart gracefully        -- Restart Asterisk gracefully
core restart now               -- Restart Asterisk immediately
core restart when convenient   -- Restart Asterisk at empty call volume
core set debug channel         -- Enable/disable debugging on a channel
core set debug                 -- Set level of debug chattiness
core set verbose               -- Set level of verbose chattiness
core show applications [like|describing] -- Shows registered dialplan applications
core show application          -- Describe a specific dialplan application
core show calls [uptime]       -- Display information on calls
core show channels [concise|verbose|count] -- Display information on channels
core show channel              -- Display information on a specific channel
core show channeltypes         -- List available channel types
core show channeltype          -- Give more details on that channel type
core show codecs [audio|video|image|text] -- Displays a list of registered codecs
core show codec                -- Shows a specific codec
core show config mappings      -- Display config mappings (file names to config engines)
core show file formats         -- Displays file formats
core show functions [like]     -- Shows registered dialplan functions
core show function             -- Describe a specific dialplan function
core show hanguphandlers all   -- Show hangup handlers of all channels
core show hanguphandlers       -- Show hangup handlers of a specified channel
core show help                 -- Display help list, or specific help on a command
core show hints                -- Show dialplan hints
core show hint                 -- Show dialplan hint
core show image formats        -- Displays image formats
core show license              -- Show the license(s) for this copy of Asterisk
core show profile              -- Display profiling info
core show settings             -- Show some core settings
core show sounds               -- Shows available sounds
core show sound                -- Shows details about a specific sound
core show switches             -- Show alternative switches
core show sysinfo              -- Show System Information
core show taskprocessors       -- List instantiated task processors and statistics
core show threads              -- Show running threads
core show translation          -- Display translation matrix
core show uptime [seconds]     -- Show uptime information
core show version              -- Display version info
core show warranty             -- Show the warranty (if any) for this copy of Asterisk
core stop gracefully           -- Gracefully shut down Asterisk
core stop now                  -- Shut down Asterisk immediately
core stop when convenient      -- Shut down Asterisk at empty call volume
core waitfullybooted           -- Wait for Asterisk to be fully booted
data get                       -- Data API get
data show providers            -- Show data providers
database del                   -- Removes database key/value
database deltree               -- Removes database keytree/values
database get                   -- Gets database value
database put                   -- Adds/updates database value
database query                 -- Run a user-specified query on the astdb
database show                  -- Shows database contents
database showkey               -- Shows database contents
devstate change                -- Change a custom device state
devstate list                  -- List currently known custom device states
dialplan add extension         -- Add new extension into context
dialplan add ignorepat         -- Add new ignore pattern
dialplan add include           -- Include context in other context
dialplan debug                 -- Show fast extension pattern matching data structures
dialplan reload                -- Reload extensions and *only* extensions
dialplan remove context        -- Remove a specified context
dialplan remove extension      -- Remove a specified extension
dialplan remove ignorepat      -- Remove ignore pattern from context
dialplan remove include        -- Remove a specified include from context
dialplan save                  -- Save current dialplan into a file
dialplan set chanvar           -- Set a channel variable
dialplan set extenpatternmatchnew false -- Use the Old extension pattern matching algorithm.
dialplan set extenpatternmatchnew true -- Use the New extension pattern matching algorithm.
dialplan set global            -- Set global dialplan variable
dialplan show                  -- Show dialplan
dialplan show chanvar          -- Show channel variables
dialplan show globals          -- Show global dialplan variables
dnsmgr refresh                 -- Performs an immediate refresh
dnsmgr reload                  -- Reloads the DNS manager configuration
dnsmgr status                  -- Display the DNS manager status
dundi flush [stats]            -- Flush DUNDi cache
dundi lookup                   -- Lookup a number in DUNDi
dundi precache                 -- Precache a number in DUNDi
dundi query                    -- Query a DUNDi EID
dundi set debug {on|off}       -- Enable/Disable DUNDi debugging
dundi show cache               -- Show DUNDi cache
dundi show entityid            -- Display Global Entity ID
dundi show hints               -- Show DUNDi hints in the cache
dundi show mappings            -- Show DUNDi mappings
dundi show peers [registered|include|exclude|begin] -- Show defined DUNDi peers
dundi show peer                -- Show info on a specific DUNDi peer
dundi show precache            -- Show DUNDi precache
dundi show requests            -- Show DUNDi requests
dundi show trans               -- Show active DUNDi transactions
dundi store history {on|off}   -- Enable/Disable DUNDi historic records
features show                  -- Lists configured features
file convert                   -- Convert audio file
group show channels            -- Display active channels with group(s)
hangup request                 -- <no description available>
help                           -- <no description available>
http show status               -- Display HTTP server status
iax2 provision                 -- Provision an IAX device
iax2 prune realtime            -- Prune a cached realtime lookup
iax2 reload                    -- Reload IAX configuration
iax2 set debug {on|off|peer}   -- Enable/Disable IAX debugging
iax2 set debug jb {on|off}     -- Enable/Disable IAX jitterbuffer debugging
iax2 set debug trunk {on|off}  -- Enable/Disable IAX trunk debugging
iax2 set mtu                   -- Set the IAX systemwide trunking MTU
iax2 show cache                -- Display IAX cached dialplan
iax2 show callnumber usage     -- Show current entries in IP call number limit table
iax2 show channels             -- List active IAX channels
iax2 show firmware             -- List available IAX firmware
iax2 show netstats             -- List active IAX channel netstats
iax2 show peer                 -- Show details on specific IAX peer
iax2 show peers                -- List defined IAX peers
iax2 show provisioning         -- Display iax provisioning
iax2 show registry             -- Display IAX registration status
iax2 show stats                -- Display IAX statistics
iax2 show threads              -- Display IAX helper thread info
iax2 show users [like]         -- List defined IAX users
iax2 test losspct              -- Set IAX2 incoming frame loss percentage
iax2 unregister                -- Unregister (force expiration) an IAX2 peer from the registry
indication add                 -- Add the given indication to the country
indication remove              -- Remove the given indication from the country
indication show                -- Display a list of all countries/indications
keys init                      -- Initialize RSA key passcodes
keys show                      -- Displays RSA key information
local show channels            -- List status of local channels
logger add channel             -- Adds a new logging channel
logger mute                    -- Toggle logging output to a console
logger reload                  -- Reopens the log files
logger remove channel          -- Removes a logging channel
logger rotate                  -- Rotates and reopens the log files
logger set level {DEBUG|NOTICE|WARNING|ERROR|VERBOSE|DTMF} {on|off} -- Enables/Disables a specific logging level for this console
logger show channels           -- List configured log channels
manager reload                 -- Reload manager configurations
manager set debug [on|off]     -- Show, enable, disable debugging of the manager code
manager show command           -- Show a manager interface command
manager show commands          -- List manager interface commands
manager show connected         -- List connected manager interface users
manager show eventq            -- List manager interface queued events
manager show events            -- List manager interface events
manager show event             -- Show a manager interface event
manager show settings          -- Show manager global settings
manager show users             -- List configured manager users
manager show user              -- Display information on a specific manager user
media cache create             -- Create an item in the media cache
media cache delete             -- Remove an item from the media cache
media cache refresh            -- Refresh an item in the media cache
media cache show all           -- Show all items in the media cache
media cache show               -- Show a single item in the media cache
mixmonitor {start|stop|list}   -- Execute a MixMonitor command
module load                    -- Load a module by name
module reload                  -- Reload configuration for a module
module show [like]             -- List modules and info
module unload                  -- Unload a module by name
moh reload                     -- Reload MusicOnHold
moh show classes               -- List MusicOnHold classes
moh show files                 -- List MusicOnHold file-based classes
no debug channel               -- Disable debugging on channel(s)
originate                      -- <no description available>
parking show                   -- Show a parking lot or a list of all parking lots.
phoneprov show routes          -- Show registered phoneprov http routes
pjsip reload                   -- <no description available>
presencestate change           -- Change a custom presence state
presencestate list             -- List currently know custom presence states
pri intense debug span         -- <no description available>
queue add member               -- Add a channel to a specified queue
queue reload {parameters|members|rules|all} -- Reload queues, members, queue rules, or parameters
queue remove member            -- Removes a channel from a specified queue
queue reset stats              -- Reset statistics for a queue
queue set penalty              -- Set penalty for a channel of a specified queue
queue set ringinuse            -- Set ringinuse for a channel of a specified queue
queue show                     -- Show status of a specified queue
queue show rules               -- Show the rules defined in queuerules.conf
queue {pause|unpause} member   -- Pause or unpause a queue member
realtime destroy               -- Delete a row from a RealTime database
realtime load                  -- Used to print out RealTime variables.
realtime store                 -- Store a new row into a RealTime database
realtime update                -- Used to update RealTime variables.
realtime update2               -- Used to test the RealTime update2 method
reload                         -- <no description available>
rtcp set debug {on|off|ip}     -- Enable/Disable RTCP debugging
rtcp set stats {on|off}        -- Enable/Disable RTCP stats
rtp set debug {on|off|ip}      -- Enable/Disable RTP debugging
say load [new|old]             -- Set or show the say mode
sip notify                     -- Send a notify packet to a SIP peer
sip prune realtime [peer|all]  -- Prune cached Realtime users/peers
sip qualify peer               -- Send an OPTIONS packet to a peer
sip reload                     -- Reload SIP configuration
sip set debug {on|off|ip|peer} -- Enable/Disable SIP debugging
sip set history {on|off}       -- Enable/Disable SIP history
sip show {channels|subscriptions} -- List active SIP channels or subscriptions
sip show channelstats          -- List statistics for active SIP channels
sip show channel               -- Show detailed SIP channel info
sip show domains               -- List our local SIP domains
sip show history               -- Show SIP dialog history
sip show inuse                 -- List all inuse/limits
sip show mwi                   -- Show MWI subscriptions
sip show objects               -- List all SIP object allocations
sip show peers                 -- List defined SIP peers
sip show peer                  -- Show details on specific SIP peer
sip show registry              -- List SIP registration status
sip show sched                 -- Present a report on the status of the scheduler queue
sip show settings              -- Show SIP global settings
sip show tcp                   -- List TCP Connections
sip show users                 -- List defined SIP users
sip show user                  -- Show details on specific SIP user
sip unregister                 -- Unregister (force expiration) a SIP peer from the registry
sorcery memory cache dump      -- Dump all objects within a sorcery memory cache
sorcery memory cache expire    -- Expire a specific object or ALL objects within a sorcery memory cache
sorcery memory cache populate  -- Clear and populate the sorcery memory cache with objects from the backend
sorcery memory cache show      -- Show sorcery memory cache information
sorcery memory cache stale     -- Mark a specific object or ALL objects as stale within a sorcery memory cache
stun set debug {on|off}        -- Enable/Disable STUN debugging
stun show status               -- Show STUN servers and statuses
timing test                    -- Run a timing test
udptl set debug {on|off|ip}    -- Enable/Disable UDPTL debugging
udptl show config              -- Show UDPTL config options
ulimit                         -- Set or show process resource limits
xmldoc dump                    -- Dump the XML docs to the specified file

Eine Übersicht der wesentlichen Einstellungsoptionen können wir uns z.B. mit dem Befehl core show settings anzeigen lassen.

vml000177*CLI> core show settings
PBX Core settings
-----------------
  Version:                     14.2.1
  Build Options:               LOADABLE_MODULES
  Maximum calls:               Not set
  Maximum open file handles:   1024
  Root console verbosity:      0
  Current console verbosity:   0
  Debug level:                 0
  Maximum load average:        0.000000
  Minimum free memory:         0 MB
  Startup time:                19:27:13
  Last reload time:            19:27:13
  System:                      Linux/3.10.0-327.18.2.el7.x86_64 built by mockbuild on x86_64 2016-12-08 22:53:51 UTC
  System name:                 
  Entity ID:                   52:54:00:9a:ac:d3
  PBX UUID:                    a4a776d9-2284-4ef4-a65a-19e838658ef0
  Default language:            en
  Language prefix:             Enabled
  User name and group:         /
  Executable includes:         Disabled
  Transcode via SLIN:          Enabled
  Transmit silence during rec: Disabled
  Generic PLC:                 Enabled
  Min DTMF duration::          80
  RTP dynamic payload types:   96-127

* Subsystems
  -------------
  Manager (AMI):               Disabled
  Web Manager (AMI/HTTP):      Disabled
  Call data records:           Enabled
  Realtime Architecture (ARA): Disabled

* Directories
  -------------
  Configuration file:          /etc/asterisk/asterisk.conf
  Configuration directory:     /etc/asterisk
  Module directory:            /usr/lib64/asterisk/modules
  Spool directory:             /var/spool/asterisk
  Log directory:               /var/log/asterisk
  Run/Sockets directory:       /run/asterisk
  PID file:                    /run/asterisk/asterisk.pid
  VarLib directory:            /usr/share/asterisk
  Data directory:              /usr/share/asterisk
  ASTDB:                       /var/spool/asterisk/astdb
  IAX2 Keys directory:         /usr/share/asterisk/keys
  AGI Scripts directory:       /usr/share/asterisk/agi-bin

Mit der Tastetnkombination STRG und C verlassen wir die Asterisk Konsole wieder.

vml000177*CLI> 
Disconnected from Asterisk server
Asterisk cleanly ending (0).
Executing last minute cleanups
 # firewall-cmd --get-active-zones
public
  interfaces: eth0 eth2 eth1
 # firewall-cmd --permanent --zone=internal --change-interface=eth1
The interface is under control of NetworkManager, setting zone to 'internal'.
success
 # firewall-cmd --get-active-zones
internal
  interfaces: eth1
public
  interfaces: eth0 eth2
 # firewall-cmd --permanent --zone=internal --add-rich-rule="rule family="ipv4" port protocol="udp" port="4569" accept"
success
 # firewall-cmd --reload
success
 # firewall-cmd --zone=internal --list-all
internal (active)
  target: default
  icmp-block-inversion: no
  interfaces: eth1
  sources: 
  services: dhcpv6-client ssh
  ports: 
  protocols: 
  masquerade: no
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 
	rule family="ipv4" port port="4569" protocol="udp" accept
 # firewall-cmd --get-active-zones
internal
  interfaces: eth1
public
  interfaces: eth0 eth2
 # firewall-cmd --permanent --zone=public --add-rich-rule="rule family="ipv4" port protocol="udp" port="4569" accept"
success
 # firewall-cmd --reload
success
 # firewall-cmd --zone=public --list-all
external
  target: default
  icmp-block-inversion: no
  interfaces: 
  sources: 
  services: ssh
  ports: 
  protocols: 
  masquerade: yes
  forward-ports: 
  sourceports: 
  icmp-blocks: 
  rich rules: 
        rule family="ipv4" port port="4569" protocol="udp" accept
 # asterisk -r
Asterisk 14.2.1, Copyright (C) 1999 - 2016, Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 14.2.1 currently running on vml000177 (pid = 13261)
vml000177*CLI>
vml000177*CLI> iax2 show peers
Name/Username    Host                                           Mask                                      Port           Status      Description                     
33/33            10.0.10.122                              (D)  (null)                                    50548          Unmonitored                                 
demo/asterisk    216.207.245.47                           (S)  255.255.255.255                           4569           Unmonitored Demo System At Digium           
2 iax2 peers [0 online, 0 offline, 2 unmonitored]
 # asterisk -r
Asterisk 14.2.1, Copyright (C) 1999 - 2016, Digium, Inc. and others.
Created by Mark Spencer <markster@digium.com>
Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.
This is free software, with components licensed under the GNU General Public
License version 2 and other licenses; you are welcome to redistribute it under
certain conditions. Type 'core show license' for details.
=========================================================================
Connected to Asterisk 14.2.1 currently running on vml000177 (pid = 13261)
vml000177*CLI>
vml000177*CLI> dialplan show 
[ Context '__func_periodic_hook_context__' created by 'func_periodic_hook' ]
  'beep' (CID match '') =>  1. Answer()                                   [func_periodic_hook]
                    2. Playback(beep)                             [func_periodic_hook]
  'hook' (CID match '') =>  1. Set(EncodedChannel=${CUT(HOOK_CHANNEL,-,1-2)}) [func_periodic_hook]
                    2. Set(GROUP_NAME=${EncodedChannel}${HOOK_ID}) [func_periodic_hook]
                    3. Set(GROUP(periodic-hook)=${GROUP_NAME})    [func_periodic_hook]
                    4. ExecIf($[${GROUP_COUNT(${GROUP_NAME}@periodic-hook)} > 1]?Hangup()) [func_periodic_hook]
                    5. Set(ChannelToSpy=${URIDECODE(${EncodedChannel})}) [func_periodic_hook]
                    6. ChanSpy(${ChannelToSpy},qEB)               [func_periodic_hook]

[ Context 'parkedcalls' created by 'res_parking/default' ]
  '700' =>          1. Park()                                     [res_parking]
  '701' =>          1. ParkedCall(default,701)                    [res_parking/default]
  '702' =>          1. ParkedCall(default,702)                    [res_parking/default]
  '703' =>          1. ParkedCall(default,703)                    [res_parking/default]
  '704' =>          1. ParkedCall(default,704)                    [res_parking/default]
  '705' =>          1. ParkedCall(default,705)                    [res_parking/default]
  '706' =>          1. ParkedCall(default,706)                    [res_parking/default]
  '707' =>          1. ParkedCall(default,707)                    [res_parking/default]
  '708' =>          1. ParkedCall(default,708)                    [res_parking/default]
  '709' =>          1. ParkedCall(default,709)                    [res_parking/default]
  '710' =>          1. ParkedCall(default,710)                    [res_parking/default]
  '711' =>          1. ParkedCall(default,711)                    [res_parking/default]
  '712' =>          1. ParkedCall(default,712)                    [res_parking/default]
  '713' =>          1. ParkedCall(default,713)                    [res_parking/default]
  '714' =>          1. ParkedCall(default,714)                    [res_parking/default]
  '715' =>          1. ParkedCall(default,715)                    [res_parking/default]
  '716' =>          1. ParkedCall(default,716)                    [res_parking/default]
  '717' =>          1. ParkedCall(default,717)                    [res_parking/default]
  '718' =>          1. ParkedCall(default,718)                    [res_parking/default]
  '719' =>          1. ParkedCall(default,719)                    [res_parking/default]
  '720' =>          1. ParkedCall(default,720)                    [res_parking/default]

[ Context 'ani' created by 'pbx_config' ]
  '_X.' =>          40000. NoOp(ANI: ${EXTEN})                    [pbx_config]
                    40001. Wait(0.25)                             [pbx_config]
                    40002. Answer()                               [pbx_config]
                    40003. Playback(vm-from)                      [pbx_config]
                    40004. SayDigits(${CALLERID(ani)})            [pbx_config]
                    40005. Wait(1.25)                             [pbx_config]
                    40006. SayDigits(${CALLERID(ani)})            [pbx_config]
                    40007. Return()                               [pbx_config]

[ Context 'time' created by 'pbx_config' ]
  '_X.' =>          30000. NoOp(Time: ${EXTEN} ${timezone})       [pbx_config]
                    30001. Wait(0.25)                             [pbx_config]
                    30002. Answer()                               [pbx_config]
                    30003. Set(FUTURETIME=$[${EPOCH} + 12])       [pbx_config]
                    30004. SayUnixTime(${FUTURETIME},Zulu,HNS)    [pbx_config]
                    30005. SayPhonetic(z)                         [pbx_config]
                    30006. SayUnixTime(${FUTURETIME},${timezone},HNS) [pbx_config]
                    30007. Playback(spy-local)                    [pbx_config]
                    30008. WaitUntil(${FUTURETIME})               [pbx_config]
                    30009. Playback(beep)                         [pbx_config]
                    30010. Return()                               [pbx_config]

[ Context 'default' created by 'pbx_config' ]
  Include =>        'demo'                                        [pbx_config]

[ Context 'public' created by 'pbx_config' ]
  Include =>        'demo'                                        [pbx_config]

[ Context 'page' created by 'pbx_config' ]
  '_X.' =>          1. Macro(page,SIP/${EXTEN})                   [pbx_config]

[ Context 'demo' created by 'pbx_config' ]
  '#' =>            1. Playback(demo-thanks)                      [pbx_config]
                    2. Hangup()                                   [pbx_config]
  '1000' =>         1. Goto(default,s,1)                          [pbx_config]
  '1234' =>         1. Playback(transfer,skip)                    [pbx_config]
                    2. Gosub(${EXTEN},stdexten(${GLOBAL(CONSOLE)})) [pbx_config]
                    3. Goto(default,s,1)                          [pbx_config]
  '1235' =>         1. Voicemail(1234,u)                          [pbx_config]
  '1236' =>         1. Dial(Console/dsp)                          [pbx_config]
                    2. Voicemail(1234,b)                          [pbx_config]
  '2' =>            1. BackGround(demo-moreinfo)                  [pbx_config]
                    2. Goto(s,instruct)                           [pbx_config]
  '3' =>            1. Set(CHANNEL(language)=fr)                  [pbx_config]
                    2. Goto(s,restart)                            [pbx_config]
  '500' =>          1. Playback(demo-abouttotry)                  [pbx_config]
                    2. Dial(IAX2/guest@pbx.digium.com/s@default)  [pbx_config]
                    3. Playback(demo-nogo)                        [pbx_config]
                    4. Goto(s,6)                                  [pbx_config]
  '600' =>          1. Playback(demo-echotest)                    [pbx_config]
                    2. Echo()                                     [pbx_config]
                    3. Playback(demo-echodone)                    [pbx_config]
                    4. Goto(s,6)                                  [pbx_config]
  '76245' =>        1. Macro(page,SIP/Grandstream1)               [pbx_config]
  '7999' =>         1. Set(TIMEOUT(absolute)=60)                  [pbx_config]
                    2. Page(Local/Grandstream1@page&Local/Xlite1@page&Local/1234@page/n,d) [pbx_config]
  '8500' =>         1. VoicemailMain()                            [pbx_config]
                    2. Goto(s,6)                                  [pbx_config]
  'i' =>            1. Playback(invalid)                          [pbx_config]
  's' =>            1. Wait(1)                                    [pbx_config]
                    2. Answer()                                   [pbx_config]
                    3. Set(TIMEOUT(digit)=5)                      [pbx_config]
                    4. Set(TIMEOUT(response)=10)                  [pbx_config]
     [restart]      5. BackGround(demo-congrats)                  [pbx_config]
     [instruct]     6. BackGround(demo-instruct)                  [pbx_config]
                    7. WaitExten()                                [pbx_config]
  't' =>            1. Goto(#,1)                                  [pbx_config]
  '_7XXX' =>        1. Macro(page,SIP/${EXTEN})                   [pbx_config]
  Include =>        'stdexten'                                    [pbx_config]

[ Context 'macro-page' created by 'pbx_config' ]
  's' =>            1. ChanIsAvail(${ARG1},s)                     [pbx_config]
                    2. GoToIf($[${AVAILSTATUS} = "1"]?autoanswer:fail) [pbx_config]
     [autoanswer]   3. Set(_ALERT_INFO="RA")                      [pbx_config]
                    4. SIPAddHeader(Call-Info: Answer-After=0)    [pbx_config]
                    5. NoOp()                                     [pbx_config]
                    6. Dial(${ARG1})                              [pbx_config]
     [fail]         7. Hangup()                                   [pbx_config]

[ Context 'stdPrivacyexten' created by 'pbx_config' ]
  'a' =>            1. VoicemailMain(${mbx})                      [pbx_config]
                    2. Return()                                   [pbx_config]
  'stdexten-BUSY' => 1. Voicemail(${mbx},b)                        [pbx_config]
                    2. NoOp(Finish stdPrivacyexten BUSY)          [pbx_config]
                    3. Return()                                   [pbx_config]
  'stdexten-DONTCALL' => 1. Goto(${dontcntx},s,1)                      [pbx_config]
  'stdexten-NOANSWER' => 1. Voicemail(${mbx},u)                        [pbx_config]
                    2. NoOp(Finish stdPrivacyexten NOANSWER)      [pbx_config]
                    3. Return()                                   [pbx_config]
  'stdexten-TORTURE' => 1. Goto(${tortcntx},s,1)                      [pbx_config]
  '_stde[x]te[n]-.' => 1. Goto(stdexten-NOANSWER,1)                  [pbx_config]
  '_X.' =>          60000. NoOp(Start stdPrivacyexten)            [pbx_config]
                    60001. Set(LOCAL(ext)=${ARG1})                [pbx_config]
                    60002. Set(LOCAL(dev)=${ARG2})                [pbx_config]
                    60003. Set(LOCAL(dontcntx)=${ARG3})           [pbx_config]
                    60004. Set(LOCAL(tortcntx)=${ARG4})           [pbx_config]
                    60005. Set(LOCAL(cntx)=${ARG5})               [pbx_config]
                    60006. Set(LOCAL(mbx)="${ext}"$["${cntx}" ? "@${cntx}" :: ""]) [pbx_config]
                    60007. Dial(${dev},20,p)                      [pbx_config]
                    60008. Goto(stdexten-${DIALSTATUS},1)         [pbx_config]

[ Context 'stdexten' created by 'pbx_config' ]
  'a' =>            1. VoicemailMain(${mbx})                      [pbx_config]
                    2. Return()                                   [pbx_config]
  'stdexten-BUSY' => 1. Voicemail(${mbx},b)                        [pbx_config]
                    2. Return()                                   [pbx_config]
  'stdexten-NOANSWER' => 1. Voicemail(${mbx},u)                        [pbx_config]
                    2. Return()                                   [pbx_config]
  '_stde[x]te[n]-.' => 1. Goto(stdexten-NOANSWER,1)                  [pbx_config]
  '_X.' =>          50000. NoOp(Start stdexten)                   [pbx_config]
                    50001. Set(LOCAL(ext)=${EXTEN})               [pbx_config]
                    50002. Set(LOCAL(dev)=${ARG1})                [pbx_config]
                    50003. Set(LOCAL(cntx)=${ARG2})               [pbx_config]
                    50004. Set(LOCAL(mbx)=${ext}${IF($[!${ISNULL(${cntx})}]?@${cntx})}) [pbx_config]
                    50005. Dial(${dev},20)                        [pbx_config]
                    50006. Goto(stdexten-${DIALSTATUS},1)         [pbx_config]

[ Context 'macro-trunkdial' created by 'pbx_config' ]
  's' =>            1. Dial(${ARG1})                              [pbx_config]
                    2. Goto(s-${DIALSTATUS},1)                    [pbx_config]
  's-BUSY' =>       1. Hangup()                                   [pbx_config]
  's-NOANSWER' =>   1. Hangup()                                   [pbx_config]
  '_s-.' =>         1. NoOp()                                     [pbx_config]

[ Context 'outbound-freenum2' created by 'pbx_config' ]
  'fn-BUSY' =>      1. Busy()                                     [pbx_config]
  '_f[n]-.' =>      1. NoOp(ISN: ${DIALSTATUS})                   [pbx_config]
                    2. Congestion()                               [pbx_config]
  '_X!' =>          1. Verbose(2,Performing ISN lookup for ${EXTEN}) [pbx_config]
                    2. Set(SUFFIX=${CUT(EXTEN,*,2-)})             [pbx_config]
                    3. GotoIf($["${FILTER(0-9,${SUFFIX})}" != "${SUFFIX}"]?fn-CONGESTION,1) [pbx_config]
                    4. Set(TIMEOUT(absolute)=10800)               [pbx_config]
                    5. Set(isnresult=${ENUMLOOKUP(${EXTEN},sip,,1,freenum.org)}) [pbx_config]
                    6. GotoIf($["${isnresult}" != ""]?from)       [pbx_config]
                    7. Set(DIALSTATUS=CONGESTION)                 [pbx_config]
                    8. Goto(fn-CONGESTION,1)                      [pbx_config]
     [from]         9. Set(__SIPFROMUSER=${CALLERID(num)})        [pbx_config]
                    10. GotoIf($["${GLOBAL(FREENUMDOMAIN)}" = ""]?dial) [pbx_config]
                    11. Set(__SIPFROMDOMAIN=${GLOBAL(FREENUMDOMAIN)}) [pbx_config]
     [dial]         12. Dial(SIP/${isnresult},40)                 [pbx_config]
                    13. Goto(fn-${DIALSTATUS},1)                  [pbx_config]

[ Context 'outbound-freenum' created by 'pbx_config' ]
  '_X*X!' =>        1. Goto(outbound-freenum2,${EXTEN},1)         [pbx_config]
  '_XX*X!' =>       1. Goto(outbound-freenum2,${EXTEN},1)         [pbx_config]
  '_XXX*X!' =>      1. Goto(outbound-freenum2,${EXTEN},1)         [pbx_config]
  '_XXXX*X!' =>     1. Goto(outbound-freenum2,${EXTEN},1)         [pbx_config]
  '_XXXXX*X!' =>    1. Goto(outbound-freenum2,${EXTEN},1)         [pbx_config]
  '_XXXXXX*X!' =>   1. Goto(outbound-freenum2,${EXTEN},1)         [pbx_config]

[ Context 'local' created by 'pbx_config' ]
  Include =>        'default'                                     [pbx_config]
  Include =>        'trunklocal'                                  [pbx_config]
  Include =>        'iaxtel700'                                   [pbx_config]
  Include =>        'trunktollfree'                               [pbx_config]
  Include =>        'iaxprovider'                                 [pbx_config]
  Include =>        'parkedcalls'                                 [pbx_config]
  Ignore pattern => '9'                                           [pbx_config]

[ Context 'longdistance' created by 'pbx_config' ]
  Include =>        'local'                                       [pbx_config]
  Include =>        'trunkld'                                     [pbx_config]
  Ignore pattern => '9'                                           [pbx_config]

[ Context 'international' created by 'pbx_config' ]
  Include =>        'longdistance'                                [pbx_config]
  Include =>        'trunkint'                                    [pbx_config]
  Ignore pattern => '9'                                           [pbx_config]

[ Context 'trunktollfree' created by 'pbx_config' ]
  '_91800NXXXXXX' => 1. Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) [pbx_config]
  '_91866NXXXXXX' => 1. Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) [pbx_config]
  '_91877NXXXXXX' => 1. Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) [pbx_config]
  '_91888NXXXXXX' => 1. Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) [pbx_config]

[ Context 'trunklocal' created by 'pbx_config' ]
  '_9NXXXXXX' =>    1. Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) [pbx_config]

[ Context 'trunkld' created by 'pbx_config' ]
  '_91NXXNXXXXXX' => 1. Macro(dundi-e164,${EXTEN:1})               [pbx_config]
                    2. Dial(${GLOBAL(TRUNK)}/${EXTEN:${GLOBAL(TRUNKMSD)}}) [pbx_config]

[ Context 'trunkint' created by 'pbx_config' ]
  '_9011.' =>       1. Macro(dundi-e164,${EXTEN:4})               [pbx_config]
                    2. Dial(${GLOBAL(TRUNK)}/${FILTER(0-9,${EXTEN:${GLOBAL(TRUNKMSD)}})}) [pbx_config]

[ Context 'iaxprovider' created by 'pbx_config' ]

[ Context 'iaxtel700' created by 'pbx_config' ]
  '_91700XXXXXXX' => 1. Dial(IAX2/${GLOBAL(IAXINFO)}@iaxtel.com/${EXTEN:1}@iaxtel) [pbx_config]

[ Context 'macro-dundi-e164' created by 'pbx_config' ]
  's' =>            1. Goto(${ARG1},1)                            [pbx_config]
  Include =>        'dundi-e164-lookup'                           [pbx_config]

[ Context 'dundi-e164-lookup' created by 'pbx_config' ]
  Include =>        'dundi-e164-local'                            [pbx_config]
  Include =>        'dundi-e164-switch'                           [pbx_config]

[ Context 'dundi-e164-switch' created by 'pbx_config' ]
  Alt. Switch =>    'DUNDi/e164'                                  [pbx_config]

[ Context 'dundi-e164-local' created by 'pbx_config' ]
  Include =>        'dundi-e164-canonical'                        [pbx_config]
  Include =>        'dundi-e164-customers'                        [pbx_config]
  Include =>        'dundi-e164-via-pstn'                         [pbx_config]

[ Context 'dundi-e164-via-pstn' created by 'pbx_config' ]

[ Context 'dundi-e164-customers' created by 'pbx_config' ]

[ Context 'dundi-e164-canonical' created by 'pbx_config' ]

-= 77 extensions (164 priorities) in 30 contexts. =-
vml000177*CLI> core set verbose 5
Console verbose was OFF and is now 5.
vml000177*CLI> 
    -- Accepting AUTHENTICATED call from 10.0.10.122:50548:
    --        > requested format = gsm,
    --        > requested prefs = (),
    --        > actual format = gsm,
    --        > host prefs = (gsm|ilbc|speex|g729|g723),
    --        > priority = mine
    -- Executing [600@default:1] Playback("IAX2/33-15362", "demo-echotest") in new stack
    -- <IAX2/33-15362> Playing 'demo-echotest.gsm' (language 'de')
    -- Executing [600@default:2] Echo("IAX2/33-15362", "") in new stack
    -- Executing [600@default:3] Playback("IAX2/33-15362", "demo-echodone") in new stack
    -- <IAX2/33-15362> Playing 'demo-echodone.gsm' (language 'de')
    -- Executing [600@default:4] Goto("IAX2/33-15362", "s,6") in new stack
    -- Goto (default,s,6)
    -- Executing [s@default:6] BackGround("IAX2/33-15362", "demo-instruct") in new stack
    -- <IAX2/33-15362> Playing 'demo-instruct.gsm' (language 'de')
    -- Executing [2@default:1] BackGround("IAX2/33-15362", "demo-moreinfo") in new stack
    -- <IAX2/33-15362> Playing 'demo-moreinfo.gsm' (language 'de')
  == Spawn extension (default, 2, 1) exited non-zero on 'IAX2/33-15362'
    -- Hungup 'IAX2/33-15362'
vml000177*CLI> 
    -- Accepting AUTHENTICATED call from 10.0.10.122:50548:
    --        > requested format = gsm,
    --        > requested prefs = (),
    --        > actual format = gsm,
    --        > host prefs = (gsm|ilbc|speex|g729|g723),
    --        > priority = mine
    -- Executing [500@default:1] Playback("IAX2/33-9804", "demo-abouttotry") in new stack
    -- <IAX2/33-9804> Playing 'demo-abouttotry.gsm' (language 'de')
    -- Executing [500@default:2] Dial("IAX2/33-9804", "IAX2/guest@pbx.digium.com/s@default") in new stack
    -- Called IAX2/guest@pbx.digium.com/s@default
[Jan 18 22:17:14] NOTICE[13560]: chan_iax2.c:4735 __auto_congest: Auto-congesting call due to slow response
    -- IAX2/216.207.245.8:4569-4356 is circuit-busy
    -- Hungup 'IAX2/216.207.245.8:4569-4356'
  == Everyone is busy/congested at this time (1:0/1/0)
    -- Executing [500@default:3] Playback("IAX2/33-9804", "demo-nogo") in new stack
    -- <IAX2/33-9804> Playing 'demo-nogo.gsm' (language 'de')
    -- Hungup 'IAX2/33-9804'

dial

https://wiki.asterisk.org/wiki/display/AST/Asterisk+14+Application_Dial

 # vim /etc/asterisk/extensions.conf
; interne Erreichbarkeit der Nebenstellen 11-99 untereinander herstellen
exten => _XX,1,NoOp(interner Teilnehmer mit der Rufnummer ${CALLERID(num)} ruft internen (PJ)SIP-Tln. ${EXTEN})
exten => _XX,n,Dial(PJSIP/${EXTEN},55,TtrWw)
 # asterisk -vvvvr
    -- Accepting AUTHENTICATED call from 88.217.123.90:33439:
    --        > requested format = gsm,
    --        > requested prefs = (),
    --        > actual format = gsm,
    --        > host prefs = (gsm|ilbc|speex|g729|g723),
    --        > priority = mine
    -- Executing [36@default:1] NoOp("IAX2/33-9632", "interner Teilnehmer mit der Rufnummer 33 ruft internen (PJ)SIP-Tln. 36") in new stack
    -- Executing [36@default:2] Dial("IAX2/33-9632", "PJSIP/36,55,TtrWw") in new stack
    -- Called PJSIP/36
    -- PJSIP/36-0000001b is ringing
  == Spawn extension (default, 36, 2) exited non-zero on 'IAX2/33-9632'
    -- Hungup 'IAX2/33-9632'
 # vim /etc/asterisk/extensions.conf
; Anwendungspeispiele bei ankommenden Amtsgesprächen

; BEISPIEL 1:
;            ankommende Anrufe vom Provider Telekom für Rufnummer 08121883175 auf der internen Nst. 36 signalisieren
;
exten => 08121883175,1,Verbose(### Anruf von ${CALLERID(num)} im Kontext "telekom_in" ###)
exten => 08121883175,n,Dial(PJSIP/36,60)
exten => 08121883175,n,Hangup
 # asterisk -vvvvr
    -- Executing [08121883175@telekom_in:1] Verbose("PJSIP/883172_in-0000001c", "### Anruf von +4917645534406 im Kontext "telekom_in" ###") in new stack
### Anruf von +4917645534406 im Kontext telekom_in ###
    -- Executing [08121883175@telekom_in:2] Dial("PJSIP/883172_in-0000001c", "PJSIP/36,60") in new stack
    -- Called PJSIP/36
    -- PJSIP/36-0000001d is ringing
  == Spawn extension (telekom_in, 08121883175, 2) exited non-zero on 'PJSIP/883172_in-0000001c'
 # vim /etc/asterisk/extensions.conf
; BEISPIEL 2:
;            ankommende Anrufe vom Provider Telekom für Rufnummer 08121883175 auf der internen Nst. 36 signalisieren und
;            bei nicht erreichen der Nebenstelle bzw. bei unbeantwortetem Anruf Weiterleitung zur Voicemail
;
exten => 08121883175,1,Verbose(### Anruf von ${CALLERID(num)} im Kontext "telekom_in" ###)
exten => 08121883175,n,Dial(PJSIP/36,60)
exten => 08121883175,n,Wait(1)
exten => 08121883175,n,VoiceMail(36,u)
exten => 08121883175,n,Hangup
 # asterisk -vvvvr
    -- Executing [08121883175@telekom_in:1] Verbose("PJSIP/883172_in-0000001e", "### Anruf von +4917645534406 im Kontext "telekom_in" ###") in new stack
### Anruf von +4917645534406 im Kontext telekom_in ###
    -- Executing [08121883175@telekom_in:2] Dial("PJSIP/883172_in-0000001e", "PJSIP/36,60") in new stack
    -- Called PJSIP/36
    -- PJSIP/36-0000001f is ringing
    -- Nobody picked up in 60000 ms
    -- Executing [08121883175@telekom_in:3] Wait("PJSIP/883172_in-0000001e", "1") in new stack
    -- Executing [08121883175@telekom_in:4] VoiceMail("PJSIP/883172_in-0000001e", "36,u") in new stack
    -- <PJSIP/883172_in-0000001e> Playing 'vm-theperson.alaw' (language 'de')
       > 0x7f647c01e910 -- Probation passed - setting RTP source address to 217.0.7.6:58666
    -- <PJSIP/883172_in-0000001e> Playing 'digits/3.alaw' (language 'de')
    -- <PJSIP/883172_in-0000001e> Playing 'digits/6.alaw' (language 'de')
    -- <PJSIP/883172_in-0000001e> Playing 'vm-isunavail.alaw' (language 'de')
    -- <PJSIP/883172_in-0000001e> Playing 'vm-intro.alaw' (language 'de')
    -- <PJSIP/883172_in-0000001e> Playing 'beep.alaw' (language 'de')
    -- Recording the message
    -- x=0, open writing:  /var/spool/asterisk/voicemail/default/36/tmp/QkCtOM format: wav, 0x7f648c00c0d8
    -- User ended message by pressing #
    -- <PJSIP/883172_in-0000001e> Playing 'auth-thankyou.alaw' (language 'de')
  == Parsing '/var/spool/asterisk/voicemail/default/36/INBOX/msg0000.txt': Found
  == Parsing '/var/spool/asterisk/voicemail/default/36/INBOX/msg0000.txt': Found
  == Parsing '/var/spool/asterisk/voicemail/default/36/INBOX/msg0000.txt': Found
    -- Executing [08121883175@telekom_in:5] Hangup("PJSIP/883172_in-0000001e", "") in new stack
  == Spawn extension (telekom_in, 08121883175, 5) exited non-zero on 'PJSIP/883172_in-0000001e'
 # vim /etc/asterisk/extensions.conf
; -----------------------------------------------------------------------------------------------------------------------
; BEISPIEL 3:
;            ankommende Anrufe vom Provider Telekom für Rufnummer 08121883175 auf der internen Nst. 36 signalisieren und
;            bei nicht erreichen der Nebenstelle bzw. bei unbeantwortetem Anruf Weiterleitung zum Mobiltelefon
;
exten => 08121883175,1,Verbose(### Anruf von ${CALLERID(num)} im Kontext "telekom_in" ###)
exten => 08121883175,n,Dial(PJSIP/36,10)
exten => 08121883175,n,Wait(1)
exten => 08121883175,n,Dial(PJSIP/883176_out/sip:017645534406@tel.t-online.de,20,rWw)
exten => 08121883175,n,Hangup
; ---------------------------------------------------------------------------------------------------------------------
 # asterisk -vvvvr
    -- Executing [08121883175@telekom_in:1] Verbose("PJSIP/883172_in-00000000", "### Anruf von anonymous im Kontext "telekom_in" ###") in new stack
### Anruf von anonymous im Kontext telekom_in ###
    -- Executing [08121883175@telekom_in:2] Dial("PJSIP/883172_in-00000000", "PJSIP/36,10") in new stack
    -- Called PJSIP/36
  == Spawn extension (telekom_in, 08121883175, 2) exited non-zero on 'PJSIP/883172_in-00000000'
    -- Executing [08121883175@telekom_in:1] Verbose("PJSIP/883172_in-00000002", "### Anruf von anonymous im Kontext "telekom_in" ###") in new stack
### Anruf von anonymous im Kontext telekom_in ###
    -- Executing [08121883175@telekom_in:2] Dial("PJSIP/883172_in-00000002", "PJSIP/36,10") in new stack
    -- Called PJSIP/36
    -- PJSIP/36-00000003 is ringing
    -- Nobody picked up in 10000 ms
    -- Executing [08121883175@telekom_in:3] Wait("PJSIP/883172_in-00000002", "1") in new stack
    -- Executing [08121883175@telekom_in:4] Dial("PJSIP/883172_in-00000002", "PJSIP/883176_out/sip:017645534406@tel.t-online.de,20,rWw") in new stack
    -- Called PJSIP/883176_out/sip:017645534406@tel.t-online.de
    -- PJSIP/883176_out-00000004 is making progress passing it to PJSIP/883172_in-00000002
    -- PJSIP/883176_out-00000004 is ringing
    -- PJSIP/883176_out-00000004 answered PJSIP/883172_in-00000002
    -- Channel PJSIP/883176_out-00000004 joined 'simple_bridge' basic-bridge <19dd0b6d-7cc4-4e8b-850a-e932484bfd20>
    -- Channel PJSIP/883172_in-00000002 joined 'simple_bridge' basic-bridge <19dd0b6d-7cc4-4e8b-850a-e932484bfd20>
       > Bridge 19dd0b6d-7cc4-4e8b-850a-e932484bfd20: switching from simple_bridge technology to native_rtp
       > Remotely bridged 'PJSIP/883172_in-00000002' and 'PJSIP/883176_out-00000004' - media will flow directly between them
       > Remotely bridged 'PJSIP/883172_in-00000002' and 'PJSIP/883176_out-00000004' - media will flow directly between them
    -- Channel PJSIP/883176_out-00000004 left 'native_rtp' basic-bridge <19dd0b6d-7cc4-4e8b-850a-e932484bfd20>
    -- Channel PJSIP/883172_in-00000002 left 'native_rtp' basic-bridge <19dd0b6d-7cc4-4e8b-850a-e932484bfd20>
  == Spawn extension (telekom_in, 08121883175, 4) exited non-zero on 'PJSIP/883172_in-00000002'
 # vim /etc/asterisk/extensions.conf
; -----------------------------------------------------------------------------------------------------------------------
; BEISPIEL 4:
;            ankommende Anrufe vom Provider Telekom für Rufnummer 08121883175 auf der internen Nst. 36 und zeitgleich
;            auf dem Mobiltelefon signalisieren. Anschließend bei nicht erreichen der Nebenstelle bzw. bei 
;            unbeantwortetem Anruf Weiterleitung zur Voicemailbox. Leistungsmerkmal "twinning"
;
exten => 08121883175,1,Verbose(### Anruf von ${CALLERID(num)} im Kontext "telekom_in" ###)
exten => 08121883175,n,Dial(PJSIP/36&PJSIP/883176_out/sip:017645534406@tel.t-online.de,10,rWw)
exten => 08121883175,n,Wait(1)
exten => 08121883175,n,VoiceMail(36,u)
exten => 08121883175,n,Hangup
; -----------------------------------------------------------------------------------------------------------------------
 # asterisk -vvvvr
    -- Executing [08121883175@telekom_in:1] Verbose("PJSIP/883172_in-00000000", "### Anruf von anonymous im Kontext "telekom_in" ###") in new stack
### Anruf von anonymous im Kontext telekom_in ###
    -- Executing [08121883175@telekom_in:2] Dial("PJSIP/883172_in-00000000", "PJSIP/36&PJSIP/883176_out/sip:017645534406@tel.t-online.de,10,rWw") in new stack
    -- Called PJSIP/36
    -- Called PJSIP/883176_out/sip:017645534406@tel.t-online.de
    -- PJSIP/36-00000001 connected line has changed. Saving it until answer for PJSIP/883172_in-00000000
    -- PJSIP/883176_out-00000002 connected line has changed. Saving it until answer for PJSIP/883172_in-00000000
    -- PJSIP/36-00000001 is ringing
    -- PJSIP/883176_out-00000002 is making progress passing it to PJSIP/883172_in-00000000
    -- PJSIP/883176_out-00000002 is ringing
    -- Nobody picked up in 10000 ms
    -- Executing [08121883175@telekom_in:3] Wait("PJSIP/883172_in-00000000", "1") in new stack
    -- Executing [08121883175@telekom_in:4] VoiceMail("PJSIP/883172_in-00000000", "36,u") in new stack
    -- <PJSIP/883172_in-00000000> Playing 'vm-theperson.alaw' (language 'de')
       > 0x7f47f0023ce0 -- Probation passed - setting RTP source address to 217.0.4.196:12838
    -- <PJSIP/883172_in-00000000> Playing 'digits/3.alaw' (language 'de')
    -- <PJSIP/883172_in-00000000> Playing 'digits/6.alaw' (language 'de')
    -- <PJSIP/883172_in-00000000> Playing 'vm-isunavail.alaw' (language 'de')
    -- <PJSIP/883172_in-00000000> Playing 'vm-intro.alaw' (language 'de')
    -- <PJSIP/883172_in-00000000> Playing 'beep.alaw' (language 'de')
    -- Recording the message
    -- x=0, open writing:  /var/spool/asterisk/voicemail/default/36/tmp/ObhJK5 format: wav, 0x7f47f4008488
    -- User hung up
  == Parsing '/var/spool/asterisk/voicemail/default/36/INBOX/msg0000.txt': Found
  == Parsing '/var/spool/asterisk/voicemail/default/36/INBOX/msg0000.txt': Found
  == Parsing '/var/spool/asterisk/voicemail/default/36/INBOX/msg0000.txt': Found
  == Spawn extension (telekom_in, 08121883175, 4) exited non-zero on 'PJSIP/883172_in-00000000'
 # vim /etc/asterisk/extensions.conf
; -----------------------------------------------------------------------------------------------------------------------
; BEISPIEL 5:
;            ankommende Anrufe vom Provider Telekom für Rufnummer 08121883175 nur dann auf der internen Nst. 36
;            signalisieren, wenn der Anruf _NICHT_ vom Anschluss +49892165... kommt. Anrufer dieses dieser Anschlusses
;            werden zur Abwimmelansage "... dieser Anschluss ist vorübergehend nicht erreichbar ..." weitergeleitet.
;            Alle anderen Anrufer werden zur Nst. 36 durchgestellt; bzw. an ie Voicemail weitergeleitet
exten => 08121883175/_+49892165.,1,NoOp(Externanrufer-Gruppe ${CALLERID(num)} ist geblacklistet und wird daher auf die Voicemail geleitet!)
exten => 08121883175/_+49892165.,n,Playback(/var/spool/asterisk/voicemail/default/31/unerreichbar)
exten => 08121883175/_+49892165.,n,wait(1)
exten => 08121883175/_+49892165.,n,Playback(/var/spool/asterisk/voicemail/default/31/unerreichbar)
exten => 08121883175/_+49892165.,n,wait(1)
exten => 08121883175/_+49892165.,n,Playback(/var/spool/asterisk/voicemail/default/31/unerreichbar)
exten => 08121883175/_+49892165.,n,wait(1)
exten => 08121883175/_+49892165.,n,Playback(/var/spool/asterisk/voicemail/default/31/unerreichbar)
exten => 08121883175/_+49892165.,n,wait(1)
exten => 08121883175/_+49892165.,n,Playback(/var/spool/asterisk/voicemail/default/31/unerreichbar)
exten => 08121883175/_+49892165.,n,Hangup
exten => 08121883175,1,NoOp(Externanrufer ${CALLERID(num)} hat _keinen_ Sperreintrag und wird an den Nst. 36 (snom 360))
exten => 08121883175,n,Dial(PJSIP/36,20,rWw)
exten => 08121883175,n,Wait(1)  
exten => 08121883175,n,VoiceMail(36,u)
exten => 08121883175,n,Hangup
; -----------------------------------------------------------------------------------------------------------------------
 # asterisk -vvvvr
    -- Executing [08121883175@telekom_in:1] NoOp("PJSIP/883172_in-00000000", "Externanrufer-Gruppe +49892162407 ist geblacklistet und wird daher auf die Voicemail geleitet!") in new stack
    -- Executing [08121883175@telekom_in:2] Playback("PJSIP/883172_in-00000000", "/var/spool/asterisk/voicemail/default/31/unerreichbar") in new stack
    -- <PJSIP/883172_in-00000000> Playing '/var/spool/asterisk/voicemail/default/31/unerreichbar.slin' (language 'de')
       > 0x7f9e7803f350 -- Probation passed - setting RTP source address to 217.0.4.230:13512
    -- Executing [08121883175@telekom_in:3] Wait("PJSIP/883172_in-00000000", "1") in new stack
    -- Executing [08121883175@telekom_in:4] Playback("PJSIP/883172_in-00000000", "/var/spool/asterisk/voicemail/default/31/unerreichbar") in new stack
    -- <PJSIP/883172_in-00000000> Playing '/var/spool/asterisk/voicemail/default/31/unerreichbar.slin' (language 'de')
    -- Executing [08121883175@telekom_in:5] Wait("PJSIP/883172_in-00000000", "1") in new stack
    -- Executing [08121883175@telekom_in:6] Playback("PJSIP/883172_in-00000000", "/var/spool/asterisk/voicemail/default/31/unerreichbar") in new stack
    -- <PJSIP/883172_in-00000000> Playing '/var/spool/asterisk/voicemail/default/31/unerreichbar.slin' (language 'de')
    -- Executing [08121883175@telekom_in:7] Wait("PJSIP/883172_in-00000000", "1") in new stack
    -- Executing [08121883175@telekom_in:8] Playback("PJSIP/883172_in-00000000", "/var/spool/asterisk/voicemail/default/31/unerreichbar") in new stack
    -- <PJSIP/883172_in-00000000> Playing '/var/spool/asterisk/voicemail/default/31/unerreichbar.slin' (language 'de')
    -- Executing [08121883175@telekom_in:9] Wait("PJSIP/883172_in-00000000", "1") in new stack
    -- Executing [08121883175@telekom_in:10] Playback("PJSIP/883172_in-00000000", "/var/spool/asterisk/voicemail/default/31/unerreichbar") in new stack
    -- <PJSIP/883172_in-00000000> Playing '/var/spool/asterisk/voicemail/default/31/unerreichbar.slin' (language 'de')
    -- Executing [08121883175@telekom_in:11] Hangup("PJSIP/883172_in-00000000", "") in new stack
  == Spawn extension (telekom_in, 08121883175, 11) exited non-zero on 'PJSIP/883172_in-00000000'
    -- Executing [08121883175@telekom_in:1] NoOp("PJSIP/883172_in-00000001", "Externanrufer anonymous hat _keinen_ Sperreintrag und wird an den Nst. 36 (snom 360)") in new stack
    -- Executing [08121883175@telekom_in:2] Dial("PJSIP/883172_in-00000001", "PJSIP/36,20,rWw") in new stack
    -- Called PJSIP/36
    -- PJSIP/36-00000002 is ringing
    -- Nobody picked up in 20000 ms
    -- Executing [08121883175@telekom_in:3] Wait("PJSIP/883172_in-00000001", "1") in new stack
    -- Executing [08121883175@telekom_in:4] VoiceMail("PJSIP/883172_in-00000001", "36,u") in new stack
    -- <PJSIP/883172_in-00000001> Playing 'vm-theperson.alaw' (language 'de')
       > 0x7f9e5800abb0 -- Probation passed - setting RTP source address to 217.0.7.70:28670
    -- <PJSIP/883172_in-00000001> Playing 'digits/3.alaw' (language 'de')
    -- <PJSIP/883172_in-00000001> Playing 'digits/6.alaw' (language 'de')
    -- <PJSIP/883172_in-00000001> Playing 'vm-isunavail.alaw' (language 'de')
    -- <PJSIP/883172_in-00000001> Playing 'vm-intro.alaw' (language 'de')
    -- <PJSIP/883172_in-00000001> Playing 'beep.alaw' (language 'de')
    -- Recording the message
    -- x=0, open writing:  /var/spool/asterisk/voicemail/default/36/tmp/7SpfZs format: wav, 0x7f9e6c3f6508
    -- User hung up
  == Parsing '/var/spool/asterisk/voicemail/default/36/INBOX/msg0000.txt': Found
  == Parsing '/var/spool/asterisk/voicemail/default/36/INBOX/msg0000.txt': Found
  == Parsing '/var/spool/asterisk/voicemail/default/36/INBOX/msg0000.txt': Found
  == Spawn extension (telekom_in, 08121883175, 4) exited non-zero on 'PJSIP/883172_in-00000001'
 # vim /etc/asterisk/extensions.conf
; -----------------------------------------------------------------------------------------------------------------------
; BEISPIEL 6:
;            ankommende Anrufe vom Provider Telekom für Rufnummer 08121883175 nur dann auf der internen Nst. 36
;            signalisieren, wenn der Anruf _NICHT_ die Rufnummer +498921652407 überträgt. Dieser Anrufer wird sofort
;            an die Voicemail weitergeleitet. Alle anderen Anrufer werden zur Nst. 36 durchgestellt und bei nicht 
;            erreichen der Nebenstelle bzw. bei unbeantwortetem Anruf rfolgt eine Weiterleitung zur Voicemailbox.
;
exten => 08121883175,1,Verbose(### Anruf von ${CALLERID(num)} im Kontext "telekom_in" ###)
exten => 08121883175,n,GotoIf($["${CALLERID(num)}" = "+498921652407"]?10:20)
exten => 08121883175,10,NoOp(Externanrufer ${CALLERID(num)} ist geblacklistet und wird daher auf die Voicemail geleitet!)
exten => 08121883175,n,VoiceMail(36,u)
exten => 08121883175,n,Hangup
exten => 08121883175,20,NoOp(Externanrufer ${CALLERID(num)} hat keinen Sperreintrag und wird an Nst. 36 signalisiert!)
exten => 08121883175,n,Dial(PJSIP/36,20,rWw)
exten => 08121883175,n,Wait(1)
exten => 08121883175,n,VoiceMail(36,u)
exten => 08121883175,n,Hangup
; -----------------------------------------------------------------------------------------------------------------------
 # asterisk -vvvvr
    -- Executing [08121883175@telekom_in:1] Verbose("PJSIP/883172_in-00000000", "### Anruf von +498921652407 im Kontext "telekom_in" ###") in new stack
### Anruf von +498921652407 im Kontext telekom_in ###
    -- Executing [08121883175@telekom_in:2] GotoIf("PJSIP/883172_in-00000000", "1?10:20") in new stack
    -- Goto (telekom_in,08121883175,10)
    -- Executing [08121883175@telekom_in:10] NoOp("PJSIP/883172_in-00000000", "Externanrufer +498921652407 ist geblacklistet und wird daher auf die Voicemail geleitet!") in new stack
    -- Executing [08121883175@telekom_in:11] VoiceMail("PJSIP/883172_in-00000000", "36,u") in new stack
    -- <PJSIP/883172_in-00000000> Playing 'vm-theperson.alaw' (language 'de')
       > 0x7fd2d0042a80 -- Probation passed - setting RTP source address to 217.0.7.4:10530
    -- <PJSIP/883172_in-00000000> Playing 'digits/3.alaw' (language 'de')
    -- <PJSIP/883172_in-00000000> Playing 'digits/6.alaw' (language 'de')
    -- <PJSIP/883172_in-00000000> Playing 'vm-isunavail.alaw' (language 'de')
    -- <PJSIP/883172_in-00000000> Playing 'vm-intro.alaw' (language 'de')
    -- <PJSIP/883172_in-00000000> Playing 'beep.alaw' (language 'de')
    -- Recording the message
    -- x=0, open writing:  /var/spool/asterisk/voicemail/default/36/tmp/jAEk5n format: wav, 0x7fd2e0008058
    -- User hung up
  == Parsing '/var/spool/asterisk/voicemail/default/36/INBOX/msg0000.txt': Found
  == Parsing '/var/spool/asterisk/voicemail/default/36/INBOX/msg0000.txt': Found
  == Parsing '/var/spool/asterisk/voicemail/default/36/INBOX/msg0000.txt': Found
  == Spawn extension (telekom_in, 08121883175, 11) exited non-zero on 'PJSIP/883172_in-00000000'
    -- Executing [08121883175@telekom_in:1] Verbose("PJSIP/883172_in-00000001", "### Anruf von anonymous im Kontext "telekom_in" ###") in new stack
### Anruf von anonymous im Kontext telekom_in ###
    -- Executing [08121883175@telekom_in:2] GotoIf("PJSIP/883172_in-00000001", "0?10:20") in new stack
    -- Goto (telekom_in,08121883175,20)
    -- Executing [08121883175@telekom_in:20] NoOp("PJSIP/883172_in-00000001", "Externanrufer anonymous hat keinen Sperreintrag und wird an Nst. 36 signalisiert!") in new stack
    -- Executing [08121883175@telekom_in:21] Dial("PJSIP/883172_in-00000001", "PJSIP/36,20,rWw") in new stack
    -- Called PJSIP/36
    -- PJSIP/36-00000002 is ringing
  == Spawn extension (telekom_in, 08121883175, 21) exited non-zero on 'PJSIP/883172_in-00000001'
 # vim /etc/asterisk/extensions.conf
; -----------------------------------------------------------------------------------------------------------------------
; BEISPIEL 7:
;            alle ankommende Anrufe vom Provider Telekom für Rufnummer 08121883175 werden in der 1st-level Supportgruppe,
;            d.h. an den Nebenstellen 33 und 36 signalisiert. Ruf hingegen unser VIP-Kunde mit der Rufnummer 08931408448
;            wird dieser Anrufer sofort zum 2nd-level Support (Nst. 31) durchgestellt bzw. bei nicht erreichen zum 
;            Mobiltelefon durchgestellt.  
;            
exten => 08121883175/_+498931408448,1,Verbose(### Anruf von VIP-Kunden mit der Rufnummer ${CALLERID(num)} im Kontext "telekom_in". VIP-Behandlung veranlassen! ###)
exten => 08121883175/_+498931408448,n,Dial(PJSIP/31&PJSIP/883176_out/sip:017645534406@tel.t-online.de,10,rWw)
exten => 08121883175/_+498931408448,n,Hangup
exten => 08121883175,1,NoOp(Externanrufer mit der Rufnummer ${CALLERID(num)} ist 08/15-Kunde und wird im 1st-level Support abgeworfen.)
exten => 08121883175,n,Dial(PJSIP/36&IAX2/33,15)
exten => 08121883175,n,Wait(1)
exten => 08121883175,n,VoiceMail(36,u)
exten => 08121883175,n,Hangup
; -----------------------------------------------------------------------------------------------------------------------
    -- Executing [08121883175@telekom_in:1] Verbose("PJSIP/883172_in-00000003", "### Anruf von VIP-Kunden mit der Rufnummer +4989216750916 im Kontext "telekom_in". VIP-Behandlung veranlassen! ###") in new stack
### Anruf von VIP-Kunden mit der Rufnummer +4989216750916 im Kontext telekom_in. VIP-Behandlung veranlassen! ###
    -- Executing [08121883175@telekom_in:2] Dial("PJSIP/883172_in-00000003", "PJSIP/31&PJSIP/883176_out/sip:017645534406@tel.t-online.de,10,rWw") in new stack
    -- Called PJSIP/31
    -- Called PJSIP/883176_out/sip:017645534406@tel.t-online.de
    -- PJSIP/31-00000004 connected line has changed. Saving it until answer for PJSIP/883172_in-00000003
    -- PJSIP/883176_out-00000005 connected line has changed. Saving it until answer for PJSIP/883172_in-00000003
    -- PJSIP/31-00000004 is ringing
    -- PJSIP/883176_out-00000005 is making progress passing it to PJSIP/883172_in-00000003
    -- PJSIP/883176_out-00000005 is ringing
  == Spawn extension (telekom_in, 08121883175, 2) exited non-zero on 'PJSIP/883172_in-00000003'
    -- Executing [08121883175@telekom_in:1] NoOp("PJSIP/883172_in-00000000", "Externanrufer mit der Rufnummer anonymous ist 08/15-Kunde und wird im 1st-level Support abgeworfen.") in new stack
    -- Executing [08121883175@telekom_in:2] Dial("PJSIP/883172_in-00000000", "PJSIP/36&IAX2/33,15") in new stack
[Jan 30 15:31:12] WARNING[17010][C-00000001]: app_dial.c:2530 dial_exec_full: Unable to create channel of type 'IAX2' (cause 20 - Subscriber absent)
    -- Called PJSIP/36
    -- PJSIP/36-00000001 is ringing
  == Spawn extension (telekom_in, 08121883175, 2) exited non-zero on 'PJSIP/883172_in-00000000'
 # vim /etc/asterisk/extensions.conf
; -----------------------------------------------------------------------------------------------------------------------
; BEISPIEL 8:
;            alle ankommende Anrufe vom Provider Telekom für Rufnummer 08121883175 werden gegen die black- und white-
;            listing Datenbank geprüft und gesondert behandelt: 
;              - Anrufer die keine Nummer übertragen werden "nur" an der int. Nst 36 signalisiert, ohne Weiterleitung 
;                zum Händie und/oder Voicemail
;              - Anrufer mit einem Whitelisting-Eintrag in der AstDB (Asterisk-Datenbank) werden sowohl an der internen 
;                Nebenstelle 36 wie auch am Händie mit der Rufnummer 0176/45534406 signalisiert. Wird der Anrufer nicht 
;                binnen 20 Sekunden beantwortet, erhält der Anrufer die Möglichkeit zum Hinterlassen einer Nachricht 
;                auf der Voicemailbox von der Nst. 36
;              - Anrufer, die einen blacklisting Eintrag haben, werden direkt zur Abwimmelansage der Nst. 36 geleitet 
;                und anschließend die Verbindung gekappt, ohne dass der Anrufer eine Nachricht hinterlassen kann.
;
exten => 08121883175,1,NoOp(Anrufer übertrug die Rufnummer ${CALLERID(num)})
exten => 08121883175,n,Set(access=${DB(36/${CALLERID(num)})})

exten => 08121883175,n,GotoIf($[ "${access}" = "" ]?ohne:testing)
exten => 08121883175,n(testing),GotoIf($[ "${access}" = "wl" ]?whitelisted:blacklisted)
exten => 08121883175,n(whitelisted),NoOp(der Anrufer ist gewhitelisted, der Anrufer wird zur Nebenstelle 36 und zum Mobiltelefon durchgestellt)
exten => 08121883175,n,Dial(PJSIP/36&PJSIP/883176_out/sip:017645534406@tel.t-online.de,10,rWw)
exten => 08121883175,n,Wait(1)
exten => 08121883175,n,VoiceMail(36,u)
exten => 08121883175,n,Hangup
exten => 08121883175,n(blacklisted),NoOp(der Anrufer ist geblacklisted und wird daher zur "Abwimmel"-Voicemailbox abgeworfen)
exten => 08121883175,n,Playback(/var/spool/asterisk/voicemail/default/31/unerreichbar)
exten => 08121883175,n,wait(1)
exten => 08121883175,n,Playback(/var/spool/asterisk/voicemail/default/31/unerreichbar)
exten => 08121883175,n,wait(1)
exten => 08121883175,n,Playback(/var/spool/asterisk/voicemail/default/31/unerreichbar)
exten => 08121883175,n,wait(1)
exten => 08121883175,n,Playback(/var/spool/asterisk/voicemail/default/31/unerreichbar)
exten => 08121883175,n,wait(1)
exten => 08121883175,n,Playback(/var/spool/asterisk/voicemail/default/31/unerreichbar)
exten => 08121883175,n,Hangup
exten => 08121883175,n(ohne),NoOp(der Anrufer überträgt keine Nummer, und ist weder geblack- noch gewhitelisted)
exten => 08121883175,n,Dial(PJSIP/31,60)
exten => 08121883175,n,Hangup
; -----------------------------------------------------------------------------------------------------------------------
 # asterisk -vvvvr
    -- Executing [08121883175@telekom_in:1] NoOp("PJSIP/883172_in-0000000b", "Anrufer übertrug die Rufnummer +4917645534406") in new stack
    -- Executing [08121883175@telekom_in:2] Set("PJSIP/883172_in-0000000b", "access=wl") in new stack
    -- Executing [08121883175@telekom_in:3] GotoIf("PJSIP/883172_in-0000000b", "0?ohne:testing") in new stack
    -- Goto (telekom_in,08121883175,4)
    -- Executing [08121883175@telekom_in:4] GotoIf("PJSIP/883172_in-0000000b", "1?whitelisted:blacklisted") in new stack
    -- Goto (telekom_in,08121883175,5)
    -- Executing [08121883175@telekom_in:5] NoOp("PJSIP/883172_in-0000000b", "der Anrufer ist gewhitelisted, der Anrufer wird zur Nebenstelle 36 und zum Mobiltelefon durchgestellt") in new stack
    -- Executing [08121883175@telekom_in:6] Dial("PJSIP/883172_in-0000000b", "PJSIP/36&PJSIP/883176_out/sip:017645534406@tel.t-online.de,10,rWw") in new stack
    -- Called PJSIP/36
    -- Called PJSIP/883176_out/sip:017645534406@tel.t-online.de
    -- PJSIP/36-0000000c connected line has changed. Saving it until answer for PJSIP/883172_in-0000000b
    -- PJSIP/883176_out-0000000d connected line has changed. Saving it until answer for PJSIP/883172_in-0000000b
    -- PJSIP/36-0000000c is ringing
    -- PJSIP/883176_out-0000000d is making progress passing it to PJSIP/883172_in-0000000b
    -- PJSIP/883176_out-0000000d is ringing
    -- PJSIP/883176_out-0000000d answered PJSIP/883172_in-0000000b
    -- Channel PJSIP/883176_out-0000000d joined 'simple_bridge' basic-bridge <868dad5d-a999-4b8e-babf-88fe30fbf9af>
    -- Channel PJSIP/883172_in-0000000b joined 'simple_bridge' basic-bridge <868dad5d-a999-4b8e-babf-88fe30fbf9af>
       > Bridge 868dad5d-a999-4b8e-babf-88fe30fbf9af: switching from simple_bridge technology to native_rtp
       > Remotely bridged 'PJSIP/883172_in-0000000b' and 'PJSIP/883176_out-0000000d' - media will flow directly between them
       > Remotely bridged 'PJSIP/883172_in-0000000b' and 'PJSIP/883176_out-0000000d' - media will flow directly between them
    -- Channel PJSIP/883172_in-0000000b left 'native_rtp' basic-bridge <868dad5d-a999-4b8e-babf-88fe30fbf9af>
  == Spawn extension (telekom_in, 08121883175, 6) exited non-zero on 'PJSIP/883172_in-0000000b'
    -- Channel PJSIP/883176_out-0000000d left 'native_rtp' basic-bridge <868dad5d-a999-4b8e-babf-88fe30fbf9af>
 # asterisk -vvvvr
    -- Executing [08121883175@telekom_in:1] NoOp("PJSIP/883172_in-00000000", "Anrufer übertrug die Rufnummer +4917645502006") in new stack
    -- Executing [08121883175@telekom_in:2] Set("PJSIP/883172_in-00000000", "access=bl") in new stack
    -- Executing [08121883175@telekom_in:3] GotoIf("PJSIP/883172_in-00000000", "0?ohne:testing") in new stack
    -- Goto (telekom_in,08121883175,4)
    -- Executing [08121883175@telekom_in:4] GotoIf("PJSIP/883172_in-00000000", "0?whitelisted:blacklisted") in new stack
    -- Goto (telekom_in,08121883175,10)
    -- Executing [08121883175@telekom_in:10] NoOp("PJSIP/883172_in-00000000", "der Anrufer ist geblacklisted und wird daher zur "Abwimmel"-Voicemailbox abgeworfen") in new stack
    -- Executing [08121883175@telekom_in:11] Playback("PJSIP/883172_in-00000000", "/var/spool/asterisk/voicemail/default/31/unerreichbar") in new stack
    -- <PJSIP/883172_in-00000000> Playing '/var/spool/asterisk/voicemail/default/31/unerreichbar.slin' (language 'de')
       > 0x7f2f3402ac30 -- Probation passed - setting RTP source address to 217.0.4.68:48282
    -- Executing [08121883175@telekom_in:12] Wait("PJSIP/883172_in-00000000", "1") in new stack
    -- Executing [08121883175@telekom_in:13] Playback("PJSIP/883172_in-00000000", "/var/spool/asterisk/voicemail/default/31/unerreichbar") in new stack
    -- <PJSIP/883172_in-00000000> Playing '/var/spool/asterisk/voicemail/default/31/unerreichbar.slin' (language 'de')
    -- Executing [08121883175@telekom_in:14] Wait("PJSIP/883172_in-00000000", "1") in new stack
    -- Executing [08121883175@telekom_in:15] Playback("PJSIP/883172_in-00000000", "/var/spool/asterisk/voicemail/default/31/unerreichbar") in new stack
    -- <PJSIP/883172_in-00000000> Playing '/var/spool/asterisk/voicemail/default/31/unerreichbar.slin' (language 'de')
    -- Executing [08121883175@telekom_in:16] Wait("PJSIP/883172_in-00000000", "1") in new stack
    -- Executing [08121883175@telekom_in:17] Playback("PJSIP/883172_in-00000000", "/var/spool/asterisk/voicemail/default/31/unerreichbar") in new stack
    -- <PJSIP/883172_in-00000000> Playing '/var/spool/asterisk/voicemail/default/31/unerreichbar.slin' (language 'de')
    -- Executing [08121883175@telekom_in:18] Wait("PJSIP/883172_in-00000000", "1") in new stack
    -- Executing [08121883175@telekom_in:19] Playback("PJSIP/883172_in-00000000", "/var/spool/asterisk/voicemail/default/31/unerreichbar") in new stack
    -- <PJSIP/883172_in-00000000> Playing '/var/spool/asterisk/voicemail/default/31/unerreichbar.slin' (language 'de')
    -- Executing [08121883175@telekom_in:20] Hangup("PJSIP/883172_in-00000000", "") in new stack
  == Spawn extension (telekom_in, 08121883175, 20) exited non-zero on 'PJSIP/883172_in-00000000'
 # asterisk -vvvvr
    -- Executing [08121883175@telekom_in:1] NoOp("PJSIP/883172_in-00000009", "Anrufer übertrug die Rufnummer anonymous") in new stack
    -- Executing [08121883175@telekom_in:2] Set("PJSIP/883172_in-00000009", "access=") in new stack
    -- Executing [08121883175@telekom_in:3] GotoIf("PJSIP/883172_in-00000009", "1?ohne:testing") in new stack
    -- Goto (telekom_in,08121883175,21)
    -- Executing [08121883175@telekom_in:21] NoOp("PJSIP/883172_in-00000009", "der Anrufer überträgt keine Nummer, und ist weder geblack- noch gewhitelisted") in new stack
    -- Executing [08121883175@telekom_in:22] Dial("PJSIP/883172_in-00000009", "PJSIP/31,60") in new stack
    -- Called PJSIP/31
    -- PJSIP/31-0000000a is ringing
  == Spawn extension (telekom_in, 08121883175, 22) exited non-zero on 'PJSIP/883172_in-00000009'

https://www.asterisksounds.org/de/download

 # mkdir /usr/share/asterisk/sounds/de
 # de /usr/local/src
 # wget https://www.asterisksounds.org/de/download/asterisk-sounds-core-de-sln16.zip
 # wget https://www.asterisksounds.org/de/download/asterisk-sounds-extra-de-sln16.zip
 # unzip /usr/local/src/asterisk-sounds-core-de-sln16.zip -d /usr/share/asterisk/sounds/de/
 # unzip /usr/local/src/asterisk-sounds-extra-de-sln16.zip -d /usr/share/asterisk/sounds/de/
 # chmod 644 /usr/share/asterisk/sounds/de/* -R
 # find /usr/share/asterisk/sounds/de -type d -exec chmod 0755 {} \;
 # yum install sox
 # vi /usr/local/bin/asterisk-sound-convert
/usr/local/bin/asterisk-sound-convert
#!/bin/bash
cd /usr/share/asterisk/sounds/de
for a in $(find . -name '*.sln16'); do
  sox -t raw -e signed-integer -b 16 -c 1 -r 16k $a -t gsm -r 8k `echo $a|sed "s/.sln16/.gsm/"`;\
  sox -t raw -e signed-integer -b 16 -c 1 -r 16k $a -t raw -r 8k -e a-law `echo $a|sed "s/.sln16/.alaw/"`;\
  sox -t raw -e signed-integer -b 16 -c 1 -r 16k $a -t raw -r 8k -e mu-law `echo $a|sed "s/.sln16/.ulaw/"`;\
done
 # chmod +x /usr/local/bin/asterisk-sound-convert
 # asterisk-sound-convert

Haben wir von unserem VoIP-Anbieter mehrere Rufnummern bekommen, so werden wir diese in aller regel einzelnen Endgeräten oder Diensten zuordnen wollen. Bei ankommenden Gesprächen haben wir diese Zuordnung über den Abschnitt [telekom_in] vorgenommen. Nun wollen wir aber auch je nach verwendeter internen Nebenstelle unseres Asterisk eine bestimmte Rufnummr CLID1) als Absender nach extern verwenden und auch übertragen. Das was sich bei dem ein oder anderen höchstprofesssionellen Systemintegrator als unlösbare Herausforderunge bei einer VoIP-Anlage mit 3.000 Nebenstellen darstellen kann, gestaltet sich bei unserem Asterisk-Server als triviale Herausforderung. LOL

Für die Zuordnung der internen Rufnummern zu den jeweiligen externen Absenderrufnummern bzw. PJSIP-Kanälen bedienen wir uns der Asterisk-eigenen Datenbank. Diese Datenbank erreichen wir über die Funktion database. Wir können damit z.B. unsere Registrierten Geräte abfragen.

 # asterisk -r
 vml000177*CLI> database put 33 CLID 9959277_out
Updated database successfully
 vml000177*CLI> database put 36 CLID 9959278_out
Updated database successfully
 vml000177*CLI> database show
/33/CLID                                          : 9959277_out              
/36/CLID                                          : 9959278_out              
 # yum install asterisk-voicemail -y
 # chown asterisk:asterisk /var/spool/asterisk/voicemail/ -R
 # wget https://forensics.cert.org/cert-forensics-tools-release-el7.rpm
 # rpm -Uvh cert-forensics-tools-release*rpm
 # vim /etc/yum.repos.d/cert-forensics-tools.repo
/etc/yum.repos.d/cert-forensics-tools.repo
[forensics]
name=CERT Forensics Tools Repository
baseurl=http://www.cert.org/forensics/repository/centos/cert/$releasever/$basearch
enabled=1
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-cert-forensics-2018-04-07
gpgcheck=1
priority=10
 
[forensics-test]
name=CERT Forensics Tools Test Repository
baseurl=http://www.cert.org/forensics/repository/centos/cert-test/$releasever/$basearch
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-cert-forensics-2018-04-07
gpgcheck=1
 
[forensics-splunk]
name=CERT Forensics Tools Repository - Splunk
baseurl=http://www.cert.org/forensics/repository/centos/splunk/$releasever/$basearch/
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-splunk
enabled=0
gpgcheck=1
 
[forensics-sip]
name=CERT Forensics Tools Repository - SiLK, IPA, and Postgresql
baseurl=http://www.cert.org/forensics/repository/centos/sip/$releasever/$basearch
enabled=0
gpgkey=file:///etc/pki/rpm-gpg/RPM-GPG-KEY-cert-forensics-2018-04-07
gpgcheck=1
 # yum install lame -y
 # yum install asterisk-fax
 # rpm -qil asterisk-fax
Name        : asterisk-fax
Version     : 14.2.1
Release     : 1.el7.centos
Architecture: x86_64
Install Date: Sun 29 Jan 2017 09:51:54 PM CET
Group       : Applications/Internet
Size        : 155968
License     : GPLv2
Signature   : RSA/SHA1, Thu 08 Dec 2016 11:58:07 PM CET, Key ID ccf40e16b9a46fa9
Source RPM  : asterisk-14.2.1-1.el7.centos.src.rpm
Build Date  : Thu 08 Dec 2016 11:57:54 PM CET
Build Host  : olive.ph.tucny.com
Relocations : (not relocatable)
URL         : http://www.asterisk.org/
Summary     : FAX applications for Asterisk
Description :
FAX applications for Asterisk
/etc/asterisk/res_fax.conf
/usr/lib64/asterisk/modules/res_fax.so
/usr/lib64/asterisk/modules/res_fax_spandsp.so

1)
Calling Line IDentification
Diese Website verwendet Cookies. Durch die Nutzung der Website stimmen Sie dem Speichern von Cookies auf Ihrem Computer zu. Außerdem bestätigen Sie, dass Sie unsere Datenschutzbestimmungen gelesen und verstanden haben. Wenn Sie nicht einverstanden sind, verlassen Sie die Website.Weitere Information
  • voip/c7/asterisk14/start.txt
  • Zuletzt geändert: 18.11.2024 06:56.
  • von 127.0.0.1