Help Center Taleopkaldsmeddelelser

Taleopkaldsmeddelelser

SpeechCall er en interaktiv stemmesvar (IVR) beskedtype, der giver dig mulighed for at foretage automatiske taleopkald med menuindstillinger og DTMF (dual-tone multi-frequency) interaktioner.

Oversigt

SpeechCall gør det muligt for virksomheder at:

  • Foretag automatiske taleopkald til kunder
  • Afspil indledende lydbeskeder
  • Præsenter interaktive menuindstillinger
  • Håndter DTMF-tastetryk (0-9, *, #)
  • Definer tilpasset adfærd for ugyldige/timeout-input
  • Udløs webhooks med brugerdefinerede tekster og overskrifter baseret på brugervalg
  • Administrer opkaldsflow dynamisk (naviger mellem menuer)

Use Cases

  • Kundeundersøgelser - Indsaml feedback via telefonmenuindstillinger
  • Aftalepåmindelser - Bekræft eller omplanlæg med stemmeinteraktion
  • Ordresporing - Giv ordrestatusopdateringer
  • Interaktive meddelelser - Lever vigtige oplysninger med handlingsmuligheder
  • Stemmebekræftelse - Multifaktorgodkendelse via taleopkald

Forespørgselsformat

Grundlæggende struktur

{
  "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"
              }
            ]
          }
        }
      ]
    }
  ]
}

Parameter Beskrivelse

ParameterSkrivPåkrævetBeskrivelse
frastrengJaAfsender-id (alfanavn eller ID)
tilstrengJaModtagerens telefonnummer i internationalt format
tekststrengJaTekstværdi, typisk “ivr” for SpeechCall
typestrengJaSkal være "taleopkald"
menurækkeJaArray af menukonfigurationer for opkaldet

Hvert menuobjekt indeholder:

ParameterSkrivPåkrævetBeskrivelse
introUrlstrengJaURL eller identifikator for den indledende lydfil
idleTimeoutMsecheltalNejTimeout i millisekunder for at vente på et tastetryk (f.eks. “10000”). Hvis brugeren ikke reagerer, vil handlingerne konfigureret under den ‘forkerte’ nøgle blive udført
dtmfActionsobjektJaKort over DTMF-nøgler til handlinger

DTMF-handlinger

“dtmfActions”-objektet tildeler DTMF-nøgler eller særlige betingelser til rækker af handlinger:

DTMF-nøgleBeskrivelse
d0Tryk på 0
d1Tryk på 1
d2Tryk på 2
d9Tryk på 9
d*Tryk på *
d#Tryk på #
forkertUdløses, når der trykkes på en ugyldig tast, eller når idleTimeoutMsec nås uden input

Hver DTMF-nøgle/betingelse er knyttet til en række handlinger, der vil blive udført i rækkefølge.

Understøttede handlinger

HandlingParametreBeskrivelse
webhookurl (streng, påkrævet)
body (objekt, valgfrit)
headers (objekt, valgfrit)
Sender en HTTP POST-anmodning i JSON-format til den angivne URL. ‘body’-objektet vil blive indlejret under ‘action’-feltet i webhook-anmodningen. Brugerdefinerede headere er inkluderet som HTTP-headere.
‘lægge på’IngenAfslutter opkaldet
gotoMenu”menu” (streng eller heltal)Navigerer opkaldet til en anden menu i menu-arrayet ved hjælp af dets 0-baserede indeks (f.eks. "1")

Detaljeret handlingsadfærd

Webhook Action (webhook)

“Webhook”-handlingen sender en HTTP POST-anmodning til din tilbagekalds-URL med opkaldets metadata og valgfri tilpassede data:

  • Hvis en “body” er angivet, sendes dens nøgleværdi-par inde i “action”-feltet i nyttelastlegemet.
  • Hvis “headere” er angivet, sendes de som tilpassede HTTP-headere i anmodningen.

Læg på handling (“læg på”)

“Læg på”-handlingen afslutter det aktive opkald med det samme. Ingen yderligere handlinger i sekvensen eller menuerne vil blive behandlet efter en “afslut”-handling.

Gå til menuhandling (gotoMenu)

‘gotoMenu’-handlingen omdirigerer strømmen af opkaldet til en anden menustruktur i ‘menu’-arrayet. Det kræver en enkelt parameter menu, som specificerer det 0-baserede indeks for målmenuen (f.eks. "1" for at gå til den anden menu, eller "0" for at genstarte den første menu).


Inaktivitet og fejlhåndtering (‘forkert’)

Den ‘forkerte’ nøgle inde i ‘dtmfActions’ er en speciel fallthrough-handler. Den udfører sin række af handlingssekvenser i to scenarier:

  1. Ugyldig input: Den, der ringer, trykker på en DTMF-tast, der ikke er defineret i dtmfActions (de trykker f.eks. 3 men menuen definerer kun d1 og d2).
  2. Idle Timeout: Den, der ringer op, trykker ikke på nogen tast inden for den varighed, der er angivet af idleTimeoutMsec.

Hvis ‘forkert’ ikke er defineret, og den, der ringer, trykker på en ugyldig tast eller timeout, vil opkaldsstrømmen lægge på som standard. Ved at definere forkert kan du bygge loop-menuer (f.eks. gå tilbage til den samme menu med "action": "gotoMenu", "menu": "0") eller omdirigere brugeren til en hjælpemenu.


Webhook-leveringsformat

Når ‘webhook’-handlingen udløses, sender systemet en HTTP POST-anmodning til den konfigurerede ‘url’ med ‘Content-Type: application/json’.

Webhook Request Headers

Hvis handlingen er konfigureret med parameteren “headers”, inkluderes disse nøgleværdi-par som HTTP-headere i anmodningen.

Webhook Request Body

JSON-nyttelasten, der sendes til din webhook-URL, har følgende struktur:

{
  "from": "0443914272",
  "to": "50001",
  "mid": "7748021",
  "action": {
    "confirm": true
  }
}
FeltSkrivBeskrivelse
frastrengOpkalds telefonnummer / afsender-id
tilstrengModtagerens telefonnummer
midtstrengMeddelelses-id
handlingobjektDet brugerdefinerede JSON-objekt, der er defineret i handlingens “body”-felt

Komplet eksempel

Simpel IVR med timeout og inputvalidering

{
  "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"
              }
            ]
          }
        }
      ]
    }
  ]
}

Kompleks IVR med flere menuer og DTMF-routing

Dette eksempel viser, hvordan man definerer flere menuer og navigerer mellem dem ved hjælp af ‘gotoMenu’-handlingen, når brugeren indtaster en ugyldig nøgle, eller når opkaldet timeout. Det viser også brugerdefinerede bodies og tilpassede HTTP-headere sendt med webhook-udløsere.

{
  "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"
              }
            ]
          }
        }
      ]
    }
  ]
}

Svarformat

Successvar

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

Fejlhåndtering

HTTP-statusBeskrivelse
200Forespørgsel lykkedes
400Ugyldigt anmodningsformat
401Godkendelse mislykkedes
429Satsgrænse overskredet
500Intern serverfejl

cURL Eksempel

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"
                }
              ]
            }
          }
        ]
      }
    ]
  }'

Bedste praksis

  1. Lydfiler - Sørg for, at intro-URL’er er tilgængelige, og at lydfiler er i understøttede formater
  2. Webhook Reliability - Design webhooks til at reagere hurtigt (inden for 2 sekunder)
  3. DTMF-indstillinger - Begræns menuindstillinger til 4-6 valg for bedre brugeroplevelse
  4. Timeouthåndtering - Brug idleTimeoutMsec til at angive brugerdefinerede inaktivitetsgrænser (f.eks. 10000 ms), og konfigurer en yndefuld fallback under den “forkerte” DTMF-tast (som at gentage menuen eller lægge på)
  5. Multi-Menu Call Flow - Brug gotoMenu omhyggeligt for at forhindre uendelige sløjfer, når du dirigerer brugere tilbage til tidligere menuer
  6. Fallback-strategi - Brug reservemeddelelser til brugere, der ikke svarer eller afbryder forbindelsen

Relaterede emner