如何'运行'保存在JSON中的IVR?

如何'运行'保存在JSON中的IVR?

问题描述:

我正在为本地区的小型企业开发IVR解决方案,但我在围绕Node如何处理菜单时遇到了麻烦。我可能为我的每个客户制造一个单独的节点服务器,但我希望有一台服务器,当他们的号码被调用时,从Mongo数据库或文件中提取每个客户的IVR设置。我有一个关于如何在JSON中保存菜单结构的想法,但是在将该JSON转换为对<gather>输入的响应时,我迷失了方向。我想我可以在数据库中使用JSON结构是这样的(也许是在Amazon S3上一个以.json文件):如何'运行'保存在JSON中的IVR?

{ 
    "menu": { 
    "id": 1, 
    "name": "Main", 
    "script": "Thank you for calling Local Company. To speak to sales press 1, ...", 
    "options": [ 
     { 
     "name": "", 
     "action": "", 
     "value": "", 
     "next": "" 
     }, 
     { 
     "name": "Sales", 
     "action": "dial", 
     "value": 12345678901, 
     "next": "" 
     }, 
     { 
     "name": "Support", 
     "action": "dial", 
     "value": 12345678902, 
     "next": "" 
     }, 
     { 
     "name": "Directions", 
     "action": "say", 
     "value": "Our offices are located at...", 
     "next": 1 
     }, 
     { 
     "name": "Mailbox", 
     "action": "mailbox", 
     "value": "main", 
     "next": 1 
     } 
    ] 
    } 
} 

Twilio开发者传道这里。

如果你能根据用户拨打该号码返回JSON,那么你可以做这样的事情:

const Twilio = require('twilio'); 

app.post('/voice', (req, res) => { 
    const dialledNumber = req.body.To; 
    getIVRObjectFromPhoneNumber(dialledNumber, (IVRObject) => { 
    const twiml = Twilio.twiml.VoiceResponse(); 
    if (typeof req.body.Digits !== 'undefined') { 
     // A user has pressed a digit, do the next thing! 
     const action = IVRObject.menu.options[req.body.Digits] 
     twiml[action.action](action.value); 
    } else { 
     // No digits yet, return the <Gather> 
     const gather = twiml.gather({ 
     numDigits: 1 
     }); 
     gather.say(IVRObject.script); 
    } 
    res.send(twiml.toString()); 
    }); 
}); 

这并不完全使用所有的对象,我不知道next的值是什么意思,但希望这是一个开始。 getIVRObjectFromPhoneNumber方法是我编写的异步方法,它返回从上面的示例JSON解析的JavaScript对象。

让我知道这是否有帮助。

+0

非常感谢您的帮助!下一个参数是接下来要执行的动作的ID。所以信息选项可以返回到菜单或做类似的事情。另外,我不知道你可以做twiml [action.action](action.value)。我认为我将不得不对每种命令类型做一个switch语句。 –

+0

由于到目前为止您选择的动作名称和值,您可以执行'twiml [action.action](action.value)'(即动作名称是您使用的TwiML动词的名称,但是它们的小写形式也是'twiml'对象上方法的名称)。它可能不适合所有的事情,我还没有想过它! – philnash