2017-09-26 4 views
0

私は地方の中小企業向けにIVRソリューションを開発していますが、Nodeがメニューをどのように扱うかについて頭を悩ましています。私は私の顧客ごとに別々のノードサーバーを作ることができますが、彼らの番号が呼び出されたときに、各顧客のIVRセットアップをMongoデータベースまたはファイルから取得する単一のサーバーを持っていたいと思います。私はJSONのメニュー構造を保存する方法を考えていますが、そのJSONを<gather>入力への応答に変えることはできません。私は(アマゾンS3上の.jsonファイルとして多分か)DBにこのような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 
     } 
    ] 
    } 
} 

答えて

0

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

関連する問題