В наше время интерактивные голосовые сервисы стали доступными каждому желающему. Вы можете быстро собрать «гадалку», которая будет принимать звонки, задавать пользователю вопросы и выдавать предсказания – всё это без вложений в оборудование и без необходимости платить за хостинг. В статье рассмотрим, как сделать такой сервис полностью бесплатно, используя открытые инструменты и облачные сервисы с бесплатным тарифом.
Что такое телефонная гадалка?
Телефонная гадалка – это IVR‑система (Interactive Voice Response), которая:
- Принимает входящий звонок.
- Приветствует абонента голосовым сообщением.
- Задает несколько вопросов (например, «Выберите номер от 1 до 5»).
- На основе выбора генерирует «прогноз» и озвучивает его.
Сервис может работать круглосуточно и не требует участия живого человека.
Что понадобится?
- Облачный сервис для телефонных звонков – Twilio (есть бесплатный Trial‑аккаунт с $15 кредитом).
- Скриптовый язык для обработки логики – Python (можно использовать любой, но Python самый простой для новичков).
- Веб‑сервер, поддерживающий HTTPS – Render, Heroku или PythonAnywhere (все имеют бесплатные планы).
- Текст‑в‑речь (TTS) и распознавание речи – встроенные возможности Twilio (Say и Gather).
Регистрация и настройка Twilio
Следуйте этим шагам:
- Перейдите на twilio.com/try-twilio и создайте бесплатный аккаунт.
- Подтвердите номер телефона – он понадобится для получения кода подтверждения.
- После входа в Console получите Account SID и Auth Token – они понадобятся в коде.
- В разделе Phone Numbers нажмите Buy a Number (в бесплатном тарифе можно взять номер с поддержкой голосовых вызовов).
- Для выбранного номера задайте Voice > A Call Comes In URL – сюда будет отправлен HTTP‑запрос каждый раз, когда кто‑то позвонит. Пока оставьте заглушку, мы её поменяем позже.
Создание логики гадалки на Python
4.1 Структура проекта
my_fortune_teller/ │ ├─ app.py # основной Flask‑приложение ├─ requirements.txt # зависимости └─ fortunes.py # список предсказаний
4.2 requirements.txt
Flask==2.3.3 twilio==8.7.0
4.3 fortunes.py
Файл содержит массив предсказаний. Вы можете добавить свои варианты.
import random PREDICTIONS = [ "Сегодня вам улыбнётся удача, будьте смелее!", "Ваша любовь скоро вернётся к вам.", "Финансовый прорыв будет уже в этом месяце.", "Ожидайте неожиданного подарка от близкого человека.", "Будьте осторожны в дороге, возможна небольшая задержка." ] def get_random_fortune: return random.choice(PREDICTIONS)
4.4 app.py
Приложение использует Flask и Twilio VoiceResponse для генерации XML‑ответов, которые понимает телефонная сеть.
from flask import Flask, request, Response
from twilio.twiml.voice_response import VoiceResponse, Gather
from fortunes import get_random_fortune
app = Flask(__name__)
@app.route("/voice", methods=['GET', 'POST'])
def voice:
resp = VoiceResponse
resp.say("Добро пожаловать в волшебную телефонную гадалку!", voice='alice', language='ru-RU')
gather = Gather(num_digits=1, action="/gather", method="POST", timeout=10)
gather.say("Нажмите одну цифру от 1 до 5, чтобы узнать ваше предсказание.", voice='alice', language='ru-RU')
resp.append(gather)
# Если пользователь ничего не ввёл – повторяем приветствие
resp.redirect("/voice")
return Response(str(resp), mimetype='text/xml')
@app.route("/gather", methods=['GET', 'POST'])
def gather:
digits = request.values.get('Digits', '')
resp = VoiceResponse
if digits and digits in "12345":
fortune = get_random_fortune
resp.say(fortune, voice='alice', language='ru-RU')
resp.say("Спасибо, что позвонили; До свидания!", voice='alice', language='ru-RU')
resp.hangup
else:
resp.say("Неверный ввод. Пожалуйста, попробуйте ещё раз.", voice='alice', language='ru-RU')
resp.redirect("/voice")
return Response(str(resp), mimetype='text/xml')
if __name__ == "__main__":
app.run(debug=True)
4.5 Пояснения к коду
- VoiceResponse – объект, который формирует
Twiml(XML), понятный телефонной сети. - Gather собирает нажатия клавиш DTMF (цифры на клавиатуре телефона).
- В
/voiceмы приветствуем пользователя и просим ввести цифру. - В
/gatherпроверяем ввод и озвучиваем случайное предсказание. - Все сообщения произносятся голосом Alice (русский язык поддерживается).
Развёртывание сервиса бесплатно
Выберите один из бесплатных хостингов:
5.1 Render (рекомендовано)
- Зарегистрируйтесь на render.com.
- Создайте новый Web Service, укажите репозиторий (GitHub, GitLab) с вашим проектом.
- В Build Command укажите
pip install -r requirements.txt. - В Start Command укажите
gunicorn app:app(не забудьте добавитьgunicornвrequirements.txt). - После деплоя получите HTTPS‑URL, например
https://my-fortune-teller.onrender.com/voice.
5.2 Настройка Twilio
Вернитесь в консоль Twilio, откройте ваш номер и в поле Voice > A Call Comes In укажите полученный URL, добавив путь /voice:
https://my-fortune-teller.onrender.com/voice
Сохраните изменения. Теперь любой звонок на ваш номер будет перенаправлен в ваш Flask‑приложение.
Тестирование
- Позвоните на номер, который вы приобрели в Twilio.
- Слушайте приветствие и нажмите цифру от 1 до 5.
- Получите предсказание. При неправильном вводе система предложит повторить.
Если что‑то не работает, откройте Twilio Debugger (в консоли Twilio) – там отображаются ошибки запросов к вашему серверу.
Как добавить «нуар» и «интерактивность»
- База вопросов – храните массив вопросов и вариантов ответов в отдельном файле
questions.py. После каждого ответа можно задавать следующий вопрос. - Случайные сценарии – используйте
random.choiceне только для предсказаний, но и для выбора тематики (любовь, карьера, здоровье). - Запись звонка – добавьте
record=Trueв Gather, чтобы сохранять разговоры для аналитики. - Подключение к базе данных – сохраните номер звонящего и его выбор, чтобы позже анализировать популярность предсказаний.
- Мультиязычность – создайте словари с переводами и переключайте язык в зависимости от выбора пользователя.
Ограничения бесплатного тарифа Twilio
При использовании Trial‑аккаунта есть несколько нюансов:
- Все исходящие звонки могут быть ограничены только на проверенные номера (вы можете добавить их в Verified Caller IDs).
- Каждый звонок будет сопровождаться небольшим голосовым сообщением о том, что это Twilio trial account.
- Бюджет в $15 покрывает несколько десятков минут разговоров – достаточно для тестов и небольших проектов.
Полезные ссылки и ресурсы
- Документация Twilio Voice (Twiml)
- Туториал «Приём входящих звонков» на Python/Flask
- Развёртывание Flask‑приложения на Render
- GitHub‑репозиторий с примерами
Создать бесплатную телефонную гадалку проще, чем кажется. С помощью Twilio и небольшого Flask‑скрипта вы получаете полноценный IVR‑сервис, который может работать 24/7 без вложений в оборудование. Главное – правильно настроить веб‑хук, обеспечить HTTPS‑соединение и придумать интересные предсказания. Экспериментируйте с вопросами, добавляйте базы данных и делайте ваш сервис уникальным!
Удачной разработки и пусть ваша гадалка приносит радость звонящим!