node.js - Twilio - 未处理来电(快速入门)

标签 node.js twilio twilio-api

我已注册开始使用 Twilio,并且正在尝试设置快速启动 ( https://www.twilio.com/docs/voice/client/javascript/quickstart ),它几乎可以正常工作,但未收到来电:

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

  Twilio.Device.incoming(function (conn) {
    log('Incoming connection from ' + conn.parameters.From);
    var archEnemyPhoneNumber = '+12093373517';

    if (conn.parameters.From === archEnemyPhoneNumber) {
      conn.reject();
      log('It\'s your nemesis. Rejected call.');
    } else {
      // accept the incoming connection and start two-way audio
      conn.accept();
    }
  });

用于语音调用的 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 客户端快速入门创建函数。

在 Twilio 客户端快速入门中,我已将 TwiML SID 粘贴为 TWIML_APP_SID,并尝试使用我的电话号码和 Twilio 中的号码作为 CALLER_ID。

此外,我还更改了 TwiML 配置上的 VOICE URL,并更改了 twilio 配置中电话号码上的 VOICE URL。

对于缺少什么或有什么问题有什么想法吗?当我在浏览器上打开时 http://127.0.0.1:8080/ ,可以调用电话,但当我调用 twilio 号码时,我在浏览器上没有收到任何电话。

最佳答案

为了接听电话,您需要在 VoiceResponse 的标签中包含您的 token 名称身份,这是一个示例。

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

看到我放置的“耶稣”客户标签了吗?这是 token 生成器端:

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

这对我来说很有效,按原样使用 Node 快速入门并更改这两个功能。

但是,不要忘记将函数 voiceResponse 中的“号码”更改为“客户端”,因为这是来电而不是去电。

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

而不是

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

由于来自 Twilio 的 client-quickstart-node 的默认 nameGenerator 生成随机名称,因此在接收来电时未正确设置。

关于node.js - Twilio - 未处理来电(快速入门),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49932066/

相关文章:

webrtc - Twilio Video API 中房间的参与者人数有限制吗?

node.js - Node.JS 中的 switch 与 if-else 分支控制结构

带有测试凭证的 Twilio 消息服务

ios - Replaykit 和 Twilio

Twilio 加入 Google Hangouts 电话 session

ios - swift - Twilio 视频聊天 - 卡住时发出警报

node.js - Heroku 拒绝了 Parse Server 应用程序构建

node.js - 语义版本控制和持续部署

c++ - 使 v8 对象属性和方法对 JS 可见

java - 如何使用 Twilio Java SDK 发送批量短信?