Twilio-如何在会议中设置主持人?

时间:2019-02-20 12:30:59

标签: twilio twilio-api

我正在做我的第一个Twilio项目。

目标:

仅使用电话(没有用于代理的任何类型的UI),我想在会议中执行以下流程:

  1. 客户呼叫和(在选择菜单之后)会议开始。
  2. Agent1参加会议并与客户聊天以获取一些基本信息(Agent1由Twilio呼叫;这是呼出电话)。
  3. Agent1使某事可以将Agent2加入会议。
  4. 进行了三方会议(客户,agent1和agent2)。

问题:

提醒我我没有使用任何UI,并且AFAIK,DTMF无法在会议中使用。因此,为了从会议中获取意见,我尝试使用 hangupOnStar ,因为我在SO中在此处读了多个答案(例如this one)。

但是,它仅适用于初始呼叫者(默认情况下似乎是主持人),不适用于Agent1。我希望Agent1主持会议,以便能够加入Agent2(可能是另一个呼出电话)参加会议。

问题

是否可以将Agent1设置为主持人参加此会议?怎么样?

提前感谢您的回答!

1 个答案:

答案 0 :(得分:0)

最后,我找到了解决方案!我在下面分享。我希望这对某人有帮助...虽然不是那么直观,但是可以。我按照以下步骤操作:

  1. 创建会议并加入客户(将 startConferenceOnEnter EndConferenceOnExit 设置为 false )。
  2. 创建一个CALL并将其挂接到URL。在该Webhook中,创建一个TwiML以便将Agent1加入会议,允许 hangupOnStar 之后加入Agent2(在另一个Webhook中),并将 endConferenceOnExit 设置为 false ,以避免挂断客户的电话。
  3. 单击星号(*)后,创建另一个Webhook以重新加入Agent1,并让Agent2加入会议。

我正在将Python与Flask框架一起使用。这是代码:

@app.route('/start_conference.html', methods=['GET', 'POST'])
def start_conference():
    agent1 = '+XXXXXXXXXXX' # Agent1's phone number
    agent2 = '+XXXXXXXXXXX' # Agent2's phone number
    confName = 'YourConferenceName'

    resp = VoiceResponse()
    dial = Dial()

    # Create a conference and join Customer
    dial.conference(
        confName,
        start_conference_on_enter=False,
        end_conference_on_exit=False,
        max_participants = 3 # Limits participants to 3
    )

    # Call to Agent1 and setup a webhook for this call with a TwiML 
to join to the conference as Moderator
    client.calls.create(
        from_=twilioPhoneNumber,
        to=agent1,
        url=ROOT_URL+'agent1_to_conference.html' # ROOT_URL is the url where app is being executed
    )
    resp.append(dial)

    return str(resp)


@app.route('/agent1_to_conference.html', methods=['GET', 'POST'])
def agent1_to_conference():
    resp = VoiceResponse()

    # Join Agent1 to the conference, allowing hangupOnStar 
functionality to join Agent2 later
    dial = Dial(
        action='join_agent2.html',
        method='POST',
        hangup_on_star=True,
    )
    dial.conference(
        confName,
        start_conference_on_enter=True,
        end_conference_on_exit=False # False, to avoid hanging up to Customer
    )
    resp.append(dial)
    return str(resp)


@app.route('/join_agent2.html', methods=['GET', 'POST'])
def join_agent2():
    resp = VoiceResponse()
    dial = Dial()

    # Re-join Agent1 (after clicking *)
    dial.conference(
        confName,
        start_conference_on_enter=True,
        end_conference_on_exit=True
    )
    resp.append(dial)

    # Join Agent2
    client.conferences(confName).participants.create(
        from_=twilioPhoneNumber,
        to=agent2
    )

    return str(resp)