2016-05-15 11 views
5

Używam programu Microsoft Bot Framework FormFlow, aby poprosić użytkownika o wypełnienie formularza. Po ukończeniu go, że Dialog kończy i sposób określony dla parametru ResumeWith (w tym przypadku quoteComplete) jest wykonywany:Jak można uzyskać opóźnioną odpowiedź w programie Microsoft Bot Framework

var quoteForm = new FormDialog<Quote>(new Quote(), 
    quoteFormBuilder.BuildForm, FormOptions.PromptInStart); 

context.Call<Quote>(quoteForm, quoteComplete); 

W quoteComplete Chcę bot poinformować użytkownika, że ​​jest coraz cytatów i że może ona trwa kilka sekund. Wywołanie asynchroniczne wykonywanie cytat jest następnie zrobić i na jego powrocie chcę bot pokazać kolejną wiadomość z wartością Cytat:

await context.PostAsync("I will now calculate your quote. I won't be long..."); 
context.Wait(MessageReceived); 

//Simulate getting the quote 
Task.Delay(5000).ContinueWith(t => 
{ 
    context.PostAsync("Your quote is £133.54"); 
}); 

Próbowałem również po poradę w dokumentacji do wysyłania wielu odpowiedzi, umieszczając to w Delay().ContinueWith:

var message = context.MakeMessage(); 
message.Text = "Your quote is for £133.54"; 
var connector = new ConnectorClient(); 
connector.Messages.SendMessage(message); 

Jednakże pojawia się błąd Access Denied do tego.

+0

Czy kiedykolwiek to rozwiązałeś? –

+0

Obawiam się, że nie - wciąż mam nadzieję, że ktoś z odpowiedzią się zepsuje! :( –

Odpowiedz

2

Spróbuj instancji klienta w następujący sposób

using (var scope = DialogModule.BeginLifetimeScope(Conversation.Container, message)) { var client = scope.Resolve<IConnectorClient>(); client.Messages.SendMessage(message); }

+0

Wielkie dzięki za to , ale zastanawiam się, czy mógłbyś zaktualizować swoją odpowiedź z wyjaśnieniem, dlaczego jest to konieczne? W przeciwnym razie po prostu wycinam i wkleja więcej magii SO! :) –

0

Powinieneś być w stanie korzystać z ConnectorClient wysłać odpowiedź do wiadomości przychodzących raz zadanie asynchroniczny dostaje wynik

Here's link do dokumentacji

+0

To jest to, co próbowałem na mojej drugiej próbie w moim OP, ale dostałem Odmowa dostępu.Jest tam łatwy sposób na skonstruowanie wiadomości - to nie jest oczywiste, jak bym użył CreateReplyMessage kiedy jestem inicjatorem wiadomości –

Powiązane problemy