private static void IvrManager(EventBase receivedEvent) { if (receivedEvent is EventChannelAnswer) { EventChannelAnswer answer = (EventChannelAnswer)receivedEvent; if (answer.Parameters["variable_ivr_name"] == "voicemail") { new Voicemail(mgr, answer.UniqueId); } } else if (receivedEvent is EventChannelHangup) { Console.WriteLine("Bye bye baby!"); } }
public void OnSwitchEvents(EventBase theEvent) { if (theEvent is EventPresenceIn) { EventPresenceIn ep = (EventPresenceIn)theEvent; //Channel-State: CS_ROUTING //Channel-Name: sofia/default/jonas%40192.168.1.102%3A5070 //Unique-ID: 2f87ba27-2f71-d64d-8c64-9966ee894eac //Call-Direction: inbound //Answer-State: ringing //Event-Name: PRESENCE_IN CallState state = CallState.Unknown; string destination = string.Empty; if (ep.ChannelState.ChannelInfo.State == ChannelState.Routing) { if (IsInbound(ep)) { state = CallState.Alerting; destination = ep.Caller.DestinationNumber; } else { state = CallState.Offering; destination = ep.Caller.UserName; } } else if (ep.ChannelState.ChannelInfo.State == ChannelState.Hangup) { state = CallState.Disconnected; if (IsInbound(ep)) { destination = ep.Caller.DestinationNumber; } else { destination = ep.Caller.UserName; } } if (state != CallState.Unknown) { TriggerCallState(ep.ChannelState.ChannelInfo.Address, ep.ChannelState.UniqueId, state, destination); } } else if (theEvent is EventChannelAnswer) { EventChannelAnswer ea = (EventChannelAnswer)theEvent; string destination; if (IsInbound(ea)) { destination = ea.Caller.DestinationNumber; } else { destination = ea.Caller.UserName; } TriggerCallState(ea.ChannelInfo.Address, ea.UniqueId, CallState.Connected, destination); } else if (theEvent is EventChannelDestroy) { EventChannelDestroy e = (EventChannelDestroy)theEvent; Debug.WriteLine("triggering CallState.Disconnected"); TriggerCallState(e.ChannelInfo.Address, e.UniqueId, CallState.Disconnected, e.Originator.DestinationNumber); } }
public void OnSwitchEvents2(EventBase theEvent) { ChannelEvent evt = theEvent as ChannelEvent; EventChannelState channelState = theEvent as EventChannelState; if (channelState != null) { Debug.WriteLine("ChannelState: " + channelState.ChannelInfo.State + " " + channelState.Caller.UserName + " " + channelState.Caller.DestinationNumber); } else if (evt != null && evt.ChannelInfo != null) { Debug.WriteLine("ChannelEvent: " + evt.Name + " " + evt.ChannelInfo.Address); } if (evt != null) { // CHANNEL_ANSWER, No originator = new outgoing call. // ChannelName = the one who makes the call if (evt is EventChannelAnswer) { EventChannelAnswer e = (EventChannelAnswer)evt; if (e.Originator.CallerIdName != string.Empty) { Debug.WriteLine("Skipping emoty ChannelAnswer"); return; // We do only want empty ones. } if (!IsExternalNumber(evt.ChannelInfo.Address)) { Debug.WriteLine("triggering CallState.Alerting"); TriggerCallState(evt.ChannelInfo.Address, e.UniqueId, CallState.Alerting, e.Caller.DestinationNumber); } } // CHANNEL_OUTGOING, Event for Alerting/Offering // Originator = the one calling // ChannelName = the one getting called. else if (evt is EventChannelOutgoing) { EventChannelOutgoing e = (EventChannelOutgoing)evt; if (!IsExternalNumber(evt.ChannelInfo.Address)) { Debug.WriteLine("triggering CallState.Offering"); TriggerCallState(evt.ChannelInfo.Address, e.UniqueId, CallState.Offering, e.Originator.UserName); } if (!IsExternalNumber(e.Originator.UserName)) { Debug.WriteLine("triggering CallState.Alerting"); TriggerCallState(e.Originator.UserName, e.Originator.UniqueId, CallState.Alerting, e.ChannelInfo.Address); } } else if (evt is EventChannelBridge) { EventChannelBridge e = (EventChannelBridge)evt; if (!IsExternalNumber(evt.ChannelInfo.Address)) { Debug.WriteLine("triggering CallState.Connected"); TriggerCallState(evt.ChannelInfo.Address, e.UniqueId, CallState.Connected, e.Caller.DestinationNumber); } // Trigger destination if (!IsExternalNumber(e.Caller.DestinationNumber) && e.Originator.ChannelName != string.Empty) { Debug.WriteLine("triggering CallState.Connected"); TriggerCallState(ChannelDestination(e.Originator.ChannelName), e.UniqueId, CallState.Connected, e.ChannelInfo.Address); } } else if (evt is EventChannelDestroy) { EventChannelDestroy e = (EventChannelDestroy)evt; Debug.WriteLine("triggering CallState.Disconnected"); TriggerCallState(evt.ChannelInfo.Address, e.UniqueId, CallState.Disconnected, e.Originator.DestinationNumber); } } }