scripts/sip/send_sms.py

62 lines
2 KiB
Python
Executable file

#!/bin/bash /usr/scripts/python.sh
# -*- coding: utf-8 -*-
"""
Petit script d'envoi de message via sip.
Pour l'instant uniquement pour les personnes connectées
(le message est jeté sinon)
Prend le message sur stdin.
Alternatives intéressantes à étudier :
https://github.com/grengojbo/python-sipsimple
https://github.com/grengojbo/sipclients
"""
import sys
import gestion.secrets_new as secrets
import os
import getpass
import sys
import argparse
parser = argparse.ArgumentParser(description="Envoi d'un message sip")
parser.add_argument('-d', '--dst', default=None,
help="Destinataire, peut être de la forme sip:13570. (Défaut: soi-même)")
# Attention: on a besoin d'importer le module sip de /usr/scripts
# et non celui des libs python
import lc_ldap.shortcuts
from sip.asterisk import Manager, AsteriskError, Sms, Profile
if __name__ == '__main__':
args = parser.parse_args(sys.argv[1:])
login = getpass.getuser()
if login == 'respbats':
login = os.getenv('SUDO_USER')
ldap = lc_ldap.shortcuts.lc_ldap_readonly()
adh = ldap.search(u'uid=%s' % login)[0]
# rajouter @crans.org ne semble pas marcher, pourquoi ?
num="1%04d" % adh['aid'][0].value
own = "sip:" + num + "@crans.org"
profile_manager = Profile("dbname='django' user='crans' " +
"host='pgsql.adm.crans.org'", "voip_profile")
callerid = profile_manager.num_to_callerid(num)
caller = '"%s" <%s>' % (callerid, own)
dst = args.dst
if not dst:
dst = "sip:1%04d" % adh['aid'][0].value
ast_manager = Manager('sms', secrets.get('asterisk_sms_passwd'))
# TODO mode hors ligne
try:
ast_manager.messageSend(caller, dst, sys.stdin.read())
except AsteriskError as error:
if error.message == "Message failed to send.":
sms=Sms("dbname='django' user='crans' host='pgsql.adm.crans.org'", "voip_sms")
sms.sms_delay(error.params['from'], error.params['to'], error.params['base64body'], error.params['to'].split(':',1)[1], body_type='base64')
else:
raise