Subversion Repositories SmartDukaan

Rev

Rev 18210 | Rev 18221 | 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:
79
                    url_params = { 'ani' : '91'+user.mobile_number,  'uname' : 'srlsaholic', 'passwd' : 'sr18mar' , 'cli' : 'PROFTM', 'message' : smstext }
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
246
                    payload["status"]=1
247
                    if len(payloadList)==5000:
248
                        jsonObj = json.dumps([dict(pn) for pn in payloadList])
249
                        pushpostrequest = urllib2.Request("http://localhost:3001/addPushNotification")
250
                        pushpostrequest.add_header('Content-Type', 'application/json')
251
                        response = urllib2.urlopen(pushpostrequest, jsonObj).read()
252
                        payloadList = []
253
                    payloadList.append(payload)
254
 
255
                except Exception as e:
256
                    logging.debug('Error while getting response for message id:- '+ msgId)
257
                    traceback.print_exc()
258
                    continue
259
 
260
 
17349 manish.sha 261
 
262
        jsonObj = json.dumps([dict(pn) for pn in payloadList])
17400 manish.sha 263
        pushpostrequest = urllib2.Request("http://localhost:3001/addPushNotification")
17349 manish.sha 264
        pushpostrequest.add_header('Content-Type', 'application/json')
265
        response = urllib2.urlopen(pushpostrequest, jsonObj).read()
266
 
17398 manish.sha 267
        logging.debug('Total Sms Sent:- '+str(len(sentSmsUsers)))
17349 manish.sha 268
 
269
        notificationCampaign.smsprocessed = True
270
        session.commit()
17398 manish.sha 271
 
17452 manish.sha 272
    logging.debug('SMS Blaster Process Completed.....'+str(datetime.now()))
17349 manish.sha 273
 
274
 
275
if __name__=='__main__':
276
    main()
277
    try:
278
        session.close()
279
    except:
280
        print 'Error while closing session'