Logpy-AgentOne/telefon/freeswitch/einrichten.sh
Jeuner c027eb0689 fix: einrichten.sh bricht bei Leerzeichen im Projektpfad ab
FreeSWITCHs record-App zerlegt ihre Argumente an Leerzeichen
(record <pfad> <zeitlimit> <stille-schwelle> <stille-treffer>). Liegt das
Projekt unter einem Pfad mit Leerzeichen, nimmt sie den Teil bis zum ersten
Leerzeichen als Pfad und den Rest als Zahlenargumente. Die Aufnahme landet
dann ohne Endung neben dem Projekt (roh im Codec-Format, z. B. Server.PCMA),
der Eingang bleibt leer, der Watcher sieht nie etwas.

Der Fehler tarnt sich: die Ansage laeuft normal, weil playback sein Argument
am Stueck nimmt. Es sieht deshalb nach einem Watcher-Problem aus, nicht nach
einem Pfadproblem.

einrichten.sh prueft das jetzt vorab und nennt den Ausweg (Symlink ohne
Leerzeichen, Skript darueber aufrufen). Aufgetreten auf der zweiten Maschine.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_013pj3mSmL397czPaCfbL27Z
2026-08-23 00:38:16 +02:00

57 lines
2.4 KiB
Bash
Executable file

#!/bin/bash
# Traegt Trunk und Dialplan in die FreeSWITCH-Konfiguration ein.
# Das SIP-Passwort kommt aus der .env und landet nur in der FreeSWITCH-Config
# (Rechte 600), nie im Git.
set -euo pipefail
PROJEKT="$(cd "$(dirname "$0")/../.." && pwd)"
FS_ETC="${FS_ETC:-/opt/homebrew/etc/freeswitch}"
# FreeSWITCHs record-App zerlegt ihre Argumente an Leerzeichen:
# record <pfad> <zeitlimit> <stille-schwelle> <stille-treffer>
# Ein Leerzeichen im Projektpfad macht daraus einen abgeschnittenen Pfad; die
# Aufnahme landet neben dem Projekt, der Eingang bleibt leer und der Watcher
# bekommt nie etwas zu sehen. Die Ansage laeuft trotzdem - playback nimmt sein
# Argument am Stueck. Der Fehler sieht deshalb aus wie ein Watcher-Problem.
case "$PROJEKT" in
*\ *)
ersatz="$HOME/$(basename "$PROJEKT" | tr ' ' '-')"
{
echo "Der Projektpfad enthaelt ein Leerzeichen:"
echo " $PROJEKT"
echo "FreeSWITCH kann darin nicht aufnehmen. Abhilfe - einen Pfad ohne"
echo "Leerzeichen anlegen und dieses Skript darueber aufrufen:"
echo " ln -s \"$PROJEKT\" \"$ersatz\""
echo " $ersatz/telefon/freeswitch/einrichten.sh"
} >&2
exit 1 ;;
esac
[ -d "$FS_ETC" ] || { echo "FreeSWITCH-Konfiguration nicht gefunden: $FS_ETC" >&2; exit 1; }
[ -f "$PROJEKT/.env" ] || { echo ".env fehlt in $PROJEKT" >&2; exit 1; }
# .env einlesen, ohne die Werte auszugeben.
set -a; source "$PROJEKT/.env"; set +a
for v in SIP_USER SIP_PASS SIP_DOMAIN; do
[ -n "${!v:-}" ] || { echo "$v fehlt in .env" >&2; exit 1; }
done
[ -f "$PROJEKT/telefon/ansage.wav" ] || {
echo "Ansage fehlt - erst telefon/ansage_bauen.sh ausfuehren" >&2; exit 1; }
mkdir -p "$FS_ETC/sip_profiles/external" "$FS_ETC/dialplan/public"
fuelle() { # <vorlage> <ziel>
sed -e "s|@@SIP_USER@@|$SIP_USER|g" \
-e "s|@@SIP_PASS@@|$SIP_PASS|g" \
-e "s|@@SIP_DOMAIN@@|$SIP_DOMAIN|g" \
-e "s|@@SIP_PROXY@@|${SIP_PROXY:-$SIP_DOMAIN}|g" \
-e "s|@@PROJEKT@@|$PROJEKT|g" "$1" > "$2"
}
fuelle "$PROJEKT/telefon/freeswitch/plusnet.xml.tpl" "$FS_ETC/sip_profiles/external/plusnet.xml"
chmod 600 "$FS_ETC/sip_profiles/external/plusnet.xml" # enthaelt das SIP-Passwort
fuelle "$PROJEKT/telefon/freeswitch/praxis_ab.xml.tpl" "$FS_ETC/dialplan/public/00_praxis_ab.xml"
echo "Trunk -> $FS_ETC/sip_profiles/external/plusnet.xml (Rechte 600)"
echo "Dialplan -> $FS_ETC/dialplan/public/00_praxis_ab.xml"
echo "Ansage -> $PROJEKT/telefon/ansage.wav"
echo "Eingang -> $PROJEKT/telefon/eingang"