У меня есть чат-бот QnA, размещенный на Azure с использованием Bot Framework v.4. У меня есть приветственное сообщение, которое должно быть отправлено, когда пользователь подключается к боту. В эмуляторе это работает нормально, но когда я пытаюсь подключиться из мобильного приложения xamarin.forms, приветственное сообщение не срабатывает, а отправляется только после того, как пользователь отправил сообщение.
Я довольно новичок в создании ботов, и я не уверен, что это лучшая практика, но в настоящее время у меня есть логика приветствия в моем промежуточном программном обеспечении для моего бота. Вот код:
public async Task OnTurnAsync(ITurnContext context, NextDelegate next, CancellationToken cancellationToken)
{
Activity activity = context.Activity;
if (activity.Type is ActivityTypes.Message)
{
//handle message
}
else if (activity.Type == ActivityTypes.ConversationUpdate)
{
if (context.Activity.MembersAdded != null)
{
await SendWelcomeMessageAsync(context, cancellationToken);
}
}
}
private static async Task SendWelcomeMessageAsync(ITurnContext turnContext, CancellationToken cancellationToken)
{
//send welcome message when user joins the channel
foreach (ChannelAccount member in turnContext.Activity.MembersAdded)
{
if (member.Id != turnContext.Activity.Recipient.Id)
{
Activity reply = turnContext.Activity.CreateReply();
reply.Text = Strings.WelcomeText;
await turnContext.SendActivityAsync(reply, cancellationToken);
}
}
}
Для моего мобильного приложения я следовал этому примеру , чтобы создать основу моего мобильного приложения xamarin.
Я предполагал, что в сервисе BotConnector.cs из этого примера этот стартовый код прямого диалога вызовет ConversationUpdate в моей логике бота:
public async Task SetUpAsync()
{
if (!started)
{
BotConversation = await Client.Conversations
.StartConversationAsync().ConfigureAwait(false);
started = true;
}
}
Однако приветственное сообщение никогда не запускается, как предполагалось, и вместо этого отправляется с другим действием, как только пользователь отправляет сообщение первым.
Есть ли что-то другое, что вам нужно сделать в Xamarin, чтобы вызвать ConversationUpdate в моей логике бота?