首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >拨出和拨入呼叫的Twilio方向始终为"inbound“

问拨出和拨入呼叫的Twilio方向始终为"inbound“
EN

Stack Overflow用户
提问于 2017-08-12 03:03:59
回答 2查看 418关注 0票数 3

我想我可能不太理解Twilio调用的流程。我有两种情况-一种是从浏览器呼叫电话(呼出),另一种是从手机呼叫浏览器(客户端)(呼入)。

对于这两个呼叫,当请求到达我的twilio Voice URL时,我将Twilio发送的post数据记录在日志文件中。

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

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

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

关于这两个场景的更多详细信息。

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

在这种情况下,我希望“方向”数据显示为"outbound“或"outbound-dial”,但它显示为"inbound“。

(2)我从手机向浏览器客户端发出呼叫,使用twilio注册电话号码查找客户端信息。

我希望“方向”数据显示为"inbound",它确实是这样。

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

EN

回答 2

Stack Overflow用户

发布于 2021-03-23 03:22:35

对于任何找到这个的人,我找到了一个github issue,上面写着这是设计出来的。

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

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

如果这还不够,在以下每种情况下,出站呼叫的状态都是“已完成”:OUTBOUND ANSWERED - OUTBOUND OUR USER CANCELLED THE CALL - OUTBOUND CALL RECEIVER REJECTED THE CALL。

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

代码语言:javascript
复制
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'

但是,在dial中有一个名为action的选项,您可以在其中指定呼叫结束时的操作。

代码语言:javascript
复制
let dial = resp.dial({ 
  callerId: from,
  action: 'YOUR_API_URL' // replace with your endpoint URL. default call method is POST.
})

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

另请注意,Twilio将抛出一个错误,因此不要忘记处理那里对Twilio的响应,否则它将在调用结束时显示"application err occurred“。我只是简单地在动作(调用结束)端点的开始处挂起,似乎它做到了这一点。

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

代码语言:javascript
复制
// 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));
票数 0
EN

Stack Overflow用户

发布于 2021-05-02 19:16:45

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

通常,当您使用twiML客户端(JS,IOS,Android)进行呼叫时,语音钩子会接收参数,这些参数可以帮助您识别呼叫是入站还是出带。例如,名为To:""且值为空的参数表示对twiML应用程序的入站请求没有拨打应用程序中的任何号码,因此可以放心地说,您的应用程序实际上是在尝试进行出站呼叫。

此外,From和Caller参数可以以client:开头,这与上面的意思相同。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45642195

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档