Beispiel #1
0
        static void ari_OnStasisStartEvent(object sender, AsterNET.ARI.Models.StasisStartEvent e)
        {
            Console.WriteLine("Channel {0} has entered the application", e.Channel.Id);
            _ari.Channels.Ring(e.Channel.Id);
            Thread.Sleep(2000);     // wait 2 seconds
            Console.WriteLine("Answering channel {0}", e.Channel.Id);

            _ari.Channels.Answer(e.Channel.Id);
            _ari.Channels.StartSilence(e.Channel.Id);
            Thread.Sleep(4000);     // wait 4 seconds

            Console.WriteLine("hanging up channel {0}", e.Channel.Id);
            _ari.Channels.Hangup(e.Channel.Id);
        }
Beispiel #2
0
        /// <summary>
        /// This stasis app receives in e.Args[0] the action like "login" and then send de corresponding msg to the login proxy
        /// </summary>
        /// <param name="sender"></param>
        /// <param name="e"></param>
        private void Pbx_OnStasisStartEvent(IAriClient sender, AsterNET.ARI.Models.StasisStartEvent e)
        {
            //string eventname = ((JObject)e.Userevent).SelectToken("eventname").Value<string>();
            string eventname   = e.Args[0]; //["eventname"];
            string memberId    = e.Args[1]; //["agent"];
            string password    = e.Args[2]; //["password"];
            string contact     = e.Args[3]; //["contact"];
            string pauseReason = "";

            if (e.Args.Count >= 5) //verifico que tenga 4 o mas argumentos para tratar de recuperar el pause reason
            {
                pauseReason = e.Args[4];
            }

            string channelId = e.Channel.Id; //Envio el channel ID para trackear la respuesta
            string deviceId  = "";

            try
            {
                //obtenemos el deviceId del string de contacto
                deviceId = Regex.Match(contact, @"\<(.+?)\@").Groups[1].Value.Replace(":", "/").ToUpper();
            }
            catch (Exception ex)
            {
                Log.Logger.Debug("PbxLoginProvider: Error al obtener deviceId del contacto. " + ex.Message);
            }


            //Si no me pasan el memberId, trato de recuperarlo del deviceMemberMap
            if (String.IsNullOrEmpty(memberId))
            {
                lock (_locker)
                {
                    memberId = deviceMemberMap.GetMemberIdFromDeviceId(deviceId);
                }
                //Si tampoco lo encuentro en el deviceMemberMap
                if (String.IsNullOrEmpty(memberId))
                {
                    Log.Logger.Debug("PbxLoginProvider: no se pudo determinar el memeberId para el device: " + deviceId);
                }
            }

            if (eventname == "login")
            {
                //meter todo este parse en un metodo estático tal vez una clase contact Contact.Parse?
                contact  = contact.Replace(";", ">");
                deviceId = Regex.Match(contact, @"\<(.+?)\@").Groups[1].Value.Replace(":", "/").ToUpper();
                string number      = Regex.Match(contact, @"\:(.+?)\@").Groups[1].Value;
                string address     = Regex.Match(contact, @"\@(.+?)\>").Groups[1].Value;
                string uri         = Regex.Match(contact, @"\<(.+?)\>").Groups[1].Value.Replace("<", "").Replace(">", "");
                string destination = "SIP/" + address + "/" + number;

                //esta llamada la tengo que pasar de ask a tell para poder hacer todo async
                //MessageMemberLoginResponse mlr = await
                Log.Logger.Debug("Login para: " + memberId);
                actorLoginProxy.Send(new MessageMemberLogin()
                {
                    From = source, MemberId = memberId, Password = password, Contact = destination, DeviceId = deviceId, RequestId = channelId
                });
            }
            else if (eventname == "logoff")
            {
                if (!String.IsNullOrEmpty(memberId))
                {
                    lock (_locker)
                    {
                        deviceMemberMap.UnTrackMemberDeviceId(deviceId);
                    }
                    actorLoginProxy.Send(new MessageMemberLogoff()
                    {
                        From = source, MemberId = memberId, Password = password, RequestId = e.Channel.Id
                    });
                }
                else
                {
                    Log.Logger.Debug("LogOff: Error MembderId es nulo o vacio");
                }

                //como no manejo nada mas sigo adelante en el dialplan
                lock (_locker)
                {
                    pbx.Channels.ContinueInDialplan(e.Channel.Id);
                }
            }
            else if (eventname == "pause")
            {
                if (!String.IsNullOrEmpty(memberId))
                {
                    actorLoginProxy.Send(new MessageMemberPause()
                    {
                        From = source, MemberId = memberId, Password = password, PauseReason = pauseReason, RequestId = e.Channel.Id
                    });
                }
                else
                {
                    Log.Logger.Debug("Pause: Error MembderId es nulo o vacio");
                }

                //como no manejo nada mas sigo adelante en el dialplan
                lock (_locker)
                {
                    pbx.Channels.ContinueInDialplan(e.Channel.Id);
                }
            }
            else if (eventname == "unpause")
            {
                if (!String.IsNullOrEmpty(memberId))
                {
                    actorLoginProxy.Send(new MessageMemberUnPause()
                    {
                        From = source, MemberId = memberId, Password = password, RequestId = e.Channel.Id
                    });
                }
                else
                {
                    Log.Logger.Debug("UnPause: Error MembderId es nulo o vacio");
                }
                lock (_locker)
                {
                    //como no manejo nada mas sigo adelante en el dialplan
                    pbx.Channels.ContinueInDialplan(e.Channel.Id);
                }
            }
        }
Beispiel #3
0
 private void ActionClient_OnStasisStartEvent(IAriClient sender, AsterNET.ARI.Models.StasisStartEvent e)
 {
     throw new System.NotImplementedException();
 }