Chatbot - 메세지 보내기 및 받기


문자 메시지 보내기 및 받기

봇이 사용자와 커뮤니케이션 하는 수단은 ** 메세지 ** 이다.

메세지는 보통 일반 텍스트로 구성되지만 일부 메세지는 카드나 첨부 파일처럼 다양한 서식과 콘텐츠를 포함할 수 있다.

텍스트 메세지 보내기

단문 메세지를 보내려면 보낼 문자열을 지정하여 보낸다.

봇의 작업처리기에서 순서 컨텍스트 개체의 “SendActivityAsync” method를 이용하여 단문 메세지를 보낸다. “SendActivitiesAsync”를 사용하면 한 번에 여러 메세지를 보낼 수도 있다.

await turnContext.SendActivityAsync($"Welcome!");

텍스트 메세지 수신

단문 메세지를 수신하려면 작업 개체의 텍스트 속성을 이용한다.

봇의 작업 처리기에서 아래 코드를 이용하여 메세지를 수신한다.

var responseMessage = turnContext.Activity.Text;

Typing 표시기 보내기

사용자는 자기가 메세지를 보내면 봇이 제때제때 응답할 것을 기대한다. 당연한 얘기지만 봇이 사용자가 메세지를 보냈는데도 메세지를 받았다는 표시를 안하고 서버를 호출하거나 쿼리를 실행하는 것과 같이 장시간 실행되는 작업을 수행할 경우, 사용자가 봇에 문제가 있다고 여기거나 추가로 메세지를 보낼 수도 있다.

웹 채팅 및 Direct Line 채널 봇이 메세지가 수신돼서 처리되고 있다는 것을 사용자에게 “타이핑 표시 전송”을 통해 보여줄 수도 있다. 단 봇이 15초 이내에 답을 해야 한다. 그렇지 않으면 커넥터 서비스가 시간이 초과된다.

protected override async Task OnMessageActivityAsync(ITurnContext<IMessageActivity> turnContext, CancellationToken cancellationToken)
{
    if (string.Equals(turnContext.Activity.Text, "wait", System.StringComparison.InvariantCultureIgnoreCase))
    {
        await turnContext.SendActivitiesAsync(
            new Activity[] {
                new Activity { Type = ActivityTypes.Typing },
                new Activity { Type = "delay", Value= 3000 },
                MessageFactory.Text("Finished typing", "Finished typing"),
            },
            cancellationToken);
    }
    else
    {
        var replyText = $"Echo: {turnContext.Activity.Text}. Say 'wait' to watch me type.";
        await turnContext.SendActivityAsync(MessageFactory.Text(replyText, replyText), cancellationToken);
    }
}

=> 이거 한 번 실습 해봐야겠다