Bot Framework에서 Slack bot 빌드 노트
12021 단어 슬랙BotFrameworkbot
Slack bot 구성 방법은 Bot Framework 사이트 에서 Slack 설정을 추가할 때 나타나는 단계에 따라 진행할 수 있습니다.
이하에서는, 구축시의 작업 메모나 주의점에 대해서 간단하게 써 둡니다.
(1) 개발 환경에서의 실행에 대해서
로컬 개발 환경에서는 Visual Studio에서 시작한 bot API에 Bot Framework Channel Emulator에서 연결할 수 있지만 [디버그 없이 시작(Ctrl+F5)]에서는 401 오류가 발생합니다.
[디버그 시작(F5)]에서 실행하면 연결할 수 있습니다.
이것은 Controller 에 BotAuthentication 속성이 붙어 있기 (위해)때문에, 디버거에 첨부 되고 있을 때는 인증 불필요하게 되기 (위해)때문에입니다.
따라서 개발 환경에서는 [디버그 시작(F5)]에서 실행합시다.
(2) 계정 정보 설정 정보
Azure에 게시된 API의 Web.config appSettings에 계정 정보를 설정하려면 Azure 포털의 응용 프로그램 설정을 사용하는 것이 좋습니다.
(3) 클라이언트에서 텍스트 표시 정보
텍스트는 기본적으로 Markdown 형식입니다. 입니다. 따라서 기호 등을 사용할 때는 주의가 필요합니다.
또한 reply.TextFormat을 plain으로 설정해도 Web Chat에서는 유효하지 않습니다.
또한 reply.TextFormat을 plain으로 설정해도 Slack에서는 왜 *가 _로 표시됩니다.
(4) Activity.Type 정보
Slack은 activity.Type이 ActivityTypes.Message가 아닌 요청을 보낼 수 있습니다.
activity.Type 의 값에 의해 처리를 분기시키지 않으면, 응답 메세지가 중복해 표시되어 버립니다.
(5) URL 전송 정보
Slack에서 URL을 보내면 bot 측에서 수신하는 텍스트는 URL을 <와 >로 묶습니다.
위의 (4), (5)를 근거로 개량한 것이 다음의 소스 코드입니다.
전체 소스 코드는 EmotionBotApi (GitHub)에 있습니다.
MessagesController.cs
public async Task<HttpResponseMessage> Post([FromBody]Activity activity)
{
if (activity.Type != ActivityTypes.Message)
return Request.CreateResponse(HttpStatusCode.OK);
if (string.IsNullOrWhiteSpace(activity.Text))
return Request.CreateResponse(HttpStatusCode.OK);
var connector = new ConnectorClient(new Uri(activity.ServiceUrl));
// In Slack, URLs are qualified by '<' and '>'.
var text = activity.Text.Trim('<', '>');
var echoMessage = $"You sent this picture. \n![]({text})";
await Reply(connector, activity, echoMessage);
var mainMessage = await GetEmotionsAsync(text);
await Reply(connector, activity, mainMessage);
return Request.CreateResponse(HttpStatusCode.OK);
}
static async Task<string> GetEmotionsAsync(string text)
{
if (!Uri.IsWellFormedUriString(text, UriKind.Absolute)) return "Send the URL of a picture.";
var emotions = await RecognizeEmotionsAsync(text);
if (emotions == null) return "The emotions recognition failed.";
if (emotions.Length == 0) return "Nobody is recognized.";
var topScore = emotions[0].Scores
.ToRankedList()
.First();
return $"{topScore.Key}: {topScore.Value:P1}";
}
static async Task<Emotion[]> RecognizeEmotionsAsync(string imageUrl)
{
var client = new EmotionServiceClient(SubscriptionKey);
try
{
return await client.RecognizeAsync(imageUrl);
}
catch (Exception)
{
return null;
}
}
static async Task Reply(ConnectorClient connector, Activity activity, string message)
{
var reply = activity.CreateReply(message);
await connector.Conversations.ReplyToActivityAsync(reply);
}
다음과 같이 HTTP 상태 코드 202에서 메시지를 반환합니다.
await connector.Conversations.ReplyToActivityAsync(reply);
완료되면 HTTP 상태 코드 200을 반환합니다.
return Request.CreateResponse(HttpStatusCode.OK);
Slack에서 실행할 때의 스크린 샷입니다.
소인수분해 bot 에 대해서는 Bot Framework에서 Slack bot 구성 에 썼습니다.
만든 샘플
BotSample (GitHub)
버전 정보
.NET Framework 4.6
Microsoft.Bot.Builder 3.3.0
Microsoft.ProjectOxford.Emotion 1.0.331.1
Reference
이 문제에 관하여(Bot Framework에서 Slack bot 빌드 노트), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/saka_pon/items/946a3d185cc1d5c1bf6b텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)