-
-
Notifications
You must be signed in to change notification settings - Fork 15
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Dockerimage #97
Comments
Wie im anderen Thema bereits geschrieben, wäre das very nice! |
Lokale Installation ist auf jeden Fall zu bevorzugen, das ist keine Frage. Das ist auch jetzt schon möglich, es gibt aber noch keine vernünftige Anleitung dafür. Das Modul "phoneblock-ab" baut eine Java-Anwendung, die man "einfach" lokal starten kann, überall da wo man eine Java 17 VM zur Verfügung hat - Windows, Linux, RaspberryPI: phoneblock/phoneblock-ab/src/main/java/de/haumacher/phoneblock/answerbot/AnswerBot.java Line 379 in af672a6
Das Problem bei einem Docker-Image ist die Tatsache, dass das VOIP/RTP-Protokoll, dass der AB mit der Fritz!Box sprechen muss, nicht wie HTTP eine Einwegekommunikation ist, sondern beide Beteiligten müssen sich gegenseitig "aufrufen" können. Wenn man den AB in ein Docker-Image packt, dann muss man alle Ports, die für diese Kommunikation notwendig sind. von dem Docker-Image an Host weiterleiten, was die Konfiguration noch aufwendiger und fehleranfälliger macht. Auf jeden Fall möglich, aber nicht simpel. Eine "normale" Installation als Service auf einem RaspberryPI hat aber weniger Fehlerpotential. Siehe #90. |
Für den Fall kann man das Netzwerk des Containers statt im Bridge- im Host-Mode laufen lassen. Damit kann er frei sprechen und hören. Wäre es eine Möglichkeit, die kompilierte Java Anwendung in den Releases zur Verfügung zu stellen? Da müsste die nicht jeder selbst bauen, wenn sie statisch kompiliert eh für jeden gleich ist (ich hatte bisher noch keine Berührung zu Java). Das wäre vielleicht ein guter Startpunkt, oder? |
Das kingt gut - da sieht man, dass ich mich mit Container zu wenig auskenne... :-)
Ja, das ist natürlich eine vollkommen valide Anforderung - sollten wir ausprobieren.
Ja, das bereite ich vor. Angefangen habe ich schon mal das Build&Configure&Run zu beschreiben: https://github.com/haumacher/phoneblock/tree/master/phoneblock-ab aber wenn man das ganze Tooling noch nicht hat (Maven & Co) dann ist es etwas lästig, ja. |
Um so ein Docker-Image "vernünftig" (=massentauglich) nutzen zu können, müsste dieses auch eine Konfigurations-Weboberfläche anbieten, da man doch eine ganze Reihe Optionen ausfüllen muss und WAV-Files für die Ansagetexte zur Verfügung stellen muss. Das muss aber eigentlich alles in das Dockerimage rein. |
GUI finde ich super, aber so etwas ist für mich immer ein rotes Tuch, weil ich da 0 dazu beitragen kann. Welche Parameter (von Benutzerseite) sind denn nötig?
Die Logs sieht man entweder direkt in Docker oder du schreibst in ein Logfile, welches man mit herausmappen könnte. |
Für Docker-Images ist zu beachten, dass diese nicht plattformunabhängig sind. Es müssten Images für amd64 und arm und co bereitgestellt werden. |
Das stimmt. Ich sehe das auch eher als Alternative für die klassische JAVA-Installation. Ein Dockerimage würde wohl hauptsächlich Linux mit x86_64 adressieren. Im vorliegenden Fall könnte man wahrscheinlich auch ein plattformunabhängiges Image erstellen. Das müsste man dann in einem weiteren Schritt probieren. |
Synology NAS - was ist denn das für eine Prozessor-Architektur? |
Das lässt sich nicht pauschal beantworten. Die meisten Docker fähgigen Geräte haben eine x86_64 CPU. Das sind in der Regel dann die Anwender, die ihr NAS nicht nur als Datenspeicher betrachten, sondern eher als Homeserver. |
Es ist soweit - hier ist ein erster Aufschlag für ein Docker-Image, mit dem man den Answerbot lokal laufen lassen kann: https://hub.docker.com/r/phoneblock/answerbot Jetzt seid Ihr am Zug... :-) |
Du bist ja schneller als die Spammer 🤣 Gleich probiert und läuft 🙂 Noch eine Frage: Wie wird die FRITZ!Box adressiert? Wenn ich das richtig sehe, dann wohl über Ich würde außerdem noch vorschlagen, den Docker run Befehl noch etwas anzupassen:
Oder als Docker-compose:
|
Was mir noch aufgefallen ist: Ich hab jetzt mal im Compose-File die Konfiguration mit gemappt. So kann man bequem vom Host aus nötige Anpassungen vornehmen. volumes:
- ./conversation:/opt/phoneblock/conversation
- ./recordings:/opt/phoneblock/recordings
- ./phoneblock_config.conf:/opt/phoneblock/.phoneblock Allerdings sind in den Aufnahmen nur die Audiosegmente des Anrufers. Der Dialog durch den AB ist so nicht nachvollziehbar. Ist das eine Konfigurationsfrage? |
Aktuell wird in den Recordings nur das Ankommende Audio aufgezeichnet. Es wäre aber bestimmt möglich auch das ausgehende Audio da mit aufzunehmen. Auch in der aktuellen Version kann der Befehlt überschrieben werden. Jedoch muss hier: |
Das entspricht bei mir dem Ausführungsbefehl des aktuellen Images. |
Hallo, Kann ich dann in der Config Datei auch statt der Fritz.box auch eine IP Hinterlegen? Sind die Audiofile sehr wichtig oder kann man diese auch zum Anfang weglassen? MFG sig10680 |
@sig10680 Anstelle der Domain fritz.box kannst du auch die IP deines Routers eintragen. Du kannst die Audiodatei auch weglassen, dies führt aktuell aber dazu, dass der Anrufende in kein Gespräch verwickelt wird und es kann zu Fehlern im Log kommen. Es wäre prinzipiell auch möglich Multiplattform Images bereitzustellen. Hier ist aber noch ein wenig Vorarbeit notwendig. |
@hduelme Es wäre prinzipiell auch möglich Multiplattform Images bereitzustellen. Hier ist aber noch ein wenig Vorarbeit notwendig. Kann ich da irgendwie helfen? |
@sig10680 in der Dokumentation von Docker werden 3 Möglichkeiten zum Bauen für Multiplattform beschriebe. Ich denke die für dieses Projekt nützlichste Möglichkeit ist QEMU. Ich probiere das einmal aus und würde dann in meinem Merge-Request #100 eine Anleitung hinterlegen. Sobald das Neue Image bereitgestellt ist, könntest du einmal testen, ob es für dich funktioniert und uns Feedback geben. |
@hduelme Sobald das Neue Image bereitgestellt ist, könntest du einmal testen, ob es für dich funktioniert und uns Feedback geben. Danke wenn es verfügbar ist werde ich es Testen und mich wieder melden! Danke sig10680 |
Ich wollte es gerade bei mir probieren, aber leider enthält meine Dockerinstanz kein
|
@geimist ich hab gerade ein Anleitung für das Nutzen von |
Eigentlich ist die Aufnahme ein optionales Feature, das per-default ausgeschaltet ist. Das scheint aber in dem Image so nicht richtig zu funktionieren. Ob man das hierzulande überhaupt einschalten darf, weiß ich gar nicht. Verbrecher stehen ja unter Schutz und das Anfertigen eines Telefonmitschnitts würde ja ein Beweismittel erzeugen - das ist - wie die Videoaufnahme eines Taschendiebs - nur mit vorheriger Zustimmung des Verbrechers erlaubt - oder so ähnlich :-) |
Dann weist man halt bei der Begrüßung darauf hin, sofern man das Feature aktiviert. |
Habe mit @hduelme 's Anleitung Images für linux/amd64, linux/arm/v7 und linux/arm64/v8 erzeugt und auf dockerhub gepusht: https://hub.docker.com/r/phoneblock/answerbot/tags |
Ich werde es morgen mal auf meinen Pi testen! DANKE für die Erstellung. |
Ich habe die Umgebungvariablen Wenn ich allerdings mehr als einen Bot auf derselben Maschine laufen lassen wollte, dann müsste ich für jeden Bot unterschiedliche Ports vergeben. In der Konfiguration kann man das anpassen, aber das EXPOSE-Kommando in dem Dockerfile kann man ja nicht mehr anpassen. Es reicht auch nicht, einfach extern die Ports umzumappen, da die Ports in die SIP-Kommunikation eingebaut werden müssen - da ist wohl noch ein offener Punkt. |
Hallo, `[org.mjsip.ua.registration.RegistrationClient]: Registration of sip:[email protected]:50060 timed out. [2024-11-19 09:02:34] INFO: [org.mjsip.ua.registration.RegistrationLogger]: Registration of 'sip:[email protected]:50060' failed: Timeout [2024-11-19 09:02:34] INFO: [org.mjsip.ua.registration.RegistrationClient]: Waiting 60s for next registration of sip:[email protected]:50060.` Das ist meine config: Vielleicht habt ihr eine Idee! |
Irgendetwas scheint mit dem aktuellen Image noch nicht zu passen. Ich hatte es nicht gleich gemerkt, weil im Log keine Fehlermeldungen zu sehen sind und ein Testanruf auch Ansagen bringt. Allerdings keine Ansagen aus dem Pool "question". Auch werden keine (aktivierten) Aufnahmen abgelegt. Das Konfigfile habe ich testweise mit "-f none" auch deaktiviert. Ich gehe davon aus, dass der AB den Anrufer gar nicht hört (keine Reaktion auf den Anrufen / keine Aufnahme). Zum Test bin ich jetzt mal wieder auf das 1. Image zurückgewechselt (inkl. angepasstem Composefile – ich hatte mir das Image zum Glück gesichert) und da funktioniert es wieder. |
@geimist die Änderung im Neuen Docker-File ist, dass der Nutzer nicht mehr Root sondern phoneblock 999 ist. Wohin mountest du die Verzeichnisse? Und darf der Nutzer 999 darauf schreiben und lesen?
in deine Compose-File hinzufügst, läuft der wieder als Root |
Das Verzeichnis hat Schreibrechte für everyone (777). EDIT: |
@hduelme hier mein log und mit realm=fritz.box `-----End-of-message----- [2024-11-22 12:21:44] INFO: [org.mjsip.sip.provider.SipProvider]: Sent message to: 192.168.0.200:5060/udp (477 bytes). -----Begin-of-message----- REGISTER sip:192.168.0.200 SIP/2.0 Via: SIP/2.0/UDP 192.168.0.86:5060;branch=z9hG4bK754740c5 Route: sip:192.168.0.200;lr Max-Forwards: 70 To: sip:[email protected] From: sip:[email protected];tag=585142730710 Call-ID: [email protected] CSeq: 1 REGISTER Contact: sip:[email protected] Expires: 3600 User-Agent: mjsip 1.9.0-SNAPSHOT Content-Length: 0 -----End-of-message----- [2024-11-22 12:21:44] INFO: [org.mjsip.ua.registration.RegistrationClient]: Registration of sip:[email protected] timed out. [2024-11-22 12:21:44] INFO: [org.mjsip.ua.registration.RegistrationLogger]: Registration of 'sip:[email protected]' failed: Timeout [2024-11-22 12:21:44] INFO: [org.mjsip.ua.registration.RegistrationClient]: Waiting 60s for next registration of sip:[email protected].` |
@sig10680 die Fritzbox antwortet dir nicht.
Woraufhin es mit Username + Passwort versucht wird. |
@geimist bei mir funktioniert es auch mit dem neuen Image. Wie sieht deine yaml aus? |
@hduelme Wird auf dem Port zugehört? netstat -lntu Ja |
Ziemlich unverändert, meine ich: version: '3.9'
services:
phoneblock:
image: phoneblock/answerbot:latest
container_name: phoneblock
# command: "-f none"
# user: 0:0
network_mode: host
environment:
# description: https://github.com/haumacher/phoneblock/blob/master/phoneblock-ab/.phoneblock.template
- SIP_USER=phoneblock
- SIP_PASSWD=xxx
- PHONEBLOCK_USERNAME=xxx
- PHONEBLOCK_PASSWORD=xxx
- VIA_ADDR=auto-configuration
- VIA_ADDR_V6=auto-configuration
- HOST_PORT=50760
- REGISTRAR=fritz.box
- ROUTE=fritz.box;lr
- REALM=fritz.box
- MEDIA=audio 4080 RTP/AVP { 8 PCMA 8000 160 }
- MIN_SILENCE_TIME=1500
- PADDING_TIME=500
- SILENCE_DB=-35
- MEDIA_PORT=50100
- PORT_COUNT=10
- RECORDINGS=/opt/phoneblock/recordings
- CONVERSATION=/opt/phoneblock/conversation
volumes:
- ./conversation:/opt/phoneblock/conversation
# - ./recordings:/opt/phoneblock/recordings
restart: on-failure:5 |
@geimist |
Leider keine Änderung.
Ich hab auch mal alle Umgebungsvariablen bis auf |
Aber müsste es nicht gehen, wenn ich |
Ja |
Aber tut es ja auch nicht 🤷♂️ |
Wenn ich das Konfigfile mounte, funktioniert es: version: '3.9'
services:
phoneblock:
image: phoneblock/answerbot:latest
container_name: phoneblock
network_mode: host
environment:
- SIP_USER=phoneblock
- SIP_PASSWD=xxx
volumes:
- ./conversation:/opt/phoneblock/conversation
- ./phoneblock_config.conf:/opt/phoneblock/.phoneblock
restart: on-failure:5 phoneblock_config.conf: host-port=50060
registrar=fritz.box
route=fritz.box;lr
realm=fritz.box
media=audio 4080 RTP/AVP { 8 PCMA 8000 160 }
min-silence-time = 1500
padding-time = 500
silence-db = -35
media_port=50100
port-count=10
recodings=/opt/phoneblock/recordings
conversation=/opt/phoneblock/conversation |
@hduelme ich teste mal mit einer anderen Fritzbox und melde mich wieder. |
Edit 2:wenn ich |
@geimist genau das ist auch meine Vermutung. Daher habe ich etwas mehr Diagnose im 2. verlinkten Merge-Request eingebaut. |
Vielen Dank für die Analyse. Ich glaube das eigentliche Problem habe ich in der late-night-docker-build-aktion haumacher/mjSIP@3e10ba0 eingebaut und jetzt hoffentlich mit haumacher/mjSIP@9bb3532 behoben. Das Problem war, dass immer dann, wenn ein Konfigurationsfile angegeben wurde, die Umgebungsvariablen ignoriert (bzw. durch das Konfigurationsfile überschrieben) wurden. Das andere Problem, dass der AB nicht richtig zuhört, wenn er nicht auch aufzeichnet ist hiermit behoben: 8661f6e Ich habe das Docker-Image aktualisiert - wer noch nicht müde ist vom Testen, der kann es nochmal probieren :-) |
Läuft – vielen Dank 😊 |
Bei mir geht es jetzt auch. Sehr fein! Danke für die Unterstützung! |
Audacity kann das ganz gut: https://www.audacityteam.org/ |
@haumacher Danke das Teste ich mal. |
Mein Weg ging über eine Aufnahme mit allen Sätzen einer Gruppe in OcenAudio. Konvertierung der Schnipsel ins passende Format dann mit ffmpeg: Langform (als Bash) #!/bin/bash
# Prüfen, ob ein Ordner als Parameter übergeben wurde
if [ -z "$1" ]; then
echo "Bitte einen Ordner als Parameter angeben."
exit 1
fi
INPUT_DIR="$1"
# Prüfen, ob der angegebene Ordner existiert
if [ ! -d "$INPUT_DIR" ]; then
echo "Der Ordner '$INPUT_DIR' existiert nicht."
exit 1
fi
# Funktion, um eindeutigen Dateinamen zu erstellen
generate_unique_filename() {
local dir="$1"
local base_name="$2"
local extension="$3"
local counter=1
local new_name="${base_name}.${extension}"
while [ -e "$dir/$new_name" ]; do
new_name="${base_name}_$counter.${extension}"
((counter++))
done
echo "$new_name"
}
# Schleife durch alle Audiodateien im Ordner
for file in "$INPUT_DIR"/*.{mp3,flac,wav,m4a,ogg}; do
# Prüfen, ob Datei existiert
[ -e "$file" ] || continue
# Extrahiere Dateinamen ohne Erweiterung
base_name=$(basename "$file" | sed 's/\.[^.]*$//')
output_file=$(generate_unique_filename "$INPUT_DIR" "$base_name" "wav")
echo "Konvertiere: $file -> $INPUT_DIR/$output_file"
# Konvertierung mit ffmpeg
ffmpeg -i "$file" -c:a pcm_alaw -ar 8000 -ac 1 "$INPUT_DIR/$output_file"
done
echo "Konvertierung abgeschlossen." |
So habe jetzt ein paar wav Dateien erstellt. Er spielt aber nur immer die hallo wav ab. Mehr nicht. Habe aber auch eine Fehlermeldung im log. |
Du musst die WAVs in Verzeichnisse einsortieren, wie hier beschrieben: https://github.com/haumacher/phoneblock/tree/master/phoneblock-ab/conversation Er nimmt immer zufällig eine Datei aus dem Verzeichnis, das zu seinem "Gesprächszustand" passt. |
@haumacher ich habe in jeden Verzeichnis mehrere Audio files aber er nimmt nur immer die hello danach kommt nur Stille oder das rauschen file |
Wäre es nicht praktisch, ein Dockerimage zum selbshosten des ABs bereitzustellen? Ich weiß nicht, wie kompliziert eine manuelle Installation ist und wie modular die Projekte (Frontend, CardDAV-Server, AB) aufgebaut sind. Es müssten halt ein paar Umgebungsvariablen festgelegt werden können (Sip User und Kennwort könnte in dem Fall der User angeben und halt die URL zur FritzBox).
Zusätzlich müsste noch ein Sync für die Spamliste implementiert werden und als opt-in ein Rückkanal, damit PhoneBlock die Trefferquote validieren kann.
einige Vorteile, die ich sehe:
nicht vertrauenswürdiges Cert der FB, ect.) #81Bitte entschuldige, falls das falsch rüberkommt:
Ich möchte hier nicht fordernd auftreten. Das sind nur ein paar Gedanken und Begehrlichkeiten, die so bei einem Neueinsteiger geweckt werden 🤗
The text was updated successfully, but these errors were encountered: