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

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>

Related

How to send custom notifications using twilio whatsapp without registering receiver's number?

I have followed the following steps from https://www.twilio.com/docs/sms/whatsapp/quickstart/node which works great with my the number I have registered with custom messages.
Now I changed the number with another WhatsApp number I had but it's not sending messages to that. How do I send without registering?
Please note that I have a trial account.
// This works
const whatsappMessage = await textTransport.messages
.create({
from: 'whatsapp:+14155238886',
body: 'Hello there!',
to: 'whatsapp:+91888888888' // registered number to twilin
});
// This doesnt work
const whatsappMessage = await textTransport.messages
.create({
from: 'whatsapp:+14155238886',
body: 'Hello there!',
to: 'whatsapp:+91999999999' // not registered
});
Twilio developer evangelist here.
The Twilio API for WhatsApp allows you to test using our sandbox. However, to send messages to your users without the sandbox restrictions you need to request your own WhatsApp enabled number.
To receive message to new number must send join [KEY-WORD] from the new number to the WhatsApp number, as you do with the first number

Twiml Connect method issue

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

How to get call logs for last 10 days using Twilio API?

I am working on a Twilio project in which I need to fetch call logs for last 10 days in a single call, but I see no favourable parameters in twilio api docs (https://www.twilio.com/docs/api/voice/call#list-get) that can help me. I tried DateCreated,StartTime parameters but they work differently. Could anyone help me out here please?
Thanks in advance.
I think you are in the wrong area of the api, i think the area you are looking at is for calls currently in progress.
Try usage-records
Sometimes when I'm stuck, I run a curl example in Twilio's API explorer; This shows me 2 things:
Options used in call
What to expect as results
Good luck
Try the startTimeAfter and startTimeBefore parameters.
// Download the Node helper library from twilio.com/docs/node/install
// These identifiers are your accountSid and authToken from
// https://www.twilio.com/console
const accountSid = 'ACXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX';
const authToken = 'your_auth_token';
const client = require('twilio')(accountSid, authToken);
const filterOpts = {
status: 'completed',
startTimeAfter: '2016-07-04',
startTimeBefore: '2016-07-06',
};
client.calls.each(filterOpts, call => console.log(call.direction));
Twilio Docs:
https://www.twilio.com/docs/api/voice/call?code-sample=code-retrieve-completed-calls-from-a-period-of-time&code-language=js&code-sdk-version=3.x
curl 'https://api.twilio.com/2010-04-01/Accounts/[ACCOUNT SID]/Calls.json?StartTime%3E=2020-06-01T0&EndTime%3C=2020-07-01' -u [ACCOUT SID]:[AuthToken]
This curl script will give you a list of calls from 2020-06-01 to 2020-07-01. Don't forget to substitute your ACCOUNT_SID and AuthToken (without the brackets)

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