Bibliothèque .NET Framework pour Facebook Messenger Bot
Package NuGet https://www.nuget.org/packages/bot.messenger
Exemple de projet Webapi https://github.com/olisamaduka/messengerbot-webapi
Pour générer vos informations d'identification Messenger avec un comment-to détaillé sur la configuration d'un bot sur Facebook Messenger (y compris les webhooks), consultez ce guide de démarrage rapide sur 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 ) ) ;Ou définissez vos informations d'identification dans web.config et initialisez dans le code en tant que SO;
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>
Code
Bot . Messenger . MessengerPlatform bot = Bot . Messenger . MessengerPlatform . CreateInstance ( ) ;
// OR
// Bot.Messenger.MessengerPlatform bot = new Bot.Messenger.MessengerPlatform();Les informations d'identification sont obtenues à partir de Web.Config Applications Stagetings lorsque la méthode CreateInstance est appelée sans paramètre d'identification ou si le constructeur sans paramètre est utilisé pour initialiser la classe MessengerPlatform. Cela est vrai pour tous les types qui héritent de 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 ) ;
}Remarquez comment l'API du profil utilisateur de la plate-forme Messenger et l'envoi de l'API sont référencés ci-dessus
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 . MessengerProfileApiLa référence Bot.Authenticator est utilisée pour vérifier votre token de vérification Webhook et la signature OAuth d'un rappel 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"
}
} ) ;