ChatApi/Services/Bot/ChatBotRHCall.cs
2024-11-28 22:49:03 -03:00

121 lines
5.0 KiB
C#

using ChatApi.Models;
using ChatApi.Services.Bot.Structs;
using ChatApi.Settings;
using Microsoft.Extensions.Options;
using Microsoft.SemanticKernel.ChatCompletion;
using System.Text;
namespace ChatApi.Services.Bot
{
public class ChatBotRHCall
{
private ChatBot _chatbot;
private readonly IChatCompletionService _chatCompletionService;
private readonly IHttpClientFactory _httpClientFactory;
private readonly IOptions<ChatRHSettings> _chatRHApiConfig;
public UserData UserData { get; set; }
Dictionary<string, string> _opcoesSolicitação =
new Dictionary<string, string> {
{ "Inclusão/Exclusão Alura", "Inclusão/Exclusão Alura"},
{ "Inclusão/Exclusão Auxílio Idioma", "Inclusão/Exclusão Auxílio Idioma"},
{ "Inclusão/Exclusão Plano Odonto", "Inclusão/Exclusão Plano Odonto"},
//{ "Envio de Atestado", "Envio de Atestado"},
//{ "Envio de Reembolso Idioma", "Envio de Reembolso Idioma"},
//{ "Afastamento e Licenças", "Afastamento e Licenças"},
{ "Dúvidas Plano de Saúde", "Dúvidas Plano de Saúde"},
{ "Dúvidas Folha de Pagamento", "Dúvidas Folha de Pagamento"},
{ "Ajuste Cargo/Salário", "Ajuste Cargo/Salário"},
{ "Feedbacks, reclamações", "Feedbacks, reclamações"},
{ "Feedz - Dúvida 1:1", "Feedz - Dúvida 1:1"},
{ "Feedz - Dúvida Feedback", "Feedz - Dúvida Feedback"},
{ "Feedz - Cadastro de Objetivo", "Feedz - Cadastro de Objetivo"},
{ "Feedz - Erro Cadastro", "Feedz - Erro Cadastro"},
{ "Feedz - Outros", "Feedz - Outros"},
{ "Ciclo de Performance", "Ciclo de Performance"},
{ "Declaração Bolsa Faculdade", "Declaração Bolsa Faculdade"},
{ "Inclusão/Exclusão Programa de Especialização", "Inclusão/Exclusão Programa de Especialização"},
//{ "Envio de Reembolso Especialização", "Envio de Reembolso Especialização"},
{ "DayOff", "DayOff"}
};
private readonly IOptions<DomvsDatabaseSettings> _config;
public ChatBotRHCall(
IOptions<DomvsDatabaseSettings> config,
IChatCompletionService chatCompletionService,
IHttpClientFactory httpClientFactory,
IOptions<ChatRHSettings> chatRHApiConfig)
{
_chatCompletionService = chatCompletionService;
_httpClientFactory = httpClientFactory;
_chatRHApiConfig = chatRHApiConfig;
_config = config;
}
public string SetAnswer(string sessionId, string resposta)
{
if (_chatbot==null)
{
this.Init(sessionId);
}
return _chatbot.SetAnswer(resposta);
}
public async Task<string> GetNextQuestion()
{
return await _chatbot.GetNextQuestion();
}
public string GetCurrentQuestion()
{
return _chatbot.GetCurrentQuestion();
}
public bool HasNextQuestion()
{
return _chatbot.HasNextQuestion();
}
public void Init(string sessionId)
{
var persist = ChatPersistence.Create(_config.Value).SetBotName("RHCall");
var actionOnEnd = new ActionCreateCall(_httpClientFactory, _chatRHApiConfig.Value);
_chatbot = new ChatBot(persist, sessionId, this.UserData, _chatCompletionService, actionOnEnd);
AddNumbersBeforShow(_opcoesSolicitação);
_chatbot.AddQuestion(new Question(
"Você quer fazer uma solicitação ao RH, certo??",
resposta => !string.IsNullOrEmpty(resposta)));
_chatbot.AddQuestion(new Question(
"Qual seu número de celular (com WhatsApp)?",
resposta => !string.IsNullOrEmpty(resposta) && resposta.Length >= 10));
var builder = new StringBuilder();
_opcoesSolicitação.Select(s => s.Value).ToList().ForEach(s => builder.AppendLine(s));
_chatbot.AddQuestion(new Question(
$"Indique o tipo de solicitação: \n {builder}",
resposta => resposta == "1" || resposta == "2" || resposta == "3"));
_chatbot.AddQuestion(new Question(
"Texto/Descrição da solicitação (em caso de dúvidas)",
resposta => !string.IsNullOrEmpty(resposta)));
_chatbot.AddQuestion(new Question(
"Tudo bem? Posso enviar sua solicitação? Ou prefere que eu tente fazer algum ajuste no texto da descrição?",
resposta => !string.IsNullOrEmpty(resposta)));
}
private void AddNumbersBeforShow(Dictionary<string, string> dict)
{
int optionNumber = 1;
foreach (var key in dict.Keys)
{
dict[key] = $"{optionNumber} - {dict[key]}";
optionNumber++;
}
}
}
}