Библиотека Facebook Facebook для Facebook Messenger
Пакет Nuget https://www.nuget.org/packages/bot.messenger
Образец проекта WebAPI https://github.com/olisamaduka/messengerbot-webapi
Чтобы сгенерировать свои учетные данные Messenger, а также подробный образ настройки бота на 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 ApplicationsSettings, когда метод 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"
}
} ) ;