- Tutorial 1: Making a Call¶
- Step 1: Initialize the Library¶
- Step 2: Registering the account on the Sip Server¶
- Step 3: Making a call to an arbitrary extension¶
- Step 4: Hangup the active call¶
- Как совершать телефонные звонки на Python
- Наши инструменты
- Установить зависимости приложений
- Наш скрипт Python
- Телефонные звонки
- Следующие шаги
- Читайте ещё по теме:
Tutorial 1: Making a Call¶
This first tutorial shows how to make a call to an arbitrary destination using the Voip Library. To make a call, you have to perform the following steps, each of them explained in the next sections.
Note that this example, to work, requires a Sip Server (e.g Asterisk) installed and running on a reachable PC. For getting instructions about the Asterisk configuration, click here
Step 1: Initialize the Library¶
First of all, you have to import and instance the class VoipLib
# add the most.voip library root dir to the current python path. import sys sys.path.append("../src/") # import the Voip Library from most.voip.api import VoipLib # instanziate the lib my_voip = VoipLib()
Now, you have to build a dictionary containing all parameters needed for the Lib initialization
# build a dictionary containing all parameters needed for the Lib initialization voip_params = u'username': u'ste', # a name describing the user u'sip_server_address': u'192.168.1.100', # the ip of the remote sip server (default port: 5060) u'sip_server_user': u'ste', # the username of the sip account u'sip_server_pwd': u'ste', # the password of the sip account u'sip_server_transport' :u'udp', # the transport type (default: tcp) u'log_level' : 1, # the log level (greater values provide more informations) u'debug' : False # enable/disable debugging messages >
called by the voip library to notify any relevant voip event. You can choose an arbitrary name for this method, but it must contain the following 3 arguments: 1. voip_event_type argument indicating the type of the triggered event (VoipEventType.LIB_EVENT, VoipEventType.ACCOUNT_EVENT, VoipEventType.BUDDY_EVENT or VoipEventType.CALL_EVENT) | 2. voip_event reporting the specific event (e.g VoipEvent.ACCOUNT_REGISTERED to notify an account registration) 3. params a dictionary containing additional informations, depending on the specific triggered event call the initialize method passing the 2 parameters defined above
# define a method used for receive event notifications from the lib: def notify_events(voip_event_type, voip_event, params): print "Received Event Type:%s -> Event: %s Params: %s" % (voip_event_type, voip_event, params)
At this point, you are ready to initialize the library passing the dictionary and the callback method defined above:
# initialize the lib passing the dictionary and the callback method defined above: my_voip.init_lib(voip_params, notify_events)
Received Event Type:EVENT_TYPE__LIB_EVENT -> Event: VOIP_EVENT__LIB_INITIALIZING Params: 'params': u'username': u'ste', u'sip_server_transport': u'udp', u'log_level': 1, u'sip_server_user': u'ste', u'sip_server_pwd': u'ste', u'debug': False, u'sip_server_address': u'192.168.1.100'>, 'success': True> Received Event Type:EVENT_TYPE__LIB_EVENT -> Event: VOIP_EVENT__LIB_INITIALIZED Params: 'sip_server': '192.168.1.100', 'success': True>
The example above assumes that you have a Sip Server (e.g, Asterisk) running on a pc reachable at the address 192.168.1.100.
Note that, so far, no connection to the Sip Server has been established yet. The init_lib method returns a True value if the initialization request completes without errors, False otherwise.
Finally, note that at the end of the inititialization process the method notify_events is called, containing all informations related to the outcome of the initialization process.
Step 2: Registering the account on the Sip Server¶
Now, you are ready to register the user to the sip server (in this example, we are registering a user called ste with the password ste. We assume that the Sip Server knows this user and is able to accept the registration request from it).
Received Event Type:EVENT_TYPE__ACCOUNT_EVENT -> Event: VOIP_EVENT__ACCOUNT_REGISTERING Params: 'account_info': u'ste', 'Success': True>
Also in this case, the library calls the method notify_events to notify the outcome of the registration process. In particular, this method is called as soon as a registration request is sent (with a VoipEvent._ACCOUNT_REGISTERING event) and later, as soon as the registration is accepted by the remote Sip server (with a VoipEvent._ACCOUNT_REGISTERED state) or refused (with a VoipEvent._ACCOUNT_REGISTRATION_FAILED event)
Step 3: Making a call to an arbitrary extension¶
In case of successfull registration, you can dial an extension (or call an arbitrary Sip User) in the following way:
my_extension = "1234" my_voip.make_call(my_extension) import time # wait until the call is active while(True): time.sleep(1)
Note that the notify_events method is called when the call is established (with the event VoipEvent.CALL_ACTIVE)
Step 4: Hangup the active call¶
To hangup the call you have just to call the method hangup_call:
# ends the current call my_voip.hangup_call()
Note that, when the user hangs up the call , the callback method is called again with the event VoipEvent.CALL_HANGUP)
© Copyright 2014, Healthcare Flows — CRS4. Revision f02a37ed .
Versions latest Downloads pdf htmlzip epub On Read the Docs Project Home Builds Free document hosting provided by Read the Docs.
Как совершать телефонные звонки на Python
В этом руководстве показано, как использовать программу Python и API Twilio для набора телефонных звонков.
Старомодные добрые телефонные звонки остаются одним из лучших способов общения несмотря на множество новых приложений для смартфонов, появившихся в прошлом несколько лет. Всего несколько строк кода Python плюс интерфейс программирования веб-приложений мы можем совершать и принимать телефонные звонки из любого приложения.
В нашем примере вызовы будут произносить фрагмент текста и помещать всех входящих вызовов в записанную конференц-связь. Вы можете изменить инструкции, используя Twilio-глаголы TwiML , когда вы выполнять различные действия в телефонных звонках вашего собственного приложения.
Наши инструменты
У вас должен быть установлен Python 2 или 3 для построить это приложение. В этом посте мы также будем использовать:
- pip и
- virtualenv для обработки
- зависимости приложений
- Бесплатная учетная запись Twilio для использования своих
- веб-API телефонных звонков
- Twilio’s
- вспомогательная библиотека Python ,
- версия 5.7.0, которая
- доступно на PyPI
Вы можете найти весь открытый исходный код для этого руководства в python-twilio-example-apps Репозиторий GitHub под Каталог no-framework/phone-calls . Используйте и скопируйте код для своих собственных приложений. Все в этом репозиторий и в этом сообщении в блоге имеют открытый исходный код под лицензией MIT.
Установить зависимости приложений
Наше приложение будет использовать Twilio вспомогательная библиотека Python для создания запроса HTTP POST к API Twilio. Вспомогательная библиотека Twilio можно установить из PyPI в виртуальный окружающая обстановка. Откройте свой терминал и используйте команду virtualenv для создания новый virtualenv:
Вызовите сценарий activate в каталоге virtualenv bin/ , чтобы this virtualenv активный исполняемый файл Python. Обратите внимание, что вам нужно будет выполните этот шаг в каждом окне терминала, которое вы хотите, чтобы virtualenv быть активным.
source phoneapp/bin/activate
Командная строка изменится после активации virtualenv на что-то вроде (phoneapp) $ .
Затем используйте команду pip , чтобы установить Пакет Twilio Python в virtualenv.
Необходимая зависимость будет готова для проекта, как только установка скрипта завершена. Теперь мы можем писать и выполнять код Python для набирать телефонные номера.
Наш скрипт Python
Создайте новый файл с именем phone_calls.py и скопируйте или введите следующий строки кода.
from twilio.rest import TwilioRestClient # Twilio phone number goes here. Grab one at https://twilio.com/try-twilio # and use the E.164 format, for example: "+12025551234" TWILIO_PHONE_NUMBER = "" # list of one or more phone numbers to dial, in "+19732644210" format DIAL_NUMBERS = ["",] # URL location of TwiML instructions for how to handle the phone call TWIML_INSTRUCTIONS_URL = \ "http://static.fullstackpython.com/phone-calls-python.xml" # replace the placeholder values with your Account SID and Auth Token # found on the Twilio Console: https://www.twilio.com/console client = TwilioRestClient("ACxxxxxxxxxx", "yyyyyyyyyy") def dial_numbers(numbers_list): """Dials one or more phone numbers from a Twilio phone number.""" for number in numbers_list: print("Dialing " + number) # set the method to "GET" from default POST because Amazon S3 only # serves GET requests on files. Typically POST would be used for apps client.calls.create(to=number, from_=TWILIO_PHONE_NUMBER, url=TWIML_INSTRUCTIONS_URL, method="GET") if __name__ == "__main__": dial_numbers(DIAL_NUMBERS)
Есть несколько строк, которые вам нужно изменить в этом приложении, прежде чем оно будет работать. Сначала введите один или несколько телефонных номеров, по которым вы хотите позвонить, в Список DIAL_NUMBERS. Каждый должен быть строкой, разделенной запятой. За например, DIAL_NUMBERS = [«+12025551234», «+14155559876», «+19735551234»] .
Затем TWILIO_PHONE_NUMBER , SID учетной записи и токен аутентификации, найдено в client = TwilioRestClient («ACxxxxxxxxxx», «yyyyyyyyyy») линия, необходимо установить. Мы можем получить эти значения из Twilio Console .
В вашем веб-браузере перейдите на на веб-сайте Twilio и зарегистрируйтесь для получения бесплатной учетной записи или войдите в свою существующую учетную запись Twilio.
Скопируйте SID учетной записи и токен аутентификации из консоли Twilio и вставьте их. в код вашего приложения:
Пробная учетная запись Twilio позволяет набирать и принимать телефонные звонки на ваш собственный подтвержденный номер телефона. Для обработки звонков с любого телефона номер, то вам нужно обновить свою учетную запись (нажмите кнопку обновления на верхняя панель навигации).
После того, как вы войдете в свою учетную запись Twilio, перейдите в экран управления телефонными номерами . На этом экране вы можете купите один или несколько телефонных номеров или щелкните существующий номер телефона в своей учетной записи, чтобы настроить его.
После нажатия на номер вы попадете в конфигурацию номера телефона экран. Вставьте URL-адрес с инструкциями TwiML и измените раскрывающийся список с «HTTP POST» на «HTTP GET». В этом посте мы будем использовать http://static.fullstackpython.com/phone-calls-python.xml , но этот URL может быть больше, чем просто статический XML-файл.
Сила Twilio действительно проявляется, когда этот URL обрабатывается вашим веб-сайтом. приложение, чтобы оно могло динамически отвечать инструкциями TwiML на основе номер входящего звонящего или другие свойства, хранящиеся в вашей базе данных.
Под веб-перехватчиком Voice вставьте http://static.fullstackpython.com/phone-calls-python.xml и измените раскрывающийся список справа от «HTTP POST» до «HTTP GET». Нажмите “Сохранить” кнопку в нижней части экрана.
Теперь попробуйте позвонить на свой номер телефона. Вы должны услышать фрагмент текста прочитанный голосом Алисы, и вы будете переведены на конференц-связь. Если никто больше не набирает номер, значит, должна играть удерживаемая музыка.
Телефонные звонки
Мы только что обрабатывали входящие звонки на наш номер телефона. Пришло время набирать исходящие телефонные звонки. Убедитесь, что ваш файл phone_calls.py сохранен и что ваш virtualenv все еще активирован, а затем выполните сценарий:
Через мгновение все номера телефонов, которые вы пишете в списке DIAL_NUMBERS должны загореться звонками. Любой, кто ответит, услышит наше сообщение прочитанным голосом “Алисы”, а затем они будут помещены вместе в записанный конференц-связь, как когда кто-то набирает номер.
Вот мой входящий телефонный звонок:
Неплохо всего для нескольких строк кода Python!
Следующие шаги
Теперь, когда мы знаем, как совершать и принимать телефонные звонки с номера Twilio который следует программным инструкциям, мы можем сделать гораздо больше в нашем Приложения. Затем вы можете использовать одно из этих руководств, чтобы узнать больше о ваш номер телефона:
Вопросов? Свяжитесь со мной через Twitter @fullstackpython или @mattmakai . Я также на GitHub как mattmakai .
Что-то не так в этом посте? Вилка источник этой страницы на GitHub и отправьте запрос на перенос.