Sdílet prostřednictvím


povolit text v reálném čase (RTT)

Poznámka:

RTT je požadavek na dodržování předpisů v oblasti přístupnosti pro hlasové platformy a video platformy v EU od 30. června 2025. Další informace najdete ve směrnici 2019/882.

Integrujte text v reálném čase (RTT) do volajících aplikací, abyste zlepšili přístupnost a zajistili efektivní komunikaci všech účastníků během schůzek.

RTT umožňuje uživatelům, kteří mají potíže s mluvením, aktivně se účastnit tím, že píší své zprávy, které se pak vysílají téměř v reálném čase ostatním účastníkům schůzky. Tato funkce funguje bezproblémově společně s existujícími titulky a zajišťuje, aby se zadané zprávy doručovaly okamžitě, aniž by tok konverzace narušoval.

Přehled funkce textu v reálném čase

Text v reálném čase (RTT) usnadňuje komunikaci pro uživatele, kteří mohou mít potíže s mluvením během hovorů. Tím, že uživatelům umožníte psát přímé textové zprávy, RTT zajistí, že všichni účastníci schůzky budou moct zůstat zapojeni a informovaní. Zprávy se přenášejí přes datové kanály (ID 24) a jsou vždy aktivní a automaticky se zobrazují při odeslání první zprávy.

Na podporovaných platformách můžou data RTT zobrazovat vedle titulků odvozených z řeči na text a poskytnout tak komplexní zobrazení veškeré komunikace během hovoru.

Poznámka:

RTT pro veřejnou telefonní síť nebo interoperabilitu Teams není momentálně k dispozici

Konvence vytváření názvů

Různé platformy můžou pro vlastnosti související s RTT používat různou terminologii. Následující tabulka shrnuje rozdíly:

Mobilní zařízení (Android/iOS) Windows (C#)
Typ Druh
Informace Podrobnosti

Tyto aliasy jsou funkčně ekvivalentní a používají se k zachování konzistence napříč různými platformami.

Třída RealTimeTextInfo/Details

Třída RealTimeTextInfo (nebo RealTimeTextDetails ve Windows) zapouzdřuje informace o každé zprávě RTT. V následující tabulce jsou uvedeny klíčové vlastnosti:

Vlastnost Popis
SequenceId Jedinečný identifikátor sekvence zpráv.
Text Obsah zprávy RTT.
Sender Informace o odesílateli zprávy
ResultType/
Kind
Určuje, jestli je zpráva částečná nebo konečná.
IsLocal Určuje, jestli místní uživatel zprávu odeslal.
ReceivedTime Časové razítko, kdy byla zpráva přijata.
UpdatedTime Časové razítko poslední aktualizace zprávy

Modely

Název Popis
Funkce Textu v Reálném Čase Rozhraní API pro RealTimeText
RealTimeTextInfo Přijatá datová struktura pro každou událost RealTimeText
Přijímač textu v reálném čase (RealTimeTextReceivedEventHandler) Definice zpětného volání pro zpracování události RealTimeTextReceivedEventType

Získat funkci RealTimeText

let realTimeTextFeature: SDK.RealTimeTextFeature = call.feature(SDK.Features.RealTimeText);

Odebírat posluchače

Přidejte posluchač pro data RealTimeText, která byla přijata

Zpracování vráceného datového objektu RealTimeTextInfo. V ideálním případě byste měli mít toto na sadě obslužné rutiny, jakmile je volání připojeno.

Poznámka: Objekt obsahuje hodnotu resultType prop, která označuje, zda jsou data částečným textem nebo finalizovanou verzí textu. ResultType Partial označuje živé zprávy, které se můžou změnit, zatímco Final označuje dokončené zprávy bez dalších čekajících změn.

const realTimeTextReceivedHandler: SDK.RealTimeTextReceivedEventHandler = (data: SDK.RealTimeTextInfo) => { 
    /** USER CODE HERE - E.G. RENDER TO DOM 
     *  data.sequenceId
     *  data.sender
     *  data.text
     *  data.resultType
     *  data.receivedTimestamp
     *  data.updatedTimestamp
     *  data.isLocal
    */
    // Example code:
    // Create a dom element, i.e. div, with id "rttArea" before proceeding with the sample code
    let mri: string = '';
    let displayName: string = '';
    switch (data.sender.identifier.kind) {
        case 'communicationUser': { mri = data.sender.identifier.communicationUserId; displayName = data.sender.displayName; break; }
        case 'microsoftTeamsUser': { mri = data.sender.identifier.microsoftTeamsUserId; displayName = data.sender.displayName; break; }
        case 'phoneNumber': { mri = data.sender.identifier.phoneNumber;  displayName = data.sender.displayName; break; }
    }

    const newClassName = `prefix${mri.replace(/:/g, '').replace(/-/g, '').replace(/\+/g, '')}`;
    const rttText = `${(data.receivedTimestamp).toUTCString()} ${displayName ?? mri}: `;

    let foundRTTContainer = this.elements.rttArea.querySelector(`.${newClassName}[isNotFinal='true']`);
    if (!foundRTTContainer) {
        let rttContainer = document.createElement('div');
        rttContainer.setAttribute('isNotFinal', 'true');
        rttContainer.style['borderBottom'] = '1px solid';
        rttContainer.style['whiteSpace'] = 'pre-line';
        rttContainer.textContent = rttText + data.text;
        rttContainer.classList.add(newClassName);

        this.elements.rttArea.appendChild(rttContainer);

        setTimeout(() => {
            this.elements.rttArea.removeChild(rttContainer);
        }, 40000);
    } else {
        if (data.text === '') {
            this.elements.rttArea.removeChild(foundRTTContainer);
        }
        if (data.resultType === 'Final') {
            foundRTTContainer.setAttribute('isNotFinal', 'false');
            if (data.isLocal) {
                let rttTextField = this.elements.rttMessage;
                rttTextField.value = '';
            }
        } else {
            foundRTTContainer.textContent = rttText + data.text;
        }
    }
}; 
realTimeTextFeature.on('realTimeTextReceived', realTimeTextReceivedHandler); 

Odeslat živou obslužnou rutinu RealTimeText

Pokud chcete simulovat živé zasílání zpráv, budete muset nastavit živou obslužnou rutinu pro odesílání realTimeText jako typy uživatelů.

let rttTextField = document.getElementById("rttMessage") as HTMLInputElement;
rttTextField.addEventListener('keyup', (event) => {
    await realTimeTextFeature.sendRealTimeText(rttTextField.value);
});

Odeslat finalizovaný text v reálném čase

Jakmile si budete jistí, že zpráva byla dokončena, například uživatel klikne na odeslat zprávu nebo stiskne enter, předejte true funkci sendRealTimeText.

try {
    let rttTextField = document.getElementById("rttMessage") as HTMLInputElement;
    await realTimeTextFeature.sendRealTimeText(rttTextField.value, true);
    rttTextField.value = '';
} catch (e) {
    console.log('ERROR Send RTT failed', e);
}

Odhlásit odběr posluchačů

realTimeTextFeature.off('realTimeTextReceived', realTimeTextReceivedHandler); 

Třída RealTimeTextInfo

Třída RealTimeTextInfo poskytuje podrobné informace o každé textové zprávě v reálném čase:

  • sender: Informace o tom, kdo zprávu poslal.
  • sequenceId: Jedinečný identifikátor zprávy.
  • text: Obsah zprávy.
  • resultType: Označuje, zda je zpráva částečná nebo finalizovaná.
  • receivedTimestamp: Časové razítko při přijetí zprávy.
  • updatedTimestamp: Časové razítko, kdy byla zpráva naposledy aktualizována.
  • isLocal: Označuje, zda byla zpráva odeslána místním uživatelem.

Modely

Název Popis
RealTimeTextInfo Představuje položku textové zprávy v reálném čase, včetně informací o odesílateli, obsahu zprávy, ID sekvence a stavu.

Získat funkci textu v reálném čase

Pokud chcete získat přístup k funkci Text v reálném čase, načtěte ji z objektu Call :

RealTimeTextCallFeature rttFeature = call.feature(Features.REAL_TIME_TEXT);

Využití funkcí

Odesílání textových zpráv v reálném čase

Vytvořte vazbu textového vstupního pole na metodu send() pro přenos zpráv jako typy uživatelů:

EditText messageEditText = findViewById(R.id.messageEditText);
messageEditText.addTextChangedListener(new TextWatcher() {
    @Override
    public void afterTextChanged(Editable s) {
        String text = s.toString();
        rttFeature.send(text);
    }
    // Other overridden methods...
});

Příjem textových zpráv v reálném čase

Přihlaste se k odběru OnInfoReceived události pro zpracování příchozích zpráv:

rttFeature.addOnInfoReceivedListener((eventArgs) -> {
    RealTimeTextInfo info = eventArgs.getInfo();
    
    // Update your message list with the new info
    updateMessageList(info);
    
    // Clear the text input if the message is local and finalized
    if (info.isLocal() && info.getResultType() == RealTimeTextResultType.FINAL) {
        messageEditText.getText().clear();
    }
});

Třída RealTimeTextInfo

Třída RealTimeTextInfo poskytuje podrobné informace o každé textové zprávě v reálném čase:

  • Odesílatel: Informace o tom, kdo zprávu poslal.
  • SequenceId: Jedinečný identifikátor zprávy.
  • Text: Obsah zprávy.
  • ResultType: Označuje, jestli je zpráva částečná nebo finalizovaná.
  • ReceivedTime: Časové razítko při přijetí zprávy.
  • UpdatedTime: Časové razítko, kdy byla zpráva naposledy aktualizována.
  • IsLocal: Označuje, zda byla zpráva odeslána místním uživatelem.

Modely

Název Popis
RealTimeTextInfo Představuje položku textové zprávy v reálném čase, včetně informací o odesílateli, obsahu zprávy, ID sekvence a stavu.

Získat funkci textu v reálném čase

Přístup k funkci Text v reálném čase z objektu Call :

let rttFeature = call.feature(Features.realTimeText)

Využití funkcí

Odesílání textových zpráv v reálném čase

Vytvořte vazbu textového vstupního pole na metodu send pro přenos zpráv jako typy uživatelů:

@State var messageText: String = ""

TextField("Type your message", text: $messageText)
    .onChange(of: messageText) { newText in
        rttFeature?.send(newText)
    }

Příjem textových zpráv v reálném čase

Přihlaste se k odběru OnInfoReceived události pro zpracování příchozích zpráv:

rttFeature?.addOnInfoReceivedListener { eventArgs in
    if let info = eventArgs.info {
        // Update your message list with the new info
        updateMessageList(info)
        
        // Clear the text input if the message is local and finalized
        if info.isLocal && info.resultType == .final {
            self.messageText = ""
        }
    }
}

Třída RealTimeTextInfo

Třída RealTimeTextInfo poskytuje podrobné informace o každé textové zprávě v reálném čase:

  • Odesílatel: Informace o tom, kdo zprávu poslal.
  • SequenceId: Jedinečný identifikátor zprávy.
  • Text: Obsah zprávy.
  • ResultType: Označuje, jestli je zpráva částečná nebo finalizovaná.
  • ReceivedTime: Časové razítko při přijetí zprávy.
  • UpdatedTime: Časové razítko, kdy byla zpráva naposledy aktualizována.
  • IsLocal: Označuje, zda byla zpráva odeslána místním uživatelem.

Modely

Název Popis
RealTimeTextDetails Představuje položku textové zprávy v reálném čase, včetně informací o odesílateli, obsahu zprávy, ID sekvence a stavu.

Získat funkci textu v reálném čase

Načtěte funkci Text v reálném čase z objektu Call.

RealTimeTextCallFeature rttFeature = call.GetRealTimeTextCallFeature();

Využití funkcí

Odesílání textových zpráv v reálném čase

Připojte textové vstupní pole k Send metodě pro přenos zpráv, jak uživatel píše.

TextBox messageTextBox = new TextBox();
messageTextBox.TextChanged += (sender, args) => {
    string text = messageTextBox.Text;
    rttFeature.Send(text);
};

Příjem textových zpráv v reálném čase

Přihlaste se k odběru DetailsReceived události pro zpracování příchozích zpráv:

rttFeature.DetailsReceived += (sender, e) => {
    RealTimeTextDetails details = e.Details;
    
    // Update your message list with the new details
    UpdateMessageList(details);
    
    // Clear the text input if the message is local and finalized
    if (details.IsLocal && details.Kind == RealTimeTextResultKind.Final) {
        messageTextBox.Text = string.Empty;
    }
};

Třída RealTimeTextDetails

Třída RealTimeTextDetails poskytuje komplexní informace o každé textové zprávě v reálném čase:

  • Odesílatel: Informace o tom, kdo zprávu poslal.
  • SequenceId: Jedinečný identifikátor zprávy.
  • Text: Obsah zprávy.
  • Druh: Označuje, jestli je zpráva částečná nebo finalizovaná.
  • ReceivedTime: Časové razítko při přijetí zprávy.
  • UpdatedTime: Časové razítko, kdy byla zpráva naposledy aktualizována.
  • IsLocal: Označuje, zda byla zpráva odeslána místním uživatelem.

Další kroky