public override WebhookResponse Handle(WebhookRequest request) { var userChallenges = _conversation.conversationState.UserChallengeModel; var challenge = userChallenges.Challenges.FirstOrDefault(x => x.ChallengeName == _conversation.conversationState.ChallengeName); //try{ if (challenge != null) { return(new WebhookResponse { FulfillmentText = $@"Your team has {challenge.teamStats.DailyAverageSteps} daily average steps and rank {challenge.teamStats.OverallRankInThisChallenge}. {challenge.teamStats.topper.contentderGivenName} is leading with {challenge.teamStats.topper.contentderStats.DailyAverageSteps} daily average steps" }); } /* catch{ * return new WebhookResponse{ * FulfillmentText= $@"Sorry I could not perform the action you requested" * * }; * }*/ return(new WebhookResponse { FulfillmentText = $@"Sorry, that challenge is not available. anything else I can help?" }); }
public async Task <IActionResult> AddWebhook([FromBody] List <string> eventTypes) { var baseUrl = $"https://{HttpContext.Request.Host}{HttpContext.Request.PathBase}"; var webhookRequest = new WebhookRequest(baseUrl, "384021d9-c1ac-4ead-b0d2-b8a8430f409b", eventTypes); client.DefaultRequestHeaders.Clear(); try { client.DefaultRequestHeaders.Add("Authorization", apiOptions.SecretKey); HttpResponseMessage result = await client.PostAsJsonAsync($"{apiOptions.GatewayUri}/webhooks", webhookRequest); string content = await result.Content.ReadAsStringAsync(); object response = JsonConvert.DeserializeObject <object>(content); if (result.StatusCode == System.Net.HttpStatusCode.UnprocessableEntity) { return(UnprocessableEntity(response)); } else if (result.StatusCode == System.Net.HttpStatusCode.Conflict) { return(Conflict()); } else { return(CreatedAtAction(nameof(AddWebhook), response)); } } catch (Exception e) { return(StatusCode(500, e.Message)); } }
public void ProcessIntends(WebhookRequest value, string intentName, ref IAppRequest iRequest, ref string controllerName) { string entityOrSlot; switch (intentName) { case "companyNews": var company = value.QueryResult.Parameters.Fields["companyName"].ToString(); entityOrSlot = company; break; case "newsFetch": var newsSource = value.QueryResult.Parameters.Fields["newsSource"].ToString(); entityOrSlot = newsSource; break; case "stockQuote": case "fundamentals": var companyName = value.QueryResult.Parameters.Fields["CompanyName"].ToString(); entityOrSlot = companyName; break; case "marketSummary": entityOrSlot = ""; break; case "recommend": entityOrSlot = ""; break; default: return; } ProcessIntends(entityOrSlot, intentName, ref iRequest, ref controllerName); }
protected virtual async Task HandleEvent(DomainEvent domainEvent, CancellationToken cancellationToken) { var eventId = domainEvent.GetType().FullName; var criteria = new WebhookSearchCriteria() { IsActive = true, EventIds = new[] { eventId }, Skip = 0, Take = int.MaxValue, ResponseGroup = WebhookResponseGroup.Info.ToString() }; var webHookSearchResult = await _webHookSearchService.SearchAsync(criteria); if (webHookSearchResult.TotalCount > 0) { var eventObject = domainEvent.GetEntityWithInterface <IEntity>() .Select(x => new { objectId = x.Id, objectType = x.GetType().FullName }) .ToArray(); var request = new WebhookRequest { EventId = eventId, EventObject = JsonConvert.SerializeObject(eventObject), WebHooks = webHookSearchResult.Results }; _backgroundJobClient.Schedule(() => NotifyAsync(request, cancellationToken), TimeSpan.FromMinutes(1)); } }
public override WebhookResponse Handle(WebhookRequest request) { var contenderName = request.QueryResult.Parameters.Fields["membername"].StringValue; var userChallenges = _conversation.conversationState.UserChallengeModel; var challenge = userChallenges.Challenges.FirstOrDefault(x => x.ChallengeName == _conversation.conversationState.ChallengeName); var contenderStats = challenge.contentders.FirstOrDefault(x => x.contentderGivenName == contenderName); //try{ if (contenderStats != null) { _conversation.conversationState.ContenderName = contenderName; int userSteps; Int32.TryParse(challenge.userStats.DailyAverageSteps, out userSteps); int contentderSteps; Int32.TryParse(contenderStats.contentderStats.DailyAverageSteps, out contentderSteps); int difSteps = userSteps - contentderSteps; if (difSteps > 0) { return(new WebhookResponse { FulfillmentText = $@"Congrats, you are {difSteps} steps ahead of {contenderStats.contentderGivenName}. keep up." }); } if (difSteps == 0) { return(new WebhookResponse { FulfillmentText = $@"you and {contenderStats.contentderGivenName} have same numnber of steps. keep up." }); } return(new WebhookResponse { FulfillmentText = $@"{contenderStats.contentderGivenName} is leading by {contentderSteps-userSteps} steps.just try to more active to beat {contenderStats.contentderGivenName}." }); } /* catch{ * return new WebhookResponse{ * FulfillmentText= $@"Sorry I could not perform the action you requested" * * }; * }*/ if (string.IsNullOrEmpty(contenderName)) { contenderName = "This person"; } return(new WebhookResponse { FulfillmentText = $@"{contenderName} is not enrolled in this challenge. can I help you with something else?" }); }
public override WebhookResponse Handle(WebhookRequest request) { var challengeName = request.QueryResult.Parameters.Fields["Challengename"].StringValue; _conversation.conversationState.ChallengeName = challengeName; var userChallenges = _conversation.conversationState.UserChallengeModel; var challenge = userChallenges.Challenges.FirstOrDefault(x => x.ChallengeName == challengeName); //try{ if (challenge != null) { return(new WebhookResponse { FulfillmentText = $@"You have {challenge.userStats.DailyAverageSteps} daily average steps and you are rank {challenge.userStats.RankWithInTeam} in your team and rank {challenge.userStats.OverallRankInThisChallenge} overall. Would you like to review your team progress?" }); } //} /*catch{ * return new WebhookResponse{ * FulfillmentText= $@"Sorry I could not perform the action you requested" * * }; * }*/ return(new WebhookResponse { FulfillmentText = $@"Sorry I could not find {challengeName} to review" }); }
public override WebhookResponse Handle(WebhookRequest request) { var userChallenges = _conversation.conversationState.UserChallengeModel; if (userChallenges.Challenges.Count > 1) { var sb = new StringBuilder(); foreach (var challenge in userChallenges.Challenges) { sb.AppendLine(challenge.ChallengeName + ". "); } var s = sb.ToString(); return(new WebhookResponse { FulfillmentText = $@"Sure, you have {userChallenges.Challenges.Count} active challenges. {s} What would you like to review next?" }); } else if (userChallenges.Challenges.Count == 1) { _conversation.conversationState.ChallengeName = userChallenges.Challenges[0].ChallengeName; return(new WebhookResponse { FulfillmentText = $@"you have 1 active challenge, {userChallenges.Challenges[0].ChallengeName}. would you like to review?", }); } return(new WebhookResponse { FulfillmentText = $@"Sorry I could not find any active challenges to review" }); }
public async Task <WebhookResponse> HandleAsync(WebhookRequest req) { var intentName = req.QueryResult.Intent.DisplayName; var handler = FindHandler(intentName); if (handler == null) { return(new WebhookResponse { FulfillmentText = $"Sorry, no handler found for intent: {intentName}" }); } try { return(handler.Handle(req) ?? await handler.HandleAsync(req) ?? new WebhookResponse { FulfillmentText = "Error. Handler did not return a valid response." }); } catch (Exception e) when(req.QueryResult.Intent.DisplayName != "exception.throw") { var msg = (e as GoogleApiException)?.Error.Message ?? e.Message; return(new WebhookResponse { FulfillmentText = $"Sorry, there's a problem: {msg}" }); } }
internal async Task Send(WebhookRequest message) { var jsonString = JsonConvert.SerializeObject(message); var content = new StringContent(jsonString, Encoding.UTF8); content.Headers.ContentType = new MediaTypeHeaderValue("application/json") { CharSet = "utf-8" }; var response = await httpClient.PostAsync(webhookUrl, content); if (response.StatusCode != System.Net.HttpStatusCode.OK) { throw new ChatbotException((int)response.StatusCode, $"Response StatusCode is '{response.StatusCode}'."); } var responseString = await response.Content.ReadAsStringAsync(); var result = JsonConvert.DeserializeObject <WebhookResponse>(responseString); if (!result.IsSuccess) { throw new ChatbotException(result.ErrorCode, result.ErrorMessage); } }
public bool IsValid(WebhookRequest request) { var hmac = new HMACSHA256(Encoding.ASCII.GetBytes(_apiKey)); var signature = hmac.ComputeHash(Encoding.ASCII.GetBytes(request.Timestamp + request.Token)); var generatedSignature = BitConverter.ToString(signature).Replace("-", ""); return(generatedSignature.Equals(request.Signature, StringComparison.OrdinalIgnoreCase)); }
public static async Task <string> AddComment(WebhookRequest request) { var requestParameters = request.QueryResult.Parameters; string issueId = requestParameters.Fields["issue-id"].StringValue; string newComment = JiraHelper.ExtractCommentFromParams(requestParameters); return(await JiraAPIContext.addComment(issueId, newComment)); }
public dynamic ProcessDialogflowIntent(WebhookRequest dialogflowRequest) { var response = _dialogFlowService.ProcessDialogFlowRequest(dialogflowRequest); return(new ContentResult { Content = response, ContentType = "application/json" }); }
private static string GetUserId(WebhookRequest request) { string userId = null; Struct intentRequestPayload = request.OriginalDetectIntentRequest?.Payload; return(userId); }
/// <summary> /// Handle the Dialogflow intent. /// </summary> /// <param name="req">Webhook request</param> /// <returns>Webhook response</returns> public override async Task <WebhookResponse> HandleAsync(WebhookRequest req) { // Create the client and ask for safe-search info from Vision API ML service. var visionClient = ImageAnnotatorClient.Create(); var safe = await visionClient.DetectSafeSearchAsync(Image.FromUri(_conversation.State.FocusedImage.Url)); // Format safe-search result into an English sentence (string text, int likelyhood) Likely(string s, Likelihood l) { switch (l) { case Likelihood.Likely: case Likelihood.VeryLikely: return(s, 2); case Likelihood.Possible: case Likelihood.Unlikely: return(s, 1); default: return(s, 0); } } var result = new[] { Likely("has medical content", safe.Medical), Likely("is a spoof", safe.Spoof), Likely("is violent", safe.Violence), Likely("has racy content", safe.Racy), Likely("has adult content", safe.Adult) }; var likely = result.Where(x => x.likelyhood == 2).Select(x => x.text).ToList(); var possible = result.Where(x => x.likelyhood == 1).Select(x => x.text).ToList(); if (likely.Count == 0 && possible.Count == 0) { return(new WebhookResponse { FulfillmentText = "Let's see. This picture is fine." }); } string reply = "Let's see. "; if (likely.Count > 0) { reply += CombineList(likely, "It's likely this picture", "") + "."; } if (possible.Count > 0) { reply += CombineList(possible, "It's possible this picture", "") + "."; } return(new WebhookResponse { FulfillmentText = reply }); }
public static async Task <string> ChangeStatusOfIssue(WebhookRequest request) { var requestParameters = request.QueryResult.Parameters; string issueId = requestParameters.Fields["issue-id"].StringValue; string newStatusName = requestParameters.Fields["status"].StringValue.ToLower(); string newStatusId = JiraHelper.StatusNametoCode(newStatusName); var responseString = await JiraAPIContext.changeIssueStatus(issueId, newStatusId); return(JiraHelper.GenerateResponseForChangingStatus(responseString, issueId, newStatusName)); }
public void ShouldParse() { var json = GetContents(); var request = new WebhookRequest(json); request.ValidationCode.Should().Be("D9192B09-82EA-44D6-8580-B4E4633F1D2E"); request.ValidationUrl.Should().Be("https://rp-uksouth.eventgrid.azure.net:553/eventsubscriptions/webhook/validate?id=D9192B09-82EA-44D6-8580-B4E4633F1D2E&t=2021-07-18T19:19:01.2177564Z&apiVersion=2020-10-15-preview&token=H2S4f%2bp5QVubOOBf2YoeuI56iKkiOLedXxTlZEkZOkg%3d"); request.EventType.Should().Be("Microsoft.EventGrid.SubscriptionValidationEvent"); }
public override async Task <WebhookResponse> HandleAsync(WebhookRequest request) { var challengeName = request.QueryResult.Parameters.Fields["Challengename"].StringValue; //call go365 challenge service to add challengename for a given memeberid await Task.Delay(100); return(new WebhookResponse { FulfillmentText = $"You have been successfully added to {challengeName} challenge." }); }
public JsonResult Post([FromBody] WebhookRequest value) { var response = new WebhookResponse { FulfillmentText = "Estou consultando uma informação no banco de dados. A hora do servidor é -> " + DateTime.Now.ToString("dd/MM/yyyy HH:mm:ss.fff"), Source = "sample fullfillment api", }; return(new JsonResult(response)); }
public override WebhookResponse Handle(WebhookRequest request) { var contenderName = _conversation.conversationState.ContenderName; var userChallenges = _conversation.conversationState.UserChallengeModel; var challenge = userChallenges.Challenges.FirstOrDefault(x => x.ChallengeName == _conversation.conversationState.ChallengeName); var contenderStats = challenge.contentders.FirstOrDefault(x => x.contentderGivenName == contenderName); //try{ if (contenderStats != null) { _conversation.conversationState.ContenderName = contenderName; int userSteps; Int32.TryParse(challenge.userStats.DailyAverageSteps, out userSteps); int contentderSteps; Int32.TryParse(contenderStats.contentderStats.DailyAverageSteps, out contentderSteps); int difSteps = userSteps - contentderSteps; if (difSteps > 0) { return(new WebhookResponse { FulfillmentText = $@"Congrats, you are already {difSteps} steps ahead of {contenderStats.contentderGivenName}. keep up." }); } if (difSteps == 0) { return(new WebhookResponse { FulfillmentText = $@"you and {contenderStats.contentderGivenName} have same numnber of steps. keep up and try to be more active" }); } return(new WebhookResponse { FulfillmentText = $@"{contenderStats.contentderGivenName} is leading by {contentderSteps-userSteps} steps.just try to more active to beat {contenderStats.contentderGivenName}. you may want to register for the Humana walkathon at Tom Saywer park in Louisville on june 8th " }); } /* catch{ * return new WebhookResponse{ * FulfillmentText= $@"Sorry I could not perform the action you requested" * * }; * }*/ return(new WebhookResponse { FulfillmentText = $@"{contenderName} is not enrolled in this challenge. can I help you with something else?" }); }
public async Task Created_Returns_BadRequest_For_Null_Parameter() { //Arrange WebhookRequest request = null; //Act var result = await _testSubject.Created(request); //Assert result.Should().BeOfType <BadRequestResult>(); }
/// <summary> /// Handle the intent. /// </summary> /// <param name="req">Webhook request</param> /// <returns>Webhook response</returns> public override async Task <WebhookResponse> HandleAsync(WebhookRequest req) { var platform = await Platform.InstanceAsync(); (var spokenDescription, string[] textDescription) = GetDetailedDescription(platform); DialogflowApp.Show(string.Join("", textDescription.Select(x => $"<div>{x}</div>"))); return(new WebhookResponse { FulfillmentText = spokenDescription }); }
private async Task <WebhookResponse> RegisterWebhook() { var webhookRequest = new WebhookRequest() { Url = "https://checkout.com/webhooks", ContentType = WebhookContentType.Json, EventTypes = _paymentEventTypes }; return(await PreviousApi.WebhooksClient().RegisterWebhook(webhookRequest)); }
public string GetNutrientName(WebhookRequest request) { try { } catch { } return(""); }
public override async Task <WebhookResponse> HandleAsync(WebhookRequest req) { var searchTerm = req.QueryResult.Parameters.Fields["searchterm"].StringValue; DialogflowApp.Show($"<div>Searching for pictures of: {searchTerm}</div><div>Please wait...</div>"); var searchService = CreateSearchClient(); var result = await searchService.Images.SearchAsync(query : searchTerm); // Store images in state var images = result.Value .Select(x => new ConvState.Image { Title = x.Name, Url = x.ThumbnailUrl }) .ToList(); conversation.State.ImageList = images; var imageList = images.Select(x => $"<li><img src=\"{x.Url}\" alt=\"{WebUtility.HtmlEncode(x.Title)}\" style=\"width:200px\" /></li>"); DialogflowApp.Show($"<ol>{string.Join("", imageList)}</ol>"); // var response = new WebhookResponse(); var message = new Intent.Types.Message(); message.CarouselSelect = new Intent.Types.Message.Types.CarouselSelect(); foreach (var image in images) { var item = new Intent.Types.Message.Types.CarouselSelect.Types.Item(); item.Title = image.Title; var current = new Intent.Types.Message.Types.Image(); current.ImageUri = image.Url; item.Image = current; message.CarouselSelect.Items.Add(item); } // response.FulfillmentMessages.Add(message); // response.FulfillmentText = $"Found some pictures of: {searchTerm}. Now, select a picture."; // return response; return(new WebhookResponse { FulfillmentMessages = { message }, FulfillmentText = $"Found some pictures of: {searchTerm}. Now, select a picture.", Source = "" }); // return new WebhookResponse // { // FulfillmentText = $"Found some pictures of: {searchTerm}. Now, select a picture." // }; }
public void DeserializeDemoJson() { WebhookRequest WebhookRequest = JsonConvert.DeserializeObject <WebhookRequest>(File.ReadAllText("Resources/Json/WebhookRequestSimple.json")); Assert.NotNull(WebhookRequest); WebhookResponse WebhookResponse = JsonConvert.DeserializeObject <WebhookResponse>(File.ReadAllText("Resources/Json/WebhookResponseSimple.json")); Assert.NotNull(WebhookResponse); Assert.AreEqual(WebhookRequest.responseId, "ea3d77e8-ae27-41a4-9e1d-174bd461b68c"); }
public override WebhookResponse Handle(WebhookRequest req) { var errorMessage = LocationSearchIntent.ExtractAndValidateParameters(req, out string location); if (errorMessage != null) { return(new WebhookResponse { FulfillmentText = errorMessage }); } errorMessage = DateSearchIntent.ExtractAndValidateParameters(req, out DateTime? startDate, out DateTime? endDate); if (errorMessage != null) { return(new WebhookResponse { FulfillmentText = errorMessage }); } _conversation.State.Location = location; _conversation.State.StartDate = startDate.Value; _conversation.State.EndDate = endDate; var storage = new Struct { Fields = { ["data"] = Value.ForStruct(new Struct { Fields = { ["lastSearchedLocation"]= Value.ForString(location) } }) } }.ToString(); string fulfillmentText = $"<speak>There's lots going on in {_conversation.State.Location} on <say-as interpret-as=\"date\" format=\"dm\" detail=\"1\">{_conversation.State.StartDate.Day}-{_conversation.State.StartDate.Month}</say-as>. Where else are you interested in going?</speak>"; if (endDate.HasValue) { fulfillmentText = $"<speak>There's lots going on in {_conversation.State.Location} between <say-as interpret-as=\"date\" format=\"dm\" detail=\"1\">{_conversation.State.StartDate.Day}-{_conversation.State.StartDate.Month}</say-as> and <say-as interpret-as=\"date\" format=\"dm\" detail=\"1\">{_conversation.State.EndDate.Value.Day}-{_conversation.State.EndDate.Value.Month}</say-as>. Where else are you interested in going?</speak>"; } return(new WebhookResponse { Payload = new Struct { Fields = { ["google"] = Value.ForStruct(new Struct { Fields = { ["userStorage"]= Value.ForString(storage) } }) } }, FulfillmentText = fulfillmentText }); }
public static WebhookResponse BuildBaseResponse(this WebhookRequest webhookRequest) { var webhookResponse = new WebhookResponse(); var dataContext = webhookRequest.QueryResult.OutputContexts.GetContext($"{webhookRequest.Session}/contexts/{DataKey}"); if (dataContext != null) { webhookResponse.OutputContexts.Add(dataContext); } return(webhookResponse); }
public async Task Created_Sends_Mediator_Command_When_Request_Is_Valid_And_Returns_200() { //Arrange WebhookRequest request = new WebhookRequest(); //Act var result = await _testSubject.Created(request); //Assert await _mediator.Received().Send(Arg.Is <InviteeCreatedCommand>(x => x.RequestData == request)); result.Should().BeOfType <OkResult>(); }
private async Task <IActionResult> WebhookInnerAsync(WebhookRequest request) { // check request payload parsed correctly if (request == null) { return(BadRequest("Wrong request format")); } // check authentication header if (!Request.Headers.TryGetValue(HeaderNames.Authorization, out var authHeader)) { return(Unauthorized("Authentication header is not provided with the request")); } // validate authentication api key var requestApiKey = authHeader.ToString().Replace("Bearer ", ""); if (!_freshdeskService.ValidateWebhookApiKey(requestApiKey)) { return(Unauthorized("Wrong authentication key")); } try { await _freshdeskService.StoreWebhookPayloadAsync(Request.Body); } catch { // ignore, because it's for debug reasons only } try { var webhook = _mapper.Map <Webhook>(request); await _freshdeskService.OnWebhookAsync(webhook); } catch (NotFoundException ex) { return(NotFound(ex.Message)); } catch (ArgumentException ex) { return(BadRequest(ex)); } catch (Exception ex) { return(StatusCode(StatusCodes.Status500InternalServerError, ex.Message)); } return(Ok()); }
public async Task <IActionResult> Webhook([FromBody] WebhookRequest request) { var result = await WebhookInnerAsync(request); if (!(result is OkResult)) { await _freshdeskService.StoreWebhookPayloadAsync(Request.Body, result); } // must always return Ok to caller, or they create ticket and ask you to investigate, etc, // but they don't give you any useful troubleshooting info. It's better just to say // everything is ok, and to log errors internally return(Ok()); }