使用 React 的 Bot Framework 语音到文本集成问题
Bot Framework speech-to-text integration issue using React
我需要集成 Azure 机器人框架,我也使用 styleOptions
参数做了一些样式,
但是当我尝试传递 webSpeechPonyFillFactory
参数时,我没有收到麦克风图标或任何更改。
这是我的代码:
import { DirectLine } from 'botframework-directlinejs';
import React, { Component } from 'react';
import ReactWebChat,{ Components, createDirectLine, createCognitiveServicesSpeechServicesPonyfillFactory } from 'botframework-webchat';
import './chat.css'
class Chat extends Component {
constructor(props) {
super(props);
this.state = {
options: {},
webSpeechPonyfillFactory: {
region: 'westus',
subscriptionKey: "242a*88**************a70b2",
textNormalization: 'lexical'
}
};
this.directLine = new DirectLine({ token: 'hyyw*********************c' });
}
async componentDidMount(){
this.setState({webSpeechPonyfillFactory : await createCognitiveServicesSpeechServicesPonyfillFactory( { region: 'westus', subscriptionKey: '242a**************0b2',textNormalization: 'lexical' })});
}
render() {
return (
<div className="chat">
<ReactWebChat directLine={this.directLine} userID="" webSpeechPonyFillFactory={this.state.webSpeechPonyfillFactory}
styleOptions={{
backgroundColor: '#fff',
bubbleBackground: '#FFFFFF',
bubbleBorder: 'solid 0px #fff',
bubbleBorderRadius: 20
}} />
</div>
);
}
}export default Chat;
当我在 JS 中实现时,它工作正常,但是当我尝试与 React 集成时:(
您应该将 DirectLine Connection 和 Web Speech Ponyfill 添加到组件的状态并将默认值设置为 null。然后在 componentDidMount 方法中,创建 DirectLine 和 Web Speech Ponyfill 对象并更新它们的状态值。最后,在渲染方法中,检查以确保在渲染 ReactWebChat 之前 DirectLine 和 Web Speech Ponyfill 对象不为空。如果任一值未正确定义,网络聊天将不会按预期呈现。看看下面的代码片段。
import React from 'react';
import ReactWebChat, { createDirectLine } from 'botframework-webchat';
export default class extends React.Component {
constructor(props) {
super(props);
this.state = {
directLine: null,
webSpeechPonyfill: null
};
}
componentDidMount() {
this.fetchToken();
this.fetchSpeechPonyfill();
}
async fetchSpeechPonyfill() {
this.setState({ webSpeechPonyfill: await window.WebChat.createCognitiveServicesSpeechServicesPonyfillFactory({
subscriptionKey: '<SPEECH_SUBSCRIPTION_KEY>', region: 'westus', textNormalization: 'lexical' }) });
}
async fetchToken() {
const res = await fetch('https://webchat-mockbot.azurewebsites.net/directline/token', { method: 'POST' });
const { token } = await res.json();
this.setState(() => ({
directLine: createDirectLine({ token })
}));
}
render() {
return (
this.state.directLine && this.state.webSpeechPonyfill?
<ReactWebChat
className="chat"
directLine={ this.state.directLine }
webSpeechPonyfillFactory={ this.state.webSpeechPonyfill }
{ ...this.props }
/>
:
<div>Connecting to bot…</div>
);
}
}
希望对您有所帮助!
我需要集成 Azure 机器人框架,我也使用 styleOptions
参数做了一些样式,
但是当我尝试传递 webSpeechPonyFillFactory
参数时,我没有收到麦克风图标或任何更改。
这是我的代码:
import { DirectLine } from 'botframework-directlinejs';
import React, { Component } from 'react';
import ReactWebChat,{ Components, createDirectLine, createCognitiveServicesSpeechServicesPonyfillFactory } from 'botframework-webchat';
import './chat.css'
class Chat extends Component {
constructor(props) {
super(props);
this.state = {
options: {},
webSpeechPonyfillFactory: {
region: 'westus',
subscriptionKey: "242a*88**************a70b2",
textNormalization: 'lexical'
}
};
this.directLine = new DirectLine({ token: 'hyyw*********************c' });
}
async componentDidMount(){
this.setState({webSpeechPonyfillFactory : await createCognitiveServicesSpeechServicesPonyfillFactory( { region: 'westus', subscriptionKey: '242a**************0b2',textNormalization: 'lexical' })});
}
render() {
return (
<div className="chat">
<ReactWebChat directLine={this.directLine} userID="" webSpeechPonyFillFactory={this.state.webSpeechPonyfillFactory}
styleOptions={{
backgroundColor: '#fff',
bubbleBackground: '#FFFFFF',
bubbleBorder: 'solid 0px #fff',
bubbleBorderRadius: 20
}} />
</div>
);
}
}export default Chat;
当我在 JS 中实现时,它工作正常,但是当我尝试与 React 集成时:(
您应该将 DirectLine Connection 和 Web Speech Ponyfill 添加到组件的状态并将默认值设置为 null。然后在 componentDidMount 方法中,创建 DirectLine 和 Web Speech Ponyfill 对象并更新它们的状态值。最后,在渲染方法中,检查以确保在渲染 ReactWebChat 之前 DirectLine 和 Web Speech Ponyfill 对象不为空。如果任一值未正确定义,网络聊天将不会按预期呈现。看看下面的代码片段。
import React from 'react';
import ReactWebChat, { createDirectLine } from 'botframework-webchat';
export default class extends React.Component {
constructor(props) {
super(props);
this.state = {
directLine: null,
webSpeechPonyfill: null
};
}
componentDidMount() {
this.fetchToken();
this.fetchSpeechPonyfill();
}
async fetchSpeechPonyfill() {
this.setState({ webSpeechPonyfill: await window.WebChat.createCognitiveServicesSpeechServicesPonyfillFactory({
subscriptionKey: '<SPEECH_SUBSCRIPTION_KEY>', region: 'westus', textNormalization: 'lexical' }) });
}
async fetchToken() {
const res = await fetch('https://webchat-mockbot.azurewebsites.net/directline/token', { method: 'POST' });
const { token } = await res.json();
this.setState(() => ({
directLine: createDirectLine({ token })
}));
}
render() {
return (
this.state.directLine && this.state.webSpeechPonyfill?
<ReactWebChat
className="chat"
directLine={ this.state.directLine }
webSpeechPonyfillFactory={ this.state.webSpeechPonyfill }
{ ...this.props }
/>
:
<div>Connecting to bot…</div>
);
}
}
希望对您有所帮助!