2016-05-15 11 views
5

Sto utilizzando Microsoft Bot Framework FormFlow per ottenere un utente per completare un modulo. Dopo aver completato quella finestra di dialogo si conclude e il metodo specificato per il parametro ResumeWith (in questo caso quoteComplete) viene eseguita:Come posso dare una risposta ritardata in Microsoft Bot Framework

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

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

In quoteComplete Voglio il bot per dire all'utente che si sta facendo un preventivo e che essa può richiede alcuni secondi. Una chiamata asincrona per eseguire la citazione viene poi fatto e su di essa la restituzione voglio il bot per mostrare un altro messaggio con il valore della citazione:

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

Ho provato anche seguendo i consigli nella documentazione per l'invio di risposte multiple mettendo questo nel Delay().ContinueWith:

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

Tuttavia ottengo un errore Access Denied per questo.

+0

Hai mai risolto questo? –

+0

Ho paura di no - spero ancora che qualcuno con una risposta si scheggierà! :( –

risposta

2

Prova istanziare il cliente nel modo seguente

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

+0

Molte grazie per questo , ma mi chiedo se è possibile aggiornare la risposta con una spiegazione del motivo per cui è necessario? In caso contrario, ho solo tagliato e incollato più SO magia! :) –

0

Si dovrebbe essere in grado di utilizzare il ConnectorClient di inviare una risposta al messaggio in arrivo una volta il vostro compito asincrona si ottiene un risultato

Here's il link alla documentazione

+0

Questo è quello che ho provato nel mio secondo tentativo nel mio OP, ma ho ottenuto l'accesso negato. C'è un modo semplice per costruire il messaggio - non è ovvio come vorrei usare CreateReplyMessage quando sto iniziando il messaggio. –

Problemi correlati