我正在设置一个非常简单的电话会议系统,用户在其中输入一个 PIN 并连接到与之相关的会议。我也在设置它,以便他们在进入房间之前记录他们的名字。
我的计划是获取录制 URL,然后获取参与者列表并对每个调用者进行 REST API 调用,修改他们对说“现在进入”的调用,然后播放录制 URL。我想在那之后我也必须把他们送回房间,我不确定。
我认为修改每个呼叫会将他们带出会议室,这并不理想。是否有更简单的方法可以对 REST API 中内置的所有会议成员使用 Say/Play?
我正在设置一个非常简单的电话会议系统,用户在其中输入一个 PIN 并连接到与之相关的会议。我也在设置它,以便他们在进入房间之前记录他们的名字。
我的计划是获取录制 URL,然后获取参与者列表并对每个调用者进行 REST API 调用,修改他们对说“现在进入”的调用,然后播放录制 URL。我想在那之后我也必须把他们送回房间,我不确定。
我认为修改每个呼叫会将他们带出会议室,这并不理想。是否有更简单的方法可以对 REST API 中内置的所有会议成员使用 Say/Play?
自 2018 年 7 月 13日起,Twilio 现在允许您向Conference(向整个会议宣布某些内容)或Conference Participant(向单个呼叫者宣布某些内容)资源发送POST
请求,该资源具有链接到以下任一属性的属性:AnnounceUrl
<Say />
和/或<Play />
动词的 TwiML 文档。除了该属性,您还可以指定一个AnnounceMethod
属性,该属性允许您指定是否GET
或POST
(默认)该 URL。
发送上述POST
内容以播放您录制的姓名的好地方可能是在您使用<Conference />
动词将每个用户放入会议时设置的状态回调中,如下所示:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial>
<Conference statusCallback="/conference/join-callback"
statusCallbackEvent="join">
{conference ID}
</Conference>
</Dial>
</Response>
旧的解决方法保留在下面以供后代使用。
Twilio 论坛上的某个人对同样的问题很感兴趣,答案是目前没有直接的 REST API 调用。
您需要做的是,当参与者加入会议时,您将使用 REST API 让 Twilio 拨回您的应用程序。您可以根据自己的喜好选择如何检测您正在呼叫自己的会议(例如,比较呼出和呼入电话号码是否相等);一旦您检测到这一点,您就可以直接将该呼叫加入会议,并使用TwiML <Say />
和<Play />
动词为每个人播放介绍。
这有点令人费解,但这样您就不会从会议中删除每个参与者(阻止他们暂时听到对方的声音)然后重新加入他们。
这应该类似于一个好的端到端解决方案。
首先,用户拨入,您通过标准提示获取会议室的 PIN 和他们的姓名。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Gather action="/conference/pin" finishOnKey="#">
<Say>Please the conference pin number followed by the pound key.</Say>
</Gather>
</Response>
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Say>Say your name and then press the pound key.</Say>
<Record action="/conference/name" finishOnKey="#" />
</Response>
现在,一旦你有了用户的密码和录音,就会发生两件事;帖子的回复/conference/name
将包含<Conference>
动词,将用户放置在房间中:
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial>
<Conference>{conference ID}</Conference>
</Dial>
</Response>
...并且,与此异步,它将使用 REST API 向会议室发起新的呼叫。
POST /2010-04-01/Accounts/{AccountSid}/Calls
From = {your conference phone number}
To = {your conference phone number}
SendDigits = wwww{conference PIN}#
Url = /conference/announce?name={name ID}
现在,下一点变得令人困惑。现在,Twilio 将与您的回调 URL 进行通话的传入结束,以及您在上面为通话的传出结束指定的 URL。您的来电处理程序将需要检测到会议线路正在回叫自身并且行为不同;它首先需要使用简单的 TwiML 进行响应,该 TwiML 允许呼叫的呼出端输入会议室的 pin。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Gather action="/conference/announce-pin" finishOnKey="#" />
</Response>
POST的SendDigits
参数将提供 TwiML 位所期望的数字。然后,该操作应通过新呼叫中的会议来响应。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Dial>
<Conference>{conference ID}</Conference>
</Dial>
</Response>
最后一块拼图是您在 POST 中指定的 URL 发出的 TwiML。这就是将环回呼叫添加到会议后将运行的标记。
<?xml version="1.0" encoding="UTF-8"?>
<Response>
<Play>/conference/name-recordings/{name ID}</Play>
<Say>has joined the call.</Say>
<Hangup />
</Response>
该标记运行,将呼叫者的姓名和消息播放到会议室,然后挂断。