Search code examples
twiliotwilio-studio

Forward the "Send and Wait for Reply" to a different phone number


We have a studio flow called "Google LA" that's triggered via Rest API. This flow has a Send and Wait for Reply so we hook this flow to "When a message comes in" so it will follow the rest of the flow when customer rates the service 1 to 5 stars. Now, within the Send and Wait for Reply, we want the customer's reply be forwarded to our main business phone number for tracking/recording purposes and so we can address their issues for rating us 1 to 3 stars. Here's our setup:

enter image description here

This is what we want:

enter image description here

Edited for philnash suggestion:

I created a function in Twilio with this code:

exports.handler = function(context, event, callback) {

    const accountSid = context.ACCOUNT_SID;
    const authToken = context.AUTH_TOKEN;
    const client = require('twilio')(accountSid, authToken);

client.messages
  .create({
     body: widgets.negative1_3.inbound.Body,
     from: '+12132779513',
     to: '+12133885256'
   })
  .then(message => console.log(message.sid));
  

};

However, it did not send anything or the customer response. I renamed the negative1-3 widget to negative1_3 and published the studio flow.

enter image description here

I tried changing the body: 'Hello' to make sure that my function works, and yes. I received the 'Hello' sms to my verified caller ID phone number after it reaches the first_question -> check_response -> negative1_3.


Solution

  • Twilio developer evangelist here.

    You don't necessarily need to forward the message here. You can make an API call to your own service with all the data you need from the message, so you can store and react to the information that way.

    To do so you will want to add either an HTTP Request widget or a Run Function widget after the Send and Wait For Reply widget. Within those widgets, you can access the reply from the Send And Wait For Reply widget using liquid tags. You can see how to call on the variables in the docs for the Send and Wait For Reply widget. In the case of your widget, you should be able to get the body of the reply by referring to:

    widgets.negative1-3.inbound.Body
    

    (Although I am not sure how the name "negative1-3" will work, so you might try widgets["negative1-3"] instead, or rename the widget with underscores.)

    Using the body of the inbound message, as well as the from number, you can send the data to your own application with the HTTP request widget or with a Run Function widget.

    Edit

    Your function can only access parameters that you set in the function widget config. You can then access those parameters in the event object. You also need to return once the message is sent successfully using the callback function. One other tip, you don't need to instantiate your own client, you can get it from the context. Like so:

    exports.handler = function(context, event, callback) {
    
      const client = context.getTwilioClient();
    
      client.messages
        .create({
           body: event.Body,
           from: '+12132779513',
           to: '+12133885256'
         })
        .then(message => {
          console.log(message.sid);
          callback(null, "OK");
        })
        .catch(error => callback(error));
    };