Show Posts

This section allows you to view all posts made by this member. Note that you can only see posts made in areas you currently have access to.

Topics - jamie

Pages: [1] 2
Yate users hangout place / MRCP Module
« on: November 23, 2019, 12:31:50 PM »

Does anyone know if this module is implemented?

I've seen POST on the mailing list archive that mentioned that it wasn't finished.

If anyone has any detail it would be greatly received!

Thank you


Is there any reason why audio format when using, for example:


could vary from slin little endian to big endian ?

My code:

Code: [Select]
    $m = new Yate("chan.masquerade");

    $m->params["message"] = "call.execute";
    $m->params["id"] = $channel_id;
    $m->params["callto"] = 'conf/' . $stream_id;
    $m->params["notify"] = $channel_id;
    $m->params["lonely"] = true;
    $m->params["maxusers"] = 1;
    $m->params["smart"] = true;

    $m->params["utility"] = false;

    $m->params["record"] = 'external/record//var/digit/ivr/src/yate/scripts/stream.php';

    // set this so that script can play warnings in conference
    $m->params["recordwarn"] = "-";
    $m->params["speakers"] = true;

    $m->params["interval"] = 3000;
    $m->params["waitlock"] = -200;

Always within the same call, but the above conference could be destroyed and restarted.

Thank you,


I think there might be a mistake on one of the pages of the online documents.

It's on this page:

Towards the bottom at the section "Keyword: %%>connect"

It says:

<role> - role of this connection: global, channel, play, record, playrec

but if I try setting the role to anything other than 'global' or 'channel' it throws an error.

EG: "Unknown role 'record' received"

Here's an example of the command string i've been using :


and my extmodule.conf file uses:

[listener DigitAudioStream]

I've also checked the source of extmodule.cpp   ( )

And it to seems to indicate that only 'global' and 'channel' settings are acceptable as a role.

Please could you let me know what I should be using instead ?

I'm looking to gain access to the audio directly, as per :

3 (optional) - Transports audio data from the engine to the application
4 (optional) - Transports audio data from the application to the engine

I was assuming that upon successful connection i'd be able to start reading the audio-stream from the socket.

Thank you and much appreciated

Copied from page:
Keyword: %%>connect
Direction: Application to engine
The "connect" keyword is used only by external modules that attach to the socket interface. As the conection is initiated from the external module the engine must be informed on the role of the connection.
This must be the first request sent over a newly established socket connection. The role and direction of the connection is established and then this keyword cannot be used again on the same connection.
There is no answer to this request - if it fails the engine will slam the connection shut.
Connections with a role of play, record or playrec are data connections and must be attached to a valid control channel. Any existing data endpoint with the same type and direction is closed.
<role> - role of this connection: global, channel, play, record, playrec
<id> - channel id to connect this socket to
<type> - type of data channel, assuming audio if missing

Yate users hangout place / How to Install lazyrec.cpp module / patch
« on: November 04, 2018, 09:50:01 PM »

Please could I ask for a little help ?

Is it possible or feasible to install lazyrec.cpp ?

I found it here :

but unfortunately I've not be able to find any instructions.

If possible, please could you point me in the right direction?

Thank you!


OS Dist: debian


Please could you help me ?

I need to be able to remove a caller from a conference and not hang-up.

I've been using the following to create a conference (PHP):

Code: [Select]
$m = new Yate("chan.masquerade");
 $m->id = "";
 $m->params["message"] = "call.execute";
 $m->params["id"] = $partycallid;
 $m->params["callto"] = "conf/cs-$conference_id";
 $m->params["notify"] = "conf-monitor/cs-$conference_id";
 $m->params["billing"] = "true";
 $m->params["lonely"] = "true";
 $m->params["maxusers"] = $maxusers;
 $m->params["smart"] = "t";

 //$m->params["record"] = "external/nodata/conference.php";
 // set this so that script can play warnings in conference
 //$m->params["recordwarn"] = "-";
 $m->params["speakers"] = $speakers;
 $m->params["interval"] = $interval_notifications;
 $m->params["waitlock"] = -200;  // ( ** Not sure what this does ** )


This work fine.

However, after a period of time, I need to be able to remove the caller from the conference (or destroy it) but without dropping the call.

I've checked for capability in the source ( conference.cpp ) and see that it seems to have class methods that might do it, but I can't see how I would do it.

Your help would be very much appreciated.

Thank you, Regards


Yate users hangout place / Detecting Speech - Lex VoiceBot
« on: September 14, 2018, 06:32:18 PM »

Please could I ask for some help ?

Does YATE currently have a method of detecting if a caller is talking ?

I was wondering if it would be practical to use the conference 'speaking' notify event? However this would me invoking a conference each time we want to listen for a caller 'speaking' or not.

If it doesn't, any thoughts as to where I might begin would be much appreciated.

Thank you!




Please could I ask for a little help?

My Objective:

To route an incoming call using a database with a fork to two or more different registered 'lines' (accounts) and/or Registered SIP users
Everything is done from a database utilising register.conf

I've created a PostgreSQL prepared statement to return a single row with any columns we require. Eg location, line, callername etc etc

Routing to say a registered SIP user or an account (line) individually works fine, as follows:

forking the incoming call to two registered sip users, i return:

Code: [Select]
location = fork sip/sip:testuser1@ sip/sip:testuser2@
line = <NULL>

Or ...

two or more endpoints on the same line, we return fields as:

Code: [Select]
location = fork sip/01234567890 sip/01234567891
line = my_gateway

Both of the above methods work fine,

but I'm a bit flummoxed how to do the same with a mixture of registered users and lines.

I had hoped something like this would work, but alas it didn't :

Code: [Select]
location = fork sip/sip:test1@ sip/01234567891;line=my_gateway
line = <NULL>

Is what I'm trying to achieve possible from register.conf ?

If it is, please could you point me in the right direction ?

Thank you!

Yate users hangout place / How to Generate a series of DTMF tones
« on: March 06, 2016, 08:51:11 PM »

Please could I ask for some help ?

I would like to generate a series of DTMF tones ?

I can generate a single tone with the following PHP:

Code: [Select]

        $m = new Yate("chan.dtmf");
        $m->params["targetid"] = $this->channel_id;
        $m->params["text"] = '1234';

However if I try a string, for example '1234', it appears to play them, but very quickly, almost on top of each-other.

I've been trying to insert a pause using the usual suspects like 'p', ',' etc, but no luck, it doesn't work.

Is the method I've described above possible or should I be looking at another solution ?

Thank you!

( Installation is Windows  )

Yate users hangout place / Chan.control example paramter values / limits
« on: February 24, 2015, 04:21:16 PM »

Hi guys!

Please could you point me in the right direction where I could find the acceptable values for the chan.control message ?

Looking at the docs here ( ) it shows me the parameter names but unfortunately not any example values / limits

In particular I'm interested in 'out_volume' 

An example or somewhere to search would be great .. ( I even tried looking through the GIT repo code to see if i could find anything ! )

Thank you!



Please could someone help me ?

I'm not convinced this make sense to have or should be possible , but ....

a) Is it ok to install a handler from within a global script ?

For example:

Yate::Install("chan.notify",100,"targetid",$chan_id );

b) If yes, how would you Uninstall it without perhaps uninstalling all e.g chan.notify handlers ?

For Example:


Would this not uninstall everything ? How does it know which filter ?

Looking at libyate.php, it doesn't look as though it's implemented:

Code: [Select]
     * Uninstall a Yate message handler
     * @param $name Name of the messages to stop handling
    static function Uninstall($name)

or directly from an Ext module...

Keyword: %%>uninstall
Direction: Application to engine

Thank you!

Me again ...

Using PHP, I have a simple script to ... 1) answer the call, 2) send call.answered and 3) play a prompt

Yate::Install( "call.route" );
Yate::Install( "call.answered"   );

$ev->retval = "wave/play/C:/Program Files/Yate/share/sounds/test.wav";
$ev->params['targetid'] = $ev->params["id"];
$ev->handled = true;

$m = new Yate("call.answered");
$m->params["id"] = $ev->params["id"];
$m->params["targetid"] = $ev->params["id"];
But for some reason i can't understand why I never see the  incoming - call.answered event.

However if i do the following in JavaScript routing, the incoming - call.answered event arrives fine.
var m = new Message('call.answered');
m['id'] = msg['id'];
m['targetid'] = msg['id'];

any help and dummies guide would be much appreciated,
Thank you

Features requests / RESOLVED: EventLog files on Windows
« on: January 19, 2015, 06:48:46 AM »

Please could Event Log files be added to the Windows installation ?

IE what's found in here: eventlogs.conf

Thank you

This was originaly posted here:



Please can you help ?

I'm having some problems getting this to work.

I've edited eventlogs.conf as below, but i just can't get a file.
I've given the folder write permission, but still no file!

Is there anything i'm missing ?

I have noticed there's no .yate module for this in my /modules/ installation foler.

Thank you!

Code: [Select]
; This section controls the global behavior of the events log module

; logs_dir: string: Base directory for event log files, must be set to enable the module
; The last component of the path will be created if missing
; Example: logs_dir=/var/log/yate-events

; public_read: bool: Make the log files publically readable
; This setting does not apply to Windows

; This section maps event sources to file names
; Each line holds a regexp and a filename that can include replacements
; First line that matches writes to file name at right of = and exits
; You must take care to create valid file names

; If this section is missing or empty a default line is added:
; ^[A-Za-z0-9_-]\+ = \0.log


Please could I ask for for help ?

As a simple training exercise for myself, I'm trying to achieve the following:

1. Make a Call
2. Wait for answer
3. Play 2 or more prompts, one after the other.
4. Disconnect

This is in a global php script on a Windows machine.

I've been loosely following an example suggested by Monica Tepelus here:

I understand the theory ok, but I'm having some difficulties implementing it.

The first step suggests to call execute to a dumb channel, then chan.masquerade a real destination on behalf of the dumb channel.

So, this is what I started with:

Code: [Select]

       $m = new Yate("call.execute");

       $m = new Yate("chan.masquerade");
       $m->SetParam("id", $id_from_above_call_execute   );
       $m->SetParam( "target", 'test2' );
       $m->SetParam( "caller",  'test5');

-----  listen for call.answer -----

       $m = new Yate("chan.masquerade");
       $m->SetParam("id", $id_from_above_call_execute );
       $m->SetParam("source", 'wave/play/C:\Program Files\Yate\share\sounds/' );

      ( test2 and test5 are two registered users )

but on running this, unfortunately I can't get past:

<dumb:WARN> Outgoing call with no target!

which appears to be generated from the call.execute to the dumb channel.

From getting 'call.answered' I was going to use the following

Multiple prompts using the notify and listening for 'eof'

Some help on getting me going on this would really be appreciated,

Thank you!

Yate users hangout place / CDR finalize without combiner for 'id'
« on: December 13, 2014, 12:47:15 PM »


Please could someone help me? I'm stuck !

I'm getting the following message "CDR finalize without combiner for '1418495556-2'" when hanging up

I'm using windows, running the following in a global external script.
An event loop surrounds this simply reporting back messages to me and $ev->Acknowledge()  , little else.

      Yate::Debug("Initiating Dialout");
      $m = new Yate("call.execute");
      $m->SetParam("target", 'test2');


      ( test2 and test5 are two registered users )

Everything works fine, the call arrives and i can answer it, but as soon as i hangup, I get the message  'CDR finalize without combiner for '1418495556-2'
Even the CDR is logged correctly in the database, ie we see initiate, update and finalize operations.

Am I missing something silly ?

Thank you!

Pages: [1] 2