0

我在这里向您询问 Twilio 功能。现在我正在使用 Twilio Service 开发会议服务,但遇到了一个难题。当我使用连接 API 时,回调返回一个包含参与者身份的 JSON 对象。我想发送带有参与者身份的参与者名称。

这是连接功能。

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"
}

有没有人可以帮助我解决这个问题?谢谢你。

4

2 回答 2

0

Twilio 开发人员布道者在这里。

Participant对象没有participant_name可用于传递数据的任意属性,例如 。

我建议您在后端创建一个 API,该 API 可以接收参与者身份并返回有关参与者的数据。这样,当参与者连接时,您可以向后端发出请求以获取有关他们的更多数据。

或者,您可以使用DataTrack API将此类数据发送给其他参与者。

于 2022-01-24T23:38:14.433 回答
0

你有两种方法来获得它:

  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");
  })
于 2022-01-24T17:35:02.530 回答