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

传出和传入呼叫的Twilio方向始终为“入站”

帅锦
2023-03-14

我相信我可能不太了解Twilio通话的流程。我有两种情况——一种是从浏览器打电话给手机(传出),另一种是从手机打电话给浏览器(客户端)(传入)。

对于这两个调用,当请求到达我的twilio语音URL时,我将twilio发送的post数据记录在日志文件中。

在这两种情况下,“direction”post变量都表示“inbound”。我希望其中一个说“入站”,另一个说“出站”,或“出站拨号”(根据文档)。

然而他们都说“入站”。所以我可能误解了Twilio是如何设置这个值的。有人能解释一下我做错了什么吗?

我希望使用这个“方向”变量在我的应用程序中确定一个电话是从客户端打到手机,还是从手机打到客户端。i、 e.当一个请求到达我的twilio语音url时,我的代码可以确定它是对浏览器的传入呼叫,还是对电话或其他客户端的传出呼叫。

有关这两种情况的更多详细信息。

(1)我在网页上有一个简单的Twilio客户端。当我输入电话号码并单击连接时,它会调用Twilio。Device.connectjavascript函数,它将连接传递给Twilio上的Twilio Voice Url。

在这种情况下,我希望“方向”数据显示“出站”或“出站拨号”,但它显示“入站”。

(2)我从手机打电话到浏览器客户端,使用twilio注册的电话号码查找客户端信息。

我希望“方向”数据会显示“入站”,确实如此。

任何帮助都将不胜感激。谢谢

共有2个答案

颛孙子民
2023-03-14

作为@Luna答案的补充,我想补充几点,这可能有助于开发基于twiML的应用程序。

通常,当您使用twiML客户端(JS、IOS、Android)拨打电话时,语音挂钩会接收一些参数,这些参数可以帮助您识别呼叫是入站还是外带。例如,名为To:"的参数为空值,这意味着对您的twiML应用程序的入站请求没有拨打您应用程序中的任何号码,因此可以肯定地说您的应用程序实际上正在尝试拨打出站电话。

另外,From调用者参数可以以客户机:开头,这同样意味着与上面相同的事情。

龙俊德
2023-03-14

对于任何发现这一点的人,我发现了一个github问题,它说这是设计的。

当从Twilio客户端(例如您的iOS移动客户端)拨打电话时,您实际上是在向TwiML应用程序发出“入站”呼叫请求。为了区分这两个用例(Twilio号码入站和移动客户端发起的呼叫),我的建议是在应用服务器中使用不同的endpoint

它还建议我们创建两个单独的endpoint来处理输入/输出场景。虽然我认为这是非常糟糕的设计,但除了变通方法,我们对此无能为力...

似乎这还不够,在以下每种情况下,出站呼叫的状态都是“已完成”:出站应答-出站用户取消呼叫-出站呼叫接收器拒绝呼叫

这是出站呼叫状态回调的示例响应(在上述每个场景中相同):

ApiVersion: '2010-04-01',
Called: '',
CallStatus: 'completed',
Duration: '1',
From: 'client:Anonymous',
CallDuration: '4',
Direction: 'inbound',
Timestamp: 'Mon, 22 Mar 2021 18:03:11 +0000',
AccountSid: 'XXXXXXXX',
CallbackSource: 'call-progress-events',
ApplicationSid: 'XXXXXXXXX',
Caller: 'client:Anonymous',
SequenceNumber: '0',
To: '',
CallSid: 'XXXXXXXXXXXX'

然而,在拨号通话操作中有一个选项,您可以指定通话结束时要做什么。

let dial = resp.dial({ 
  callerId: from,
  action: 'YOUR_API_URL' // replace with your endpoint URL. default call method is POST.
})

在那里我们可以看到diallstatus,它可以完成/忙/失败等。

最后一点需要注意的是,outbounds的操作endpoint在响应中不像入站调用那样有太多数据,因此可以使用DialCallSid参数检索信息,并获取调用资源

// Download the helper library from https://www.twilio.com/docs/node/install
// Your Account Sid and Auth Token from twilio.com/console
// and set the environment variables. See http://twil.io/secure
const accountSid = process.env.TWILIO_ACCOUNT_SID;
const authToken = process.env.TWILIO_AUTH_TOKEN;
const client = require('twilio')(accountSid, authToken);

client.calls('CAXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX')
      .fetch()
      .then(call => console.log(call.to));
 类似资料:
  • 我使用Twilio iOS SDK作为我的iOS Voip应用程序。 不过,我正试图从我的Voip应用程序中调用我在某些点上堆叠的任何号码。 我已经确认了Http请求被发送到我的应用程序请求url,我在url上设置了当我从我的Voip应用程序发出呼出时和当我的Voip应用程序收到呼入时。 简而言之,下面是我认为当我从Voip应用程序中调用时是真实的流程 键入号码和呼叫(iOS Voip应用程序)-

  • 我正试着从我的twilio试用帐户拨出电话。我指的是这个链接。基于这个链接,我创建了一个名为hello-client-twiml.php的页面,代码如下: 有人能帮我解决这个问题吗?提前谢了。

  • 能否有人,请帮助我或指出我在正确的方向,如何触发一个来电在应用程序,当一个VoIP通知收到。 下面是我在viewcontroller.swift文件中的代码

  • 不幸的是,Twilio文档不够清晰,我无法回答我的问题,所以我在这里。 当我的应用程序在前台/后台运行时,当用户调用时,我能够接收Twilio传入连接,并且我能够正确地处理这一点(在应用程序中显示弹出窗口,或者如果应用程序在后台,则发送本地通知)。 有没有什么办法在app根本不运行的情况下实现Twilio来电呢?我想知道这种情况是否可能: 用户A:关闭已实现Twilio调用的应用程序 用户B:通过

  • 我正在做一个POC,并试图从Salesforce通过Twilio拨打一个出站电话。我已经在Twilio有个账户了。 我已配置TWIML应用程序,并用SFDC URL指向请求的URL:https://xxxxxx.cs8.force.com/Dial. 我可以从我的SFDC软电话(笔记本电脑麦克风)连接到客户(到号码),但我想通过我的from(代理物理电话)连接到电话#。 尽管我已经在