public async Task <TwilioResponse> Answer(TwilioRequest request)
        {
            await SetMemberInfoFromPhone(request.From);
            await UpdateSigninStatus();

            using (var db = dbFactory())
            {
                var call = new VoiceCall
                {
                    CallId   = request.CallSid,
                    Number   = request.From,
                    CallTime = TimeUtils.GetLocalDateTime(this.config),
                    Name     = this.session.MemberName
                };

                db.Calls.Add(call);
                await db.SaveChangesAsync();

                this.config.GetPushHub <CallsHub>().updatedCall(CallsController.GetCallEntry(call));
            }

            var response = new TwilioResponse();

            BeginMenu(response);
            if (this.session.MemberId == null)
            {
                response.SayVoice(Speeches.WelcomeUnknownCaller);
            }

            await EndMenu(response);

            return(LogResponse(response));
        }
        public async Task <TwilioResponse> StopRecording(TwilioRequest request)
        {
            TwilioResponse response = new TwilioResponse();

            using (var db = dbFactory())
            {
                var call = db.Calls.Single(f => f.CallId == request.CallSid);
                //if (!string.IsNullOrWhiteSpace(call.RecordingUrl))
                //{
                //  // Delete previous recording
                //}
                call.RecordingDuration = request.RecordingDuration;
                call.RecordingUrl      = request.RecordingUrl;
                await db.SaveChangesAsync();

                this.session.HasRecording = true;

                this.config.GetPushHub <CallsHub>().updatedCall(CallsController.GetCallEntry(call));

                BeginMenu(response);
                response.SayVoice(Speeches.CallerRecordingSaved);
                await EndMenu(response, true);
            }
            return(LogResponse(response));
        }
        public async Task <TwilioResponse> Complete(TwilioRequest request)
        {
            using (var db = dbFactory())
            {
                var call = db.Calls.Where(f => f.CallId == request.CallSid).SingleOrDefault();
                if (call != null)
                {
                    call.Duration = request.CallDuration;
                    await db.SaveChangesAsync();

                    this.config.GetPushHub <CallsHub>().updatedCall(CallsController.GetCallEntry(call));
                }
            };

            var response = new TwilioResponse();

            response.Hangup();
            return(LogResponse(response));
        }