Перейти до основного вмісту

Відправка повідомлення WhatsApp

Повідомлення WhatsApp надсилається в одній з двох форм:

  • погоджений шаблон — будь-коли. Шаблони створюються в особистому кабінеті й проходять модерацію Meta; що потрібно кожному з них, окрім значень, повертає Список шаблонів WhatsApp;
  • вільне повідомлення — текст, файл, локація або картка з кнопкою. WhatsApp доставляє його лише протягом 24 годин після останнього повідомлення абонента вам.

Запит синхронний, адреса /api/json.php: шлюз відповідає msg_id на кожне повідомлення.

Той самий запит можна поставити в чергу асинхронно за адресою /v1/json.

warning
  • Одержувач має написати вам першим або дати згоду на отримання повідомлень. Холодна розсилка по купленій базі у WhatsApp неможлива.
  • Відправник (whatsapp_signature) має бути підключений до вашого акаунта, а його відображуване ім'я — погоджене Meta.
  • Поза добовим вікном приймається лише погоджений шаблон.
URI: https://alphasms.ua/api/json.php

Усі запити до API надсилаються у форматі JSON за допомогою методу POST.

Параметри заголовків​

У запитах обов'язково має бути заголовок Content-Type: application/json, інакше запит буде вважатися некоректним навіть при валідному JSON у ньому.

Параметри запиту​

authstringобов'язковий
Ваш API-ключ, який можна отримати в особистому кабінеті
datalist[object]обов'язковий
Список об'єктів з параметрами запиту
typestringобов'язковий
Тип запиту: whatsapp або whatsapp+sms — надіслати SMS, якщо повідомлення WhatsApp не доставлено
idnumberобов'язковий
Унікальний ідентифікатор повідомлення в системі клієнта
phonenumberобов'язковий
Номер телефону одержувача, лише цифри, у міжнародному форматі
whatsapp_signaturestringобов'язковий
Ім'я відправника, підключене до WhatsApp у вашому акаунті
whatsapp_templatestring
Ім'я погодженого шаблону: малі латинські літери, цифри та _
Обов'язковий поза добовим вікном
whatsapp_languagestring
Код мови шаблону, наприклад en. Без нього береться погоджена мова шаблону
whatsapp_varlist[string]
Значення шаблону по порядку: перше підставляється замість {{1}}, друге — замість {{2}} і так далі
Їх кількість має збігатися з params шаблону, кожне значення — до 1024 символів
whatsapp_messagestring
Вільний текст, до 4096 символів. Доставляється лише в добовому вікні
З файлом стає підписом, до 1024 символів
whatsapp_imagestring
Посилання на зображення (JPG, PNG, до 5 МБ): картинка в шапці шаблону або вільне фото
whatsapp_videostring
Посилання на відео (MP4, до 16 МБ): відео в шапці шаблону або вільне відео
whatsapp_documentstring
Посилання на документ (PDF, до 100 МБ): документ у шапці шаблону або вільний файл
whatsapp_audiostring
Посилання на аудіофайл. Лише вільні повідомлення, без підпису
whatsapp_filenamestring
Ім'я файлу, яке побачить одержувач документа
whatsapp_headerstring
Значення {{1}} у текстовій шапці шаблону. Лише для шапки з підстановкою
whatsapp_locationobject
Локація: шапка шаблону з локацією або вільне повідомлення з локацією
latitudenumberобов'язковий
Широта, від -90 до 90
longitudenumberобов'язковий
Довгота, від -180 до 180
namestring
Назва місця
addressstring
Адреса
whatsapp_button_varstring
Закінчення посилання кнопки шаблону з {{1}}, наприклад номер замовлення
whatsapp_couponstring
Код купона для кнопки копіювання в шаблоні, до 15 символів
whatsapp_codestring
Одноразовий код шаблону підтвердження, до 15 символів. Заповнює і текст, і кнопку копіювання
Його можна передати й єдиним значенням whatsapp_var
whatsapp_linkstring
Вільна картка: посилання кнопки
Працює лише в парі з whatsapp_button: одне поле без іншого не враховується, і текст іде звичайним повідомленням
whatsapp_buttonstring
Вільна картка: напис на кнопці, до 20 символів
Працює лише в парі з whatsapp_link
whatsapp_preview_urlboolean
Показувати прев’ю першого посилання вільного тексту
whatsapp_lifetimenumber
Скільки намагатися доставити повідомлення, у секундах
Від 60 до 86400
sms_signaturestring
Ім'я відправника запасної SMS. Обов'язкове для whatsapp+sms
sms_messagestring
Текст запасної SMS. Обов'язковий для whatsapp+sms
sms_lifetimenumber
Час життя запасної SMS у секундах
hookstring
URL-адреса скрипта, куди буде відправлено статус доставки повідомлення

Приклад запиту​

{
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "whatsapp",
"id": 100500,
"phone": 380971234567,
"whatsapp_signature": "WhatsAppTest",
"whatsapp_template": "order_ready",
"whatsapp_language": "en",
"whatsapp_var": [
"Anna",
"A-1024"
],
"whatsapp_image": "https://url.com/storage/images/order.png",
"hook": "https://example.org/webhook/url.php"
}
]
}

Приклади відповіді​

HTTP Status Code: 200
Content Type: JSON application/json

{
"success": true,
"data": [
{
"success": true,
"data": {
"id": 100500,
"msg_id": 123456789,
"data": 1,
"parts": 1
}
}
]
}

Що потрібно шаблону​

Окрім значень у whatsapp_var шаблон може чекати файл, текст, локацію або значення кнопки. Список шаблонів WhatsApp повертає це полем shape:

shape шаблонуЩо передати в запиті
header: image, video або documentwhatsapp_image, whatsapp_video або whatsapp_document; для документа — ще whatsapp_filename
header: locationwhatsapp_location
header: text і header_var: truewhatsapp_header
url_button: truewhatsapp_button_var
copy_code: truewhatsapp_coupon
authentication: truewhatsapp_code — і більше нічого

Якщо потрібного шаблону значення в запиті немає або передано значення, якого шаблон не приймає, запит відхиляється під час прийому, до списання: сам WhatsApp відмовив би такому повідомленню лише після відправки.

Ще приклади​

Шаблон з кнопкою-посиланням і купоном​

{
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "whatsapp",
"id": 100501,
"phone": 380971234567,
"whatsapp_signature": "WhatsAppTest",
"whatsapp_template": "spring_sale",
"whatsapp_var": [
"Anna"
],
"whatsapp_button_var": "spring-24",
"whatsapp_coupon": "SPRING15",
"hook": "https://example.org/webhook/url.php"
}
]
}

Код підтвердження (шаблон підтвердження)​

{
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "whatsapp",
"id": 100502,
"phone": 380971234567,
"whatsapp_signature": "WhatsAppTest",
"whatsapp_template": "login_code",
"whatsapp_code": "481516",
"hook": "https://example.org/webhook/url.php"
}
]
}

Вільний документ у добовому вікні​

{
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "whatsapp",
"id": 100503,
"phone": 380971234567,
"whatsapp_signature": "WhatsAppTest",
"whatsapp_message": "Your invoice for September",
"whatsapp_document": "https://url.com/storage/files/invoice.pdf",
"whatsapp_filename": "Invoice A-1024.pdf",
"hook": "https://example.org/webhook/url.php"
}
]
}

Вільна локація в добовому вікні​

{
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "whatsapp",
"id": 100504,
"phone": 380971234567,
"whatsapp_signature": "WhatsAppTest",
"whatsapp_location": {
"latitude": 50.4501,
"longitude": 30.5234,
"name": "Pickup point",
"address": "1 Main St"
},
"hook": "https://example.org/webhook/url.php"
}
]
}

WhatsApp із запасною SMS​

{
"auth": "bb56a4369eb19***cfec6d1776bd25",
"data": [
{
"type": "whatsapp+sms",
"id": 100505,
"phone": 380971234567,
"whatsapp_signature": "WhatsAppTest",
"whatsapp_template": "order_ready",
"whatsapp_var": [
"Anna",
"A-1024"
],
"sms_signature": "SMSTest",
"sms_message": "Anna, your order A-1024 is ready",
"hook": "https://example.org/webhook/url.php"
}
]
}

Помилки​

Помилка приходить в одному з двох місць:

  • Увесь запит відхиляється, коли в поля неправильний тип чи формат: success: false і текст в error у корені відповіді. Нічого не створюється.
  • Одне повідомлення відхиляється, коли його вміст не підходить відправнику чи шаблону: success: false і текст у data[].error цього повідомлення. Воно не створюється і не списується; решта повідомлень запиту обробляються.

Запит​

ПомилкаЩо означає
Whatsapp signature parameter is requiredНемає whatsapp_signature
Whatsapp message parameter is requiredНемає ні шаблону, ні вільного повідомлення (тексту, файлу чи локації)
WhatsApp template parameter must match [a-z0-9_]Назва шаблону не у форматі Meta
Whatsapp var value must not exceed 1024 charactersЗначення у whatsapp_var задовге
Whatsapp header must not exceed 60 characterswhatsapp_header задовгий
Whatsapp button_var must not exceed 2000 characterswhatsapp_button_var задовгий
Whatsapp filename must not exceed 240 characterswhatsapp_filename задовгий
Whatsapp button caption must not exceed 20 characterswhatsapp_button задовгий
Whatsapp lifetime must be in range from 60 to 86400whatsapp_lifetime поза допустимим діапазоном

Повідомлення​

ПомилкаЩо означає
WhatsApp is not confirmed for userWhatsApp не підключено до вашого акаунта
Error in WhatsApp senderВідправника не підключено до вашого акаунта або для нього немає маршруту WhatsApp
WhatsApp sender display name is not approvedMeta ще не схвалила відображуване ім'я відправника
WhatsApp template not foundУ цього відправника немає шаблону з такою назвою та мовою
WhatsApp template is not approvedШаблон на модерації, відхилений або призупинений
Wrong number of WhatsApp template parametersКількість значень у whatsapp_var не збігається з params шаблону
WhatsApp template header content is requiredУ шаблону є шапка з файлом, локацією чи підстановкою, а її вміст не передано — див. таблицю вище
WhatsApp template header takes no valueТекстова шапка шаблону статична: whatsapp_header не передається
WhatsApp template header type mismatchНаприклад, відео для шаблону з картинкою в шапці
WhatsApp template has no headerНе передавайте файл, локацію чи whatsapp_header
WhatsApp template has one headerПередайте щось одне: файл, whatsapp_location або whatsapp_header
WhatsApp template button value is requiredУ шаблону кнопка-посилання з підстановкою або кнопка копіювання коду: передайте whatsapp_button_var або whatsapp_coupon
WhatsApp template has no such buttonУ шаблону немає кнопки для переданого значення
WhatsApp authentication template needs a codeШаблон підтвердження без whatsapp_code
WhatsApp authentication template takes only a codeІз шаблоном підтвердження передається лише код
WhatsApp code is only for authentication templateswhatsapp_code для шаблону, який не є шаблоном підтвердження
WhatsApp code is too longwhatsapp_code довший за 15 символів
WhatsApp coupon is too longwhatsapp_coupon довший за 15 символів
One kind of WhatsApp content per messageВільне повідомлення несе щось одне: файл, локацію або картку з кнопкою
Only one WhatsApp media file per messageДва файли в одному повідомленні
WhatsApp location and audio carry no textЛокація та аудіо надсилаються без whatsapp_message
WhatsApp location coordinates are out of rangeШирота поза −90…90 або довгота поза −180…180

Відповіді абонента​

Відповідь абонента відкриває добове вікно для вільних повідомлень йому.

  • Якщо відповідь прийшла на повідомлення, надіслане з hook, вебхук цього повідомлення надсилається повторно зі списком replies.
  • Інакше шлюз надсилає POST з полями форми на адресу сповіщень із налаштувань API:
ПолеЗначення
actionwhatsapp/inbound
phoneНомер абонента
messageТекст відповіді або підпис до файлу
typeТип відповіді: text, image, video, audio, document, location, button та інші
datetimeЧас відповіді, YYYY-MM-DDThh:mm:ss±hh:mm
buttonКнопка, яку натиснув абонент
media[url], media[type]Посилання на файл і його MIME-тип
location[latitude], location[longitude], location[name], location[address]Локація, яку надіслав абонент
msg_idВаше повідомлення, на яке прийшла відповідь, якщо воно відоме

Посилання на файл діє 24 години: завантажте файл, коли прийде сповіщення. Сповіщення про відповідь із файлом приходить, коли файл збережено в нас, — зазвичай за кілька секунд.