Custom Channel Variables via C#
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
Hi, You can't send XML dialplan actions on the socket and expect FreeSWITCH to understand it, you must follow the event socket protocol. See http://wiki.freeswitch.org/wiki/Event_socket for more information. Mathieu Rene Avant-Garde Solutions Inc Office: + 1 (514) 664-1044 x100 Cell: +1 (514) 664-1044 x200 mrene@avgs.ca 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
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. See http://wiki.freeswitch.org/wiki/Event_socket for more information. Mathieu Rene Avant-Garde Solutions Inc Office: + 1 (514) 664-1044 x100 Cell: +1 (514) 664-1044 x200 mrene@avgs.ca 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-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
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 mrene@avgs.ca 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.
See http://wiki.freeswitch.org/wiki/Event_socket for more information.
Mathieu Rene Avant-Garde Solutions Inc Office: + 1 (514) 664-1044 x100 Cell: +1 (514) 664-1044 x200 mrene@avgs.ca
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:htt... 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
Thanks Mathieu Ill give it a try Brian 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 mrene@avgs.ca 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. See http://wiki.freeswitch.org/wiki/Event_socket for more information. Mathieu Rene Avant-Garde Solutions Inc Office: + 1 (514) 664-1044 x100 Cell: +1 (514) 664-1044 x200 mrene@avgs.ca 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:htt... 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-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
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 mrene@avgs.ca 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. See http://wiki.freeswitch.org/wiki/Event_socket for more information. Mathieu Rene Avant-Garde Solutions Inc Office: + 1 (514) 664-1044 x100 Cell: +1 (514) 664-1044 x200 mrene@avgs.ca 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:htt... 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-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
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 mrene@avgs.ca 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 mrene@avgs.ca
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.
See http://wiki.freeswitch.org/wiki/Event_socket for more information.
Mathieu Rene Avant-Garde Solutions Inc Office: + 1 (514) 664-1044 x100 Cell: +1 (514) 664-1044 x200 mrene@avgs.ca
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:htt... 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:htt... 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
The bridging is done in the incomming dial plan <extension name="Inbound_3149876543"> <condition field='destination_number' expression='3149876543'> <action application="bridge" data="sofia/internal/3149876543@127.0.0.1:5060;transport=tcp"/> </condition> </extension> Brian From: mrene_lists@avgs.ca Date: Tue, 14 Dec 2010 15:20:12 -0500 To: freeswitch-users@lists.freeswitch.org Subject: Re: [Freeswitch-users] Custom Channel Variables via C# 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 mrene@avgs.ca 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 mrene@avgs.ca 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. See http://wiki.freeswitch.org/wiki/Event_socket for more information. Mathieu Rene Avant-Garde Solutions Inc Office: + 1 (514) 664-1044 x100 Cell: +1 (514) 664-1044 x200 mrene@avgs.ca 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:htt... 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:htt... 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-users UNSUBSCRIBE:http://lists.freeswitch.org/mailman/options/freeswitch-users http://www.freeswitch.org
Hi, You can use ESL managed, is the easy way. Diego http://voipensando.blogspot.com/ --- On Wed, 12/1/10, Mathieu Rene <mrene_lists@avgs.ca> wrote: From: Mathieu Rene <mrene_lists@avgs.ca> Subject: Re: [Freeswitch-users] Custom Channel Variables via C# To: "FreeSWITCH Users Help" <freeswitch-users@lists.freeswitch.org> Date: Wednesday, December 1, 2010, 4:53 PM Hi, You can't send XML dialplan actions on the socket and expect FreeSWITCH to understand it, you must follow the event socket protocol. See http://wiki.freeswitch.org/wiki/Event_socket for more information. Mathieu ReneAvant-Garde Solutions IncOffice: + 1 (514) 664-1044 x100Cell: +1 (514) 664-1044 x200mrene@avgs.ca 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 -----Inline Attachment Follows----- _______________________________________________ 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
participants (3)
-
Brian Campbell
-
Diego Toro
-
Mathieu Rene