Dasman
Dasman

Reputation: 317

Can't make custom Twilio Call with TwiML Bin and Assets

I am trying to make a twilio call with hosting an xml file on Twilio TwiMl Bins and hosting an mp3 file in Assets:

SheriffinTown

I just want to say a simple sentence and then play a 5-10 second clip. Currently when I run my code:

# Download the helper library from https://www.twilio.com/docs/python/install
import os
from twilio.rest import Client


# Your Account Sid and Auth Token from twilio.com/console
account_sid = "stuff"
auth_token = "stuff"
client = Client(account_sid, auth_token)

call = client.calls.create(
            url="https://handler.twilio.com/twiml/EHdff1ba57cc168191864794c6c44c1723",
            from_="+1mytwilionumber",
            to="+1mynumber"                  
        )

print(call.sid)

I just get a call - the trial message and then silence and then the call is concluded. Any tips?

Upvotes: 0

Views: 602

Answers (2)

swim
swim

Reputation: 11

Just an fyi you can also make TWIML/robocalls on the fly by uploading your TWIML to a bin, just before you make the call. It just needs a public URL. This project that I found actually demonstrates the technique by uploading the TWIML/XML on the fly, getting the new URL (for the newly generated TWIML), and then makes the Twilio call. That restwords.com site is pretty handy for this purpose.

Upvotes: 0

Dasman
Dasman

Reputation: 317

Never Mind! So this worked:

https://support.twilio.com/hc/en-us/articles/223132187--Not-Authorized-error-when-trying-to-view-TwiML-Bin-URL

But your twilio call will only run once after you "sign" the HTTP request with hmac authentication. The script is

const crypto = require('crypto')
    , request = require('request')

const url = process.argv[2] + '?AccountSid=' + process.env.TWILIO_ACCOUNT_SID

const twilioSig = crypto.createHmac('sha1', process.env.TWILIO_AUTH_TOKEN).update(new Buffer(url, 'utf-8')).digest('Base64')

request({url: url, headers: { 'X-TWILIO-SIGNATURE': twilioSig }}, function(err, res, body) {
  console.log(body)
})

Make sure to have node, npm, and request module installed.

npm install request --save

and you are good to go! Run this script right before your python calling script.

Upvotes: 1

Related Questions