Javascript 拨出和拨入电话的方向始终为;“入境”;

Javascript 拨出和拨入电话的方向始终为;“入境”;,javascript,twilio,Javascript,Twilio,我相信我可能不太了解Twilio调用的流程。我有两种情况-一种是我从浏览器打电话到手机(传出),另一种是我从手机打电话到浏览器(客户端)(传入) 对于这两个调用,当请求到达我的twilio语音URL时,我将twilio发送的post数据记录在日志文件中 在这两种情况下,“direction”post变量都表示“inbound”。我希望一个说“入站”,另一个说“出站”,或“出站拨号”(根据文档) 但他们都说“入境”。所以我可能误解了Twilio是如何设置这个值的。有人能解释一下我做错了什么吗 我希

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

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

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

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

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

关于这两个场景的更多细节

(一) 我有一个简单的Twilio客户端,它存在于网页上。当我输入一个电话号码并单击connect时,它会调用Twilio.Device.connectJavaScript函数,该函数将连接传递到Twilio上我的Twilio语音Url

在本例中,我希望“方向”数据显示“出站”或“出站拨号”,但它显示“入站”

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

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


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

对于任何发现这个的人,我都找到了一份报告,上面说这是精心设计的

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

它还建议我们创建两个单独的端点来处理输入/输出场景。虽然我认为这是一个非常糟糕的设计,但除了解决办法,我们无能为力

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

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

但是,在拨号呼叫中有一个选项,您可以指定呼叫结束时要执行的操作

let dial = resp.dial({ 
  callerId: from,
  action: 'YOUR_API_URL' // replace with your endpoint URL. default call method is POST.
})
在那里我们可以看到
diallstatus
,它可以完成/忙/失败等

还要注意的是,Twilio将抛出一个错误,因此不要忘记在那里处理对Twilio的响应,否则在调用结束时会显示“应用程序出错”。我只是在操作的开始(调用结束)端点挂断了电话,似乎它成功了

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


作为对@Luna答案的补充,我想添加一些注释,以帮助任何开发基于twiML的应用程序的人

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


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

这不是一个真正的编程问题,因此最好将其指向一些示例SID,它们将能够进行解释。您找到解决方案了吗?我正在设定一个完全相同的场景,我看到的和你做的一样。
let dial = resp.dial({ 
  callerId: from,
  action: 'YOUR_API_URL' // replace with your endpoint URL. default call method is POST.
})
// 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));