Twilio 2.x: отправка пользовательских параметров через API подключения
Я здесь, чтобы спросить вас о функциональности Twilio. Сейчас я разрабатываю Conference Service с помощью Twilio Service, но столкнулся с трудной проблемой. Когда я использую API подключения, обратный вызов возвращает объект JSON, который включает в себя member.identity. Я хочу отправить имя участника с именем участника.
Это функция подключения.
createLocalTracks(options)
.then(localTracks => {
return connect(room.accessToken, {
name: room.roomName,
tracks: localTracks,
})
}).then(room => {
console.log(room.data); // Returns JSON Object that includes only participant_identity.
this.participants.push("You");
})
И результат консоли выглядит следующим образом.
{
dominantSpeaker: null
isRecording: true
localParticipant: {
...,
identity: 'xxx',
...
}
mediaRegion: "us1"
name: "Soundblock.Project.2608117C-F92E-442A-A67D-4ED428522CE0"
participants: []
sid: "RM6336d72cb198fa58aa37f66af9eaf02d"
state: "connected"
}
Я хочу получить имя_участника с идентификатором. Таким образом, результат должен быть следующим.
{
dominantSpeaker: null
isRecording: true
localParticipant: {
...,
identity: 'xxx',
participant_name: 'ABC'
...
}
mediaRegion: "us1"
name: "Soundblock.Project.2608117C-F92E-442A-A67D-4ED428522CE0"
participants: [
{ identity: 'YYY', participant_name: 'BCD' },
{ identity: 'ZZZ', participant_name: 'CDE' },
...
]
sid: "RM6336d72cb198fa58aa37f66af9eaf02d"
state: "connected"
}
Есть ли кто-нибудь, кто может помочь мне с этой проблемой? Спасибо.
2 ответа
Евангелист разработчиков Twilio здесь.
The Participant
объект не имеет произвольных свойств, таких как
participant_name
, который вы можете использовать для передачи данных.
Я бы посоветовал вам создать API в своем бэкенде, который может получать идентификатор участника и возвращать данные об участнике. Таким образом, когда участник подключается, вы можете отправить запрос на серверную часть, чтобы получить больше данных о нем.
В качестве альтернативы вы можете использовать DataTrack API для отправки подобных данных другим участникам.
У вас есть 2 способа получить это:
Если вы вызываете Twilio API в задней части, а затем создаете объект, который обслуживается в передней части, измените его соответствующим образом в задней части, чтобы он возвращал именно то, что вам нужно во внешнем интерфейсе.
если вы напрямую вызываете Twilio API спереди (или не хотите вносить изменения сзади), вы можете создать интерфейс и соответствующим образом сопоставить его с классом. Что-то вроде этого:
interface ParticipantI {
// NOTE: Put the right types on it
dominantSpeaker: string;
isRecording: boolean;
localParticipant: {
...,
identity: string;
...
}
mediaRegion: string;
name: string;
participants: {identity: 'string'; participant_name: 'string';}[]
sid: string;
state: string;
}
export class Participant {
dominantSpeaker: string;
isRecording: boolean;
localParticipant: {
...,
identity: string;
participant_name?: string;
...
}
mediaRegion: string;
name: string;
participants: {identity: 'string'; participant_name: 'string';}[]
sid: string;
state: string;
constructor (participant:ParticipantI) {
this.dominantSpeaker = participant.dominantSpeaker;
this.isRecording= participant.isRecording;
this.localParticipant = participant.localParticipant;
this.participants = participant.participants;
... // Complete the assignment of the rest of the fields
// Managing the transformations
// Look up for 'participant_name'
const _participant_name = this.participants.find( ({ identity }) => identity === this.localParticipant.identity );
// Add it to localParticipant
this.localParticipant.participant_name = _participant_name.participant_name;
// Delete it from this.participants
this.participants = this.participants.filter(participan => participan.identity != _participant_name.identity);
}
}
Управляйте вызовом API:
createLocalTracks(options)
.then(localTracks => {
return connect(room.accessToken, {
name: room.roomName,
tracks: localTracks,
})
}).then(room => {
console.log(room.data); // Returns JSON Object that includes only participant_identity.
const myExample: Participant = new Participant(room.data);
console.log(myExample);
this.participants.push("You");
})