Vonage @ RailsConf 2020.2 Couch Edition 🛋️

Hello, Rubyists! We love catching up with you at events, whether in person or remotely, and we've put together some resources that we hope you find useful.

Vonage ❤️ Rails

At Vonage, we love Rails - it's one of our most-loved frameworks by customers and Developer Advocates alike. Start your Vonage project by installing the Vonage nexmo-rails gem. This will install the nexmo Ruby client library gem and automatically configure it:

# Gemfile
gem 'nexmo-rails'
$ bundle install 
$ rails generate nexmo_initializer

You can read more about our Rails gem and what you can do with it on the Vonage blog.

Get started by making a call

Once you've added nexmo-rails to your project, making a call is as easy as adding four lines of code to your application! Just tell us who the call is to, who it's from and how you'd like us to handle it and we'll take care of the rest.

response = Nexmo.voice.create({
  to: [{type: 'phone', number: '14155550100'}],
  from: {type: 'phone', number: '14155550102'},
  ncco: [{"action": "talk", "text": "Hello world!"}]

Start Building For Free

Redeem Vonage Credit

Want to explore building apps with SMS, Voice or Chatbot integrations? Get started today with €10 complimentary credit!

Coupon code RAILS2C86 is valid to redeeem until June 7th, 2020.


Use the Voice API to make and receive phone calls programmatically. You can broadcast messages by phone, respond to incoming calls and route callers according to their input.


With our Messages API (and its accompanying Dispatch API) your applications can reach users by the messaging platform they prefer. Message not received? No problem, automatically detect that and try another platform.


Ensure that users provide the correct contact details with Verify API. The two-factor authentication (2FA) API reduces fraud and improves contactability for your application's users.

Pro-tip: Download the OpenAPI spec from our API reference pages and import directly into Postman as a collection to quickly explore the APIs.

Can't find what you're looking for?

Please let us know! You can reach out to Ben, our Ruby Developer Advocate. We'd love to hear what you're having issues with to help you out (and improve the docs at the same time!)

Looking for more talks to watch?

Vonage Video Resources

Geppetto’s Guide to Living Puppets

Join us as we learn from Geppetto's Guide to Living Puppets and build an animatronic puppet that mimics our movements using the Vonage Video API, Azure Functions, Particle IoT devices and yes, an animatronic puppet.

The Art of Writing Technical Content

In this talk, we will discuss the art of technical writing and how to turn an application into a tutorial for others to create as well. We’ll cover how to artfully explain the reasoning behind your technical choices so that the reader can clearly understand the development process while considering factors such as audience, tone, scale, and best practices to reach potential readers.

Dead Simple APIs with Open API

We live in a world that is powered by APIs. OpenAPI is a specification and set of related tooling that can make it easy to design, describe, and help build an API in many different languages. See how easy it is to hit the ground running using OpenAPI, Spotlight, and OpenAPI Generator to drop in an API into any project.

Communications of Fire: Using Vonage API on Firebase

In this talk, we’ll learn how to use the Firebase toolset with Vonage API to build communication solutions. Topics will include SMS and Messaging, Voice, and Verify along with practical tips on setting yourself up for success. We will walk away with the information needed to get started in about thirty minutes!

Building a SMS spam classifier using machine learning

In this talk, we’ll go over how to build a machine learning model in order to detect spam SMS messages. We’ll go over how to train a model and build an SMS application using the Vonage SMS API that allows you to send a message, and respond with the prediction of that text (spam or not spam) using an Amazon Lambda function.

Flask: How "Mirco" of a Microframework?

In this session, we will talk about flask. How much of a "microframework" it really is, and how extensible it can be. It is as simple (or complex) as you decide! Let's see where all the superpowers of this awesome "microframework" come from and how "micro" it really is.

Introduction to Computer Vision in .NET

Computer Vision is revolutionizing the world around us. It's ubiquitous, yet the entry points are opaque and can be daunting to understand. In this talk we'll break down these barriers as we cover some of the basics of Computer Vision using .NET. We'll look at edge detection, facial detection, feature tracking, and some basic augmented reality using OpenCV.

Introduction to Web Components

In this session, we will do a general overview of Web Components. We will go over what they are and who uses them. There will be an example of how a Web Component can be included in different JavaScript frameworks. Lastly, we will show what it takes to make a simple one.

Low-Code for Developers

Low-code solutions are on the rise and visual builder tools are opening up creation to a wide range of users. In this session, we’re going to look at low-code tools like Node-RED and Zapier, what they have to offer, and whether they have a place in a developer’s toolkit.

Think inside the box. Developing inside a container to avoid conflicts, improve security and speed up on-boarding.

Michael Jolley discusses how every project a developer works on is unique, using various frameworks and tooling and how requiring developers to identify & install these dependencies clutters their machine, increases on-boarding time for new team members, and increases potential security threats. Learn how using Visual Studio Code Remote Development to perform all development work inside “throw-away” Docker containers prevents the need to install third-party frameworks & tooling; use standardised development Docker images to ensure a consistent development experience and speed up on-boarding; and attach to and debug code running in existing containers.

What's Love Got To Do With It? Ruby and Sentiment Analysis

How does Natural Language Understanding work? What insights can we glean from the data it provides? Join Ben Greenberg to take a dive into understanding how this technology works, and apply it in a Ruby app that connects Natural Language Understanding analysis, the daily headlines and social media all in one. Get ready to learn some Ruby, some human language insights and how they all intertwine!

Building your first Facebook Bot

In this beginner-level workshop Kevin Lewis uses JavaScript and the Vonage Messages API to build a simple call-and-response Facebook bot which stores messages in a database and recalls them.

Hands on performance debugging with the browser DevTools

A no-slides, hands-on, live debugging session using only the browser Developer Tools on the website Alex picked from the JSUnconf audience. A deep dive into spotting performance bottlenecks into any website and how to fix them.

Using DevTools To Understand Modern CSS Layouts

Flexbox, Grid and Box Alignment are the cornerstones of modern CSS layouts. They introduce behaviours that might seem confusing if you don’t completely understand how the browser inteprets the CSS values you assign, e.g. sizing with Flexbox, or the various options for sizing tracks in Grid. This talk will explain a variety of modern CSS layout techniques through live demonstrations via DevTools, and provide real-world use cases of how such techniques allow designs to better adapt across a broad range of viewports.

Reduce, Reuse, Recycle - Persisting WebSocket connections with SharedWorkers

When using WebSockets to communicate between your server and the client every new browser context–tab, window, iframe, and so on–is likely to create another WebSocket connection. All these open connections can quickly take a toll on your server resources, or if you’re using a PaaS which charges for each connection, it could quickly add up to a big bill. In this talk, we’ll look at how you can use SharedWorkers to create a single persistent WebSocket which can be used by every browser context to communicate with your Django Channels WebSocket server

OpenTok Insights API

In this webinar recording, we cover the new Insights API that provides programmatic access to all the live video session data visible through the Insights Dashboard. This API uses the latest GraphQL technology to make queries easier and more efficient. We cover the following: Overview of OpenTok Insights What is GraphQL? How to use GraphQL to access Insights Live Coding What’s next with OpenTok Insights?

OpenTok Broadcasting

This webinar looks at how to use the OpenTok Broadcast API to broadcast live low-latency WebRTC video to thousands of participants while simultaneously streaming with HLS and via RTMP to FaceBook Live, YouTube, Twitch and more. We will cover: What is Interactive Broadcasting? How Broadcast APIs are an easy extension to your current use of OpenTok HLS, RTMP - what is all this? And our usual live coding showing how to use the APIs

OpenTok + Nexmo In-App Messaging

This webinar looks at using Nexmo In-App Messaging for enhanced chat experiences within OpenTok Live Video applications. Nexmo provides a global Communications Platform as a Service (CPaaS) providing a full range of communications capabilities, including the advanced messaging capabilities we will look at in this webinar. We will cover: In-App Messaging use-cases and approaches Using NEXMO InApp Messaging API The role of OpenTok Signaling

OpenTok Network Performance & Testing

This webinar looks at network challenges and opportunities for live video applications, and tools for pre-testing performance within your apps before starting a video session: Live Video and Network Performance overview Different types of networks and their behavior Using OpenTok Network Test sample code in your app What happens when network performance changes?

OpenTok SIP Interconnect with Nexmo

This webinar looks at the OpenTok SIP Interconnect capability, which can be connected to any SIP system or gateway. We will look at this generally, and then in addition we will showing the coding to connect this to the Nexmo SIP APIs in order to get PSTN connectivity. Nexmo provides a global Communications Platform as a Service (CPaaS) providing a full range of communications capabilities. The webinar will cover: What is SIP (high level)? OpenTok SIP Interconnect Using NEXMO SIP APIs for PSTN connectivity

OpenTok Archiving

Episode 5 in this webinar series looks at how to Manage Live Video recordings through the OpenTok APIs and platform. This episode covers: Recording/archive API Composed stream vs Individual streams recording Use of Amazon S3 and Microsoft Azure storage Security, privacy and compliance

OpenTok iOS + ARKit

This webinar recording covers: Pros and cons of native iOS apps vs framework or mobile-Web apps How to incorporate the OpenTok iOS SDK into your Xcode Swift projects A look at some sample Swift code (available on our GitHub repos) An example Augmented Reality app using Swift and Apple ARKit

OpenTok + Electron

This webinar recording covers: What is Electron and why are GitHub, Slack, Discord and many other companies using it to build their apps? How OpenTok APIs are used within Electron’s JavaScript, HTML and CSS framework Top tips and tricks for sharing JavaScript across both web and Electron Sample Electron code on our GitHub repos Webinar link: https://www.crowdcast.io/e/building-with-opentok-3/

OpenTok Video Chat Embeds

This is a recording of our first webinar in this series on Video Chat Embeds, which are the easiest way to quickly add basic OpenTok functionality to a website by cutting and pasting an embeddable HTML snippet. Manik’s agenda includes: - Setting up Video Chat Embeds through the Dashboard - Adding Embeds to a website, including with WIX and other website builders - Functionality of Embeds - Suggested use-cases for Embeds - Comparison with using the full OpenTok API (which will be covered in later episodes).

Introduction to OpenAPI Specification

Open API Specification is a machine and human readable way to describe APIs. From these specs we can generate documentation, create libraries, and ensure that our users know exactly what to expect from our APIs. This talk shows you around OAS from the beginning, showing how to create the specs and recommending some tools to help the process. Once you have the spec, things get interesting and this talk will showcase some of the things that you can offer once your API is described in this way. This session is recommended for writers looking to become more API-savvy and API engineers wanting to make their APIs more useful to their users.

Publishing (Perfect) Python Packages on PyPI

Starting with nothing, we'll build a package and publish it on PyPI using current best practices! Learn how to structure, document and test your project on different platforms. Discover the difference between `setup.py` and `Pipfile`. Finally, use CookieCutter to avoid doing it twice (or even once)!

Hello to the World in 8 Web Frameworks (Micro, Batteries Included & Async)

A Phileas Fogg inspired tour of 8 frameworks "Had he programmed? It was likely, for no one seemed to know web frameworks more familiarly; there was no framework so obscure that he did not appear to have an intimate acquaintance with it. He must have developed in everything, at least in the spirit."

How to Proxy Voice Calls on Phones and In-app with the Nexmo Voice API, Kotlin, and WebRTC

In this coding session, Aaron Bassett creates a traditional PSTN proxy in Kotlin, which he uses to connect two telephone endpoints while keeping both sides of the call anonymous.

Build an Inbound Call Tracking App with the Nexmo Virtual Numbers and Mixpanel

In this coding session, Nexmo Developer Advocate Aaron Bassett shows how you can handle webhooks from the Nexmo Voice API, where each webhook represents an inbound call to enable the integration with a CRM, database or analytics platform like MixPanel.

How to Build Super Fast Voice Broadcast with Asynchronous Python, Sanic, and Nexmo

In this coding session, Nexmo Developer Advocate Aaron Bassett shows how to make a fast and scalable voice broadcast system for sending critical alerts or notifications using asynchronous Python and the Nexmo Voice API.

How to Add Sentiment Analysis to Your Inbound Call Flow with IBM Watson and Nexmo

In this coding session, Nexmo Developer Advocate Aaron Bassett demonstrates how to connect an inbound call to an agent as well as to IBM Watson Tone Analyzer via the WebSockets feature of the Nexmo Voice API. He also shows how you can take the analysis from Watson and display it to the agent.

Pythonic Refactoring: Protecting Your Users From Change

So you've released a library! Now you need to maintain it. You want to add features, restructure the code, fix bugs, and maybe improve the library's usability. Your users just want their code to carry on working. That's okay! This talk covers techniques in both code and project management to allow you to keep your code moving forwards without breaking your users' code.

Django and the testing pyramid

Model mommy lettuce factory boy expects gherkin behave. Travis mock splinter nose phantom hypothesis! Most developers recognise the importance of testing in building maintainable software, but the sheer volume of tools and approaches can be bewildering and sometimes make it sound like you’re talking a different language.

Real-time transcription and sentiment analysis of audio streams; on the phone and in the browser

Discover how you can use Artifical Intelligence to perform sentiment analysis of an audio stream, in real-time!,In this workshop, we’re going to learn how to create a virtual rapporteur. A digital assistant who can join any conference call; record it, and then by using IBM Watson provide participants with a real-time transcript and insights into the overall tone of the call. All pushed to their browser via WebSockets.

Introduction to the AAARRRP DevRel Strategy Framework

Building a DevRel programme is hard. What are the goals of the programme, how do they align with the company goals, what activities should the new Developer Relations team undertake, how do those activities help other departments within the company and how should the success of the team be measured?

DocOps - Engineering Great Docs

Adam, part of the Nexmo DevRel team and Nexmo Developer Technical Lead, talks about DocOps, and how Nexmo Developer has been built. The talk covers taking engineering practices and how they can be applied to documentation platforms.