Subversion Repositories SmartDukaan

Rev

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