Monthly Downloads: 6,272
Programming language: Elixir
License: MIT License
Tags: Third Party APIs    
Latest version: v2.1.3

ex_twiml alternatives and similar packages

Based on the "Third Party APIs" category.
Alternatively, view ex_twiml alternatives based on common mentions on social networks and blogs.

Do you think we are missing an alternative of ex_twiml or a related project?

Add another 'Third Party APIs' Package



Build Status Hex Version Inline docs Deps Status

Generate TwiML for your Twilio integration, right inside Elixir! Built to be used with Telephonist, but it can be used entirely on its own.


ExTwiml can be installed through mix as a hex package. First, update your dependencies in mix.exs.

defp deps
  [{:ex_twiml, "~> 2.1.3"}]

If you prefer, you can depend on the latest version from Github:

defp deps
  [{:ex_twiml, github: "danielberkompas/ex_twiml"}]

Add it to your application list in mix.exs:

def application do
  [mod: {YourApp, []},
+   applications: [:ex_twiml]]

Then run mix deps.get, and ExTwiml will be installed.


Import the ExTwiml module into your module, and then use the twiml macro to generate your TwiML, like so:

defmodule YourModule do
  import ExTwiml

  def render do
    twiml do
      play "/assets/welcome.mp3"
      gather digits: 4, finish_on_key: "#" do
        say """
        Please enter the last four digits of your credit card number, followed
        by the pound sign.
        """, voice: "woman"

You can then render the TwiML by calling YourModule.render/0. The output will be a binary in this format:

<?xml version="1.0" encoding="UTF-8"?>
  <Gather digits="4" finishOnKey="#">
    <Say voice="woman">
      Please enter the last four digits of your credit card number, followed by
      the pound sign.

The twiml macro simply returns a binary (or string), so you're not limited to the pattern above. Just use twiml wherever you need a TwiML string.


You can configure default options for verbs. For example, suppose you wanted all <Say> verbs to use the "Alice" voice, and all <Gather> verbs to have the method "GET".

Simply add this code to your config/config.exs:

config :ex_twiml, :defaults,
  say: [voice: "alice"],
  gather: [method: "GET"]

Then this code:

twiml do
  gather do
    say "Hello"

Will result in this TwiML:

<?xml version="1.0" encoding="UTF-8"?>
  <Gather method="GET">
    <Say voice="alice">Hello</Say>

Defaults can be overridden:

gather method: "POST"
say "Hello", voice: "woman"

Supported Verbs and Nouns

See the Twilio Documentation for a complete list of verbs supported by Twilio. ExTwiml has built in macros for the following verbs and nouns:

To maximize compatibility with future versions of the TwiML spec, ExTwiml does not validate the attributes passed to the various verbs to ensure that they are supported by Twilio. You'll need to do this yourself.

Unsupported Verbs?

If the Twilio API adds a verb and I haven't yet added support for it, you can do two things:

  1. Submit a PR to add it
  2. Use the tag macro in the meantime while the PR is reviewed

The tag macro can be used to create arbitrary XML tags in the output, like this:

tag :custom, option_1: "value" do
  tag :speak, do: "Whatever you say, boss!"
# => "<Custom option1="value"><Speak>Whatever you say, boss!</Speak></Custom>"


Contributions are welcome!

  1. Fork the repository
  2. Code up your changes
  3. Submit a PR back here with your fix.