Hi,

You have to somehow pass that information to your script. If you wish to control the channel, you could use the "socket" application which establishes an outbound tcp connection to your application.

Otherwise, you could always send an event from the dialplan containing the call's uuid. The event socket connection can control of any calls on the system, how exactly are you bridging the call to your speech server?

Mathieu Rene
Avant-Garde Solutions Inc
Office: + 1 (514) 664-1044 x100
Cell: +1 (514) 664-1044 x200




On 2010-12-14, at 2:20 PM, Brian Campbell wrote:

Thanks Mathieu 
 
I have up dated my code as per your instructions.
 
FreeSwitch answers the call and then does a bridge to my Speech Server application. If there are 10 simultaneous calls going on there would be 20 channels. When I send 'api show channels', I get info back for all 20 channels. How do I go about deciding which one contains the correct uuid for the session that I am trying to set a custom channel variable for ?
 
Here is my code
 
     private void injectCdrCode_ExecuteCode(object sender, EventArgs e)
    {
      try
      {
        TcpClient newClient = new TcpClient();
        // Connect to the port
        newClient.Connect(_host, _port);
        NetworkStream tcpStream = newClient.GetStream();
        byte[] receivedBytes = new byte[newClient.ReceiveBufferSize];
        int bytesRead = tcpStream.Read(receivedBytes, 0, newClient.ReceiveBufferSize);
        string returnData = Encoding.ASCII.GetString(receivedBytes);
        // Authenticate
        byte[] sendBytes = Encoding.ASCII.GetBytes("auth ClueCon\n\n");
        tcpStream.Write(sendBytes, 0, sendBytes.Length);
        receivedBytes = new byte[newClient.ReceiveBufferSize];
        bytesRead = tcpStream.Read(receivedBytes, 0, newClient.ReceiveBufferSize);
        returnData = Encoding.ASCII.GetString(receivedBytes);
        // Get channel info
        sendBytes = Encoding.ASCII.GetBytes("api show channels\n\n");
        tcpStream.Write(sendBytes, 0, sendBytes.Length);
        receivedBytes = new byte[newClient.ReceiveBufferSize];
        bytesRead = tcpStream.Read(receivedBytes, 0, newClient.ReceiveBufferSize);
        returnData = Encoding.ASCII.GetString(receivedBytes);

        // How do I get the proper UUID from the info provided by 'api show channels'
        
        string uuid = '????????'
        
        
        
        // Set the Custom Channel Variable
        sendBytes = Encoding.ASCII.GetBytes("api uuid_setvar " + uuid + " qqOneReach_ApplicationId BRIAN" + "\n\n");
                                                                          
        tcpStream.Write(sendBytes, 0, sendBytes.Length);
        receivedBytes = new byte[newClient.ReceiveBufferSize];
        bytesRead = tcpStream.Read(receivedBytes, 0, newClient.ReceiveBufferSize);
        returnData = Encoding.ASCII.GetString(receivedBytes);
        // Clean everything up
        
        tcpStream.Flush();
        tcpStream.Close();
        newClient.Close();
      }
      catch (Exception ex)
      {
        throw ex;
      }
    }

 
Thanks
 
Brian Campbell
 

From: mrene_lists@avgs.ca
Date: Thu, 2 Dec 2010 12:05:42 -0500
To: freeswitch-users@lists.freeswitch.org
Subject: Re: [Freeswitch-users] Custom Channel Variables via C#

You need to authenticate first.

Trying 127.0.0.1...
Connected to localhost
Escape character is '^]'.
Content-Type: auth/request

auth ClueCon

Content-Type: command/reply
Reply-Text: +OK accepted

api show channels

Content-Type: api/response
Content-Length: 748

uuid,direction,created,created_epoch,name,state,cid_name,cid_num,ip_addr,dest,application,application_data,dialplan,context,read_codec,read_rate,read_bit_rate,write_codec,write_rate,write_bit_rate,secure,hostname,presence_id,presence_data,callstate,callee_name,callee_num,callee_direction,call_uuid
aa6e6bee-1c3b-4493-b824-765c5a15f02c,outbound,2010-12-02 12:03:58,1291309438,loopback/park-a,CS_CONSUME_MEDIA,,0000000000,,park,,,inline,inline,L16,8000,128000,L16,8000,128000,,mrene.local,,,RINGING,,,,c9781e01-667e-446b-93e8-a081f0287d15
78ff4bb6-573e-4a60-a920-bfdb67f3ed6b,inbound,2010-12-02 12:03:58,1291309438,loopback/park-b,CS_EXECUTE,,0000000000,,park,park,,inline,inline,L16,8000,128000,L16,8000,128000,,mrene.local,,,RINGING,,,,

2 total.

Then you can use the uuid_* commands.

Mathieu Rene
Avant-Garde Solutions Inc
Office: + 1 (514) 664-1044 x100
Cell: +1 (514) 664-1044 x200




On 2010-12-02, at 10:03 AM, Brian Campbell wrote:

Thanks, the link was very helpful
 
I have taken a look at the link that you provided
 
I assume now that I can use uuid_setvar to accomplish what I want
 
Assuming that the uuid is 53d37581-1f90-44bf-860a-addbc8430e3a, it seems that my code would need to change to
 
 
private void injectCdrCode_ExecuteCode(object sender, EventArgs e)
{
  try
  {
    TcpClient newClient = new TcpClient();
 
    newClient.Connect("127.0.0.1", 8021);
 
    NetworkStream tcpStream = newClient.GetStream();
 
    byte[] sendBytes = Encoding.ASCII.GetBytes("api uuid_setvar 53d37581-1f90-44bf-860a-addbc8430e3a myChannelVariable 12345");
 
    tcpStream.Write(sendBytes, 0, sendBytes.Length);
 
    tcpStream.Close();
 
    newClient.Close();
  }
  catch(Exception ex)
  {
    throw ex;
  }
}

My question now becomes, how do I go about finding out the uuid for the session ? Is that obtainable via mod_event_socket or is there another way ?
 
Thanks
 
Brian 

From: mrene_lists@avgs.ca
Date: Wed, 1 Dec 2010 16:53:53 -0500
To: freeswitch-users@lists.freeswitch.org
Subject: Re: [Freeswitch-users] Custom Channel Variables via C#

Hi,

You can't send XML dialplan actions on the socket and expect FreeSWITCH to understand it, you must follow the event socket protocol.


Mathieu Rene
Avant-Garde Solutions Inc
Office: + 1 (514) 664-1044 x100
Cell: +1 (514) 664-1044 x200




On 2010-12-01, at 4:46 PM, Brian Campbell wrote:

 
I can set a custom channel variable in my incomming dial plan like this...
 
<action application='set' data='MyChannelVariable=12345' />
 
And it shows up fine in the CDR
 
I am now attempting to use mod_event_socket to set a custom channel variable and have it appear in the CDR
 
Here is the C# code so far, the code is part of a Microsoft Speech Server application that is answering the call
 
private void injectCdrCode_ExecuteCode(object sender, EventArgs e)
{
  try
  {
    TcpClient newClient = new TcpClient();
 
    newClient.Connect("127.0.0.1", 8021);
 
    NetworkStream tcpStream = newClient.GetStream();
 
    byte[] sendBytes = Encoding.ASCII.GetBytes("<action application='set' data='MyChannelVariable=12345' />");
 
    tcpStream.Write(sendBytes, 0, sendBytes.Length);
 
    tcpStream.Close();
 
    newClient.Close();
  }
  catch(Exception ex)
  {
    throw ex;
  }
}
 
After the call is answered, the C# code seems to run fine, but I dont see the custom channel variable in the resulting CDR
 
I figure I am not setting it correctly
 
Can anyone advise on what I am doing wrong ?
 
Thanks
 
 
Brian
 
 
_______________________________________________
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org


_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-usersUNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org _______________________________________________
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org


_______________________________________________ FreeSWITCH-users mailing list FreeSWITCH-users@lists.freeswitch.org http://lists.freeswitch.org/mailman/listinfo/freeswitch-usersUNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org _______________________________________________
FreeSWITCH-users mailing list
FreeSWITCH-users@lists.freeswitch.org
http://lists.freeswitch.org/mailman/listinfo/freeswitch-users
UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users
http://www.freeswitch.org