Twiml Connect method issue - node.js

So i'm trying to make it so an outbound call gets redirected to my Autopilot system, but my Twiml does seem to recognize the connect function built into the voice response method
I've tried to have the account sid be provided, call, and even load the link in a browser, it just gives the same error
Heres the code im using
exports.handler = function(context, event, callback) {
let res = new Twilio.twiml.VoiceResponse();
console.log(res.toString());
res.connect().autopilot(context.AI_SID);
console.log(res.toString());
callback(null, res);
};
It should return the code below, but seems like this doc is not accurate: https://www.twilio.com/docs/voice/twiml/connect
<Response>
<Connect>
<Autopilot>#####</Autopilot>
</Connect>
</Response>

Update the Twilio helper libraries under your Twilio Functions, Configure, to use a release that added this verb.
https://github.com/twilio/twilio-node/blob/master/CHANGES.md

Related

How to add a "say" message to the beginning of conference using Twilio API in Nodejs

This is my code and it is working perfectly for creating a conference by calling two numbers. However, I wanted to add a message at the beginning of the conference to say "Hello, you will be contacted shortly"
I read that I can use ngrok to create the URL with the XML response but ngrok is not working for me. because ngrok urls are only working for me when the code is still running locally. so If I stop the Twilio script that I wrote to generate this URL from running locally the ngrok URL stops working.
function CallTwilio(number1, number2) {
const Twilio = require('twilio');
var accountSid = 'XXX';
var authToken = 'YYY';
const client = Twilio (accountSid, authToken);
[number1, number2].forEach(function(number_i) {
client.calls.create({
url: 'https://handler.twilio.com/twiml/EH05a82ce144a55344f0d39ac6b20204f1',
to: number_i,
from: 'mynumber',
})
.then((call) => onprogress.stdout.write('Called'));
});
}
Twilio developer evangelist here.
I note that when you create the call you pass a url which is a TwiML Bin. My guess is that your TwiML Bin code looks a bit like:
<Response>
<Dial><Conference>Conference name</Conference></Dial>
</Response>
If you want to <Say> a message before the person you call enters the conference, then you need to adjust this to include the <Say> before the <Dial>. Like this:
<Response>
<Say>Hello, you will be connected shortly.</Say>
<Dial><Conference>Conference name</Conference></Dial>
</Response>

how to send sms from within Twilio programmable voice function

I have a Twilio function which executes whenever someone calls a certain number. I'm trying to have the function send an sms. It's not working, but I'm not getting any error. Any help debugging would be great.
exports.handler = function(context, event, callback) {
let response = new Twilio.twiml.MessagingResponse();
response.message({
to: '+11234567890',
}, 'new sms from testing');
};
Additionally, If you could let me know how to access the incoming phone number within this function, I would greatly appreciate it. Thanks in advance for any suggestions or insights.
You will not be able to send a messaging response to a voice event, you'll need to create a messaging client and send separately. See docs here: https://www.twilio.com/docs/sms/tutorials/how-to-send-sms-messages-node-js .
For incoming phone numbers, that is included in the event object. It should be event.From, but you can log the event object to get all the parameters. They should follow the Call object schema: https://www.twilio.com/docs/voice/api/call

'context.getTwilioClient(...).document is not a function?

I'm working with Twilio Functions and I'm trying to use Sync Documents but I keep getting this error: context.getTwilioClient(...).document is not a function
exports.handler = function(context, event, callback) {
context.getTwilioClient().document('data').then(function(doc) {..});
};
Twilio developer evangelist here.
As Andy said, the client you retrieve from context.getTwilioClient() is a generic Twilio REST API client that can access all the resources.
To get your document you need to traverse the objects in the client and get a handle on your service. You need the Sync Service SID, ideally in your environment variables, and the code would look like this:
const client = context.getTwilioClient();
const service = client.sync.services(process.env.SYNC_SERVICE_SID);
service.document('data').fetch().then(function(doc) {
// do something with the document.
});
Let me know if that helps at all.

Trouble with Twilio / TwiML statusCallback using Node.js

When a user texts my number, I would like to respond with a message using TwiML. I'd also like to know whether my response message sends or fails. I'm creating my TwiML response using the Twilio library for Node.js.
Here is my code:
const response = new twilio.TwimlResponse();
response.message(Response, {
statusCallback: '/sms/status/'
});
Here is the code for the route. Please note that the router is mounted upon the "/sms/" router:
router.post('/status/', acceptRequestsOnlyFromTwilio, (req, res) => {
const Event = require('./../models/schemas/event');
const event = new Event({
description:
`MessageSid = ${req.body.MessageSid}
MessageStatus = ${req.body.MessageStatus}`
});
event.save();
console.log(
`MessageSid = ${req.body.MessageSid}
MessageStatus = ${req.body.MessageStatus}`
);
res.sendStatus(200);
});
When I check my logs using the Heroku CLI, I don't log nor do I see a record when I check MongoDB.
Anyone have any ideas or tips on how I can go about debugging this or if I'm implementing this incorrectly?
Thanks for you time!
Twilio developer evangelist here.
Firstly, have you set your Messaging request URL for the Twilio phone number you are using? Is it pointing at the correct route for your Message TwiML response?
Also, your first code block should also be within a router.post endpoint for your server. Do you correctly return the TwiML response as the server response?
As a tip, it might be better to develop this application locally and test your webhook endpoints using a tool like ngrok. I love using ngrok to test webhooks.

how to connect two anonymous callers together using twilio

I am currently doing using node js twilio module for a functionality in a project that i am working on for a client. Basically the server is going to initiate a call using twilio api to call a certain person A the connect him to another person B. I am new to twilio so i am still a noob, but this is the code i have written so far. Please i need u guys input on how to achieve this. cheers
var client = require('twilio')(TWILIO_ACCOUNT_SID, TWILIO_AUTH_TOKEN);
exports.makeCall = function(callDetails, cb) {
client.makeCall({
to:'+16515556677', // Any number Twilio can call
from: TWILIO_CALLER_ID,
url: 'https://demo.twilio.com/welcome/voice' // A URL that produces an XML document (TwiML) which contains instructions for the call
}, function(err, responseData) {
//executed when the call has been initiated.
console.log(responseData.from); // outputs "+14506667788"
var resp = new client.TwimlResponse();
resp.say('Welcome to Acme Customer Service!')
.gather({
action:'http://www.example.com/callFinished.php',
finishOnKey:'*'
}, function() {
this.say('Press 1 for customer service')
.say('Press 2 for British customer service', { language:'en-gb' });
});
});
};
Twilio developer evangelist here.
You're part way there with this, but you don't want to be creating a TwiML response in the callback to your call to client.makeCall. The responseData there is a representation of the call in Twilio's system.
What you need to do is provide a URL to the makeCall function that hosts some TwiML that connects the call to another phone number. Currently you have the demo URL in place, so you'll need to point that to a URL that you own.
There's a very good in depth tutorial on how to accomplish all of this on the Twilio site which you might find helps out. You can find the tutorial here, give it a go and let me know if that helps.

Resources