davidpiesse / facebook_messenger_php
Facebook Messenger平台的PHP包装器
Requires
- guzzlehttp/guzzle: ^6.2
- illuminate/http: ^5.3
- nesbot/carbon: ^1.21
- rappasoft/laravel-helpers: dev-master
Requires (Dev)
- phpunit/phpunit: ^5.4
This package is auto-updated.
Last update: 2022-02-01 12:59:41 UTC
README
Facebook Messenger PHP包装器
该软件包是对Facebook Messenger平台大多数功能的包装。以下是不支持的功能列表。
该软件包仍在开发中,因此请提交您遇到的任何pull请求/问题。
安装
只需使用composer即可引入。
composer require davidpiesse/facebook_messenger_php
目前我们处于开发模式,因此您可能需要在composer.json中设置minimum-stability:"dev"
。
演示
一个基于Laravel的演示项目(这里)。在此期间,您可以使用此包装器与一个演示聊天机器人进行交互。
在Facebook Messenger中搜索@laravelmessengerbot,您可以测试许多功能。或者访问这里https://#/laravelmessengerbot/
待办事项
待实现的功能
- 用户资料
- 所有航空公司模板
- 发送文件流
- 支付
当前的依赖关系是GuzzleHttp/Guzzle、rappasoft/laravel-helpers和illuminate/http。这些允许该软件包轻松地向FB Messenger API发出请求,并以一种极好的方式处理数组。
许可证
MIT
求助对象
只需添加一个问题,或者通过发送电子邮件至piesse [at] gmail [dot] com或Twitter @mapdev与我联系。
发送消息
用法
要向用户发送消息,请创建一个Messenger类的实例并插入您的令牌
$messenger = new Messenger($token);
然后发送文本消息
$messenger->sendMessage(new TextMessage('Foo Bar'),'recipient_id');
还在编写...
传入Webhook
对于Facebook Messenger,您提供API的Webhook URL,以便在发生某些事件时与您的服务器进行联系。 -链接-
这些大多数围绕用户传入的消息;无论是文本消息、附件、postback等,这些都由Callback对象处理。
传递从post请求的数组数据{在Laravel中使用 $request->all()
}
$callback = new Callback($request->all());
传入的数据应类似于以下内容
{ "object":"page", "entry":[ { "id":"PAGE_ID", "time":1458692752478, "messaging":[ { "sender":{ "id":"USER_ID" }, "recipient":{ "id":"PAGE_ID" }, ... } ] } ] }
Callback对象解析所有这些信息,并允许您轻松获取它并确定如何处理它。
结构
以下是如何在Callback对象中查找所需数据的指南。在一个正常的Facebook Webhook POST请求中,有两个顶级参数:+object
(始终等于'page'
)+entry
(几乎总是一个集合的Entry
对象)
要获取数据,您必须遍历 $callback->entries
以确保不遗漏一批消息。
回调还有三个方法 textMessages()
、postbackMessages()
和 attachmentMessages()
。这些方法为您提供快速访问特定类型的 EntryMessages
数组。
在 'entry' 中有一些属性和一个 EntryMessages
数组
id
(页面 ID)time
(时间戳)messaging
(entry 消息数组)
Entry
有前两个属性加上一个 message
数组(Laravel 集合)。这是 EntryMessages
的数组。
这个 entry 消息数组包含了所有真实信息。它主要有两个部分。外壳(EntryMessage)包含了 sender_id
和 recipient_id
以及一个 timestamp
。
它还提供了一套布尔返回方法,以确定消息的类型。
isText()
isPostback()
isRead()
isDelivered()
isAuthentication()
isAccountLinking()
isEcho()
这些方法中的每一个都允许您过滤消息类型并相应地访问其 $entry_message->message
或其他动态属性。
已读
如果消息类型为 Read,则 $entry_message->read
被设置,类型为 Read
属性
watermark
seq
已投递
如果消息类型为 Read,则 $entry_message->delivery
被设置,类型为 Delivered
属性
watermark
seq
mids[]
认证
如果消息类型为 Read,则 $entry_message->authentication
被设置,类型为 Authentication
属性
ref
账户链接
如果消息类型为 Read,则 $entry_message->account_linking
被设置,类型为 AccountLinking
属性
status
authorization_token
linked
(布尔值)unlinked
(布尔值)
回传
如果消息类型为 Read,则 $entry_message->postback
被设置,类型为 Postback
属性
payload
消息
如果消息类型为 Read,则 $entry_message->message
被设置,类型为 Message
属性
mid
seq
isText
(布尔值)isSticker
(布尔值)hasAttachments
(布尔值)text
quick_reply
attachments[]
回声
与 $entry_message->message
相同,但附加了一些更多属性。
附加属性
app_id
mid
metadata
(布尔值)seq
(布尔值)
示例
以下是一些代码片段以帮助您开始
//create a callback object $callback = new Callback($request->all())
//get all textmessages from the callback (regardless of entry or EntryMessage) $textmessages = $callback->textMessages(); //returns Entry Message collection
//check if EntryMessage $entrymessage is a postback and return the payload string if($entrymessage->isPostback) return $entrymessage->postback->payload;
//get URL of an image attachment sent to you 0- assuming onely one attachment and entry etc. if($entrymessage->isMessage){ if($entrymessage->message->hasAttachments && ($entrymessage->message->attachments[0]->isImage){ $image_url = $entrymessage->message->attachments[0]->url; } }
由于 Laravel 集合被包含在内,这是一个轻松深入回调的好方法
$callback = new Callback($request->all()) $callback->entries->each(function ($entry){ //for each entry access their entry messages $entry->messages->each(function($entrymessage){ //get sender_id to send a message back $sender_id = $entrymessage->sender_id; //for each entry message check is a postback or a message if($entrymessage->isPostback){ //Do something with the postback $payload = $entrymessage->postback->payload; }else if($entrymessage->isMessage){ //do somethingwith the message $message = $entrymessage->message; } }); });