Horstbox Prof. Call Recording

riesling

Neuer User
Mitglied seit
10 Nov 2004
Beiträge
9
Punkte für Reaktionen
0
Punkte
0
Hallo Leute,
wir müssen aus rechtlichen Gründen alle Gespräche einer bestimmten MSN mitschneiden und archivieren.
Ich würde das gerne mit der Horstbox machen, habe auch schon jede Menge gegoogelt und im Forum gesucht, weiß aber noch nicht so recht wie es gehen soll.

Der Aufbau

-----ISDN-----| Horst Box |-----a/b-----|Telefonanlage|

Die Box soll die Calls dann als WAV oder MP3 auf einen USB-Stick legen und ggf. per ftp/smb zum Download anbieten.

Hier meine Fragen:
1. Ich habe nun gelesen, dass die Original FW einen Anrufbeantworter integriert hat. Lässt sich dieser ohne Modifikationen dafür nutzen?

2. Ich habe dann mal bei Asterisk nach dem Thema gesucht und habe die Kommandos
Monitor
Record
MixMonitor
gefunden. Steht so etwas bei der Horstbox als Erweiterungen zur Verfügung?

3. Da die OpenHorst FW keine analogen Schnittstellen unterstützt, bleibt wohl nur eine 'offene' 4.3 oder 5er FW übrig. Was muss/soll ich hier verwenden?

4. Hat jemand evl. auch schon eine Idee, wie man so etwas konkret konfiguriert?

Es wäre schön, wenn ihr mir ein paar Tipps zum Start geben könntet. Die Box habe ich mir gestern schon mal bestellt.

Danke

riesling
 
Call Recording Howto

Hallo Leute,
nach einigen Abenden Beschäftigung mit dem Thema habe ich es am laufen und möchte hier kurz beschreiben, wie man so etwas macht.
Generell kann man die Schritte auch nutzen, um zusätzliche Asterisk Module und Konfigurationsänderungen in das Image zu backen.

Wie immer: Keine Garantie, ihr operiert am offenen Herzen!

Was muss geändert werden?
Um Gespräche mitzuschneiden, wird das App MixModul benötigt, das sich nicht im Image befindet.
Außerdem benötigt man einige wenige Zeilen in der extensions.conf.
Da die extensions.conf von einem C-Programm geschrieben wird, muss man hier den Quelltext ändern, um es automatisch mit generieren zu lassen.
Der USB Stick wird leider mit seinem Namen gemountet. Um hier immer den gleichen Pfad zu nutzen, muss die Hotplug Routine um einen symbolischen Link erweitert werden.

Was wird benötigt?
Entwickler DVD 2.6 ftp://ftp.dlink.de/dva/dva-g3342sb/driver_software/D-Link-Development-DVD-V2.6.iso
Image 5.0 ftp://ftp.dlink.de/dva/dva-g3342sb/driver_software/DVA-G3342SB_fw_reva_5.0_de_19092008.zip

Folgende Links erklären das grundsätzliche Vorgehen beim Übersetzen des Images und beim Aus- und Einpacken eines Images:
http://www.ip-phone-forum.de/showthread.php?t=134318
http://www.ip-phone-forum.de/showthread.php?t=193031

Die Schritte im einzelnen

1. Original Image auspacken
Es wäre auch möglich, ein ganz neues Image zu backen, aber mir war das zu heiß. Deshalb habe ich mich entschieden, ein lauffähiges Images entsprechend zu ändern.

Code:
[b]$ ls[/b]
DVA-G3342SB_fw_reva_5.0_de_19092008.zip
[b]$ unzip DVA-G3342SB_fw_reva_5.0_de_19092008.zip[/b]
Archive:  DVA-G3342SB_fw_reva_5.0_de_19092008.zip
   creating: HBX_offline_update_5.0/
  inflating: HBX_offline_update_5.0/horst-dsl-image-5.0.dat  
  inflating: HBX_offline_update_5.0/horst-image-5.0.dat  
  inflating: HBX_offline_update_5.0/release_notes_horstbox_dva-g3342sb.txt  
  inflating: Firmwareupdate.txt      
[b]$ cd HBX_offline_update_5.0[/b]
$ ls
horst-image-5.0.dat
[b]$ mewencode -d horst-image-5.0.dat >img.tgz[/b]
[b]$ ls[/b]
horst-dsl-image-5.0.dat  img.tgz
horst-image-5.0.dat      release_notes_horstbox_dva-g3342sb.txt
[b]$  tar xvf img.tgz [/b]
image/main-fs
image/opt-fs
image/update-fs
image/zImage
image/version-info
image/dsl-image
image/config.txt

Hier muss man etwas aufpassen, da der unsquashfs Befehl in Ubunt'u (9.04) das Image nicht auspacken kann:
Code:
/usr/bin/unsquashfs image/main-fs 
Reading a different endian SQUASHFS filesystem on image/main-fs
Can't find a SQUASHFS superblock on image/main-fs
Ich habe mir dann den Quelltext von hier gezogen und übersetzt, damit hat es dann funktioniert:http://www.bitsum.com/firmware_mod_kit.htm

Code:
[b]$ sudo unsquashfs image/main-fs [/b]
Reading a different endian SQUASHFS filesystem on image/main-fs

created 1232 files
created 78 directories
created 302 symlinks
created 55 devices
created 0 fifos

Nun haben wir das Filesystem unter squashfs-root und können die Veränderungen vornehmen.

2. Modul hinzufügen, extensions.conf anpassen und Hotplug frisieren
Wenn wir die Entwicklerversion übersetzt haben, stehen alle Module (Apps) von asterisk bereit. Das passende Modul muss dann in das sqauashgs-root Verzeichnis kopiert werden:

Code:
~/Work-Environment/Source-5.0/build_env/asterisk-1.2.18/apps$ ls -l app_mixmonitor.so 
-rwxr-xr-x 1 ubuntu ubuntu 110468 2010-03-03 19:03 app_mixmonitor.so
[b] cp app_mixmonitor.so /tmp/horstbox/HBX_offline_update_5.0/squashfs-root/usr/lib/asterisk/modules [/b]

Anpassung phone_cfg_modules.c
Nun muss dieses Modul in die modules.conf aufgenommen werden.
Die Datei wird vom Programm phone_config geschrieben, hier muss einfach die eine Zeile in phone_cfg_modules.c geändert werden:

Code:
~/Work-Environment/Source-5.0/build_env/board_config/phone$ diff phone_cfg_modules.c.org phone_cfg_modules.c
111a112
> 		"load => app_mixmonitor.so\n"

In der extensions.conf müssen wir das Modul nun einbinden.
Diese wird auch von phone_config geschrieben. Die Konfiguration soll später folgendermaßen aussehen:
In diesem Fall sollen alle ankommenden Gespräche auf einer MSN mitgeschnitten und dann a/b ausgegeben werden. Ist kein USB Stick eingesteckt, dann soll der Punkt übersprungen werden.
(Siehe auch: http://www.panoramisk.com/99/asterisk-call-monitoring/en/)


Code:
[isdn-in]

 exten => 1234,1,ModifyCallerID(doit)
 exten => 1234,2,Set(CALLERID(num)=${CALLERID(num)})
 exten => 1234,3,System(test -d /run/mnt/usbstick)
 exten => 1234,4,NoOp(${SYSTEMSTATUS})
 exten => 1234,5,GotoIf($["${SYSTEMSTATUS}" = "SUCCESS"]?monitor:dial)
 exten => 1234,6(monitor),Set(DIRNAME=/run/mnt/usbstick/${STRFTIME(${EPOCH},,%Y-%m-%d)})
 exten => 1234,7,Set(FILENAME=${DIRNAME}/${STRFTIME(${EPOCH},,%H%M%S)}-1234-${CALLERID(num)})
 exten => 1234,8,System(/bin/mkdir -p ${DIRNAME})
 exten => 1234,9,MixMonitor(${FILENAME}.gsm,b)
 exten => 1234,10(dial),Dial(local/002002@local&local/002001@local, 90,t)
 exten => 1234,11,Hangup(17)

Quelltextänderung in phone_cfg_extension.c:
Code:
diff phone_cfg_extension.c phone_cfg_extension.c.org
25d24
<  * MTH, 2010/03/05 MixMonitor eingebaut
553,561c552
< 	fprintf(info->output, " exten => %s,3,System(test -d /run/mnt/usbstick)\n",ext);
< 	fprintf(info->output, " exten => %s,4,NoOp(${SYSTEMSTATUS})\n",ext);
< 	fprintf(info->output, " exten => %s,5,GotoIf($[\"${SYSTEMSTATUS}\" = \"SUCCESS\"]?monitor:dial)\n",ext);
< 	fprintf(info->output, " exten => %s,6(monitor),Set(DIRNAME=/run/mnt/usbstick/${STRFTIME(${EPOCH},,%%Y-%%m-%%d)})\n",ext);
< 	fprintf(info->output, " exten => %s,7,Set(FILENAME=${DIRNAME}/${STRFTIME(${EPOCH},,%%H%%M%%S)}-%s-${CALLERID(num)})\n",ext,ext);
< 	fprintf(info->output, " exten => %s,8,System(/bin/mkdir -p ${DIRNAME})\n",ext);
< 	fprintf(info->output, " exten => %s,9,MixMonitor(${FILENAME}.gsm,b)\n",ext);
< 
< 	fprintf(info->output, " exten => %s,10(dial),Dial(", ext);
---
> 	fprintf(info->output, " exten => %s,3,Dial(", ext);
574c565
< 			fprintf(info->output, " exten => %s,11,Busy()\n", ext);
---
> 			fprintf(info->output, " exten => %s,4,Busy()\n", ext);
577,580c568,571
< 			fprintf(info->output, " exten => %s,11,Answer()\n",ext);
< 			fprintf(info->output, " exten => %s,12,Wait(2)\n",ext);
< 			fprintf(info->output, " exten => %s,13,Voicemail(u1000)\n",ext);
< 		        fprintf(info->output, " exten => %s,14,Hangup()\n", ext);
---
> 			fprintf(info->output, " exten => %s,4,Answer()\n",ext);
> 			fprintf(info->output, " exten => %s,5,Wait(2)\n",ext);
> 			fprintf(info->output, " exten => %s,6,Voicemail(u1000)\n",ext);
> 		        fprintf(info->output, " exten => %s,7,Hangup()\n", ext);
586c577
< 			fprintf(info->output, " exten => %s,11,Hangup(17)\n", ext);
---
> 			fprintf(info->output, " exten => %s,4,Hangup(17)\n", ext);
589,592c580,583
< 			fprintf(info->output, " exten => %s,11,Answer()\n",ext);
< 			fprintf(info->output, " exten => %s,12,Wait(2)\n",ext);
< 			fprintf(info->output, " exten => %s,13,Voicemail(u1000)\n",ext);
< 		        fprintf(info->output, " exten => %s,14,Hangup(17)\n", ext);
---
> 			fprintf(info->output, " exten => %s,4,Answer()\n",ext);
> 			fprintf(info->output, " exten => %s,5,Wait(2)\n",ext);
> 			fprintf(info->output, " exten => %s,6,Voicemail(u1000)\n",ext);
> 		        fprintf(info->output, " exten => %s,7,Hangup(17)\n", ext);

Man könnte das ganze auch einfach von nvram-Variablen abhängig machen, aber ich habe das hier nicht so flexibel gebraucht.

Nun den Kram nochmals übersetzen (am einfachsten noch mal make in build_env eingeben) und dann phone_config kopieren:

Code:
cp phone_config /tmp/horstbox/HBX_offline_update_5.0/squashfs-root/usr/share/board_cfg

Als Pfad wird wie oben aufgeführt /run/mnt/usbstick genutzt. Dieser Pfad soll nach dem Einstecken der Sticks automatisch zur Verfügung stehen.
Das können wir direkt im Hotplug Script unter squashfs ändern:
Code:
cd /tmp/horstbox/HBX_offline_update_5.0/squashfs-root/etc.ro/hotplug.d
diff 8.hotplug 8.hotplug.org
7d6
< LNPATH="/run/mnt/usbstick"
272d270
< 		ln -s $mountpoint $LNPATH 
333d330
< 		rm -f $LNPATH
Danach bitte die Org Datei entfernen, sonst packen wir sie ein.

Wer will, kann auch noch eine eigene FW Versions Nummer vergeben:
Code:
/tmp/horstbox/HBX_offline_update_5.0/squashfs-root/etc.ro$ cat version 
5.0MON

3. Zusammenpacken des Images
Die Änderungen müssen nun in ein neues Image zusammengepackt werden
Ich habe es unter root gemacht:

Code:
[b]$ sudo su
$ pwd[/b]
/tmp/horstbox/HBX_offline_update_5.0
[b]$ rm image/main-fs
$ mksquashfs squashfs-root image/main-fs -be -noappend
$ chmod 644 image/main-fs
$ chown -R root: image
$ tar cfz horst-custom-5.0.tar.gz image/main-fs image/opt-fs image/update-fs image/zImage image/version-info image/dsl-image image/config.txt
$ mewencode -e horst-custom-5.0.tar.gz horst-image-custom-5.0MON.dat[/b]

Achtung: Es muss auf dem Linux System ein Nutzer atserisk mit der UID 100 geben. Anderenfalls werden /dev/ Dateien mit unsinnigen uids angelegt und asterisk startet nicht mehr. Bitte auf folgende Meldung achten:

Code:
Creating big endian 3.0 filesystem on image/main-fs, block size 65536.

Big endian filesystem, data block size 65536, compressed data, compressed metadata, compressed fragments
Filesystem size 9654.15 Kbytes (9.43 Mbytes)
	47.72% of uncompressed filesystem size (20229.22 Kbytes)
Inode table size 16679 bytes (16.29 Kbytes)
	30.64% of uncompressed inode table size (54443 bytes)
Directory table size 15717 bytes (15.35 Kbytes)
	51.19% of uncompressed directory table size (30705 bytes)
Number of duplicate files found 13
Number of inodes 1667
Number of files 1232
Number of fragments 105
Number of symbolic links  302
Number of device nodes 55
Number of fifo nodes 0
Number of socket nodes 0
Number of directories 78
[b]Number of uids 2
	root (0)
[b]	unknown (1677721600) [/b]
Number of gids 1
	root (0)

Dann bitte unter squashfs-root/etc die Rechte enstprechend anpassen:
Code:
[b]$ ls -ld zap[/b]
drwxr-xr-x 2 1677721600 root     4096 2008-08-21 20:56 zap
[b]$ chown -R asterisk zap[/b]

Richtig muss die Meldung von mksquashfs so aussehen:
Code:
...
Number of uids 2
	root (0)
[b]	asterisk (100) [/b]
Number of gids 1
	root (0)
...


Nun kann die Datei horst-image-custom-5.0MON.dat geflasht werden.

Nach dem Reboot loggt man sich zum Testen per ssh ein und kontrolliert, ob das neue Modul geladen wurde und die Konfiguration fehlerfrei geparsed werden kann:

Code:
~ # asterisk -r
Asterisk 1.2.18-BRIstuffed-0.3.0-PRE-1y-g, Copyright (C) 1999 - 2006 Digium, Inc. and others.
...
Voice-Board*CLI> 
[b]Voice-Board*CLI> show applications[/b]
    -= Registered Asterisk Applications =-
       ...
         MailboxExists: Check to see if Voicemail mailbox exists
 [b]           MixMonitor: Record a call and mix the audio during the recording[/b]
        ModifyCallerID: Modify CallerID
       ...
              -= 84 Applications Registered =-
[b]Voice-Board*CLI>extensions reload[/b]
Voice-Board*CLI>

Wenn nun ein USB Stick eingesteckt, wird ein Unterverzeichnis auf mit dem Datum erzeugt und pro Anruf eine Datei im Format .gsm abgelegt.
Die .gsm Dateien sind viel kleiner als .wav und können mit winamp und einem entsprechenden Plugin abgespielt werden.

Viel Spass

riesling
 
Holen Sie sich 3CX - völlig kostenlos!
Verbinden Sie Ihr Team und Ihre Kunden Telefonie Livechat Videokonferenzen

Gehostet oder selbst-verwaltet. Für bis zu 10 Nutzer dauerhaft kostenlos. Keine Kreditkartendetails erforderlich. Ohne Risiko testen.

3CX
Für diese E-Mail-Adresse besteht bereits ein 3CX-Konto. Sie werden zum Kundenportal weitergeleitet, wo Sie sich anmelden oder Ihr Passwort zurücksetzen können, falls Sie dieses vergessen haben.