Node.js Twilio-未处理来电(快速启动)

Node.js Twilio-未处理来电(快速启动),node.js,twilio,twilio-api,Node.js,Twilio,Twilio Api,我已经注册开始使用Twilio,我正在尝试设置quickstart(),它几乎可以工作,但以下用户没有收到来电: 客户端代码(getTokenCapabilities之后在浏览器上使用): 用于语音呼叫的Twilio功能上的代码(始终打印控制台,否则从不调用条件: exports.handler = function(context, event, callback) { let twiml = new Twilio.twiml.VoiceResponse(); console.

我已经注册开始使用Twilio,我正在尝试设置quickstart(),它几乎可以工作,但以下用户没有收到来电:

客户端代码(getTokenCapabilities之后在浏览器上使用):

用于语音呼叫的Twilio功能上的代码(始终打印控制台,否则从不调用条件:

exports.handler = function(context, event, callback) {
    let twiml = new Twilio.twiml.VoiceResponse();
    console.log('entrou aqui');
    if(event.To) {
        console.log('entrou ali');
      // Wrap the phone number or client name in the appropriate TwiML verb
      // if is a valid phone number
      const attr = isAValidPhoneNumber(event.To) ? 'number' : 'client';

      const dial = twiml.dial({
        callerId: context.CALLER_ID,
      });
      dial[attr]({}, event.To);
    } else {
      twiml.say('Thanks for calling!');
    }
    console.log('callback');
     callback(null, twiml);
};

/**
* Checks if the given value is valid as phone number
* @param {Number|String} number
* @return {Boolean}
*/
function isAValidPhoneNumber(number) {
  return /^[\d\+\-\(\) ]+$/.test(number);
}
我已经将我的电话号码作为已验证的来电显示,从Twilio获得了一个号码,并使用模板Twilio Client Quickstart创建了函数

在Twilio Client Quickstart上,我已将TwiML SID粘贴为TwiML_APP_SID,并尝试使用我的电话号码和Twilio中的号码作为呼叫者ID

我还更改了TwiML配置上的语音URL,以及twilio配置中电话号码上的语音URL


有什么问题吗?当我在浏览器上打开时,可以拨打电话,但当我拨打twilio号码时,我在浏览器上没有收到任何电话。

为了接听电话,您需要在语音应答中的标签中包含您的令牌名称标识,下面是一个示例

exports.incomingVoiceResponse = function voiceResponse( to ) {
  // Create a TwiML voice response
  const twiml = new VoiceResponse();

    // Wrap the phone number or client name in the appropriate TwiML verb
    // if is a valid phone number
    const attr = isAValidPhoneNumber(to) ? 'client' : 'number';

    const dial = twiml.dial({
      callerId: to,
    });
    dial[attr]({}, 'jesus');
  console.log(twiml.toString())
  return twiml.toString();
};
看到我放的“jesus”客户端标签了吗?这是令牌生成器端:

exports.tokenGenerator = function tokenGenerator() {
  const identity = 'jesus';
  const capability = new ClientCapability({
    accountSid: config.accountSid,
    authToken: config.authToken,
  });

  capability.addScope(new ClientCapability.IncomingClientScope(identity));
  capability.addScope(new ClientCapability.OutgoingClientScope({
    applicationSid: config.twimlAppSid,
    clientName: identity,
  }));

  // Include identity and token in a JSON response
  return {
    identity: identity,
    token: capability.toJwt(),
  };
};
这对我来说是可行的,可以按原样使用节点快速启动并更改这两个函数

但是,不要忘记在voiceResponse函数中将“number”改为“client”,因为这是一个传入呼叫,而不是传出呼叫

  const attr = isAValidPhoneNumber(to) ? 'client' : 'number';
而不是

  const attr = isAValidPhoneNumber(to) ? 'number' : 'client';

由于Twilio客户端快速启动节点的默认名称生成器会生成一个随机名称,因此在接收来电时未正确设置该名称。

您是否使用ngrok使Twilio的Webhook可以使用您的本地应用程序?您的程序中是否有错误?@philnash不确定如果使用Twilio客户端q,为什么要使用ngrokuickstart。我的Webhook(用于令牌和语音)类似于rubcub-123.twil.io/xxxx。我已经在电话号码和TWiML应用程序上设置了此url。我的浏览器可以检索令牌功能并创建TwilioClient,但从未调用incoming()。当我呼叫号码时,它会说“这是一个试用帐户,请按任意键运行代码”它进入一个循环…当我转到函数并检查语音通话功能时,我可以看到代码已到达,但我的浏览器客户端从未收到任何内容,@philnash和always event.to是一个电话号码。为什么我的电话没有重定向到浏览器客户端?
  const attr = isAValidPhoneNumber(to) ? 'number' : 'client';