当前位置: 首页 > 知识库问答 >
问题:

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

乐正德华
2023-03-14

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

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

  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 Client Quickstart创建功能。

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

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

有没有关于遗漏什么或错在哪里的想法?当我在浏览器上打开http://127.0.0.1:8080/,可以打电话,但当我拨打twilio号码时,我在浏览器上没有接到任何电话。

共有1个答案

李招
2023-03-14

为了接听电话,您需要将令牌名称标识放在VoiceACK中的标签中,这是一个示例。

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

看到我贴的“耶稣”客户标签了吗?以下是令牌生成器端:

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

这对我来说是可行的,可以按原样使用节点快速启动并更改这两个函数。

但是,不要伪造将函数voiceACK中的从“数字”更改为“客户端”,因为它是进线量而不是传出量。

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

而不是

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

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

 类似资料:
  • 想知道是否有办法在Twilio中实现这个用例(使用taskrouter或其他机制), 情况是这样的: 消费者拨打Twilio号码 Call flow调用返回3个代理电话号码的API 消费者需要根据以下逻辑连接到三个代理中的一个, 开始拨打代理电话1 响铃后/无应答秒 已拨打代理电话2 但联系代理电话1的尝试仍在继续 同样,也会拨打代理电话3 直到1号、2号或3号特工接电话为止 我知道可以同时拨打代

  • 如何强制GLFW管理每秒60次以上的键盘回调?也就是说,我希望GLFW的键盘处理速度取决于实际的FPS。这可能吗?

  • Swoole的绝大部分功能只能用于cli命令行环境,请首先准备好Linux Shell环境。可使用vim、emacs、phpstorm或其他编辑器编写代码,并在命令行中通过下列指令执行程序。 php /path/to/your_file.php 成功执行Swoole服务器程序后,如果你的代码中没有任何echo语句,屏幕不会有任何输出,但实际上底层已经在监听网络端口,等待客户端发起连接。可使用相应的

  • Dubbo 采用全 Spring 配置方式,透明化接入应用,对应用没有任何 API 侵入,只需用 Spring 加载 Dubbo 的配置即可,Dubbo 基于 Spring 的 Schema 扩展 进行加载。 如果不想使用 Spring 配置,可以通过 API 的方式 进行调用。 服务提供者 完整安装步骤,请参见:示例提供者安装 定义服务接口 DemoService.java 1: package

  • 当Twilio号码收到语音来电时,我可以使用什么TwiML使电话无限期地继续响? 在某些情况下,我想假装电话正在响,但周围没有人接听,也没有配置语音信箱。我认为拒绝动词会有所帮助。它似乎只支持忙信号或“号码断开”消息。

  • 我们在沙箱环境中使用Twilio WhatsApp API。要开始在生产中为WhatsApp使用Twilio API,需要为WhatsApp启用Twilio numbers。 在此URL上,Twilio提供表单以请求https://www.Twilio.com/whatsapp/request-access 但是没有指定完成此请求的固定天数。