netflie / whatsapp-cloud-api
首个使用云托管版WhatsApp Business平台的PHP SDK,用于发送和接收消息
Requires
- php: ^7.4 || ^8.0 || ^8.1
- guzzlehttp/guzzle: ^7.0
- myclabs/php-enum: ^1.8
- vlucas/phpdotenv: ^5.4
Requires (Dev)
- fakerphp/faker: ^1.19
- friendsofphp/php-cs-fixer: ^3.13
- phpspec/prophecy-phpunit: ^2.0
- phpstan/phpstan: ^1.9
- phpunit/phpunit: ^9.0
- symfony/var-dumper: ^5.0
- dev-main
- 2.2.1
- 2.2.0
- 2.1.0
- 2.0.5
- 2.0.4
- 2.0.3
- 2.0.2
- 2.0.1
- 2.0.0
- 1.x-dev
- 1.4.1
- 1.4.0
- 1.3.1
- 1.3.0
- 1.2.0
- 1.1.0
- 1.0.1
- 1.0.0
- dev-single-product-message
- dev-multi-product-message
- dev-update-readme
- dev-update-default-graph-version-to-18
- dev-fix-non-nullable-superclass-vars
- dev-fix-emoji-removed-notification
- dev-button-reply
- dev-fix-optional-interactive-messages-header
- dev-multiple-entries-webhook
- dev-analysis-Q3BwR3
- dev-add-reply-to-feature
- dev-conversation-category-based-pricing
This package is auto-updated.
Last update: 2024-08-28 11:33:06 UTC
README
功能介绍
此包使开发者能够在PHP代码中轻松访问 WhatsApp Cloud API 服务。
每月前 1,000 次对话 都来自WhatsApp Cloud API免费。一次对话。
入门指南
请根据官方指南中的“入门”部分创建和配置您的Facebook WhatsApp应用程序。
最低要求 – 运行SDK,您的系统将需要 PHP >= 7.4 以及与OpenSSL和zlib一起编译的较新版本的 CURL >=7.19.4。
安装
composer require netflie/whatsapp-cloud-api
快速示例
发送文本消息
<?php // Require the Composer autoloader. require 'vendor/autoload.php'; use Netflie\WhatsAppCloudApi\WhatsAppCloudApi; // Instantiate the WhatsAppCloudApi super class. $whatsapp_cloud_api = new WhatsAppCloudApi([ 'from_phone_number_id' => 'your-configured-from-phone-number-id', 'access_token' => 'your-facebook-whatsapp-application-token', ]); $whatsapp_cloud_api->sendTextMessage('34676104574', 'Hey there! I\'m using WhatsApp Cloud API. Visit https://www.netflie.es');
发送文档
您可以通过两种方式发送文档:将文件上传到WhatsApp Cloud服务器(您将收到一个标识符)或从互联网上发布的文档的链接。
<?php use Netflie\WhatsAppCloudApi\Message\Media\LinkID; use Netflie\WhatsAppCloudApi\Message\Media\MediaObjectID; $document_id = '341476474779872'; $document_name = 'whatsapp-cloud-api-from-id.pdf'; $document_caption = 'WhastApp API Cloud Guide'; // With the Media Object ID of some document upload on the WhatsApp Cloud servers $media_id = new MediaObjectID($document_id); $whatsapp_cloud_api->sendDocument('34676104574', $media_id, $document_name, $document_caption); // Or $document_link = 'https://netflie.es/wp-content/uploads/2022/05/image.png'; $link_id = new LinkID($document_link); $whatsapp_cloud_api->sendDocument('34676104574', $link_id, $document_name, $document_caption);
发送模板消息
<?php $whatsapp_cloud_api->sendTemplate('34676104574', 'hello_world', 'en_US'); // If not specified, Language will be default to en_US and otherwise it will be required.
您还可以构建带有参数的模板
<?php use Netflie\WhatsAppCloudApi\Message\Template\Component; $component_header = []; $component_body = [ [ 'type' => 'text', 'text' => '*Mr Jones*', ], ]; $component_buttons = [ [ 'type' => 'button', 'sub_type' => 'quick_reply', 'index' => 0, 'parameters' => [ [ 'type' => 'text', 'text' => 'Yes', ] ] ], [ 'type' => 'button', 'sub_type' => 'quick_reply', 'index' => 1, 'parameters' => [ [ 'type' => 'text', 'text' => 'No', ] ] ] ]; $components = new Component($component_header, $component_body, $component_buttons); $whatsapp_cloud_api->sendTemplate('34676104574', 'sample_issue_resolution', 'en_US', $components); // Language is optional
发送音频消息
<?php use Netflie\WhatsAppCloudApi\Message\Media\LinkID; $audio_link = 'https://netflie.es/wp-content/uploads/2022/05/file_example_OOG_1MG.ogg'; $link_id = new LinkID($audio_link); $whatsapp_cloud_api->sendAudio('34676104574', $link_id);
发送图片消息
<?php use Netflie\WhatsAppCloudApi\Message\Media\LinkID; use Netflie\WhatsAppCloudApi\Message\Media\MediaObjectID; $link_id = new LinkID('http(s)://image-url'); $whatsapp_cloud_api->sendImage('<destination-phone-number>', $link_id); //or $media_id = new MediaObjectID('<image-object-id>'); $whatsapp_cloud_api->sendImage('<destination-phone-number>', $media_id);
发送视频消息
<?php use Netflie\WhatsAppCloudApi\Message\Media\LinkID; use Netflie\WhatsAppCloudApi\Message\Media\MediaObjectID; $link_id = new LinkID('http(s)://video-url'); $whatsapp_cloud_api->sendVideo('<destination-phone-number>', $link_id, '<video-caption>'); //or $media_id = new MediaObjectID('<image-object-id>'); $whatsapp_cloud_api->sendVideo('<destination-phone-number>', $media_id, '<video-caption>');
发送贴纸消息
贴纸示例: https://github.com/WhatsApp/stickers
<?php use Netflie\WhatsAppCloudApi\Message\Media\LinkID; use Netflie\WhatsAppCloudApi\Message\Media\MediaObjectID; $link_id = new LinkID('http(s)://sticker-url'); $whatsapp_cloud_api->sendSticker('<destination-phone-number>', $link_id); //or $media_id = new MediaObjectID('<sticker-object-id>'); $whatsapp_cloud_api->sendSticker('<destination-phone-number>', $media_id);
发送位置消息
<?php $whatsapp_cloud_api->sendLocation('<destination-phone-number>', $longitude, $latitude, $name, $address);
发送位置请求消息
<?php $body = 'Let\'s start with your pickup. You can either manually *enter an address* or *share your current location*.'; $whatsapp_cloud_api->sendLocationRequest('<destination-phone-number>', $body);
发送联系人消息
<?php use Netflie\WhatsAppCloudApi\Message\Contact\ContactName; use Netflie\WhatsAppCloudApi\Message\Contact\Phone; use Netflie\WhatsAppCloudApi\Message\Contact\PhoneType; $name = new ContactName('Adams', 'Smith'); $phone = new Phone('34676204577', PhoneType::CELL()); $whatsapp_cloud_api->sendContact('<destination-phone-number>', $name, $phone);
发送列表消息
<?php use Netflie\WhatsAppCloudApi\Message\OptionsList\Row; use Netflie\WhatsAppCloudApi\Message\OptionsList\Section; use Netflie\WhatsAppCloudApi\Message\OptionsList\Action; $rows = [ new Row('1', '⭐️', "Experience wasn't good enough"), new Row('2', '⭐⭐️', "Experience could be better"), new Row('3', '⭐⭐⭐️', "Experience was ok"), new Row('4', '⭐⭐️⭐⭐', "Experience was good"), new Row('5', '⭐⭐️⭐⭐⭐️', "Experience was excellent"), ]; $sections = [new Section('Stars', $rows)]; $action = new Action('Submit', $sections); $whatsapp_cloud_api->sendList( '<destination-phone-number>', 'Rate your experience', 'Please consider rating your shopping experience in our website', 'Thanks for your time', $action );
发送CTA URL消息
<?php use Netflie\WhatsAppCloudApi\Message\CtaUrl\TitleHeader; $header = new TitleHeader('Booking'); $whatsapp_cloud_api->sendCtaUrl( '<destination-phone-number>', 'See Dates', 'https://www.example.com', $header, 'Tap the button below to see available dates.', 'Dates subject to change.', );
发送目录消息
<?php $body = 'Hello! Thanks for your interest. Ordering is easy. Just visit our catalog and add items you\'d like to purchase.'; $footer = 'Best grocery deals on WhatsApp!'; $sku_thumbnail = '<product-sku-id>'; // product sku id to use as header thumbnail $whatsapp_cloud_api->sendCatalog( '<destination-phone-number>', $body, $footer, // optional $sku_thumbnail // optional );
发送按钮回复消息
<?php use Netflie\WhatsAppCloudApi\WhatsAppCloudApi; use Netflie\WhatsAppCloudApi\Message\ButtonReply\Button; use Netflie\WhatsAppCloudApi\Message\ButtonReply\ButtonAction; $whatsapp_cloud_api = new WhatsAppCloudApi([ 'from_phone_number_id' => 'your-configured-from-phone-number-id', 'access_token' => 'your-facebook-whatsapp-application-token' ]); $rows = [ new Button('button-1', 'Yes'), new Button('button-2', 'No'), new Button('button-3', 'Not Now'), ]; $action = new ButtonAction($rows); $whatsapp_cloud_api->sendButton( '<destination-phone-number>', 'Would you like to rate us on Trustpilot?', $action, 'RATE US', // Optional: Specify a header (type "text") 'Please choose an option' // Optional: Specify a footer );
发送多产品消息
<?php use Netflie\WhatsAppCloudApi\WhatsAppCloudApi; use Netflie\WhatsAppCloudApi\Message\MultiProduct\Row; use Netflie\WhatsAppCloudApi\Message\MultiProduct\Section; use Netflie\WhatsAppCloudApi\Message\MultiProduct\Action; $rows_section_1 = [ new Row('<product-sku-id>'), new Row('<product-sku-id>'), // etc ]; $rows_section_2 = [ new Row('<product-sku-id>'), new Row('<product-sku-id>'), new Row('<product-sku-id>'), // etc ]; $sections = [ new Section('Section 1', $rows_section_1), new Section('Section 2', $rows_section_2), ]; $action = new Action($sections); $catalog_id = '<catalog-id>'; $header = 'Grocery Collections'; $body = 'Hello! Thanks for your interest. Here\'s what we can offer you under our grocery collection. Thank you for shopping with us.'; $footer = 'Subject to T&C'; $whatsapp_cloud_api->sendMultiProduct( '<destination-phone-number>', $catalog_id, $action, $header, $body, $footer // optional );
发送单一产品消息
<?php $catalog_id = '<catalog-id>'; $sku_id = '<product-sku-id>'; $body = 'Hello! Here\'s your requested product. Thanks for shopping with us.'; $footer = 'Subject to T&C'; $whatsapp_cloud_api->sendSingleProduct( '<destination-phone-number>', $catalog_id, $sku_id, $body, // body: optional $footer // footer: optional );
回复消息
您可以对之前发送的消息进行回复
<?php $whatsapp_cloud_api ->replyTo('<whatsapp-message-id-to-reply>') ->sendTextMessage( '34676104574', 'Hey there! I\'m using WhatsApp Cloud API. Visit https://www.netflie.es' );
对消息做出反应
如果知道messageid,您可以对自己的对话中的消息做出反应
<?php $whatsapp_cloud_api->sendReaction( '<destination-phone-number>', '<message-id-to-react-to>', '👍', // the emoji ); // Unreact to a message $whatsapp_cloud_api->sendReaction( '<destination-phone-number>', '<message-id-to-unreact-to>' );
媒体消息
上传媒体资源
媒体消息接受一个指向公共资源(图片、视频、音频等)的Internet URL作为标识符。当您尝试从一个URL发送媒体消息时,您必须实例化一个 LinkID
对象。
您还可以将您的媒体资源上传到WhatsApp服务器,您将收到一个资源标识符
$response = $whatsapp_cloud_api->uploadMedia('my-image.png'); $media_id = new MediaObjectID($response->decodedBody()['id']); $whatsapp_cloud_api->sendImage('<destination-phone-number>', $media_id);
下载媒体资源
要下载一个媒体资源
$response = $whatsapp_cloud_api->downloadMedia('<media-id>');
消息响应
WhatsAppCloudApi实例返回一个Response类或一个ResponseException,如果WhatsApp服务器返回错误。
try { $response = $this->whatsapp_app_cloud_api->sendTextMessage( '<destination-phone-number>, 'Hey there! I\'m using WhatsApp Cloud API. Visit https://www.netflie.es', true ); } catch (\Netflie\WhatsAppCloudApi\Response\ResponseException $e) { print_r($e->response()); // You can still check the Response returned from Meta servers }
Webhooks
Webhook验证
在您的Meta App仪表板中添加您的Webhook。您需要验证您的Webhook
<?php require 'vendor/autoload.php'; use Netflie\WhatsAppCloudApi\WebHook; // Instantiate the WhatsAppCloudApi super class. $webhook = new WebHook(); echo $webhook->verify($_GET, "<the-verify-token-defined-in-your-app-dashboard>");
Webhook通知
Webhook现在已验证,您将开始接收通知,每当您的客户发送消息时。
<?php require 'vendor/autoload.php'; define('STDOUT', fopen('php://stdout', 'w')); use Netflie\WhatsAppCloudApi\WebHook; $payload = file_get_contents('php://input'); fwrite(STDOUT, print_r($payload, true) . "\n"); // Instantiate the Webhook super class. $webhook = new WebHook(); // Read the first message fwrite(STDOUT, print_r($webhook->read(json_decode($payload, true)), true) . "\n"); //Read all messages in case Meta decided to batch them fwrite(STDOUT, print_r($webhook->readAll(json_decode($payload, true)), true) . "\n");
Webhook::read
函数将返回一个 Notification
实例。请探索 可用的不同通知。
标记消息为已读
当您从Webhooks接收到传入消息时,您可以通过将其状态更改为已读来标记消息为已读。标记为已读的消息在其时间戳旁边显示两个蓝色勾号。
将消息标记为已读还将标记对话中的较早消息为已读。
<?php $whatsapp_cloud_api->markMessageAsRead('<message-id>');
获取商业资料
<?php $whatsapp_cloud_api->businessProfile('<fields>');
更新商业资料
<?php $whatsapp_cloud_api->updateBusinessProfile([ 'about' => '<about_text>', 'email' => '<email>' ]);
字段列表:https://developers.facebook.com/docs/whatsapp/cloud-api/reference/business-profiles
功能
- 发送文本消息
- 发送文档
- 发送带参数的模板
- 发送音频
- 发送图片
- 发送视频
- 发送贴纸
- 发送位置
- 发送位置请求
- 发送联系人
- 发送列表
- 发送按钮
- 发送多产品消息
- 发送单个产品
- 将媒体资源上传到WhatsApp服务器
- 从WhatsApp服务器下载媒体资源
- 标记消息为已读
- 对消息做出反应
- 获取/更新业务资料
- Webhook验证
- Webhook通知
获取帮助
迁移到v2
有关如何升级到v2的更多信息,请参阅UPGRADE
变更日志
有关最近更改的更多信息,请参阅CHANGELOG
测试
composer unit-test
您还可以通过向WhatsApp Cloud API发起实际调用来运行测试。请在WhatsAppCloudApiTestConfiguration文件中放置您的测试凭据。
composer integration-test
贡献
有关详细信息,请参阅CONTRIBUTING
许可证
MIT许可证(MIT)。请参阅许可证文件以获取更多信息。请参阅许可证文件以获取更多信息。
免责声明
此软件包不是由Facebook官方维护的。WhatsApp和Facebook的商标和标志是Meta Platforms,Inc.的财产。