-
Notifications
You must be signed in to change notification settings - Fork 67
Phonebook
mknx edited this page Jan 9, 2013
·
4 revisions
This phonebook logic allows the user (a.k.a. wife) to add an entry to the snom xml address book and asterisk database without a special interface. She just has to send an email with a vcf attachment to [email protected].
# etc/logic.conf [phonebook] filename = phonebook.py mail_to = [email protected]
#!/usr/bin/env python # vim: set encoding=utf-8 tabstop=4 softtabstop=4 shiftwidth=4 expandtab ######################################################################### # # logics/phonebook.py # if not trigger['source'].endswith('@mydomain.com'): # ignore mails from third party domains exit() # for security reasons you should (if you are able to) # restrict clients sending your domain (mydomain.com) def parse_vcf(vcf): # dict to translate name of the phone types types = {'CELL': 'Handy', 'HOME': 'Privat', 'WORK': 'Arbeit', 'IPHONE': 'iPhone'} name = False for line in vcf.splitlines(): if line.startswith('FN:'): name = line.split(':')[-1] if name: for line in vcf.splitlines(): if line.startswith('TEL'): typ, number = line.rsplit(':', 1) number = number.translate(None, '-() ') if not number.startswith('+'): if number.startswith('00'): number = number.replace('00', '+', 1) elif number.startswith('0'): number = number.replace('0', '+49', 1) typ = typ.split(';')[1].split('=')[1] if typ in types: typ = types[typ] else: typ = typ.capitalize() yield ("{0} ({1})".format(name, typ), number) mail = trigger['value'] for part in mail.walk(): c_type = part.get_content_type() c_disp = part.get('Content-Disposition') if c_disp != None: if c_disp.startswith('attachment'): # there is an attachement filename = part.get_filename() if filename.endswith('.vcf'): # and it ends with vcf vcf = part.get_payload(decode=True) for name, number in parse_vcf(vcf): sh.snom.phonebook_add(name, number) # add it to the snome xml addressbook sh.ast.db_write('known/' + number, name) # and to the asterisk database