commit 2abc5f570c80797f79e51281c33ffb61ec38e5c2 Author: paspo Date: Tue Jan 1 23:34:16 2019 +0100 initial release diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..59233ac --- /dev/null +++ b/.gitignore @@ -0,0 +1,2 @@ +recordings/ +recordings-csv/ diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..00b9288 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,16 @@ +FROM alpine:3.8 + +RUN apk -U add asterisk + +COPY config/asterisk.conf /etc/asterisk/ +COPY config/cdr_custom.conf /etc/asterisk/ +COPY config/cdr.conf /etc/asterisk/ +COPY config/extensions.conf /etc/asterisk/ +COPY config/logger.conf /etc/asterisk/ +COPY config/modules.conf /etc/asterisk/ +COPY config/rtp.conf /etc/asterisk/ +COPY start.sh /usr/local/bin/start.sh + +VOLUME /recordings + +ENTRYPOINT ["/bin/sh", "/usr/local/bin/start.sh"] diff --git a/config/asterisk.conf b/config/asterisk.conf new file mode 100644 index 0000000..a6682da --- /dev/null +++ b/config/asterisk.conf @@ -0,0 +1,4 @@ +[options] +verbose = 2 +; debug = 5 +;defaultlanguage = es diff --git a/config/cdr.conf b/config/cdr.conf new file mode 100644 index 0000000..e8749e3 --- /dev/null +++ b/config/cdr.conf @@ -0,0 +1,7 @@ +[general] +enable=yes + +[custom] +; We log the unique ID as it can be useful for troubleshooting any issues +; that arise. +loguniqueid=yes diff --git a/config/cdr_custom.conf b/config/cdr_custom.conf new file mode 100644 index 0000000..6ebd603 --- /dev/null +++ b/config/cdr_custom.conf @@ -0,0 +1,2 @@ +[mappings] +recordings.csv => ${CSV_QUOTE(${CDR(clid)})},${CSV_QUOTE(${CDR(src)})},${CSV_QUOTE(${CDR(dst)})},${CSV_QUOTE(${CDR(dcontext)})},${CSV_QUOTE(${CDR(channel)})},${CSV_QUOTE(${CDR(dstchannel)})},${CSV_QUOTE(${CDR(lastapp)})},${CSV_QUOTE(${CDR(lastdata)})},${CSV_QUOTE(${CDR(start)})},${CSV_QUOTE(${CDR(answer)})},${CSV_QUOTE(${CDR(end)})},${CSV_QUOTE(${CDR(duration)})},${CSV_QUOTE(${CDR(billsec)})},${CSV_QUOTE(${CDR(disposition)})},${CSV_QUOTE(${CDR(amaflags)})},${CSV_QUOTE(${CDR(accountcode)})},${CSV_QUOTE(${CDR(uniqueid)})},${CSV_QUOTE(${CDR(userfield)})},${CDR(sequence)} diff --git a/config/extensions.conf b/config/extensions.conf new file mode 100644 index 0000000..41fdab5 --- /dev/null +++ b/config/extensions.conf @@ -0,0 +1,3 @@ +[incoming-calls] +; see here for the options: https://github.com/asterisk/asterisk/blob/master/apps/app_record.c +exten=>s,1,Record(/recordings/${STRFTIME(${EPOCH},,%Y-%m)}/${STRFTIME(${EPOCH},,%d)}/${UNIQUEID}.wav,60,0,qkux) diff --git a/config/logger.conf b/config/logger.conf new file mode 100644 index 0000000..fa29890 --- /dev/null +++ b/config/logger.conf @@ -0,0 +1,9 @@ +[general] + +[logfiles] + +console = debug,verbose,notice,warning,error + +;messages = notice,warning,error +;full = verbose,notice,warning,error,debug +;security = security diff --git a/config/modules.conf b/config/modules.conf new file mode 100644 index 0000000..02c0c7f --- /dev/null +++ b/config/modules.conf @@ -0,0 +1,97 @@ +[modules] +autoload = no + +load = app_record.so +load = app_verbose.so +load = cdr_custom.so +load = chan_pjsip.so + +; Codecs + +load = codec_gsm.so +load = codec_resample.so +load = codec_ulaw.so +load = codec_alaw.so +load = codec_g722.so +load = codec_adpcm.so +load = codec_g726.so + +; Formats + + +load = format_g719.so +load = format_g723.so +load = format_h263.so +load = format_g729.so +load = format_g726.so +load = format_h264.so +load = format_gsm.so +load = format_pcm.so +load = format_wav_gsm.so +load = format_wav.so + +; Functions + +load = func_callerid.so +load = func_cdr.so +load = func_pjsip_endpoint.so +load = func_sorcery.so +load = func_devstate.so +load = func_strings.so +load = func_env.so + +load = pbx_config.so + +; Resources + +load = res_pjproject.so +load = res_pjsip_acl.so +load = res_pjsip_authenticator_digest.so +load = res_pjsip_caller_id.so +load = res_pjsip_dialog_info_body_generator.so +load = res_pjsip_diversion.so +load = res_pjsip_dtmf_info.so +load = res_pjsip_endpoint_identifier_anonymous.so +load = res_pjsip_endpoint_identifier_ip.so +load = res_pjsip_endpoint_identifier_user.so +load = res_pjsip_exten_state.so +load = res_pjsip_header_funcs.so +load = res_pjsip_logger.so +load = res_pjsip_messaging.so +load = res_pjsip_mwi_body_generator.so +load = res_pjsip_mwi.so +load = res_pjsip_nat.so +load = res_pjsip_notify.so +load = res_pjsip_one_touch_record_info.so +load = res_pjsip_outbound_authenticator_digest.so +load = res_pjsip_outbound_publish.so +load = res_pjsip_outbound_registration.so +load = res_pjsip_path.so +load = res_pjsip_pidf_body_generator.so +load = res_pjsip_pidf_digium_body_supplement.so +load = res_pjsip_pidf_eyebeam_body_supplement.so +load = res_pjsip_publish_asterisk.so +load = res_pjsip_pubsub.so +load = res_pjsip_refer.so +load = res_pjsip_registrar.so +load = res_pjsip_rfc3326.so +load = res_pjsip_sdp_rtp.so +load = res_pjsip_send_to_voicemail.so +load = res_pjsip_session.so +load = res_pjsip.so +load = res_pjsip_t38.so +load = res_pjsip_transport_websocket.so +load = res_pjsip_xpidf_body_generator.so +load = res_rtp_asterisk.so +load = res_sorcery_astdb.so +load = res_sorcery_config.so +load = res_sorcery_memory.so +load = res_sorcery_realtime.so +load = res_timing_timerfd.so + + +; Don't load res_hep.so and kin unless you are using hep monitoring in your network + +noload = res_hep.so +noload = res_hep_pjsip.so +noload = res_hep_rtcp.so diff --git a/config/pjsip.conf.template b/config/pjsip.conf.template new file mode 100644 index 0000000..cb17fe6 --- /dev/null +++ b/config/pjsip.conf.template @@ -0,0 +1,49 @@ +[mytransport] +type=transport +protocol=udp +bind=0.0.0.0 +; localnet=172.17.0.0/16 +external_media_address=192.168.2.142 +external_signaling_address=192.168.2.142 + + + +[mytrunk] +type=registration +transport=mytransport +outbound_auth=mytrunk +server_uri=sip:192.168.2.1:5060 +client_uri=sip:internotest@192.168.2.1:5060 +; contact_user = incoming-calls + + +[mytrunk] +type=auth +auth_type=userpass +password=mio4reil +username=internotest + +[mytrunk] +type=aor +contact=sip:192.168.2.1:5060 + +[mytrunk] +type=endpoint +context=incoming-calls +; disallow=all +; allow=ulaw +; allow=all +disallow=all +allow=speex,g726,g722,ilbc,gsm,alaw + +outbound_auth=mytrunk +aors=mytrunk + +[mytrunk] +type=identify +endpoint=mytrunk +match=192.168.2.1 + + + + diff --git a/config/rtp.conf b/config/rtp.conf new file mode 100644 index 0000000..8699cc7 --- /dev/null +++ b/config/rtp.conf @@ -0,0 +1,9 @@ +[general] +; +; RTP start and RTP end configure start and end addresses +; +; Defaults are rtpstart=5000 and rtpend=31000 +; +rtpstart=15000 +rtpend=15100 + diff --git a/start.sh b/start.sh new file mode 100644 index 0000000..df79321 --- /dev/null +++ b/start.sh @@ -0,0 +1,48 @@ +#!/bin/sh + +SIP_SERVER=${SIP_SERVER:-127.0.0.1} +SIP_USER=${SIP_USER:-user} +SIP_PASS=${SIP_PASS:-user} +EXTERNAL_IP=${EXTERNAL_IP:-127.0.0.1} + +cat >/etc/asterisk/pjsip.conf <