def smsSubmit(args): from messaging.sms import SmsSubmit from datetime import datetime text = ''.join(map(unichr, args["text_as_char_code_arr"])) sms = SmsSubmit(args["number"], text) if "csca" in args: sms.csca = args["csca"] if "validity" in args: sms.validity = datetime.strptime(args["validity"], "%a, %d %b %Y %H:%M:%S %Z") if "klass" in args: sms.klass = args["klass"] if "request_status" in args: sms.request_status = args["request_status"] out = [] for pdu in sms.to_pdu(): out.append(pdu.__dict__) return out
def to_pdu(self, store=False): """Returns the PDU representation of this message""" sms = SmsSubmit(self.number, self.text) sms.csca = self.csca sms.request_status = self.status_request if store: sms.validity = None return sms.to_pdu()
def test_encoding_request_status(self): # tested with pduspy.exe and http://www.rednaxela.net/pdu.php number = '2b3334363534313233343536'.decode('hex') text = "hey yo" expected = "0021000B914356143254F6000006E8721E947F03" sms = SmsSubmit(number, text) sms.ref = 0x0 sms.request_status = True pdu = sms.to_pdu()[0] self.assertEqual(pdu.pdu, expected)
def test_encoding_request_status(self): # tested with pduspy.exe and http://www.rednaxela.net/pdu.php number = "+34654123456" text = "hey yo" expected = "0021000B914356143254F6000006E8721E947F03" sms = SmsSubmit(number, text) sms.ref = 0x0 sms.request_status = True pdu = sms.to_pdu()[0] self.assertEqual(pdu.pdu, expected)
def test_encoding_request_status(self): # tested with pduspy.exe and http://www.rednaxela.net/pdu.php number = codecs.decode(b'2b3334363534313233343536', 'hex') text = "hey yo" expected = "0021000B914356143254F6000006E8721E947F03" sms = SmsSubmit(number, text) sms.ref = 0x0 sms.request_status = True pdu = sms.to_pdu()[0] self.assertEqual(pdu.pdu, expected)
def send_sms(*args, **kwargs): sms_pk = kwargs.get('sms_pk') try: sms_inst = SMS.objects.get( pk=sms_pk, is_send=False, ) except SMS.DoesNotExist: return False manager = asterisk.manager.Manager() # connect to the manager try: manager.connect(settings.ASTERISK_HOST) manager.login(*settings.ASTERISK_AUTH) # get a status report response = manager.status() print('print: response: ', response) logger.info('logger: response: %s' % response) # Success number = '+380{code}{phone}'\ .format( code=sms_inst.to_code, phone=sms_inst.to_phone, ) sms_to_pdu = SmsSubmit( number=number, text=sms_inst.message, ) sms_to_pdu.request_status = True sms_to_pdu.validity = timedelta(days=2) sms_list = sms_to_pdu.to_pdu() # last_loop = len(sms_list) - 1 for i, pdu_sms in enumerate(sms_list): time.sleep(0.5) response = manager.command( 'dongle pdu {device} {pdu}'.format( device='Vodafone1', pdu=pdu_sms.pdu, ), ) print('print: response.data: ', response.data) logger.info('logger: response.data: %s' % response.data) # [Vodafone1] SMS queued for send with id 0x7f98c8004420\n--END COMMAND--\r\n sended_sms = increase_send_sms() print('print: sended SMS: ', sended_sms) logger.info('logger: sended SMS: %s' % sended_sms) # if i != last_loop: # time.sleep(1.5) time.sleep(0.5) manager.logoff() except asterisk.manager.ManagerSocketException as e: print("Error connecting to the manager: %s" % e, ) except asterisk.manager.ManagerAuthException as e: print("Error logging in to the manager: %s" % e, ) except asterisk.manager.ManagerException as e: print("Error: %s" % e, ) finally: # remember to clean up try: manager.close() except Exception as e: print('print: sms_ussd/task.py: e: ', e) logger.info('logger: sms_ussd/task.py: e: %s' % e) sms_inst.task_id = None sms_inst.is_send = True sms_inst.send_at = timezone.now() sms_inst.save(skip_super_save=True, ) return True, timezone.now(), '__name__: {0}'.format(str(__name__))
def send_template_sms(*args, **kwargs): phone = kwargs.pop( 'sms_to_phone_char', False, ) if not phone: return False phone = phone.replace(' ', '').strip('+') \ .replace('(', '').replace(')', '').replace('-', '') \ .lstrip('380').lstrip('38').lstrip('80').lstrip('0') try: int_phone = int(phone[2:]) int_code = int(phone[:2]) except ValueError: return False template_name = kwargs.pop( 'sms_template_name', False, ) try: template = Template.objects.get(name=template_name, ) except Template.DoesNotExist: return False template_dict = {} for key, value in kwargs.items(): if key.startswith('sms_'): template_dict.update({key.lstrip('sms_'): value}) message = template.template.format(**template_dict) sms_inst = SMS( template=template, direction=2, task_id=None, sim_id=255016140761290, is_send=True, message=message, to_phone_char=phone, to_code=int_code, to_phone=int_phone, send_at=timezone.now(), ) manager = asterisk.manager.Manager() # connect to the manager try: manager.connect(settings.ASTERISK_HOST) manager.login(*settings.ASTERISK_AUTH) # get a status report response = manager.status() print('response: ', response) number = '+380{code}{phone}'\ .format( code=sms_inst.to_code, phone=sms_inst.to_phone, ) sms_to_pdu = SmsSubmit( number=number, text=sms_inst.message, ) sms_to_pdu.request_status = False sms_to_pdu.validity = timedelta(days=2) sms_list = sms_to_pdu.to_pdu() # last_loop = len(sms_list) - 1 for i, pdu_sms in enumerate(sms_list): time.sleep(0.5) response = manager.command( 'dongle pdu {device} {pdu}'.format( device='Vodafone1', pdu=pdu_sms.pdu, ), ) print('print: response.data: ', response.data) logger.info('logger: response.data: %s' % response.data) # [Vodafone1] SMS queued for send with id 0x7f98c8004420\n--END COMMAND--\r\n sended_sms = increase_send_sms() print('print: sended SMS: ', sended_sms) logger.info('logger: sended SMS: %s' % sended_sms) # if i != last_loop: # time.sleep(1.5) time.sleep(0.5) manager.logoff() except asterisk.manager.ManagerSocketException as e: print("Error connecting to the manager: %s" % e, ) except asterisk.manager.ManagerAuthException as e: print("Error logging in to the manager: %s" % e, ) except asterisk.manager.ManagerException as e: print("Error: %s" % e, ) finally: # remember to clean up try: manager.close() except Exception as e: print( 'sms_ussd/tasks.py: e: ', e, ) sms_inst.save(skip_super_save=True, ) return True, timezone.now(), '__name__: {0}'.format(str(__name__))