Open geimist opened 1 week ago
@geimist RECODINGS
wir haben wohl einen @Option(name = "--recodings", usage = "Directory where to store recordings to, 'none' to disable recording.")
deine Option passt nicht.
Versuch mal RECORDINGS
mit RECODINGS
zu ersetzen.
Leider keine Änderung. Du kannst auch an den abgespielten Ansagen sehen, dass der AB nicht auf den Anrufer reagiert:
phoneblock
date,stream,content
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [de.haumacher.phoneblock.answerbot.AnswerBot]: AnswerBot 1.5.0-SNAPSHOT
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--via-addr' from environment: VIA_ADDR=auto-configuration
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--via-addr-v6' from environment: VIA_ADDR_V6=auto-configuration
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--host-port' from environment: HOST_PORT=50760
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--media' from environment: MEDIA=audio 4080 RTP/AVP { 8 PCMA 8000 160 }
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--conversation' from environment: CONVERSATION=/opt/phoneblock/conversation
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--min-silence-time' from environment: MIN_SILENCE_TIME=1500
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--padding-time' from environment: PADDING_TIME=500
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--silence-db' from environment: SILENCE_DB=-35
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--phoneblock-username' from environment: PHONEBLOCK_USERNAME=xxx
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--phoneblock-password' from environment: PHONEBLOCK_PASSWORD=xxx
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--registrar' from environment: REGISTRAR=fritz.box
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--route' from environment: ROUTE=fritz.box;lr
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--sip-user' from environment: SIP_USER=phoneblock
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--sip-passwd' from environment: SIP_PASSWD=xxx
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--realm' from environment: REALM=fritz.box
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--media-port' from environment: MEDIA_PORT=50100
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.config.OptionParser]: Using '--port-count' from environment: PORT_COUNT=10
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.sip.provider.SipProvider]: SipStack: mjsip 1.9.0-SNAPSHOT
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.sip.provider.SipProvider]: SipProvider: 50060
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.sip.provider.SipProvider]: udp is up at port 50060
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [org.mjsip.sip.provider.SipProvider]: tcp is up at port 50060
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [de.haumacher.phoneblock.answerbot.AnswerBot]: Supported media: audio 4080 RTP/AVP { 8 PCMA 8000 160 1 }
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [de.haumacher.phoneblock.answerbot.AnswerBot]: Supported media: audio 4080 RTP/AVP { 8 PCMA 8000 160 1 }
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [de.haumacher.phoneblock.answerbot.AnswerBot]: Found 6 audio fragment for dialogue state hello and format 'PCMA'.
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [de.haumacher.phoneblock.answerbot.AnswerBot]: Found 1 audio fragment for dialogue state waiting and format 'PCMA'.
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [de.haumacher.phoneblock.answerbot.AnswerBot]: Found 6 audio fragment for dialogue state who-is-calling and format 'PCMA'.
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [de.haumacher.phoneblock.answerbot.AnswerBot]: Found 8 audio fragment for dialogue state still-there and format 'PCMA'.
2024/11/22 14:22:21,stdout,[2024-11-22 13:22:21] INFO: [de.haumacher.phoneblock.answerbot.AnswerBot]: Found 16 audio fragment for dialogue state question and format 'PCMA'.
2024/11/22 14:22:21,stdout,"[2024-11-22 13:22:21] INFO: [org.mjsip.ua.registration.RegistrationLogger]: Registration of '<sip:phoneblock@192.168.170.21:50060>' 200 OK, expires in 300s, renewing in 300s."
2024/11/22 14:22:27,stdout,[2024-11-22 13:22:27] INFO: [de.haumacher.phoneblock.answerbot.AnswerBot]: Incomming call from: **611
2024/11/22 14:22:27,stdout,[2024-11-22 13:22:27] INFO: [org.mjsip.sip.transaction.AckTransactionServer]: new transaction-id: 18F612B3FD0BD4EE@192.168.170.1-30-INVITE-server-z9hG4bK53495341A2405C80
2024/11/22 14:22:27,stdout,[2024-11-22 13:22:27] INFO: [de.haumacher.phoneblock.answerbot.DialogueFactory]: Starting dialogue with audio type: PCMA
2024/11/22 14:22:27,stdout,[2024-11-22 13:22:27] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/hello/PCMA/hello_5.wav
2024/11/22 14:22:27,stdout,"[2024-11-22 13:22:27] INFO: [org.mjsip.media.AudioStreamer]: Base format: PCM_SIGNED 8000.0 Hz, 16 bit, mono, 2 bytes/frame, little-endian"
2024/11/22 14:22:27,stdout,"[2024-11-22 13:22:27] INFO: [org.mjsip.media.AudioStreamer]: Supported codecs: ULAW, PCM_UNSIGNED, PCM_SIGNED, PCM_SIGNED, PCM_UNSIGNED, PCM_FLOAT, ALAW"
2024/11/22 14:22:27,stdout,"[2024-11-22 13:22:27] INFO: [org.mjsip.media.AudioStreamer]: Target format: ALAW 8000.0 Hz, 8 bit, mono, 1 bytes/frame"
2024/11/22 14:22:27,stdout,[2024-11-22 13:22:27] INFO: [org.mjsip.media.RtpStreamSender]: Created RTP stream sender: UDP:null:50100 --> 192.168.170.1:7084
2024/11/22 14:22:27,stdout,[2024-11-22 13:22:27] INFO: [org.mjsip.media.AudioStreamer]: starting java audio
2024/11/22 14:22:28,stdout,[2024-11-22 13:22:28] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/waiting/PCMA/waiting_1.wav
2024/11/22 14:22:35,stdout,[2024-11-22 13:22:35] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/who-is-calling/PCMA/who-is-calling_2.wav
2024/11/22 14:22:37,stdout,[2024-11-22 13:22:37] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/waiting/PCMA/waiting_1.wav
2024/11/22 14:22:44,stdout,[2024-11-22 13:22:44] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/who-is-calling/PCMA/who-is-calling_5.wav
2024/11/22 14:22:46,stdout,[2024-11-22 13:22:46] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/waiting/PCMA/waiting_1.wav
2024/11/22 14:22:53,stdout,[2024-11-22 13:22:53] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/who-is-calling/PCMA/who-is-calling_6.wav
2024/11/22 14:22:56,stdout,[2024-11-22 13:22:56] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/waiting/PCMA/waiting_1.wav
2024/11/22 14:23:02,stdout,[2024-11-22 13:23:02] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/who-is-calling/PCMA/who-is-calling_6.wav
2024/11/22 14:23:05,stdout,[2024-11-22 13:23:05] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/waiting/PCMA/waiting_1.wav
2024/11/22 14:23:12,stdout,[2024-11-22 13:23:12] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/who-is-calling/PCMA/who-is-calling_6.wav
2024/11/22 14:23:14,stdout,[2024-11-22 13:23:14] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/waiting/PCMA/waiting_1.wav
2024/11/22 14:23:21,stdout,[2024-11-22 13:23:21] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/who-is-calling/PCMA/who-is-calling_4.wav
2024/11/22 14:23:23,stdout,[2024-11-22 13:23:23] INFO: [de.haumacher.phoneblock.answerbot.SpeechDispatcher]: Playing: /opt/phoneblock/conversation/waiting/PCMA/waiting_1.wav
2024/11/22 14:23:27,stdout,[2024-11-22 13:23:27] INFO: [org.mjsip.media.AudioStreamer]: stopping java audio
2024/11/22 14:23:27,stdout,[2024-11-22 13:23:27] INFO: [de.haumacher.phoneblock.answerbot.AnswerBot]: Completed SPAM call for 'phoneblock' with '**611' started Fri Nov 22 13:22:27 UTC 2024 talked for 60.843 seconds.
Ich hab auch mal alle Umgebungsvariablen bis auf SIP_USER
und SIP_PASSWD
herausgenommen. Keine Änderung.
@geimist du hast recht ist ein Fehler aus eeb3adb7 Wird behoben
Aber müsste es nicht gehen, wenn ich RECODINGS
setze?
Aber müsste es nicht gehen, wenn ich
RECODINGS
setze?
Ja
Aber tut es ja auch nicht 🤷♂️ Wie gesagt: mit dem alten Image geht's. Ich hab gerade auch keine Idee, wie ich das noch etwas besser debuggen kann.
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.
@hduelme
wenn ich command: "-f none"
setze, funktioniert der Spracheingang / Aufnahme zum AB auch (sorry, hatte eigentlich gemeint, es schon versucht zu haben). Demnach würde ich vermuten, das die Umgebungsvariablen die Werte der Standardkonfiguration des internen Konfigfiles nicht korrekt überschreiben. Das deckt sich ja auch mit der Änderung des Dockerimages welche zu dem Break bei mir führten.
@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 https://github.com/haumacher/mjSIP/commit/3e10ba0bc808f15ba206ce364b229fbeb555c6e2 eingebaut und jetzt hoffentlich mit https://github.com/haumacher/mjSIP/commit/9bb3532bf98063be469e521236e08855cfade2ae 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: https://github.com/haumacher/phoneblock/commit/8661f6e6054163fffcf7393bbd4e5ac98cbc112e
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! Wie erstellt ihr eigentlich die wav Dateien?
Audacity kann das ganz gut: https://www.audacityteam.org/
@haumacher Danke das Teste ich mal.
Wie erstellt ihr eigentlich die wav Dateien?
Mein Weg ging über eine Aufnahme mit allen Sätzen einer Gruppe in OcenAudio.
Anschließend Auswählen
➜ Stille
➜ Auswahl umkehren
➜ Auswahlen speichern
Konvertierung der Schnipsel ins passende Format dann mit ffmpeg:
Kurzform:
ffmpeg -i input_file -c:a pcm_alaw -ar 8000 -ac 1 output_file
Langform (als Bash) Ganze Ordner werden als Parameter an das Skript übergeben.
#!/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. INFO: [org.mjsip.media.AudioStreamer]: Exception.: java.io.IOException: cannot read a single byte if frame size > 1
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 🤗