Skip to content

Commit ef6ff83

Browse files
committed
2 parents b690290 + 621c8e2 commit ef6ff83

File tree

246 files changed

+3554
-13707
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

246 files changed

+3554
-13707
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -290,3 +290,4 @@ __pycache__/
290290
/Data
291291
/docs/_build
292292
*.RestApi.xml
293+
/BotSharp.WebHost/App_Data/AgentStorage
Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
<Project Sdk="Microsoft.NET.Sdk">
2+
3+
<PropertyGroup>
4+
<TargetFramework>netcoreapp2.1</TargetFramework>
5+
</PropertyGroup>
6+
7+
<ItemGroup>
8+
<Folder Include="ViewModels\" />
9+
</ItemGroup>
10+
11+
<ItemGroup>
12+
<PackageReference Include="Microsoft.AspNetCore.Mvc.Core" Version="2.1.3" />
13+
</ItemGroup>
14+
15+
<ItemGroup>
16+
<ProjectReference Include="..\BotSharp.Platform.Dialogflow\BotSharp.Platform.Dialogflow.csproj" />
17+
</ItemGroup>
18+
19+
</Project>
Lines changed: 114 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,114 @@
1+
using BotSharp.Channel.FacebookMessenger.Models;
2+
using BotSharp.Platform.Models;
3+
using EntityFrameworkCore.BootKit;
4+
using Microsoft.AspNetCore.Mvc;
5+
using Newtonsoft.Json;
6+
using Newtonsoft.Json.Linq;
7+
using Newtonsoft.Json.Serialization;
8+
using RestSharp;
9+
using System;
10+
using System.Collections.Generic;
11+
using System.IO;
12+
using System.Linq;
13+
using System.Text;
14+
using System.Threading.Tasks;
15+
16+
namespace BotSharp.Channel.FacebookMessenger.Controllers
17+
{
18+
[Route("v1/[controller]")]
19+
public class FacebookMessengerController : ControllerBase
20+
{
21+
[HttpGet("{agentId}")]
22+
public ActionResult Verify([FromRoute] string agentId)
23+
{
24+
var mode = Request.Query.ContainsKey("hub.mode") ? Request.Query["hub.mode"].ToString() : String.Empty;
25+
var token = Request.Query.ContainsKey("hub.verify_token") ? Request.Query["hub.verify_token"].ToString() : String.Empty;
26+
var challenge = Request.Query.ContainsKey("hub.challenge") ? Request.Query["hub.challenge"].ToString() : String.Empty;
27+
28+
if (mode == "subscribe")
29+
{
30+
var dc = new DefaultDataContextLoader().GetDefaultDc();
31+
var config = dc.Table<AgentIntegration>().FirstOrDefault(x => x.AgentId == agentId && x.Platform == "Facebook Messenger");
32+
33+
return config.VerifyToken == token ? Ok(challenge) : Ok(agentId);
34+
}
35+
36+
return BadRequest();
37+
}
38+
39+
[HttpPost("{agentId}")]
40+
public async Task<ActionResult> CallbackAsync([FromRoute] string agentId)
41+
{
42+
WebhookEvent body;
43+
IWebhookMessageBody response = null;
44+
45+
using (StreamReader reader = new StreamReader(Request.Body, Encoding.UTF8))
46+
{
47+
var json = await reader.ReadToEndAsync();
48+
body = JsonConvert.DeserializeObject<WebhookEvent>(json);
49+
}
50+
51+
body.Entry.ForEach(entry =>
52+
{
53+
entry.Messaging.ForEach(msg =>
54+
{
55+
// received text message
56+
if (msg.Message.ContainsKey("text"))
57+
{
58+
OnTextMessaged(agentId, new WebhookMessage<WebhookTextMessage>
59+
{
60+
Sender = msg.Sender,
61+
Recipient = msg.Recipient,
62+
Timestamp = msg.Timestamp,
63+
Message = msg.Message.ToObject<WebhookTextMessage>()
64+
});
65+
}
66+
});
67+
68+
});
69+
70+
return Ok();
71+
}
72+
73+
private void OnTextMessaged(string agentId, WebhookMessage<WebhookTextMessage> message)
74+
{
75+
Console.WriteLine($"OnTextMessaged: {message.Message.Text}");
76+
77+
/*var ai = new ApiAi();
78+
var agent = ai.LoadAgent(agentId);
79+
ai.AiConfig = new AIConfiguration(agent.ClientAccessToken, SupportedLanguage.English) { AgentId = agentId };
80+
ai.AiConfig.SessionId = message.Sender.Id;
81+
var aiResponse = ai.TextRequest(new AIRequest { Query = new String[] { message.Message.Text } });
82+
83+
var dc = new DefaultDataContextLoader().GetDefaultDc();
84+
var config = dc.Table<AgentIntegration>().FirstOrDefault(x => x.AgentId == agentId && x.Platform == "Facebook Messenger");
85+
86+
SendTextMessage(config.AccessToken, new WebhookMessage<WebhookTextMessage>
87+
{
88+
Recipient = message.Sender.ToObject<WebhookMessageRecipient>(),
89+
Message = new WebhookTextMessage
90+
{
91+
Text = String.IsNullOrEmpty(aiResponse.Result.Fulfillment.Speech) ? aiResponse.Result.Action : aiResponse.Result.Fulfillment.Speech
92+
}
93+
});*/
94+
}
95+
96+
private void SendTextMessage(string accessToken, WebhookMessage<WebhookTextMessage> body)
97+
{
98+
var client = new RestClient("https://graph.facebook.com");
99+
100+
var rest = new RestRequest("v2.6/me/messages", Method.POST);
101+
string json = JsonConvert.SerializeObject(body,
102+
new JsonSerializerSettings
103+
{
104+
ContractResolver = new CamelCasePropertyNamesContractResolver(),
105+
NullValueHandling = NullValueHandling.Ignore
106+
});
107+
108+
rest.AddParameter("application/json", json, ParameterType.RequestBody);
109+
rest.AddQueryParameter("access_token", accessToken);
110+
111+
var response = client.Execute(rest);
112+
}
113+
}
114+
}

BotSharp.NLP/Classify/IEstimator.cs renamed to BotSharp.Channel.FacebookMessenger/IWebhookMessageBody.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,9 @@
22
using System.Collections.Generic;
33
using System.Text;
44

5-
namespace BotSharp.NLP.Classify
5+
namespace BotSharp.Channel.FacebookMessenger
66
{
7-
public interface IEstimator
7+
public interface IWebhookMessageBody
88
{
99
}
1010
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace BotSharp.Channel.FacebookMessenger.Models
6+
{
7+
public class WebhookEvent
8+
{
9+
public string Object { get; set; }
10+
public List<WebhookEventEntry> Entry { get; set; }
11+
}
12+
13+
14+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace BotSharp.Channel.FacebookMessenger.Models
6+
{
7+
public class WebhookEventEntry
8+
{
9+
public string Id { get; set; }
10+
public long Time { get; set; }
11+
public List<WebhookMessage> Messaging { get; set; }
12+
}
13+
}
Lines changed: 29 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,29 @@
1+
using Newtonsoft.Json.Linq;
2+
using System;
3+
using System.Collections.Generic;
4+
using System.Text;
5+
6+
namespace BotSharp.Channel.FacebookMessenger.Models
7+
{
8+
public class WebhookMessage
9+
{
10+
public WebhookMessageSender Sender { get; set; }
11+
12+
public WebhookMessageRecipient Recipient { get; set; }
13+
14+
public long Timestamp { get; set; }
15+
16+
public JObject Message { get; set; }
17+
}
18+
19+
public class WebhookMessage<TWebhookMessage> where TWebhookMessage : IWebhookMessageBody
20+
{
21+
public WebhookMessageSender Sender { get; set; }
22+
23+
public WebhookMessageRecipient Recipient { get; set; }
24+
25+
public long Timestamp { get; set; }
26+
27+
public TWebhookMessage Message { get; set; }
28+
}
29+
}
Lines changed: 11 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,11 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace BotSharp.Channel.FacebookMessenger.Models
6+
{
7+
public class WebhookMessageQuickReply
8+
{
9+
public String Payload { get; set; }
10+
}
11+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace BotSharp.Channel.FacebookMessenger.Models
6+
{
7+
public class WebhookMessageRecipient
8+
{
9+
/// <summary>
10+
/// PAGE_ID
11+
/// </summary>
12+
public String Id { get; set; }
13+
}
14+
}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
using System;
2+
using System.Collections.Generic;
3+
using System.Text;
4+
5+
namespace BotSharp.Channel.FacebookMessenger.Models
6+
{
7+
public class WebhookMessageSender
8+
{
9+
/// <summary>
10+
/// PSID
11+
/// </summary>
12+
public String Id { get; set; }
13+
}
14+
}

0 commit comments

Comments
 (0)