Вау! Создайте интеграцию с WhatsApp. Начните бесплатно. Регистрация
WhatsApp API

NPS-опрос в чате WhatsApp после взаимодействия

Человек может оценить это взаимодействие в чате, которым уже пользуется. Когда взаимодействие закончилось, ваш бэкенд может отправить этот опрос через Whapi.Cloud. Этот сценарий показывает интеграторам, как собрать такой поток через WhatsApp API.

Личный чат, не группа Одна оценка на выбор
Завершённый разговор рядом с телефоном, в чате WhatsApp которого виден NPS-опрос, на который человек может ответить.
Сценарий

Когда использовать этот поток

Взаимодействие уже закончилось

Используйте этот поток, когда взаимодействие уже закончилось, а не пока оно ещё открыто.

Оценка уходит в личный чат

Используйте этот поток, когда человек должен получить опрос в личном чате, а не в группе.

Сообщение — это NPS-опрос

Используйте этот поток, когда сообщение — NPS-опрос, а не квалифицирующие вопросы с рекламы и не напоминание о визите.

Чат WhatsApp на телефоне с NPS-опросом, на который человек может ответить одной оценкой.
Опыт клиента

Человек может оценить в чате

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

После потока человек видит NPS-опрос в личном чате WhatsApp и может выбрать одну оценку. Интеграторы собирают этот результат через WhatsApp API.

Поток

Отправьте NPS-опрос в чат

1

Взаимодействие закончилось

Ваш бэкенд уже знает, что взаимодействие завершено, и у него есть телефон человека.

2

Отправьте NPS-опрос

POST /messages/poll

sendMessagePoll sends the poll into that personal chat. The title and the score options are on that send. count is 1, so the person picks one score.

Нужно отслеживать доставку? Успешный ответ отправки не значит, что опрос уже у человека. Про статус доставки →

Что нужно заранее

Перед запуском потока

Подключите номер WhatsApp, с которого уходит опрос, и подписывайте каждый запрос токеном этого номера. Событие «взаимодействие закончилось» остаётся на вашем бэкенде.

По желанию — глубже в этот поток

Реализация API

Один вызов отправляет опрос

Этот вызов и есть опрос. Он кладёт заголовок и варианты оценки в личный чат человека, у которого только что закончилось взаимодействие.

Получите токен API бесплатно после регистрации на whapi.cloud и подставьте его в код вместо Your_Token из примеров.

Отправьте NPS-опрос

Отправьте NPS-опрос в личный чат с заголовком и вариантами этой ситуации, чтобы человек выбрал одну оценку.

curl --request POST \
     --url https://gate.whapi.cloud/messages/poll \
     --header 'accept: application/json' \
     --header 'authorization: Bearer Your_Token' \
     --header 'content-type: application/json' \
     --data '
{
  "to": "447123456789",
  "title": "How likely are you to recommend us?",
  "options": ["0", "10"],
  "count": 1
}
'
$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => "https://gate.whapi.cloud/messages/poll",
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => "{\"to\":\"447123456789\",\"title\":\"How likely are you to recommend us?\",\"options\":[\"0\",\"10\"],\"count\":1}",
  CURLOPT_HTTPHEADER => [
    "accept: application/json",
    "authorization: Bearer Your_Token",
    "content-type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);
echo $response;
import requests

url = "https://gate.whapi.cloud/messages/poll"
payload = {
    "to": "447123456789",
    "title": "How likely are you to recommend us?",
    "options": ["0", "10"],
    "count": 1
}
headers = {
    "accept": "application/json",
    "authorization": "Bearer Your_Token",
    "content-type": "application/json"
}

response = requests.post(url, json=payload, headers=headers)
print(response.text)
const response = await fetch('https://gate.whapi.cloud/messages/poll', {
  method: 'POST',
  headers: {
    accept: 'application/json',
    authorization: 'Bearer Your_Token',
    'content-type': 'application/json',
  },
  body: JSON.stringify({
    to: '447123456789',
    title: 'How likely are you to recommend us?',
    options: ['0', '10'],
    count: 1,
  }),
});

console.log(await response.text());
OkHttpClient client = new OkHttpClient();

MediaType mediaType = MediaType.parse("application/json");
RequestBody body = RequestBody.create(mediaType, "{\"to\":\"447123456789\",\"title\":\"How likely are you to recommend us?\",\"options\":[\"0\",\"10\"],\"count\":1}");
Request request = new Request.Builder()
  .url("https://gate.whapi.cloud/messages/poll")
  .post(body)
  .addHeader("accept", "application/json")
  .addHeader("authorization", "Bearer Your_Token")
  .addHeader("content-type", "application/json")
  .build();

Response response = client.newCall(request).execute();
using RestSharp;

var options = new RestClientOptions("https://gate.whapi.cloud/messages/poll");
var client = new RestClient(options);
var request = new RestRequest("");
request.AddHeader("accept", "application/json");
request.AddHeader("authorization", "Bearer Your_Token");
request.AddHeader("content-type", "application/json");
request.AddJsonBody(new { to = "447123456789", title = "How likely are you to recommend us?", options = new[] { "0", "10" }, count = 1 });
var response = await client.PostAsync(request);

Console.WriteLine("{0}", response.Content);
package main

import (
	"bytes"
	"fmt"
	"io"
	"net/http"
)

func main() {
	body := []byte(`{"to":"447123456789","title":"How likely are you to recommend us?","options":["0","10"],"count":1}`)
	req, _ := http.NewRequest("POST", "https://gate.whapi.cloud/messages/poll", bytes.NewReader(body))
	req.Header.Set("accept", "application/json")
	req.Header.Set("authorization", "Bearer Your_Token")
	req.Header.Set("content-type", "application/json")

	res, _ := http.DefaultClient.Do(req)
	defer res.Body.Close()
	out, _ := io.ReadAll(res.Body)
	fmt.Println(string(out))
}
Доставка

Поймите, когда опрос дошёл

Успешный ответ отправки не значит, что опрос уже у человека. Первый статус до вебхука — pending. Дальше статусы приходят только в statuses.post и statuses.put. Если статус остаётся pending и не переходит в sent, delivered или более поздний ack, сообщение не доставлено. Проверьте payload и право аккаунта отправлять этот тип.

  • Ответ sendMessagePoll не доказывает, что опрос уже у человека.

  • pending, который не двигается, значит, что опрос не доставлен.

  • Смотрите statuses.post и statuses.put для следующих ack.

  • Голос приходит в messages.post как действие типа vote.

  • Включите messages.patch, чтобы видеть total, count каждого варианта и voters.

  • read может не прийти, пока человек не ответит или не сохранит номер.

Что читать про доставку и вебхуки

Напишите в поддержку, если что-то пошло не так
Когда что-то ломается

Разберите сбои на каждом шаге

Если отправка опроса отклонена или не доставлена, человек не получает опрос. Повторите отправку или предупредите команду и не считайте опрос отправленным.

Взаимодействие закончилось, а опрос не ушёл?

Отправка может быть отклонена или не доставлена уже после того, как взаимодействие закончилось. Повторите sendMessagePoll или предупредите команду и не считайте опрос отправленным. Клиенты часто отмечают, что поддержка отвечает быстро. Не стесняйтесь попросить помощь.

Напишите в поддержку, если что-то пошло не так

Разберите по шагу API

Статус Что это значит Что делать
400 Wrong request parameters
401 Need channel authorization for send message
402 Trial version limit exceeded
403 It is forbidden to send to this group/recipient
429 Too many requests
500 Internal Error
Вопросы

Вопросы интеграторов

Нет. Этот поток начинается после того, как взаимодействие закончилось. Это не квалифицирующие вопросы во входящем чате с рекламы.
Нет. Сообщение — NPS-опрос после взаимодействия. Это не напоминание о визите с этими тремя ответами.
Если отправка отклонена или не доставлена, повторите её или предупредите команду и не считайте опрос отправленным.
Нет. Заголовок и варианты ставятся на отправке. Отправка не ждёт заранее написанный текст и не добавляет плату за этот текст.
Голос приходит в messages.post как действие типа vote. Включите messages.patch, чтобы получать total, count каждого варианта и voters. Тот же опрос можно прочитать через getMessage, если вы сохранили его id. Это чтение не является шагом отправки на этой странице.
Поддерживаемые функции WhatsApp

Всё, что нужно для создания автоматизации WhatsApp

Whapi.Cloud предоставляет доступ к полному набору функций WhatsApp — сообщениям, медиа, группам, каналам, вебхукам и не только. Создавайте ботов, автоматизации и интеграции без функциональных ограничений.

Выбор разработчиков

Нам доверяют 3 300+ разработчиков и SaaS-команд

Разработчики по всему миру используют Whapi.Cloud для создания автоматизаций, ботов, CRM-интеграций, массовых рассылок и продвинутых WhatsApp-воркфлоу. Наша инфраструктура обрабатывает миллионы API-запросов с высокой стабильностью — и этот показатель растёт каждый месяц.

Иконка функции

5,5K+

активных API-каналов

Иконка функции

21M+

API-запросов в месяц

«Всё просто, интуитивно и легко. Документация понятная, и вся нужная информация всегда под рукой. Отличная работа.»

Roberto K. / Web-разработчик

«Мы подключили WhatsApp к нашим процессам через n8n всего за несколько минут. Без кода, без сложностей — всё заработало с первого раза.»

Martin P. / Разработчик

«Whapi.Cloud стал важной частью нашей коммуникации с клиентами. Мы автоматизировали обновления по продуктам, уведомления о заказах и поддержку — без шаблонов и модерации.»

Oscar T. / CTO

Декоративный пузырь