diff --git a/BotSharp.sln b/BotSharp.sln index 1ce6baf1..ccaa90c5 100644 --- a/BotSharp.sln +++ b/BotSharp.sln @@ -25,8 +25,6 @@ Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Plugin.HuggingFace EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Plugin.ChatbotUI", "src\Plugins\BotSharp.Plugin.ChatbotUI\BotSharp.Plugin.ChatbotUI.csproj", "{68C7C9E9-496B-4004-A1F8-75FFB8C06C76}" EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Plugin.FacebookMessenger", "src\Plugins\BotSharp.Plugin.FacebookMessenger\BotSharp.Plugin.FacebookMessenger.csproj", "{0149F6C2-4CF8-4904-A545-54F3278BEA74}" -EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Plugin.WeChat", "src\Plugins\BotSharp.Plugin.WeChat\BotSharp.Plugin.WeChat.csproj", "{2323A7A3-E938-488D-A57E-638638054BC4}" EndProject Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Tests", "Tests", "{32FAFFFE-A4CB-4FEE-BF7C-84518BBC6DCC}" @@ -43,6 +41,8 @@ Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Visions", "Visions", "{B797 EndProject Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Plugin.PaddleSharp", "src\Plugins\BotSharp.Plugin.PaddleSharp\BotSharp.Plugin.PaddleSharp.csproj", "{0308FBFD-57EB-4709-9AE4-A80D516AD84D}" EndProject +Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "BotSharp.Plugin.MetaMessenger", "src\Plugins\BotSharp.Plugin.MetaMessenger\BotSharp.Plugin.MetaMessenger.csproj", "{8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}" +EndProject Global GlobalSection(SolutionConfigurationPlatforms) = preSolution Debug|Any CPU = Debug|Any CPU @@ -125,18 +125,6 @@ Global {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Release|Any CPU.Build.0 = Release|Any CPU {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Release|x64.ActiveCfg = Release|Any CPU {68C7C9E9-496B-4004-A1F8-75FFB8C06C76}.Release|x64.Build.0 = Release|Any CPU - {0149F6C2-4CF8-4904-A545-54F3278BEA74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0149F6C2-4CF8-4904-A545-54F3278BEA74}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0149F6C2-4CF8-4904-A545-54F3278BEA74}.Debug|x64.ActiveCfg = Debug|Any CPU - {0149F6C2-4CF8-4904-A545-54F3278BEA74}.Debug|x64.Build.0 = Debug|Any CPU - {0149F6C2-4CF8-4904-A545-54F3278BEA74}.GPU|Any CPU.ActiveCfg = Release|Any CPU - {0149F6C2-4CF8-4904-A545-54F3278BEA74}.GPU|Any CPU.Build.0 = Release|Any CPU - {0149F6C2-4CF8-4904-A545-54F3278BEA74}.GPU|x64.ActiveCfg = Release|Any CPU - {0149F6C2-4CF8-4904-A545-54F3278BEA74}.GPU|x64.Build.0 = Release|Any CPU - {0149F6C2-4CF8-4904-A545-54F3278BEA74}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0149F6C2-4CF8-4904-A545-54F3278BEA74}.Release|Any CPU.Build.0 = Release|Any CPU - {0149F6C2-4CF8-4904-A545-54F3278BEA74}.Release|x64.ActiveCfg = Release|Any CPU - {0149F6C2-4CF8-4904-A545-54F3278BEA74}.Release|x64.Build.0 = Release|Any CPU {2323A7A3-E938-488D-A57E-638638054BC4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU {2323A7A3-E938-488D-A57E-638638054BC4}.Debug|Any CPU.Build.0 = Debug|Any CPU {2323A7A3-E938-488D-A57E-638638054BC4}.Debug|x64.ActiveCfg = Debug|Any CPU @@ -197,6 +185,18 @@ Global {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Release|Any CPU.Build.0 = Release|Any CPU {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Release|x64.ActiveCfg = Release|Any CPU {0308FBFD-57EB-4709-9AE4-A80D516AD84D}.Release|x64.Build.0 = Release|Any CPU + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Debug|Any CPU.Build.0 = Debug|Any CPU + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Debug|x64.ActiveCfg = Debug|Any CPU + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Debug|x64.Build.0 = Debug|Any CPU + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.GPU|Any CPU.ActiveCfg = Debug|Any CPU + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.GPU|Any CPU.Build.0 = Debug|Any CPU + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.GPU|x64.ActiveCfg = Debug|Any CPU + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.GPU|x64.Build.0 = Debug|Any CPU + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Release|Any CPU.ActiveCfg = Release|Any CPU + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Release|Any CPU.Build.0 = Release|Any CPU + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Release|x64.ActiveCfg = Release|Any CPU + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE}.Release|x64.Build.0 = Release|Any CPU EndGlobalSection GlobalSection(SolutionProperties) = preSolution HideSolutionNode = FALSE @@ -210,7 +210,6 @@ Global {3EAB9CF3-0F47-4BFB-8BAC-8ADFF24AD899} = {D5293208-2BEF-42FC-A64C-5954F61720BA} {57806BAF-7736-425A-B499-13A2A2DF1E63} = {D5293208-2BEF-42FC-A64C-5954F61720BA} {68C7C9E9-496B-4004-A1F8-75FFB8C06C76} = {42226933-0A0D-48E8-85EC-AFE773A1F841} - {0149F6C2-4CF8-4904-A545-54F3278BEA74} = {64264688-0F5C-4AB0-8F2B-B59B717CCE00} {2323A7A3-E938-488D-A57E-638638054BC4} = {64264688-0F5C-4AB0-8F2B-B59B717CCE00} {0B6E1D7F-ABDE-47F6-8B2D-4483C2CFF2D6} = {32FAFFFE-A4CB-4FEE-BF7C-84518BBC6DCC} {6D8D18A9-86D7-455E-81EC-9682C30AB7E7} = {D5293208-2BEF-42FC-A64C-5954F61720BA} @@ -218,6 +217,7 @@ Global {FE2E6CC1-EB80-4518-B3A3-CB373EDA6A83} = {53E7CD86-0D19-40D9-A0FA-AB4613837E89} {B797EC3E-B5B9-4047-A6C8-6D330B7C6763} = {2635EC9B-2E5F-4313-AC21-0B847F31F36C} {0308FBFD-57EB-4709-9AE4-A80D516AD84D} = {B797EC3E-B5B9-4047-A6C8-6D330B7C6763} + {8300F66D-9EB8-438A-BF0F-70DFBE07D9DE} = {64264688-0F5C-4AB0-8F2B-B59B717CCE00} EndGlobalSection GlobalSection(ExtensibilityGlobals) = postSolution SolutionGuid = {A9969D89-C98B-40A5-A12B-FC87E55B3A19} diff --git a/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationService.cs b/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationService.cs index e3a1684d..409c5e8e 100644 --- a/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationService.cs +++ b/src/Infrastructure/BotSharp.Abstraction/Conversations/IConversationService.cs @@ -10,6 +10,6 @@ public interface IConversationService Task DeleteConversation(string id); Task SendMessage(string agentId, string conversationId, RoleDialogModel lastDalog, Func onMessageReceived); Task SendMessage(string agentId, string conversationId, List wholeDialogs, Func onMessageReceived); - List GetDialogHistory(string agentId, string conversationId); + List GetDialogHistory(string agentId, string conversationId, int lastCount = 20); Task CleanHistory(string agentId); } diff --git a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs index 63b5e6c7..e09a33f5 100644 --- a/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs +++ b/src/Infrastructure/BotSharp.Core/Conversations/Services/ConversationService.cs @@ -170,8 +170,9 @@ public class ConversationService : IConversationService throw new NotImplementedException(); } - public List GetDialogHistory(string agentId, string conversationId) + public List GetDialogHistory(string agentId, string conversationId, int lastCount = 20) { - return _storage.GetDialogs(agentId, conversationId); + var dialogs = _storage.GetDialogs(agentId, conversationId); + return dialogs.TakeLast(lastCount).ToList(); } } diff --git a/src/Plugins/BotSharp.Plugin.FacebookMessenger/BotSharp.Plugin.FacebookMessenger.csproj b/src/Plugins/BotSharp.Plugin.FacebookMessenger/BotSharp.Plugin.FacebookMessenger.csproj deleted file mode 100644 index d4c395e8..00000000 --- a/src/Plugins/BotSharp.Plugin.FacebookMessenger/BotSharp.Plugin.FacebookMessenger.csproj +++ /dev/null @@ -1,7 +0,0 @@ - - - - netstandard2.1 - - - diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/BotSharp.Plugin.MetaMessenger.csproj b/src/Plugins/BotSharp.Plugin.MetaMessenger/BotSharp.Plugin.MetaMessenger.csproj new file mode 100644 index 00000000..15f0ca00 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/BotSharp.Plugin.MetaMessenger.csproj @@ -0,0 +1,17 @@ + + + + netstandard2.1 + 10 + + + + + + + + + + + + diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/Controllers/WebhookController.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/Controllers/WebhookController.cs new file mode 100644 index 00000000..ab98cbe7 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/Controllers/WebhookController.cs @@ -0,0 +1,98 @@ +using BotSharp.Abstraction.Conversations.Models; +using BotSharp.Abstraction.Conversations; +using BotSharp.Plugin.MetaMessenger.GraphAPIs; +using BotSharp.Plugin.MetaMessenger.MessagingModels; +using BotSharp.Plugin.MetaMessenger.Settings; +using BotSharp.Plugin.MetaMessenger.WebhookModels; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.Collections.Generic; +using System.IO; +using System.Text; +using System.Text.Json; +using System.Threading; +using System.Threading.Tasks; + +namespace BotSharp.Plugin.MetaMessenger.Controllers; + +/// +/// This controller is used to receive Wehbook from Messenger platform +/// https://developers.facebook.com/docs/graph-api/webhooks/ +/// +[AllowAnonymous] +public class WebhookController : ControllerBase +{ + private readonly IServiceProvider _services; + + public WebhookController(IServiceProvider services) + { + _services = services; + } + + [HttpGet("/webhook")] + public string Verificate([FromQuery(Name = "hub.mode")] string mode, + [FromQuery(Name = "hub.verify_token")] string token, + [FromQuery(Name = "hub.challenge")] string challenge) + { + return challenge; + } + + /// + /// https://developers.facebook.com/docs/messenger-platform/webhooks + /// + /// + [HttpPost("/webhook")] + public async Task> Messages() + { + using var stream = new StreamReader(Request.Body); + var body = await stream.ReadToEndAsync(); + var req = JsonSerializer.Deserialize(body, new JsonSerializerOptions + { + PropertyNameCaseInsensitive = true, + }); + + // TODO validate request + // https://developers.facebook.com/docs/messenger-platform/webhooks#verification-requests + + try + { + // received message + if (req.Entry[0].Messaging[0].Message != null) + { + var conv = _services.GetRequiredService(); + + string content = ""; + var sessionId = req.Entry[0].Messaging[0].Sender.Id; + var input = req.Entry[0].Messaging[0].Message.Text; + var result = await conv.SendMessage("", sessionId, new RoleDialogModel("user", input), async msg => + { + content = msg.Content; + }); + + var setting = _services.GetRequiredService(); + var messenger = _services.GetRequiredService(); + var jsonOpt = new JsonSerializerOptions + { + PropertyNamingPolicy = JsonNamingPolicy.CamelCase, + }; + await messenger.SendMessage(setting.ApiVersion, setting.PageId, new SendingMessageRequest + { + AccessToken = setting.PageAccessToken, + Recipient = JsonSerializer.Serialize(new { Id = sessionId }, jsonOpt), + Message = JsonSerializer.Serialize(new { Text = content }, jsonOpt) + }); + } + } + catch (Exception ex) + { + Console.WriteLine(ex.ToString()); + } + + return Ok(new WebhookResponse + { + Success = true + }); + } +} diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/GraphAPIs/AuthHeaderHandler.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/GraphAPIs/AuthHeaderHandler.cs new file mode 100644 index 00000000..35b11acd --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/GraphAPIs/AuthHeaderHandler.cs @@ -0,0 +1,30 @@ +using Microsoft.AspNetCore.Http; +using System; +using System.Collections.Generic; +using System.Net.Http; +using System.Text; +using System.Threading.Tasks; +using System.Threading; +using BotSharp.Plugin.MetaMessenger.Settings; + +namespace BotSharp.Plugin.MetaMessenger.GraphAPIs; + +public class AuthHeaderHandler : DelegatingHandler +{ + private readonly IHttpContextAccessor _context; + private readonly MetaMessengerSetting _settings; + + public AuthHeaderHandler(IHttpContextAccessor context, + MetaMessengerSetting settings) + { + _context = context; + _settings = settings; + } + + protected override async Task SendAsync(HttpRequestMessage request, CancellationToken cancellationToken) + { + // request.Headers.Add("Authorization", _settings.PageAccessToken); + + return await base.SendAsync(request, cancellationToken).ConfigureAwait(false); + } +} diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/GraphAPIs/IMessengerGraphAPI.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/GraphAPIs/IMessengerGraphAPI.cs new file mode 100644 index 00000000..bd81188f --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/GraphAPIs/IMessengerGraphAPI.cs @@ -0,0 +1,20 @@ +using BotSharp.Plugin.MetaMessenger.MessagingModels; +using Refit; +using System; +using System.Collections.Generic; +using System.Text; +using System.Threading.Tasks; + +namespace BotSharp.Plugin.MetaMessenger.GraphAPIs; + +public interface IMessengerGraphAPI +{ + /// + /// https://developers.facebook.com/docs/messenger-platform/reference/send-api + /// + /// + /// /v17.0/104435566084134/messages?recipient={'id':'6610279455689235'}&messaging_type=RESPONSE&message={'text':'hello,world'}&access_token= + /// + [Post("/{apiVer}/{pageId}/messages")] + Task SendMessage(string apiVer, string pageId, [Query] SendingMessageRequest request); +} diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/MessagingModels/SendingMessageRequest.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/MessagingModels/SendingMessageRequest.cs new file mode 100644 index 00000000..1eb33e66 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/MessagingModels/SendingMessageRequest.cs @@ -0,0 +1,27 @@ +using Refit; + +namespace BotSharp.Plugin.MetaMessenger.MessagingModels; + +/// +/// https://developers.facebook.com/docs/messenger-platform/reference/send-api#parameters +/// +public class SendingMessageRequest +{ + /// + /// {'id':'6610279455689235'} + /// + [AliasAs("recipient")] + public string Recipient { get; set; } + + /// + /// {'text':'hello,world'} + /// + [AliasAs("message")] + public string Message { get; set; } + + [AliasAs("access_token")] + public string AccessToken { get; set; } + + [AliasAs("messaging_type")] + public string MessagingType { get; set; } = "RESPONSE"; +} diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/MessagingModels/SendingMessageResponse.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/MessagingModels/SendingMessageResponse.cs new file mode 100644 index 00000000..df598c85 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/MessagingModels/SendingMessageResponse.cs @@ -0,0 +1,15 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.Json.Serialization; + +namespace BotSharp.Plugin.MetaMessenger.MessagingModels; + +public class SendingMessageResponse +{ + [JsonPropertyName("recipient_id")] + public string RecipientId { get; set; } + + [JsonPropertyName("message_id")] + public string MessageId { get; set; } +} diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/MetaMessengerPlugin.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/MetaMessengerPlugin.cs new file mode 100644 index 00000000..fe84b407 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/MetaMessengerPlugin.cs @@ -0,0 +1,38 @@ +using BotSharp.Abstraction.Plugins; +using BotSharp.Plugin.MetaMessenger.GraphAPIs; +using BotSharp.Plugin.MetaMessenger.Settings; +using BotSharp.Abstraction.Utilities; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Refit; +using System; +using System.Collections.Generic; +using System.Text; + +namespace BotSharp.Plugin.MetaMessenger; + +/// +/// https://developers.facebook.com/docs/messenger-platform/overview +/// +public class MetaMessengerPlugin : IBotSharpPlugin +{ + public void RegisterDI(IServiceCollection services, IConfiguration config) + { + var settings = new MetaMessengerSetting(); + config.Bind("MetaMessenger", settings); + services.AddSingleton(x => + { + Console.WriteLine($"Loaded MetaMessenger settings: {settings.Endpoint}/{settings.ApiVersion} {settings.PageId} {settings.PageAccessToken.SubstringMax(4)}"); + return settings; + }); + + // services.AddScoped(); + services.AddRefitClient() + .ConfigureHttpClient((sp, c) => + { + var setting = sp.GetRequiredService(); + c.BaseAddress = new Uri($"{setting.Endpoint}"); + }); + //.AddHttpMessageHandler(); + } +} diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/Settings/MetaMessengerSetting.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/Settings/MetaMessengerSetting.cs new file mode 100644 index 00000000..0c4e6200 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/Settings/MetaMessengerSetting.cs @@ -0,0 +1,9 @@ +namespace BotSharp.Plugin.MetaMessenger.Settings; + +public class MetaMessengerSetting +{ + public string Endpoint { get; set; } + public string ApiVersion { get; set; } + public string PageId { get; set; } + public string PageAccessToken { get; set; } +} diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookMessage.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookMessage.cs new file mode 100644 index 00000000..20d72c37 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookMessage.cs @@ -0,0 +1,9 @@ +namespace BotSharp.Plugin.MetaMessenger.WebhookModels; + +public class WebhookMessage +{ + public WebhookMessageUser Sender { get; set; } + public WebhookMessageUser Recipient { get; set; } + public WebhookMessageBody Message { get; set; } + public long TimeStamp { get; set; } +} diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookMessageBody.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookMessageBody.cs new file mode 100644 index 00000000..3da17142 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookMessageBody.cs @@ -0,0 +1,13 @@ +using System; +using System.Collections.Generic; +using System.Text; +using System.Text.Json.Serialization; + +namespace BotSharp.Plugin.MetaMessenger.WebhookModels; + +public class WebhookMessageBody +{ + [JsonPropertyName("mid")] + public string Id { get;set; } + public string Text { get;set; } +} diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookMessageUser.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookMessageUser.cs new file mode 100644 index 00000000..5c7ae01c --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookMessageUser.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BotSharp.Plugin.MetaMessenger.WebhookModels; + +public class WebhookMessageUser +{ + public string Id { get; set; } +} diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookObject.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookObject.cs new file mode 100644 index 00000000..9466bce8 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookObject.cs @@ -0,0 +1,12 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BotSharp.Plugin.MetaMessenger.WebhookModels; + +public class WebhookObject +{ + public string Id { get; set; } + public long Time { get; set; } + public List Messaging { get; set; } +} diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookRequest.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookRequest.cs new file mode 100644 index 00000000..d73949c4 --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookRequest.cs @@ -0,0 +1,11 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BotSharp.Plugin.MetaMessenger.WebhookModels; + +public class WebhookRequest +{ + public string Object { get;set; } + public List Entry { get;set; } +} diff --git a/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookResponse.cs b/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookResponse.cs new file mode 100644 index 00000000..77335d6d --- /dev/null +++ b/src/Plugins/BotSharp.Plugin.MetaMessenger/WebhookModels/WebhookResponse.cs @@ -0,0 +1,10 @@ +using System; +using System.Collections.Generic; +using System.Text; + +namespace BotSharp.Plugin.MetaMessenger.WebhookModels; + +public class WebhookResponse +{ + public bool Success { get; set; } +}