public IActionResult Index(string userSay) { //由 google api console 建立服務帳號, 並匯出存取token System.Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", @"D:\temp\worldmap-1357-c80b706e2fa6.json"); var input = new TextInput { Text = userSay, LanguageCode = "zh-TW" }; // Create client SessionsClient sessionsClient = SessionsClient.Create(); // Initialize request argument(s) DetectIntentRequest request = new DetectIntentRequest { SessionAsSessionName = SessionName.FromProjectSession("worldmap-1357", "[SESSION]"), QueryParams = new QueryParameters(), QueryInput = new QueryInput() { Text = input }, OutputAudioConfig = new OutputAudioConfig(), InputAudio = ByteString.Empty, OutputAudioConfigMask = new FieldMask(), }; // Make the request DetectIntentResponse response = sessionsClient.DetectIntent(request); //將訊息傳送給 View 做顯示 ViewData["response"] = response.QueryResult.FulfillmentText; return(View()); }
public async stt::Task DetectIntentRequestObjectAsync() { moq::Mock <Sessions.SessionsClient> mockGrpcClient = new moq::Mock <Sessions.SessionsClient>(moq::MockBehavior.Strict); DetectIntentRequest request = new DetectIntentRequest { SessionAsSessionName = SessionName.FromProjectLocationAgentSession("[PROJECT]", "[LOCATION]", "[AGENT]", "[SESSION]"), QueryParams = new QueryParameters(), QueryInput = new QueryInput(), OutputAudioConfig = new OutputAudioConfig(), }; DetectIntentResponse expectedResponse = new DetectIntentResponse { ResponseId = "response_id17f822e1", QueryResult = new QueryResult(), OutputAudio = proto::ByteString.CopyFromUtf8("output_audio7e712c4b"), OutputAudioConfig = new OutputAudioConfig(), ResponseType = DetectIntentResponse.Types.ResponseType.Partial, AllowCancellation = true, }; mockGrpcClient.Setup(x => x.DetectIntentAsync(request, moq::It.IsAny <grpccore::CallOptions>())).Returns(new grpccore::AsyncUnaryCall <DetectIntentResponse>(stt::Task.FromResult(expectedResponse), null, null, null, null)); SessionsClient client = new SessionsClientImpl(mockGrpcClient.Object, null); DetectIntentResponse responseCallSettings = await client.DetectIntentAsync(request, gaxgrpc::CallSettings.FromCancellationToken(st::CancellationToken.None)); xunit::Assert.Same(expectedResponse, responseCallSettings); DetectIntentResponse responseCancellationToken = await client.DetectIntentAsync(request, st::CancellationToken.None); xunit::Assert.Same(expectedResponse, responseCancellationToken); mockGrpcClient.VerifyAll(); }
public ActionResult GetEvent(string eventName, string sessionId) { try { var client = SessionsClient.Create(); DetectIntentRequest request = new DetectIntentRequest(); request.SessionAsSessionName = new SessionName(_projectAgentName.ProjectId, sessionId); request.QueryInput = new QueryInput { Event = new EventInput { Name = eventName, LanguageCode = "pt-br" } }; request.QueryParams = new QueryParameters(); DetectIntentResponse response = client.DetectIntent(request); var queryResult = response.QueryResult; return(Ok(queryResult)); } catch (Exception ex) { return(StatusCode(500, ex.Message)); } }
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 ActionResult DetectIntentFromTexts(string q, string sessionId) { try { var client = SessionsClient.Create(); DetectIntentRequest request = new DetectIntentRequest(); request.SessionAsSessionName = new SessionName(_projectAgentName.ProjectId, sessionId); request.QueryInput = new QueryInput { Text = new TextInput() { Text = q, LanguageCode = "pt-br" } }; DetectIntentResponse response = client.DetectIntent(request); var queryResult = response.QueryResult; return(Ok(queryResult)); } catch (Exception ex) { return(StatusCode(500, ex.Message)); } }
/// <summary> /// 呼叫 Dialogflow 識別出意圖 /// </summary> /// <param name="userSay"></param> /// <returns></returns> public DetectIntentResponse CallDialogFlow(string userSay) { //由 google api console 建立服務帳號, 並匯出存取token System.Environment.SetEnvironmentVariable("GOOGLE_APPLICATION_CREDENTIALS", @"認證檔.json"); var input = new TextInput { Text = userSay, LanguageCode = "zh-TW" }; // Create client SessionsClient sessionsClient = SessionsClient.Create(); // Initialize request argument(s) DetectIntentRequest request = new DetectIntentRequest { SessionAsSessionName = SessionName.FromProjectSession("worldmap-1357", "[SESSION]"), QueryParams = new QueryParameters(), QueryInput = new QueryInput() { Text = input }, OutputAudioConfig = new OutputAudioConfig(), InputAudio = ByteString.Empty, OutputAudioConfigMask = new FieldMask(), }; // Make the request DetectIntentResponse response = sessionsClient.DetectIntent(request); return(response); }
public void DetectIntentRequestObject() { moq::Mock <Sessions.SessionsClient> mockGrpcClient = new moq::Mock <Sessions.SessionsClient>(moq::MockBehavior.Strict); DetectIntentRequest request = new DetectIntentRequest { SessionAsSessionName = SessionName.FromProjectLocationSession("[PROJECT]", "[LOCATION]", "[SESSION]"), QueryParams = new QueryParameters(), QueryInput = new QueryInput(), OutputAudioConfig = new OutputAudioConfig(), InputAudio = proto::ByteString.CopyFromUtf8("input_audio0acdfb28"), }; DetectIntentResponse expectedResponse = new DetectIntentResponse { ResponseId = "response_id17f822e1", QueryResult = new QueryResult(), WebhookStatus = new gr::Status(), OutputAudio = proto::ByteString.CopyFromUtf8("output_audio7e712c4b"), OutputAudioConfig = new OutputAudioConfig(), }; mockGrpcClient.Setup(x => x.DetectIntent(request, moq::It.IsAny <grpccore::CallOptions>())).Returns(expectedResponse); SessionsClient client = new SessionsClientImpl(mockGrpcClient.Object, null); DetectIntentResponse response = client.DetectIntent(request); xunit::Assert.Same(expectedResponse, response); mockGrpcClient.VerifyAll(); }
/// <summary>Snippet for DetectIntent</summary> public void DetectIntentResourceNames() { // Snippet: DetectIntent(SessionName, QueryInput, CallSettings) // Create client SessionsClient sessionsClient = SessionsClient.Create(); // Initialize request argument(s) SessionName session = SessionName.FromProjectLocationSession("[PROJECT]", "[LOCATION]", "[SESSION]"); QueryInput queryInput = new QueryInput(); // Make the request DetectIntentResponse response = sessionsClient.DetectIntent(session, queryInput); // End snippet }
public string Query(string Question) { if (channel != null) { if(channel.State == Grpc.Core.ChannelState.Shutdown || channel.State == Grpc.Core.ChannelState.TransientFailure) { channel = null; } } if (channel == null) Init(); var query = new QueryInput { Text = new TextInput { Text = Question, LanguageCode = "en-us" } }; DetectIntentResponse dialogFlow =null; try { dialogFlow = client.DetectIntent( new SessionName(AgentID, sessionId), query ); } catch (Exception ex) { NetworkError.Message = ex.Message; NetworkError.StackTrace = ex.ToString(); return "I am unable to access the internet network. Can you please make sure your network is online?"; } dialogFlowString = dialogFlow.ToString(); Response.CreateResponseObject(dialogFlowString); QueryResult = dialogFlow.QueryResult.ToString(); FulfillmentText = dialogFlow.QueryResult.FulfillmentText; if (FulfillmentText.Trim() == "") FulfillmentText = "I am sorry, I do not have a comment at this moment. Can you try again?"; if (IsChannelKeepAlive == false) { channel.ShutdownAsync(); } return FulfillmentText; }
/// <summary>Snippet for DetectIntent</summary> public void DetectIntent() { // Snippet: DetectIntent(string, QueryInput, CallSettings) // Create client SessionsClient sessionsClient = SessionsClient.Create(); // Initialize request argument(s) string session = "projects/[PROJECT]/locations/[LOCATION]/agent/sessions/[SESSION]"; QueryInput queryInput = new QueryInput(); // Make the request DetectIntentResponse response = sessionsClient.DetectIntent(session, queryInput); // End snippet }
void PlayAudio(DetectIntentResponse response) { Debug.Log("Playing the audio"); byte[] bytes = response.OutputAudio.ToByteArray(); var wav = new Wav(bytes); var audioClip = AudioClip.Create("Sound", wav.SampleCount, 1, wav.Frequency, false); audioClip.SetData(wav.LeftChannel, 0); audioOut.clip = audioClip; audioOut.Play(); }
/// <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 }
/// <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 DetectIntent</summary> public void DetectIntent_RequestObject() { // Snippet: DetectIntent(DetectIntentRequest,CallSettings) // Create client SessionsClient sessionsClient = SessionsClient.Create(); // Initialize request argument(s) DetectIntentRequest request = new DetectIntentRequest { SessionAsSessionName = new SessionName("[PROJECT]", "[SESSION]"), QueryInput = new QueryInput(), }; // Make the request DetectIntentResponse response = sessionsClient.DetectIntent(request); // 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); }
/// <summary>Snippet for DetectIntent</summary> public void DetectIntentRequestObject() { // Snippet: DetectIntent(DetectIntentRequest, CallSettings) // Create client SessionsClient sessionsClient = SessionsClient.Create(); // 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 = sessionsClient.DetectIntent(request); // End snippet }
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 }
public void DetectIntent2() { Mock <Sessions.SessionsClient> mockGrpcClient = new Mock <Sessions.SessionsClient>(MockBehavior.Strict); DetectIntentRequest request = new DetectIntentRequest { SessionAsSessionName = new SessionName("[PROJECT]", "[SESSION]"), QueryInput = new QueryInput(), }; DetectIntentResponse expectedResponse = new DetectIntentResponse { ResponseId = "responseId1847552473", }; mockGrpcClient.Setup(x => x.DetectIntent(request, It.IsAny <CallOptions>())) .Returns(expectedResponse); SessionsClient client = new SessionsClientImpl(mockGrpcClient.Object, null); DetectIntentResponse response = client.DetectIntent(request); Assert.Same(expectedResponse, response); mockGrpcClient.VerifyAll(); }
public async Task DetectIntentAsync2() { Mock <Sessions.SessionsClient> mockGrpcClient = new Mock <Sessions.SessionsClient>(MockBehavior.Strict); DetectIntentRequest request = new DetectIntentRequest { SessionAsSessionName = new SessionName("[PROJECT]", "[SESSION]"), QueryInput = new QueryInput(), }; DetectIntentResponse expectedResponse = new DetectIntentResponse { ResponseId = "responseId1847552473", }; mockGrpcClient.Setup(x => x.DetectIntentAsync(request, It.IsAny <CallOptions>())) .Returns(new Grpc.Core.AsyncUnaryCall <DetectIntentResponse>(Task.FromResult(expectedResponse), null, null, null, null)); SessionsClient client = new SessionsClientImpl(mockGrpcClient.Object, null); DetectIntentResponse response = await client.DetectIntentAsync(request); Assert.Same(expectedResponse, response); mockGrpcClient.VerifyAll(); }
/// <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.FromProjectLocationSession("[PROJECT]", "[LOCATION]", "[SESSION]"), QueryParams = new QueryParameters(), QueryInput = new QueryInput(), OutputAudioConfig = new OutputAudioConfig(), InputAudio = ByteString.Empty, }; // Make the request DetectIntentResponse response = await sessionsClient.DetectIntentAsync(request); // End snippet }
private static DialogflowNLUTestClient CreateTestClient(DetectIntentResponse response, Action <DetectIntentRequest> callback = null) { var mockCallInvoker = new Mock <CallInvoker>(); mockCallInvoker .Setup(invoker => invoker.AsyncUnaryCall( It.Is <Method <DetectIntentRequest, DetectIntentResponse> >(method => method.Name == "DetectIntent"), It.IsAny <string>(), It.IsAny <CallOptions>(), It.IsAny <DetectIntentRequest>())) .Returns(new AsyncUnaryCall <DetectIntentResponse>( Task.FromResult(response), Task.FromResult(default(Metadata)), () => Status.DefaultSuccess, () => default(Metadata), () => { })) .Callback(( Method <DetectIntentRequest, DetectIntentResponse> method, string host, CallOptions callOptions, DetectIntentRequest request) => callback?.Invoke(request)); var sessionsClient = new SessionsClientBuilder { CallInvoker = mockCallInvoker.Object } .Build(); var configuration = new ConfigurationBuilder() .AddInMemoryCollection(new Dictionary <string, string> { { "dialogflowProjectId", Guid.NewGuid().ToString() }, }) .Build(); return(new DialogflowNLUTestClient(sessionsClient, configuration)); }
public static async void GetDialogFlowAnswer(TelegramBotClient Bot, Message message) { SessionsClient client = SessionsClient.Create(); long id = message.From.Id; string text = message.Text; string sessionId = id.ToString(); DetectIntentResponse response = client.DetectIntent( session: SessionName.FromProjectSession(projectId, sessionId), queryInput: new QueryInput() { Text = new TextInput() { Text = text, LanguageCode = languageCode } } ); QueryResult queryResult = response.QueryResult; MongoDB.WriteUserBotMessages(queryResult, message); await Bot.SendTextMessageAsync(id, queryResult.FulfillmentText); }
public async Task <Result> GetSpeechAsync(Activity message, Sesion sesion, IDialogContext context) { Result result = new Result(); try { string fileSavePath = System.Web.HttpContext.Current.Server.MapPath("~/Dialogflow/") + AppConstant.DialogFlow.FilePrivateKeyIdJson; if (System.IO.File.Exists(fileSavePath)) { GoogleCredential cred = GoogleCredential.FromFile(fileSavePath); Channel channel = new Channel(SessionsClient.DefaultEndpoint.Host, SessionsClient.DefaultEndpoint.Port, cred.ToChannelCredentials()); SessionsClient client = SessionsClient.Create(channel); QueryInput query = new QueryInput { Text = new TextInput { Text = message.Text, LanguageCode = "es-es" } }; //string sessionId = Guid.NewGuid().ToString(); //string projectId = "upc-chatbot"; //TODO: Move to AppSettings string sessionId = sesion.IdSesion.ToString(); string projectId = ConfigurationManager.AppSettings["ApiAiProjectId"].ToString(); SessionName sessionName = new SessionName(projectId, sessionId); RepeatedField <Context> outputContexts = new RepeatedField <Context>(); List <DialogFlowContext> dialogFlowContexts = new List <DialogFlowContext>(); if (context.UserData.ContainsKey("OutputContexts")) { string outputContextsGetValue = context.UserData.GetValue <string>("OutputContexts"); if (!string.IsNullOrEmpty(outputContextsGetValue)) { dialogFlowContexts = JsonConvert.DeserializeObject <List <DialogFlowContext> >(outputContextsGetValue); foreach (var item in dialogFlowContexts) { Struct s = new Struct(); foreach (var p in item.Parameters) { Value v = new Value { StructValue = null, ListValue = null, NumberValue = 0D, StringValue = p.Value //This order position matters!!! }; s.Fields.Add(p.Key, v); } outputContexts.Add(new Context { Name = item.Name, LifespanCount = item.LifespanCount, Parameters = s }); } } } DetectIntentRequest detectIntentRequest = new DetectIntentRequest { SessionAsSessionName = sessionName, QueryInput = query, QueryParams = new QueryParameters() }; if (outputContexts.Count > 0) { detectIntentRequest.QueryParams.Contexts.AddRange(outputContexts); } DetectIntentResponse dialogFlow = client.DetectIntent(detectIntentRequest); QueryResult response = dialogFlow.QueryResult; string outputContextsSetValue = response.OutputContexts.ToString(); context.UserData.SetValue("OutputContexts", outputContextsSetValue); await EvaluateDialogFlowResponse(response, result, message, sesion); } } catch (Exception ex) { Console.WriteLine(ex.Message); BaseData.LogError(ex); } return(result); }
private void ProcessQueryResult(object sender, string stringResult) { JObject dynamicResponse = JObject.Parse(stringResult); string color = ((string)dynamicResponse["queryResult"]?["parameters"]?["Color"])?.ToLower(); string position = ((string)dynamicResponse["queryResult"]?["parameters"]?["Direction"])?.ToLower(); string outputAudioString = (string)dynamicResponse["outputAudio"]; byte[] outputAudio = Convert.FromBase64String(outputAudioString); try { JsonConverter[] converters = new JsonConverter[2] { new ProtoByteStringConverter(), new OutputAudioEncodingConverter() }; DetectIntentResponse response = JsonConvert.DeserializeObject <DetectIntentResponse>(stringResult, converters); string intent = response?.QueryResult?.Intent?.DisplayName; string defaultResponse = response?.QueryResult?.FulfillmentText; switch (intent) { case "ChangeLED": if (color != null) { Color argbColor = Color.FromName(color); _misty.ChangeLED(argbColor.R, argbColor.G, argbColor.B, null); } break; case "Joke": _misty.PlayAudio(defaultResponse, 30, null); break; case "Move your arms": if (position == "up") { _misty.MoveArms(-90, -90, 50, 50, null, AngularUnit.Degrees, null); } if (position == "down") { _misty.MoveArms(90, 90, 50, 50, null, AngularUnit.Degrees, null); } _misty.Halt(null, null); break; case "MoveHeadPosition": if (position == "up") { _misty.MoveHead(-100, 0, 0, 50, AngularUnit.Degrees, null); } if (position == "down") { _misty.MoveHead(100, 0, 0, 50, AngularUnit.Degrees, null); } if (position == "right") { _misty.MoveHead(0, 0, -100, 50, AngularUnit.Degrees, null); } if (position == "left") { _misty.MoveHead(0, 0, 100, 50, AngularUnit.Degrees, null); } break; default: _misty.SaveAudio("tts.wav", outputAudio, true, true, null); break; } } catch (Exception ex) { } }
public async void StartDialog(DetectIntentResponse response, Chat chat) { var original = response.QueryResult.Parameters.Fields["original"]; var userNameField = response.QueryResult.OutputContexts.FirstOrDefault(s => s.Parameters.Fields.ContainsKey("userName")); var userName = userNameField?.Parameters.Fields["userName"]; if (string.IsNullOrEmpty(original.StringValue)) { return; } var destination = response.QueryResult.Parameters.Fields["destination"]; if (!DateTime.TryParse(response.QueryResult.Parameters.Fields["date"].StringValue, out var date)) { date = DateTime.Today; } var cars = await blaBlaCarFinder.FindTripsAsync(original.StringValue, destination.StringValue, date); var buses = await busFinder.FindTripsAsync(original.StringValue, destination.StringValue, date); var stringBuilder = new StringBuilder(); stringBuilder.AppendLine($"Ось що мені вдалось найти, {userName.StringValue} \U0001F609"); await botClient.SendTextMessageAsync( chatId : chat, text : stringBuilder.ToString() ); stringBuilder.Clear(); var enumerable = cars.ToList(); if (enumerable.Any()) { stringBuilder.AppendLine("BlaBlaCar \U0001F697\n\n"); foreach (var trip in enumerable) { stringBuilder.AppendLine("Відпарвлення: " + trip.DepartureDate); stringBuilder.AppendLine("Прибуття: " + trip.ArrivalDate); stringBuilder.AppendLine("Місце відправлення: " + trip.DeparturePlace.CityName); stringBuilder.AppendLine("Місце прибуття: " + trip.ArrivalPlace.CityName); stringBuilder.AppendLine("Ціна: " + trip.Price.Value + " грн"); stringBuilder.AppendLine("Кількість міць: " + trip.SeatsLeft); stringBuilder.AppendLine("Автомобіль: " + trip.Car?.Make + " " + trip.Car?.Model); await botClient.SendTextMessageAsync( chatId : chat, text : stringBuilder.ToString(), replyMarkup : new InlineKeyboardMarkup(InlineKeyboardButton.WithUrl("Забронювати", trip.Links.Front)) ); stringBuilder.Clear(); } } var trips = buses.ToList(); if (trips.Any()) { stringBuilder.AppendLine("\nАвтобуси \U0001F68C\n\n"); foreach (var trip in trips) { stringBuilder.AppendLine("Відпарвлення: " + trip.DepartureDate); stringBuilder.AppendLine("Прибуття: " + trip.ArrivalDate); stringBuilder.AppendLine("Місце відправлення: " + trip.From); stringBuilder.AppendLine("Місце прибуття: " + trip.To); stringBuilder.AppendLine("Ціна: " + trip.Price); await botClient.SendTextMessageAsync( chatId : chat, text : stringBuilder.ToString(), replyMarkup : new InlineKeyboardMarkup(InlineKeyboardButton.WithUrl("Забронювати", trip.BookingLink)) ); stringBuilder.Clear(); } } }
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); } } }
public ActionResult Post() { isRock.LineBot.Bot bot; bot = new isRock.LineBot.Bot(_AccessToken); try { string postData = string.Empty; using (var reader = new StreamReader(Request.Body)) { postData = reader.ReadToEndAsync().Result; } //剖析JSON,轉換為物件 var receivedMessage = isRock.LineBot.Utility.Parsing(postData); //判斷訊息內是否有包含 LINE 的訊息事件 if (receivedMessage.events.Count > 0) { var userSays = receivedMessage.events[0].message.text; //使用者說的况 var replyToken = receivedMessage.events[0].replyToken; //回覆時使用的 Token var userId = receivedMessage.events[0].source.userId; //使用者ID //建立一個 dialogflow 回應物件 — DetectIntentResponse DetectIntentResponse result = new DetectIntentResponse() { QueryResult = new QueryResult() { Intent = new Intent() { IsFallback = false } } }; //呼叫 DialogFlow 找看看是否能對映到設計好的意圖 //result = CallDialogFlow(userSays); if (result.QueryResult.Intent.IsFallback) { //Dialogflow無法分析意圖 //依照用戶說的特定關鍵字來回應 switch (userSays.ToLower()) { case "/myid": //回覆使用者的ID bot.ReplyMessage(replyToken, userId); break; case "/satellite": //回覆圖片 bot.ReplyMessage(replyToken, new Uri("https://www.cwb.gov.tw/Data/satellite/LCC_IR1_CR_2750/LCC_IR1_CR_2750-2021-05-04-17-30.jpg")); break; default: //回覆訊息 string Message = "哈囉, 你說了:" + userSays; //回覆用戶 bot.ReplyMessage(replyToken, Message); break; } } else { //Dialogflow找到意圖,回覆內容 bot.ReplyMessage(replyToken, result.QueryResult.FulfillmentText); } } //回覆API OK return(Ok()); } catch (Exception ex) { return(Ok()); } }
/// <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; } }