PeterM
PeterM

Reputation: 21

How to terminate a Bot conversation (and get client details)?

I have a simple Bot as below:

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

    }

Once the form is completed the MyFormComplete callback is made.

First question - How do I get access to the client details in that function? I need to know the Skype handle so that I can map it to a internal user.

Secondly - After completing the form I can't start a new one. No matter what I enter on the client it just keeps triggering the callback function. There must be a way to terminate the session/conversation so that the next text from the Skype client will start a new conversation/form. Yeah?

Upvotes: 0

Views: 788

Answers (1)

PeterM
PeterM

Reputation: 21

Worked out how to get the Skype caller id inside the Dialog's CompletionDelegate. Simply add the message's From details to the message.BotUserData inside the MessageController before building the dialog.

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

I can then access this on the context within that callback.

Upvotes: 1

Related Questions