Aggiungere un Comando - RetiSpA/botler GitHub Wiki

Aggiungere un Comando

Per aggiungere un nuovo comando oltre alla creazione dell'entità relativa aggiunta in LUIS vanno seguiti questi passi:

  1. Creare una classe concreta che implementi l'interfaccia ICommand

Esempio:

    public class AreaRiservataCommand : ICommand
    {
        private readonly ITurnContext _turn;

        private readonly BotlerAccessors _accessors;

        public AreaRiservataCommand(ITurnContext turn, BotlerAccessors accessors)
        {
            _turn = turn ?? throw new ArgumentNullException(nameof(turn));
            _accessors = accessors ?? throw new ArgumentNullException(nameof(accessors));
        }

        public async Task ExecuteCommandAsync()
        {
           var alreadyAuth = await AuthenticationHelper.UserAlreadyAuthAsync(_turn, _accessors);

           if (alreadyAuth)
            {
                ISendAttachment send = SendAttachmentFactory.FactoryMethod(MenuDipedenti);
                await send.SendAttachmentAsync(_turn);
                await _accessors.TurnOffQnAAsync(_turn);
            }
            else
            {
                await _turn.SendActivityAsync(RandomResponses(AutenticazioneNecessariaResponse));
            }
        }
    }

Si tratta del comando che mostra il menu riservato ai dipendenti che avrà al suo interno tutte le possibili funzionalità riservate agli utenti.

  1. Inserire la string con il nome del comando creato in LUIS, nel file Enviroment.cs nella class statica:
    public static class Commands
    {
        ...

        public const string CommandAreaRiservata = "commandAreaRiservata";
        
        ...
    }
  1. Aggiungere il riconoscimento di questa stringa nella classe CommandFactory per essere creato dal CommandRecognizer all'occorrenza.
    public class CommandFactory
    {
        public static ICommand FactoryMethod(ITurnContext turn, BotlerAccessors accessors, string  entity)
        {
            ...

            if (AreaRiservataCommandFound(entity))
            {
                return new AreaRiservataCommand(turn, accessors);
            }
          
            ...
        }
    
        ...

        private static bool AreaRiservataCommandFound(string ent)
        {
          return ent.Equals(CommandAreaRiservata);
        }
        ...

E' questo è tutto, ovviamente implementare il metodo ExecuteCommand() secondo le esigenze.