Пример #1
0
        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);
        }
Пример #3
0
        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
        }
Пример #6
0
    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
        }
Пример #10
0
        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);
        }
Пример #11
0
        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);
        }
Пример #12
0
        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);
                }
            }
        }
Пример #13
0
        /// <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;
            }
        }