114 lines
4.3 KiB
Python
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)
|
|
|
|
|