【问题标题】:Originate a call with text to speech message使用文字转语音消息发起呼叫
【发布时间】:2019-02-21 14:27:06
【问题描述】:

我使用 NodeJs 的 Asterisk-Manager 包

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

并有一个磁带公告作为文本,必须通过文本翻译成语音。当我尝试拨打拨出电话号码时,如何设置文本到语音变量和收件人? 一个例子是

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');
  });

编辑:

我知道 FreePbx 用于管理。据我所知,Asterisk 引擎有一个 TTS 模块。

我想我可以选择这段代码

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);
});

引擎会管理数据属性

【问题讨论】:

  • 看起来星号管理器“只是”Asterisk 11 Manager API 的包装,所以你需要从那里找到一种方法并使用它。我想说你需要找到一种方法来触发Asterisk Application Playback 并选择你预先录制的演讲,但我没有时间深入研究细节。

标签: javascript node.js asterisk asteriskami


【解决方案1】:

Originate 应用程序本身只会将被叫号码发送到应用程序或分机。您应该在调用播放应用程序之前创建一个音频文件。所以你的代码看起来像这样:

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
})

要生成音频文件,您可以使用 google api,请参阅https://cloud.google.com/text-to-speech/docs/reference/libraries 中的示例

【讨论】:

  • 所以没有 TTS 解决方案?在管理 Asterisk 引擎时,我使用 FreePbx 管理面板。我希望有一个 Asterisk TTS 模块
  • 有 Festival 应用程序,但它也依赖于外部软件。 voip-info.org/asterisk-cmd-festival
  • 但一般情况下最好在通话前创建音频文件,这样被叫号码就不必等待音频生成了。
  • 我更新了我的问题。我想我必须使用 TTS 而不是生成文件
最近更新 更多