Beispiel #1
0
 def init_call(self, mobile_number):
     call_url = self.initiate_call_urlformat.format(sid=self.sid)
     flow_url = self.flow_urlformat.format(flow_id=self.flow_id)
     #TODO create a call object. add the id to the CustomField. save the call object
     props = self.init_props()
     post_data = {
         'From': int(mobile_number),
         'CallerId': self.caller_id,
         'Url': flow_url,
         'TimeLimit': self.time_limit,
         'TimeOut': self.time_out,
         'CallType': self.call_type,
         'StatusCallback': reverse(self.ServiceCallEndView.get_name()),
         'CustomField': json.dumps(props),
     }
     r = requests.post(call_url,
                       auth=(self.sid, self.token),
                       data=post_data)
     response_data = json.loads(r.text)
     call_sid = response_data['Call']['Sid']
     call = Call(exotel_call_id=call_sid)
     call.state = json.dumps(self.init_state())
     call.props = json.dumps(self.init_props())
     call.save()
     #return {"id": call.id, "exotel_id": call_sid}
     return {"exotel_id": call_sid}
Beispiel #2
0
def twilio_call(request):

#    if request.method is not 'GET':
#        return HttpResponse(status=400)


    account_sid = secrets.TWILIO_ACCOUNT_SID  # Your Account SID from www.twilio.com/console
    auth_token = secrets.TWILIO_ACCOUNT_SECRET  # Your Auth Token from www.twilio.com/console

    required = ['name', 'npeople', 'datetime', 'resid', 'cusphone', 'lang']
    for req in required:
        if req not in request.GET:
            return JSONResponse(status=400)

    name = request.GET.get('name')
    num_people = request.GET.get('npeople')
    timestamp = request.GET.get('datetime')
    jptz = pytz.timezone('Asia/Tokyo')
    dt = datetime.datetime.fromtimestamp(float(timestamp), tz=jptz)
    shopid = request.GET.get('resid')
    if request.GET.get('lang') == "ja":
        language = Call.JAPANESE
    else:
        language = Call.ENGLISH
    cus_phone = request.GET.get('cusphone')

    shop_info = Venue.objects.get(pk = shopid)
    #res_phone = shop_info.phone
    res_phone = secrets.TEST_PHONE
    res_name = shop_info.name

    call_info = Call()
    call_info.name = name
    call_info.num_people = num_people
    call_info.date_time = dt
    call_info.res_phone = res_phone
    call_info.cus_phone = cus_phone
    call_info.language_opt = language
    call_info.res_name = res_name
    call_info.save()

    # After save, I have this id.
    pk = call_info.pk

    # Make request to Twilio.
    url = "http://tjr.tonny.me/reservation/" + str(pk) + '/'
    client = TwilioRestClient(account_sid, auth_token)

    try:
        call = client.calls.create(url=url, to=res_phone, from_=secrets.TWILIO_PHONE,
                                   status_callback="http://tjr.tonny.me/callingstatus/" + str(pk) + '/',
                                   status_callback_method="POST",
                                   )
    except TwilioRestException as e:
        print(e)

    serializer = CallSerializer(call_info)
    return JSONResponse(serializer.data)
Beispiel #3
0
def twilio_call(request):

#    if request.method is not 'GET':
#        return HttpResponse(status=400)


    account_sid = "AC9fd29fc278859337de38574c25843043"  # Your Account SID from www.twilio.com/console
    auth_token = "22388542078a89a05e264409a2ef0055"  # Your Auth Token from www.twilio.com/console

    required = ['name', 'npeople', 'datetime', 'resid', 'cusphone', 'lang']
    for req in required:
        if req not in request.GET:
            return JSONResponse(status=400)

    name = request.GET.get('name')
    num_people = request.GET.get('npeople')
    timestamp = request.GET.get('datetime')
    jptz = pytz.timezone('Asia/Tokyo')
    dt = datetime.datetime.fromtimestamp(float(timestamp), tz=jptz)
    shopid = request.GET.get('resid')
    if request.GET.get('lang') == "ja":
        language = Call.JAPANESE
    else:
        language = Call.ENGLISH
    cus_phone = request.GET.get('cusphone')

    shop_info = Venue.objects.get(pk = shopid)
    #res_phone = shop_info.phone
    res_phone = "+819071931989"
    res_name = shop_info.name

    call_info = Call()
    call_info.name = name
    call_info.num_people = num_people
    call_info.date_time = dt
    call_info.res_phone = res_phone
    call_info.cus_phone = cus_phone
    call_info.language_opt = language
    call_info.res_name = res_name
    call_info.save()

    # After save, I have this id.
    pk = call_info.pk

    # Make request to Twilio.
    url = "http://47.88.212.198:8000/reservation/" + str(pk) + '/'
    client = TwilioRestClient(account_sid, auth_token)

    try:
        call = client.calls.create(url=url, to=res_phone, from_="+81345304650")
    except TwilioRestException as e:
        print(e)

    serializer = CallSerializer(call_info)
    return JSONResponse(serializer.data)
Beispiel #4
0
def answer():
    print "entered /answer"
    if request.method == 'POST':
        try:
            print "request call status:"
	    print >> sys.stderr, str(request.form['CallStatus'])
            
            #create call object
            c= Call(    timeAnswered = datetime.datetime.now(),
                        direction = request.form['Direction'],
                        callFrom = request.form['From'],
                        billRate = float(request.form['BillRate']),
                        cn = request.form['CallerName'],
                        callTo = request.form['To'],
                        callUUID = str(request.form['CallUUID']), 
                        #callStatus = request.form['CallStatus'],
                        callState = 'ringing',
                    ) #make a new sCall object
            print "about to save"            
            c.save()
            
            #create state machine
            daddy = CallStateMachDaddy(c.callUUID)
            print "created daddy"
            daddy.e_answer()
            print "invoked state machine"
            if daddy.callXMLBuffer:
                r = daddy.callXMLBuffer
                daddy.callXMLBuffer = ''
            print "checked callXMLBuffer"
            print "type c = "+str(type(c))
            print "type daddy = " +str(type(daddy))
            
            c.callDaddyPickle = pickle.dumps(daddy)
            print "stuffed callDaddyPickle"
            c.save()
            
            
                        #send response to Plivo cloud.
            output = "Plivo Call RESTXML Response => %s" % r
            print >> sys.stderr, output
            return render_template('response_template.xml', response=r)
        except:
            print "exception in /answer"
            print >> sys.stderr, str(sys.exc_info()[0]) # These write the nature of the error
            print >> sys.stderr, str(sys.exc_info()[1])
    else:
        print >> sys.stderr, "Received GET request to /answer."
    return "Received GET request to /answer."
Beispiel #5
0
def receive_call(request, template=None, form_class=ReceiveCallForm):
    if request.method == 'POST':
        fields = request.POST
    else:
        fields = request.GET
    form = form_class(fields)

    context = {}
    user = None

    if form.is_valid():
        profile = None
        try:
            fragment_type = CallFragment.OUTBOUND_WELCOME_UNKNOWN_USER
            profile = ApplicantProfile.objects.get(mobile_number=form.cleaned_data['From'])
            user = profile.user
            
            call = Call(applicant=profile, 
                        outbound=False, 
                        call_sid=form.cleaned_data['CallSid'],
                        phone_number=form.cleaned_data['From'],
                        call_type=INBOUND_CHECK_JOBS)
            
            call.save()

            fragment_type = CallFragment.OUTBOUND_WELCOME_KNOWN_USER
        except ApplicantProfile.DoesNotExist:
            call = Call(outbound=False, 
                        call_sid=form.cleaned_data['CallSid'],
                        phone_number=form.cleaned_data['From'],
                        call_type=INBOUND_CHECK_JOBS)
            
            call.save()
    
        fragment = CallFragment(call=call,
                                outbound=True,
                                fragment_type=fragment_type)
        fragment.save()

    context['user'] = user

    return render_to_response(template,
                              context,
                              context_instance=RequestContext(request))
Beispiel #6
0
 def init_call(self, mobile_number):
     call_url = self.initiate_call_urlformat.format(sid=self.sid)
     flow_url = self.flow_urlformat.format(flow_id=self.flow_id)
     #TODO create a call object. add the id to the CustomField. save the call object
     props = self.init_props()
     post_data = {
         'From' :  int(mobile_number),
         'CallerId' : self.caller_id,
         'Url' : flow_url,
         'TimeLimit' : self.time_limit,
         'TimeOut' : self.time_out,
         'CallType' : self.call_type,
         'StatusCallback' : reverse(self.ServiceCallEndView.get_name()),
         'CustomField' : json.dumps(props),
     }
     r = requests.post(call_url, auth=(self.sid, self.token), data=post_data)
     response_data = json.loads(r.text)
     call_sid = response_data['Call']['Sid']
     call = Call(exotel_call_id = call_sid)
     call.state = json.dumps(self.init_state())
     call.props = json.dumps(self.init_props())
     call.save()
     #return {"id": call.id, "exotel_id": call_sid}
     return {"exotel_id": call_sid}
Beispiel #7
0
def twilio_call(request):

    #    if request.method is not 'GET':
    #        return HttpResponse(status=400)

    account_sid = secrets.TWILIO_ACCOUNT_SID  # Your Account SID from www.twilio.com/console
    auth_token = secrets.TWILIO_ACCOUNT_SECRET  # Your Auth Token from www.twilio.com/console

    required = ['name', 'npeople', 'datetime', 'resid', 'cusphone', 'lang']
    for req in required:
        if req not in request.GET:
            return JSONResponse(status=400)

    name = request.GET.get('name')
    num_people = request.GET.get('npeople')
    timestamp = request.GET.get('datetime')
    jptz = pytz.timezone('Asia/Tokyo')
    dt = datetime.datetime.fromtimestamp(float(timestamp), tz=jptz)
    shopid = request.GET.get('resid')
    if request.GET.get('lang') == "ja":
        language = Call.JAPANESE
    else:
        language = Call.ENGLISH
    cus_phone = request.GET.get('cusphone')

    shop_info = Venue.objects.get(pk=shopid)
    #res_phone = shop_info.phone
    res_phone = secrets.TEST_PHONE
    res_name = shop_info.name

    call_info = Call()
    call_info.name = name
    call_info.num_people = num_people
    call_info.date_time = dt
    call_info.res_phone = res_phone
    call_info.cus_phone = cus_phone
    call_info.language_opt = language
    call_info.res_name = res_name
    call_info.save()

    # After save, I have this id.
    pk = call_info.pk

    # Make request to Twilio.
    url = "http://tjr.tonny.me/reservation/" + str(pk) + '/'
    client = TwilioRestClient(account_sid, auth_token)

    try:
        call = client.calls.create(
            url=url,
            to=res_phone,
            from_=secrets.TWILIO_PHONE,
            status_callback="http://tjr.tonny.me/callingstatus/" + str(pk) +
            '/',
            status_callback_method="POST",
        )
    except TwilioRestException as e:
        print(e)

    serializer = CallSerializer(call_info)
    return JSONResponse(serializer.data)