121 lines
5.0 KiB
C#
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++;
|
|
}
|
|
}
|
|
}
|
|
}
|