我下载了Azure机器人模板。现在,我的机器人正在工作,并回复了我所说的内容以及使用机器人框架模拟器运行它时有多少个字符的回声。但我希望我的机器人开始对话。我怎么做?我希望机器人无论用户输入如何先打招呼。 “异步后发布”方法仅在收到用户输入后才将消息打印到聊天中。
代码:
namespace BotApplication1.Dialogs
{
[Serializable]
public class RootDialog : IDialog<object>
{
public Task StartAsync(IDialogContext context)
{
Microsoft.Bot.Builder.Dialogs.Internals.IBotToUser($"Hi! Please type in a name of a public figure!");//compile time error
context.PostAsync($"Hello user");//prints the "hello user" only after user input
context.Wait(MessageReceivedAsync);
return Task.CompletedTask;
}
private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
{
var activity = await result as Activity;
// Calculate something for us to return
int length = (activity.Text ?? string.Empty).Length;
// Return our reply to the user
await context.PostAsync($"You sent {activity.Text} which was {length} characters");
context.Wait(MessageReceivedAsync);
}
}
}
有什么帮助吗?如果不在这里,那么在哪里问??? 请!
谢谢
哈达斯
答案 0 :(得分:0)
您应该在{strong> MessagesController 的conversationUpdate中而不是RootDialog中添加欢迎消息。
如果您的漫游器接收到一个表明用户已加入会话的对话更新活动,则可以选择通过向该用户发送欢迎消息来使其响应。
演示代码。
if (message.Type == ActivityTypes.ConversationUpdate)
{
// Handle conversation state changes, like members being added and removed
// Use Activity.MembersAdded and Activity.MembersRemoved and Activity.Action for info
// Not available in all channels
// Note: Add introduction here:
IConversationUpdateActivity update = message;
var client = new ConnectorClient(new Uri(message.ServiceUrl), new MicrosoftAppCredentials());
if (update.MembersAdded != null && update.MembersAdded.Any())
{
foreach (var newMember in update.MembersAdded)
{
if (newMember.Id != message.Recipient.Id)
{
var reply = message.CreateReply();
reply.Text = $"Welcome {newMember.Name}!";
client.Conversations.ReplyToActivityAsync(reply);
}
}
}
}