Loading...

Получение сообщений через WebHook


WebHook позволяет получать входящие и исходящие сообщения на указанный URL вашего сервера в режиме реального времени. Это избавляет от необходимости постоянного опроса API и позволяет мгновенно реагировать на новые сообщения. Идеально для создания интерактивных сервисов и чат-ботов, которые должны обрабатывать сообщения без задержек.


Настройка Webhook URL

Для получения сообщений через webhook необходимо настроить URL вашего сервера в разделе Настройки > Данные и API > Webhook URL. На этот URL будут отправляться POST-запросы с данными о входящих и исходящих сообщениях в формате JSON.


Формат данных сообщения
{
    "tip": "msg",
    "msg_data": {
        "msg_id": 1234567,
        "qoute_msg_id": null,
        "from_api": 0,
        "from_me": 0,
        "phone_acc": "79XXXXXXXXX",
        "phone": "79001234567",
        "chat_name": "Иван Петров",
        "tip_msg": "textMessage",
        "msg_text": "Добрый день, интересует ваше предложение",
        "msg_link": null,
        "date_ins": "2023-05-24 12:35:29",
        "state": "received",
        "senderId": null,
        "senderName": null
    }
}

Описание полей сообщения
Поле Описание
tip Тип события: "msg" - сообщение, "msg_state" - статус сообщения
msg_id Уникальный идентификатор сообщения
qoute_msg_id ID цитируемого сообщения (если сообщение является ответом)
from_api Флаг, указывающий на отправку через API: 0 - нет, 1 - да
from_me Направление сообщения: 0 - входящее, 1 - исходящее
phone_acc Номер телефона, подключенного к WAMM.chat
phone Номер телефона или ID чата получателя/отправителя
chat_name Имя контакта или название чата
tip_msg Тип сообщения: textMessage (текст), documentMessage (файл), imageMessage (изображение), audioMessage (голосовое/аудио), videoMessage (видео), location (местоположение), file_link (файл/изображение/голосовое)
msg_text Текст сообщения
msg_link Ссылка на файл (если применимо)
date_ins Дата и время отправки/получения
state Статус сообщения (sending, viewed, received, delivered и другие)
senderId ID или телефон отправителя (для групповых чатов)
senderName Имя отправителя (для групповых чатов)

Формат данных статуса сообщения
{
    "tip": "msg_state",
    "msg_data": {
        "msg_id": "1234567",
        "date_upd": "2023-05-24 22:46:03",
        "state": "delivered"
    }
}

Описание полей статуса сообщения
Поле Описание
msg_id Номер сообщения
date_upd Дата получения статуса
state Статус сообщения (sending, viewed, received, delivered, deleted, not sent и другие)

Обработка запросов на стороне сервера

Ваш сервер должен отвечать на webhook-запросы статусом HTTP 200. Если сервер не отвечает или возвращает код ошибки, WAMM.chat будет повторять еще 2 попытки отправки спустя 5-10 секунд.

Запросы выполняются последовательно, соблюдая порядок сообщений.


Пример обработки webhook на PHP
<?php
// Получаем данные из POST запроса
$input = file_get_contents('php://input');
$data = json_decode($input, true);

// Проверяем, что данные успешно декодированы
if ($data === null) {
    http_response_code(400); // Bad Request
    exit('Invalid JSON data');
}
// Всегда возвращаем статус 200, чтобы WAMM.chat знал, что запрос успешно обработан
header("HTTP/1.0 200 OK");
echo 'OK';

// Отправляем серверу WAMM.chat ответ и уже далее обрабатываем запрос сколько угодно продолжительно
fastcgi_finish_request();

// Лог для отладки (опционально)
file_put_contents('webhook_log.txt', date('Y-m-d H:i:s') . " - " . $input . PHP_EOL, FILE_APPEND);

// Обрабатываем сообщение
if (isset($data['tip'])) {
    switch ($data['tip']) {
        case 'msg':
            // Обработка нового сообщения
            processChatMessage($data['msg_data']);
            break;
        case 'msg_state':
            // Обработка статуса сообщения
            processMessageStatus($data['msg_data']);
            break;
        default:
            // Неизвестный тип события
            logUnknownEvent($data);
            break;
    }
}

// Функция обработки нового сообщения
function processChatMessage($message) {
    // Проверяем, входящее или исходящее сообщение
    if ($message['from_me'] == 0) {
        // Входящее сообщение (от клиента)
        $phone = $message['phone'];
        $text = $message['msg_text'];
        $msgId = $message['msg_id'];
        
        // Пример: сохранение в базу данных
        // saveMessageToDatabase($phone, $text, $msgId, 'incoming');
        
        // Пример: автоматический ответ на определенные сообщения
        if (strtolower($text) === 'привет') {
            // Отправка автоматического ответа через API WAMM.chat
            // sendReply($phone, 'Здравствуйте! Чем могу помочь?');
        }
    } else {
        // Исходящее сообщение (от оператора)
        // saveMessageToDatabase($message['phone'], $message['msg_text'], $message['msg_id'], 'outgoing');
    }
}

// Функция обработки статуса сообщения
function processMessageStatus($status) {
    $msgId = $status['msg_id'];
    $state = $status['state'];
    $dateUpd = $status['date_upd'];
    
    // Пример: обновление статуса сообщения в базе данных
    // updateMessageStatus($msgId, $state, $dateUpd);
    
    // Логирование изменения статуса
    $logMessage = "Сообщение ID: $msgId, новый статус: $state, дата обновления: $dateUpd";
    // logStatus($logMessage);
}

// Функция для логирования неизвестных событий
function logUnknownEvent($data) {
    // Записываем неизвестное событие в журнал для анализа
    // logToFile('unknown_events.log', json_encode($data));
}
?>

Советы по реализации
  • Всегда проверяйте подлинность запросов, например, по IP-адресам серверов WAMM.chat.
  • Обрабатывайте каждый запрос быстро (не более 10 секунд), чтобы избежать таймаутов.
  • Если обработка требует длительного времени, выполняйте основные задачи асинхронно (через очереди).
  • Настройте мониторинг вашего webhook-обработчика для отслеживания его работоспособности.

Примечания

Сообщения отправляются на webhook URL только при наличии активного подключения к сервису WAMM.chat. Если ваш webhook недоступен и сообщения не были доставлены, вы всегда можете получить их через методы API msg_get_last или msg_get.

Как начать использовать

Зарегистрируетесь, подключите свои мессенджеры и работайте в WAMM.сhat!
На регистрацию и настройку не более 5 минут!
Первые 3 дня всё бесплатно!