对所有与会者使用Say动词

Ale*_*lex 7 twilio

我正在建立一个非常简单的电话会议系统,用户输入PIN并连接到与之相关的会议.我也正在设置它,所以他们在进入房间之前记录他们的名字.

我的计划是获取录制URL,然后获取参与者列表并对每个呼叫者进行REST API调用,将其调用修改为Say"Now enter",然后播放录制URL.我想我不得不把它们送回房间,我不确定.

我认为修改每个电话会将他们带出会议室,这并不理想.是否有更简单的方法将Say/Play用于REST API内置的会议的所有成员?

Ada*_*ras 9

截至2018年7月13 ,Twilio现在允许您向会议发送POST请求(向整个会议宣布某些内容)或会议参与者(向单个呼叫者宣布某些内容)资源,其中包含以下任一属性的属性:AnnounceUrl

  • 一个WAV或MP3音频文件,或
  • 使用<Say />和/或<Play />动词的TwiML文档.

除了该属性,您还可以指定一个AnnounceMethod属性,该属性允许您指定是否GETPOST(默认)该URL.

发送上述内容POST以播放录制的名称的好地方可能是在使用<Conference />动词将每个用户加入会议时设置的状态回调,如下所示:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Dial>
    <Conference statusCallback="/conference/join-callback"
                statusCallbackEvent="join">
      {conference ID}
    </Conference>
  </Dial>
</Response>
Run Code Online (Sandbox Code Playgroud)

对于后代来说,旧的解决方法仍然存在.


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>
Run Code Online (Sandbox Code Playgroud)

现在,一旦你有了用户的引脚和录音,就会发生两件事; 帖子的响应/conference/name将包含<Conference>动词,将用户放在房间中:

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Dial>
    <Conference>{conference ID}</Conference>
  </Dial>
</Response>
Run Code Online (Sandbox Code Playgroud)

...并且,与此异步,它将使用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}
Run Code Online (Sandbox Code Playgroud)

现在,下一点变得令人困惑.Twilio现在将与您的回拨URL进行通话,以获取呼叫的传入结束,以及您为呼叫的传出结束指定的URL.您的来电处理程序需要检测到会议线路正在回调并且行为方式不同; 它首先需要用简单的TwiML响应,允许呼叫的输出端进入会议室的引脚.

<?xml version="1.0" encoding="UTF-8"?>
<Response>
    <Gather action="/conference/announce-pin" finishOnKey="#" />
</Response>
Run Code Online (Sandbox Code Playgroud)

SendDigitsPOST 的参数将提供TwiML所期望的位数.然后,该操作应通过新呼叫中的会议进行响应.

<?xml version="1.0" encoding="UTF-8"?>
<Response>
  <Dial>
    <Conference>{conference ID}</Conference>
  </Dial>
</Response>
Run Code Online (Sandbox Code Playgroud)

拼图的最后一部分是您在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>
Run Code Online (Sandbox Code Playgroud)

该标记运行,将呼叫者的姓名和消息播放到会议室,然后挂断.