Интеграция с Twilio

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

1. Настройка входящих звонков

Добавление SIP-домена в Twilio.

В вашем аккаунте Twilio откройте раздел Twilio Console → Voice → SIP Domains и нажмите на кнопку + для добавления нового домена.

Пример настроек SIP-домена:

  • FRIENDLY NAME - имя домена, например zadarma;
  • SIP URI - домен, произвольное название, для удобства можно использовать виртуальный номер.

SIP Domain URL

В секции Voice Authentication добавьте по очереди три IP ACCESS CONTROL LISTS которые будут содержать доверительные IP адреса Zadarma с которых Twilio будете принимать входящие звонки. Даннные IP вы можете найти в разделе Настройки → Виртуальные номера либо просто скопировать из этой инструкции.

  • FRIENDLY NAME - sipurifr.zadarma.com
  • CIDR NETWORK ADDRESS - 185.45.152.216 /32

IP ACCESS CONTROL LISTS

  • FRIENDLY NAME - sipuriny.zadarma.com
  • CIDR NETWORK ADDRESS - 185.45.155.33 /32

IP ACCESS CONTROL LISTS

  • FRIENDLY NAME - sipde.zadarma.com
  • CIDR NETWORK ADDRESS - 185.45.152.174 /32

IP ACCESS CONTROL LISTS

Убедитесь что все три добавленные IP ACCESS CONTROL LISTS выбраны в настройках SIP домена.

Voice Authentication

Ниже в секции Call Control Configuration в параметре A CALL COMES IN выберите что именно будет управлять входящими звонками, если у вас уже настроена маршрутизация входящих звонков в Twilio - выберите ваш вариант, например Studio и ваш Flow (сценарий) для входящих звонков, нажмите Save для сохранения настроек вашего SIP-домена.

Call Control Configuration

Пример Flow (сценарий) для входящих звонков


Далее в настройках SIP Domain в секции SIP Registration необходимо включить возможность регистрироваться, переключив тумблер в Enabled.

SIP Registration

Ниже необходимо в CREDENTIAL LISTS выбрать существующий SIP Endpoint который будет принимать входящие звонки с помощью софтфона. Если у вас еще нет SIP Endpoint - создайте его нажав на кнопку "+".

Добавление SIP Endpoint


Настройка SIP домена завершена, нажмите кнопку Save.

2. Направление звонков в Twilio

В предыдущем пункте мы добавили SIP-домен в Twilio в котором есть необходимый для маршрутизации SIP URI:

  1. Откройте в Zadarma раздел Настройки → Виртуальные номера.
  2. Напротив вашего номера нажмите на значок ⚙ (шестеренка).
  3. Откройте вкладку "Внешний сервер".
  4. Включите опцию "Внешний сервер (SIP URI)".
  5. В появившемся поле введите 15551111111@15551111111.sip.twilio.com

    - где 15551111111.sip.twilio.com – это ваш SIP URI из настроек SIP-домен в Twilio.

  6. Нажмите "Сохранить".

Настройка входящих звонков завершена.

2. Настройка исходящих звонков из Twilio

Исходящие звонки из Twilio можно совершать нескольким способами, рассмотрим пример инициации звонка через Twilio REST API (Calls API).

В следующем примере будет показано создание конференции между SIP Endpoint на котором настроен софтфон и внешнего номера (звонок через Zadarma).

В примере будет использоваться python-скрипт, перед началаом убедитесь что в вашей системе установлен python и библиотека twilio (www.twilio.com/docs/libraries/reference/twilio-python).

Для аутентификации запроса необходимо использовать Account SID и Auth Token вы можете их найти в Twilio в Account Dashboard в левом верхнем углу страницы.

Для авторизации исходящего звонка будет использоваться Sip-логин и пароль из личного кабинета Zadarma.

Создайте скрипт call.py с следующим содержимым:


from twilio.rest import Client

# Twilio учетные данные
ACCOUNT_SID = "Account_SID_value"
AUTH_TOKEN = "Auth_Token_value"
TWILIO_NUMBER = "+15559999999"  # Подтвержденный номер в Twilio для Caller ID
CONFERENCE_NAME = "MyConferenceRoom"

# Zadarma SIP учетные данные
ZADARMA_SIP_URI = "sip:+525500000777@sip.zadarma.com"  # Куда звоним через Zadarma
ZADARMA_SIP_USER = "12345"  # вместо 12345 должен быть ваш sip-логин из Zadarma
ZADARMA_SIP_PASSWORD = "my_sip_password"  # Пароль от sip-логина Zadarma

# SIP Endpoint (локальный)
SIP_ENDPOINT = "sip:11111@15551111111.sip.twilio.com"  # Ваш SIP Endpoint на котором настроен софтфон для приема звонков

# Инициализация Twilio клиента
client = Client(ACCOUNT_SID, AUTH_TOKEN)

# Функция добавления участника в конференцию
def add_to_conference(to_number, from_number=None, sip_auth_user=None, sip_auth_password=None):
    call_params = {
        "to": to_number,
        "from_": from_number if from_number else TWILIO_NUMBER,
        "twiml": f"""<Response>
                        <Dial>
                            <Conference>{CONFERENCE_NAME}</Conference>
                        </Dial>
                     </Response>"""
    }

    # Добавляем аутентификацию
    if sip_auth_user and sip_auth_password:
        call_params["sip_auth_username"] = sip_auth_user
        call_params["sip_auth_password"] = sip_auth_password

    call = client.calls.create(**call_params)
    print(f"Вызов на {to_number} начат, SID: {call.sid}")

# Запуск звонков
add_to_conference(ZADARMA_SIP_URI, from_number=TWILIO_NUMBER, sip_auth_user=ZADARMA_SIP_USER, sip_auth_password=ZADARMA_SIP_PASSWORD)  # Звонок на внешний номер через Zadarma
add_to_conference(SIP_ENDPOINT)  # Подключаем SIP Endpoint

print(f"Конференция '{CONFERENCE_NAME}' создана!")

Сохраните и запустите ваш скрипт call.py. Если всё настроено верно, звонки поступят в софтфон и на внешний номер от вашего SIP-логина Zadarma.