public FulfillmentMessage GetResponse(FulfillmentRequest data) { var city = ParametersHelper.GetParameter("geo-city", data.QueryResult.Parameters); if (string.IsNullOrWhiteSpace(city)) { return(Responsebuilder.BuildTextResponse(new[] { $"Its currently {DateTime.Now:HH:mm}" }));
public IEnumerator FulfillUserItem(string @namespace, string userId, string accessToken, FulfillmentRequest fulfillmentRequest, ResultCallback <FulfillmentResult> callback) { Assert.IsNotNull(@namespace, $"{nameof(@namespace)} cannot be null"); Assert.IsNotNull(userId, $"{nameof(userId)} cannot be null"); Assert.IsNotNull(accessToken, $"{nameof(accessToken)} cannot be null"); Assert.IsNotNull(fulfillmentRequest, $"{nameof(fulfillmentRequest)} cannot be null"); var request = HttpRequestBuilder .CreatePost(this.baseUrl + "/admin/namespaces/{namespace}/users/{userId}/fulfillment") .WithPathParam("namespace", @namespace) .WithPathParam("userId", userId) .WithBearerAuth(accessToken) .WithContentType(MediaType.ApplicationJson) .Accepts(MediaType.ApplicationJson) .WithBody(fulfillmentRequest.ToUtf8Json()) .GetResult(); IHttpResponse response = null; yield return(this.httpClient.SendRequest(request, rsp => response = rsp)); var result = response.TryParseJson <FulfillmentResult>(); callback.Try(result); }
private static FulfillmentResponse BuildResponseForMuiltipleMatchesFor( FulfillmentRequest fulfillmentRequest, IEnumerable <Quote> matchingQuotes) { return(fulfillmentRequest.DoesRequestingDeviceHaveAScreen() ? BuildResponseForMultipleMatchesForDeviceWithScreen(matchingQuotes) : BuildResponseForMultipleMatchesForAudioDevice(matchingQuotes)); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var datePeriod = GetDatePeriodForRevenueFrom(fulfillmentRequest); var timeUnit = fulfillmentRequest.GetParameter(Constants.Variables.TimeUnitOriginal); if (string.IsNullOrEmpty(timeUnit)) { timeUnit = "last week"; } var getTransactionRequest = new GetTransactionRequest { Start = datePeriod.Start, End = datePeriod.End, TimeUnit = timeUnit }; var Transactions = await jobberClient.GetRangedTransactionsAsync(getTransactionRequest); decimal revenue = Transactions.GetTotal(); if (timeUnit.EndsWith("?")) { timeUnit = timeUnit.Remove(timeUnit.Length - 1); } return(FulfillmentResponseBuilder.Create() .Speech($"We made ${revenue.ToString("N")} {timeUnit}") .Build()); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var num = fulfillmentRequest.GetParameterAsInt("num"); return(FulfillmentResponseBuilder.Create() .Speech($"Your favorite number is {num}") .Build()); }
private FulfillmentRequestBuilder(string name) { _fulfillmentRequest = new FulfillmentRequest { ConversationResult = new ConversationResult { ActionName = name } }; }
private void LogResponse(FulfillmentRequest fulfillmentRequest, FulfillmentResponse fulfillmentResponse) { var actionName = fulfillmentRequest.ConversationResult.ActionName; var logTag = $"{actionName}:{fulfillmentRequest.Id}"; var serlializedResponse = ConvertToPrettyJson(fulfillmentResponse); _logger.LogInfo($"{logTag} Raw Response\n{serlializedResponse}"); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest) { var jobberServer = _jobberClientFactory.CreateJobberClient(new JobberConfig { ApiKey = fulfillmentRequest.OriginalRequest.Data.User.AccessToken }); return(await GetJobberIntentFulfillerFor(fulfillmentRequest).FulfillAsync(fulfillmentRequest, jobberServer)); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var response = new FulfillmentResponse { Speech = "Sorry, I'm not sure what you're asking for.", DisplayText = "Sorry, I'm not sure what you're asking for." }; return(await Task.FromResult(response)); }
public static long GetCurrentUserId(this FulfillmentRequest fulfillmentRequest) { if (fulfillmentRequest.UserId != -1) { return(fulfillmentRequest.UserId); } var token = fulfillmentRequest.OriginalRequest.Data.User.AccessToken; var decoded = new JwtSecurityToken(jwtEncodedString: token); return(Convert.ToInt64(decoded.Claims.First(c => c.Type == "user_id").Value)); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var todaysVisits = await jobberClient.GetTodaysVisitsAsync(); switch (todaysVisits.NumCompletable) { case 1: return(BuildSingleVisitResponseFor(todaysVisits)); default: return(BuildMultipleVisitsResponseFor(todaysVisits)); } }
private void LogRequest(FulfillmentRequest fulfillmentRequest) { var actionName = fulfillmentRequest.ConversationResult.ActionName; var logTag = $"{actionName}:{fulfillmentRequest.Id}"; _logger.LogInfo("Fulfillment started for request with action: " + $"{actionName} " + $"and id: {fulfillmentRequest.Id}"); var serializedRequest = ConvertToPrettyJson(fulfillmentRequest); _logger.LogInfo($"{logTag} Raw Request\n{serializedRequest}"); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var userId = fulfillmentRequest.GetCurrentUserId(); var userCollection = await jobberClient.GetUserAsync(userId); var user = userCollection.Users; var chipSuggestionMessage = GoogleChipMessage.From(user.PossibleActions().Values.ToList()); return(FulfillmentResponseBuilder.Create() .Speech("I have listed some functionalities as suggestions") .WithMessage(chipSuggestionMessage) .Build()); }
private static DatePeriod GetDatePeriodForRevenueFrom(FulfillmentRequest fulfillmentRequest) { if (fulfillmentRequest.IsParameterDatePeriod(Constants.Variables.TimeUnit)) { return(fulfillmentRequest.GetParemterAsDatePeriod(Constants.Variables.TimeUnit)); } return(new DatePeriod { End = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek), Start = DateTime.Today.AddDays(-(int)DateTime.Today.DayOfWeek - 6) }); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var serviceName = fulfillmentRequest.GetParameter(Constants.Variables.ServiceName); var newUnitPrice = fulfillmentRequest.GetParameterAsDouble(Constants.Variables.Price); var modifyQuoteContext = fulfillmentRequest.GetContextParameterAs <ModifyQuoteContext>( Constants.Contexts.QuoteDetailsSet, Constants.Variables.ModifyQuoteContext); var modifiedQuote = UpdateServicePriceInQuote(modifyQuoteContext.Quote, serviceName, newUnitPrice); await jobberClient.UpdateQuoteAsync(modifiedQuote); return(FulfillmentResponseBuilder.Create() .Speech("Okay. I've updated the quote for you.") .Build()); }
private static DateTimeRange GetDateTimeRangeForJobFrom(FulfillmentRequest fulfillmentRequest) { if (fulfillmentRequest.IsParameterDateRange(Constants.Variables.Date)) { return(fulfillmentRequest.GetParemterAsDateTimeRange(Constants.Variables.Date)); } var dateSpecified = fulfillmentRequest.GetParameterAsDateTime(Constants.Variables.Date); return(new DateTimeRange { Start = dateSpecified, End = dateSpecified.AddHours(3) }); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var quoteNumber = fulfillmentRequest.GetParameterAsInt(Constants.Variables.QuoteNumber); var quoteCollection = await jobberClient.GetQuotesAsync(); var filteredQuotes = quoteCollection.Quotes.Where(q => q.QuoteNumber == quoteNumber); switch (filteredQuotes.Count()) { case 1: return(QuoteUtils.BuildResponseFor(filteredQuotes.First())); default: return(BuildResponseForNoMatchingQuotes(quoteNumber)); } }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var clientName = fulfillmentRequest.GetParameter(Constants.Variables.ClientName); var matchingClients = await jobberClient.GetClientsAsync(clientName); switch (matchingClients.Count) { case 0: return(BuildClientNotFoundResponse(clientName)); case 1: return(BuildClientFoundResponse(matchingClients.Clients.First())); default: return(BuildMultipleClientsFound(clientName, matchingClients)); } }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var userId = fulfillmentRequest.GetCurrentUserId(); var visits = await jobberClient.GetTodayAssignedVisitsAsync(userId); switch (visits.Count) { case 0: return(BuildNoVisitResponse()); case 1: return(BuildVisitFoundResponse(visits.Visits.First())); default: return(buildMultipleVisitsFoundResponse(visits)); } }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var invoices = await jobberClient.GetDraftInvoicesAsync(); var numOfSendableInvoices = invoices.Count(); switch (numOfSendableInvoices) { case 0: return(BuildNoSendableInvoicesFoundResponse()); case 1: return(BuildSingleSendableInvoiceFoundResponse()); default: return(BuildMultipleSendableInvoicesFoundResponse(numOfSendableInvoices)); } }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var userId = fulfillmentRequest.GetCurrentUserId(); var current_time = DateTime.Now.ToUnixTime(); var visits = await jobberClient.GetTodayAssignedVisitsAsync(userId, current_time); if (visits.Count == 0) { return(FulfillmentResponseBuilder.Create() .Speech($"Your remaining day looks clear") .Build()); } return(FulfillmentResponseBuilder.Create() .Speech(BuildResponseFrom(visits.Visits.First())) .WithMessage(BuildGoogleCardFrom(visits.Visits.First())) .Build()); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var quotes = await jobberClient.GetQuotesAsync(); var numOfConvertableQuotes = quotes.NumConvertable; switch (numOfConvertableQuotes) { case 0: return(BuildNoConvertableQuotesFoundResponse()); case 1: return(BuildSingleConvertableQuotesFoundResponse(quotes.ConvertableQuotes.First())); default: return(BuildMultipleConvertableQuotesFoundResponse(numOfConvertableQuotes)); } }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var Visits = await jobberClient.GetTodaysVisitsAsync(); var numOfUnassignedVisits = Visits.NumUnassigned; switch (numOfUnassignedVisits) { case 0: return(BuildZeroUnassignedVisitsFoundResponse(numOfUnassignedVisits)); case 1: return(BuildSingleUnassignedVisitsFoundResponse(numOfUnassignedVisits)); default: return(BuildMultipleUnassignedVisitsFoundResponse(numOfUnassignedVisits)); } }
/// <summary> /// Fulfill item to a user. /// </summary> /// <param name="userId">UserId of a user who will receive item.</param> /// <param name="fulfillmentRequest">The request to fulfill an item to user.</param> /// <param name="callback">Returns Wallet info via callback when completed.</param> public void FulfillUserItem(string userId, FulfillmentRequest fulfillmentRequest, ResultCallback <FulfillmentResult> callback) { Report.GetFunctionLog(this.GetType().Name); if (!this.session.IsValid()) { callback.TryError(ErrorCode.IsNotLoggedIn); return; } this.coroutineRunner.Run( this.api.FulfillUserItem( this.namespace_, userId, this.session.AuthorizationToken, fulfillmentRequest, callback)); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var userId = fulfillmentRequest.GetCurrentUserId(); var visits = await jobberClient.GetTodayAssignedVisitsAsync(userId); float length = 0; float currentEnd = 0; foreach (Visit visit in visits.Visits) { // To handle overlap intervals length += Math.Max(0, visit.EndAt - Math.Max(currentEnd, visit.StartAt)); currentEnd = visit.EndAt; } float duration = (float)(length / 3600); int hours = (int)Math.Floor(duration); int minutes = (int)((duration - hours) * 60); StringBuilder sb = new StringBuilder(); if (hours == 0) { sb.Append($"You have no work today."); } else { if (hours >= 24) { sb.Append($"You have work all day."); } else { sb.Append($"Your work is {hours} hours and {minutes} minutes long today."); } } return(FulfillmentResponseBuilder.Create() .Speech(sb.ToString()) .Build()); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var clientName = fulfillmentRequest.GetParameter(Constants.Variables.ClientName); var serviceName = fulfillmentRequest.GetParameter(Constants.Variables.ServiceName); var quotesCollection = await jobberClient.GetQuotesAsync(); var filteredQuotes = quotesCollection.Quotes .Where(q => q.Client.Name.ContainsIgnoringCase(clientName)) .Where(q => DoesLineItemsMatchUserQuery(q.LineItems, serviceName)); switch (filteredQuotes.Count()) { case 0: return(BuildResponseForNoMatchingQuotes()); case 1: return(QuoteUtils.BuildResponseFor(filteredQuotes.First())); default: return(BuildResponseForMuiltipleMatchesFor(fulfillmentRequest, filteredQuotes)); } }
public ContentResult Post([FromBody] FulfillmentRequest data) { var fulfillmentMessages = new List <FulfillmentMessage>(); switch (data.QueryResult.Intent.DisplayName) { case "Default Fallback Intent": fulfillmentMessages.Add(Responsebuilder.BuildTextResponse(new[] { "I am not sure how to help please try again." })); break; case "Default Welcome Intent": fulfillmentMessages.Add( Responsebuilder.BuildTextResponse(new[] { "Welcome try and ask me the time." })); break; case "Time": var timeIntentResponse = new TimeIntent(_config).GetResponse(data); fulfillmentMessages.Add(timeIntentResponse); break; default: fulfillmentMessages.Add(Responsebuilder.BuildCardResponse("Help", $"The {data.QueryResult.Intent.DisplayName} intent has not been configured contact support.", "https://static.planetminecraft.com/files/resource_media/screenshot/1213/Windows-help1_1825170.jpg")); break; } var response = new FulfilmentResponse() { FulfillmentMessages = fulfillmentMessages.ToArray() }; return(Content(JsonConvert.SerializeObject(response), "application/json")); }
public async Task <FulfillmentResponse> FulfillAsync(FulfillmentRequest fulfillmentRequest, IJobberClient jobberClient) { var jobDateTimeRange = GetDateTimeRangeForJobFrom(fulfillmentRequest); var createJobDescription = fulfillmentRequest.GetParameter(Constants.Variables.JobDescription); var createJobContext = fulfillmentRequest.GetContextParameterAs <CreateJobContext> (Constants.Contexts.CreateJobClientSet, Constants.Variables.CreateJobContext); var createJobRequest = new CreateJobRequest { ClientId = createJobContext.Client.Id, PropertyId = createJobContext.Property.Id, StartAt = jobDateTimeRange.Start.ToUnixTime(), EndAt = jobDateTimeRange.End.ToUnixTime(), Description = createJobDescription }; await jobberClient.CreateJobAsync(createJobRequest); return(FulfillmentResponseBuilder.Create() .Speech(BuildResponseFrom(fulfillmentRequest)) .WithMessage(BuildGoogleCardFrom(createJobContext, createJobDescription)) .MarkEndOfAssistantConversation() .Build()); }
public bool CanFulfill(FulfillmentRequest fulfillmentRequest) { return(fulfillmentRequest.IsForAction(Constants.Intents.GetRevenue)); }
public bool CanFulfill(FulfillmentRequest fulfillmentRequest) { return(fulfillmentRequest.IsForAction(Constants.Intents.SendableInvoices)); }