108 lines
2.8 KiB
Bash
108 lines
2.8 KiB
Bash
#!/bin/bash
|
|
# /opt/check_providers/send_sms.sh
|
|
# Wrapper générique pour envoyer un SMS via Gammu
|
|
#
|
|
# Usage :
|
|
# send_sms.sh "Message texte" ← aux numéros par défaut
|
|
# send_sms.sh "+33612345678" "Message texte" ← à un numéro spécifique
|
|
# send_sms.sh --force "Message texte" ← ignore l'anti-flood
|
|
#
|
|
# Compatible avec :
|
|
# - check_providers.py (alerte FIBRE down/up)
|
|
# - quota_4g.sh (alerte quota)
|
|
# - NUT (NOTIFYCMD dans upsmon.conf)
|
|
# - tout script qui appelle : send_sms.sh "message"
|
|
#
|
|
# NUT : dans /etc/nut/upsmon.conf :
|
|
# NOTIFYCMD /opt/check_providers/send_sms.sh
|
|
# NOTIFYFLAG ONBATT SYSLOG+EXEC
|
|
# NOTIFYFLAG LOWBATT SYSLOG+EXEC
|
|
# NOTIFYFLAG ONLINE SYSLOG+EXEC
|
|
#
|
|
# ============================================================
|
|
# CONFIGURATION
|
|
# ============================================================
|
|
|
|
# Numéro(s) de téléphone par défaut (séparés par des espaces)
|
|
DEFAULT_NUMBERS="+33687654443 +33672161654"
|
|
|
|
GAMMU_BIN="/usr/bin/gammu"
|
|
GAMMURC="/etc/gammurc"
|
|
LOG="logger -t sms-alert"
|
|
|
|
# Anti-flood : pas plus d'un SMS identique par heure
|
|
FLOOD_DIR="/var/run/sms_flood"
|
|
FLOOD_TTL=3600 # secondes
|
|
|
|
# ============================================================
|
|
|
|
mkdir -p "$FLOOD_DIR"
|
|
|
|
# --- Parse arguments ---
|
|
FORCE=0
|
|
NUMBERS=""
|
|
MESSAGE=""
|
|
|
|
while [ $# -gt 0 ]; do
|
|
case "$1" in
|
|
--force|-f)
|
|
FORCE=1
|
|
shift
|
|
;;
|
|
+*)
|
|
# Numéro de téléphone
|
|
NUMBERS="$NUMBERS $1"
|
|
shift
|
|
;;
|
|
*)
|
|
MESSAGE="$1"
|
|
shift
|
|
;;
|
|
esac
|
|
done
|
|
|
|
# Numéros par défaut si aucun spécifié
|
|
NUMBERS="${NUMBERS:-$DEFAULT_NUMBERS}"
|
|
NUMBERS=$(echo "$NUMBERS" | xargs) # trim
|
|
|
|
if [ -z "$MESSAGE" ]; then
|
|
echo "Usage: $0 [--force] [+33XXXXXXXXX ...] \"message\""
|
|
echo ""
|
|
echo "Options:"
|
|
echo " --force, -f Ignore l'anti-flood"
|
|
echo ""
|
|
echo "Exemples:"
|
|
echo " $0 \"Test SMS\""
|
|
echo " $0 +33612345678 +33698765432 \"Alerte serveur\""
|
|
echo " $0 --force \"Message urgent\""
|
|
exit 1
|
|
fi
|
|
|
|
# --- Anti-flood ---
|
|
HASH=$(echo -n "$MESSAGE" | md5sum | cut -d' ' -f1)
|
|
FLOOD_FILE="$FLOOD_DIR/$HASH"
|
|
|
|
if [ "$FORCE" -eq 0 ] && [ -f "$FLOOD_FILE" ]; then
|
|
AGE=$(( $(date +%s) - $(stat -c %Y "$FLOOD_FILE") ))
|
|
if [ "$AGE" -lt "$FLOOD_TTL" ]; then
|
|
$LOG "Anti-flood : message identique envoyé il y a ${AGE}s, ignoré"
|
|
exit 0
|
|
fi
|
|
fi
|
|
|
|
# --- Envoi ---
|
|
SENT=0
|
|
for NUMBER in $NUMBERS; do
|
|
if $GAMMU_BIN -c "$GAMMURC" sendsms TEXT "$NUMBER" -text "$MESSAGE" 2>&1; then
|
|
$LOG "SMS envoyé à $NUMBER : $MESSAGE"
|
|
SENT=1
|
|
else
|
|
$LOG "Échec envoi SMS à $NUMBER"
|
|
fi
|
|
done
|
|
|
|
# Marquer anti-flood seulement si au moins un SMS est parti
|
|
[ "$SENT" -eq 1 ] && touch "$FLOOD_FILE"
|
|
|
|
exit 0
|