문자 메시지 보내기 및 받기
이 문서의 내용
적용 대상: SDK v4
봇이 사용자와 통신하고 마찬가지로 통신을 받는 기본 방법은 메시지 활동을 통해 서입니다. 일부 메시지에는 일반 텍스트만 포함될 수 있지만 다른 메시지에는 카드 또는 첨부 파일과 같은 다양한 콘텐츠가 포함될 수 있습니다. 봇의 전환 처리기는 사용자로부터 메시지를 수신하고 거기서부터 사용자에게 응답을 보낼 수 있습니다. 전환 컨텍스트 개체는 메시지를 다시 사용자에게 보내기 위한 메서드를 제공합니다. 이 문서에서는 일반 문자 메시지를 보내는 방법을 설명합니다.
Markdown은 대부분의 텍스트 필드에 지원되지만 채널별로 지원이 다를 수 있습니다.
실행 중인 봇이 메시지를 보내고 받는 경우 목차 맨 위에 있는 빠른 시작을 따르거나 봇의 작동 방식에 대한 문서를 확인 하세요. 이 문서는 사용자가 직접 실행할 수 있는 샘플에도 연결됩니다.
참고 항목
Bot Framework JavaScript, C#및 Python SDK는 계속 지원되지만 Java SDK는 2023년 11월에 종료되는 최종 장기 지원으로 사용 중지됩니다.
Java SDK를 사용하여 빌드된 기존 봇은 계속 작동합니다.
새 봇 빌드의 경우 Microsoft Copilot Studio를 사용하고 올바른 부조종사 솔루션 선택에 대해 알아봅니다.
자세한 내용은 봇 빌드의 미래를 참조 하세요 .
문자 메시지 보내기
문자 메시지를 보내려면 작업으로 보낼 문자열을 지정합니다.
봇의 활동 처리기에서 턴 상황에 맞는 개체의 SendActivityAsync
메서드를 사용하여 단일 메시지 반응을 읽습니다. 개체의 SendActivitiesAsync
메서드를 사용하여 한 번에 여러 응답을 보낼 수도 있습니다.
await turnContext.SendActivityAsync($"Welcome!");
봇의 활동 처리기에서 턴 상황에 맞는 개체의 sendActivity
메서드를 사용하여 단일 메시지 반응을 읽습니다. 개체의 sendActivities
메서드를 사용하여 한 번에 여러 응답을 보낼 수도 있습니다.
await context.sendActivity("Welcome!");
봇의 활동 처리기에서 턴 상황에 맞는 개체의 sendActivity
메서드를 사용하여 단일 메시지 반응을 읽습니다. 개체의 sendActivities
메서드를 사용하여 한 번에 여러 응답을 보낼 수도 있습니다.
turnContext.sendActivity("Welcome!");
봇의 활동 처리기에서 턴 상황에 맞는 개체의 send_activity
메서드를 사용하여 단일 메시지 반응을 읽습니다.
await turn_context.send_activity("Welcome!")
LG(언어 생성 )는 컴퍼지션 및 확장에 사용되는 하나 이상의 텍스트 변형을 포함하는 템플릿을 제공합니다.
제공된 변형 중 하나는 LG 시스템에 의해 임의로 선택됩니다.
다음 예제에서는 두 가지 변형이 포함된 봇 응답 템플릿을 보여 줍니다.
# GreetingPrefix
- Hi
- Hello
문자 메시지 받기
문자 메시지를 처리하려면 활동 개체의 텍스트 속성을 사용합니다.
봇의 작업 처리기에서 다음 코드를 사용하여 메시지를 수신합니다.
var responseMessage = turnContext.Activity.Text;
봇의 작업 처리기에서 다음 코드를 사용하여 메시지를 수신합니다.
let text = turnContext.activity.text;
봇의 작업 처리기에서 다음 코드를 사용하여 메시지를 수신합니다.
String responseMessage = turnContext.getActivity().getText();
봇의 작업 처리기에서 다음 코드를 사용하여 메시지를 수신합니다.
response = context.activity.text
.lg 파일에 다음 LG 템플릿을 추가하여 메시지를 수신합니다.
# EchoMessage
You said '${turn.activity.text}'
타이핑 표시기 보내기
사용자는 메시지에 적시에 응답할 것으로 예상합니다. 봇이 사용자의 요청을 들었다는 표시를 하지 않고 서버를 호출하거나 쿼리를 실행하는 것과 같이 장기간 실행되는 작업을 수행하는 경우, 사용자가 기다리지 못하고 추가로 메시지를 보내거나 봇에 문제가 있는 것으로 추측할 수 있습니다.
웹 채팅 및 직접 회선 채널 봇은 사용자에게 메시지가 수신되고 처리되고 있음을 표시하는 입력 표시의 전송을 지원할 수 있습니다. 그러나 봇은 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);
}
}
this.onMessage(async (context, next) => {
if (context.activity.text === 'wait') {
await context.sendActivities([
{ type: ActivityTypes.Typing },
{ type: 'delay', value: 3000 },
{ type: ActivityTypes.Message, text: 'Finished typing' }
]);
} else {
await context.sendActivity(`You said '${ context.activity.text }'. Say "wait" to watch me type.`);
}
await next();
});
@Override
protected CompletableFuture<Void> onMessageActivity(TurnContext turnContext) {
if (turnContext.getActivity().getText().toLowerCase().equals("wait")) {
List<Activity> activities = new ArrayList<Activity>();
activities.add(new Activity(ActivityTypes.TYPING));
activities.add(new Activity(ActivityTypes.DELAY) {{setValue(3000);}});
activities.add(MessageFactory.text("Finished typing", "Finished typing", null));
return turnContext.sendActivities(activities).thenApply(result -> null);
} else {
return turnContext.sendActivity(MessageFactory.text("Echo: " + turnContext.getActivity().getText()))
.thenApply(sendResult -> null);
}
}
async def on_message_activity(self, turn_context: TurnContext):
if turn_context.activity.text == "wait":
return await turn_context.send_activities([
Activity(
type=ActivityTypes.typing
),
Activity(
type="delay",
value=3000
),
Activity(
type=ActivityTypes.message,
text="Finished Typing"
)
])
else:
return await turn_context.send_activity(
f"You said {turn_context.activity.text}. Say 'wait' to watch me type."
)
# TypingIndicator
[Activity
Type = typing
]
추가 리소스
다음 단계