Open in
telephony.incoming / web.incoming
Blokeeriv veebikonks, mis kujundab sissetuleva kõne konfiguratsiooni reaalajas.
Kui sissetulev telefonikõne jõuab numbrile ilma määratud
häälagendita (sinu väljaminevatele kõnedele tagasi helistavate helistajate kohta vaata tagasihelistamisi) või veebividina seanss käivitub avaldatava võtmega režiimis
mode="webhook", saadab ThunderPhone sinu
vanale webhooki URL-ile
blokeeriva päringu telephony.incoming / web.incoming
ja ootab konfiguratsioonivastust: telefonikõne puhul kuni 13 sekundit,
sealhulgas üks korduskatse, ja vidinaseansi puhul kuni 10 sekundit
(vaata aegumisi ja korduskatseid). Kasuta seda
vahetust, et valida iga kõne jaoks dünaamiliselt viip, hääl ja tööriistad —
täielikku mustrit vaata dünaamilise kõnekonfiguratsiooni juhendist.
Määratud häälagendiga number vastab selle agendiga. Kui agendil on oma kõne seadistamise veebikonks, toimub sama blokeeriv suhtlus esmalt agendi URL-is, et täita agendi muutujad ja kõne kontekst.
Aegumised ja korduskatsed
Vasta kiiresti: helistaja ootab liinil, kuni otsustad.
Telefonikõne (telephony.incoming) korral:
- Esimene katse võib kesta kuni 10 sekundit.
- Kui see aegub, ei saa ühendust või saab vastuse
5xx,408või429, proovib ThunderPhone veel ühe korra. Korduskatse saab kogu vahetuse 13-sekundilisest ajapiirangust allesjäänud aja: umbes 3 sekundit pärast aegunud esimest katset ja kiire tõrke korral peaaegu kõik 13 sekundit. Korduskatset ei tehta, kui alles jääks vähem kui 2 sekundit. - Mis tahes muu
4xxvastus, vastus, mis ületab suuruse piirangu, või2xx, mille sisu ei ole kehtiv konfiguratsioon, on lõplik ja seda ei korrata. - Mõlemad katsed saadavad sama sisu, sama
X-ThunderPhone-Signaturei ja samaX-ThunderPhone-Idempotency-Keypäise (telephony-incoming-<call_id>), nii et kõrvalmõjudega käitleja saab korduskatse ära tunda.
Kui kasutuskõlblikku konfiguratsiooni ei saabu, lõpetatakse kõne kohe,
selle asemel et jätta helistaja vaiksele liinile. Kõne kuvatakse kõneajaloos
ebaõnnestunud, arveldamata kõnena väärtusega end_reason
inbound_config_webhook_failed ning saadetakse tavapärane
telephony.complete sündmus. Kõne lehel
juhtpaneelil ning config_webhook_failure-is
GET /v1/calls/{call_id} on kirjas, mida sinu veebikonks
tegi: {kind, attempts, http_status, host, source}, kus kind on http_error,
timeout, connection, dns, tls, response_too_large,
blocked_url, other, invalid_json, non_object_json või
invalid_config, host on sinu veebikonksu hostinimi ja source on
number (see veebikonks) või agent_setup (häälagendi kõne seadistamise veebikonks).
Väärtuse invalid_config korral selgitab reason, miks vastust ei saanud kasutada,
ning fields nimetab sellega seotud väljad: no_agent (puuduvad nii agent_id kui ka
prompt; fields loetleb eiratud võtmed, näiteks valesti kirjutatud
agentId), agent_not_found, agent_id_not_integer, unexpected_fields
(võtmed peale variables, context, timezone ja language väärtuse
agent_id kõrval), invalid_variables, invalid_context, invalid_language,
unsupported_language, invalid_config_fields või agent_settings_invalid.
Muudel juhtudel on reason väärtusega null ja fields on tühi. Ainus
erand on helistaja, kes helistab tagasi ühele sinu väljaminevale kõnele, kui
päring ise ebaõnnestus: vaata tagasikõnesid.
Vidina seansil (web.incoming) on üks katse, mis võib kesta kuni 10
sekundit. Kui see nurjub, nurjub seansitaotlus vastusega 502 või 422.
Päringu sisu
Telefonikõnede jaoks (telephony.incoming):
{
"type": "telephony.incoming",
"data": {
"call_id": 987654321,
"from_number": "+14155550199",
"to_number": "+15551234567"
}
}| Väli | Tüüp | Kirjeldus |
|---|---|---|
call_id | täisarv | Kõne ID — püsib sama selle kõne kõigi sündmuste puhul |
from_number | string | Helistaja E.164-number |
to_number | string | E.164 sihtnumber (üks sinu ThunderPhone'i numbritest) |
returning_call | objekt | Esineb ainult siis, kui see number helistas helistajale viimase 30 päeva jooksul. Vaata Tagasihelistamised |
sip_headers | objekt | Esineb ainult siis, kui kõne saabus käsitsi seadistatud SIP-ühenduse kaudu koos X-* või User-to-User SIP-päistega: päise nimi väiketähtedega → väärtus. Vaata SIP-päised |
Veebividina seansside puhul (web.incoming) tuvastab data
telefoninumbrite asemel manustatud lehe:
{
"type": "web.incoming",
"data": {
"call_id": 987654322,
"origin_domain": "https://example.com",
"publishable_key_prefix": "pk_live_a1b2"
}
}| Väli | Tüüp | Kirjeldus |
|---|---|---|
call_id | täisarv | Kõne ID |
origin_domain | string | Vidinat majutava lehe päritolu brauseri saadetud kujul. Mittebrauseri klient võib saata mis tahes väärtuse, seega ära käsitle seda tõendina selle kohta, kust päring tuli |
publishable_key_prefix | string | Seansi avanud avaliku võtme esimesed tähemärgid |
language, primary_language | string | Olemas, kui vidinaseanss taotles keele alistust |
voice | string | Olemas, kui vidinaseanss taotles hääle alistust |
website_context | string | Olemas, kui vidin edastas seansipõhise lehekonteksti |
Alistusväljad (language, voice, website_context ja kõik
brauseri variables) saabuvad ainult siis, kui avalik võti lubab neid
oma brauseri alistustes. Seansitaotlus, mis sisaldab väärtust, mida võti ei luba, lükatakse tagasi enne
selle webhooksi kutsumist.
Vastuse skeem
Tagasta JSON-objekt, mis kirjeldab selle kõne häälagendi konfiguratsiooni.
prompt ja voice on kohustuslikud; kõik muu on valikuline.
{
"prompt": "You are a helpful booking assistant for Acme Restaurant.",
"voice": "john",
"product": "spark",
"background_track": null,
"tools": []
}| Väli | Tüüp | Kohustuslik | Kirjeldus |
|---|---|---|---|
prompt | string | jah | Agenti juhtiv süsteemiviip |
voice | string | jah | Hääle ID asukohast GET /v1/voices, nt john. Aliasena aktsepteeritakse voice_name. Tundmatud hääled ei läbi valideerimist ja kõne lükatakse tagasi |
product | string | ei | Vaikimisi spark. Lubatud: spark, bolt, storm-base, storm-base-with-ack, storm-extra, storm-extra-with-ack |
thinking_level | string | ei | minimal, base (vaikimisi) või extra. Stormi toodete puhul kirjutatakse üle: storm-extra* sunnib extra, muud storm-* sunnivad base |
audio_context_mode | string | ei | full (vaikimisi) või reduced |
watchdog_enabled | boolean | ei | Luba selle kõne järelevalve. Vaikimisi false |
additional_audio_context | boolean | null | ei | Kaasa helistaja heli viimased mõned voorud, mitte ainult kõige värskem voor, et parandada paranduste ning õigekirja- ja numbrimahuka andmekogumise täpsust väikese latentsuse ja kulude lisandumisega. Sissetulevate seansside puhul on see vaikimisi sees ja väljaminevate telefonikõnede puhul väljas; null säilitab vaikimisi väärtuse |
storm_feedback_mode | string | ei | none, acknowledgement (vaikimisi) või tick. Määrab ka selle, mida helistaja kuuleb, kui helimudelid töötlevad vooru ja audio_tier on hearing või deep_hearing |
language | string | ei | Lühivorm väärtusele primary_language. Lubatud ka koos väärtusega agent_id; sel juhul on see keel, milles kõne algab ja mida agent räägib sellele vastava häälega; vaata Määra keel kõnepõhiselt |
primary_language | string | ei | Normaliseeritud keelekood (vaikimisi en). Lahendamatud koodid lükkavad kõne tagasi |
has_additional_languages | boolean | ei | Vaikimisi false |
additional_languages | stringide massiiv | ei | Lisakeeled, millele agent võib üle minna |
native_voice_switching | boolean | ei | Vaikimisi false. Kui kõne läheb üle teise keelde, vaheta seadistatud hääle säilitamise asemel sellele keelele omase hääle vastu (sobitatud soo järgi) |
language_switching | string | null | ei | ask_first (vaikimisi) või follow_caller; null tähendab sama mis ask_first. Määrab, kuidas mitmekeelne agent käsitleb teise osapoole rääkimist mõnes oma teises keeles. ask_first vahetab kohe, kui teine osapool küsib seda keelt või ütleb selles tervikliku lause, ning küsib pärast midagi lühikest, näiteks „jah”, kas jätkata selles keeles. follow_caller lülitub mis tahes seadistatud keelele, mida teine osapool räägib, isegi ühe sõna korral. Rakendub ainult siis, kui additional_languages on määratud |
audio_tier | string | null | ei | Ainult product: "bolt". standard (vaikimisi; "" ja null tähendavad sama) kasutab kolme transkribeerijat (PHI-d töötlevates kõnedes kasutatakse ainult BAA-ga kaetud transkribeerijaid). lean vähendab selle ühe transkribeerijani, mis kuuleb sagedamini valesti. hearing täiendab standard-taset võimsa helimudelite ansambliga, mis kuulab mõne vooru ajal helistaja heli; need voorud võtavad umbes 1–2 sekundit rohkem aega. Kõrgeim tase deep_hearing on mõeldud erakordselt keerulisteks juhtudeks, näiteks haruldaste keelte jaoks; vastused võtavad umbes 3–4 sekundit ning kõne kasutab standard-taseme intellekti (intelligence ignoreeritakse). Pole üldiselt saadaval: organisatsiooni puhul, millele see pole lubatud, kasutab kõne hearing-taset ja sinu määratud intelligence-taset (seda sisaldav väljamineva kõne päring lükatakse tagasi koodiga 400). Muud tooted ignoreerivad seda |
endpointing | string | null | ei | faster (200 ms), fast (300 ms), normal (500 ms, vaikimisi) või patient (800 ms); null tähendab sama mis normal. Kui kaua Bolt v2 agent pärast helistaja lõpetamist ootab, enne kui küsib mudelilt vastust. Lühem ooteaeg võib vastata varem, kuid saadab rohkem päringuid, mille helistaja järgmised sõnad aegunuks muudavad, suurendades mudeli kulu. Muud tooted ignoreerivad seda |
eagerness | string | null | ei | Aegunud: kuni 19. oktoobrini 2026 kasutatud endpointingi nimi, mida loetakse endiselt. Ignoreeritakse, kui endpointing on määratud |
intelligence | string | null | ei | lite või standard (vaikimisi); null tähendab sama mis standard. Bolt v2 konveieril töötava bolt-agendi intellektitase: milline mudel kirjutab selle vastused. lite jõuab esimese sõnani umbes 700 ms-ga, on odavaim ja veidi vähem usaldusväärne (PHI-na käsitletavates kõnedes umbes 900 ms ja vähem usaldusväärne); standard on umbes 900 ms ja meie tootmismudel; Lite'i vastused, mis ainult kutsuksid tööriista, antakse üle Standard-mudelile. Kasutuselt kõrvaldatud plus ja max töötavad standard-tasemel. Ignoreeritakse, kui audio_tier on deep_hearing. Muud tooted ignoreerivad seda |
faster_replies | boolean | null | ei | Vaikimisi true. Bolt v2 konveieril töötava bolt-agendi puhul saadab vastuste korral, kus see aitab, kaks päringut ja kasutab esimesena vastavat päringut, mis kasutab nende vastuste puhul kaks korda rohkem mudelitokeneid. false lülitab selle välja (Hearingi helitaseme helikontroll võib siiski saata lisapäringuid). Muud tooted ignoreerivad seda |
background_track | string | null | ei | Taustaheli ID või null |
acknowledgement_prompt_mode | string | ei | auto (vaikimisi) või manual (Storm-with-ack toodetes) |
acknowledgement_prompt | string | ei | Kasutatakse, kui acknowledgement_prompt_mode="manual" |
silence_interval_seconds | integer | null | ei | 5–120. Helistaja vaikuse sekundid enne kontrollküsimust |
silence_max_checkins | integer | null | ei | 1–10 |
silence_checkins_enabled | boolean | ei | Vaikimisi true |
silence_final_action | string | ei | Pärast viimast kontrollküsimust: hang_up (vaikimisi) või transfer sihtkohta silence_transfer_destination |
silence_transfer_destination | string | ei | Selle konfiguratsiooni transfer_destinations-kirje nimi; vajalik koos väärtusega transfer. Ilma väärtuseta transfer_destinations ei saa ülekannet teha ja agent lõpetab kõne |
silence_final_message | string | ei | ≤ 300 märki, loetakse ette täpselt kirjutatud kujul; "" (vaikimisi) kasutab vaikimisi teksti |
connect_tone_enabled | boolean | ei | Vaikimisi false |
pronunciation_dicts | boolean | null | ei | Vaikimisi false; null tähendab sama mis false. Kui väärtus on true, kasutab kõne Cartesia kõne ThunderPhone'i hääldussõnastikku kõne keele jaoks, kui see on olemas. Toimib telefoni- ja vidinakõnedes. Rakendub ainult ThunderPhone'i enda Cartesia häältele, mitte sinu enda Cartesia API-võtme häältele. Ei kasutata koos väärtusega agent_id, mille puhul rakenduvad salvestatud agendi seaded |
words | array | null | ei | Kuidas agent hääldab kindlaid sõnu; samad kirjed mis agendi words, kuid ilma support-ita. Kirje ilma väärtuseta language kasutab selle konfiguratsiooni keelt. null ja [] tähendavad, et kirjeid pole. Ei kasutata koos väärtusega agent_id, mille puhul rakenduvad salvestatud agendi sõnad |
voicemail_action | string | ei | prompt (vaikimisi), hangup või message |
voicemail_message | string | ei | Kasutatakse, kui voicemail_action="message" |
agent_name | string | ei | Juhtpaneelidel ja vidinas kuvatav nimi |
org_name | string | ei | Organisatsiooni kuvatav nimi agendi persooni jaoks |
tools | array | ei | Sisesed funktsioonitööriistade skeemid (vaata Funktsioonitööriistad) |
transfer_destinations | objektide massiiv | null | ei | Kuni 50 kirjet kujul {name, number}, kuhu see kõne võib üle suunata; neid valideeritakse nagu agendi ülekandenumbreid. Agent suunab üle nime alusel ja ainult nendesse sihtkohtadesse; [] tähendab, et ülekandeid pole. Jäta see välja või saada null, et agent saaks üle suunata enda valitud numbrile |
timezone | string | ei | Selle kõne IANA ajavöönd, näiteks America/Chicago. Agent ütleb kuupäeva ja kellaaja selles ajavööndis, mitte agendi enda ajavööndis. Lubatud ka koos väärtusega agent_id. Väärtusi, mis pole IANA ajavööndid, ignoreeritakse. Vaata Määra ajavöönd kõnepõhiselt |
context | string | null | ei | Selle kõne vabavormiline tekst, näiteks sinu süsteemi kogutud märkmed, kuni 20 000 märki. Lisatakse viiba järel eraldatud plokina ja seda ei renderdata mallina. Lubatud ka koos väärtusega agent_id. Väärtus, mis pole string või on pikem, lükkab kõne tagasi. Vaata kõnemuutujad ja kontekst |
call_id | integer | ei | Päringu kõne ID valikuline tagasipeegeldus; ignoreeritakse |
Kuna prompt ja voice on kohustuslikud, lükkab {} või mis tahes valideerimise nurjav vastus kõne tagasi: telefonikõne lõpetatakse, nagu on kirjeldatud jaotises Ajalõpud ja korduskatsed, ning vidina seansitaotlus nurjub koodiga 422. See kehtib ka tagasihelistajate puhul: mis tahes JSON-objekt, mille sinu veebikonks tagastab, on selle vastus ning {} on viis kõnest keeldumiseks.
Häälagendi kõne seadistamise webhook
Häälagendil võib olla oma kõne seadistamise webhook: tema seadete väli
Kõne seadistamise webhook või API
call_setup_webhook_url. Määra häälagent numbrile ning enne iga sellele numbrile saabuvat kõnet,
millele häälagent vastab, küsib ThunderPhone webhookilt selle kõne
muutujaid ja konteksti. Numbrile jääb määratud häälagent, seega näitavad
telefoninumbrite leht ja häälagendi leht, milline häälagent sellele vastab.
See on seadistus nagu häälagendi teisedki: see on mustandina,
avaldatakse juurutamisel ja säilitatakse versiooniajaloos. Number, mis on
vanema versiooni külge kinnitatud,
kasutab selle versiooni URL-i. Päringud allkirjastatakse häälagendi enda
call_setup_webhook_signing_secret-iga (mitte organisatsiooni webhooki
saladusega) ning neil on sama päis X-ThunderPhone-Signature,
aegumistähtajad, korduskatsed ja idempotentsusvõti nagu eespool.
Saladus on ainult kirjutatav: määra selline väärtus, mida sinu lõpp-punkt
kontrollib (häälagendi seadetes või käsuga PATCH /v1/agents/{id}); ükski
lugemispäring seda ei tagasta ning
call_setup_webhook_signing_secret_set näitab, kas see on määratud.
Päring sisaldab ülaltoodud telephony.incoming-i kasulikku koormust koos
täiendatava häälagendiga:
{
"type": "telephony.incoming",
"data": {
"call_id": 987654321,
"from_number": "+14155550199",
"to_number": "+15551234567",
"variables": null,
"agent": {
"id": 12,
"name": "Front desk",
"version": 7,
"version_pinned": false
}
}
}| Väli | Tüüp | Kirjeldus |
|---|---|---|
agent.id | täisarv | Numbrile määratud häälagent |
agent.name | sõne | Selle nimi |
agent.version | täisarv | null | Vastava versiooni number: numbrile kinnitatud versioon või häälagendi viimane avaldatud versioon (null, kui seda pole) |
agent.version_pinned | tõeväärtus | Kas number on sellele versioonile kinnitatud |
Vasta kõne jaoks vajalikuga. Kõik järgnevad täiendavad määratud häälagenti numbri versioonis:
{"variables": {...}},{"context": "..."}või mõlemad- sama, kui
"agent_id"väärtuseks on määratud häälagendi ID {}: häälagent vastab ilma midagi täitmata
Lubatud on ka timezone ja language, nagu
agent_id kõrval. Muutujad täidavad
häälagendi {{placeholders}}; kontekst lisatakse viiba järel.
Või määra kõne ise. Teise häälagendi agent_id või täielik
konfiguratsioon koos prompt-iga vastab sellele üksikule kõnele määratud
häälagendi (ja selle kinnitatud versiooni) asemel. Kõne üksikasjades
tähistatakse iga juhtumit väljal
call_setup_webhook: assigned_agent,
other_agent või inline_config. Vastus, mida ei saa kasutada (tundmatu
agent_id, muud võtmed koos variables-iga või konfiguratsioon, mis ei
läbi valideerimist), lõpetab kõne samamoodi nagu numbri webhooki puhul.
Millal webhook peab vastama. Häälagent vajab oma webhooki, kui selle
seadetes kasutatakse vaikimisi väärtuseta {{variable}}-it: viibas või
taaskasutatavates juhistes, sammu juhistes või ridades, kinnituse viibas,
kõnepostiteates, nõusolekuteates või {{variable}}-iga edastamisnumbris.
Häälagendi call_setup_webhook_variables loetleb need.
- See vajab webhooki: kui webhook aegub, pole kättesaadav või vastab
veaga või sisuga, mis pole JSON-objekt, siis kõne ei alga isegi juhul,
kui kõnes on juba ühe sellise muutuja väärtus. Kõne lõpetatakse ja
salvestatakse täpselt nii, nagu on kirjeldatud jaotises
Aegumistähtajad ja korduskatsed (
end_reasoninbound_config_webhook_failed, arveldamata). - See ei vaja midagi (muutujaid pole või igal neist on vaikeväärtus,
näiteks
{{first_name|there}}): webhook käivitub siiski, kuid selle ebaõnnestumisel vastab häälagent ilma selleta ning kõne üksikasjades kuvataksewebhook_failedkoos ebaõnnestumise põhjusega.
Ainuüksi kõne kontekst ei muuda veebikonksu kunagi kohustuslikuks: agendi seadetes ei ole midagi, mis ütleks, et see vajab konteksti. Kasuta vaikeväärtuseta muutujat, kui kõne ei tohi alata ilma sinu veebikonksu vastuseta.
Määramine ja juurutamine. Agent, mis vajab oma veebikonksu, ei saa ilma selleta numbrile määratud olla: määramine lükatakse tagasi muutujate nimedega sõnumiga. Sama kontroll tehakse, kui numbri versioon muutub, sealhulgas kui kinnitatud number liigub tagasi väärtusele Latest. Kui agent vastab numbril oma avaldatud seadistustega, lükatakse samal viisil tagasi juurutamine, mis lisab sellise muutuja ilma veebikonksuta (või eemaldab veebikonksu). Mustandi salvestamine on alati lubatud ning agendi warnings sisaldab väärtust call_setup_webhook_needed, kuni probleem on lahendatud.
Agendi veebikonks käivitub ainult sissetulevate telefonikõnede puhul numbritel, millele see on määratud. Väljuvad kõned, veebividina seansid, SIP-aadressid, simulatsioonid ja juhtpaneeli testvestlused seda ei kutsu; need võtavad oma muutujad jätkuvalt päringust nagu varem.
Testimine salvestatud näidistega. Et testida, kuidas sinu agent toimib
konkreetse vastusega (tagasi helistav helistaja, kirjet ei leitud, hispaania keelt kõnelev helistaja),
salvesta see vastus agendi näidisena: selle variables, context
ja soovi korral language, sisestades need käsitsi või kopeerides varasemast kõnest. Vali see,
kui alustad juhtpaneelil testvestlust, testkõnet oma telefonile
või simulatsiooni agendiga, ning kõne käivitub nii, nagu sinu webhook
oleks sellele vastanud. Näidised on ühised agendi kõigi versioonide vahel.
Ühe muutmine säilitab selle varasemad versioonid: kui agendi muudatus vajab
muutujat, mida näidis ei määra, lisa see näidisele ning agendi vanemad
versioonid jätkavad näidise kasutamist sellisena, nagu see oli. Telefoninumbrile
helistavad simulatsioonid käivitavad selle asemel sinu tegeliku webhooki.
Ilma määratud agendita numbrid kasutavad jätkuvalt numbri või organisatsiooni veebikonksu täpselt nagu eespool.
Tagasihelistamised
Inimesed helistavad sageli tagasi numbrile, mis neile helistas, näiteks pärast seda, kui sinu häälagent jättis kõneposti. Kui sissetulev kõne tuleb numbrilt, millele helistati viimase 30 päeva jooksul, leiab ThunderPhone kõige hiljutisema sellise väljamineva kõne (sellise, mis selle numbril helises) ja kasutab seda kolmel viisil:
-
returning_callpäringus. Ülaltoodud blokeeriv päring ja lõpp-punkti teade sisaldavad seda, et sinu töötleja saaks helistaja suunata:{ "type": "telephony.incoming", "data": { "call_id": 987654321, "from_number": "+14155550199", "to_number": "+15551234567", "returning_call": { "call_id": 987650001, "agent_id": 13, "started_at": "2026-10-21T19:05:12.402Z", "outcome": "voicemail" } } }Väli Tüüp Kirjeldus call_idtäisarv Varasem väljaminev kõne agent_idtäisarv | null Häälagent, kes kõne tegi; nullkõne puhul, mis tehti tekstisisese konfiguratsiooniga või mille häälagent on kustutatudstarted_atsõne Millal see algas (ISO 8601, UTC) outcomesõne no_answer(kõne helises vastuseta, number oli hõivatud või kõne lükati tagasi),voicemail(kõnepost vastas või keegi ei rääkinud häälagendiga),conversation(keegi rääkis häälagendiga) võianswered(kõnele vastati; veel ei ole teada, kes vastas) -
Taustteave häälagendile. Kõnele vastav häälagent saab oma viiba lõppu lühikese märkuse: millal varasem kõne tehti, milline häälagent selle tegi ja milline oli tulemus. Häälagendile öeldakse, et ta ei loeks seda ette ning et ta ei jagaks helistaja ID võimaliku võltsimise tõttu selle kõne kohta midagi peale selle, et sellele numbrile helistati varem.
-
Varuagent. Kui numbril ei ole sissetulevate kõnede häälagenti ja konfiguratsiooni ei saabu, sest webhooki URL puudub või sinu webhook ei vastanud (aegus, sellele ei saanud ühendust või see vastas mõlemal katsel
5xx,408või429), suunatakse kõne lõpetamise asemel varasema kõne teinud häälagendile, tingimusel et see häälagent on sinu organisatsioonis endiselt olemas. See töötab selle häälagendi juurutatud seadetega. Webhooki mis tahes vastus on siiski määrav: teine4xx, sisu, mis ei ole JSON-objekt,{}või valideerimisel ebaõnnestuv konfiguratsioon lõpetab kõne nagu varem. Numbril olev sissetulevate kõnede häälagent vastab alati.
Varasema kõne üksikasjade jagamine. Helistaja ID-d saab võltsida, seega ei jõua
vaikimisi varasema kõne sisust midagi uue kõneni. Organisatsiooni administraator saab
sisse lülitada Varasema kõne üksikasjade jagamise jaotises Organisatsioon → Üldine → Tagasihelistamised (või määrata
callback_context_details_enabled).
Kui see on sisse lülitatud, tsiteerib häälagendi märkus ka varasema kõne kokkuvõtet
ning varasema kõne teinud häälagendile suunatud kõne töötab selle kõne variables-ega
(näiteks kontakti nimega). Lülita see sisse ainult siis, kui neid üksikasju on ohutu
jagada igaühega, kes sellelt numbrilt helistab. Isegi siis ei edasta kõne, mis võib
sisaldada kaitstud terviseteavet, kunagi oma kokkuvõtet ega muutujaid kõnele, mis ei
ole määratud PHI-d töötlema.
Kõne üksikasjades. Varasema kõnega sobitunud sissetuleval kõnel on
GET /v1/calls/{call_id} vastuses callback-objekt:
ülaltoodud returning_call, routed_as_callback (kas varuagent sellele
vastas) ja config_webhook_failure ({kind, attempts, http_status, host}, kui sinu veebikonks ei andnud vastust ja varuagent võttis
kõne vastu, muul juhul null), mistõttu jääb veebikonksu katkestus nähtavaks ka siis,
kui kõnele vastati.
Vastuse suuruse piirang
Näidistöötleja
import hashlib
import hmac
import json
import os
from fastapi import FastAPI, HTTPException, Request
app = FastAPI()
WEBHOOK_SECRET = os.environ["THUNDERPHONE_WEBHOOK_SECRET"]
def verify(body: bytes, signature: str) -> bool:
expected = hmac.new(WEBHOOK_SECRET.encode(), body, hashlib.sha256).hexdigest()
return hmac.compare_digest(expected, signature or "")
@app.post("/thunderphone-webhook")
async def webhook(request: Request):
body = await request.body()
if not verify(body, request.headers.get("X-ThunderPhone-Signature", "")):
raise HTTPException(status_code=401)
event = json.loads(body)
if event["type"] == "telephony.incoming":
caller = event["data"]["from_number"]
prompt = (
"Greet the caller as a San Francisco local…"
if caller.startswith("+1415")
else "You are a friendly customer support agent…"
)
return {
"prompt": prompt,
"voice": "john",
"product": "spark",
}
if event["type"] == "web.incoming":
return {
"prompt": "You are the website's helpful voice assistant…",
"voice": "john",
"product": "spark",
}
return {}import crypto from "node:crypto";
import express from "express";
const app = express();
const SECRET = process.env.THUNDERPHONE_WEBHOOK_SECRET;
function verify(body, signature) {
const expected = crypto
.createHmac("sha256", SECRET)
.update(body)
.digest("hex");
return signature &&
crypto.timingSafeEqual(Buffer.from(expected), Buffer.from(signature));
}
app.post(
"/thunderphone-webhook",
express.raw({ type: "application/json" }),
(req, res) => {
if (!verify(req.body, req.header("X-ThunderPhone-Signature"))) {
return res.sendStatus(401);
}
const event = JSON.parse(req.body.toString("utf8"));
if (event.type === "telephony.incoming" || event.type === "web.incoming") {
const caller = event.data.from_number || "web";
const prompt = caller.startsWith("+1415")
? "Greet the caller as a San Francisco local…"
: "You are a friendly customer support agent…";
return res.json({
prompt,
voice: "john",
product: "spark",
});
}
res.json({});
},
);Vastus funktsioonitööriistadega
Lisa tööriistad, et tehisintellekt saaks vestluse ajal sinu API-sid kasutada:
{
"prompt": "You are a booking assistant. Use the available tools to help customers schedule appointments.",
"voice": "john",
"product": "spark",
"tools": [
{
"type": "function",
"function": {
"name": "search_appointments",
"description": "Find available appointment slots",
"parameters": {
"type": "object",
"properties": {
"date": { "type": "string", "description": "YYYY-MM-DD" },
"service": { "type": "string" }
},
"required": ["date"]
}
},
"endpoint": {
"url": "https://api.example.com/appointments/search",
"method": "POST",
"headers": {
"X-Api-Key": "your-key"
}
}
}
]
}Toote tasemete kiirülevaade
| Toode | Latentsus | Arutlusvõime | Kinnitus |
|---|---|---|---|
spark | Madalaim | Põhiline | — |
bolt | Madal | Täiustatud | — |
storm-base | Keskmine | Tugev | — |
storm-base-with-ack | Keskmine | Tugev | Automaatne täitesõnum mõtlemise ajal |
storm-extra | Kõrgem | Sügav | — |
storm-extra-with-ack | Kõrgem | Sügav | Automaatne täitesõnum mõtlemise ajal |
Seotud
Mitteblokeeriv kõne lõppemise sündmus.
Täielik JSON-skeem tools[] jaoks ja allkirjastatud lõpp-punkti leping.
Telli mitu URL-i sündmustele telephony.incoming / web.incoming.
Mustrid helistajapõhiste viipade, tööriistade ja A/B-testide jaoks.