通过 Bot Framework V4 上的 Webchat 使用 'Credentials' 进行语音服务身份验证

Speech Service Authentication With 'Credentials' Via Webchat on Bot Framework V4

我的机器人在使用授权令牌 + 区域对调用语音服务时工作正常。
代码如下。
webSpeechPonyfillFactory = await window.WebChat.createCognitiveServicesSpeechServicesPonyfillFactory({ authorizationToken, region });
但是,浏览器上显示以下警告消息:
botframework-webchat: "authorizationToken", "region", and "subscriptionKey" are deprecated and will be removed on or after 2020-12-17. Please use "credentials" instead.
如何将我的身份验证代码迁移到新方法?
代码示例表示赞赏。谢谢

这是我使用的代码。我 运行 本地服务器用于调用语音 API returns 令牌(和区域)。

在网络聊天代码中,您只需将返回的令牌和区域传递给createCognitiveServicesSpeechServicesPonyfillFactory()。具体而言,您的代码不需要与我的匹配。做这样的事情就足够了:

const webSpeechPonyfillFactory = await window.WebChat.createCognitiveServicesSpeechServicesPonyfillFactory( {
  credentials: {
    authorizationToken: authorizationToken,
    region: region
  }
} );

或者,根据您构建凭据对象的方式,

{ credentials: credentials }


示例代码:

const path = require('path');
const restify = require('restify');
const request = require('request');

const bodyParser = require('body-parser');
const corsMiddleware = require('restify-cors-middleware');

const cors = corsMiddleware({
    origins: ['*']
});

const ENV_FILE = path.join(__dirname, '.env');
require('dotenv').config({ path: ENV_FILE });

// Create HTTP server.
const server = restify.createServer();
server.pre(cors.preflight);
server.use(cors.actual);
server.use(bodyParser.json({
    extended: false
}));

server.listen(process.env.port || process.env.PORT || 3500, function() {
    console.log(`\n${ server.dl_name } listening to ${ server.url }.`);
});

server.post('/speechservices/token', async (req, res) => {
    const options = {
        method: 'POST',
        uri: `https://${ process.env.SPEECH_SERVICES_REGION }.api.cognitive.microsoft.com/sts/v1.0/issueToken`,
        headers: {
            'Ocp-Apim-Subscription-Key': process.env.SPEECH_SERVICES_SUBSCRIPTION_KEY
        }
    };
    request.post(options, (error, response, body) => {
        if (!error && response.statusCode < 300) {
            body = { region: process.env.SPEECH_SERVICES_REGION, authorizationToken: body };
            res.send({
                authorizationToken: body.authorizationToken,
                region: body.region
            });
            console.log(`Someone requested a speech token...(${ response.statusCode })`);
        } else if (response.statusCode >= 400 && response.statusCode < 500) {
            res.send(response.statusCode);
        } else if (response.statusCode >= 500) {
            res.status(response.statusCode);
            res.send('Call to retrieve token failed');
        }
    });
});
const getSpeechToken = async (credentials = {}) => {
  const response = await fetch( `http://localhost:3500/speechservices/token`, {
    method: 'POST',
  } );
  if ( response.status === 200 ) {
    const { authorizationToken, region } = await response.json();
    credentials['authorizationToken'] = authorizationToken;
    credentials['region'] = region;
    return credentials;
  } else {
    console.log('error')
  }
}

const webSpeechPonyfillFactory = await window.WebChat.createCognitiveServicesSpeechServicesPonyfillFactory( {
  credentials: await getSpeechToken()
} );

render(
  <div>
    <ReactWebChat
      directLine={directLine}
      selectVoice={( voices, activity ) =>
        activity.locale === 'en-US' ?
          voices.find( ( { name } ) => /KatjaNeural/iu.test( name ) )
          :
          voices.find( ( { name } ) => /KatjaNeural/iu.test( name ) )
          || voices.find( ( { name } ) => /Apollo/iu.test( name ) )}
      webSpeechPonyfillFactory={webSpeechPonyfillFactory}
    />
    </div>,
  document.getElementById( 'webchat' )
  );

希望得到帮助!