Help Center Повідомлення SpeechCall

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

SpeechCall — це повідомлення типу інтерактивної голосової відповіді (IVR), яке дозволяє здійснювати автоматичні голосові виклики за допомогою опцій меню та взаємодії DTMF (двотональний багаточастотний).

Огляд

SpeechCall дозволяє компаніям:

  • Здійснюйте автоматичні голосові дзвінки клієнтам
  • Відтворення вступних звукових повідомлень
  • Наявність інтерактивних параметрів меню
  • Обробляти відповіді на натискання клавіш DTMF (0-9, *, #) — Визначте спеціальну поведінку для недійсних вводів/затримок
  • Запускайте веб-хуки з власними тілами та заголовками на основі вибору користувача
  • Динамічне керування потоком викликів (переміщення між меню)

Випадки використання

  • Опитування клієнтів - Збирайте відгуки за допомогою параметрів меню телефону
  • Нагадування про зустрічі - підтвердьте або перенесіть за допомогою голосової взаємодії
  • Відстеження замовлень - Оновлення статусу замовлення
  • Інтерактивні сповіщення - надайте важливу інформацію за допомогою варіантів дій
  • Голосова перевірка - багатофакторна автентифікація за допомогою голосових дзвінків

Формат запиту

Базова структура

{
  "messages": [
    {
      "from": "YourSender",
      "to": "+380XXXXXXXXX",
      "text": "ivr",
      "type": "speechcall",
      "menu": [
        {
          "introUrl": "ivr_XXXXX",
          "idleTimeoutMsec": 10000,
          "dtmfActions": {
            "d1": [
              {
                "action": "webhook",
                "url": "https://YourWebhookURL/0",
                "body": {
                  "confirm": true
                },
                "headers": {
                  "test-header": "test"
                }
              },
              {
                "action": "hangup"
              }
            ],
            "d2": [
              {
                "action": "webhook",
                "url": "https://YourWebhookURL/1",
                "body": {
                  "confirm": false
                }
              },
              {
                "action": "hangup"
              }
            ],
            "wrong": [
              {
                "action": "gotoMenu",
                "menu": "1"
              }
            ]
          }
        }
      ]
    }
  ]
}

Опис параметра

ПараметрТипНеобхідноОпис
відрядокТакІдентифікатор відправника (альфа-ім’я або ідентифікатор)
дорядокТакНомер телефону отримувача в міжнародному форматі
текстрядокТакТекстове значення, зазвичай “ivr” для SpeechCall
типрядокТакМає бути "speechcall"
менюмасивТакМасив конфігурацій меню для виклику

Конфігурація меню

Кожен об’єкт меню містить:

ПараметрТипНеобхідноОпис
introUrlрядокТакURL-адреса або ідентифікатор вступного аудіофайлу
idleTimeoutMsecцілеНіЧас очікування в мілісекундах для очікування натискання клавіші (наприклад, 10000). Якщо користувач не відповідає, дії, налаштовані під ключем wrong, будуть виконані
dtmfActionsоб’єктТакКарта DTMF ключів до дій

Дії DTMF

Об’єкт dtmfActions відображає ключі DTMF або спеціальні умови на масиви дій:

Ключ DTMFОпис
d0Натисніть 0
d1Натисніть 1
d2Натисніть 2
d9Натисніть 9
d*Натисніть *
d#Натисніть #
неправильноСпрацьовує, коли натиснуто недійсну клавішу або коли idleTimeoutMsec досягнуто без жодного введення

Кожен ключ/умова DTMF відповідає масиву дій, які виконуватимуться послідовно.

Підтримувані дії

ДіяПараметриОпис
вебхукurl (рядок, обов’язково)
body (об’єкт, необов’язково)
headers (об’єкт, необов’язково)
Надсилає запит HTTP POST у форматі JSON на вказану URL-адресу. Об’єкт body буде вкладено під поле action у запиті на вебхук. Спеціальні заголовки включені як заголовки HTTP.
зависанняЖодногоЗавершує дзвінок
gotoMenumenu (рядок або ціле число)Переміщує виклик до іншого меню в масиві menu, використовуючи його індекс на основі 0 (наприклад, `“1”)

Детальна поведінка дій

Дія Webhook (‘webhook`)

Дія webhook надсилає запит HTTP POST на вашу URL-адресу зворотного виклику з метаданими виклику та необов’язковими спеціальними даними:

  • Якщо надано body, його пари ключ-значення надсилаються всередину поля action тіла корисного навантаження.
  • Якщо надано заголовки, вони надсилаються як спеціальні заголовки HTTP у запиті.

Зависання (hangup)

Дія “зависання” негайно завершує активний виклик. Жодні подальші дії в послідовності чи меню не виконуватимуться після дії «зависання».

Перейти до дії меню (gotoMenu)

Дія gotoMenu перенаправляє потік виклику до іншої структури меню в масиві menu. Він приймає один параметр menu, який визначає індекс цільового меню на основі 0 (наприклад, "1", щоб перейти до другого меню, або "0", щоб перезапустити перше меню).


Бездіяльність і обробка помилок (неправильно)

“Неправильний” ключ всередині “dtmfActions” є спеціальним обробником провалів. Він виконує свою послідовність дій за двома сценаріями:

  1. Недійсний вхід: абонент натискає клавішу DTMF, яка не визначена в dtmfActions (наприклад, він натискає 3, але в меню визначено лише d1 і d2).
  2. Idle Timeout: абонент не натискає жодну клавішу протягом часу, визначеного idleTimeoutMsec.

Якщо wrong не визначено, а абонент натискає недійсну клавішу або минув час очікування, потік виклику зависне за умовчанням. Визначення wrong дозволяє створювати циклічні меню (наприклад, повертатися до того самого меню за допомогою "action": "gotoMenu", "menu": "0") або перенаправляти користувача до меню довідки.


Формат доставки Webhook

Коли активується дія webhook, система надсилає запит HTTP POST на налаштовану url з Content-Type: application/json.

Заголовки запитів на вебхук

Якщо дію налаштовано за допомогою параметра headers, ці пари ключ-значення включено в запит як заголовки HTTP.

Тіло запиту на вебхук

Корисне навантаження JSON, надіслане на вашу URL-адресу webhook, має таку структуру:

{
  "from": "0443914272",
  "to": "50001",
  "mid": "7748021",
  "action": {
    "confirm": true
  }
}
ПолеТипОпис
відрядокНомер телефону абонента / ідентифікатор відправника
дорядокНомер телефону одержувача
серединарядокID повідомлення
діяоб’єктСпеціальний об’єкт JSON, визначений у полі body дії

Повний приклад

Простий IVR із тайм-аутом і перевіркою введених даних

{
  "messages": [
    {
      "from": "YourSender",
      "to": "+380XXXXXXXXX",
      "text": "ivr",
      "type": "speechcall",
      "menu": [
        {
          "introUrl": "ivr_651854",
          "idleTimeoutMsec": 10000,
          "dtmfActions": {
            "d1": [
              {
                "action": "webhook",
                "url": "https://YourWebhookURL/0",
                "body": {
                  "confirm": true
                }
              },
              {
                "action": "hangup"
              }
            ],
            "d2": [
              {
                "action": "webhook",
                "url": "https://YourWebhookURL/1",
                "body": {
                  "confirm": false
                }
              },
              {
                "action": "hangup"
              }
            ],
            "wrong": [
              {
                "action": "hangup"
              }
            ]
          }
        }
      ]
    }
  ]
}

Комплексний IVR з кількома меню та маршрутизацією DTMF

Цей приклад демонструє, як визначити кілька меню та переходити між ними за допомогою дії gotoMenu, коли користувач вводить недійсний ключ або коли час очікування виклику минув. Він також показує спеціальні тіла та спеціальні HTTP-заголовки, надіслані за допомогою тригерів вебхука.

{
  "messages": [
    {
      "from": "YourSender",
      "to": "+380XXXXXXXXX",
      "text": "ivr",
      "type": "speechcall",
      "menu": [
        {
          "introUrl": "ivr_XXXXX",
          "idleTimeoutMsec": 10000,
          "dtmfActions": {
            "d1": [
              {
                "action": "webhook",
                "url": "https://YourWebhookURL/0",
                "body": {
                  "confirm": true
                },
                "headers": {
                  "test-header": "test"
                }
              },
              {
                "action": "hangup"
              }
            ],
            "d2": [
              {
                "action": "webhook",
                "url": "https://YourWebhookURL/1",
                "body": {
                  "confirm": false
                }
              },
              {
                "action": "hangup"
              }
            ],
            "wrong": [
              {
                "action": "gotoMenu",
                "menu": "1"
              }
            ]
          }
        },
        {
          "introUrl": "ivr_651854",
          "idleTimeoutMsec": 10000,
          "dtmfActions": {
            "d1": [
              {
                "action": "webhook",
                "url": "https://YourWebhookURL/0",
                "body": {
                  "confirm": true
                }
              },
              {
                "action": "hangup"
              }
            ],
            "d2": [
              {
                "action": "webhook",
                "url": "https://YourWebhookURL/1",
                "body": {
                  "confirm": false
                }
              },
              {
                "action": "hangup"
              }
            ],
            "wrong": [
              {
                "action": "hangup"
              }
            ]
          }
        }
      ]
    }
  ]
}

Формат відповіді

Успішна відповідь

{
  "messages": [
    {
      "messageId": "unique-message-id",
      "recipient": "+380XXXXXXXXX",
      "status": "sent"
    }
  ]
}

Обробка помилок

Статус HTTPОпис
200Запит успішно
400Недійсний формат запиту
401Помилка автентифікації
429Ліміт швидкості перевищено
500Внутрішня помилка сервера

Приклад cURL

curl -X POST https://restapi.smsbat.com/bat/messagelist \
  -u "username:password" \
  -H "Content-Type: application/json" \
  -d '{
    "messages": [
      {
        "from": "YourSender",
        "to": "+380XXXXXXXXX",
        "text": "ivr",
        "type": "speechcall",
        "menu": [
          {
            "introUrl": "ivr_XXXXX",
            "idleTimeoutMsec": 10000,
            "dtmfActions": {
              "d1": [
                {
                  "action": "webhook",
                  "url": "https://YourWebhookURL/0",
                  "body": {
                    "confirm": true
                  },
                  "headers": {
                    "test-header": "test"
                  }
                },
                {
                  "action": "hangup"
                }
              ],
              "d2": [
                {
                  "action": "webhook",
                  "url": "https://YourWebhookURL/1",
                  "body": {
                    "confirm": false
                  }
                },
                {
                  "action": "hangup"
                }
              ],
              "wrong": [
                {
                  "action": "gotoMenu",
                  "menu": "1"
                }
              ]
            }
          },
          {
            "introUrl": "ivr_651854",
            "idleTimeoutMsec": 10000,
            "dtmfActions": {
              "d1": [
                {
                  "action": "webhook",
                  "url": "https://YourWebhookURL/0",
                  "body": {
                    "confirm": true
                  }
                },
                {
                  "action": "hangup"
                }
              ],
              "d2": [
                {
                  "action": "webhook",
                  "url": "https://YourWebhookURL/1",
                  "body": {
                    "confirm": false
                  }
                },
                {
                  "action": "hangup"
                }
              ],
              "wrong": [
                {
                  "action": "hangup"
                }
              ]
            }
          }
        ]
      }
    ]
  }'

Найкращі практики

  1. Аудіофайли - переконайтеся, що вступні URL-адреси доступні, а аудіофайли мають підтримуваний формат
  2. Надійність веб-перехоплювачів - розробляйте веб-перехоплювачі для швидкого реагування (протягом 2 секунд)
  3. Параметри DTMF - обмежте параметри меню до 4-6 варіантів для кращої взаємодії з користувачем
  4. Обробка часу очікування – використовуйте idleTimeoutMsec, щоб указати користувацькі обмеження бездіяльності (наприклад, 10000 мс), і налаштувати витончений резервний варіант під неправильним ключем DTMF (наприклад, повторення меню або відключення)
  5. Потік викликів кількох меню - обережно використовуйте gotoMenu, щоб запобігти нескінченним циклам під час перенаправлення користувачів назад до попередніх меню
  6. Резервна стратегія - використовуйте резервні повідомлення для користувачів, які не відповідають або відключаються

Схожі теми