Twilio: Difference between revisions

From Wildsong
Jump to navigationJump to search
Brian Wilson (talk | contribs)
Brian Wilson (talk | contribs)
mNo edit summary
Line 7: Line 7:
[[Caller ID processing]]
[[Caller ID processing]]


== Programmable Voice ==
== Using Twilio services ==
 
=== Programmable Voice ===


Geo-CEG - TwimlBin directs Geo-CEG calls to a SIP URI that goes into my Asterisk PBX via Elastic Trunk.
Geo-CEG - TwimlBin directs Geo-CEG calls to a SIP URI that goes into my Asterisk PBX via Elastic Trunk.
Line 15: Line 17:
session between the phone and Twilio through a Mikrotik firewall/router to be worth the work.
session between the phone and Twilio through a Mikrotik firewall/router to be worth the work.


== Programmable SMS ==
=== Programmable SMS ===
 
This is a very simple way to allow you to receive SMS messages on any Twilio number.
You just set it up to forward them to a mobile phone.


Put this in a TwiML bin and connect messaging to it to forward SMS.
Put this in a TwiML bin and connect messaging to it to forward SMS.
Line 24: Line 29:
  </Response>
  </Response>


== Elastic Trunk + Asterisk ==
=== Elastic Trunk + Asterisk ===


This is nothing to do with elephants or the back part of a sedan or rubber bands. It has nothing to do with the symbol above the "8" on your keyboard.
Twilio Elastic Trunk supports a number by directing calls between PSTN (conventional phones) and your own SIP phone system.
It's "elastic" because it means there are no limits on the number of simultaneous calls you can send or receive. Normally you
buy "channels" akin to traditional phone lines and can only make as many connections as you have channels.
With Elastic you just pay a per minute charge for all combined usage.
 
Asterisk is VOIP PBX software that supports SIP connections (as well as everything else you can think of.)
The learning curve on Asterisk can be tough but it's also something you can set up quickly if your demands are simple.
In my case I have it ring some phones, and then after a time delay it picks up and sends the call to the builtin
Asterisk voicemail app. Then when it has a completed recording, it emails the recording to me so that I can listen
to the voicemail from anywhere.


Refer to https://www.twilio.com/docs/api/sip-trunking/sample-configuration
Refer to https://www.twilio.com/docs/api/sip-trunking/sample-configuration
and https://www.twilio.com/resources/images/docs/Asterisk-Twilio.pdf
and https://www.twilio.com/resources/images/docs/Asterisk-Twilio.pdf


"Elastic" means you are not limited to a preset number of calls with one SIP account.
The price for a single Twilio phone number is $1/month and another $1/month if you want 911 support.
You can make any number of outbound and accept any number of inbound calls over the one account;
The rate for calls (inbound or outbound) is less than a penny a minute.
you just have to pay for the calls.


The price for a single phone number is $1 per month.
=== Call forwarding with Asterisk ===
The rate for calls is about a penny a minute.
 
Objective: Make a call go to Asterisk and to my cellphone at the same time.
 
The Asterisk way: Put a rule into the dialplan for outside calls that rings both inside (SIP) phones and also
sends the call to my cellphone by calling out via Twilio. This works surprisingly well because Twilio bridges the two lines internally. The media stream does not have to go from Twilio to my PBX and back to Twilio.
 
The problem is that if my cellphone is working and my PBX is down then I will miss calls.
 
The Twilio way: Send the call to both places (PBX and phone) from the Twilio side. I think I can do this with '''Programmable Voice'''.
 
=== Set up notes ===


  Products -> Phone numbers
  Products -> Phone numbers
Line 73: Line 96:
extensions.conf
extensions.conf


sip.conf
pjsip.conf


== Twilio Client ==
== Twilio Client ==


You insert some Javascript into a web page, and then you can use that page to establish calls.
You insert some Javascript into a web page, and then you can use that page to establish calls.
I need to look at this, it looks interesting.


== Twilio for Geo-CEG ==
== Twilio for Geo-CEG ==
Line 84: Line 108:


I got a Twilio account through their program to support non-profits.  
I got a Twilio account through their program to support non-profits.  
Currently I have a little IVR that just offers to send your call to either me or Christian (press '1' or '2')


I want the number to be able to forward calls to whoever is "on call", and to store voice mails when no one is available.
I want the number to be able to forward calls to whoever is "on call", and to store voice mails when no one is available.


Currently I have a little IVR that just offers to send your call to either me or Christian (press '1' or '2')
== Programmable SMS ==
 
== SMS messages ==


You can use the same number to send and receive SMS calls.
You can use the same number to send and receive SMS calls.
Line 97: Line 121:
I set up a script in my dev SSL server, sms.php.
I set up a script in my dev SSL server, sms.php.


==== HTTPS server set up ====
I have written a Python Flask app to play with SMS more, see http://github.com/brian32768/twilio-weatherman
It uses both Programmable SMS and Programmable Voice.


To set up HTTPS,  I had to tighten up security on my Apache, test it here: https://ssllabs.com/ssltest I started with a "C" rating and moved up to "A"!
== Programmable Voice ==
How to: see https://hynek.me/articles/hardening-your-web-servers-ssl-ciphers/


See also https://wiki.mozilla.org/Security/Server_Side_TLS
See the same app mentioned above, http://github.com/brian32768/twilio-weatherman
 
Complete your certificate chain: https://certificatechain.io/ and http://superuser.com/questions/644343/how-do-you-fix-an-incomplete-ssl-chain
 
Goal - send text to server. Have the server phone back and read a message.
 
# Receive SMS - done
# Log information about SMS
# Initiate a call
 
Goal - build a system that will receive an SMS, perform an action, and send a confirmation.
 
This can be (and he stopped typing there)


== Take aways from Signal Conference 2015 ==
== Take aways from Signal Conference 2015 ==
Line 134: Line 146:
They have that big giant corporation mentality. But they do make their services available to little fleas like us.
They have that big giant corporation mentality. But they do make their services available to little fleas like us.
I can buy one phone line for $1 a month.
I can buy one phone line for $1 a month.
== Call forwarding ==
Make a call go to Asterisk and to my cellphone at the same time.
The Asterisk way: Put a rule into the dialplan for outside calls that rings both inside (SIP) phones and also
sends the call to my cellphone by calling out via Twilio. This works surprisingly well because Twilio bridges the two lines internally. The media stream does not have to go from Twilio to my PBX and back to Twilio.
The problem is that if my cellphone is working and my PBX is down then I will miss calls.
The Twilio way: Send the call to both places (PBX and phone) from the Twilio side. I think I can do this with '''Programmable Voice'''.


== Resources ==
== Resources ==

Revision as of 17:05, 25 June 2017

Fun with Twilio

Post Signal 2017

Implementing a Dispatch system for first responders using Twilio. Start of an idea.

Caller ID processing

Using Twilio services

Programmable Voice

Geo-CEG - TwimlBin directs Geo-CEG calls to a SIP URI that goes into my Asterisk PBX via Elastic Trunk. Asterisk rings the phones.

I tried to get my Grandstream GXV3240 to register directly to Twilio and failed. It's too much of a pain to debug the SIP session between the phone and Twilio through a Mikrotik firewall/router to be worth the work.

Programmable SMS

This is a very simple way to allow you to receive SMS messages on any Twilio number. You just set it up to forward them to a mobile phone.

Put this in a TwiML bin and connect messaging to it to forward SMS.

<?xml version="1.0" encoding="UTF-8"?>
<Response>
 <Message to="+1707yournumberhere">Template:From: Template:Body</Message>
</Response>

Elastic Trunk + Asterisk

Twilio Elastic Trunk supports a number by directing calls between PSTN (conventional phones) and your own SIP phone system. It's "elastic" because it means there are no limits on the number of simultaneous calls you can send or receive. Normally you buy "channels" akin to traditional phone lines and can only make as many connections as you have channels. With Elastic you just pay a per minute charge for all combined usage.

Asterisk is VOIP PBX software that supports SIP connections (as well as everything else you can think of.) The learning curve on Asterisk can be tough but it's also something you can set up quickly if your demands are simple. In my case I have it ring some phones, and then after a time delay it picks up and sends the call to the builtin Asterisk voicemail app. Then when it has a completed recording, it emails the recording to me so that I can listen to the voicemail from anywhere.

Refer to https://www.twilio.com/docs/api/sip-trunking/sample-configuration and https://www.twilio.com/resources/images/docs/Asterisk-Twilio.pdf

The price for a single Twilio phone number is $1/month and another $1/month if you want 911 support. The rate for calls (inbound or outbound) is less than a penny a minute.

Call forwarding with Asterisk

Objective: Make a call go to Asterisk and to my cellphone at the same time.

The Asterisk way: Put a rule into the dialplan for outside calls that rings both inside (SIP) phones and also sends the call to my cellphone by calling out via Twilio. This works surprisingly well because Twilio bridges the two lines internally. The media stream does not have to go from Twilio to my PBX and back to Twilio.

The problem is that if my cellphone is working and my PBX is down then I will miss calls.

The Twilio way: Send the call to both places (PBX and phone) from the Twilio side. I think I can do this with Programmable Voice.

Set up notes

Products -> Phone numbers
You need one. Set it up.

Products -> Elastic SIP Trunking -> Trunks
First time through, "Create Sip Trunk"
Termination - set it up so you can make calls. You need something like "bellman.pstn.twilio.com" where you choose "bellman".
Origination - set it up so you can receive calls and attach a phone number to it. Try using your server like sip:bellman.wildsong.biz

You need to set up authentication on the termination settings for the trunk. The first time through you get prompted but you can edit it later

Products -> Elastic SIP Trunking -> Authentication
IP Access Control Lists - Should have the IP addresses that your server uses for outbound traffic. 67.180.204.170
Credential lists - should have a username and password that you will put into your Asterisk set up.

You can have multiple IP addresses in one ACL, more than one ACL, and more than one credential set. That way you can use one Twilio account from more than one site if you want to.

Set up on Twilio account

  1. Go to http://twilio.com/
  2. Create an account if you don't have one
  3. Buy a phone number
  4. Attach the number to a trunk, the account comes with one trunk.

Access is controlled via IP address. You have to create an access control list for your Asterisk server and put its IP address into it.

You have to set up URLs for both termination and origination.

You have to set up a credential with a username and password.

Modifications to Asterisk

extensions.conf

pjsip.conf

Twilio Client

You insert some Javascript into a web page, and then you can use that page to establish calls. I need to look at this, it looks interesting.

Twilio for Geo-CEG

Geo-CEG is a small non-profit. The board members live all over the place.

I got a Twilio account through their program to support non-profits.

Currently I have a little IVR that just offers to send your call to either me or Christian (press '1' or '2')

I want the number to be able to forward calls to whoever is "on call", and to store voice mails when no one is available.

Programmable SMS

You can use the same number to send and receive SMS calls. I tested it using the sample code by putting the PHP on my own server and then pointing the SMS URL at my server. It works. That's how I can receive SMS messages. I have not tried sending an SMS yet, except that the PHP code sends a reply back.

I set up a script in my dev SSL server, sms.php.

I have written a Python Flask app to play with SMS more, see http://github.com/brian32768/twilio-weatherman It uses both Programmable SMS and Programmable Voice.

Programmable Voice

See the same app mentioned above, http://github.com/brian32768/twilio-weatherman

Take aways from Signal Conference 2015

Move stuff into Asterisk

Lots of stuff in Twilio space could be implemented in Asterisk space. But here at the end of 2016 I am now working on going the other direction. I have Asterisk working just fine but am thinking of dumping it in favor of OpenVBX.

My thought back then was that TWIML could be used to design IVR / autoattendant systems in Asterisk. Doing this could make it easy to implement a failover, primary would be Asterisk but if * is down then the same code would fire up and run in Twilio.

What Twilio is doing

What Twilio is doing is building a big company by (1) doing only the back end, no applications. They provide only APIs and you write your own applications. (2) Using cloud. Everything they do lives in Amazon. Based on that there must be some backend to connect to carriers that does not require anything but IP. :-) That is, they don't have big server rooms full of HT503's

They have that big giant corporation mentality. But they do make their services available to little fleas like us. I can buy one phone line for $1 a month.

Resources

Online resources

Twilio docs is of course the ultimate resource.

Twilio on Github

Books

Twilio Best Practices, Tim Rogers, Packt Pubs 2014 Good book, but it's more than 10 minutes old. ;-) Twilio is changing fast. Everything I looked at still applies, but Twilio adds new features all the time.