def read_in(): modems, device, info = list_devices() i=0 for m in modems: modem = m['modem'] sim = m['sim'] if not modem: continue texts = full_sms_list(modem, 'inbox') for t in texts: try: txt = t['txt'].encode('ascii', 'ignore') except UnicodeDecodeError: # MMS or OTA update txt = 'Can not decode MMS' sms = Sms( sim = sim, no = safe_no(t['no']), txt = txt, at = t['at'], typ = 'r' ) sms.cat = get_cat(sms) sms.save() modem.sms_del(int(t['id'])) i+=1 if i: msg = 'Saved %d replies.' % i print(msg) return msg
def get_messages(self, start=None, max=None): params = {'method':'inbox','username':self.get_username(),'password':self.get_password()} if start: params.update({'first': int(start)}) if max: params.update({'max': int(max)}) params = urlencode(params) response = requests.get(self.get_api_url(), params=params, verify=False) if not response.ok: if not self.fail_silently: raise Exception("Digicel get inbox sms response header returned status code of %d" % response.status_code) else: return False response_dom = minidom.parseString(response.content) response_status_code = int(response_dom.getElementsByTagName('status')[0].firstChild.data) if response_status_code != 0: if not self.fail_silently: raise Exception("Digicel Inbox response status code error %d: %s" % (response_status_code, DIGICEL_RESPONSE_STATUS_CODES[response_status_code])) else: return False else: eastern = pytz.timezone('US/Eastern') records = response_dom.getElementsByTagName('record') records.reverse() for record in records: sent_date = datetime.datetime.strptime( record.getElementsByTagName('datetime')[0].firstChild.data, '%d-%m-%Y %H:%M') loc_dt = eastern.localize(sent_date) try: Sms.objects.get( from_number=record.getElementsByTagName('tel')[0].firstChild.data, to_number=settings.SMS_USERNAME, message=record.getElementsByTagName('message')[0].firstChild.data, sent_date=loc_dt, ) break except Sms.DoesNotExist: sms = Sms( from_number=record.getElementsByTagName('tel')[0].firstChild.data, to_number=settings.SMS_USERNAME, message=record.getElementsByTagName('message')[0].firstChild.data, sent_date=loc_dt, ) sms.save() return True
def get_messages(self, *args, **kwargs): if self.phone_number: kwargs.update({'to': self.phone_number}) messages = self.connection.sms.messages.list(*args, **kwargs) for message in messages: try: Sms.objects.get( from_number=message.from_, to_number=message.to, message=message.body, sent_date=parser.parse(message.date_sent), ) break except Sms.DoesNotExist: sms = Sms( from_number=message.from_, to_number=message.to, message=message.body, sent_date=parser.parse(message.date_sent), ) sms.save() return True
def newsms(request): with open("/tmp/debug_1.json", "w") as f: f.write(json.dumps(request.POST)) return HttpResponse( json.dumps({"payload": { "success": True, "error": None }})) s = Sms(from_num=request.POST["from"], message=request.POST["message"], message_id=request.POST["message_id"], sent_to=request.POST["sent_to"], secret=request.POST["secret"], device_id=request.POST["device_id"], sent_timestamp=request.POST["sent_timestamp"])
def send_one_text(modem, sim, txt, no, name=''): if name: txt = txt.replace("Hi,", "Hi %s," % name) sms = Sms(typ='s', sim=sim, txt=txt, no=no) if settings.TEXTING_RUN and modem: try: modem.sms_send(sms.no, sms.txt) sms.save() sleep(random.random()) return no except humod.errors.AtCommandError as e: print('ERROR', e, no) sleep(1) return False elif settings.TEXTING_RUN: sms.save() # save 1st, so pk is ready for status update gateway_api.send(sim, sms.no, sim.no, sms.txt, sms.pk) return no
def run(): messages = client.messages.list() print(len(messages)) for record in messages: sms = all_sms.filter(sid=record.sid).first() if not sms: print(record.sid) from_ = record.from_.split(':') from_num = from_[0] if len(from_) == 1 else from_[1] from_service = '' if len(from_) == 1 else from_[0] to_ = record.to.split(':') to_num = to_[0] if len(to_) == 1 else to_[1] to_service = '' if len(to_) == 1 else to_[0] new_sms = Sms() new_sms.sid = record.sid new_sms.message_to = to_num new_sms.to_service = to_service new_sms.message_from = from_num new_sms.from_service = from_service new_sms.account_sid = account_sid new_sms.direction = record.direction new_sms.status = record.status new_sms.error_message = record.error_message new_sms.error_code = record.error_code new_sms.body = record.body new_sms.url = record.uri new_sms.created = record.date_created new_sms.save() print(f"record created for {new_sms.sid}")