Reputation: 246
I would like to set as moderator the first user who joins the conference and I'm using the twilio-python doc to help me but I didn't see anything about this.
The first participant should be moderator in order to mute, kick, etc the other one but to be honest I don't know if this is really required so I'm open to a "no need a moderator this".
Also I would like to know if the name related to the token is in the participant in order to retrieve it with this one instead of the SID. (didn't see anything in the doc)
Here the server side code :
@app.route('/call', methods=['GET', 'POST'])
def call():
resp = twilio.twiml.Response()
from_value = request.values.get('From')
to = request.values.get('To')
conferenceName = request.values.get('conferenceName')
account_sid = os.environ.get("ACCOUNT_SID", ACCOUNT_SID)
auth_token = os.environ.get("AUTH_TOKEN", AUTH_TOKEN)
app_sid = os.environ.get("APP_SID", APP_SID)
clientTwilio = TwilioRestClient(account_sid, auth_token)
elif to.startswith("conference:"):
# allows to user conference call
# client -> conference
conferencesList = client.conferences.list(friendly_name=conferenceName)
#there's no conference with the conferenceName so the first person should be the moderator and join it
if len(conferencesList) == 0
#do somestuff to set a moderator [...]
resp.dial(callerId=from_value).conference(to[11:])
else:
#there's already a conference just join it
resp.dial(callerId=from_value).conference(to[11:])
and for the "name" related to the token/client I want to use to retrieve a participant :
//http://foo.herokuapp.com/token?client=someName"
self.phone = [[TCDevice alloc] initWithCapabilityToken:token delegate:self];
NSDictionary *params = @{@"To": @"conference:foo"};
self.connection = [self.phone connect:params delegate:self];
[self closeNoddersView:nil];
//the user is connected as participant in the conference, is it possible to retrieve it with the "someName" ? (server side route which take a "someName" in param)
any clue ? :/
Upvotes: 1
Views: 227
Reputation: 246
I found a workaround to use the client:name and no need of a moderator
a conference contains a list of participant
a participant is related to a specific call
a call contains the information in the to and from_: client:name
@app.route('/conference_kick', methods=['GET', 'POST'])
def conference():
client = TwilioRestClient(account_sid, auth_token)
conferenceName = request.values.get('conferenceName')
participantName = request.values.get('participantName')
index = 0
call = ""
# A list of conference objects
conferencesList = client.conferences.list(status="in-progress",friendly_name=conferenceName)
if len(conferencesList) == 1:
if conferencesList[0].participants:
participants = conferencesList[0].participants.list()
while index < len(participants):
call = client.calls.get(participants[index].call_sid)
array = call.from_.split(':')
if participantName == array[1]:
participants[index].kick()
return json.dumps({'code' : 200, 'success':1, 'message':participantName+' kicked'})
index += 1
return json.dumps({'code' : 101, 'success':0, 'message':participantName+' not found'})
else:
return json.dumps({'code' : 102, 'success':0, 'message':'no participants'})
else:
return json.dumps({'code' : 103, 'success':0, 'message':'no conference'})
Upvotes: 3