Войти

Документация

Управление инстансами

Описание

Возвращает QR-код для авторизации в формате base64.

URL ресурса:
https://app.api-messenger.com/go

Входные данные

Параметр Обязателен Значение
img Нет Получить QR-код в виде фото (img=true)

Выходные данные

Структура выходных данных приведена ниже.

   {
        "status": "{enum}",
        "img": "{string}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
img QR-код в формате base64
message Параметр выводится только в случае ошибки

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/go?token=' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
if ($data['status'] == 'OK') {
    echo '<img src="' . $data['img'] . '">';
} else {
    echo 'ERROR: ' . $data['message'];
}

Описание

Метод позволяет получить статус инстанса.

URL ресурса:
https://app.api-messenger.com/status

Выходные данные

Структура выходных данных приведена ниже.

    { 
        "status": "{enum}",
        "account": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
account Статус инстанса.

Возможные значения:

  • auth — авторизация пройдена.

  • reboot — перезагружается

  • qr_code — получен QR-код, ожидание сканирования.

  • no_auth — инстанс закрыт. нет авторизации

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/status?token=' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'].': '.$data['account'];

Описание

Метод позволяет перезапустить инстанс из статуса Подключен.

URL ресурса:
https://app.api-messenger.com/reboot

Выходные данные

Структура выходных данных приведена ниже.

    { 
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Параметр выводится только в случае ошибки

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/reboot?token=' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
echo $result;

Описание

Метод позволяет закрыть текущий инстанс.

URL ресурса:
https://app.api-messenger.com/exit

Выходные данные

Структура выходных данных приведена ниже.

    { 
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Параметр выводится только в случае ошибки

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/exit?token=' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Отправка и приём сообщений

Описание

Метод позволяет ставить сообщения в очередь на отправку.
Сообщение на отправку хранится 24 часа в очереди.
Проверка авторизации инстанса не выполняется.

URL ресурса:
https://app.api-messenger.com/sendmessage

Входные данные

Структура тела POST-запроса:

    [
        {
            "chatId": "{string}",
            "message": "{string}",
            "sendSeen": "{boolean}",
            "customParametr": "{string}",
        },
        ...
    ]

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да Получатель сообщения в формате WhatsApp API: 71111111111@c.us, если получатель группа: 79261879777-1513760411@g.us
message Да Текстовое сообщение
sendSeen Нет Отметить сообщения как прочитанные. По умолчанию включен. Принимает значения: true/false
customParametr Нет Пользовательский параметр. Приходит в обратно в хуке

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки, или, в случае успеха, количество добавленных сообщений в формате Successfully added 10

Ограничения

В одном запросе можно передать не более чем 100 сообщений.

Примеры


$token = '1xmrd7YHjff5';

    $array = array(
    array(
        'chatId' => '79999999999@c.us', // Телефон получателя
        'message' => 'Hello!', // Сообщение
    )
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/sendmessage?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет ставить сообщение с кнопками в очередь на отправку.
Сообщение на отправку хранится 24 часа в очереди.
Проверка авторизации инстанса не выполняется.

URL ресурса:
https://app.api-messenger.com/sendbutton

Входные данные

Структура тела POST-запроса:


        {
            "chatId": "{string}",
            "message": "{string}",
            "title": "{string}",
            "footer": "{string}",
            "customParametr": "{string}",
            "buttons": [
                            {
                                "body": "{string}",
                                "id": "{string}",
                            },
                            ...
                        ]
        }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да Получатель сообщения в формате WhatsApp API: 71111111111@c.us, если получатель группа: 79261879777-1513760411@g.us
message Да Текст сообщения.
title Да Заголовок сообщения.
footer Да Подвал сообщения.
customParametr Нет Пользовательский параметр. Приходит в обратно в хуке
Параметры, вложенные в buttons
body Да Текст кнопки.
id Да Идентификатор кнопки.

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
            'chatId' => '79999999999@c.us',
            'message' => 'Message',
            'title' => 'Title Custom',
            'footer' => 'footer',
            'buttons' => array(
                            array(
                                'body' => 'Button #1',
                                'id' => 'id1'
                                )
                        )
        );

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/sendbutton?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет ставить сообщение с списком выбора в очередь на отправку.
Сообщение на отправку хранится 24 часа в очереди.
Проверка авторизации инстанса не выполняется.

URL ресурса:
https://app.api-messenger.com/sendlist

Входные данные

Структура тела POST-запроса:


        {
            "chatId": "{string}",
            "message": "{string}",
            "title": "{string}",
            "button": "{string}",
            "customParametr": "{string}",
            "sections": [
                            {
                                "title": "{string}",
                                "rows": [
                                    {
                                        "title": "{string}",
                                        "id": "{string}",
                                        "description": "{string}"
                                    },
                                    ...
                                ]   
                            },
                            ...
                        ]
        }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да Получатель сообщения в формате WhatsApp API: 71111111111@c.us, если получатель группа: 79261879777-1513760411@g.us
message Да Текст сообщения.
title Да Заголовок сообщения.
button Да Надпись на кнопке списка выбора.
customParametr Нет Пользовательский параметр. Приходит в обратно в хуке
Параметры, вложенные в sections
title Да Заголовок списка выбора.
rows Да Значения списка выбора
Параметры, вложенные в rows
title Да Текст значения списка.
id Да Идентификатор значения списка.
description Да Описание значения списка.

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
            'chatId' => '79999999999@c.us',
            'message' => 'Message',
            'title' => 'Title Custom',
            'button' => 'Click',
            'sections' => array(
                            array(
                                'title' => 'Title #1',
                                'rows' => array(
                                            array(
                                                'title' => 'option 1',
                                                'id' => 'option_1',
                                                'description' => 'Description 1'
                                            ),
                                            array(
                                                'title' => 'option 2',
                                                'id' => 'option_2',
                                                'description' => 'Description 2'
                                            )
                                        )
                                )
                        )
        );

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/sendlist?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет ставить сообщение с контактом в очередь на отправку.
Сообщение на отправку хранится 24 часа в очереди.
Проверка авторизации инстанса не выполняется.

URL ресурса:
https://app.api-messenger.com/sendcontact

Входные данные

Структура тела POST-запроса:

    [
        {
            "chatId": "{string}",
            "contact": "{string}",
            "name": "{string}",
            "customParametr": "{string}"
        },
        ...
    ]

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да Получатель сообщения в формате WhatsApp API: 71111111111@c.us, если получатель группа: 79261879777-1513760411@g.us
contact Да Контакт который должен быть отправлен в формате 71111111111
name Нет Имя контакта
customParametr Нет Пользовательский параметр. Приходит в обратно в хуке

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки, или, в случае успеха, количество добавленных контактов в формате Successfully added 10

Ограничения

В одном запросе можно передать не более чем 100 контактов.

Примеры


$token = '1xmrd7YHjff5';

    $array = array(
    array(
        'chatId' => '79999999999@c.us', // Телефон получателя
        'contact' => '71111111111', // Отправляемый контакт
        'name' => 'Name contact'
    )
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/sendcontact?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет ставить сообщение с локацией в очередь на отправку.
Сообщение на отправку хранится 24 часа в очереди.
Проверка авторизации инстанса не выполняется.

URL ресурса:
https://app.api-messenger.com/sendlocation

Входные данные

Структура тела POST-запроса:

   {
        "chatId": "{string}",
        "latitude": "{string}",
        "longitude": "{string}",
        "description": "{string}",
        "customParametr": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да Получатель сообщения в формате WhatsApp API: 71111111111@c.us, если получатель группа: 79261879777-1513760411@g.us
latitude Да Широта
longitude Да Долгота
description Да Описание
customParametr Нет Пользовательский параметр. Приходит в обратно в хуке

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
        'chatId' => '79999999999@c.us', 
        'latitude' => '37.422', 
        'longitude' => '-122.084',
        'description' => "Googleplex\nGoogle Headquarters"
    );

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/sendlocation?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет поставить в очередь на отправку файл.
Файл хранится 24 часа в очереди.
Проверка авторизации инстанса не выполняется.

URL ресурса:
https://app.api-messenger.com/sendfile

Входные данные

Структура тела POST-запроса:

    [
        {
            "chatId": "{string}",
            "body": "{string}",
            "filename": "{string}",
            "caption": "{string}",
            "customParametr": "{string}"
        }
    ]

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да Получатель сообщения в формате WhatsApp API: 71111111111@c.us, если получатель группа: 79261879777-1513760411@g.us
body Да Строка в формате base64
filename Да Название файла с расширением.
caption Нет Подпись к файлу, которую увидит получатель.
customParametr Нет Пользовательский параметр. Приходит в обратно в хуке

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение об успешном добавлении или возникшей ошибке.

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    array(
        'body' => 'data:image/jpeg;base64,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',
        'filename' => 'filename_1.jpg',
        'caption' => 'подпись',
        'chatId' => '79999999999@c.us', // Телефон получателя
    )
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/sendfile?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет поставить в очередь на отправку файл по URL.
Файл хранится 24 часа в очереди.
Проверка авторизации инстанса не выполняется.

URL ресурса:
https://app.api-messenger.com/sendfileurl

Входные данные

Структура тела POST-запроса:

   {
        "chatId": "{string}",
        "url": "{string}",
        "filename": "{string}",
        "caption": "{string}",
        "customParametr": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да Получатель сообщения в формате WhatsApp API: 71111111111@c.us, если получатель группа: 79261879777-1513760411@g.us
url Да Ссылка на файл
filename Да Название файла с расширением.
caption Нет Подпись к файлу, которую увидит получатель.
customParametr Нет Пользовательский параметр. Приходит в обратно в хуке

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
        'url' => 'https://img1.goodfon.ru/wallpaper/nbig/a/69/kartinka-3d-dikaya-koshka.jpg',
        'filename' => 'filename_1.jpg',
        'caption' => 'caption',
        'chatId' => '79999999999@c.us', // Телефон получателя
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/sendfileurl?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет получить все сообщения за последние 30 дней.

URL ресурса:
https://app.api-messenger.com/messages

Входные данные

Параметр Обязателен Значение
api Нет Получить сообщения отправленные через API. Принимает значение true
from Нет Получить сообщения начиная с (>=). Фильтрация происходит по параметру timestamp
to Нет Получить сообщения до (<=). Фильтрация происходит по параметру timestamp
page Нет Номер страницы результатов, которую необходимо показать в ответе.

Если указан номер страницы, превышающий общее количество найденных страниц, выдается ошибка.

Значение по умолчанию: 1.

Выходные данные

Структура выходных данных приведена ниже.

    { 
        "status": "{enum}",
        "pager":
            {
                "currentPage": {int32},
                "pagesCount": {int32},
                "pageSize": {int32},
                "totalsMessage": {int32}
            },
        "messages":
            [
                {
                    "id": "{string}",
                    "body": "{string}",
                    "chatId": "{string}",
                    "formattedTitle": "{string}",
                    "fromMe": {boolean},
                    "imgURL": "{string}",
                    "notifyName": "{string}",
                    "sender": "{string}",
                    "timestamp": {int64},
                    "vCards": {array},
                    "location": {object},
                    "selectedRowId": "{string}",
                    "selectedButtonId": "{string}",
                    "api": {boolean},
                    "customParametr": "{string}",
                    "type": "{enum}"
                },
                ...
            ]
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
pager Сводка по результатам поиска.
messages Список сообщений, удовлетворяющих условиям поиска.
Параметры, вложенные в pager
currentPage Номер выводимой страницы результатов.

Если сообщений, удовлетворяющих заданным в запросе условиям поиска, не найдено, параметр не выводится.
pagesCount Количество страниц с результатами.

Если сообщений, удовлетворяющих заданным в запросе условиям поиска, не найдено, параметр не выводится.
pageSize Количество выводимых на странице сообщений.

Если сообщений, удовлетворяющих заданным в запросе условиям поиска, не найдено, параметр не выводится.
totalsMessage Общее количество найденных сообщений.

Если сообщений, удовлетворяющих заданным в запросе условиям поиска, не найдено, значение параметра: 0.
Параметры, вложенные в messages
id Индивидуальный идентификатор сообщения
body Если значение параметра type — chat, выводится текст сообщения, в ином случае выводится путь на скачивание файла.
Например: /file/63f58d2e62d98ff0ab305026
Готовая ссылка будет выглядеть https://app.api-messenger.com/file/63f58d2e62d98ff0ab305026?token=xxxx
chatId Индивидуальный идентификатор чата
formattedTitle Имя отправителя
fromMe Возможные значения:

  • true — исходящее сообщение.

  • false — входящее сообщение.
imgURL URL на аватар пользователя

Параметр выводится только при fromMe=false
notifyName Имя пользователя в WhatsApp

Параметр выводится только при fromMe=false
sender Идентификатор автора сообщения
timestamp Метка времени UNIX в секундах
selectedRowId ID выбранного пункта который был передан через метод POST /sendList

Параметр выводится только при type=list_response
selectedButtonId ID выбранной кнопки который был передан через метод POST /sendButton

Параметр выводится только при type=buttons_response
api Флаг отправки через API. Принимает значения true/false
customParametr Пользовательский параметр.
type Тип сообщения.

Основные возможные значения:

  • document — документ.

  • video — видео.

  • image — изображение.

  • ptt — голосовое сообщение.

  • audio — аудио запись.

  • chat — текстовое сообщение.

  • sticker — стикер.

  • location — местоположение.

  • vcard — карточка контакта.

  • multi_vcard — несколько карточек контактов.

  • call_log — пропущенный звонок.

  • list — список выбора.

  • list_response — клик по списку.

  • buttons_response — клик по кнопке.

  • e2e_notification — уведомление о новом чате.

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/messages?token=' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
if ($data['status'] == 'OK') {
    if ($data['pager']['totalsMessage'] > 0) {
        foreach ($data['messages'] as $v) {
            echo '

Отправитель: ' . (int) $v['sender'] . '
Сообщение: ' . $v['body'] . '

'; } } else echo 'no messages'; } else echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет получить 100 последних сообщений для конкретного чата.

URL ресурса:
https://app.api-messenger.com/messagesinchat

Входные данные

Параметр Обязателен Значение
id Да Индивидуальный идентификатор чата

Выходные данные

Структура выходных данных приведена ниже.

    { 
        "status": "{enum}",
        "messages":
            [
                {
                    "id": "{string}",
                    "body": "{string}",
                    "chatId": "{string}",
                    "formattedTitle": "{string}",
                    "fromMe": {boolean},
                    "imgURL": "{string}",
                    "notifyName": "{string}",
                    "sender": "{string}",
                    "timestamp": {int64},
                    "vCards": {array},
                    "location": {object},
                    "selectedRowId": {string},
                    "selectedButtonId": {string},
                    "type": "{enum}"
                },
                ...
            ]
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
messages Список сообщений, удовлетворяющих условиям поиска.
Параметры, вложенные в messages
id Индивидуальный идентификатор сообщения
body Если значение параметра type— chat, выводится текст сообщения, в ином случае выводится ссылка на скачивание файла.
chatId Индивидуальный идентификатор чата
formattedTitle Имя отправителя
fromMe Возможные значения:

  • true — исходящее сообщение.

  • false — входящее сообщение.
imgURL URL на аватар пользователя

Параметр выводится только при fromMe=false
notifyName Имя пользователя в WhatsApp

Параметр выводится только при fromMe=false
sender Идентификатор автора сообщения
timestamp Метка времени UNIX в секундах
selectedRowId ID выбранного пункта который был передан через метод POST /sendList

Параметр выводится только при type=list_response
selectedButtonId ID выбранной кнопки который был передан через метод POST /sendButton

Параметр выводится только при type=buttons_response
type Тип сообщения.

Основные возможные значения:

  • document — документ.

  • video — видео.

  • image — изображение.

  • ptt — голосовое сообщение.

  • audio — аудио запись.

  • chat — текстовое сообщение.

  • sticker — стикер.

  • location — местоположение.

  • vcard — карточка контакта.

  • multi_vcard — несколько карточек контактов.

  • list — список выбора.

  • list_response — клик по списку.

  • buttons_response — клик по кнопке.

  • call_log — пропущенный звонок.

  • e2e_notification — уведомление о новом чате.

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/messagesinchat?token=' . $token .'&id=7111111@c.us');
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
if ($data['status'] == 'OK') {
    if (count($data['messages']) > 0) {
        foreach ($data['messages'] as $v) {
            echo '

Отправитель: ' . (int) $v['sender'] . '
Сообщение: ' . $v['body'] . '

'; } } else echo 'no messages'; } else echo $data['status'] . ': ' . $data['message'];

Управление очередями

Описание

Метод позволяет получить все сообщения которые стоят в очереди на отправку.

URL ресурса:
https://app.api-messenger.com/messagesqueue

Входные данные

Параметр Обязателен Значение
filter Нет Фильтр по типу сообщения. Пример: filter=message,file,contact,fileurl,list,location,button
page Нет Номер страницы результатов, которую необходимо показать в ответе.

Если указан номер страницы, превышающий общее количество найденных страниц, выдается ошибка.

Значение по умолчанию: 1.

Выходные данные

Структура выходных данных приведена ниже.

    { 
        "status": "{enum}",
        "pager":
            {
                "currentPage": {int32},
                "pagesCount": {int32},
                "pageSize": {int32},
                "totalsMessage": {int32}
            },
        "messages":
            [
                {
                    "type": "{enum}",
                    "chatId": "{string}",
                    ... // Параметры в соответствие с отправляемым методом
                },
                ...
            ]
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
pager Сводка по результатам поиска.
messages Список сообщений, удовлетворяющих условиям поиска.
Параметры, вложенные в pager
currentPage Номер выводимой страницы результатов.

Если сообщений, удовлетворяющих заданным в запросе условиям поиска не найдено, параметр не выводится.
pagesCount Количество страниц с результатами.

Если сообщений, удовлетворяющих заданным в запросе условиям поиска не найдено, параметр не выводится.
pageSize Количество выводимых на странице сообщений.

Если сообщений, удовлетворяющих заданным в запросе условиям поиска не найдено, параметр не выводится.
totalsMessage Общее количество найденных сообщений.

Если сообщений, удовлетворяющих заданным в запросе условиям поиска, не найдено, значение параметра: 0.
Параметры, вложенные в messages
type Тип сообщения.

Возможные значения:

  • file — файл.

  • contact — контакт.

  • message — текстовое сообщение.

  • fileurl — файл отправленный по URL.

  • list — сообщение со списком выбора.

  • location — местоположение.

  • button — сообщение с кнопками.

chatId Индивидуальный идентификатор чата

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/messagesqueue?token=' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
if ($data['status'] == 'OK') {
    if ($data['pager']['totalsMessage'] > 0) {
        foreach ($data['messages'] as $v) {
            echo '

Recipient: ' . (int) $v['chatId'] . '
Message: ' . $v['message'] . '

'; } } else echo 'no messages'; } else echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет очистить все сообщения стоящие в очереди на отправку.

URL ресурса:
https://app.api-messenger.com/clearmessagesqueue

Входные данные

Параметр Обязателен Значение
filter Нет Удалить только определенные типы сообщений. Пример: filter=message,file,contact,fileurl,list,location,button

Выходные данные

Структура выходных данных приведена ниже.

    { 
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/clearmessagesqueue?files=true&token=' . $token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Управление чатами и группами

Описание

Метод позволяет получить список всех чатов.

URL ресурса:
https://app.api-messenger.com/chats

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "chats": 
            [
                {
                    "chatId": "{string}",
                    "formattedTitle": "{string}",
                    "unreadCount": {int64},
                    "muteExpiration": {int64},
                    "isGroup": {boolean},
                    "isMuted": {boolean},
                    "timestamp": {int64},
                    "groupMetadata": {object}
                }
            ]
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
Параметры, вложенные в chats
chatId Индивидуальный идентификатор чата
formattedTitle Название чата
unreadCount Количество непрочитанных сообщений
muteExpiration Метка времени UNIX в секундах когда у чата произойдет истечения времени на сколько он был заглушен
isGroup Флаг указывает является чат группой или нет
isMuted Флаг указывает чат заглушен или нет
timestamp Метка времени UNIX в секундах
groupMetadata Данный параметр выводится если чат является группой и содержит такие данные как участники, администраторы, бывшие участники и т.д.

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/chats?token=' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
print_r($data);

Описание

Метод позволяет отметить сообщения как прочитанные в чате или группе.

URL ресурса:
https://app.api-messenger.com/readchat

Входные данные

Структура тела POST-запроса:

    [
        {
            "chatId": "{string}"
        },
        ...
    ]

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да Индивидуальный индификатор чата

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}",
        "result": [
                {
                    "chatId": "{string}",
                    "status": "{boolean}",
                },
                ...
            ],

    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR
Параметры, вложенные в result
chatId Индивидуальный индификатор чата
status Результат запроса

Ограничения

В одном запросе можно передать не более чем 100 чатов.

Примеры


$token = '1xmrd7YHjff5';

$array = [
    [
        'chatId' => '79999999999@c.us', // чат с контактом            79999999999
    ],
];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/readchat?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет пометить непрочитанным диалог (чат) или группу.

URL ресурса:
https://app.api-messenger.com/markchatunread

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID чата в формате WhatsApp API: 71111111111@c.us или группы: 79261879777-1513760411@g.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'chatId' => '71111111111@с.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/markChatUnread?token=' . $token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет архивировать диалог (чат) или группу.

URL ресурса:
https://app.api-messenger.com/archivechat

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID чата в формате WhatsApp API: 71111111111@c.us или группы: 79261879777-1513760411@g.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'chatId' => '71111111111@с.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/archiveChat?token=' . $token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет разархивировать диалог (чат) или группу.

URL ресурса:
https://app.api-messenger.com/unarchivechat

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID чата в формате WhatsApp API: 71111111111@c.us или группы: 79261879777-1513760411@g.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'chatId' => '71111111111@с.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/unarchiveChat?token=' . $token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет закрепить диалог (чат) или группу.

URL ресурса:
https://app.api-messenger.com/pinchat

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID чата в формате WhatsApp API: 71111111111@c.us или группы: 79261879777-1513760411@g.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'chatId' => '71111111111@с.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/pinChat?token=' . $token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет открепить диалог (чат) или группу.

URL ресурса:
https://app.api-messenger.com/unpinchat

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID чата в формате WhatsApp API: 71111111111@c.us или группы: 79261879777-1513760411@g.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'chatId' => '71111111111@с.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/unpinChat?token=' . $token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет отключить звук у диалога (чата) или группы.

URL ресурса:
https://app.api-messenger.com/mutechat

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}",
        "unmuteDate": "{int64}",
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID чата в формате WhatsApp API: 71111111111@c.us или группы: 79261879777-1513760411@g.us
unmuteDate Нет Метка времени UNIX до какого времени отключить звук. Если не указан отключает навсегда.

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'chatId' => '71111111111@с.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/muteChat?token=' . $token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет включить звук у диалога (чата) или группы.

URL ресурса:
https://app.api-messenger.com/unmutechat

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID чата в формате WhatsApp API: 71111111111@c.us или группы: 79261879777-1513760411@g.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'chatId' => '71111111111@с.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/unmuteChat?token=' . $token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет удалить диалог (чат) или группу.

URL ресурса:
https://app.api-messenger.com/removechat

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID чата в формате WhatsApp API: 71111111111@c.us или группы: 79261879777-1513760411@g.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'chatId' => '79261879777-1513760411@g.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/removechat?token=' . $token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Работа с группами

Описание

Метод позволяет создать группу и добавить участников в эту группу.

URL ресурса:
https://app.api-messenger.com/group

Входные данные

Структура тела POST-запроса:

    {
        "name": "{string}",
        "chatId": [
            "{string}",
            ...
        ]
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
name Да Имя группы
chatId Да Массив участников группы в формате WhatsApp API: 71111111111@c.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "chatId": "{string}",
        "inviteLink": "{string}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR
chatId ID созданной группы в формате WhatsApp API 79261879777-1513760411@g.us.

Параметр выводится только при status=OK
inviteLink Ссылка для приглашения в группу

Параметр выводится только при status=OK

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'name' => 'Group 1', // название группы
    'chatId' => array(
        '79111111111@c.us' // участник группы        
    )
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/group?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
print_r($data);

Описание

Метод позволяет установить/изменить наименование группы.

URL ресурса:
https://app.api-messenger.com/setSubjectGroup

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}",
        "subject": "{string}",
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID группы в формате WhatsApp API: 79261879777-1513760411@g.us
subject Да Наименование группы.

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'chatId' => '79261879777-1513760411@g.us',
    'subject' => 'Custom title',
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/setSubjectGroup?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет установить/изменить описание группы.

URL ресурса:
https://app.api-messenger.com/setDescriptionGroup

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}",
        "description": "{string}",
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID группы в формате WhatsApp API: 79261879777-1513760411@g.us
description Да Описание группы.

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'chatId' => '79261879777-1513760411@g.us',
    'description' => 'Desc',
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/setDescriptionGroup?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет изменить настройки группы.

URL ресурса:
https://app.api-messenger.com/setSettingsGroup

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}",
        "setMessagesAdminsOnly": "{boolean}",
        "setInfoAdminsOnly": "{boolean}",
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID группы в формате WhatsApp API: 79261879777-1513760411@g.us
setMessagesAdminsOnly Да true — сообщения в группу могут отправлять только администраторы.
false — сообщения в группу могут отправлять все.
setInfoAdminsOnly Да true — изменять тему, картинку и описание могут только администраторы.
false — изменять тему, картинку и описание могут все.

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'chatId' => '79261879777-1513760411@g.us',
    'setMessagesAdminsOnly' => true
    'setInfoAdminsOnly' => false,
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/setSettingsGroup?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет выйти из группы.

URL ресурса:
https://app.api-messenger.com/leavegroup

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID группы в формате WhatsApp API: 79261879777-1513760411@g.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'chatId' => '79261879777-1513760411@g.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/leavegroup?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет добавить участника в группу.

URL ресурса:
https://app.api-messenger.com/addgroupparticipant

Входные данные

Структура тела POST-запроса:

    {
        "groupId": "{string}",
        "participantChatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
groupId Да ID группы в формате WhatsApp API: 79261879777-1513760411@g.us
participantChatId Да ID добавляемого участника в формате WhatsApp API: 71111111111@c.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'groupId' => '79261879777-1513760411@g.us',
    'participantChatId' => '71111111111@c.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/addgroupparticipant?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет удалить участника из группы.

URL ресурса:
https://app.api-messenger.com/removegroupparticipant

Входные данные

Структура тела POST-запроса:

    {
        "groupId": "{string}",
        "participantChatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
groupId Да ID группы в формате WhatsApp API: 79261879777-1513760411@g.us
participantChatId Да ID удаляемого участника в формате WhatsApp API: 71111111111@c.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'groupId' => '79261879777-1513760411@g.us',
    'participantChatId' => '71111111111@c.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/removegroupparticipant?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет назначить участника администратором группы.

URL ресурса:
https://app.api-messenger.com/promotegroupparticipant

Входные данные

Структура тела POST-запроса:

    {
        "groupId": "{string}",
        "participantChatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
groupId Да ID группы в формате WhatsApp API: 79261879777-1513760411@g.us
participantChatId Да ID участника в формате WhatsApp API: 71111111111@c.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'groupId' => '79261879777-1513760411@g.us',
    'participantChatId' => '71111111111@c.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/promotegroupparticipant?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет лишить участника прав администрирования группы.

URL ресурса:
https://app.api-messenger.com/demotegroupparticipant

Входные данные

Структура тела POST-запроса:

    {
        "groupId": "{string}",
        "participantChatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
groupId Да ID группы в формате WhatsApp API: 79261879777-1513760411@g.us
participantChatId Да ID участника в формате WhatsApp API: 71111111111@c.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'groupId' => '79261879777-1513760411@g.us',
    'participantChatId' => '71111111111@c.us'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/demotegroupparticipant?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Управление статусом и состоянием

Описание

Метод позволяет активировать статус "В сети".

URL ресурса:
https://app.api-messenger.com/setpresence

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/setpresence?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет отменить статус "В сети".

URL ресурса:
https://app.api-messenger.com/cancelpresence

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/cancelpresence?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет отправить состояние "Печатает..." в чат или группу. Это будет длиться 25 секунд.

URL ресурса:
https://app.api-messenger.com/sendstatetyping

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID чата в формате WhatsApp API: 71111111111@c.us или группы: 79261879777-1513760411@g.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = [ 'chatId' => '79999999999@c.us' ];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/sendStateTyping?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет отправить состояние "Записывает аудио..." в чат или группу. Это будет длиться 25 секунд.

URL ресурса:
https://app.api-messenger.com/sendstaterecording

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID чата в формате WhatsApp API: 71111111111@c.us или группы: 79261879777-1513760411@g.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = [ 'chatId' => '79999999999@c.us' ];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/sendStateRecording?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет немедленно прекратить транслировать состояние "Печатает..." или "Записывает аудио..."

URL ресурса:
https://app.api-messenger.com/clearstate

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да ID чата в формате WhatsApp API: 71111111111@c.us или группы: 79261879777-1513760411@g.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = [ 'chatId' => '79999999999@c.us' ];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/clearState?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Дополнительно

Описание

Метод позволяет получить информацию о подключенном телефоне.

URL ресурса:
https://app.api-messenger.com/info

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}",
        "result": {
                "id": "{string}",
                "number": "{string}",
                "img": "{string}"
            }
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR
result Результат запроса.

Параметр выводится только при status=OK
Параметры, вложенные в result
id Индивидуальный идентификатор
number Телефон
img Ссылка на аватар если присутствует

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/info?token=' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo print_r($data);

Описание

Метод позволяет получить контакты пользователя.

URL ресурса:
https://app.api-messenger.com/contacts

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}",
        "contacts": [
            {
                "chatId": "{string}",
                "name": "{string}",
                "pushname": "{string}",
                "shortName": "{string}",
                "isMe": "{boolean}",
                "isUser": "{boolean}",
                "isGroup": "{boolean}",
                "isWAContact": "{boolean}",
                "isMyContact": "{boolean}",
                "isBlocked": "{boolean}",
                "number": "{string}"
            },
            ...
        ]
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR
contacts Результат запроса.

Параметр выводится только при status=OK
Параметры, вложенные в contacts
chatId Индивидуальный идентификатор
name Имя контакта, сохраненное текущим пользователем
pushname Имя, которое контакт настроил для публичного отображения
shortName Сокращенный вариант имени
isMe Указывает, является ли контакт контактом текущего пользователя
isUser Указывает, является ли контакт контактом пользователя
isGroup Указывает, является ли контакт групповым
isWAContact Указывает, зарегистрирован ли номер в WhatsApp
isMyContact Указывает, сохранен ли номер в контактах текущего телефона
isBlocked Указывает, заблокировали ли вы этот контакт
number Телефон контакта

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/contacts?token=' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo print_r($data);

Описание

Метод позволяет проверить сущестование в Whatsapp пользователя с указанным номером телефона.

URL ресурса:
https://app.api-messenger.com/checknumber

Входные данные

Параметр Обязателен Значение
id Да ID пользователя в формате WhatsApp API: 71111111111@c.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "result": {
            "canReceiveMessage": "{int}",
            "id": "{string}",
            "isBusiness": "{int}",
            "numberExists": "{int}",
            "img": "{string}",
            "status": "{int}"
        }
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
result Результат запроса.

Параметр выводится только при status=OK
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR
Параметры, вложенные в result
canReceiveMessage Возможность получить входящее сообщение.

Возможные значения:

  • 1 — может получить.

  • 0 — не может получить.

Параметр выводится только при status=OK
id ID переданный в параметре GET

Параметр выводится только при status=OK
isBusiness Флаг Business аккаунта.

Возможные значения:

  • 1 — да.

  • 0 — нет.

Параметр выводится только при status=OK
status Код ответа WhatsApp.

Параметр выводится только при status=OK
numberExists Существование номера в WhatsApp

Возможные значения:

  • 1 — номер зарегистрирован в WhatsApp.

Параметр выводится только при status=200
img URL на аватар контакта в WhatsApp

Параметр выводится только при status=200

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/checknumber?id=79999999999@c.us&token=' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'] . ': ' . $data['message'];

Описание

Метод позволяет установить аватар у профиля или группы по URL

URL ресурса:
https://app.api-messenger.com/setpictureurl

Входные данные

Структура тела POST-запроса:

   {
        "chatId": "{string}",
        "url": "{string}",
        "filename": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да Если устанавливаем собственный аватар указываем result.id из метода /POST info в формате 71111111111@c.us, если у группы: 79261879777-1513760411@g.us
url Да Ссылка на картинку
filename Да Название файла с расширением.

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = array(
        'url' => 'https://img1.goodfon.ru/wallpaper/nbig/a/69/kartinka-3d-dikaya-koshka.jpg',
        'filename' => 'filename_1.jpg',
        'chatId' => '79999999999@c.us',

);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/setPictureUrl?token=' . $token);
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Описание

Метод позволяет удалить аватар у профиля или группы

URL ресурса:
https://app.api-messenger.com/deletepicture

Входные данные

Структура тела POST-запроса:

    {
        "chatId": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
chatId Да Если удаляем собственный аватар указываем result.id из метода /POST info в формате 71111111111@c.us или группы: 79261879777-1513760411@g.us

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Сообщение, содержащее описание ошибки.

Параметр выводится только при status=ERROR

Примеры


$token = '1xmrd7YHjff5';

$array = [ 'chatId' => '79999999999@c.us' ];

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/deletePicture?token=' . $token);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Webhook

Описание

Метод позволяет получить установленный Webhook.

URL ресурса:
https://app.api-messenger.com/webhook

Выходные данные

Структура выходных данных приведена ниже.

    { 
        "status": "{enum}",
        "webhook": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
webhook Установленный Webhook либо его отсутствие.

Примеры


$token = '1xmrd7YHjff5';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/webhook?token=' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
if ($data['status'] == 'OK') {
        echo !empty($data['webhook']) ? $data['webhook'] : 'no webhook';
} else
    echo $data['status'];

Описание

Метод позволяет установить URL для получения webhook.

URL ресурса:
https://app.api-messenger.com/setwebhook

Входные данные

Структура тела POST-запроса:

    {
        "webhook": "{string}"
    }

В теле POST-запроса передаются следующие параметры:

Параметр Обязателен Значение
webhook Да URL адрес для получения webhook

Выходные данные

Структура выходных данных приведена ниже.

    { 
        "status": "{enum}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.

Примеры


$token = '1xmrd7YHjff5';

$array = array(
    'webhook' => 'http://your.site/incoming_message.php'
);

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/setwebhook?token=' . $token);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_POSTFIELDS, json_encode($array));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
echo $data['status'];

Система умеет отправлять уведомления о событиях (входящие сообщения, статус отправленных сообщений, изменения состояния инстанса). Для отправки уведомлений во внешние системы в личном кабинете должен быть настроен HTTP адрес. Порядок получения уведомлений на стороне внешней системы не определен. Необходимо учитывать это при обработке событий опираясь на метку времени в поле timestamp.

Формат запроса type=stateInstance

    { 
        "type": "stateInstance",                
        "status": "{enum}",
        "token": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус инстанса.

Возможные значения:

  • qr_code — получен QR-код, ожидание сканирования.

  • no_auth — инстанс закрыт. нет авторизации
token Токен

Формат запроса type=messageOrAsk

    { 
        "type": "messageOrAsk",                
        "messages":
            [
                {
                    "id": "{string}",
                    "token": "{string}",
                    "body": "{string}",
                    "chatId": "{string}",
                    "formattedTitle": "{string}",
                    "fromMe": {boolean},
                    "imgURL": "{string}",
                    "notifyName": "{string}",
                    "sender": "{string}",
                    "timestamp": {int64},
                    "vCards": {array},
                    "location": {object},
                    "selectedRowId": "{string}",
                    "selectedButtonId": "{string}",
                    "api": {boolean},
                    "customParametr": "{string}",
                    "type": "{enum}"
                },
                ...
            ],

        "ask":
            [
                {
                    "status": "1",
                    "chatId": "11111111111@c.us",
                    "message": {object}
                },
                ...
            ]
    }

Описание параметров:

Параметр Значение
Параметры, вложенные в messages
id Индивидуальный идентификатор сообщения
token Токен
body Если значение параметра type — chat, выводится текст сообщения, в ином случае выводится путь на скачивание файла.
Например: /file/63f58d2e62d98ff0ab305026
Готовая ссылка будет выглядеть https://app.api-messenger.com/file/63f58d2e62d98ff0ab305026?token=xxxx
chatId Индивидуальный идентификатор чата
formattedTitle Имя отправителя
fromMe Возможные значения:

  • true — исходящее сообщение.

  • false — входящее сообщение.
imgURL URL на аватар пользователя

Параметр выводится только при fromMe=false
notifyName Имя пользователя в WhatsApp

Параметр выводится только при fromMe=false
sender Идентификатор автора сообщения
timestamp Метка времени UNIX в секундах
selectedRowId ID выбранного пункта который был передан через метод POST /sendList

Параметр выводится только при type=list_response
selectedButtonId ID выбранной кнопки который был передан через метод POST /sendButton

Параметр выводится только при type=buttons_response
api Флаг отправки через API. Принимает значения true/false
customParametr Пользовательский параметр.
type Тип сообщения.

Основные возможные значения:

  • document — документ.

  • video — видео.

  • image — изображение.

  • ptt — голосовое сообщение.

  • audio — аудио запись.

  • chat — текстовое сообщение.

  • sticker — стикер.

  • location — местоположение.

  • vcard — карточка контакта.

  • multi_vcard — несколько карточек контактов.

  • call_log — пропущенный звонок.

  • list — список выбора.

  • list_response — клик по списку.

  • buttons_response — клик по кнопке.

  • e2e_notification — уведомление о новом чате.

Параметры, вложенные в ask
status Статус доставки сообщения.

Возможные значения:

  • -1 — ошибка.

  • 0 — ожидание отправки.

  • 1 — отправлено.

  • 2 — доставлено.

  • 3 — прочитано.

  • 4 — воспроизведено.
chatId Индивидуальный идентификатор чата
message Объект сообщения

Примеры


// Сначала установите webhook согласно 
// документации например на http://ваш.сайт/incoming_message.php

// Декодируем пришедший по webhook JSON
$data = json_decode(file_get_contents('php://input'), true);
foreach($data['messages'] as $message){ // Распечатаем каждое сообщение
    // Здесь уже обработайте каждое сообщение:
    // Добавьте в базу данных или сразу ответьте    
}

Для партнеров

Описание

Добавляет новый инстанс в кабинет пользователя (деньги списываются с баланса за месяц в соответствии с тарифной сеткой)

URL ресурса:
https://app.api-messenger.com/account/add

Входные данные

Параметр Обязателен Значение
key Да Ключ для работы с партнерским API.
Получить в данный момент возможно только через тех.поддержку.
Для тестирования используйте ключ demo
name Нет Название инстанса

Выходные данные

Структура выходных данных приведена ниже.

   {
        "status": "{enum}",
        "token": "{string}",
        "before": "{string}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
token Токен для дальнейшей работы с инстансом
before Крайняя дата до которой инстанс (токен) будет работать. Инстанс автоматически продлевается за 3 дня до даты если есть денежные средства на балансе. В формате YYYY-mm-dd
message Параметр выводится только в случае ошибки

Примеры


$key = 'demo';
$name = 'Custom name';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/account/add?key=' . $key.'&name='.$name);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_POST, 1);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
if ($data['status'] == 'OK') {
    echo $data['token'];
} else {
    echo 'ERROR: ' . $data['message'];
}

Описание

Удаление инстанса из кабинета пользователя (происходит возврат денежных средств на баланс за неиспользованные дни)

URL ресурса:
https://app.api-messenger.com/account/delete

Входные данные

Параметр Обязателен Значение
key Да Ключ для работы с партнерским API.
Получить в данный момент возможно только через тех.поддержку.
Для тестирования используйте ключ demo
token Да Токен инстанса который необходимо удалить

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}"
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Параметр выводится только в случае ошибки

Примеры


$key = 'demo';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/account/delete?token=ttttt&key=' . $key);
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "DELETE");
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
if ($data['status'] == 'OK') {
    echo 'OK';
} else {
    echo 'ERROR: ' . $data['message'];
}

Описание

Получение всех инстансов из кабинета пользователя

URL ресурса:
https://app.api-messenger.com/account/list

Входные данные

Параметр Обязателен Значение
key Да Ключ для работы с партнерским API.
Получить в данный момент возможно только через тех.поддержку.
Для тестирования используйте ключ demo

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}",
        "result": [
                {
                    "name": "{string}",
                    "token": "{string}",
                    "before": "{string}",
                },
            ]
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Параметр выводится только в случае ошибки
Параметры, вложенные в result
name Название инстанса указанный в кабинете
token Токен инстанса
before Крайняя дата до которой инстанс (токен) будет работать. Инстанс автоматически продлевается за 3 дня до даты если есть денежные средства на балансе. В формате YYYY-mm-dd

Примеры


$key = 'demo';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/account/list?key=' . $key);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
if ($data['status'] == 'OK') {
    foreach ($data['result'] as $v) {
        echo 'Name: ' . $v['name'] . ', Token: ' . $v['token'] . ', Before: '. $v['before'];
    }
} else {
    echo 'ERROR: ' . $data['message'];
}

Описание

Получение общего баланса аккаунта. Пополнение происходит через тех.поддержку при получении ключа для работы с партнерским API.

URL ресурса:
https://app.api-messenger.com/account/balance

Входные данные

Параметр Обязателен Значение
key Да Ключ для работы с партнерским API.
Получить в данный момент возможно только через тех.поддержку.
Для тестирования используйте ключ demo

Выходные данные

Структура выходных данных приведена ниже.

    {
        "status": "{enum}",
        "message": "{string}",
        "balance": "{int32}",
    }

Описание параметров:

Параметр Значение
status Статус ответа.

Возможные значения:

  • ERROR — произошла ошибка.

  • OK — запрос выполнен успешно.
message Параметр выводится только в случае ошибки
balance Баланс аккаунта

Примеры


$key = 'demo';

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, 'https://app.api-messenger.com/account/balance?key=' . $key);
curl_setopt($ch, CURLOPT_HTTPHEADER, array('Content-type: application/json; charset=utf-8'));
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 5);
$result = curl_exec($ch); // Отправим запрос
curl_close($ch);
$data = json_decode($result, true); // Разберем полученный JSON в массив
if ($data['status'] == 'OK') {
    echo 'Balance:' . $data['balance'];
} else {
    echo 'ERROR: ' . $data['message'];
}