Отправка OTP кода (WhatsApp)
Пример запроса для отправки одноразового пароля (OTP) через WhatsApp.
WhatsApp не является отдельным типом сообщения. Запрос с type: whatsapp отклоняется с ошибкой Invalid message type.
WhatsApp существует только как этап пайплайна: вы отправляете запрос с type: pipeline и перечисляете whatsapp среди его этапов. Всё остальное — адрес, ключ, формат ответа — такое же, как у любого другого метода JSON API.
URI: https://alphasms.ua/api/json.php
Все запросы к API отправляются в формате JSON с помощью метода POST.
Параметры заголовков
В запросах обязательно должен быть заголовок Content-Type: application/json, иначе запрос будет считаться некорректным даже при валидном JSON в нем
Параметры запроса
Пример запроса
- Sync
- Async
- JSON
- cURL
- PHP
- Python
- Node.js
{
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "pipeline",
"pipeline": [
"whatsapp"
],
"id": 100500,
"phone": 380971234567,
"whatsapp": {
"signature": "SenderID",
"message": "Ваш код 1234"
}
}
]
}
curl -X POST 'https://alphasms.ua/api/json.php' \
-H 'Content-Type: application/json' \
--data-raw '{
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "pipeline",
"pipeline": [
"whatsapp"
],
"id": 100500,
"phone": 380971234567,
"whatsapp": {
"signature": "SenderID",
"message": "Ваш код 1234"
}
}
]
}'
<?php
$payload = json_encode([
'auth' => 'bb56a4369eb19***cfec6d1776bd25',
'data' => [
[
'type' => 'pipeline',
'pipeline' => [
'whatsapp',
],
'id' => 100500,
'phone' => 380971234567,
'whatsapp' => [
'signature' => 'SenderID',
'message' => 'Ваш код 1234',
],
],
],
], JSON_UNESCAPED_UNICODE);
$ch = curl_init('https://alphasms.ua/api/json.php');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests
payload = {
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "pipeline",
"pipeline": [
"whatsapp",
],
"id": 100500,
"phone": 380971234567,
"whatsapp": {
"signature": "SenderID",
"message": "Ваш код 1234",
},
},
],
}
response = requests.post(
"https://alphasms.ua/api/json.php",
json=payload,
timeout=30,
)
print(response.json())
const payload = {
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "pipeline",
"pipeline": [
"whatsapp"
],
"id": 100500,
"phone": 380971234567,
"whatsapp": {
"signature": "SenderID",
"message": "Ваш код 1234"
}
}
]
};
const response = await fetch("https://alphasms.ua/api/json.php", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload),
});
console.log(await response.json());
- JSON
- cURL
- PHP
- Python
- Node.js
{
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "pipeline",
"pipeline": [
"whatsapp"
],
"id": 100500,
"phone": 380971234567,
"whatsapp": {
"signature": "SenderID",
"message": "Ваш код 1234"
}
}
]
}
curl -X POST 'https://api-async.alphasms.ua/v1/json' \
-H 'Content-Type: application/json' \
--data-raw '{
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "pipeline",
"pipeline": [
"whatsapp"
],
"id": 100500,
"phone": 380971234567,
"whatsapp": {
"signature": "SenderID",
"message": "Ваш код 1234"
}
}
]
}'
<?php
$payload = json_encode([
'auth' => 'bb56a4369eb19***cfec6d1776bd25',
'data' => [
[
'type' => 'pipeline',
'pipeline' => [
'whatsapp',
],
'id' => 100500,
'phone' => 380971234567,
'whatsapp' => [
'signature' => 'SenderID',
'message' => 'Ваш код 1234',
],
],
],
], JSON_UNESCAPED_UNICODE);
$ch = curl_init('https://api-async.alphasms.ua/v1/json');
curl_setopt_array($ch, [
CURLOPT_POST => true,
CURLOPT_RETURNTRANSFER => true,
CURLOPT_HTTPHEADER => ['Content-Type: application/json'],
CURLOPT_POSTFIELDS => $payload,
]);
$response = curl_exec($ch);
curl_close($ch);
echo $response;
import requests
payload = {
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "pipeline",
"pipeline": [
"whatsapp",
],
"id": 100500,
"phone": 380971234567,
"whatsapp": {
"signature": "SenderID",
"message": "Ваш код 1234",
},
},
],
}
response = requests.post(
"https://api-async.alphasms.ua/v1/json",
json=payload,
timeout=30,
)
print(response.json())
const payload = {
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "pipeline",
"pipeline": [
"whatsapp"
],
"id": 100500,
"phone": 380971234567,
"whatsapp": {
"signature": "SenderID",
"message": "Ваш код 1234"
}
}
]
};
const response = await fetch("https://api-async.alphasms.ua/v1/json", {
method: "POST",
headers: { "Content-Type": "application/json" },
body: JSON.stringify(payload),
});
console.log(await response.json());
Параметры ответа
| successboolean Результат выполнения запроса | ||||
| errorstring Текст ошибки, возвращается если success=false | ||||
| datalist[object] Список объектов с результатами выполнения запроса
|
Примеры ответа
- Успешно
- Нет маршрута
- Неверный тип
- Доступ запрещён
HTTP Status Code: 200
Content Type: JSON application/json
{
"success": true,
"data": [
{
"success": true,
"data": {
"msg_id": 123456789
}
}
]
}
WhatsApp не включён в вашем маршруте либо для оператора этого номера маршрута нет.
HTTP Status Code: 200
Content Type: JSON application/json
{
"success": true,
"data": [
{
"success": false,
"error": "No route"
}
]
}
Ответ на type: whatsapp. WhatsApp — этап пайплайна, а не тип сообщения.
HTTP Status Code: 200
Content Type: JSON application/json
{
"success": false,
"error": "Invalid message type"
}
HTTP Status Code: 200
Content Type: JSON application/json
{
"success": false,
"error": "Access denied"
}
Переход на запасной канал. Перечислите каналы в том порядке, в котором их нужно пробовать, и добавьте параметры каждого этапа. Шлюз резервирует стоимость самого дорогого этапа, а разницу возвращает после фактической доставки.
{
"type": "pipeline",
"pipeline": ["whatsapp", "sms"],
"id": 100500,
"phone": 380971234567,
"whatsapp": { "signature": "SenderID", "message": "Ваш код 1234" },
"sms": { "signature": "SenderID", "message": "Ваш код 1234" }
}
Полный список этапов и их параметров — на странице Многоканальная доставка сообщений.
WhatsApp должен быть включён в вашем маршруте — шлюз и цену назначает ваш менеджер. Без них любой пайплайн с whatsapp отвечает No route.
Этап whatsapp API не проверяет. Если signature или message не передать, запрос всё равно будет принят и оплачен, а сообщение уйдёт пустым. Проверяйте оба поля на своей стороне до отправки.
Статус доставки запроса pipeline уходит на адрес уведомлений из настроек API — см. Отчёт о доставке на URL: hook шлюз для этого типа не сохраняет.
У асинхронного API адрес из hook всё же используется в одном случае: отказ в приёме сообщения (No route, нехватка средств, ошибка валидации) приходит туда отдельным вебхуком со status: REJECTED.