Как я могу создать ChatBot, который извлекает данные из базы данных SQL Azure, используя .NET - PullRequest
0 голосов
/ 13 сентября 2018

Моя общая идея заключается в том, что мне нужно разработать чат-бот для проверки сотрудника.

Например.Сотрудник может ввести свой идентификатор или идентификатор электронной почты сотрудника - в соответствии с идентификатором электронной почты, я хочу получать данные из базы данных, такие как ежегодный отпуск и личный отпуск этого конкретного сотрудника.И дает результаты пользователю в подсказке ChatBot.

Для этого я попытался соединить свой .NET BotAPP с базой данных SQL Azure, но не смог пройти через него.

Может кто-нибудь помочь мне решить этот вопрос?

Здесь я собираюсь добавить код всех различных файлов

Web.Config

 <appSettings>
<!-- update these with your Microsoft App Id and your Microsoft App Password-->
<add key="BotId" value="MY BOT ID" />
<add key="MicrosoftAppId" value="My APP ID" />
<add key="MicrosoftAppPassword" value="My APP PWD" />
<add key="StorageConnectionString" value="MY Database Connection String" />

Global.asax

 public class WebApiApplication : System.Web.HttpApplication
{
    protected void Application_Start()
    {
        Conversation.UpdateContainer(
            builder =>
            {
                builder.RegisterModule(new AzureModule(Assembly.GetExecutingAssembly()));

                // Using Azure Table Storage
                var store = new TableBotDataStore(ConfigurationManager.AppSettings["AzureWebJobsStorage"]); builder.Register(c => store)
                    .Keyed<IBotDataStore<BotData>>(AzureModule.Key_DataStore)
                    .AsSelf()
                    .SingleInstance();

            });
        GlobalConfiguration.Configure(WebApiConfig.Register);
    }

}

MessageController.cs

namespace Microsoft.Bot.Sample.SimpleEchoBot{[BotAuthentication]
public class MessagesController : ApiController
{
    [ResponseType(typeof(void))]
    public virtual async Task<HttpResponseMessage> Post([FromBody] Activity activity)
    {
        // check if activity is of type message
        if (activity != null && activity.GetActivityType() == ActivityTypes.Message)
        {
            await Conversation.SendAsync(activity, () => new EchoDialog());
        }
        else
        {
            HandleSystemMessage(activity);
        }
        return new HttpResponseMessage(System.Net.HttpStatusCode.Accepted);
    }

    private Activity HandleSystemMessage(Activity message)
    {
        if (message.Type == ActivityTypes.DeleteUserData)
        {
        }
        else if (message.Type == ActivityTypes.ConversationUpdate)
        {
        }
        else if (message.Type == ActivityTypes.ContactRelationUpdate)
        {
        }
        else if (message.Type == ActivityTypes.Typing)
        {
        }
        else if (message.Type == ActivityTypes.Ping)
        {
        }

        return null;
    }
}

}

EchoDialog.cs

namespace Microsoft.Bot.Sample.SimpleEchoBot{
[Serializable]
public class EchoDialog : IDialog<object>
{
    protected int count = 1;

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

    public async Task MessageReceivedAsync(IDialogContext context, IAwaitable<IMessageActivity> argument)
    {
        var message = await argument;

        if (message.Text == "reset")
        {
            PromptDialog.Confirm(
                context,
                AfterResetAsync,
                "Are you sure you want to reset the count?",
                "Didn't get that!",
                promptStyle: PromptStyle.Auto);
        }
        else
        {
            await context.PostAsync($"{this.count++}: You said {message.Text}");
            context.Wait(MessageReceivedAsync);
        }
    }

    public async Task AfterResetAsync(IDialogContext context, IAwaitable<bool> argument)
    {
        var confirm = await argument;
        if (confirm)
        {
            this.count = 1;
            await context.PostAsync("Reset count.");
        }
        else
        {
            await context.PostAsync("Did not reset count.");
        }
        context.Wait(MessageReceivedAsync);
    }

}

}

Имя таблицы: EmployeeLeave EmployeeId EmployeeEmail AnnualLeave PersonalLeave EmployeeName EmployeeOffice EmployeeTitle

Теперь, кто-нибудь может мне помочь, как я могу получить информацию о конкретном сотруднике?

...