ThunderPhone 2.0 on nüüd saadaval.Iseteenindusena alates 2 senti/min.Loe uudist

Contact centers

Ühenda Twiliost

Suuna Twilio kõned CallSidi abil SIP-i kaudu ThunderPhone’i agendile ning võta need referUrl-i kaudu tagasi, kus üleandmine toimub edastusaadressis.

Sinu TwiML valib agendi SIP-aadressi, lisades kõne CallSid-i päisesse. Kui helistaja vajab inimest, saadab agent SIP-i REFER-i, Twilio edastab üleandmist sisaldava edastusaadressi sinu referUrl-i töötlejale ning sinu töötleja tagastatud TwiML määrab, kuhu helistaja suunatakse, näiteks Flexi järjekorda.

Enne alustamist

  • ThunderPhone'i agent ja organisatsiooni API-võti.
  • Twilio Programmable Voice ning koht TwiML-i ja referUrl-i töötleja majutamiseks: sinu enda server või TwiML Bin ja Twilio Function. Flex on valikuline.

1. Loo SIP-i lõpp-punkt

Twilio <Sip> kasutab kasutajanime ja parooli, seega kasuta standardset lõpp-punkti:

curl -X POST https://api.thunderphone.com/v1/sip-endpoints \
  -H "Authorization: Bearer sk_live_YOUR_API_KEY" \
  -H "Content-Type: application/json" \
  -d '{"agent_id": 12, "name": "Twilio"}'

Salvesta vastusest saadud password kohe; seda näidatakse ainult üks kord. Ainult Twiliost tulevate kõnede vastuvõtmiseks vaata Piira lähte-IP-aadresse.

2. Saada kõned koos kontekstiga

Tagasta see TwiML kõne jaoks, mille soovid agendile üle anda:

<Response>
  <Dial answerOnBridge="true" referUrl="https://YOUR_SERVER/thunderphone-refer">
    <Sip username="tp409667538f83" password="YOUR_ENDPOINT_PASSWORD">sip:agent-12-jhxmginwjx@sip.thunderphone.com;transport=tls?X-Call-ID={{CallSid}}</Sip>
  </Dial>
</Response>
  • ;transport=tls on oluline: Twilio kasutab UDP-d, kui sellele ei öelda teisiti.
  • X-Call-ID kannab CallSid-i. Twilio ei dokumenteeri oma kõne-ID päist, seega lisa see päis: ThunderPhone salvestab selle kõne external_call_id-na. {{CallSid}} töötab TwiML Bin-is; oma serverist kirjuta sissetuleva päringu CallSid.
  • Lisa samal viisil rohkem konteksti, näiteks &amp;X-Account-Id=12345. TwiML-is kirjuta & kujul &amp;, sest eraldiseisev & ei ole kehtiv XML. Igaüks jõuab viibani muutujana, siin {{sip_x_account_id}}. Twilio lubab x- päiseid ja User-to-User-i protsendikodeerituna, kusjuures kogu URI on alla 255 tähemärgi ja päised alla 1 024 tähemärgi.
  • referUrl võimaldab Twiliol agendi REFER-i vastu võtta; ilma selleta edastus nurjub veaga 13802. answerOnBridge="true" hoiab helistaja ühendatuna, kuni uus sihtkoht vastab, nii et nurjunud edastuse korral saab kasutada varuvarianti.

Studio vidin Ühenda kõne aadressile ei dokumenteeri kohandatud päiseid ega referUrl-i, seega anna Studio kaudu kõne sellele TwiML-ile üle, näiteks vidinaga TwiML-i ümbersuunamine.

3. Võta kõne tagasi

Häälagent suunab kõne REFER-iga, mille suunamisaadress sisaldab üleandmise ID-d ja eesmärki. Lisa see suunamisnumber (vt Lisa suunamisnumber ja Päised suunamisaadressis):

{
  "name": "Twilio support",
  "number": "sip:support@acme.sip.twilio.com",
  "headers": {"X-Handoff-Id": "{{handoff_id}}", "X-Handoff-Intent": "{{handoff_intent}}"},
  "headers_in_uri": true
}

Twilio saadab kogu aadressi sinu referUrl-ile kui ReferTransferTarget, näiteks <sip:support@acme.sip.twilio.com?X-Handoff-Id=Zr3mY0b1Q9xWw2kPq4s7Tg&X-Handoff-Intent=billing_dispute>. Sinu töötleja loeb sellest päised välja ja tagastab TwiML-i, mis määrab, kuhu helistaja järgmisena suunatakse. Aadressi kasutajaosa (support) saad ise valida, seega saad lisada iga sihtkoha jaoks ühe suunamisnumbri ja selle järgi marsruutida.

See Twilio Function lisab helistaja Flexi järjekorda koos üleandmisega ülesande atribuutidena ja otsib kokkuvõtte üleandmise ID järgi. Otsing toimub Functionis, sest Studio HTTP Requesti vidin ei saa saata Authorization päist:

exports.handler = async (context, event, callback) => {
  const target = (event.ReferTransferTarget || "").replace(/^<|>$/g, "");
  const params = new URLSearchParams(target.split("?")[1] || "");
  const handoffId = params.get("X-Handoff-Id") || "";
  const attributes = { handoff_id: handoffId, intent: params.get("X-Handoff-Intent") || "" };
 
  if (handoffId) {
    const response = await fetch(
      "https://api.thunderphone.com/v1/calls/handoff?handoff_id=" + encodeURIComponent(handoffId),
      { headers: { Authorization: "Bearer " + context.THUNDERPHONE_API_KEY } }
    );
    if (response.ok) {
      const call = await response.json();
      attributes.summary = (call.handoff && call.handoff.summary) || "";
    }
  }
 
  const twiml = new Twilio.twiml.VoiceResponse();
  twiml.enqueue({ workflowSid: context.FLEX_WORKFLOW_SID }).task({}, JSON.stringify(attributes));
  callback(null, twiml);
};

Hoia API-võtit Functioni keskkonnamuutujates. Muude väljade kohta vaata Üleantud kõne otsimine.

Testi seda

Helista Twilio numbrile, mis tagastab ülaltoodud TwiML-i, palu häälagendil ühendada sind inimesega ning kontrolli, et sinu referUrl-i töötleja saab mõlema päisega ReferTransferTarget-i ja et helistaja jõuab järjekorda. Seejärel ava kõne käsuga GET /v1/calls/{call_id}: external_call_id peaks olema CallSid.

Piirangud

  • Twilio piirab Refer-To pikkuse 256 tähemärgiga. ThunderPhone hoiab aadressi pikkuse 254 tähemärgil ja jätab välja päise, mis ei mahu ära, seega hoia päiste nimed ja väärtused lühikesed.
  • Twilio ei dokumenteeri päiste lugemist BYE-l, seega ei saa tagasisuunamine üleandmist Twiliosse tagasi kaasa võtta. Kasuta ülaltoodud viisil REFER-i.
  • Twilio ei aktsepteeri REFER-i kõnel, mis on ühendatud <Conference> või <Queue> kaudu, seega vali häälagent ülaltoodud viisil <Dial><Sip>-iga.