public VoipCall GetCall(string callId) { var result = new VoipCall { Id = callId }; var count = 6; while (count > 0) { try { var call = CallResource.Fetch(result.Id, client: client); if (!call.Price.HasValue || string.IsNullOrEmpty(call.Duration)) { count--; Thread.Sleep(10000); continue; } result.Price = (-1) * call.Price.Value; result.DialDuration = Convert.ToInt32(call.Duration); break; } catch (ApiException) { count--; Thread.Sleep(10000); } } return(result); }
public void AnswerCall(VoipCall call) { call.AnsweredBy = _securityContext.CurrentAccount.ID; call.Status = VoipCallStatus.Answered; _daoFactory.GetVoipDao().SaveOrUpdateCall(call); }
internal VoiceResponse Inbound(VoipCall call, DaoFactory daoFactory) { var contactPhone = call.Status == VoipCallStatus.Incoming || call.Status == VoipCallStatus.Answered ? call.From : call.To; Contact contact; var contacts = new VoipEngine(daoFactory).GetContacts(contactPhone, daoFactory); var managers = contacts.SelectMany(CRMSecurity.GetAccessSubjectGuidsTo).ToList(); var agent = GetSignalRHelper().GetAgent(managers); if (agent != null && agent.Item1 != null) { var agentId = agent.Item1.Id; SecurityContext.AuthenticateMe(agentId); call.AnsweredBy = agentId; contact = contacts.FirstOrDefault(CRMSecurity.CanAccessTo); daoFactory.VoipDao.SaveOrUpdateCall(call); } else { contact = contacts.FirstOrDefault(); } if (contact == null) { contact = new VoipEngine(daoFactory).CreateContact(call.From.TrimStart('+')); call.ContactId = contact.ID; daoFactory.VoipDao.SaveOrUpdateCall(call); } return(GetTwilioResponseHelper().Inbound(agent)); }
private static VoipCall ToCall(object[] r) { var call = new VoipCall { Id = (string)r[0], ParentID = (string)r[1], From = (string)r[2], To = (string)r[3], AnsweredBy = new Guid((string)r[4]), DialDate = TenantUtil.DateTimeFromUtc(Convert.ToDateTime(r[5])), DialDuration = Convert.ToInt32(r[6] ?? "0"), Price = Convert.ToDecimal(r[7]), Status = (VoipCallStatus)Convert.ToInt32(r[8]), VoipRecord = new VoipRecord { Id = (string)r[9], Uri = (string)r[10], Duration = Convert.ToInt32(r[11] ?? "0"), Price = Convert.ToDecimal(r[12]) }, ContactId = Convert.ToInt32(r[13]), ContactIsCompany = Convert.ToBoolean(r[14]) }; if (call.ContactId != 0) { call.ContactTitle = call.ContactIsCompany ? r[15] == null ? null : Convert.ToString(r[15]) : r[16] == null || r[17] == null ? null : string.Format("{0} {1}", Convert.ToString(r[16]), Convert.ToString(r[17])); } return(call); }
private VoipCall ToCall(CallContact dbVoipCall) { var call = new VoipCall { Id = dbVoipCall.DbVoipCall.Id, ParentID = dbVoipCall.DbVoipCall.ParentCallId, From = dbVoipCall.DbVoipCall.NumberFrom, To = dbVoipCall.DbVoipCall.NumberTo, AnsweredBy = dbVoipCall.DbVoipCall.AnsweredBy, DialDate = TenantUtil.DateTimeFromUtc(dbVoipCall.DbVoipCall.DialDate), DialDuration = dbVoipCall.DbVoipCall.DialDuration, Price = dbVoipCall.DbVoipCall.Price, Status = (VoipCallStatus)dbVoipCall.DbVoipCall.Status, VoipRecord = new VoipRecord { Id = dbVoipCall.DbVoipCall.RecordSid, Uri = dbVoipCall.DbVoipCall.RecordUrl, Duration = dbVoipCall.DbVoipCall.RecordDuration, Price = dbVoipCall.DbVoipCall.RecordPrice }, ContactId = dbVoipCall.CrmContact.Id, ContactIsCompany = dbVoipCall.CrmContact.IsCompany, }; if (call.ContactId != 0) { call.ContactTitle = call.ContactIsCompany ? dbVoipCall.CrmContact.CompanyName : dbVoipCall.CrmContact.FirstName == null || dbVoipCall.CrmContact.LastName == null ? null : string.Format("{0} {1}", dbVoipCall.CrmContact.FirstName, dbVoipCall.CrmContact.LastName); } return(call); }
public Contact GetContact(VoipCall call) { if (call.ContactId != 0) { return(null); } var contactPhone = call.Status == VoipCallStatus.Incoming || call.Status == VoipCallStatus.Answered ? call.From : call.To; var newContactIds = _daoFactory.GetContactDao().GetContactIDsByContactInfo(ContactInfoType.Phone, contactPhone.TrimStart('+'), null, true); foreach (var newContactId in newContactIds) { if (newContactId != 0) { var existContact = _daoFactory.GetContactDao().GetByID(newContactId); if (_crmSecurity.CanAccessTo(existContact)) { call.ContactId = newContactId; return(existContact); } } } return(null); }
public VoipCall SaveOrUpdateCall(VoipCall call) { using (var db = GetDb()) { var query = Insert(callsTable) .InColumnValue("id", call.Id) .InColumnValue("number_from", call.From) .InColumnValue("number_to", call.To) .InColumnValue("status", call.Status) .InColumnValue("contact_id", call.ContactId); if (!call.AnsweredBy.Equals(Guid.Empty)) { query.InColumnValue("answered_by", call.AnsweredBy); } if (call.DialDate == DateTime.MinValue) { call.DialDate = DateTime.UtcNow; } query.InColumnValue("dial_date", TenantUtil.DateTimeToUtc(call.DialDate)); if (call.Price > 0) { query.InColumnValue("price", call.Price); } db.ExecuteNonQuery(query); } return(call); }
private void GetPriceAndDuration(VoipCall call) { var provider = _voipDao.GetProvider(); var twilioCall = provider.GetCall(call.Id); call.Price = twilioCall.Price; call.DialDuration = twilioCall.DialDuration; }
public void StopVoip() { if (VoipCall != null) { VoipCall.NotifyCallEnded(); VoipCall = null; } Hub.Instance.VoipTaskInstance?.CloseVoipTask(); }
public VoipCallWrapper(VoipCall call, ContactWrapper contact = null) { Id = call.Id; From = call.From; To = call.To; Status = call.Status; AnsweredBy = EmployeeWraper.Get(call.AnsweredBy); DialDate = new ApiDateTime(call.DialDate); DialDuration = call.DialDuration; Cost = call.TotalPrice; Contact = contact; History = call.History.Select(h => new VoipCallHistoryWrapper(h)); }
public VoipCallWrapper(VoipCall call, ContactWrapper contact = null) { Id = call.Id; From = call.From; To = call.To; Status = call.Status; AnsweredBy = EmployeeWraper.Get(call.AnsweredBy); DialDate = new ApiDateTime(call.DialDate); DialDuration = call.DialDuration; Cost = call.Price + call.ChildCalls.Sum(r => r.Price) + call.VoipRecord.Price; Contact = contact; RecordUrl = call.VoipRecord.Uri; RecordDuration = call.VoipRecord.Duration; if (call.ChildCalls.Any()) { Calls = call.ChildCalls.Select(childCall => new VoipCallWrapper(childCall)); } }
public void StartOutgoingCall(OutgoingCallRequest request) { var capabilities = VoipPhoneCallMedia.Audio; if (request.VideoEnabled) { capabilities |= VoipPhoneCallMedia.Video; } var vCC = VoipCallCoordinator.GetDefault(); VoipCall = vCC.RequestNewOutgoingCall(request.PeerUserId, request.PeerUserId, "ChatterBox Universal", capabilities); if (VoipCall != null) { SubscribeToVoipCallEvents(); VoipCall.NotifyCallActive(); } }
public void AddHistoryToCallContact(VoipCall call, DaoFactory daoFactory) { var listItemDao = daoFactory.GetListItemDao(); if (call == null || call.ContactId == 0) { return; } var category = listItemDao.GetByTitle(ListType.HistoryCategory, CRMCommonResource.HistoryCategory_Call); if (category == null) { category = new ListItem(CRMCommonResource.HistoryCategory_Call, "event_category_call.png"); category.ID = listItemDao.CreateItem(ListType.HistoryCategory, category); } var contact = daoFactory.GetContactDao().GetByID(call.ContactId); if (contact != null && _crmSecurity.CanAccessTo(contact)) { var note = call.Status == VoipCallStatus.Incoming || call.Status == VoipCallStatus.Answered ? CRMContactResource.HistoryVoipIncomingNote : CRMContactResource.HistoryVoipOutcomingNote; var content = string.Format(note, call.DialDuration); var relationshipEvent = new RelationshipEvent { CategoryID = category.ID, EntityType = EntityType.Any, EntityID = 0, Content = content, ContactID = contact.ID, CreateOn = _tenantUtil.DateTimeFromUtc(DateTime.UtcNow), CreateBy = _securityContext.CurrentAccount.ID }; daoFactory.GetRelationshipEventDao().CreateItem(relationshipEvent); } }
public VoipCall GetCall(string callId) { var result = new VoipCall { Id = callId }; var count = 6; while (count > 0) { var call = client.GetCall(result.Id); if (!call.Price.HasValue || !call.Duration.HasValue) { count--; Thread.Sleep(10000); continue; } result.Price = (-1) * call.Price.Value; result.DialDuration = call.Duration.Value; break; } return(result); }
public VoipCall SaveOrUpdateCall(VoipCall call) { using (var db = GetDb()) { var query = Insert(callsTable) .InColumnValue("id", call.Id) .InColumnValue("number_from", call.From) .InColumnValue("number_to", call.To) .InColumnValue("status", call.Status) .InColumnValue("contact_id", call.ContactId); if (!call.AnsweredBy.Equals(Guid.Empty)) { query.InColumnValue("answered_by", call.AnsweredBy); } if (call.DialDate == DateTime.MinValue) { call.DialDate = DateTime.UtcNow; } query.InColumnValue("dial_date", TenantUtil.DateTimeToUtc(call.DialDate)); if (call.Price > 0) { query.InColumnValue("price", call.Price); } db.ExecuteNonQuery(query); } return call; }
public VoipCall SaveOrUpdateCall(VoipCall call) { using (var db = GetDb()) { var query = Insert("crm_voip_calls") .InColumnValue("id", call.Id) .InColumnValue("number_from", call.From) .InColumnValue("number_to", call.To) .InColumnValue("contact_id", call.ContactId); if (!string.IsNullOrEmpty(call.ParentID)) { query.InColumnValue("parent_call_id", call.ParentID); } if (call.Status.HasValue) { query.InColumnValue("status", call.Status.Value); } if (!call.AnsweredBy.Equals(Guid.Empty)) { query.InColumnValue("answered_by", call.AnsweredBy); } if (call.DialDate == DateTime.MinValue) { call.DialDate = DateTime.UtcNow; } query.InColumnValue("dial_date", TenantUtil.DateTimeToUtc(call.DialDate)); if (call.DialDuration > 0) { query.InColumnValue("dial_duration", call.DialDuration); } if (call.Price > Decimal.Zero) { query.InColumnValue("price", call.Price); } if (call.VoipRecord != null) { if (!string.IsNullOrEmpty(call.VoipRecord.Id)) { query.InColumnValue("record_sid", call.VoipRecord.Id); } if (!string.IsNullOrEmpty(call.VoipRecord.Uri)) { query.InColumnValue("record_url", call.VoipRecord.Uri); } if (call.VoipRecord.Duration != 0) { query.InColumnValue("record_duration", call.VoipRecord.Duration); } if (call.VoipRecord.Price != default(decimal)) { query.InColumnValue("record_price", call.VoipRecord.Price); } } db.ExecuteNonQuery(query); } return(call); }
public VoipCall SaveOrUpdateCall(VoipCall call) { var voipCall = new DbVoipCall { TenantId = TenantID, Id = call.Id, NumberFrom = call.From, NumberTo = call.To, ContactId = call.ContactId }; if (!string.IsNullOrEmpty(call.ParentID)) { voipCall.ParentCallId = call.ParentID; } if (call.Status.HasValue) { voipCall.Status = (int)call.Status.Value; } if (!call.AnsweredBy.Equals(Guid.Empty)) { voipCall.AnsweredBy = call.AnsweredBy; } if (call.DialDate == DateTime.MinValue) { call.DialDate = DateTime.UtcNow; } voipCall.DialDate = TenantUtil.DateTimeToUtc(call.DialDate); if (call.DialDuration > 0) { voipCall.DialDuration = call.DialDuration; } if (call.Price > decimal.Zero) { voipCall.Price = call.Price; } if (call.VoipRecord != null) { if (!string.IsNullOrEmpty(call.VoipRecord.Id)) { voipCall.RecordSid = call.VoipRecord.Id; } if (!string.IsNullOrEmpty(call.VoipRecord.Uri)) { voipCall.RecordUrl = call.VoipRecord.Uri; } if (call.VoipRecord.Duration != 0) { voipCall.RecordDuration = call.VoipRecord.Duration; } if (call.VoipRecord.Price != default) { voipCall.RecordPrice = call.VoipRecord.Price; } } VoipDbContext.VoipCalls.Add(voipCall); VoipDbContext.SaveChanges(); return(call); }
public VoipCall SaveOrUpdateCall(VoipCall callHistory) { var dao = _daoFactory.GetVoipDao(); var call = dao.GetCall(callHistory.Id) ?? callHistory; if (string.IsNullOrEmpty(call.ParentID)) { GetContact(call); } if (!callHistory.AnsweredBy.Equals(Guid.Empty)) { call.AnsweredBy = callHistory.AnsweredBy; } if (!callHistory.Date.Equals(default(DateTime))) { call.Date = callHistory.Date; } if (!callHistory.EndDialDate.Equals(default(DateTime))) { call.EndDialDate = callHistory.EndDialDate; } if (call.Price == 0 && callHistory.Price != default(decimal)) { call.Price = callHistory.Price; } if (call.DialDuration == 0) { call.DialDuration = callHistory.DialDuration; } if (call.VoipRecord == null) { call.VoipRecord = new VoipRecord(); } if (string.IsNullOrEmpty(call.VoipRecord.Id)) { call.VoipRecord.Id = callHistory.VoipRecord.Id; } if (call.VoipRecord.Price == default(decimal)) { call.VoipRecord.Price = callHistory.VoipRecord.Price; } if (string.IsNullOrEmpty(call.VoipRecord.Uri)) { call.VoipRecord.Uri = callHistory.VoipRecord.Uri; } if (call.VoipRecord.Duration == 0) { call.VoipRecord.Duration = callHistory.VoipRecord.Duration; } if (callHistory.Status.HasValue) { call.Status = callHistory.Status; } return(dao.SaveOrUpdateCall(call)); }
private void Call_AnswerRequested(VoipPhoneCall sender, CallAnswerEventArgs args) { VoipCall.NotifyCallActive(); Hub.Instance.VoipChannel.Answer(); }
private static VoipCall ToCall(object[] r) { var call = new VoipCall { Id = (string)r[0], From = (string)r[1], To = (string)r[2], AnsweredBy = new Guid((string)r[3]), DialDate = TenantUtil.DateTimeFromUtc(Convert.ToDateTime(r[4])), Price = Convert.ToDecimal(r[5]), Status = (VoipCallStatus)Convert.ToInt32(r[6]), ContactId = Convert.ToInt32(r[7]), ContactIsCompany = Convert.ToBoolean(r[8]) }; if (call.ContactId != 0) { call.ContactTitle = call.ContactIsCompany ? r[9] == null ? null : Convert.ToString(r[9]) : r[10] == null || r[11] == null ? null : string.Format("{0} {1}", Convert.ToString(r[10]), Convert.ToString(r[11])); } return call; }