#!/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