Search code examples
javascriptnode.jsasteriskasteriskami

Originate a call with text to speech message


I use the Asterisk-Manager package for NodeJs

https://www.npmjs.com/package/asterisk-manager

and have a tape announcement as a text which must be translated via text to speech. When I try to call an outgoing phone number how can I setup the text to speech variable and the recipient? An example would be

ami.action({
    'action': 'originate',
    '??? phonenumber ???': '12345',
    '??? text to be spoken ???': 'Hello, this is a tape announcement'
  }, (err, res) => {
    if (err) {
        throw err;
    }

    console.log('everything was fine');
  });

Edit:

I know that FreePbx is used for administration. As far as I know there is a TTS module for the Asterisk engine.

I think I could go for this code

const { phoneNumber, announcement } = phoneInfo; // the required data

ami.action({
    channel: `SIP/${phoneNumber}`,
    application: 'SendText',
    data: announcement
}, (err, res) => {
    if (err) {
      throw err;
    }

    console.log(res);
});

and the engine would manage the data property


Solution

  • The Originate application itself will only send the called number to an application or extension. You should have an audio file created before calling the playback app. So you code will look like this:

    let filePath = await yourTtsService.generateAudioFile('Hello, this is a tape announcement')
    
    ami.action({
        'action': 'originate',
        'channel': 'SIP/123', // target number, depend on your trunk type
        'application': 'Playback',
        'data': filePath
    })
    

    To generate the audio file you can use the google api, see examples at https://cloud.google.com/text-to-speech/docs/reference/libraries