Bot.Messenger
1.0.0
.NET框架库,用于Facebook Messenger Bot
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/docs/messenger-platform/guides/guides/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 ) ;
}请注意,Messenger平台的用户配置文件API和发送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 . MessengerProfileApibot.authenticator参考用于验证您的Webhook验证令牌和Webhook回调的OAuth签名
/* 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"
}
} ) ;