コード例 #1
0
        public async stt::Task CreateAgentResourceNamesAsync()
        {
            moq::Mock <Agents.AgentsClient> mockGrpcClient = new moq::Mock <Agents.AgentsClient>(moq::MockBehavior.Strict);

            mockGrpcClient.Setup(x => x.CreateOperationsClient()).Returns(new moq::Mock <lro::Operations.OperationsClient>().Object);
            CreateAgentRequest request = new CreateAgentRequest
            {
                ParentAsLocationName = gagr::LocationName.FromProjectLocation("[PROJECT]", "[LOCATION]"),
                Agent = new Agent(),
            };
            Agent expectedResponse = new Agent
            {
                AgentName                = AgentName.FromProjectLocationAgent("[PROJECT]", "[LOCATION]", "[AGENT]"),
                DisplayName              = "display_name137f65c2",
                DefaultLanguageCode      = "default_language_codee612e130",
                TimeZone                 = "time_zone73f23b20",
                Description              = "description2cf9da67",
                AvatarUri                = "avatar_urie1767db7",
                SpeechToTextSettings     = new SpeechToTextSettings(),
                StartFlowAsFlowName      = FlowName.FromProjectLocationAgentFlow("[PROJECT]", "[LOCATION]", "[AGENT]", "[FLOW]"),
                EnableStackdriverLogging = false,
                EnableSpellCorrection    = true,
            };

            mockGrpcClient.Setup(x => x.CreateAgentAsync(request, moq::It.IsAny <grpccore::CallOptions>())).Returns(new grpccore::AsyncUnaryCall <Agent>(stt::Task.FromResult(expectedResponse), null, null, null, null));
            AgentsClient client = new AgentsClientImpl(mockGrpcClient.Object, null);
            Agent        responseCallSettings = await client.CreateAgentAsync(request.ParentAsLocationName, request.Agent, gaxgrpc::CallSettings.FromCancellationToken(st::CancellationToken.None));

            xunit::Assert.Same(expectedResponse, responseCallSettings);
            Agent responseCancellationToken = await client.CreateAgentAsync(request.ParentAsLocationName, request.Agent, st::CancellationToken.None);

            xunit::Assert.Same(expectedResponse, responseCancellationToken);
            mockGrpcClient.VerifyAll();
        }
コード例 #2
0
        /// <summary>
        /// Create an agent and the underlying contact.
        ///
        /// c.f. https://developers.freshdesk.com/api/#create_agent
        /// </summary>
        ///
        /// <param name="request">
        /// The request object containing the information to set on the agent
        /// </param>
        ///
        /// <param name="cancellationToken"></param>
        ///
        /// <returns>The newly populated agent</returns>
        public async Task <Agent> CreateAgentAsync(
            CreateAgentRequest request,
            CancellationToken cancellationToken = default)
        {
            if (request == null)
            {
                throw new ArgumentNullException(nameof(request), "Request must not be null");
            }

            return(await _freshdeskClient
                   .ApiOperationAsync <Agent, CreateAgentRequest>(HttpMethod.Post, $"/api/v2/agents", request, cancellationToken)
                   .ConfigureAwait(false));
        }
コード例 #3
0
        private bool AgentIsValid(CreateAgentRequest request)
        {
            if (request == null)
            {
                return(false);
            }

            return(!string.IsNullOrWhiteSpace(request.FirstName) &&
                   !string.IsNullOrWhiteSpace(request.LastName) &&
                   !string.IsNullOrWhiteSpace(request.Email) &&
                   !string.IsNullOrWhiteSpace(request.Password) &&
                   !string.IsNullOrWhiteSpace(request.PhoneNumber));
        }
コード例 #4
0
 /// <summary>Snippet for CreateAgent</summary>
 public void CreateAgentRequestObject()
 {
     // Snippet: CreateAgent(CreateAgentRequest, CallSettings)
     // Create client
     AgentsClient agentsClient = AgentsClient.Create();
     // Initialize request argument(s)
     CreateAgentRequest request = new CreateAgentRequest
     {
         ParentAsLocationName = LocationName.FromProjectLocation("[PROJECT]", "[LOCATION]"),
         Agent = new Agent(),
     };
     // Make the request
     Agent response = agentsClient.CreateAgent(request);
     // End snippet
 }
コード例 #5
0
        /// <summary>Snippet for CreateAgentAsync</summary>
        public async Task CreateAgentRequestObjectAsync()
        {
            // Snippet: CreateAgentAsync(CreateAgentRequest, CallSettings)
            // Additional: CreateAgentAsync(CreateAgentRequest, CancellationToken)
            // Create client
            AgentsClient agentsClient = await AgentsClient.CreateAsync();

            // Initialize request argument(s)
            CreateAgentRequest request = new CreateAgentRequest
            {
                ParentAsLocationName = LocationName.FromProjectLocation("[PROJECT]", "[LOCATION]"),
                Agent = new Agent(),
            };
            // Make the request
            Agent response = await agentsClient.CreateAgentAsync(request);

            // End snippet
        }
コード例 #6
0
        private bool EmailHasAlias(CreateAgentRequest request)
        {
            if (string.IsNullOrWhiteSpace(request.Email))
            {
                return(false);
            }

            var parts = request.Email.Split(new[] { "@" }, StringSplitOptions.RemoveEmptyEntries);

            if (parts.Length != 2)
            {
                return(false);
            }

            var username = parts[0].ToLower();

            return(username.EndsWith("+agent") || username.EndsWith("+customer"));
        }
コード例 #7
0
        public bool CreateAgent(GridRegion destination, AgentCircuitData aCircuit, uint teleportFlags, out CreateAgentResponse response)
        {
            response = null;
            if (destination == null)
            {
                response         = new CreateAgentResponse();
                response.Reason  = "Could not connect to destination";
                response.Success = false;
                return(false);
            }
            CreateAgentRequest request = new CreateAgentRequest();

            request.CircuitData   = aCircuit;
            request.Destination   = destination;
            request.TeleportFlags = teleportFlags;

            AutoResetEvent resetEvent = new AutoResetEvent(false);
            OSDMap         result     = null;

            MainConsole.Instance.DebugFormat("[Simulation Service Connector]: Sending Create Agent to " + destination.ServerURI);
            m_syncMessagePoster.Get(destination.ServerURI, request.ToOSD(), (osdresp) =>
            {
                result = osdresp;
                resetEvent.Set();
            });
            bool success = resetEvent.WaitOne(10000);

            if (!success || result == null)
            {
                response         = new CreateAgentResponse();
                response.Reason  = "Could not connect to destination";
                response.Success = false;
                return(false);
            }

            response = new CreateAgentResponse();
            response.FromOSD(result);

            if (!response.Success)
            {
                return(false);
            }
            return(response.Success);
        }
コード例 #8
0
 public CreateAgentResponse UpdateAgent(CreateAgentRequest request)
 {
     return(WrapResponse <CreateAgentResponse, CreateAgentResponseBody>(
                new ServiceExecutionDelegator <CreateAgentResponseBody, CreateAgentRequestBody>().ResolveRequest(request.Request, (request.Request.Platform ?? ConfigurationManager.AppSettings["DefaultPlatform"]), ApiServiceName.UpdateAgent)));
 }
コード例 #9
0
        public async Task <HttpResponseMessage> CreateAgent(CreateAgentRequest request)
        {
            var response = await service.CreateAgentAsync(request);

            return(SendHttpResponse(response));
        }
コード例 #10
0
        OSDMap LocalSimulationServiceConnector_OnMessageReceived(OSDMap message)
        {
            if (!message.ContainsKey("Method"))
            {
                return(null);
            }
            switch (message["Method"].AsString())
            {
            case "CreateAgentRequest":
                CreateAgentRequest createAgentRequest = new CreateAgentRequest();
                createAgentRequest.FromOSD(message);
                CreateAgentResponse createAgentResponse = new CreateAgentResponse();
                createAgentResponse.Success = CreateAgent(createAgentRequest.Destination, createAgentRequest.CircuitData, createAgentRequest.TeleportFlags, out createAgentResponse);
                return(createAgentResponse.ToOSD());

            case "UpdateAgentPositionRequest":
                UpdateAgentPositionRequest updateAgentPositionRequest = new UpdateAgentPositionRequest();
                updateAgentPositionRequest.FromOSD(message);
                return(new OSDMap()
                {
                    new KeyValuePair <string, OSD>("Success", UpdateAgent(updateAgentPositionRequest.Destination, updateAgentPositionRequest.Update))
                });

            case "UpdateAgentDataRequest":
                UpdateAgentDataRequest updateAgentDataRequest = new UpdateAgentDataRequest();
                updateAgentDataRequest.FromOSD(message);
                return(new OSDMap()
                {
                    new KeyValuePair <string, OSD>("Success", UpdateAgent(updateAgentDataRequest.Destination, updateAgentDataRequest.Update))
                });

            case "FailedToMoveAgentIntoNewRegionRequest":
                FailedToMoveAgentIntoNewRegionRequest failedToMoveAgentIntoNewRegionRequest = new FailedToMoveAgentIntoNewRegionRequest();
                failedToMoveAgentIntoNewRegionRequest.FromOSD(message);
                FailedToMoveAgentIntoNewRegion(failedToMoveAgentIntoNewRegionRequest.AgentID, failedToMoveAgentIntoNewRegionRequest.RegionID);
                break;

            case "CloseAgentRequest":
                CloseAgentRequest closeAgentRequest = new CloseAgentRequest();
                closeAgentRequest.FromOSD(message);
                CloseAgent(closeAgentRequest.Destination, closeAgentRequest.AgentID);
                break;

            case "MakeChildAgentRequest":
                MakeChildAgentRequest makeChildAgentRequest = new MakeChildAgentRequest();
                makeChildAgentRequest.FromOSD(message);
                MakeChildAgent(makeChildAgentRequest.AgentID, makeChildAgentRequest.OldRegion, makeChildAgentRequest.Destination, makeChildAgentRequest.IsCrossing);
                break;

            case "FailedToTeleportAgentRequest":
                FailedToTeleportAgentRequest failedToTeleportAgentRequest = new FailedToTeleportAgentRequest();
                failedToTeleportAgentRequest.FromOSD(message);
                FailedToTeleportAgent(failedToTeleportAgentRequest.Destination, failedToTeleportAgentRequest.FailedRegionID,
                                      failedToTeleportAgentRequest.AgentID, failedToTeleportAgentRequest.Reason, failedToTeleportAgentRequest.IsCrossing);
                break;

            case "RetrieveAgentRequest":
                RetrieveAgentRequest retrieveAgentRequest = new RetrieveAgentRequest();
                retrieveAgentRequest.FromOSD(message);
                RetrieveAgentResponse retrieveAgentResponse = new RetrieveAgentResponse();
                retrieveAgentResponse.Success = RetrieveAgent(retrieveAgentRequest.Destination, retrieveAgentRequest.AgentID, retrieveAgentRequest.AgentIsLeaving,
                                                              out retrieveAgentResponse.AgentData, out retrieveAgentResponse.CircuitData);
                return(retrieveAgentResponse.ToOSD());

            case "CreateObjectRequest":
                CreateObjectRequest createObjectRequest = new CreateObjectRequest();
                createObjectRequest.FromOSD(message);
                createObjectRequest.Scene = GetScene(createObjectRequest.Destination.RegionID);
                createObjectRequest.DeserializeObject();
                return(new OSDMap()
                {
                    new KeyValuePair <string, OSD>("Success", CreateObject(createObjectRequest.Destination, createObjectRequest.Object))
                });
            }
            return(null);
        }
コード例 #11
0
        /// <summary>Creates a test agent user with the specified services.</summary>
        /// <param name="request">The requested service names.</param>
        public AgentResult CreateUser(CreateAgentRequest request)
        {
            var restRequest = this.CreateRequest(request);

            return(this.ExecuteRequest <AgentResult>(restRequest));
        }
コード例 #12
0
        public async Task <ApiResponse <CreateAgentResponse> > CreateAgentAsync(CreateAgentRequest request)
        {
            try
            {
                var now = DateTime.UtcNow;

                if (request == null || !AgentIsValid(request))
                {
                    return(new ApiResponse <CreateAgentResponse>(null)
                    {
                        HasError = true,
                        Message = "Insufficient agent information was sent.",
                        StatusCode = StatusCodes.BadRequest
                    });
                }

                if (EmailHasAlias(request))
                {
                    return(new ApiResponse <CreateAgentResponse>(null)
                    {
                        HasError = true,
                        Message = "The email address should not contain an agent or customer alias.",
                        StatusCode = StatusCodes.BadRequest
                    });
                }

                var customerEmail = AddEmailAlias(request.Email, "+customer");
                var agentEmail    = AddEmailAlias(request.Email, "+agent");

                if (customerEmail == null || agentEmail == null)
                {
                    return(new ApiResponse <CreateAgentResponse>(null)
                    {
                        HasError = true,
                        Message = "The email address was invalid.",
                        StatusCode = StatusCodes.BadRequest
                    });
                }

                var taskRouter = new TaskRouterClient(appSettings.Get("twilio:AccountSID"), appSettings.Get("twilio:AuthToken"));

                var worker = taskRouter.AddWorker(
                    appSettings.Get("twilio:WorkspaceSID"),
                    $"Agent {request.FirstName} {request.LastName}",
                    appSettings.Get("twilio:IdleActivitySID"),
                    "{}");

                if (worker.RestException != null)
                {
                    return(new ApiResponse <CreateAgentResponse>(null)
                    {
                        HasError = true,
                        Message = worker.RestException.Message,
                        StatusCode = StatusCodes.BadRequest
                    });
                }

                worker.Attributes = JsonConvert.SerializeObject(new
                {
                    skills = new[] { "voice", "sms", "messaging" },
                    sid    = worker.Sid
                });

                worker = taskRouter.UpdateWorker(
                    worker.WorkspaceSid,
                    worker.Sid,
                    worker.ActivitySid,
                    worker.Attributes,
                    worker.FriendlyName);

                if (worker.RestException != null)
                {
                    return(new ApiResponse <CreateAgentResponse>(null)
                    {
                        HasError = true,
                        Message = worker.RestException.Message,
                        StatusCode = StatusCodes.BadRequest
                    });
                }

                var auth0Agent = await auth0.CreatePasswordUserAsync(agentEmail, request.Password);

                var auth0Customer = await auth0.CreatePasswordUserAsync(customerEmail, request.Password);

                if (auth0Customer.InvalidRequest || auth0Agent.InvalidRequest)
                {
                    return(new ApiResponse <CreateAgentResponse>(null)
                    {
                        HasError = true,
                        Message = "Error creating auth0 users.",
                        StatusCode = StatusCodes.BadRequest
                    });
                }

                var customer = new Customer
                {
                    IdentityID   = auth0Customer.UserId,
                    FirstName    = request.FirstName,
                    LastName     = request.LastName,
                    Address      = CreateDefaultAddress(),
                    PhoneNumber  = request.PhoneNumber,
                    ValueLevel   = CustomerValueLevel.Gold,
                    CreatedDate  = now,
                    ModifiedDate = now,
                    IsActive     = true
                };

                var agent = new Agent
                {
                    IdentityID     = auth0Agent.UserId,
                    SID            = worker.Sid,
                    FirstName      = "Agent",
                    LastName       = request.LastName,
                    CreatedDate    = now,
                    ModifiedDate   = now,
                    IsActive       = true,
                    PairedCustomer = customer
                };

                CreateSeedData(customer);
                context.Agents.Add(agent);
                await context.SaveChangesAsync();

                // Send a hockey app invite
                using (var client = new HttpClient())
                {
                    try
                    {
                        var appId     = appSettings.Get("hockeyApp:AppID");
                        var appSecret = appSettings.Get("hockeyApp:Secret");
                        client.BaseAddress = new Uri("https://rink.hockeyapp.net/");
                        client.DefaultRequestHeaders.Add("X-HockeyAppToken", appSecret);
                        var msg = $"Hello {request.FirstName},\n" +
                                  $"An account for Owl Finance has been created for you.\n\n" +
                                  $"The webpage is https://YOUR-WEBPAGE-URL.com\n" +
                                  $"Your username for the mobile app is {customerEmail}. The password is {request.Password}.\n" +
                                  $"Your username for the web site is {agentEmail}. The password is {request.Password}.\n\n" +
                                  $"Please contact YOUR-EMAIL with any questions!\n" +
                                  $"Thanks";
                        var pairs = new List <KeyValuePair <string, string> >
                        {
                            new KeyValuePair <string, string>("first_name", request.FirstName),
                            new KeyValuePair <string, string>("last_name", request.LastName),
                            new KeyValuePair <string, string>("email", request.Email),
                            new KeyValuePair <string, string>("message", msg)
                        };
                        var content  = new FormUrlEncodedContent(pairs);
                        var response = await client.PostAsync($"api/2/apps/{appId}/app_users", content);

                        if (!response.IsSuccessStatusCode)
                        {
                            return(new ApiResponse <CreateAgentResponse>(null)
                            {
                                HasError = true,
                                Message = "Error creating hockey app invite.",
                                StatusCode = StatusCodes.BadRequest
                            });
                        }
                    }
                    catch (Exception)
                    {
                        // do nothing
                    }
                }

                var successResponse = new ApiResponse <CreateAgentResponse>(new CreateAgentResponse())
                {
                    HasError = false,
                    Message  = "Your account has been created. Please check your email.",
                };

                return(successResponse);
            }
            catch (Exception e)
            {
                return(HandleErrorAndReturnStatus <ApiResponse <CreateAgentResponse> >(e));
            }
        }