Unlimited looped reply send my smsc #185
|
Hi @eigenein import logging
import smpplib.gsm
import smpplib.client
import smpplib.consts
from env import ENVIRONMENT_VARIABLES
from helpers import sms_recived_function
logging.basicConfig(level='DEBUG')
client = smpplib.client.Client(ENVIRONMENT_VARIABLES.get('SMSC_IP'),
ENVIRONMENT_VARIABLES.get("SMSC_PORT"))
client .set_message_received_handler(lambda pdu: sms_recived_function(pdu))
client.connect()
client.bind_receiver(system_id = ENVIRONMENT_VARIABLES.get('SYSTEM_ID') ,
password = ENVIRONMENT_VARIABLES.get('SYSTEM_PASSWORD') )
client.listen()for waiting the incomming sms. when sms comes it will call sms_recived_function that wil hit django rest api' import requests
def sms_recived_function(pdu):
# hit api to django server Here
URL = "http://localhost:8000/api/dummy/"
headers = {"Authorization":"Token 9578b252b0b9a5b5b93dd4c51ba8628327302d7c"}
data = {
'mobile_number': pdu.source_addr.decode("utf-8"),
'sms_content': pdu.short_message.decode('utf-8')
}
r = requests.post(url = URL, data = data, headers=headers)Here is django views class SMSDetailView(APIView):
permission_classes = [IsAuthenticated]
authentication_classes = [TokenAuthentication]
def get(self, request, *args, **kwargs):
query_set = SMSDetail.objects.all()
serializer = SMSDetailSerializer(instance=query_set, many=True)
return Response(serializer.data)
def post(self, request, *args, **kwargs):
try:
serializer = SMSDetailSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
mobile_number = request.data.get('mobile_number')
sms_content = request.data.get('sms_content')
sms_content_list = sms_content.split()
keyword = sms_content_list[0].strip()
if re.match(r'^rch$', keyword, re.IGNORECASE):
send_single_sms({'mobile_number':mobile_number, 'sms_content':"Rch keyword hit by you!"})
return Response({'msg':'Rch keyword hit'})
elif re.match(r'^open$', keyword, re.IGNORECASE):
send_single_sms({'mobile_number':mobile_number, 'sms_content':"open keyword hit by you!"})
return Response({'msg':'open keyword hit!'})
else:
send_single_sms({'mobile_number':mobile_number, 'sms_content':"No keyword hit by you!"})
return Response({'msg':'No keyword matched!'})
except Exception:
send_single_sms({'mobile_number':request.data.get('mobile_number'), 'sms_content':"Something went wrong!"})
#send_sms.delay({'mobile_number':request.data.get('mobile_number'), 'sms_content':"Something went wrong!"})
return Response({'msg':'Something went wrong'})the body of send_single_sms function is as follow class SMSDetailView(APIView):
permission_classes = [IsAuthenticated]
authentication_classes = [TokenAuthentication]
def get(self, request, *args, **kwargs):
query_set = SMSDetail.objects.all()
serializer = SMSDetailSerializer(instance=query_set, many=True)
return Response(serializer.data)
def post(self, request, *args, **kwargs):
try:
serializer = SMSDetailSerializer(data=request.data)
serializer.is_valid(raise_exception=True)
serializer.save()
mobile_number = request.data.get('mobile_number')
sms_content = request.data.get('sms_content')
sms_content_list = sms_content.split()
keyword = sms_content_list[0].strip()
if re.match(r'^rch$', keyword, re.IGNORECASE):
send_single_sms({'mobile_number':mobile_number, 'sms_content':"Rch keyword hit by you!"})
return Response({'msg':'Rch keyword hit'})
elif re.match(r'^open$', keyword, re.IGNORECASE):
send_single_sms({'mobile_number':mobile_number, 'sms_content':"open keyword hit by you!"})
return Response({'msg':'open keyword hit!'})
else:
send_single_sms({'mobile_number':mobile_number, 'sms_content':"No keyword hit by you!"})
return Response({'msg':'No keyword matched!'})
except Exception:
send_single_sms({'mobile_number':request.data.get('mobile_number'), 'sms_content':"Something went wrong!"})
#send_sms.delay({'mobile_number':request.data.get('mobile_number'), 'sms_content':"Something went wrong!"})
return Response({'msg':'Something went wrong'})When I send sms, it will reply unlimited sms to sender. Is this occured due to running multiple smpplib code? |
Replies: 2 comments
|
I can't see your This causes smpp server to send Delivery Reports you should check either it is delivery report or message from client to you |
|
Thank you @aaravcreator. |
I can't see your
send_single_sms( )functionI assume that you have
registered_delivery = Trueinclient.send_message( )functionclient.send_message( source_addr_ton=smpplib.consts.SMPP_TON_INTL, #source_addr_npi=smpplib.consts.SMPP_NPI_ISDN, # Make sure it is a byte string, not unicode: source_addr='SENDERPHONENUM', dest_addr_ton=smpplib.consts.SMPP_TON_INTL, #dest_addr_npi=smpplib.consts.SMPP_NPI_ISDN, # Make sure thease two params are byte strings, not unicode: destination_addr='PHONENUMBER', short_message=part, data_coding=encoding_flag, esm_class=msg_type_flag, registered_delivery=True, )This causes smpp server to send Delivery Reports
and then
setmessage_received_handler()is call…