2016-05-15 10 views
5

Ich benutze Microsoft Bot Framework FormFlow, um einen Benutzer zum Ausfüllen eines Formulars zu erhalten. Nachdem sie abgeschlossen, dass Dialog beendet und das Verfahren für den ResumeWith Parameter angegeben (in diesem Fall quoteComplete) ausgeführt wird:Wie gebe ich eine verzögerte Antwort in Microsoft Bot Framework

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

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

In quoteComplete ich den Bot möchte den Benutzer sagen, dass es sich um ein Angebot bekommen und es kann dauert ein paar Sekunden. Ein asynchroner Aufruf das Zitat ausführen wird dann getan und auf seine Rückkehr möchte ich den bot eine weitere Nachricht mit dem Wert des Zitats zeigen:

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"); 
}); 

Ich habe auch versucht, in der Dokumentation folgende Ratschläge für mehrere Antworten zu senden, indem sie dies im Delay().ContinueWith:

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

aber ich erhalte eine Access Denied Fehler für diese.

+0

Haben Sie das jemals gelöst? –

+0

Ich fürchte nicht - immer noch hoffen, dass jemand mit einer Antwort einspringen wird! :( –

Antwort

2

Versuchen Sie, den Client auf folgende Weise instanziieren

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

+0

Vielen Dank dafür , aber ich frage mich, ob du deine Antwort mit einer Erklärung aktualisieren kannst, warum das notwendig ist? Ansonsten schneide ich einfach mehr SO Magie! :) –

0

Sie sollten die ConnectorClient nutzen können eine Antwort auf die eingehende Nachricht zu senden, sobald Ihre async Aufgabe Sie ein Ergebnis bekommt

Here's der Link zur Dokumentation

+0

Das ist, was ich bei meinem zweiten Versuch in meinem OP versuchte, aber Zugriff verweigert. Gibt es eine einfache Möglichkeit, die Nachricht zu konstruieren - es ist nicht offensichtlich, wie ich CreateReplyMessage verwenden würde, wenn ich die Nachricht initiiere. –

Verwandte Themen