Incoming Call Policy (интеграция с Twilio)
Incoming Call Policy позволяет звонить на выделенный номер и дозваниваться до on-call инженеров по правилам эскалации.
Как это работает
flowchart TD
A[Звонок на
incoming number] --> B[Twilio принимает вызов] B --> C[Webhook в Status200] C --> D[Приветствие] D --> E[Загрузка правил эскалации] E --> F{Правило 1:
on-call} F -->|Нет ответа| G{Правило 2:
backup} F -->|Ответили| H[Соединение с инженером] G -->|Нет ответа| I{Правило 3:
менеджер} G -->|Ответили| H I -->|Нет ответа| J[Сообщение и сброс] I -->|Ответили| H H --> K[Разговор] K --> L[Завершение] L --> M[Лог вызова]
incoming number] --> B[Twilio принимает вызов] B --> C[Webhook в Status200] C --> D[Приветствие] D --> E[Загрузка правил эскалации] E --> F{Правило 1:
on-call} F -->|Нет ответа| G{Правило 2:
backup} F -->|Ответили| H[Соединение с инженером] G -->|Нет ответа| I{Правило 3:
менеджер} G -->|Ответили| H I -->|Нет ответа| J[Сообщение и сброс] I -->|Ответили| H H --> K[Разговор] K --> L[Завершение] L --> M[Лог вызова]
Маршрутизация (sequence)
sequenceDiagram
participant Caller
participant Twilio
participant Status200
participant OnCallEngineer
Caller->>Twilio: Набор номера
Twilio->>Status200: POST /incoming-call/voice
Status200->>Twilio: TwiML: приветствие
Twilio->>Caller: Ожидание соединения...
loop Эскалация
Status200->>Status200: Следующее правило
Status200->>Twilio: TwiML: звонок on-call
Twilio->>OnCallEngineer: Вызов
alt Ответил
OnCallEngineer->>Twilio: Снял трубку
Twilio->>Status200: completed
Twilio->>Caller: Соединение
else Нет ответа
Twilio->>Status200: no-answer
Status200->>Status200: Следующее правило
end
end
alt Правила исчерпаны
Status200->>Twilio: TwiML: никто не доступен
Twilio->>Caller: Сообщение
Twilio->>Caller: Сброс
end
Требования
- Аккаунт Twilio: Account SID и Auth Token
- Доступ к self-hosted Status200 (для облачного сценария шаги аналогичны по продукту)
Обзор
- Входящий вызов на номер Twilio
- Проигрывание приветствия
- Обход правил эскалации (команды, расписания, пользователи)
- Соединение с первым ответившим on-call
- Переход к следующему правилу при отсутствии ответа
При self-hosted вы используете свой Twilio — полный контроль над номерами и биллингом.
Шаг 1: аккаунт Twilio
- Регистрация на twilio.com, верификация
- Сохранить Account SID и Auth Token
Шаг 2: Call/SMS config в Status200
- Dashboard → Project Settings → Call & SMS → Custom Call/SMS Config
- Create Custom Call/SMS Config
- Поля: Name, Description, Twilio Account SID, Twilio Auth Token, Twilio Primary Phone Number (исходящий номер)
- Save
Шаг 3: Incoming Call Policy
- On-Call Duty → Incoming Call Policies → Create Incoming Call Policy
- Name, Description → Save
Шаг 4: привязка Twilio
- Откройте политику → Phone Number Routing → Step 2: Link Twilio Configuration
- Select Twilio Config → сохранить
Шаг 5: номер телефона
A: существующий номер Twilio
- Use Existing Number
- Выбор номера из аккаунта → Use This
Если у номера уже был webhook, он будет переназначен на Status200.
B: покупка номера
- Buy New Number → страна, опционально area code / цифры в номере → Search
- Выбор → Purchase (списание с Twilio, webhook настраивается автоматически)
flowchart LR
A[Политика] --> B[Twilio config]
B --> C{Номер}
C -->|Есть| D[Выбор из Twilio]
C -->|Новый| E[Поиск и покупка]
D --> F[Webhook]
E --> F
F --> G[Эскалация]
G --> H[Готово]
Шаг 6: правила эскалации
- Вкладка Escalation Rules → Add Escalation Rule
- Order, Escalate After (seconds), On-Call Schedule / Teams / Users
- Добавить цепочку правил
Пример
| Order | Escalate After | Цель |
|---|---|---|
| 1 | 30 s | Primary on-call |
| 2 | 30 s | Secondary on-call |
| 3 | 30 s | Team lead |
Шаг 7: голосовые сообщения (опционально)
Settings: Greeting Message, No Answer Message, No One Available Message.
Параметры политики
| Параметр | Описание | По умолчанию |
|---|---|---|
| Greeting Message | TTS при ответе | "Please wait while we connect you to the on-call engineer." |
| No Answer Message | Все правила без ответа | "No one is available. Please try again later." |
| No One Available Message | Никого в on-call | "We're sorry, but no on-call engineer is currently available." |
| Repeat Policy If No One Answers | Начать цепочку заново | Выкл. |
| Repeat Policy Times | Сколько повторов | 1 |
Правило эскалации
| Параметр | Описание |
|---|---|
| Order | Приоритет (1 — выше) |
| Escalate After Seconds | Ожидание до следующего шага (по умолчанию 30 с) |
| On-Call Schedule | Кто сейчас on-call |
| Teams | Все участники команд |
| Users | Конкретные пользователи |
Логи звонков
On-Call Duty → политика → Call Logs: номер звонящего, статус, кто ответил, длительность, время.
Телефоны пользователей
Чтобы принимать звонки по эскалации, у пользователя должен быть подтверждённый номер:
User Settings → Notification Methods → Incoming Call Numbers → добавить → SMS verification.
Освобождение номера
Phone Number → Release Number → подтверждение.
Номер возвращается в Twilio и может быть недоступен для повторной покупки.
Устранение неполадок
Звонки не доходят
- Twilio config привязан к политике
- Status200 доступен из интернета
- Верные SID / Token
- Логи в Twilio Console
Не соединяет с инженерами
- Верифицированные номера у пользователей
- Корректные правила и расписания on-call
- Политика включена
Качество аудио
- Стабильный канал до сервера
- Статус Twilio
- Формат E.164 (+15551234567)
Безопасность
- Храните Auth Token в секрете
- HTTPS для Status200
- Проверка подписи webhook со стороны Twilio
- Ограничьте список номеров, которым разрешён звонок на линию
Архитектура
graph TB
subgraph "Снаружи"
A[Звонящий]
B[Twilio]
end
subgraph "Status200"
C[Incoming Call API]
D[Call Router]
E[Escalation Engine]
F[БД]
end
subgraph "On-call"
G[Инженер 1]
H[Инженер 2]
I[Менеджер]
end
A -->|1| B
B -->|2 webhook| C
C -->|3 политика| F
C -->|4 правила| D
D -->|5| E
E -->|6 TwiML| B
B -->|7| G
B -->|8| H
B -->|9| I
Поддержка
- Логи Twilio Console
- Логи сервера Status200
- hello@status200.ru