봇에서 Direct Line Speech 사용
적용 대상: SDK v4
Direct Line Speech는 Bot Framework의 새 WebSocket 기반 스트리밍 기능을 사용하여 Direct Line Speech 채널과 봇 간에 메시지를 교환합니다. Azure Portal에서 Direct Line Speech 채널을 사용하도록 설정한 후에는 이러한 WebSocket 연결을 수신 대기하고 수락하도록 봇을 업데이트해야 합니다. 이 지침에서는 이 작업을 수행하는 방법을 설명합니다.
최신 버전의 SDK로 업그레이드
Direct Line Speech의 경우 최신 버전의 Bot Builder SDK를 사용하고 있는지 확인합니다.
AddBot 및 UseBotFramework를 사용하는 경우 .NET Core 봇 업데이트
버전 4.3.2 이전의 Bot Builder SDK v4를 사용하여 봇을 만든 경우 봇은 BotController를 포함하지 않고 대신 Startup.cs 파일의 AddBot() 및 UseBotFramework() 메서드를 사용하여 봇이 메시지를 수신하는 POST 엔드포인트를 노출합니다. 새 스트리밍 엔드포인트를 노출하려면 BotController를 추가하고 AddBot() 및 UseBotFramework() 메서드를 제거해야 합니다. 이러한 지침은 수행해야 하는 변경 내용을 안내합니다. 이러한 변경 내용이 이미 있는 경우 다음 단계를 계속 진행합니다.
BotController.cs라는 파일을 추가하여 새 MVC 컨트롤러를 봇 프로젝트에 추가합니다. 이 파일에 컨트롤러 코드를 추가합니다.
[Route("api/messages")]
[ApiController]
public class BotController : ControllerBase
{
private readonly IBotFrameworkHttpAdapter _adapter;
private readonly IBot _bot;
public BotController(IBotFrameworkHttpAdapter adapter, IBot bot)
{
_adapter = adapter;
_bot = bot;
}
[HttpPost, HttpGet]
public async Task ProcessMessageAsync()
{
await _adapter.ProcessAsync(Request, Response, _bot);
}
}
Startup.cs 파일에서 Configure 메서드를 찾습니다. 줄을 UseBotFramework()
제거하고 다음 줄이 있는지 확인합니다.UseWebSockets
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseWebSockets();
app.UseMvc();
...
}
역시 Startup.cs 파일에서 ConfigureServices 메서드를 찾습니다. 줄을 제거하고 다음을 AddBot()
추가하기 위한 줄이 있는지 확인합니다 IBot
BotFrameworkHttpAdapter
.
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
services.AddSingleton<ICredentialProvider, ConfigurationCredentialProvider>();
services.AddSingleton<IChannelProvider, ConfigurationChannelProvider>();
// Create the Bot Framework Adapter.
services.AddSingleton<IBotFrameworkHttpAdapter, BotFrameworkHttpAdapter>();
// Create the bot as a transient. In this case the ASP Controller is expecting an IBot.
services.AddTransient<IBot, EchoBot>();
}
봇 코드의 재기본der는 동일하게 유지됩니다.
WebSocket이 사용하도록 설정되어 있는지 확인
EchoBot과 같은 템플릿 중 하나를 사용하여 Azure Portal에서 새 봇을 만들면 GET 및 POST 엔드포인트를 노출하고 WebSocket을 사용하는 ASP.NET MVC 컨트롤러가 포함된 봇이 생성됩니다. 이 지침에서는 템플릿을 업그레이드하거나 사용하지 않을 때 이러한 요소를 봇에 추가하는 방법을 설명합니다.
솔루션의 Controllers 폴더에서 BotController.cs 열기
클래스에서 PostAsync
메서드를 찾고, 해당 메서드의 장식을 [HttpPost]에서 [HttpPost, HttpGet]으로 업데이트합니다.
[HttpPost, HttpGet]
public async Task PostAsync()
{
await _adapter.ProcessAsync(Request, Response, _bot);
}
BotController.cs 저장 및 닫기
솔루션의 루트에서 Startup.cs를 엽니다.
Startup.cs에서 Configure 메서드의 아래쪽으로 이동합니다. 호출하기 app.UseMvc()
전에 호출을 추가합니다 app.UseWebSockets()
. 이는 이러한 사용 호출의 순서가 중요하기 때문에 중요합니다. 메서드의 끝은 다음과 같이 표시됩니다.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
...
app.UseDefaultFiles();
app.UseStaticFiles();
app.UseWebSockets();
app.UseMvc();
...
}
봇 코드의 재기본der는 동일하게 유지됩니다.
필요에 따라 활동에 대해 말하기 필드 설정
기본적으로 Direct Line Speech를 통해 사용자에게 전송되는 모든 메시지는 음성으로 전달됩니다.
필요에 따라 봇에서 보낸 모든 활동의 Speak 필드를 설정하여 메시지를 말하는 방법을 사용자 지정할 수 있습니다.
public IActivity Speak(string message)
{
var activity = MessageFactory.Text(message);
string body = @"<speak version='1.0' xmlns='https://www.w3.org/2001/10/synthesis' xml:lang='en-US'>
<voice name='Microsoft Server Speech Text to Speech Voice (en-US, JessaRUS)'>" +
$"{message}" + "</voice></speak>";
activity.Speak = body;
return activity;
}
다음 코드 조각은 이전 Speak
함수를 사용하는 방법을 보여줍니다.
protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
await turnContext.SendActivityAsync(Speak($"Echo: {turnContext.Activity.Text}"), cancellationToken);
}
추가 정보
음성 지원 봇을 만들고 사용하는 전체 예제는 자습서: Speech SDK를 사용하여 봇 음성 사용 기능을 참조하세요.