Skip to content

Unlimited looped reply send my smsc #183

Description

@lujamaharjan

Hi @eigenein
I am implementing recharge system using python smpplib.

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'
The body of sms_received_function is

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?
Thank you in advance?

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions