宣布参加会议的与会者名称

时间:2014-05-20 08:10:53

标签: twilio

我正在使用Twilio构建一个简单的会议,其中会议由代理使用Twilio客户端启动,并且联系人被调用并添加到此会议中。在将此联系人添加到会议之前,我们希望在会议室中公布联系人的姓名(例如:<Say>Now Joining Sam Carter </Say>)。根据数据库中的电话号码计算出该人的姓名。

当连接呼叫时,执行以下TwiML,将联系人连接到会议:

<Dial callerId="+1415xxxxxxx" record="true" action="/my/action/url">
    <Conference endConferenceOnExit="true" >ConferenceRoom1</Conference>
</Dial>

有没有办法在执行<DIAL>动词之前将消息发送到会议中。如果我在<SAY>之前写<DIAL>动词,那么它会向联系人播放消息,而不是在CONFERENCEROOM1中播放消息。

是否有像onConferenceEnter这样的事件,当某个参与者进入会议时,可以用它来触发另一个TwiML?请建议实现此行为的最佳方法。

2 个答案:

答案 0 :(得分:2)

问题的简短回答是它不能通过Twiml事件完成,但可以使用他们的REST API进行一种黑客攻击。

问题已经在SO上提出,答案可以在这里找到:

Use Say verb to all Conference participants

如果问题/答案被删除/删除我已将其粘贴在下方:


这里的东西应该类似于一个好的端到端解决方案。

首先,用户拨入并通过标准提示获取会议室的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的响应将包含动词,将用户放在房间中:

<?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进行响应,允许呼出的呼出端进入会议室的引脚。

<?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>

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

答案 1 :(得分:2)

为了其他人的利益,这就是我实现此行为的方式:

  1. 代理商已经使用Twilio客户端启动了会议,他已经参加了会议。一旦参与者即将加入同一会议,使用REST API修改实时电话会议的URL。

    TwilioRestClient client = new TwilioRestClient(ACCOUNT_SID, AUTH_TOKEN);
    Map<String, String> filter = new HashMap<String, String>();
    filter.put("From", "client:AGENT1");
    filter.put("Status", "in-progress");
    CallList callList = account.getCalls(filter); 
    Call agentsCall = null;
    for (Call inProgressCall : callList) {
        agentsCall = inProgressCall;
        break; //return the first one only..there shouldn't be more
    }
    Map<String, String> agentsCallParams = new HashMap<String, String>();  
    agentsCallParams.put("Url", "http://myserver.com/twiml/agentmessage.xml");
    agentsCallParams.put("Method", "GET");
    agentsCall.update(agentsCallParams);`
    
  2. 上面的代码段将更新现有调用的twiml,如下所示。

    <?xml version="1.0" encoding="UTF-8"?>
    <Response>
        <Say>Now joining {name of the participant}</Say>
        <Dial>
           <Conference>Conference1</Conference>
        </Dial>
    </Response>
    
  3. 上述Twiml将更新呼叫,以<SAY>动词播放消息,然后将座席重新加入会议。

  4. 现在,让参与者通过返回以下Twiml来加入同一个会议:

    <?xml version="1.0" encoding="UTF-8"?>
    <Response>
    <Dial>
        <Conference>Conference1</Conference>
    </Dial>
    

    希望这有帮助!!!