2016-04-18 5 views
0

Ich habe eine einfache Bot wie folgt:Wie man eine Botkonversation beendet (und Kundendetails erhält)?

[Serializable] 
[Template(TemplateUsage.NotUnderstood, "I do not understand \"{0}\".", "Try again, I don't get \"{0}\".")] 
class MyOrder 
{ 
    public string Subject; 
    public string Description; 

    public static IForm<MyOrder> BuildForm() 
    { 

     return new FormBuilder<MyOrder>() 
        .Field(nameof(MyOrder.Subject), "What Subject should I use?") 
        .Field(nameof(MyOrder.Description), "And what Description?") 
        .AddRemainingFields() 
        .OnCompletionAsync(MyFormComplete) 
        .Build(); 
    } 


    private static async Task MyFormComplete(IDialogContext context, MyOrder order) 
    { 

     if (order != null) 
     { 
      await context.PostAsync($"Created. Number is 9833"); 
     } 
     else 
     { 
      await context.PostAsync("Form returned empty response!"); 
     } 

    } 

Sobald das Formular der MyFormComplete Rückruf erfolgt abgeschlossen ist.

Erste Frage - Wie bekomme ich Zugang zu den Kundendetails in dieser Funktion? Ich muss das Skype-Handle kennen, damit ich es einem internen Benutzer zuordnen kann.

Zweitens - Nach dem Ausfüllen des Formulars kann ich kein neues beginnen. Egal, was ich auf dem Client eingebe, es löst nur die Callback-Funktion aus. Es muss eine Möglichkeit geben, die Sitzung/Konversation zu beenden, damit der nächste Text vom Skype-Client eine neue Konversation/ein neues Formular startet. Ja?

+0

Okay, ich habe herausgefunden, wie die Konversation wieder zu bekommen, indem Sie Chain.From (FormDialog.FromForm (MyOrder.BuildForm)) verwenden. Aber ich muss immer noch wissen, wie ich die Skype-CallerID in die Callback-Funktion bringen kann. Es existiert innerhalb des Kontextes, aber nur als ein privater. Gibt es einen Mechanismus oder ein anderes Muster, das ich verwenden sollte, um die callerId bei der Verarbeitung der Dialogdaten zu kennen? – PeterM

Antwort

1

Ausgearbeitet, wie man die Skype Anrufer ID in das CompletionDelegate des Dialogs bekommt. Fügen Sie einfach die Nachricht From details zu den message.BotUserData innerhalb der MessageController hinzu, bevor Sie das Dialogfeld erstellen.

message.BotUserData = JObject.FromObject(message.From) 

Ich kann dann auf diesen Kontext in diesem Rückruf zugreifen.