public async Task DeserializeEndpointsCorrectly()
        {
            var client = new HttpClient(new ActionHandler(req => Task.FromResult(
                                                              new HttpResponseMessage(HttpStatusCode.OK)
            {
                Content = new StringContent(
                    Utility.ExampleFileContent("Endpoints.json"))
            })))
            {
                BaseAddress = new Uri("https://api.amazonalexa.com", UriKind.Absolute)
            };

            var api       = new EndpointApi(client);
            var endpoints = await api.GetEndpoints();

            Assert.Equal(2, endpoints.Endpoints.Length);

            var first = endpoints.Endpoints.First();

            Assert.Equal("amzn1.ask.endpoint.ABC123", first.EndpointId);
            var capability = Assert.Single(first.Capabilities);

            Assert.Equal("AlexaInterface", capability.Type);
            Assert.Equal("Custom.CustomInterface1", capability.Interface);
            Assert.Equal("1.0", capability.Version);
        }
 private void SetupApis()
 {
     Error = new ErrorApi {
         Client = this
     };
     Account = new AccountApi {
         Client = this
     };
     Application = new ApplicationApi {
         Client = this
     };
     AvailableNumber = new AvailableNumberApi {
         Client = this
     };
     Bridge = new BridgeApi {
         Client = this
     };
     Domain = new DomainApi {
         Client = this
     };
     Call = new CallApi {
         Client = this
     };
     Conference = new ConferenceApi {
         Client = this
     };
     Message = new MessageApi {
         Client = this
     };
     NumberInfo = new NumberInfoApi {
         Client = this
     };
     PhoneNumber = new PhoneNumberApi {
         Client = this
     };
     Recording = new RecordingApi {
         Client = this
     };
     Transcription = new TranscriptionApi {
         Client = this
     };
     Media = new MediaApi {
         Client = this
     };
     Endpoint = new EndpointApi {
         Client = this
     };
     V2 = new ApiV2 {
         Message = new Bandwidth.Net.ApiV2.MessageApi {
             Client = this
         }
     };
 }
        public async Task GetEndpointsHitsCorrectUrl()
        {
            var client = new HttpClient(new ActionHandler(req =>
            {
                Assert.Equal("/v1/endpoints", req.RequestUri.PathAndQuery);
            }))
            {
                BaseAddress = new Uri("https://api.amazonalexa.com", UriKind.Absolute)
            };
            var api = new EndpointApi(client);
            await api.GetEndpoints();

            client.Dispose();
        }
        static void Main(string[] args)
        {
            ServicePointManager.SecurityProtocol = SecurityProtocolType.Tls12;
            String tgt = getCasTGT();

            Console.WriteLine("TGT " + tgt);
            String st = getCasSt(tgt);

            Console.WriteLine("ST " + st);
            Configuration config = new Configuration();

            config.BasePath = basepath;


            //API Client can be generated via http://generator.swagger.io
            EndpointApi api = new EndpointApi(config);

            var headers = new List <Header>();

            headers.Add(new Header("transactionId", "Unique Identifier"));
            headers.Add(new Header("application", "Your Application Name"));
            EndpointGetRequest req = new EndpointGetRequest(headers, null);

            Console.WriteLine("Request -> " + req.ToJson());
            EndpointGetServiceResponse resp = api.Endpointget(st, req);

            String listenAddress = resp.Body.BroadcastAddress;

            Console.WriteLine("Response <- " + resp.ToJson());

            Console.WriteLine("listen <- " + listenAddress);

            WebSocket websocket = new WebSocket(listenAddress);

            websocket.MessageReceived += Websocket_MessageReceived;
            websocket.Opened          += Websocket_Opened;
            websocket.Closed          += Websocket_Closed;
            websocket.DataReceived    += Websocket_DataReceived;
            websocket.Open();
            Console.ReadLine();
        }
Example #5
0
 public void Init()
 {
     instance = new EndpointApi();
 }
Example #6
0
        public SkillResponse FunctionHandler(SkillRequest input, ILambdaContext context)
        {
            //Catch any incomming Errors
            if (input.Request.GetType() == typeof(SessionEndedRequest))
            {
                return(getError(input));
            }
            //Intent holen
            IntentRequest intent = input.Request as IntentRequest;

            //Get Endpoint
            EndpointApi      api       = new EndpointApi(input);
            EndpointResponse endpoints = new EndpointResponse();

            try
            {
                endpoints = api.GetEndpoints().Result;
            }
            catch (Exception ex)
            {
                Console.WriteLine(ex.Message);
                return(createEndAnswer("Es wurden keine verbundenen Geräte gefunden."));
            }

            //Session for SessionAttributes
            _session = input.Session;

            //Create Attributes if not existend
            if (_session.Attributes == null)
            {
                _session.Attributes = new Dictionary <string, object>();
            }

            //Check if the current Request is a Multiple Request command
            if (_session.Attributes.ContainsKey("isMultipleCommands"))
            {
                isMultipleCommands = Convert.ToBoolean(_session.Attributes["isMultipleCommands"]);
            }
            else
            {
                _session.Attributes.Add("isMultipleCommands", isMultipleCommands);
            }

            if (_session.Attributes.ContainsKey("cmdPallete"))
            {
                cmdPallete = JsonConvert.DeserializeObject <CommandPalette>(_session.Attributes["cmdPallete"].ToString());
            }
            else
            {
                _session.Attributes.Add("cmdPallete", cmdPallete);
            }

            //Sicher gehen, dass eine Verbindung steht
            if (endpoints.Endpoints.Length <= 0)
            {
                return(createEndAnswer("Ich konnte keine Verbundenen Geräte finden."));
            }

            //Verbundenes Gerät aus Liste holen
            Endpoint endpoint = new Endpoint();

            try
            {
                endpoint = endpoints.Endpoints[0];
            }
            catch (Exception)
            {
                endpoint = new Endpoint()
                {
                    EndpointId   = "NullIdHere",
                    FriendlyName = "Null Endpoint"
                };
            }

            //Intent abfragen und Handeln
            if (input.Request is LaunchRequest)
            {
                return(createAnswer("Was möchtest du tun?", false, _session));
            }
            else if (input.Request is IntentRequest)
            {
                if (intent.Intent.Name.Equals("MultipleDirectivesIntent"))
                {
                    isMultipleCommands = true;
                    _session.Attributes["isMultipleCommands"] = true;

                    return(createAnswer("Sage immer einen Befehl und warte bis ich dich nach dem nächsten Frage. Sobald du fertig bis sag einfach: Senden", false, _session));
                }
                else if (intent.Intent.Name.Equals("SendMultipleDirectivesIntent"))
                {
                    if (cmdPallete.DirectiveCount >= 1)
                    {
                        isMultipleCommands = false;
                        _session.Attributes["isMultipleCommands"] = false;
                        _session.Attributes["cmdPallete"]         = new CommandPalette();

                        return(createRoboterRequest($"Ich schicke {cmdPallete.DirectiveCount} Befehle an den Roboter.", endpoint.EndpointId, "control", cmdPallete, _session));
                    }
                    else
                    {
                        return(createAnswer("Es sind keine Anfragen verfügbar, welche gesendet werden können. Um Anfragen hinzuzufügen sage dazu einfach: Ich möchte mehrere Anfragen senden.", false, _session, "Was möchtest du nun tun?"));
                    }
                }
                else if (intent.Intent.Name.Equals("SetSpeedIntent"))
                {
                    SpeedData speedData = new SpeedData();

                    if (intent.Intent.Slots["Speed"].Value.Equals("?"))
                    {
                        return(createAnswer("Ich habe die von dir angegebene Geschwindkeit nicht verstanden. Bitte wiederhole den Satz.", false, _session));
                    }
                    else
                    {
                        int _speedVal = Convert.ToInt32(intent.Intent.Slots["Speed"].Value);

                        if (_speedVal >= 0 || _speedVal <= 100)
                        {
                            speedData.Speed = Convert.ToInt32(_speedVal);

                            //Set or Add Session Attribute
                            if (_session.Attributes.ContainsKey("Speed"))
                            {
                                _session.Attributes["Speed"] = _speedVal;
                            }
                            else
                            {
                                _session.Attributes.Add("Speed", _speedVal);
                            }
                        }
                        else
                        {
                            return(createAnswer("Die Geschwindigkeit darf nur in einem Bereich zwischen 1 und 100 liegen. Bitte wiederhole deine Aussage, mit einem korrekten Wert.", false, _session));
                        }
                    }

                    if (isMultipleCommands)
                    {
                        cmdPallete.Directives.Add(speedData);
                        cmdPallete.DirectiveCount = cmdPallete.Directives.Count;

                        _session.Attributes["cmdPallete"] = cmdPallete;

                        return(createAnswer("Der Speed Befehl wurde hinzugefügt. Es wird der nächste erwartet.", false, _session));
                    }
                    else
                    {
                        return(createRoboterRequest("Die Geschwindigkeit wurde gesetzt", endpoint.EndpointId, "control", speedData, _session));
                    }
                }
                else if (intent.Intent.Name.Equals("MoveIntent"))
                {
                    DirectionData dirData = new DirectionData();

                    try
                    {
                        //Get Direction Slot Value
                        if (intent.Intent.Slots["Direction"].Value.Equals(""))
                        {
                            return(createAnswer("Ich habe nicht verstanden, in welche Richtung sich der Roboter bewegen soll. Bitte wiederhole den ganzen Satz.", false, _session));
                        }
                        else
                        {
                            if (intent.Intent.Slots["Direction"].Value == "gerade aus" || intent.Intent.Slots["Direction"].Value == "vorwärts")
                            {
                                dirData.Direction = "forward";
                            }
                            else if (intent.Intent.Slots["Direction"].Value == "geradeaus")
                            {
                                dirData.Direction = "forward";
                            }
                            else
                            {
                                dirData.Direction = intent.Intent.Slots["Direction"].Value;
                            }
                        }

                        //Get Duration Slot Value
                        if (intent.Intent.Slots["Duration"].Value.Equals("?"))
                        {
                            return(createAnswer("Ich habe nicht verstanden, wie lange sich der Roboter bewegen soll. Bitte wiederhole den ganzen Satz.", false, _session));
                        }
                        else
                        {
                            dirData.Duration = Convert.ToInt32(intent.Intent.Slots["Duration"].Value);
                        }

                        if (isMultipleCommands)
                        {
                            cmdPallete.Directives.Add(dirData);
                            cmdPallete.DirectiveCount         = cmdPallete.Directives.Count;
                            _session.Attributes["cmdPallete"] = cmdPallete;

                            return(createAnswer("Der Move Befehl wurde hinzugefügt. Es wird der nächste erwartet.", false, _session));
                        }
                        else
                        {
                            return(createRoboterRequest("Der Roboter wird bewegt!", endpoint.EndpointId, "control", dirData, _session));
                        }
                    }
                    catch (Exception)
                    {
                        return(createAnswer("Um den Roboter zu bewegen, musst du eine Richtung als auch eine Dauer sagen. Versuche es einfach nochmal.", false, _session, "Ich warte auf einen Befehl", "Fehlende Parameter beim Move Intent", "Richtung und Geschwindigkeit"));
                    }
                }
                else if (intent.Intent.Name.Equals("DirectionTurnIntent"))
                {
                    DirectionData dirData = new DirectionData();

                    //Attributes Checkup
                    if (_session.Attributes.ContainsKey("Speed"))
                    {
                        dirData.Speed = Convert.ToInt32(_session.Attributes["Speed"]);
                    }
                    else
                    {
                        dirData.Speed = 100;
                        _session.Attributes.Add("Speed", 100);
                    }

                    //Direction
                    if (intent.Intent.Slots.ContainsKey("Direction"))
                    {
                        dirData.Direction = intent.Intent.Slots["Direction"].Value;
                    }
                    else
                    {
                        return(createAnswer("Ich habe nicht verstanden, in welche Richtung sich der Roboter bewegen soll. Bitte wiederhole den ganzen Satz.", false, _session));
                    }

                    //Duration
                    if (intent.Intent.Slots.ContainsKey("Duration"))
                    {
                        dirData.Duration = Convert.ToInt32(intent.Intent.Slots["Duration"].Value);
                    }
                    else
                    {
                        return(createAnswer("Ich habe nicht verstanden, wie lange sich der Roboter bewegen soll. Bitte wiederhole den ganzen Satz.", false, _session));
                    }

                    if (isMultipleCommands)
                    {
                        cmdPallete.Directives.Add(dirData);
                        cmdPallete.DirectiveCount         = cmdPallete.Directives.Count;
                        _session.Attributes["cmdPallete"] = cmdPallete;

                        return(createAnswer("Der drehen Befehl wurde hinzugefügt. Es wird der nächste erwartet.", false, _session));
                    }
                    else
                    {
                        return(createRoboterRequest($"Der Roboter wird nach {dirData.Direction} gedreht.", endpoint.EndpointId, "control", dirData, _session));
                    }
                }
                else if (intent.Intent.Name.Equals("DegreeTurnIntent"))
                {
                    return(createAnswer("DegreeTurn Intent wurde aufgerufen!", false, _session));
                }
                else if (intent.Intent.Name.Equals("LetGoIntent"))
                {
                    Command cmd = new Command();
                    cmd.CommandType = "command";
                    cmd.CmdName     = "loslassen";

                    if (isMultipleCommands)
                    {
                        cmdPallete.Directives.Add(cmd);
                        cmdPallete.DirectiveCount         = cmdPallete.Directives.Count;
                        _session.Attributes["cmdPallete"] = cmdPallete;

                        return(createAnswer("Der Loslassen Befehl wurde hinzugefügt. Es wird der nächste erwartet.", false, _session));
                    }
                    else
                    {
                        return(createRoboterRequest("Gegenstand wird losgelassen.", endpoint.EndpointId, "control", cmd, _session));
                    }
                }
                else if (intent.Intent.Name.Equals("GrabIntent"))
                {
                    Command cmd = new Command();
                    cmd.CommandType = "command";
                    cmd.CmdName     = "nimm";

                    if (isMultipleCommands)
                    {
                        cmdPallete.Directives.Add(cmd);
                        cmdPallete.DirectiveCount         = cmdPallete.Directives.Count;
                        _session.Attributes["cmdPallete"] = cmdPallete;

                        return(createAnswer("Der Nimm Befehl wurde hinzugefügt. Es wird der nächste erwartet.", false, _session));
                    }
                    else
                    {
                        return(createRoboterRequest("Gegenstand wird aufgehoben.", endpoint.EndpointId, "control", cmd, _session));
                    }
                }
                else if (intent.Intent.Name.Equals("AMAZON.FallbackIntent"))
                {
                    return(createAnswer("Du hast da wohl was vergessen. Wenn du den Roboter bewegen willst, musst du Richtung und Dauer angeben. Versuche es noch einmal?", false, _session, "Was möchtest du tun?"));
                }
                else if (intent.Intent.Name.Equals("AMAZON.CancelIntent"))
                {
                    return(createAnswer("Die Aktion wird abgebrochen. Was möchtest du tun?", false, _session, "Ich warte auf den nächsten Befehl."));
                }
                else if (intent.Intent.Name.Equals("AMAZON.HelpIntent"))
                {
                    return(createEndAnswer("Du kannst den Roboter nach vorne, links oder rechts bewegen. Die Geschwindkeit kannst du ebenfalls Anpassen."
                                           + "Der Roboter ist auch in der Lage Gegestände aufzuheben oder abzulegen. Versuche ganz natürlich dem Roboter einen dieser Befehle zu sagen"));
                }
                else if (intent.Intent.Name.Equals("AMAZON.StopIntent"))
                {
                    cmdPallete = new CommandPalette();
                    return(createEndAnswer("Bis zum nächsten mal."));
                }
                else if (intent.Intent.Name.Equals("AMAZON.NavigateHomeIntent"))
                {
                    return(createEndAnswer("Der Skill wird beendet."));
                }
                else
                {
                    return(createAnswer("Es wurde ein nicht abgefangener Intent aufgerufen! " + intent.Intent.Name, false, _session));
                }
            }
            else
            {
                return(createAnswer("Der Skill wurde nicht über einen LaunchRequest oder IntentRequest aufgerufen.", true, _session));
            }
        }