コード例 #1
0
        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());
        }
コード例 #2
0
        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();
        }
コード例 #3
0
        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));
            }
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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));
            }
        }
コード例 #6
0
        /// <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);
        }
コード例 #7
0
        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();
        }
コード例 #8
0
 /// <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
 }
コード例 #9
0
        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;

        }
コード例 #10
0
 /// <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
 }
コード例 #11
0
    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();
    }
コード例 #12
0
        /// <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
        }
コード例 #13
0
        /// <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
        }
コード例 #14
0
 /// <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
 }
コード例 #15
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);
    }
コード例 #16
0
 /// <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
 }
コード例 #17
0
        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);
        }
コード例 #18
0
        /// <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
        }
コード例 #19
0
        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();
        }
コード例 #20
0
        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();
        }
コード例 #21
0
        /// <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
        }
コード例 #22
0
        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));
        }
コード例 #23
0
        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);
        }
コード例 #24
0
        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);
        }
コード例 #25
0
        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)
            {
            }
        }
コード例 #26
0
        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();
                }
            }
        }
コード例 #27
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);
                }
            }
        }
コード例 #28
0
        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());
            }
        }
コード例 #29
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;
            }
        }