public async Task <InterpretationResult> InterpretMessageAsync(string message, string contextId) { await EnsureSessionsClient().ConfigureAwait(false); var detectIntent = await _sessionsClient.DetectIntentAsync(new DetectIntentRequest { QueryInput = new QueryInput { Text = new TextInput { Text = message, LanguageCode = "de-DE" } }, Session = CreateSessionPath(_configuration.ProjectId, contextId) }).ConfigureAwait(false); return(new InterpretationResult { AnswerString = detectIntent.QueryResult.FulfillmentText, DetectedIntent = ParseIntentType(detectIntent.QueryResult.Intent.Name), IsCompleted = detectIntent.QueryResult.AllRequiredParamsPresent, Parameters = detectIntent.QueryResult.Parameters.Fields .ToDictionary(parameter => parameter.Key, parameter => parameter.Value.ToString().Trim('"')) }); }
private async Task <InternalModels.Dialog> GetResponseInternalAsync(InternalModels.Request request, SessionsClient client, ScopeContext context) { var intentRequest = CreateQuery(request, context); bool.TryParse(context.Parameters["LogQuery"], out var isLogQuery); if (isLogQuery) { _log.Trace($"Request:{System.Environment.NewLine}{intentRequest.Serialize()}"); } DetectIntentResponse intentResponse = await client.DetectIntentAsync(intentRequest); if (isLogQuery) { _log.Trace($"Response:{System.Environment.NewLine}{intentResponse.Serialize()}"); } var queryResult = intentResponse.QueryResult; var response = _mapper.Map <InternalModels.Dialog>(queryResult); response.ScopeKey = context.Parameters["ProjectId"]; return(response); }
public async Task <DetectIntentResponse> SendTextAsync(string text) { var result = await client.DetectIntentAsync(new SessionName(ProjectId, SessionId), new QueryInput { Text = new TextInput { Text = text, LanguageCode = LangCode } }); return(result); }
/// <summary>Snippet for DetectIntentAsync</summary> public async Task DetectIntentAsync() { // Snippet: DetectIntentAsync(string, QueryInput, CallSettings) // Additional: DetectIntentAsync(string, QueryInput, CancellationToken) // Create client SessionsClient sessionsClient = await SessionsClient.CreateAsync(); // Initialize request argument(s) string session = "projects/[PROJECT]/locations/[LOCATION]/agent/sessions/[SESSION]"; QueryInput queryInput = new QueryInput(); // Make the request DetectIntentResponse response = await sessionsClient.DetectIntentAsync(session, queryInput); // End snippet }
/// <summary>Snippet for DetectIntentAsync</summary> public async Task DetectIntentResourceNamesAsync() { // Snippet: DetectIntentAsync(SessionName, QueryInput, CallSettings) // Additional: DetectIntentAsync(SessionName, QueryInput, CancellationToken) // Create client SessionsClient sessionsClient = await SessionsClient.CreateAsync(); // Initialize request argument(s) SessionName session = SessionName.FromProjectLocationSession("[PROJECT]", "[LOCATION]", "[SESSION]"); QueryInput queryInput = new QueryInput(); // Make the request DetectIntentResponse response = await sessionsClient.DetectIntentAsync(session, queryInput); // End snippet }
public async Task <QueryResult> CheckIntent(string userInput, string LanguageCode = "en") { await CreateSession(); QueryInput queryInput = new QueryInput(); var queryText = new TextInput(); queryText.Text = userInput; queryText.LanguageCode = LanguageCode; queryInput.Text = queryText; // Make the request DetectIntentResponse response = await _sessionsClient.DetectIntentAsync(_sessionName, queryInput); return(response.QueryResult); }
public async Task <QueryResult> VerificarIntent(string chatID, string message) { _sessionsClient = await SessionsClient.CreateAsync(); _sessionName = new SessionName(chatbottelegramdio.project_id, chatID); QueryInput queryInput = new QueryInput(); var queryText = new TextInput(); queryText.Text = message; queryText.LanguageCode = "pt-BR"; queryInput.Text = queryText; DetectIntentResponse response = await _sessionsClient.DetectIntentAsync(_sessionName, queryInput); return(response.QueryResult); }
/// <summary>Snippet for DetectIntentAsync</summary> public async Task DetectIntentAsync_RequestObject() { // Snippet: DetectIntentAsync(DetectIntentRequest,CallSettings) // Additional: DetectIntentAsync(DetectIntentRequest,CancellationToken) // Create client SessionsClient sessionsClient = await SessionsClient.CreateAsync(); // Initialize request argument(s) DetectIntentRequest request = new DetectIntentRequest { SessionAsSessionName = new SessionName("[PROJECT]", "[SESSION]"), QueryInput = new QueryInput(), }; // Make the request DetectIntentResponse response = await sessionsClient.DetectIntentAsync(request); // End snippet }
/// <summary>Snippet for DetectIntentAsync</summary> public async Task DetectIntentRequestObjectAsync() { // Snippet: DetectIntentAsync(DetectIntentRequest, CallSettings) // Additional: DetectIntentAsync(DetectIntentRequest, CancellationToken) // Create client SessionsClient sessionsClient = await SessionsClient.CreateAsync(); // Initialize request argument(s) DetectIntentRequest request = new DetectIntentRequest { SessionAsSessionName = SessionName.FromProjectLocationAgentSession("[PROJECT]", "[LOCATION]", "[AGENT]", "[SESSION]"), QueryParams = new QueryParameters(), QueryInput = new QueryInput(), OutputAudioConfig = new OutputAudioConfig(), }; // Make the request DetectIntentResponse response = await sessionsClient.DetectIntentAsync(request); // End snippet }
public async Task <QueryResult> CheckIntent(string userInput, string LanguageCode = "ru") { await CreateSession(); DetectIntentResponse response; QueryInput queryInput = new QueryInput(); var queryText = new TextInput(); queryText.Text = userInput; queryText.LanguageCode = LanguageCode; queryInput.Text = queryText; try { response = await sessionsClient.DetectIntentAsync(sessionName, queryInput); } catch { response = null; } return(response.QueryResult); }
public async Task <Dialog> GetResponseAsync(Request request) { var intentRequest = CreateQuery(request); if (_configuration.LogQuery) { _log.Trace($"Request:{System.Environment.NewLine}{intentRequest.Serialize()}"); } var intentResponse = await _dialogflowClient.DetectIntentAsync(intentRequest); if (_configuration.LogQuery) { _log.Trace($"Response:{System.Environment.NewLine}{intentResponse.Serialize()}"); } var queryResult = intentResponse.QueryResult; var response = _mapper.Map <Dialog>(queryResult); return(response); }
static async Task HandleUpdateAsync(ITelegramBotClient botClient, Update update, CancellationToken cancellationToken) { if (update.Type == UpdateType.Message && update.Message != null && update.Message.Type == MessageType.Text) { long chatId = update.Message.Chat.Id; string messageText = update.Message.Text; if (messageText == "/start") { string menu = "/start - запуск\n/inline - меню\n/keyboard - сообщения\n/clearkeyboard - убрать кнопки"; await botClient.SendTextMessageAsync(chatId, menu, cancellationToken : cancellationToken); } else if (messageText == "/inline") { InlineKeyboardMarkup inlineKeyboard = new InlineKeyboardMarkup(new[] { new[] { InlineKeyboardButton.WithUrl("VK", "https://vk.com/mishanya167"), InlineKeyboardButton.WithUrl("LinkedIn", "https://www.linkedin.com/in/%D0%BC%D0%B8%D1%85%D0%B0%D0%B8%D0%BB-%D0%BA%D0%BE%D0%B2%D0%B0%D0%BB%D1%91%D0%B2-79637b164/") }, new[] { InlineKeyboardButton.WithCallbackData("Дата и время", "DateTime"), InlineKeyboardButton.WithCallbackData("Картинка", "Photo") } }); await botClient.SendTextMessageAsync(chatId, "Выберите пункт меню: ", replyMarkup : inlineKeyboard, cancellationToken : cancellationToken); } else if (messageText == "/keyboard") { ReplyKeyboardMarkup replayKeyBoard = new ReplyKeyboardMarkup(new[] { new[] { new KeyboardButton("Привет"), new KeyboardButton("Как дела?") }, new[] { KeyboardButton.WithRequestContact("Контакт"), KeyboardButton.WithRequestLocation("Геолокация") } }); await botClient.SendTextMessageAsync(chatId, "Выберите сообщение.", replyMarkup : replayKeyBoard, cancellationToken : cancellationToken); } else if (messageText == "/clearkeyboard") { await botClient.SendTextMessageAsync(chatId, "Кнопки убраны.", replyMarkup : new ReplyKeyboardRemove(), cancellationToken : cancellationToken); } else { SessionsClient sessionsClient = await SessionsClient.CreateAsync(); SessionName sessionName = new SessionName("small-talk-srqi", Guid.NewGuid().ToString()); QueryInput queryInput = new QueryInput { Text = new TextInput { Text = messageText, LanguageCode = "ru-Ru" } }; DetectIntentResponse response = await sessionsClient.DetectIntentAsync(sessionName, queryInput); if (response.QueryResult.FulfillmentMessages.Count > 0) { await botClient.SendTextMessageAsync(chatId, response.QueryResult.FulfillmentText, cancellationToken : cancellationToken); } else { await botClient.SendTextMessageAsync(chatId, "Прости, я тебя не понимаю.", cancellationToken : cancellationToken); } } } if (update.Type == UpdateType.CallbackQuery && update.CallbackQuery.Message != null) { string data = update.CallbackQuery.Data; if (data == "DateTime") { await botClient.AnswerCallbackQueryAsync(update.CallbackQuery.Id, DateTime.Now.ToString(), cancellationToken : cancellationToken); } if (data == "Photo") { await botClient.SendPhotoAsync(update.CallbackQuery.Message.Chat.Id, "https://big-rostov.ru/wp-content/uploads/2021/04/i-7-1.jpg", cancellationToken : cancellationToken); } } }
/// <summary> /// Обработчик сообщения боту /// </summary> /// <param name="sender">Объект отправивший сигнал</param> /// <param name="e">Событие отправки сообщения</param> private static async void Bot_OnMessage(object sender, Telegram.Bot.Args.MessageEventArgs e) { var message = e.Message; if (message == null) { return; // если сообщение null выходим из метода } long chatId = message.Chat.Id; // идентификатор чата // Получение и сохранение ботом фото, аудио, видео и документа (и отправка их назад пользователю) switch (message.Type) { case MessageType.Photo: // пользователь прислал фото string fileNamePhoto = message.Photo[message.Photo.Length - 1].FileUniqueId + ".jpeg"; // имя файла фото string fileIdPhoto = message.Photo[message.Photo.Length - 1].FileId; // идентификатор файла фото // Последнее фото в массиве PhotoSize является оригиналом DownLoad(fileIdPhoto, fileNamePhoto); // Отправка фото обратно await Bot.SendPhotoAsync(chatId, fileIdPhoto); break; case MessageType.Audio: // пользователь прислал аудио string fileNameAudio = message.Audio.Title + "." + message.Audio.MimeType.Split("/")[1]; // имя файла аудио string fileIdAudio = message.Audio.FileId; // идентификатор файла аудио DownLoad(fileIdAudio, fileNameAudio); // Отправка аудио обратно await Bot.SendAudioAsync(chatId, fileIdAudio); break; case MessageType.Video: // пользователь прислал видео string fileNameVideo = message.Video.FileUniqueId + "." + message.Video.MimeType.Split("/")[1]; // имя файла видео string fileIdVideo = message.Video.FileId; // идентификатор файла видео DownLoad(fileIdVideo, fileNameVideo); // Отправка аудио обратно await Bot.SendVideoAsync(chatId, fileIdVideo); break; case MessageType.Document: // пользователь прислал документ string fileNameDocument = message.Document.FileName; // имя файла документа string fileIdDocument = message.Document.FileId; // идентификатор файла документа DownLoad(fileIdDocument, fileNameDocument); // Отправка аудио обратно await Bot.SendDocumentAsync(chatId, fileIdDocument); break; case MessageType.Text: // Если чат пользователя в игре, то играем if (games.isFindId(chatId)) { string city = message.Text; // город, который отправил пользователь // Если пользователь решил выйти из игры if (city.ToUpper() == "КОНЕЦ") { games.removeGame(chatId); // удаляем игру return; } // Если город есть в "википедии" бота if (games.returnGame(chatId).isWikiKnowCity(city)) { string lastCityBot = games.returnGame(chatId).LastCityBotSay; // предыдущий названный ботом город // Если бот уже называл город if (!String.IsNullOrEmpty(lastCityBot)) { if (char.ToUpper(lastCityBot[lastCityBot.Length - 1]) == 'Ь') { if (char.ToUpper(lastCityBot[lastCityBot.Length - 2]) != char.ToUpper(city[0])) { await Bot.SendTextMessageAsync(chatId, $"Город должен начинаться на букву '{lastCityBot[lastCityBot.Length - 2]}'!"); return; } } else { if (char.ToUpper(lastCityBot[lastCityBot.Length - 1]) != char.ToUpper(city[0])) { await Bot.SendTextMessageAsync(chatId, $"Город должен начинаться на букву '{lastCityBot[lastCityBot.Length - 1]}'!"); return; } } } games.returnGame(chatId).delCitiyInWikiBOT(city); // удаляем город из общего списка городов ("википедии бота"), чтобы город не повторялся games.returnGame(chatId).delCityInKnowBOT(city); // удаляем город из "базы знаний" бота // Если город оканчивается на мягкий знак, то бот ищет в своей "базе знаний" город начинающийся на предпоследнюю букву if (city[city.Length - 1] == 'ь') { city = games.returnGame(chatId).cityWhoBotKnow(city[city.Length - 2]); } else { city = games.returnGame(chatId).cityWhoBotKnow(city[city.Length - 1]); } // Если бот не может дать ответ то завершаем игру if (String.IsNullOrEmpty(city)) { await Bot.SendTextMessageAsync(chatId, "Молодец, выигрышь за тобой!"); await Bot.SendTextMessageAsync(chatId, "конец"); Console.WriteLine($"Выиграл! username: '******', имя: '{message.Chat.FirstName}', фамилия: {message.Chat.LastName}"); // логирование games.removeGame(chatId); // удаляем игру return; } games.returnGame(chatId).LastCityBotSay = city; // последний названный ботом город (для проверки следующего города, введенного пользователем) string htmlCity = $"<i>{city}</i>"; await Bot.SendTextMessageAsync(chatId, htmlCity, parseMode : ParseMode.Html); games.returnGame(chatId).delCitiyInWikiBOT(city); // удаляем город из общего списка городов ("википедии бота"), чтобы город не повторялся games.returnGame(chatId).delCityInKnowBOT(city); // удаляем город из "базы знаний" бота } else { // Если города нет в "википедии" бота, либо его уже называли await Bot.SendTextMessageAsync(chatId, $"Город '{city}' моя Википедия не знает! Возможно этот город уже называли."); return; } return; } break; default: break; } if (message.Text == null) { return; // если текст сообщения null выходим из метода } // Сообщение от бота (в формате HTML) var answerText = "Меня зовут Сказочник.\nЯ люблю общаться с людьми, рассказывать разные сказки и играть в 'Города'!\n\n" + "<b>Выбери команду:</b>\n" + "/start - <i>запуск бота</i>\n" + "/menu - <i>вывод меню</i>"; switch (message.Text) { case "/start": await Bot.SendTextMessageAsync(chatId, answerText, ParseMode.Html); // вывод начального сообщения break; case "/menu": // Создаем меню (клавиатуру) var inlineKeyboard = new InlineKeyboardMarkup(new[] { new[] { InlineKeyboardButton.WithCallbackData(menu["Story"]) }, new[] { InlineKeyboardButton.WithCallbackData(menu["Sities"]) } }); await Bot.SendTextMessageAsync(chatId, "<b>Чем займемся?</b>", parseMode : ParseMode.Html, replyMarkup : inlineKeyboard); break; default: // Общение с ботом через DialogFlow // Инициализируем аргументы ответа SessionName session = SessionName.FromProjectSession(projectID, sessionID); var queryInput = new QueryInput { Text = new TextInput { Text = message.Text, LanguageCode = "ru-ru" } }; // Создаем ответ пользователю DetectIntentResponse response = await dFlowClient.DetectIntentAsync(session, queryInput); answerText = response.QueryResult.FulfillmentText; if (answerText == "") { // Intents для непонятных боту фраз queryInput.Text.Text = "непонятно"; } // Создаем ответ пользователю, если введен непонятный вопрос (набор букв) response = await dFlowClient.DetectIntentAsync(session, queryInput); answerText = response.QueryResult.FulfillmentText; Console.WriteLine($"Общается username: '******', имя: '{message.Chat.FirstName}', фамилия: {message.Chat.LastName}"); // логирование await Bot.SendTextMessageAsync(chatId, answerText); // отправляем пользователю ответ break; } }