Twillio使听众可以在会议期间按*要求讲话

时间:2019-03-31 02:51:49

标签: ruby-on-rails twilio

我希望允许听众在电话会议中按*键要求取消静音,主持人可以从控制台取消静音。

我有一个具有以下功能的控制器:

def conference_connect
    @room_name = flash[:room_name]
    @room_id = flash[:event_id]
case params['Digits']
      when "1" # listener
        @muted = "true"
      when "3" # moderator
        @moderator = "true"
    end

    response = Twilio::TwiML::VoiceResponse.new
    response.say(voice: 'alice', language: 'en-US', message: 'You are in, press * at anytime to ask a question')
    dial = Twilio::TwiML::Dial.new(hangupOnStar: true)
    dial.conference(@room_name,
                    wait_url: "http://twimlets.com/holdmusic?xxxxxxx&",
                    muted: @muted || "false",
                    start_conference_on_enter: @moderator || "false",
                    end_conference_on_exit: @moderator || "false",
                    )

    gather = Twilio::TwiML::Gather.new(action: '/redirectIntoConference?name= ' + @room_name, digits: 1)


    response.append(dial)
  end

我遇到以下错误:

No template found for TwilioController#conference_connect, rendering head :no_content

我想向主持人发送一条消息(或更新一些参数),以通知他听众有疑问要问。

1 个答案:

答案 0 :(得分:1)

这里是Twilio开发人员的传播者。

您在这里遇到了几个问题。首先,您的错误是因为您没有返回在控制器操作中构建的TwiML,而Rails却在寻找模板。

在操作render结束时,如下所示:

  response.append(dial)
  render xml: response.to_xml
end

关于请求在*上发言,您已经中途了。首先,<Gather>不会为您提供帮助,因此请摆脱掉这一行:

gather = Twilio::TwiML::Gather.new(action: '/redirectIntoConference?name= ' + @room_name, digits: 1)

相反,您在hangupOnStar中将<Dial>设置为true,这将使用户与会议断开连接(这听起来很糟,但这是您想要的)。您只需要设置用户挂断电话后发生的情况。

在这种情况下,您想向主持人提出请求,然后让他们重新加入会议。为此,您需要在<Dial>上的action parameter指向呼叫者离开会议时将请求的URL。

在此操作中,您需要以某种方式提醒主持人(我不确定您的计划如何),然后返回TwiML以将呼叫者重新加入会议。不要忘记用hangupOnStaraction用相同的方式设置会议。

最好,您的操作应如下所示:

def conference_connect
  @room_name = flash[:room_name]
  @room_id = flash[:event_id]
  case params['Digits']
  when "1" # listener
    @muted = "true"
  when "3" # moderator
    @moderator = "true"
  end

  response = Twilio::TwiML::VoiceResponse.new
  response.say(voice: 'alice', language: 'en-US', message: 'You are in, press * at anytime to ask a question')
  dial = Twilio::TwiML::Dial.new(hangupOnStar: true, action: '/redirectIntoConference?name= ' + @room_name)
  dial.conference(@room_name,
                  wait_url: "http://twimlets.com/holdmusic?xxxxxxx&",
                  muted: @muted || "false",
                  start_conference_on_enter: @moderator || "false",
                  end_conference_on_exit: @moderator || "false",
                  )    
  response.append(dial)
  render xml: response.to_xml
end

让我知道是否有帮助。