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)