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 способа получить это:

  1. Если вы вызываете Twilio API в задней части, а затем создаете объект, который обслуживается в передней части, измените его соответствующим образом в задней части, чтобы он возвращал именно то, что вам нужно во внешнем интерфейсе.

  2. если вы напрямую вызываете 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");
  })
Другие вопросы по тегам