Часть 1: Если у вас нет времени на чтение
Данная реализация бота включает в себя наиболее часто используемые функции. Это позволит вам адаптировать исходный код под ваши задачи и потребности или использовать его в качестве основы для создания любой другой интеграции. Мы оставили комментарии рядом с каждой функцией, чтобы вам было проще понять код. В исходном коде бота вы найдете следующие функции:
- Ответ на неизвестную команду, это может быть инструкция или ваше приветственное сообщение;
- Отправка обычного сообщения;
- Отправка изображения;
- Отправка файла;
- Отправка видео;
- Отправка контакта (vCard);
- Отправка товара;
- Создание новой группы, отправка приглашения и отправка сообщения в группу;
- Получение и чтение входящих сообщений;
Для работы бота НЕ ТРЕБУЕТСЯ, чтобы телефон был включен или находился в сети. Подключите номер и комфортно протестируйте интеграцию!
А если вам нужна помощь, просто напишите нам в чат поддержки на любой странице сайта.
Если вы решаете, какого провайдера выбрать, или не до конца понимаете разницу между WhatsApp Business API и WhatsApp API, вам будет полезно изучить наше руководство, в котором мы сравним провайдеров, функционал, цены и существующие на сегодняшний день решения. Это будет полезно всем, чтобы решить, какой API и какого провайдера выбрать. Итак, погрузитесь в нашу статью "Как выбрать WhatsApp API. Сравнение."
А если вам нужна помощь, просто напишите нам в чат поддержки на любой странице сайта.
Если вы решаете, какого провайдера выбрать, или не до конца понимаете разницу между WhatsApp Business API и WhatsApp API, вам будет полезно изучить наше руководство, в котором мы сравним провайдеров, функционал, цены и существующие на сегодняшний день решения. Это будет полезно всем, чтобы решить, какой API и какого провайдера выбрать. Итак, погрузитесь в нашу статью "Как выбрать WhatsApp API. Сравнение."
Для чего создавать WhatsApp Бота?
В современном мире WhatsApp не просто ведущая платформа мгновенных сообщений с миллиардами пользователей, но и неотъемлемый инструмент для бизнеса. Автоматизация функций мессенджера предлагает ряд стратегических преимуществ: от мгновенной поддержки клиентов до эффективного маркетинга и сбора обратной связи. В свете этого создание бота для WhatsApp становится ключевым шагом в оптимизации бизнес-процессов и установлении прямого контакта с вашей аудиторией.
В этом руководстве мы предоставим пошаговые инструкции по созданию бота для WhatsApp на PHP. Вы узнаете:
- Как работать с API WhatsApp;
- Понимать тонкости создания чат-ботов на PHP;
- Автоматизировать и улучшать взаимодействие с вашими клиентами;
Подготовка к старту - что вам понадобится
Прежде чем мы перейдем к практической части создания бота для WhatsApp на PHP, убедитесь, что у вас есть все необходимые инструменты и ресурсы.
- Аккаунт Whapi.Cloud. Для работы с API WhatsApp вам потребуется аккаунт на Whapi.Cloud. Это провайдер, который предоставляет разработчикам методы для автоматизации WhatsApp и API документацию. На сегодняшний день Whapi.Cloud наиболее функциональный и стабильный провайдер, предоставляющий недорогой доступ к API WhatsApp. После регистрации вы получите бесплатный канал с индивидуальным ключом-токеном API, который позволит вашему приложению/интеграции на PHP взаимодействовать с мессенджером.
- Сервер с PHP или локальная разработка. Если вы решите тестировать своего бота локально и хотите, чтобы он мог взаимодействовать с WhatsApp через Webhook, вы можете использовать такие инструменты, как ngrok. Это приложение создает защищенные туннели к вашему локальному серверу, предоставляя временные общедоступные URL, которые вы можете использовать для тестирования. Чтобы сервер вызывал наш скрипт при получении новых сообщений, нам нужно указать URL WebHook в настройках канала. Мы расскажем об этом отдельно ниже.
Работа с WhatsApp API через Whapi.Cloud
Зарегистрируйтесь и перейдите на страницу вашего канала. Регистрируясь впервые, вы получите 5 дней полного доступа к API, что будет достаточно для тестирования всех методов из API. Если же вам этого не хватит, обратитесь в поддержку сервиса через виджет веб-чата, вам снимут ограничения для комфортного тестирования.
Следующим шагом будет подключение вашего номера WhatsApp. Не беспокойтесь, вы можете отключиться в любое время, но это необходимо для того, чтобы вы могли проверить свою реализацию. Итак, перейдите в свой личный кабинет, найдите ваш первый канал Default Channel и кликните на него. Первым же шагом вы увидите QR-код и небольшую инструкцию. Откройте WhatsApp на вашем мобильном устройстве, перейдите в Настройки -> Связанные устройства -> Подключить устройство -> Сканировать QR-код.
Во время подключения, на этапах два и три, вам предоставится возможность настроить свой канал.
Задайте имя каналу для удобства (к слову, наш API сразу определит, используете ли вы обычную или бизнес-версию приложения с расширенными функциями). Далее будут доступны настройки вебхуков и других параметров по вашему усмотрению. Однако, эти действия можно выполнить позже и пропустить данный этап.
После активации канала в разделе с информацией о лимитах найдите свой API-токен. Данный токен критически важен для аутентификации при обращении к API. Обычно он передается в заголовках запросов в качестве Bearer Token или же как параметр, в зависимости от способа обращения к API.
API Whapi.Cloud предоставляет большое количество методов для взаимодействия с WhatsApp, действительно позволяя вам автоматизировать ключевые возможности и функции мессенджера. На странице канала вы можете изучить и опробовать все доступные методы. Для удобства разработки вам предоставлен специализированный хаб для разработчика, где каждая функция снабжена примерами кода и возможностью тестирования на месте, демонстрируя результаты и ответы от сервера.
Это максимально упрощает и ускоряет процесс интеграции, вам понравится! Одним из преимуществ Whapi.Cloud является простота и скорость подключения, что позволяет начать взаимодействие с WhatsApp всего за несколько минут.
Задайте имя каналу для удобства (к слову, наш API сразу определит, используете ли вы обычную или бизнес-версию приложения с расширенными функциями). Далее будут доступны настройки вебхуков и других параметров по вашему усмотрению. Однако, эти действия можно выполнить позже и пропустить данный этап.
После активации канала в разделе с информацией о лимитах найдите свой API-токен. Данный токен критически важен для аутентификации при обращении к API. Обычно он передается в заголовках запросов в качестве Bearer Token или же как параметр, в зависимости от способа обращения к API.
API Whapi.Cloud предоставляет большое количество методов для взаимодействия с WhatsApp, действительно позволяя вам автоматизировать ключевые возможности и функции мессенджера. На странице канала вы можете изучить и опробовать все доступные методы. Для удобства разработки вам предоставлен специализированный хаб для разработчика, где каждая функция снабжена примерами кода и возможностью тестирования на месте, демонстрируя результаты и ответы от сервера.
Это максимально упрощает и ускоряет процесс интеграции, вам понравится! Одним из преимуществ Whapi.Cloud является простота и скорость подключения, что позволяет начать взаимодействие с WhatsApp всего за несколько минут.
Что такое Webhook и как его настроить?
Ваш бот WhatsApp и наш API-шлюз должны общаться, чтобы когда что-то меняется в одной системе, другая система знала об этом. Например, отслеживание изменений статуса сообщений, таких как "отправлено", "доставлено" и "прочитано".
Здесь на помощь приходит Webhook! Настроенный Webhook позволяет вашему серверу мгновенно узнавать о определенных событиях. Согласно вашим настройкам, вы сможете получать оповещения о сообщениях, их текущем статусе, состоянии канала, телефоне, о пропущенных звонках и т.п. Главное отличие Whapi.Cloud - это гибкость в настройке и управлении вебхуками. Вы сможете устанавливать несколько разных хуков на любые события. А разнообразные дополнительные опции, например Auto Download или Mode Вебхука облегчат ваш процесс работы.
Мы подробно рассмотрели все нюансы работы с вебхуками в нашей базе знаний: Смотреть статью о вебхуках
Переходите в конфигурацию вашего канала через кнопку в верхнем правом углу. В самом начале вы увидите секцию по вебхукам. Задайте URL-адрес вашего сервера для получения уведомлений. При необходимости добавьте дополнительные вебхуки, выбирите Mode и режиме работы хука. Когда вам приходит сообщение, на указанный вами URL отправляется POST-запрос с информацией о сообщении. Это позволяет вашему боту анализировать входящие сообщения и соответствующим образом на них реагировать. Настроить вебхуки можно как через интерфейс в личном кабинете, так и программно через API (метод /Update channel settings/). Как работать с входящей информацией и обрабатывать её, рассмотрим далее.
Создание основы бота на PHP
Отправка и прием сообщений
Сначала определим структуру вашего проекта. Установите Composer (если еще не делали этого), Инициализируйте проект "composer init", установите зависимости и генерацию автозагрузчика. У вас появится папка vendor с автозагрузчиком. Теперь вы можете подключить автозагрузчик Composer в начале вашего index.php файла. После этих базовых шагов ваш проект будет готов к дальнейшей разработке.
Создадим корневую директорию public: здесь будет располагаться основной исполняемый файл (например, index.php), config.php (для хранения конфигураций, например, вашего API-ключа) и папку "files" (для хранения файлов, которые вы будете отправлять).
Напомню, что весь исходный код этого проекта можно скачать с ГитХаба: https://github.com/Whapi-Cloud/php-whatsapp-chatbot
config.php
return [
// API endpoint URL
"apiUrl" => "https://gate.whapi.cloud",
// API token from your channel
"token" => "YOUR CHANNEL TOKEN",
// The ID of the group to which we will send the message. Use to find out the ID: https://whapi.readme.io/reference/getgroups
"group" => '[email protected]',
// The ID of the product we will send for the example. Create a product in your WhatsApp and find out the product ID: https://whapi.readme.io/reference/getproducts
"product" => '6559353560856703',
// Bot`s URL. Webhook Link to your server. At ( {server link}/messages ), when POST is requested, processing occurs in index.php
"botUrl" => "https://yoursite.com/messages"
];
index.php
require '../vendor/autoload.php';
use GuzzleHttp\Client;
use Slim\App;
use Slim\Http\Request;
use Slim\Http\Response;
// Don't forget to put your token in config.php
$config = require './config.php';
$app = new App();
$client = new Client([
'base_uri' => $config['apiUrl']
]);
// Commands for example bot
const COMMANDS = [
'TEXT' => 'Simple text message',
'IMAGE' => 'Send image',
'DOCUMENT' => 'Send document',
'VIDEO' => 'Send video',
'CONTACT' => 'Send contact',
'PRODUCT' => 'Send product',
'GROUP_CREATE' => 'Create group',
'GROUP_TEXT' => 'Simple text message for the group',
'GROUPS_IDS' => 'Get the id\'s of your three groups'
];
// Url files for example
const FILES = [
'IMAGE' => './files/file_example_JPG_100kB.jpg',
'DOCUMENT' => './files/file-example_PDF_500_kB.pdf',
'VIDEO' => './files/file_example_MP4_480_1_5MG.mp4',
'VCARD' => './files/sample-vcard.txt'
];
function sendWhapiRequest($endpoint, $params = [], $method = 'POST')
{
global $config, $client;
$url = $config['apiUrl'] . '/' . $endpoint;
$options = [
'headers' => [
'Authorization' => 'Bearer ' . $config['token'],
],
];
if ($params && count($params) > 0) {
if ($method === 'GET') {
$url .= '?' . http_build_query($params);
} else {
if(isset($params['media'])){
$options['multipart'] = toFormData($params);
}else{
$options['headers']['Content-Type'] = 'application/json';
$options['body'] = json_encode($params);
}
}
}
echo '$options: ' . print_r($options, true);
$response = $client->request($method, $url, $options);
$json = json_decode($response->getBody()->getContents(), true);
echo 'Whapi response: ' . print_r($json, true);
return $json;
}
function toFormData($params)
{
$multipart = [];
foreach ($params as $name => $contents) {
$multipart[] = ['name' => $name, 'contents' => $contents];
}
return $multipart;
}
// Call this function if you want to setup a webhook through the API. In this example it is not called: you will need to go to the channel settings in your personal cabinet and set the webhook link like {link to your server}/messages
function setHook()
{
global $config;
if ($config['botUrl']) {
sendWhapiRequest('settings', [
'webhooks' => [
[
'url' => $config['botUrl'],
'events' => [
[
'type' => 'messages',
'method' => 'post'
]
],
'mode' => 'body'
]
]
], 'PATCH');
}
}
$app->get('/', function (Request $request, Response $response) {
return $response->write('Bot is running');
});
$app->post('/messages', function (Request $request, Response $response) use ($config) {
$data = json_decode($request->getBody(), true);
$messages = $data['messages'] ?? [];
foreach ($messages as $message) {
if ($message['from_me']) {
continue;
}
$sender = ['to' => $message['chat_id']];
$endpoint = 'messages/text';
$textBody = trim($message['text']['body'] ?? '');
$commandIndex = is_numeric($textBody) ? (int)$textBody - 1 : null;
$commands = array_keys(COMMANDS);
$command = $commands[$commandIndex] ?? null;
switch ($command) {
case 'TEXT':
$sender['body'] = 'Simple text message';
break;
case 'IMAGE':
$sender['caption'] = 'Text under the photo.';
$sender['media'] = fopen(FILES['IMAGE'], 'r');
$endpoint = 'messages/image';
break;
case 'DOCUMENT':
$sender['caption'] = 'Text under the document.';
$sender['media'] = fopen(FILES['DOCUMENT'], 'r');
$endpoint = 'messages/document';
break;
case 'VIDEO':
$sender['caption'] = 'Text under the video.';
$sender['media'] = fopen(FILES['VIDEO'], 'r');
$endpoint = 'messages/video';
break;
case 'CONTACT':
$sender['name'] = 'Whapi Test';
$sender['vcard'] = file_get_contents(FILES['VCARD']);
$endpoint = 'messages/contact';
break;
case 'PRODUCT':
// Replace with your product ID
$endpoint = "business/products/{$config['product']}";
break;
case 'GROUP_CREATE':
$groupSettings = [
'subject' => 'Whapi.Cloud Test',
'participants' => [$message['from']]
];
$groupResponse = sendWhapiRequest('groups', $groupSettings, 'POST');
$sender['body'] = $groupResponse['group_id'] ? "Group created. Group id: {$groupResponse['group_id']}" : 'Error';
$endpoint = 'messages/text';
break;
case 'GROUP_TEXT':
$sender['to'] = $config['group'];
$sender['body'] = 'Simple text message for the group';
break;
case 'GROUPS_IDS':
$groupsResponse = sendWhapiRequest('groups', ['count' => 3], 'GET');
if (!empty($groupsResponse['groups'])) {
$groupIds = array_map(function ($group, $i) {
return ($i + 1) . ". {$group['id']} - {$group['name']}";
}, $groupsResponse['groups'], array_keys($groupsResponse['groups']));
$sender['body'] = implode(",\n ", $groupIds);
} else {
$sender['body'] = 'No groups';
}
break;
default:
$sender['body'] = "Hi. Send me a number from the list. Don't forget to change the actual data in the code! \n\n" .
implode("\n", array_map(function ($text) {
static $i = 0;
$i++;
return ($i) . ". $text";
}, COMMANDS, array_keys(COMMANDS)));
break;
}
try {
sendWhapiRequest($endpoint, $sender);
} catch (\Exception $e) {
error_log($e->getMessage());
return $response->withStatus(500)->write('Error: ' . $e->getMessage());
}
}
return $response->withStatus(200)->write('Ok');
});
$app->run();
Этот простой бот будет отвечать на незнакомые ему команды сообщением с меню, а так же реагировать определенными действиями на конкретные команды.
Так как ответы представлены в формате JSON, это дает большие возможности для развития вашего бота. Это может включать в себя детали, такие как время и статус доставки сообщения или статус пользователя (онлайн или офлайн), позволяя вашему боту оптимизировать взаимодействие с клиентами. В нашей документации и в Хабе для разработчиков представлена полная информация о структуре ответов и ожидаемых параметрах для каждого запроса. Все детали и параметры описаны в документации. Используйте весб функционал, чтобы сделать вашего бота еще эффективнее.
Расширенные функции
В нашей подробной документации вы найдете пошаговые инструкции и примеры использования методов, которые позволяют отправлять разнообразное содержимое, от файлов любого формата, местоположений и контактов до стикеров, опросов, и товаров в сообщении. Кроме того, вы можете взаимодействовать с сообщениями, цитируя их, реагируя через эмодзи, отмечая как прочитанные, прикреплять или имитируя печать в реальном времени при ответе.
Автоматизация групп в WhatsApp через Whapi.Cloud предоставляет обширные возможности. С помощью API вы можете без труда создавать, редактировать или удалять группы автоматическ, получать информацию о группах и участниках группы (номера, имена, общее количество), управлять участниками, определять роли администраторов, корректировать параметры группы (аватарки, имя, настройки), создавать приглашения через ссылки, блокировать участников и многое другое. Все доступные методы подробно изложены в документации к Whapi.Cloud.
Имея такой обширный набор возможностей в вашем распоряжении, создание бота под любой уровень сложности и задачи становится легким делом. Бесшовно интегрируйте вашего бота на PHP в любую платформу, будь то веб-сайт, приложение, CRM, ERP-систему и так далее.
Отправить медиа-сообщение с изображением
Отправка медиа-сообщения с изображением через бота WhatsApp повышает вовлеченность пользователя, предоставляет более динамичный и интерактивный опыт и позволяет компаниям демонстрировать продукты или передавать сообщения визуально, создавая более насыщенный канал связи по сравнению с простым текстом. Вот как отправить изображение через WhatsApp API с помощью PHP:
const BASE_URL = 'https://gate.whapi.cloud/';
$token = 'bg3FeZJ6jWGw32g03PRnoNkKO7k03GtX'; // Your API token
$data = array (
'media' => 'https://upload.wikimedia.org/wikipedia/commons/b/ba/Leonardo_self.jpg',
'to' => '[email protected]',
'mime_type' => 'jpg',
'caption' => 'Leonardo Self'
);
$data_json = json_encode($data);
$url = BASE_URL . 'messages/image';
$options = array(
'http' => array(
'method' => 'POST',
'header' => array(
'Authorization: Bearer '.$token,
'Content-Type: application/json',
'Accept: application/json'
),
'content' => $data_json
)
);
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;
Отправить файл через WhatsApp API
Отправка файлов через бота WhatsApp оптимизирует обмен информацией, предлагает безопасный и мгновенный способ распространения важных документов и улучшает пользовательский опыт, предоставляя более разнообразные варианты коммуникации, помимо текста и изображений. Вот как отправить файл через WhatsApp API с помощью PHP:
const BASE_URL = 'https://gate.whapi.cloud/';// Ensure that the PHP allow_url_fopen setting is enabled, as file_get_contents requires it for URL handling.
$token = 'bg3FeZJ6jWGw32g03PRnoNkKO7k03GtX'; // Your API token
$data = array (
'to' => '[email protected]',
'media' => 'data:application/octet-stream;name=site.webmanifest;base64,ewogICAgIm5hbWUiOiAiIiwKICAgICJzaG9ydF9uYW1lIjogIiIsCiAgICAiaWNvbnMiOiBbCiAgICAgICAgewogICAgICAgICAgICAic3JjIjogIi9hbmRyb2lkLWNocm9tZS0xOTJ4MTkyLnBuZyIsCiAgICAgICAgICAgICJzaXplcyI6ICIxOTJ4MTkyIiwKICAgICAgICAgICAgInR5cGUiOiAiaW1hZ2UvcG5nIgogICAgICAgIH0KICAgIF0sCiAgICAidGhlbWVfY29sb3IiOiAiI2ZmZmZmZiIsCiAgICAiYmFja2dyb3VuZF9jb2xvciI6ICIjZmZmZmZmIiwKICAgICJkaXNwbGF5IjogInN0YW5kYWxvbmUiCn0K',
'filename' => 'webmanifest',
'caption' => "It's my file",
'view_once' => true
);
$data_json = json_encode($data);
$url = BASE_URL . 'messages/document';
$options = array(
'http' => array(
'method' => 'POST',
'header' => array(
'Authorization: Bearer '.$token,
'Content-Type: application/json',
'Accept: application/json'
),
'content' => $data_json
)
);
$context = stream_context_create($options);
$response = file_get_contents($url, false, $context);
echo $response;
Заключение и рекомендации
Использование Whapi.Cloud и WhatsApp бота на базе PHP значительно упрощает интеграционные задачи с мессенджером. Как было продемонстрировано в этом руководстве, весь процесс может быть систематизирован на понятные простые этапы, даже для тех, кто только начинает знакомство с PHP или интеграцией API.
Этот бот разработан по принципу "plug-and-play". Начать работу очень просто. Во-первых, вам нужно зарегистрироваться в нашем сервисе. Мы предлагаем бесплатную пробную версию, позволяя вам протестировать все функции перед принятием решения о покупке. После регистрации загрузите код бота на ваш сервер. Следуя инструкциям, предоставленным в этой статье, ваш бот будет работать в кратчайшие сроки.
Помните, что если у вас возникнут вопросы или проблемы по пути, наша служба поддержки всегда готова помочь. Мы ценим каждого пользователя и стремимся обеспечить вашу работу с нашим API максимально комфортной и эффективной.