首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用微软机器人框架向瀑布对话机器人添加直接语音

使用微软机器人框架向瀑布对话机器人添加直接语音
EN

Stack Overflow用户
提问于 2020-10-15 01:58:17
回答 1查看 180关注 0票数 0

我正在尝试在我的对话机器人中添加使用直接线路语音通道的功能。我正在阅读微软的教程,关于如何做到这一点,但他们只是使用回声机器人。我希望能够使用对话机器人,并返回声音。我已经在azure中创建了一个语音资源,并在azure上的bot资源中实现了直接线路语音通道。有没有人成功地将语音添加到对话机器人中?我读到有语音提示选项,但我在PromptOptions对象中找不到该属性。

EN

回答 1

Stack Overflow用户

发布于 2020-11-17 07:50:49

语音的配置方式取决于你打算使用的类型,这也意味着可能会更新你的机器人以及你正在使用的客户端。

关于客户端(即通道)的快速说明-通道是决定是否支持语音的因素。例如:

  • 除了设计呼叫机器人外,团队中不支持语音转文本。
  • Cortana不再是公开产品,现在只能通过企业帐户访问。
  • Web Chat构建在直接线路之上,并将DL Speech集成到其中,支持CS和DL Speech
    • 请务必注意,DL Speech是独立于直接线路的独立频道,因此它需要在机器人中添加额外的代码。default.
    • Custom-built客户端使用DL或DL Speech将要求您内置允许语音到work.

的功能,位于BotBuilder-Samples的示例包含此代码

  • 其他通道,如电报、松弛等,是特定于通道的,当然,不依赖CS或DL语音来启用。支持语音的自定义构建的第三方通道需要您参考该通道的implementation.

文档

关于DL Speech,您需要添加/更新您的机器人的index.js代码,以包含以下内容:

代码语言:javascript
复制
[...]

// Catch-all for errors.
const onTurnErrorHandler = async (context, error) => {
    // This check writes out errors to console log .vs. app insights.
    // NOTE: In production environment, you should consider logging this to Azure
    //       application insights. See https://aka.ms/bottelemetry for telemetry 
    //       configuration instructions.
    console.error(`\n [onTurnError] unhandled error: ${ error }`);

    // Send a trace activity, which will be displayed in Bot Framework Emulator
    await context.sendTraceActivity(
        'OnTurnError Trace',
        `${ error }`,
        'https://www.botframework.com/schemas/error',
        'TurnError'
    );

    // Send a message to the user
    await context.sendActivity('The bot encountered an error or bug.');
    await context.sendActivity('To continue to run this bot, please fix the bot source code.');
};

// Set the onTurnError for the singleton BotFrameworkAdapter.
adapter.onTurnError = onTurnErrorHandler;

[...]

// Listen for Upgrade requests for Streaming.
server.on('upgrade', (req, socket, head) => {
    // Create an adapter scoped to this WebSocket connection to allow storing session data.
    const streamingAdapter = new BotFrameworkAdapter({
        appId: process.env.MicrosoftAppId,
        appPassword: process.env.MicrosoftAppPassword
    });
    // Set onTurnError for the BotFrameworkAdapter created for each connection.
    streamingAdapter.onTurnError = onTurnErrorHandler;

    streamingAdapter.useWebSocket(req, socket, head, async (context) => {
        // After connecting via WebSocket, run this logic for every request sent over
        // the WebSocket connection.
        await myBot.run(context);
    });
});

然后,在网络聊天中,您将传入以下内容。(您可以在此DL Speech sample中参考以下代码。另外,请注意,您需要将"fetch“地址更新为您自己的API以生成令牌。):

代码语言:javascript
复制
[...]

const fetchCredentials = async () => {
    const res = await fetch('https://webchat-mockbot-streaming.azurewebsites.net/speechservices/token', {
      method: 'POST'
});

if (!res.ok) {
    throw new Error('Failed to fetch authorization token and region.');
}

const { region, token: authorizationToken } = await res.json();
    return { authorizationToken, region };
};

// Create a set of adapters for Web Chat to use with Direct Line Speech channel.
const adapters = await window.WebChat.createDirectLineSpeechAdapters({
    fetchCredentials
});

// Pass the set of adapters to Web Chat.
window.WebChat.renderWebChat(
    {
        ...adapters
    },
    document.getElementById('webchat')
);

[...]

以下是一些额外的资源,可以帮助您更好地理解DL语音:

时,它将有助于减少语音错误

关于CS Speech,您需要有一个活动的Cognitive Services subscription。一旦你在Azure中设置了你的语音服务,你就可以使用订阅密钥来生成用于启用CS语音的令牌(你也可以参考这个网络聊天sample。不需要对机器人进行更改即可启用。(同样,您需要设置一个用于生成令牌的API,因为最佳实践是不在HTML中包含任何键。这就是我在这个例子中获取DL令牌的方法):

代码语言:javascript
复制
let authorizationToken;
let region = '<<SPEECH SERVICES REGION>>';

const response = await fetch( `https://${ region }.api.cognitive.microsoft.com/sts/v1.0/issueToken`, {
  method: 'POST',
  headers: {
    'Ocp-Apim-Subscription-Key': '<<SUBSCRIPTION KEY>>'
  }
} );
if ( response.status === 200 ) {
  authorizationToken = await response.text(),
    region
} else {
  console.log( 'error' )
}

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

const res = await fetch( 'http://localhost:3500/directline/token', { method: 'POST' } );
const { token } = await res.json();

window.WebChat.renderWebChat(
  {
    directLine: window.WebChat.createDirectLine( {
      token: token
    } ),
    webSpeechPonyfillFactory: webSpeechPonyfillFactory,
  },
  document.getElementById( 'webchat' )
);

其他资源:

希望能帮上忙!

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64358991

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档