.net Framework Library สำหรับ Facebook Messenger Bot
แพ็คเกจ nuget https://www.nuget.org/packages/bot.messenger
ตัวอย่างโครงการ webapi https://github.com/olisamaduka/messengerbot-webapi
เพื่อสร้างข้อมูลรับรองผู้ส่งสารของคุณพร้อมกับวิธีการอย่างละเอียดในการตั้งค่าบอทบน Facebook Messenger (รวมถึง webhooks) ดูคู่มือเริ่มต้นอย่างรวดเร็วบน Facebook https://developers.facebook.com/docs/messenger-platform/guides/quick-start
Bot . Messenger . MessengerPlatform bot = Bot . Messenger . MessengerPlatform . CreateInstance (
Bot . Messenger . MessengerPlatform . CreateCredentials ( _appSecret , _pageToken , _verifyToken ) ) ;หรือตั้งค่าข้อมูลรับรองของคุณใน web.config และเริ่มต้นในรหัสเช่นนั้น
web.config
<configuration>
<configSections>
<sectionGroup name="applicationSettings" type="System.Configuration.ApplicationSettingsGroup, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089">
<section name="Bot.Messenger.Settings" type="System.Configuration.ClientSettingsSection, System, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089" requirePermission="false" />
</sectionGroup>
</configSections>
<applicationSettings>
<Bot.Messenger.Settings>
<setting name="PageToken" serializeAs="String">
<value>page token</value>
</setting>
<setting name="AppSecret" serializeAs="String">
<value>app secret</value>
</setting>
<setting name="VerifyToken" serializeAs="String">
<value>hello</value>
</setting>
</Bot.Messenger.Settings>
</applicationSettings>
...
</configuration>
รหัส
Bot . Messenger . MessengerPlatform bot = Bot . Messenger . MessengerPlatform . CreateInstance ( ) ;
// OR
// Bot.Messenger.MessengerPlatform bot = new Bot.Messenger.MessengerPlatform();ข้อมูลประจำตัวจะถูกดึงมาจาก Web.Config Applicationsettings เมื่อวิธีการ CreateInstance ถูกเรียกโดยไม่มีพารามิเตอร์ข้อมูลรับรองหรือหากใช้ตัวสร้างแบบไม่มีพารามิเตอร์เพื่อเริ่มต้นคลาส MessenGerPlatform สิ่งนี้ถือเป็นจริงสำหรับทุกประเภทที่สืบทอดมาจาก bot.messenger.apibase
// HTTP Get endpoint to verify Webhook using the Verify Token
public HttpResponseMessage Get ( )
{
var querystrings = Request . GetQueryNameValuePairs ( ) . ToDictionary ( x => x . Key , x => x . Value ) ;
Bot . Messenger . MessengerPlatform bot = Bot . Messenger . MessengerPlatform . CreateInstance (
Bot . Messenger . MessengerPlatform . CreateCredentials ( _appSecret , _pageToken , _verifyToken ) ) ;
if ( bot . Authenticator . VerifyToken ( querystrings [ "hub.verify_token" ] ) )
{
return new HttpResponseMessage ( HttpStatusCode . OK )
{
Content = new StringContent ( querystrings [ "hub.challenge" ] , Encoding . UTF8 , "text/plain" )
} ;
}
return new HttpResponseMessage ( HttpStatusCode . Unauthorized ) ;
}
// HTTP Post endpoint to receive Webhook callbacks from Facebook Messenger
[ HttpPost ]
public async Task < HttpResponseMessage > Post ( )
{
var body = await Request . Content . ReadAsStringAsync ( ) ;
Bot . Messenger . MessengerPlatform bot = Bot . Messenger . MessengerPlatform . CreateInstance (
Bot . Messenger . MessengerPlatform . CreateCredentials ( _appSecret , _pageToken , _verifyToken ) ) ;
if ( ! bot . Authenticator . VerifySignature ( Request . Headers . GetValues ( "X-Hub-Signature" ) . FirstOrDefault ( ) , body ) )
return new HttpResponseMessage ( HttpStatusCode . BadRequest ) ;
Bot . Messenger . Models . WebhookModel webhookModel = bot . ProcessWebhookRequest ( body ) ;
foreach ( var entry in webhookModel . Entries )
{
foreach ( var evt in entry . Events )
{
if ( evt . EventType == Bot . Messenger . Models . WebhookEventType . MessageReceivedCallback )
{
await bot . SendApi . SendActionAsync ( evt . Sender . ID , Bot . Messenger . Models . SenderAction . typing_on ) ;
Bot . Messenger . Models . UserProfileResponse userProfileRsp = await bot . UserProfileApi . GetUserProfileAsync ( evt . Sender . ID ) ;
if ( evt . Message . Attachments == null )
{
await bot . SendApi . SendTextAsync ( evt . Sender . ID , $ "Hello { userProfileRsp ? . FirstName } :)" ) ;
}
else // if the user sent an image, file, sticker etc., we send it back to them
{
foreach ( var attachment in evt . Message . Attachments )
{
if ( attachment . Type != Bot . Messenger . Models . AttachmentType . fallback
&& attachment . Type != Bot . Messenger . Models . AttachmentType . location )
{
await bot . SendApi . SendTextAsync ( evt . Sender . ID , $ "Hello { userProfileRsp ? . FirstName } , you sent this and we thought it would be nice we sent it back :)" ) ;
await bot . SendApi . SendAttachmentAsync ( evt . Sender . ID , attachment ) ;
}
}
}
}
}
}
return new HttpResponseMessage ( HttpStatusCode . OK ) ;
}ขอให้สังเกตว่า API โปรไฟล์ผู้ใช้ของ Messenger Platform และส่ง API มีการอ้างอิงด้านบนอย่างไร
bot . UserProfileApi // Messenger User Profile API reference
bot . SendApi // Messenger Send API reference
//And of course the Messenger Profile API is referenced the same way
bot . MessengerProfileApiการอ้างอิง bot.authenticator ใช้เพื่อตรวจสอบว่า webhook ตรวจสอบโทเค็นและลายเซ็น OAuth ของการโทรกลับ webhook
/* checks if the query string value of hub.verify_token is equal to the specified VerifyToken
in your application (either the one in web.config ApplicationSettings or the one used to initialize the
Bot.Messenger.MessengerPlatform class instance) */
bot . Authenticator . VerifyToken
/* Verifies the X-Hub-Signature header against a Sha1 encryption of your specified App secret */
bot . Authenticator . VerifySignature SendApiResponse sendQuickReplyResponse = await bot . SendApi . SendTextAsync ( evt . Sender . ID , "Are you a Developer?" , new List < QuickReply >
{
new QuickReply
{
ContentType = QuickReplyContentType . text ,
Title = "Yes" ,
Payload = "PAYLOAD_YES"
} ,
new QuickReply
{
ContentType = QuickReplyContentType . text ,
Title = "No" ,
Payload = "PAYLOAD_NO"
}
} ) ;