sms_ovh/send_sms.py

114 lines
4.3 KiB
Python

import json
import os
from dotenv import load_dotenv
import ovh
import re
import logging
import argparse
# Vérification de l'existance du fichier .env
# AUCUNES variables ou information d'api ne doit être définies dans le code !
if not os.path.exists('.env'):
print('Erreur pas de fichier .env présent ou accessible.')
os._exit(os.EX_CONFIG)
# Load .env file
load_dotenv()
# Configuration des logs
logging.basicConfig(filename=os.environ['log_file'], encoding='utf-8', level=logging.os.environ['LOG_LEVEL'],format='%(asctime)s %(levelname)s %(message)s', datefmt='%d/%m/%Y %I:%M:%S %p')
logging.info("Start SMS Script")
# Return boolean
# True si le service "enabled" et le credit sms est > 0
# False si le service n'est pas "enabled" ou qu'il n'y a plus de credit sms.
# Parametre:
# - client : instance du client ovh
def check_service_sms(client):
result = client.get("/sms/"+os.environ['sms_service_name'])
if result["creditsLeft"] == 0:
logging.error("Plus de crédit sms")
return False
elif result["creditsLeft"] <= int(os.environ['credit_warning']):
logging.warning("Nombre de crédit sms est inférieur a "+ os.environ['credit_warning'])
elif result["status"] != "enable":
logging.error("Le service sms n'est pas actif!")
return False
logging.info("Nombre de crédit restant: "+str(result["creditsLeft"]))
return True
# Récuperation des senders définis dans OVH
# Parametre:
# - client : instance du client ovh
def get_senders(client):
result = client.get("/sms/"+os.environ['sms_service_name']+"/senders")
return result
# Parametres:
# - client : instance du client ovh
# - sender : nom du sender
# - num : Numero de telephone cible
# - message : Message a envoyer
def send_sms(client,sender,num,message):
# Test de la validité du numero
numtelre = re.compile('^\+33\d{9}$')
m = numtelre.match( num )
if m:
receivers=[]
receivers.append(num)
result = client.post("/sms/"+os.environ['sms_service_name']+"/jobs",
coding = '7bit', # The sms coding (type: sms.CharsetEnum, nullable)
differedPeriod = 0, # The time -in minute(s)- to wait before sending the message (type: long, nullable)
message = message, # The sms message (type: string)
noStopClause = False, # Do not display STOP clause in the message, this requires that this is not an advertising message (type: boolean, nullable)
priority = "high", # The priority of the message (type: sms.PriorityEnum, nullable)
receivers = receivers, # The receivers list (type: string[], nullable)
sender = sender, # The sender (type: string, nullable)
)
logmes="Message envoyé a "+str(num)+", Crédit consommé: "+str(result["totalCreditsRemoved"])
logging.info(logmes)
# print(json.dumps(result, indent=4))
else:
logging.error('Mauvais format du numéro de téléphone: '+num+'.')
# Instanciation du Client OVH.
client = ovh.Client(
endpoint='ovh-eu', # Endpoint of API OVH (List of available endpoints: https://github.com/ovh/python-ovh#2-configure-your-application)
application_key=os.environ['application_key'], # Application Key
application_secret=os.environ['application_secret'], # Application Secret
consumer_key=os.environ['consumer_key'], # Consumer Key
)
# Configuration des arguments
parser = argparse.ArgumentParser()
parser.add_argument("-n", "--numero")
parser.add_argument("-m", "--message")
# Traitement des arguments
args = parser.parse_args()
numero = args.numero
message = args.message
if check_service_sms(client):
# Recupération des senders OVH
senders=get_senders(client)
# Selection du premier .. voir si cela doit être passé en parametre
sender=senders[0]
# Envoie de message
logging.debug("Demande d'envoi de SMS "+sender+" a "+ numero + " message:" + message)
send_sms(client,sender,numero,message)
else:
# Le service n'est pas utilisable
print("Le service SMS OVH n'est pas utilisable. Voir le fichier de log: "+os.environ['log_file'])
logging.critical("Le service SMS OVH n'est pas utilisable.")
os._exit(os.EX_UNAVAILABLE)
logging.info("End SMS Script")
os._exit(os.EX_OK)