如何通过bot从用户收集数据

时间:2018-03-20 06:18:39

标签: c# .net azure-sql-database botframework

我需要从用户那里收集一些数据,通过使用microsoft bot框架并将这些数据存储在Azure数据库中的bot?任何人都可以帮助正确的代码示例和链接?提前谢谢。

要求 :需要向特定用户询问他的nsme,电子邮件地址和电话号码,并将其存储在数据库中。

2 个答案:

答案 0 :(得分:0)

  

只需要向特定用户询问他的nsme,电子邮件地址和电话号码,并将其存储在数据库中

要达到此要求,您可以参考以下示例代码来收集用户信息。

[Serializable]
public class RootDialog : IDialog<object>
{
    string name;
    string email;
    string phone;

    public Task StartAsync(IDialogContext context)
    {
        context.Wait(MessageReceivedAsync);

        return Task.CompletedTask;
    }

    private async Task MessageReceivedAsync(IDialogContext context, IAwaitable<object> result)
    {
        var activity = await result as Activity;

        if (activity.Text.ToLower().Contains("ok"))
        {
            PromptDialog.Text(
                context: context,
                resume: ResumeGetName,
                prompt: "Please share your name",
                retry: "Please try again."
            );
        }
        else
        {
            context.Done(this);
        }

        //context.Wait(MessageReceivedAsync);
    }

    public async Task ResumeGetName(IDialogContext context, IAwaitable<string> Username)
    {
        string uname = await Username;
        name = uname;

        PromptDialog.Text(
            context: context,
            resume: ResumeGetEmail,
            prompt: "Please share your Email",
            retry: "Please try again."
        );
    }

    public async Task ResumeGetEmail(IDialogContext context, IAwaitable<string> UserEmail)
    {
        string uemail = await UserEmail;
        email = uemail; 

        PromptDialog.Text(
            context: context,
            resume: ResumeGetPhone,
            prompt: "Please share your Phone Number",
            retry: "Please try again."
        );
    }
    public async Task ResumeGetPhone(IDialogContext context, IAwaitable<string> mobile)
    {
        string response = await mobile;
        phone = response;

        //in this Resume handler, you can save the data that you collected from user into your sql database

        await context.PostAsync($"your name:{name}, email:{email}, phonenumber: {phone}");

        context.Done(this);
    }
}

测试结果:

enter image description here

答案 1 :(得分:-1)

是的,您可以使用bot来收集用户的信息。关于bot的开发存在形式的概念,它允许我们为用户创建问题流。我们习惯于使用C#,连接字符串和INSERT语句来管理SQL端。 Here您会找到有关表单的文档。这些是使用表单的两个示例:(1)(2)

基本上,您使用收集数据所需的字段创建实体。通过这个,我们创建了表单流,并且随着实体,机器人将向用户请求信息。它将显示选项并提供最终摘要。

以下代码显示如何使用C#连接到SQL Azure数据库:

using System;
using System.Data.SqlClient;   // System.Data.dll 
//using System.Data;           // For:  SqlDbType , ParameterDirection

namespace csharp_db_test
{
   class Program
   {
      static void Main(string[] args)
      {
         try
         {
            var cb = new SqlConnectionStringBuilder();
            cb.DataSource = "your_server.database.windows.net";
            cb.UserID = "your_user";
            cb.Password = "your_password";
            cb.InitialCatalog = "your_database";

            using (var connection = new SqlConnection(cb.ConnectionString))
            {
               connection.Open();

               Submit_Tsql_NonQuery(connection, "2 - Create-Tables",
                  Build_2_Tsql_CreateTables());

               Submit_Tsql_NonQuery(connection, "3 - Inserts",
                  Build_3_Tsql_Inserts());

               Submit_Tsql_NonQuery(connection, "4 - Update-Join",
                  Build_4_Tsql_UpdateJoin(),
                  "@csharpParmDepartmentName", "Accounting");

               Submit_Tsql_NonQuery(connection, "5 - Delete-Join",
                  Build_5_Tsql_DeleteJoin(),
                  "@csharpParmDepartmentName", "Legal");

               Submit_6_Tsql_SelectEmployees(connection);
            }
         }
         catch (SqlException e)
         {
            Console.WriteLine(e.ToString());
         }
         Console.WriteLine("View the report output here, then press any key to end the program...");
         Console.ReadKey();
      }

Here您将找到有关如何从C#连接到SQL Azure的更多信息。