Subversion Repositories SmartDukaan

Rev

Rev 18958 | Go to most recent revision | Details | Compare with Previous | Last modification | View Log | RSS feed

Rev Author Line No. Line
17349 manish.sha 1
import json
2
from dtr.storage import DataService
3
from dtr.storage.DataService import notification_campaigns, Users
4
import MySQLdb
5
import pymongo
6
from elixir import *
7
from sqlalchemy.orm.exc import NoResultFound, MultipleResultsFound
8
from sqlalchemy.sql import func
9
from sqlalchemy.sql.expression import and_, or_, desc, not_, distinct, cast, \
10
    between
11
from datetime import datetime
12
from datetime import timedelta
13
import urllib
14
import urllib2
15
import json
16
import time
17
import traceback
17398 manish.sha 18
import logging
18199 manas 19
from dtr.utils.utils import num_encode
17349 manish.sha 20
 
17400 manish.sha 21
PUSH_NOTIFICATIONS_DETAILS_URL="http://localhost:3001/getPushNotificationDetailsByType/?type=%s&notification_campaign_id=%d&status=%s"
17349 manish.sha 22
PROMOTIONAL_SMS_SEND_URL = "http://103.15.179.45:8085/MessagingGateway/SendTransSMS?"
18217 manish.sha 23
TRANSACTIONAL_SMS_SEND_URL = "http://103.15.179.45:8085/SMSGateway/sendingSMS?"
17349 manish.sha 24
#ID is: PRO02135496 Mobile Number is: 918512809859 PRO02135496#SMS Sent successfully to : 918512809859
25
#http://103.15.179.45:8085/MessagingGateway/http/querymsg?user=srlsaholicP&password=srp8oct&apimsgid=PRO02257518
26
#MessageID: PRO02135496 STATUS: DELIVRD ErrorCode: 0 DR Time: 2015-10-20 18:05:11 
27
 
17352 manish.sha 28
DataService.initialize(db_hostname="192.168.158.89")
17349 manish.sha 29
 
17398 manish.sha 30
logging.basicConfig(level=logging.DEBUG)
31
 
17349 manish.sha 32
def main():
17452 manish.sha 33
    logging.debug('Starting SMS Blaster Process.....'+str(datetime.now()))
17349 manish.sha 34
    timeCondition = datetime.now()-timedelta(hours=2)
35
    expireTimeCondition = datetime.now()+timedelta(hours=2)
18961 manish.sha 36
    eligibleSmsNotficationCampaigns = notification_campaigns.query.filter(notification_campaigns.sendsms==True).filter(or_(notification_campaigns.smsprocessed==False, notification_campaigns.smsprocessed==None)).filter(notification_campaigns.created<timeCondition).filter(notification_campaigns.expiresat>expireTimeCondition).all()
17349 manish.sha 37
    #eligibleSmsNotficationCampaigns = notification_campaigns.query.filter(notification_campaigns.id==5417).all()
38
 
39
    for notificationCampaign in eligibleSmsNotficationCampaigns:
17398 manish.sha 40
        logging.debug('Notification_Campign_Id:- '+str(notificationCampaign.id))
18285 manish.sha 41
        notificationCampaign.smsprocessed = True
42
        session.commit()
17349 manish.sha 43
        sentFailedresponse = urllib2.urlopen(PUSH_NOTIFICATIONS_DETAILS_URL%('sent',notificationCampaign.id,0)).read()
44
        jsonList = json.loads(sentFailedresponse)
45
        userList = []
46
        for obj in jsonList:
47
            userList.append(long(obj.get('user_id')))
17398 manish.sha 48
        logging.debug('Failed User List...'+str(len(userList)))
17349 manish.sha 49
 
50
        sentSuccessResponse = urllib2.urlopen(PUSH_NOTIFICATIONS_DETAILS_URL%('sent',notificationCampaign.id,1)).read()
51
        jsonList = json.loads(sentSuccessResponse)
52
        for obj in jsonList:
53
            userList.append(long(obj.get('user_id')))
54
 
55
        userList = list(set(userList))
56
 
57
        receivedSuccessResponse = urllib2.urlopen(PUSH_NOTIFICATIONS_DETAILS_URL%('recieved',notificationCampaign.id,1)).read()
58
        jsonList = json.loads(receivedSuccessResponse)
17398 manish.sha 59
        logging.debug('User List Before...'+str(len(userList)))
17349 manish.sha 60
        for obj in jsonList:
61
            if obj.get('user_id') in userList:
62
                userList.remove(long(obj.get('user_id')))
17398 manish.sha 63
        logging.debug('User List After...'+str(len(userList)))
17349 manish.sha 64
 
65
        allUsers = Users.query.filter(Users.id.in_(tuple(userList))).all()
66
        #print allUsers
67
 
68
        sentSmsUsers = []
18217 manish.sha 69
        proSmsResponseIdMap = {}
70
        tranSmsResponseIdMap = {}
17349 manish.sha 71
        payloadList = []
72
 
18199 manas 73
        #smstext = str(notificationCampaign.messagetext) + ' http://bit.ly/1LBesWK'
17349 manish.sha 74
        for user in allUsers:
75
            if user.mobile_number is not None and len(user.mobile_number)==10 and user.mobile_number not in sentSmsUsers:
18210 amit.gupta 76
                smsUrl='http://pm1.in/A/' + num_encode(notificationCampaign.id) + '/' + num_encode(user.id)
18199 manas 77
                smstext = str(notificationCampaign.messagetext) + ' ' + smsUrl
17349 manish.sha 78
                #url_params = { 'Mobile' : '91'+user.mobile_number,  'Username' : 'srlsaholicP', 'Password' : 'srp8oct' , 'MessageType' : 'txt', 'SenderID' : '090000', 'Message' : notificationCampaign.messagetext }
18217 manish.sha 79
                url_params = ''
80
                if "TRAN_SMS" in smstext:
18222 manish.sha 81
                    url_params = { 'ani' : '91'+user.mobile_number,  'uname' : 'srlsaholic', 'passwd' : 'sr18mar' , 'cli' : 'PROFTM', 'message' : smstext.replace("TRAN_SMS", "").strip() }
18217 manish.sha 82
                else:
83
                    url_params = { 'Mobile' : '91'+user.mobile_number,  'Username' : 'srlsaholicP', 'Password' : 'srp8oct' , 'MessageType' : 'txt', 'SenderID' : '090000', 'Message' : smstext }
17349 manish.sha 84
                encoded_url_params = urllib.urlencode(url_params)
17398 manish.sha 85
                logging.debug('User Id:- '+str(user.id)+' Notification_Campaign_Id:- '+ str(notificationCampaign.id)+' Url Params:- '+str(encoded_url_params))
18217 manish.sha 86
                url = ''
87
                if "TRAN_SMS" in smstext:
88
                    url = TRANSACTIONAL_SMS_SEND_URL + encoded_url_params
89
                else:
90
                    url = PROMOTIONAL_SMS_SEND_URL + encoded_url_params
17349 manish.sha 91
                response_str = None
92
                try:
93
                    req = urllib2.Request(url)
94
                    response = urllib2.urlopen(req)
95
                    response_str = response.read()
96
                except Exception as e:
17398 manish.sha 97
                    logging.debug('Error while getting response for user id:- '+ str(user.id) +' Mobile Number:- '+str(user.mobile_number))
17349 manish.sha 98
                    traceback.print_exc()
99
                    continue
100
 
17398 manish.sha 101
                logging.debug('User Id:- '+str(user.id)+' Notification_Campaign_Id:- '+ str(notificationCampaign.id)+' Sent Response:- '+ str(response_str))
17349 manish.sha 102
 
103
 
104
                payload = {}
105
                payload["user_id"]= user.id
106
                payload["type"]="smssent"
107
                payload["notification_campaign_id"]= notificationCampaign.id
108
                payload["status"]=1
109
 
110
                if len(payloadList)==5000:
111
                    jsonObj = json.dumps([dict(pn) for pn in payloadList])
17400 manish.sha 112
                    pushpostrequest = urllib2.Request("http://localhost:3001/addPushNotification")
17349 manish.sha 113
                    pushpostrequest.add_header('Content-Type', 'application/json')
114
                    response = urllib2.urlopen(pushpostrequest, jsonObj).read()
115
                    payloadList = []
116
 
117
                payloadList.append(payload)
118
 
18217 manish.sha 119
                if "TRAN_SMS" in smstext:
120
                    if "Message sent successfully to " in response_str:
121
                        response_str_vals = response_str.split('#')
122
                        payload = {}
123
                        payload["user_id"]= user.id
124
                        payload["type"]="smsprocessed"
125
                        payload["notification_campaign_id"]= notificationCampaign.id
126
                        payload["status"]=1
127
                        payload["sms_id"]=response_str_vals[0]
128
                        payloadList.append(payload)
129
                        tranSmsResponseIdMap[user.id] = response_str_vals[0]
130
                    else:
131
                        payload = {}
132
                        payload["user_id"]= user.id
133
                        payload["type"]="smsrejected"
134
                        payload["notification_campaign_id"]= notificationCampaign.id
135
                        payload["status"]=1
136
                        payloadList.append(payload)
17349 manish.sha 137
                else:
18217 manish.sha 138
                    if "mobile no in DND" in response_str:
139
                        payload = {}
140
                        payload["user_id"]= user.id
141
                        payload["type"]="smsrejected"
142
                        payload["notification_campaign_id"]= notificationCampaign.id
143
                        payload["status"]=1
144
                        payloadList.append(payload)
145
                    else:
146
                        payload = {}
147
                        payload["user_id"]= user.id
148
                        payload["type"]="smsprocessed"
149
                        payload["notification_campaign_id"]= notificationCampaign.id
150
                        payload["status"]=1
151
 
152
 
153
                        response_vals = response_str.split('\n')
154
                        logging.debug('Desired Response String:- '+str(response_vals[2]))
155
                        if len(response_vals)==4 and 'SMS Sent successfully to' in response_vals[2]:
156
                            if response_vals[2].split('#')[0]!='null':
157
                                proSmsResponseIdMap[user.id] = response_vals[2].split('#')[0]
158
                                payload["sms_id"]=response_vals[2].split('#')[0]
159
                                payloadList.append(payload)
17349 manish.sha 160
                sentSmsUsers.append(user.mobile_number)
161
 
162
        time.sleep(120)
163
 
18217 manish.sha 164
        for userId, msgId in proSmsResponseIdMap.items():
17349 manish.sha 165
            #http://103.15.179.45:8085/MessagingGateway/http/querymsg?user=srlsaholicP&password=srp8oct&apimsgid=PRO02257518
166
            del_det_params = {'user' : 'srlsaholicP', 'password' : 'srp8oct' , 'apimsgid' : msgId}
167
            encoded_del_det_params = urllib.urlencode(del_det_params)
168
            del_det_url = 'http://103.15.179.45:8085/MessagingGateway/http/querymsg?' + encoded_del_det_params
17398 manish.sha 169
            logging.debug('Delivery Report Url:- '+del_det_url)
17349 manish.sha 170
            try:
171
                del_req = urllib2.Request(del_det_url)
172
                del_response = urllib2.urlopen(del_req)
173
                del_response_str = del_response.read()
17398 manish.sha 174
                logging.debug('Delivery Report Response:- '+str(del_response_str))
17349 manish.sha 175
                if 'STATUS' in del_response_str:
176
                    status = del_response_str.split(' ')[3]
177
                    if status=='DELIVRD':
178
                        status = 'SMS_DELIVRD'
179
                    elif status=='SENT':
180
                        status = 'SMS_SENT_OPERATOR'
181
                    elif status=='REJECTD' or status== 'FAILED':
182
                        status = 'SMS_FAILED'
183
                    elif 'EXP_' in status:
184
                        status = 'SMS_EXPIRED'
185
                    else:
186
                        status = 'SMS_'+status
187
 
188
                    payload = {}
189
                    payload["user_id"]= userId
190
                    payload["type"]=status
191
                    payload["notification_campaign_id"]= notificationCampaign.id
192
                    payload["status"]=1
17377 manish.sha 193
                    if status == 'SMS_SENT_OPERATOR':
194
                        payload["sms_id"] = msgId
17349 manish.sha 195
 
196
                    if len(payloadList)==5000:
197
                        jsonObj = json.dumps([dict(pn) for pn in payloadList])
17400 manish.sha 198
                        pushpostrequest = urllib2.Request("http://localhost:3001/addPushNotification")
17349 manish.sha 199
                        pushpostrequest.add_header('Content-Type', 'application/json')
200
                        response = urllib2.urlopen(pushpostrequest, jsonObj).read()
201
                        payloadList = []
202
                    payloadList.append(payload)
203
 
204
            except Exception as e:
17398 manish.sha 205
                logging.debug('Error while getting response for message id:- '+ msgId)
17349 manish.sha 206
                traceback.print_exc()
17398 manish.sha 207
                continue
18217 manish.sha 208
 
209
        for userId, msgId in tranSmsResponseIdMap.items():
210
            if msgId == "No_Response":
211
                status = 'SMS_FAILED'
212
                payload = {}
213
                payload["user_id"]= userId
214
                payload["type"]=status
215
                payload["notification_campaign_id"]= notificationCampaign.id
216
                payload["status"]=1
217
                if len(payloadList)==5000:
218
                    jsonObj = json.dumps([dict(pn) for pn in payloadList])
219
                    pushpostrequest = urllib2.Request("http://localhost:3001/addPushNotification")
220
                    pushpostrequest.add_header('Content-Type', 'application/json')
221
                    response = urllib2.urlopen(pushpostrequest, jsonObj).read()
222
                    payloadList = []
223
                payloadList.append(payload)
224
            else:
225
                del_det_params = {'uname' : 'srlsaholic', 'passwd' : 'sr18mar' , 'messageid' : msgId}
226
                encoded_del_det_params = urllib.urlencode(del_det_params)
227
                del_det_url = 'http://103.15.179.45:8085/SMSGateway/getApiReport?' + encoded_del_det_params
228
                logging.debug('Delivery Report Url:- '+del_det_url)
229
                try:
230
                    del_req = urllib2.Request(del_det_url)
231
                    del_response = urllib2.urlopen(del_req)
232
                    del_response_str = del_response.read()
233
                    logging.debug('Delivery Report Response:- '+str(del_response_str))
234
 
235
                    del_response_vals = del_response_str.split(' ')
236
 
237
                    status = ''
238
                    if len(del_response_vals) == 8 and del_response_vals[7][:-2] == '0':
239
                        status = 'SMS_DELIVRD'
240
                    elif "Submitted to SMSC" in del_response_str:
241
                        status = 'SMS_INPROCESS'
242
                    else:
243
                        status = 'SMS_FAILED'
244
                    payload = {}
245
                    payload["user_id"]= userId
246
                    payload["type"]=status
247
                    payload["notification_campaign_id"]= notificationCampaign.id
18221 manish.sha 248
                    if status == 'SMS_INPROCESS':
249
                        payload["sms_id"] = msgId
18217 manish.sha 250
                    payload["status"]=1
251
                    if len(payloadList)==5000:
252
                        jsonObj = json.dumps([dict(pn) for pn in payloadList])
253
                        pushpostrequest = urllib2.Request("http://localhost:3001/addPushNotification")
254
                        pushpostrequest.add_header('Content-Type', 'application/json')
255
                        response = urllib2.urlopen(pushpostrequest, jsonObj).read()
256
                        payloadList = []
257
                    payloadList.append(payload)
258
 
259
                except Exception as e:
260
                    logging.debug('Error while getting response for message id:- '+ msgId)
261
                    traceback.print_exc()
262
                    continue
263
 
264
 
17349 manish.sha 265
 
266
        jsonObj = json.dumps([dict(pn) for pn in payloadList])
17400 manish.sha 267
        pushpostrequest = urllib2.Request("http://localhost:3001/addPushNotification")
17349 manish.sha 268
        pushpostrequest.add_header('Content-Type', 'application/json')
269
        response = urllib2.urlopen(pushpostrequest, jsonObj).read()
270
 
17398 manish.sha 271
        logging.debug('Total Sms Sent:- '+str(len(sentSmsUsers)))
17349 manish.sha 272
 
273
        notificationCampaign.smsprocessed = True
274
        session.commit()
17398 manish.sha 275
 
17452 manish.sha 276
    logging.debug('SMS Blaster Process Completed.....'+str(datetime.now()))
17349 manish.sha 277
 
278
 
279
if __name__=='__main__':
280
    main()
281
    try:
282
        session.close()
283
    except:
284
        print 'Error while closing session'