Bot Builder v4에서 봇 개발 : 기술 개발 - 4개의 메시지 유형에 대한 액션 추가
15035 단어 SKILLBotFrameworkBotbuilderMicrosoft
추가할 액션
현재 시간을 반환하는 작업을 추가합니다.
LUIS 업데이트
메시지 타입은 LUIS 로 판정을 실시하기 때문에, 우선은 LUIS 의 갱신으로부터 실시합니다.
1. Deployment\Resources\LU\en-us\HelloSkill.lu를 열고 다음을 추가합니다.
## GetTime
- what time is it now?
- tell me current time
- show me current time
- Do you know what time it is now?
- get current time
2. PowerShell에서 모델 업데이트.
cd <プロジェクトフォルダ>
.\Deployment\Scripts\update_cognitive_models.ps1
3. 결과를 확인.
4. LUIS 측에서도 확인.
5. Services\HelloSkillLuis.cs에 새 의도가 있는지 확인합니다.
Response 추가
그런 다음 메시지를 추가합니다. 본래는 전언어 추가합니다만, 여기에서는 영어만으로 합니다.
1. Responses 폴더에 GetTimeResponses.lg를 추가합니다.
> ------------ Activity templates ------------
# CurrentTimeMessage
[Activity
Text = @{CurrentTimeText()}
InputHint = acceptingInput
]
> ------------ Text templates ------------
# CurrentTimeText
- It's @{CurrentTime}
2. 언어 파일은 지원하는 분 필요하므로, 파일을 카피해 확장자를 각각의 언어로 설정.
3. Startup.cs에서 템플릿에 추가.
var templateFiles = new List<string>() { "MainResponses", "SampleResponses", "GetTimeResponses" };
4. Visual Studio에서 각 파일의 속성에서 "Copy if newer"를 선택합니다.
매니페스트 업데이트
dispatchModels\intents에 GetTime을 추가하기만 하면 됩니다.
GetTimeDialog 추가
1. Dialogs 폴더에 GetTimeDialog.cs를 추가합니다.
GetTimeDialog.csusing System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Builder.Dialogs;
namespace HelloSkill.Dialogs
{
public class GetTimeDialog : SkillDialogBase
{
public GetTimeDialog(
IServiceProvider serviceProvider,
IBotTelemetryClient telemetryClient)
: base(nameof(GetTimeDialog), serviceProvider, telemetryClient)
{
var getTimeWaterfall = new WaterfallStep[]
{
GetCurrentTime,
End,
};
AddDialog(new WaterfallDialog(nameof(GetTimeDialog), getTimeWaterfall));
InitialDialogId = nameof(GetTimeDialog);
}
private async Task<DialogTurnResult> GetCurrentTime(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
dynamic currentTime = new { CurrentTime = DateTime.Now.ToString() };
var response = TemplateEngine.GenerateActivityForLocale("CurrentTimeMessage", currentTime);
await stepContext.Context.SendActivityAsync(response);
return await stepContext.NextAsync();
}
private Task<DialogTurnResult> End(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
return stepContext.EndDialogAsync();
}
}
}
2. Startup.cs에 대화 상자를 추가합니다.
// Register dialogs
services.AddTransient<SampleDialog>();
services.AddTransient<SampleAction>();
services.AddTransient<GetTimeDialog>();
services.AddTransient<MainDialog>();
3. MainDialog.cs에서 MainDialog 클래스 속성에 GetTimeDialog를 추가합니다.
MainDialog.csprivate GetTimeDialog _getTimeDialog;
4. 생성자에서 인스턴스를 가져옵니다.
MainDialog.cs_getTimeDialog = serviceProvider.GetService<GetTimeDialog>();
AddDialog(_getTimeDialog);
5. RouteStepAsync 메서드로 분기를 추가합니다.
MainDialog.csswitch (intent)
{
case HelloSkillLuis.Intent.Sample:
{
return await stepContext.BeginDialogAsync(_sampleDialog.Id);
}
case HelloSkillLuis.Intent.GetTime:
{
return await stepContext.BeginDialogAsync(_getTimeDialog.Id);
}
case HelloSkillLuis.Intent.None:
default:
{
// intent was identified but not yet implemented
await stepContext.Context.SendActivityAsync(_templateEngine.GenerateActivityForLocale("UnsupportedMessage"));
return await stepContext.NextAsync();
}
}
동작 확인
구현이 끝났기 때문에 즉시 테스트해 보겠습니다.
로컬 테스트
구현이 끝났으므로 먼저 단독으로 테스트합니다. F5를 눌러 디버그 실행. 에뮬레이터로 동작을 확인.
공개 및 테스트
이번에는 어시스턴트 봇을 통해 테스트를 실시합니다.
1. publish.ps1 스크립트로 스킬을 공개.
.\Deployment\Scripts\publish.ps1 -name kenakamuhelloskill-om7pvdw -resourceGroup kenakamuhelloskill
2. 변경된 매니페스트를 확인.
3. 어시스턴트 봇 측도 botskills update 로 스킬을 갱신.
botskills update --remoteManifest "https://kenakamuhelloskill-om7pvdw.azurewebsites.net/manifest/manifest-1.1.json" --cs --luisFolder "<HelloSkill へのパス>\Deployment\Resources\LU\"
4. 어시스턴트 봇용 Dispatch LUIS 앱에서 HellSkill에 새 예문이 추가되었는지 확인합니다.
5. 어시스턴트 봇도 Azure에 게시하여 동작을 확인합니다.
.\Deployment\Scripts\publish.ps1 -name kenakamumyassistant-qbp5igb -resourceGroup kenakamumyassistant
요약
메시지 타입의 스킬은 지금까지의 지식으로 거의 동작이 이루어집니다. 다음번에는 이벤트 타입의 스킬에 대해 살펴보겠습니다.
다음 기사로
목차로 돌아가기
Reference
이 문제에 관하여(Bot Builder v4에서 봇 개발 : 기술 개발 - 4개의 메시지 유형에 대한 액션 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kenakamu/items/f78e0e1579ae9c6b1606
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
## GetTime
- what time is it now?
- tell me current time
- show me current time
- Do you know what time it is now?
- get current time
cd <プロジェクトフォルダ>
.\Deployment\Scripts\update_cognitive_models.ps1
> ------------ Activity templates ------------
# CurrentTimeMessage
[Activity
Text = @{CurrentTimeText()}
InputHint = acceptingInput
]
> ------------ Text templates ------------
# CurrentTimeText
- It's @{CurrentTime}
var templateFiles = new List<string>() { "MainResponses", "SampleResponses", "GetTimeResponses" };
using System;
using System.Threading;
using System.Threading.Tasks;
using Microsoft.Bot.Builder;
using Microsoft.Bot.Builder.Dialogs;
namespace HelloSkill.Dialogs
{
public class GetTimeDialog : SkillDialogBase
{
public GetTimeDialog(
IServiceProvider serviceProvider,
IBotTelemetryClient telemetryClient)
: base(nameof(GetTimeDialog), serviceProvider, telemetryClient)
{
var getTimeWaterfall = new WaterfallStep[]
{
GetCurrentTime,
End,
};
AddDialog(new WaterfallDialog(nameof(GetTimeDialog), getTimeWaterfall));
InitialDialogId = nameof(GetTimeDialog);
}
private async Task<DialogTurnResult> GetCurrentTime(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
dynamic currentTime = new { CurrentTime = DateTime.Now.ToString() };
var response = TemplateEngine.GenerateActivityForLocale("CurrentTimeMessage", currentTime);
await stepContext.Context.SendActivityAsync(response);
return await stepContext.NextAsync();
}
private Task<DialogTurnResult> End(WaterfallStepContext stepContext, CancellationToken cancellationToken)
{
return stepContext.EndDialogAsync();
}
}
}
// Register dialogs
services.AddTransient<SampleDialog>();
services.AddTransient<SampleAction>();
services.AddTransient<GetTimeDialog>();
services.AddTransient<MainDialog>();
private GetTimeDialog _getTimeDialog;
_getTimeDialog = serviceProvider.GetService<GetTimeDialog>();
AddDialog(_getTimeDialog);
switch (intent)
{
case HelloSkillLuis.Intent.Sample:
{
return await stepContext.BeginDialogAsync(_sampleDialog.Id);
}
case HelloSkillLuis.Intent.GetTime:
{
return await stepContext.BeginDialogAsync(_getTimeDialog.Id);
}
case HelloSkillLuis.Intent.None:
default:
{
// intent was identified but not yet implemented
await stepContext.Context.SendActivityAsync(_templateEngine.GenerateActivityForLocale("UnsupportedMessage"));
return await stepContext.NextAsync();
}
}
구현이 끝났기 때문에 즉시 테스트해 보겠습니다.
로컬 테스트
구현이 끝났으므로 먼저 단독으로 테스트합니다. F5를 눌러 디버그 실행. 에뮬레이터로 동작을 확인.
공개 및 테스트
이번에는 어시스턴트 봇을 통해 테스트를 실시합니다.
1. publish.ps1 스크립트로 스킬을 공개.
.\Deployment\Scripts\publish.ps1 -name kenakamuhelloskill-om7pvdw -resourceGroup kenakamuhelloskill
2. 변경된 매니페스트를 확인.
3. 어시스턴트 봇 측도 botskills update 로 스킬을 갱신.
botskills update --remoteManifest "https://kenakamuhelloskill-om7pvdw.azurewebsites.net/manifest/manifest-1.1.json" --cs --luisFolder "<HelloSkill へのパス>\Deployment\Resources\LU\"
4. 어시스턴트 봇용 Dispatch LUIS 앱에서 HellSkill에 새 예문이 추가되었는지 확인합니다.
5. 어시스턴트 봇도 Azure에 게시하여 동작을 확인합니다.
.\Deployment\Scripts\publish.ps1 -name kenakamumyassistant-qbp5igb -resourceGroup kenakamumyassistant
요약
메시지 타입의 스킬은 지금까지의 지식으로 거의 동작이 이루어집니다. 다음번에는 이벤트 타입의 스킬에 대해 살펴보겠습니다.
다음 기사로
목차로 돌아가기
Reference
이 문제에 관하여(Bot Builder v4에서 봇 개발 : 기술 개발 - 4개의 메시지 유형에 대한 액션 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/kenakamu/items/f78e0e1579ae9c6b1606
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(Bot Builder v4에서 봇 개발 : 기술 개발 - 4개의 메시지 유형에 대한 액션 추가), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/kenakamu/items/f78e0e1579ae9c6b1606텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)