J'essaie de mettre en œuvre un simple appel chuchoté qui permet à notre agent de savoir quel numéro de téléphone/produit a été composé. Lorsqu'un appel arrive, il passe par un flux de studio où l'appelant choisit une langue. L'appel est ensuite acheminé vers une file d'attente du routeur de tâches via le widget « Enqueue ». D'après ce que j'ai lu dans la documentation, je dois passer à la fonction de rappel un paramètre instruction: 'call' afin de pouvoir spécifier une URL à "jouer" à l'agent.

Je suis actuellement limité à tout implémenter à l'intérieur de twilio lui-même via Studio et Functions.

Pourquoi cela ne fonctionne-t-il pas et que dois-je faire spécifiquement ?

Merci!

Fonction de rappel d'affectation

exports.handler = function(context, event, callback) {
    const client = context.getTwilioClient();
    let eventInfo = JSON.parse(event.TaskAttributes);
    // const response = new Twilio.twiml.VoiceResponse();
    console.log(Object.keys(event));
    console.log(JSON.parse(event.TaskAttributes));
    console.log(Object.keys(JSON.parse(event.TaskAttributes)));
    // console.log(JSON.parse(event.WorkerAttributes));
    const worker = JSON.parse(event.WorkerAttributes);
    // console.log("ReservationSid: " + event.ReservationSid);
    // console.log(typeof eventInfo);

    // // ATTEMPT 1 
    // // This works to dequeue a call to a worker, but there is no whisper functionality
    // callback(null, {
    //   'instruction':'dequeue',
    //   'post_work_activity_sid' : 'WORKSPACEACTIVITYSID',
    //   'from' : eventInfo.from
    // });

    // // ATTEMPT 2
    // // This works to play the whisper to the agent, but the caller is never connected to the agent.
    let callbackURL = 'TWILIOFUNCTIONURL';
    callback(null, {
      'instruction':'call',
      'post_work_activity_sid' : 'WORKSPACEACTIVITYSID',
      'from' : eventInfo.from,
      'url' : callbackURL
    });

    // // ATTEMPT 3 - Building a twiml version of attempt #2
    // // This doesn't work.
    //
    // let callbackURL = 'TWILIOFUNCTIONURL';
    // let twiml = new Twilio.twiml.VoiceResponse();
    // const dial = twiml.dial();    
    // dial.queue({
    //     'instruction':'call',
    //     // 'post_work_activity_sid' : 'WORKSPACEACTIVITYSID',
    //     'from' : eventInfo.from,
    //     'accept' : true,
    //     'url' : callbackURL,
    //     // 'reservationSid' : event.ReservationSid
    // }, event.selected_language);
    // console.log(dial.toString());
    // console.log(twiml.toString());
    // callback(null, twiml);

    // // ATTEMPT 4 - Build a twiml version of attempt #1
    // // This doesn't work.
    //
    // let twiml = new Twilio.twiml.VoiceResponse();
    // twiml.dial({
    //   'instruction':'dequeue',
    //   'post_work_activity_sid' : 'WORKSPACEACTIVITYSID',
    //   'from' : eventInfo.from
    // //   'to' : 'WORKSPACEQUEUESID'
    // });
    // console.log(twiml.toString());
    // callback(null, twiml);
};

URL de rappel contenant des éléments d'annonce de file d'attente.

exports.handler = function(context, event, callback) {
    let twiml = new Twilio.twiml.VoiceResponse();
//  let client = context.getTwilioClient();
//  console.log("BEGIN Queue Announcer - context");
//  console.log(Object.keys(context));
//  console.log(context);
//  console.log("BEGIN Queue Announcer - event");
//  console.log(Object.keys(event));
//  console.log(event);
//  console.log("BEGIN Queue Announcer - client");
//  console.log(Object.keys(client));
//  console.log(client);
//  console.log("END Queue Announcer");

// Random attempt to get the call info
//  console.log("BEGIN Queue Announcer - CallSid");
//  console.log(event.CallSid);
//  client.calls(event.CallSid)
//      .fetch()
//      .then(call => console.log("Call: " + call));
//  console.log("END Queue Announcer - CallSid");


    let client = context.getTwilioClient();
    twiml.say("QUEUE NAME GOES HERE");
    twiml.dial()
    .queue({
        // 'reservationSid' : event.ReservationSid
    }, 'english');
    callback(null, twiml);
};
0
Stefan Russo 10 oct. 2019 à 23:12

1 réponse

Meilleure réponse

Voici ce que j'ai fait qui a fonctionné. Ceci est contenu dans une fonction qui est en fait "l'URL de rappel d'affectation".

Pas:

  1. Utilisez le twimlet 'echo' pour générer le twiml. Modifiez l'URL fournie pour inclure 'event.RegistrationSid' le cas échéant.
  2. Acceptez l'inscription via une requête POST.
  3. Faites le rappel, y compris le paramètre 'instruction : call'.

exports.handler = function(context, event, callback) {
const client = context.getTwilioClient();
let eventInfo = JSON.parse(event.TaskAttributes);

// Generate the callback url
let callbackURL = `http://twimlets.com/echo?Twiml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3CResponse%3E%0A%3CSay%3ECALLWHISPERGOESHERE%3C%2FSay%3E%0A%3CDial%3E%0A%3CQueue%20reservationSid%3D%22${event.ReservationSid}%22%3E%3C%2FQueue%3E%0A%3C%2FDial%3E%0A%3C%2FResponse%3E&`;

// Generate POST request to accept the reservation
const rp = require("request-promise");
const postURI = `https://taskrouter.twilio.com/v1/Workspaces/${event.WorkspaceSid}/Tasks/${event.TaskSid}/Reservations/${event.ReservationSid}`;
const postForm = {
    ReservationStatus: "accepted"
};
const postAuth = {
    user: context.ACCOUNT_SID,
    pass: context.AUTH_TOKEN
};
const options = {
    method: "POST",
    uri: postURI,
    auth: postAuth,
    form: postForm
};
rp(options)
    .then(body => {
        console.log(body);
        callback(null, null);
    })
    .catch(err => {
        console.log(err);
        callback(null, err);
    });

// Call the agent
callback(null, {
    instruction: "call",
    post_work_activity_sid: "POSTWORKACTIVITYSID",
    from: eventInfo.from,
    url: callbackURL
});
};
0
Stefan Russo 17 oct. 2019 à 15:46