如何更改正在进行的Twilio&的NodeJS

时间:2017-03-31 22:08:21

标签: node.js twilio

以下是我想要完成的步骤:

  1. 致电,并最终发短信,我的Twilio号码
  2. 收集一个电话号码。
  3. 创建当前通话并将其移至电话会议中。
  4. 拨打收集的号码。
  5. 将被叫号码添加到会议中。
  6. 目前我可以拨打我的Twilio号码,收集一个号码进行呼叫,创建一个电话会议 - 但我迷路的地方是拨打收集的号码并将其添加到我创建的会议中。

    
    
    app.post('/call', function(req, res) {
    
      var twiml = new twilio.TwimlResponse();
      res.type('text/xml');
    
      if (req.body.From === '+15555555555) {
        twiml.gather({
          action: '/call/initiate',
          finishOnKey: '#',
          numDigits: '10',
          timeout: '5'
        }, function() {
          this.say('Enter your number', {
            voice: 'man'
          });
        });
    
      }
      else {
    
        twiml.redirect(VOICEMAIL_TWIMLET_OF_CHOICE);
    
      }
    
      res.send(twiml.toString());
    
    });
    
    // Initiate a call from text
    app.post('/call/initiate', function(req, res) {
      // Create new Twiml response
      var twiml = new twilio.TwimlResponse();
      // Phone number to call and add to conference
      var to = req.body.Digits;
    
      // Create random conference name
      var conferenceName = Math.floor(Math.random() * 10000).toString();
    
      // Add myself to the conference call
      twiml.dial((node) => {
        node.conference(conferenceName, {
          startConferenceOnEnter: true,
          record: true,
          beep: 'true'
        });
      });
    
      // Redirect twiml to a new url
      // Send conferenceName & Number
      twiml.redirect('/join_conference?id=' + conferenceName + '&number=' + to);
    
      res.set('Content-Type', 'text/xml');
      res.send(twiml.toString());
    });
    
    // Call and add caller to conference
    app.post('/join_conference', (req, res) => {
    
      var conferenceName = req.query.id;
      var to = '+1' + req.query.number;
    
      // Create new Twiml response
      var twiml = new twilio.TwimlResponse();
    
      // Call and add user to conference call
      twiml.dial(to, (node) => {
        node.conference(conferenceName, {
          startConferenceOnEnter: true,
        });
      });
    
      console.log('call called');
    
      res.set('Content-Type', 'text/xml');
      res.send(twiml.toString());
    });
    
    
    

    输入数字并点击finishOnKey后,我会自动听到等待的音乐。但是,在那时 - 应用程序只是挂起并且没有拨打电话。

1 个答案:

答案 0 :(得分:0)

Twilio开发者传道者在这里。

问题在于,返回到/call/initiate端点的TwiML仅用于通话的第一段,您无法单独使用TwiML创建另一个呼叫段。

但是,您可以在同一请求中使用Twilio REST APIgenerate the second leg of the call。这是您可以使用的更新端点:

app.post('/call/initiate', function(req, res) {
  // Create new Twiml response
  var twiml = new twilio.TwimlResponse();
  // Phone number to call and add to conference
  var to = req.body.Digits;

  // Create random conference name
  var conferenceName = Math.floor(Math.random() * 10000).toString();

  // Add myself to the conference call
  twiml.dial((node) => {
    node.conference(conferenceName, {
      startConferenceOnEnter: true,
      record: true,
      beep: 'true'
    });
  });

  // Make call to the other party
  // Send conferenceName as part of the URL
  var client = new twilio(YOUR_ACCOUNT_SID, YOUR_AUTH_TOKEN);
  client.calls.create({
    from: YOUR_TWILIO_NUMBER,
    to: '+1' + to,
    url: 'https://example.com/join_conference?id=' + conferenceName
  });

  res.set('Content-Type', 'text/xml');
  res.send(twiml.toString());
});

然后你的' / join_conference'端点只需拨打呼叫者进入会议室,如下所示:

app.post('/join_conference', (req, res) => {

  var conferenceName = req.query.id;

  // Create new Twiml response
  var twiml = new twilio.TwimlResponse();

  // Call and add user to conference call
  twiml.dial((node) => {
    node.conference(conferenceName, {
      startConferenceOnEnter: true,
    });
  });

  console.log('call called');

  res.set('Content-Type', 'text/xml');
  res.send(twiml.toString());
});

让我知道这是否有帮助。

编辑:评论说它仍然没有打电话给另一方。让我们更仔细地看一下调用另一方的命令。对create的调用将返回一个Promise,因此我们可以看到发生了什么以及它是成功还是失败(以及为什么)。

  var client = new twilio(YOUR_ACCOUNT_SID, YOUR_AUTH_TOKEN);
  client.calls.create({
    from: YOUR_TWILIO_NUMBER,
    to: '+1' + to,
    url: 'http://example.com/join_conference?id=' + conferenceName
  }).then(function(call) {
    console.log(call.sid);
  }).catch(function(err) {
    console.error("Something went wrong creating the call.");
    console.error(err);
  });

尝试更新代码,看看会发生什么。如果出现错误,我相信它会帮助您解决此问题。