Рубрики
Без рубрики

Набор исходящих телефонных вызовов с помощью веб-приложения Bottle

Учебное пособие, в котором показано, как совершать исходящие телефонные звонки с помощью веб-приложения Bottle, созданного на Python 3.

Автор оригинала: Matt Makai.

Веб-приложения Python, созданные с помощью веб-фреймворка Bottle, могут отправить и получать текстовые SMS-сообщения. В этом уроке мы выйдем за рамки текстовых сообщений и научимся набирать исходящие номера. телефонные звонки. Звонки будут читать фрагмент текста, а затем воспроизводить файл MP3, но затем их можно легко изменить для создания линий конференции и многих другие голосовые функции в ваших веб-приложениях Python.

Инструменты, которые нам нужны

У вас должен быть установлен Python 2 или 3 для создайте приложение Bottle, хотя Python 3 рекомендуется для новых Приложения. Также нам понадобятся:

Взгляни на это руководство по настройке Python 3, Bottle и Gunicorn на Ubuntu 16.04 LTS если вам нужна помощь в получении среда разработки настроен, прежде чем продолжить изучение оставшейся части этого руководства.

Вы можете найти весь открытый исходный код для этого руководства в python-bottle-phone Репозиторий GitHub под исходящий каталог . Используйте и копируйте код, как хотите – все с открытым исходным кодом под Лицензия MIT.

Установка зависимостей нашего приложения

Нашему приложению Bottle нужна вспомогательная библиотека кода, чтобы упростить исходящий вызов. телефонные звонки. Bottle и вспомогательную библиотеку Twilio можно установить из PyPI в файл virtualenv. Откройте свой терминал и используйте команду virtualenv для создания нового virtualenv:

virtualenv bottlephone

Используйте сценарий activate в virtualenv, который делает этот virtualenv активная установка Python. Учтите, что вам нужно делать это каждый раз окно терминала, в котором вы хотите использовать этот virtualenv.

source bottlephone/bin/activate

Командная строка изменится после активации virtualenv на что-то вроде (bottlephone) $ . Вот скриншот того, что у меня среда выглядела так, когда я использовал скрипт activate .

Затем используйте команду pip , чтобы установить Bottle и Пакеты Twilio Python в ваш virtualenv.

pip install bottle twilio==5.7.0

После завершения сценария установки у нас будет необходимый зависимости для создания нашего приложения. Пора написать код Python для набора номера исходящие телефонные звонки.

Бутылка и Twilio

У нашего простого веб-приложения Bottle будет три маршрута:

  • / – возвращает текстовую строку, чтобы сообщить нам, что наше приложение Bottle запущено.
  • / twiml – отвечает TwiML
  • (простое подмножество XML), которое указывает Twilio, что делать, когда кто-то
  • принимает вызов из нашего веб-приложения Bottle
  • /dial-phone/ , где outbound_phone_number –
  • номер телефона в формате «+12025551234» – этот маршрут использует Twilio
  • вспомогательная библиотека для отправки запроса POST в Twilio Voice API для набора
  • телефонный звонок

Мы можем построить структуру нашего приложения Bottle и первый маршрут прямо сейчас. Создайте новый файл с именем app.py со следующим содержимым, чтобы запустить наш приложение.

import os
import bottle
from bottle import route, run, post, Response
from twilio import twiml
from twilio.rest import TwilioRestClient


app = bottle.default_app()
# plug in account SID and auth token here if they are not already exposed as
# environment variables
twilio_client = TwilioRestClient()

TWILIO_NUMBER = os.environ.get('TWILIO_NUMBER', '+12025551234')
NGROK_BASE_URL = os.environ.get('NGROK_BASE_URL', 'https://c6c6d4e8.ngrok.io')


@route('/')
def index():
    """
    Returns a standard text response to show the app is up and running.
    """
    return Response("Bottle app running!")


if __name__ == '__main__':
    run(host='127.0.0.1', port=8000, debug=False, reloader=True)

Убедитесь, что вы находитесь в каталоге, в котором вы создали указанный выше app.py файл. Запустите приложение через сервер разработки Bottle со следующими команда. Убедитесь, что ваш виртуальный сервер все еще активирован, чтобы наш код мог полагаться в библиотеке кода бутылки.

python app.py

Мы должны увидеть успешный запуск сервера разработки следующим образом:

(bottlephone) [email protected]:~/bottlephone$ python app.py 
Bottle v0.12.9 server starting up (using WSGIRefServer())...
Listening on http://127.0.0.1:8000/
Hit Ctrl-C to quit.

Вот как выглядит сообщение сервера разработки в моей среде в Ubuntu:

Успешный запуск сервера разработки Bottle из командной строки.

Давайте протестируем приложение, перейдя на «localhost: 8000». в веб-браузере. Мы должны получить простое сообщение об успешном выполнении, что приложение работает и отвечает на запросы.

Простое сообщение об успешном выполнении в веб-браузере при запуске приложения Bottle.

Затем нам нужно получить номер телефона, который наше приложение Bottle может использовать для звонить по другим телефонным номерам.

Получите номер телефона

Наше базовое веб-приложение Bottle работает, но мы действительно хотим набрать номер исходящие вызовы, которые будут обрабатываться Twilio .

В вашем веб-браузере перейдите на на веб-сайте Twilio и зарегистрируйтесь для получения бесплатной учетной записи . Вы также можете войти в свою существующую учетную запись Twilio, если она у вас уже есть.

Экран регистрации Twilio.

Пробная учетная запись Twilio позволяет набирать и принимать телефонные звонки на ваш собственный подтвержденный номер телефона. Набирать и принимать звонки с любого телефона номер, то вам нужно обновить свою учетную запись (нажмите кнопку обновления на верхняя панель навигации для этого). Пробные аккаунты отлично подходят для начального до запуска вашего приложения, но обновленные учетные записи приходит реальная сила.

После того, как вы войдете в свою учетную запись Twilio, перейдите в экран управления телефонными номерами . На этом экране вы можете купите один или несколько телефонных номеров или щелкните существующий номер телефона в своей учетной записи, чтобы настроить его.

Экран управления телефонными номерами.

Нам нечего сейчас настраивать по номеру телефона страницу конфигурации, потому что мы делаем исходящие телефонные звонки для этого руководство. Теперь, когда у нас есть номер телефона, давайте добавим последний бит кода в наше приложение Bottle, чтобы оно работало.

Телефонные звонки

Нам нужно добавить два новых маршрута в наше приложение Bottle, чтобы оно могло исходить телефонные звонки. Измените существующий файл app.py двумя новыми функциями. ниже twiml_response и outbound_call . Ни один другой код в этот файл необходимо изменить, кроме добавления этих двух новых функций в то, что мы писали в предыдущем разделе.

import os
import bottle
from bottle import route, run, post, Response
from twilio import twiml
from twilio.rest import TwilioRestClient


app = bottle.default_app()
# plug in account SID and auth token here if they are not already exposed as
# environment variables
twilio_client = TwilioRestClient()

# add your Twilio phone number here
TWILIO_NUMBER = os.environ.get('TWILIO_NUMBER', '+16093002984')
# plug in your Ngrok Forwarding URL - we'll set it up in a minute
NGROK_BASE_URL = os.environ.get('NGROK_BASE_URL', 'https://c6c6d4e8.ngrok.io')


@route('/')
def index():
    """
    Returns a standard text response to show the app is up and running.
    """
    return Response("Bottle app running!")


@post('/twiml')
def twiml_response():
    """
    Provides TwiML instructions in response to a Twilio POST webhook
    event so that Twilio knows how to handle the outbound phone call
    when someone picks up the phone.
    """
    response = twiml.Response()
    response.say("Sweet, this phone call is answered by your Bottle app!")
    response.play("https://api.twilio.com/cowbell.mp3", loop=10)
    return Response(str(response))


@route('/dial-phone/')
def outbound_call(outbound_phone_number):
    """
    Uses the Twilio Python helper library to send a POST request to
    Twilio telling it to dial an outbound phone call from our specific
    Twilio phone number (that phone number must be owned by our Twilio 
    account).
    """
    # the url must match the Ngrok Forwarding URL plus the route defined in
    # the previous function that responds with TwiML instructions
    twilio_client.calls.create(to=outbound_phone_number, 
                               from_=BLOG_POST_NUMBER,
                               url=NGROK_BASE_URL + '/twiml')
    return Response('phone call placed to ' + outbound_phone_number + '!')


if __name__ == '__main__':
    run(host='127.0.0.1', port=8000, debug=False, reloader=True)

Есть только одна проблема с нашей текущей настройкой, если вы разрабатываете в локальной среде: Twilio не сможет достичь этого маршрута /twiml . Нам нужно развернуть наше приложение на доступном сервере или просто использовать локальный хост инструмент туннелирования, например Ngrok . Ngrok предоставляет внешний URL-адрес, который подключается к порту, запущенному на вашем компьютере. Загрузите и установите приложение Ngrok это подходит для вашей операционной системы.

Мы запускаем Ngrok локально и открываем наше приложение Bottle, работающее на порт 8000. Запустите эту команду в каталоге, где находится исполняемый файл Ngrok. располагается.

./ngrok http 8000

Ngrok запустится и предоставит нам URL-адрес пересылки с HTTP и HTTPS версии.

Ngrok запущен и работает в качестве туннеля localhost.

Мы можем использовать URL-адрес пересылки, чтобы указать Twilio, как обрабатывать исходящие телефонный звонок, когда кто-то поднимает трубку. Вставьте URL-адрес пересылки Ngrok в app.py файл, в котором указан NGROK_BASE_URL .

Вставьте URL-адрес пересылки ngrok в текстовое поле конфигурации веб-перехватчика Twilio.

Если Нгрок вам полезен, обязательно прочтите это 6 замечательных причин использовать Ngrok при тестировании сообщение webhooks чтобы узнать еще больше об инструменте.

Пора протестировать наше приложение, давайте быстро его рассмотрим.

Телефонные звонки

Убедитесь, что ваш сервер разработки Bottle все еще работает, или перезапустите его с помощью команда python app.py в оболочке, в которой все еще находится виртуальная среда активирован.

Запустите приложение в браузере, на этот раз проверьте телефонный звонок. возможности. Перейдите в “localhost: 8000/dial-phone/my-phone-number”, где «мой-номер-телефона» – это номер в формате «+12025551234». Например, вот что происходит, когда я набираю +12023351278:

Набор исходящего телефонного звонка с помощью Bottle.

А вот и входящий звонок!

Получение входящего телефонного звонка на iPhone.

Когда мы отвечаем на телефонный звонок, мы также видим, что маршрут /twiml вызывается через Нгрок.

/ twiml маршрут вызывается через Ngrok.

С помощью всего двух маршрутов в нашем приложении Bottle и Twilio мы смогли исходящие телефонные звонки. Неплохо!

Что дальше?

Отлично, теперь мы можем набирать исходящие телефонные звонки на любой номер телефона с наше веб-приложение Bottle. Затем вы можете попробовать одно из этих руководств. чтобы добавить в приложение еще больше функций:

Вопросов? Свяжитесь со мной через Twitter @fullstackpython или @mattmakai . Я также на GitHub как mattmakai .

Что-то не так в этом посте? Вилка источник этой страницы на GitHub и отправьте запрос на перенос.