Hello everyone

This is my first posting via the mailing list

I’m trying my hand at freeswitch esl with .net

I’ve managed to get a hold of all incoming events, but can’t seem to "pick up the phone"

my first goal is to pick up the phone and read out some text via tts

I’ve scoured the web, tried everything I can find or think of but no luck

here’s my code

 

    Private Sub winMain_Loaded(sender As Object, e As RoutedEventArgs) Handles Me.Loaded

        ThreadPool.QueueUserWorkItem(New WaitCallback(Sub(stateInfo)

                                                          FreeSwitch = New ESLconnection("10.0.0.1", 8021, "mypass")

                                                          Dim eslEvent = FreeSwitch.SendRecv("event plain ALL")

                                                          FreeSwitch.SendRecv("event plain DTMF")

                                                          If eslEvent IsNot Nothing Then

                                                              AddEvent(eslEvent)

                                                              While FreeSwitch.Connected

                                                                  eslEvent = FreeSwitch.RecvEvent

                                                                  AddEvent(eslEvent)

                                                              End While

                                                          End If

                                                      End Sub))

 

    End Sub

 

    Private Sub AddEvent(e As ESLevent)

        Dim dd = TextCollection(e.Serialize(""), ": ", vbLf)

        Dim eventname = dd("event-name")

        'Dim uid = dd("Unique-ID")

        Dim uid = dd("Channel-Call-UUID")

        If dd("Caller-Network-Addr") <> "" Then

            Dim dcx = DBEntities()

            Dim ses = dcx.Sessions.SingleOrDefault(Function(x) x.ServerCode = uid)

            Dim ChannelState = dd("Channel-State")

            Dim ChannelCallState = dd("Channel-Call-State").ToLower

            Select Case eventname

                Case "CHANNEL_STATE"

                    If ses Is Nothing Then

                        ses = New Session

                        dcx.Sessions.AddObject(ses)

                    End If

                    ses.CallerHost = dd("Caller-Network-Addr")

                    ses.CallerName = UrlDecoded(dd("Caller-Caller-ID-Name"))

                    ses.CallerPhone = dd("Caller-Caller-ID-Number")

                    ses.CallerUser = dd("Caller-Username")

                    ses.CalleeUser = dd("Caller-Destination-Number")

                    ses.ServerCode = uid

                    If {"cs_destroy", "cs_hangup"}.Contains(ChannelState) Then ses.HungUpOn = Now

                Case "CHANNEL_CALLSTATE"

                    If ChannelCallState = "ringing" Then

                        Dim evn = FreeSwitch.Execute("answer", String.Empty, uid)

                        Dim res = evn.Serialize("")

                    End If

                Case "CHANNEL_DESTROY"

                    If ses IsNot Nothing Then ses.HungUpOn = Now

            End Select

            dcx.SaveChanges()

        End If

    End Sub

 

the answer line is getting reached, and the result is "+OK" but the phone still keeps ringing

please note that I’m unsure which is the correct uuid, but trying both of them gave me identical results

 

As per advise from Nuwan Wijerathne, I put the “answer” action in the dialplan, and tried just the playback from code (just a wav file), but the result is the same. Freeswitch ignores entirely my commands.

It picks up, and immediately hangs up because it has finished the whole dialplan

 

I’d appreciate your help. I’m pretty new to freeswitch and esl

 

Please advise

 

Sincerely,

ymo