Собственный «Кто звонил?» на базе Мультифона

Собственный «Кто звонил?» на базе Мультифона

Самый простой путь, конечно же, купить человеческий HTTP API у какого-нибудь гейта и задёшево отправлять через него. Но во-первых, это неспротивно. А во-вторых, у меня на тарифе несколько сотен СМС включено в абонплату, и с телефона я их почти не отправляю. Перепробовав все возможные варианты с MessageSend (и через диалплан, и через АМИ, и через чёрта лысого), а также помурыжив SipSak, я сдался и попробовал скрипт для Yate. О чудо! СМС через Мультифон отправляются. Но Yate – слишком тяжеловесный движок, подумал я. Yate должен крутиться демоном и требует совершенно избыточной для этих задач конфигурации, подумал я. Поэтому, изучив перловый скрипт, я вычленил из него главное и вернулся к сипсаку. Главным оказался набор нестандартных заголовков (включая обязательного совершенно определённого юзер-агента, ага):

Кстати, кастомный юзер-агент, насколько я понимаю, изначально полностью исключал возможность отправки через Астериск. На первый взгляд, всё казалось просто. Но сообщения всё равно не уходили. Включив дебаг у сипсака, я понял, что эта скотина имеет набор предопределённых заголовков, которые тупо дублируются, если заданы в командной строке. Пришлось брать в руки напильник. Обработав сипсак так, чтобы кастомные заголовки он считал приоритетными, а дубли отбрасывал, я добился наконец первого результата. Но моя радость была бы неполной, если бы сипсак корректно кодировал передаваемое сообщение. Расписывать всю эпопею вкостыливания в код, построенный на нуль-терминированных строках, UCS2-BE я не буду, сразу представлю на ваш суд результаты своих трудов: https://github.com/wolandtel/sipsak. Сам процесс отправки СМС я обернул в удобный скрипт. Для комплекта в последнем репозитории есть скрипт settings.sh, который упрощает настройку пароля и маршрутизации (SIP, GSM+SIP, GSM) на мультифоне. Ну, вот, отправлять СМС мы умеем. Теперь можно настроить сам…

Автоответчик

Здесь нам поможет AGI. Скажу сразу, что от природной лени протокол AGI реализовывать я не стал, а лишь сделал в скрипте такую эмуляцию, которая позволяет выполнить задачу. А именно, скрипт должен дождаться от астериска ответа на команду STREAM FILE, чтобы проигрывание не закончилось раньше времени.

Можно было, конечно, отправлять СМС из того же скрипта, которым проигрывается сообщение, но с точки зрения структуры приложения логично было их разнести.

Абсолютно никакого AGI, по факту. Просто делаем, что требуется, и закругляемся.

Здесь тоже нет AGI. Мы только дожидаемся ответа от Астериска командой read, чтобы не закрыться раньше, чем он проиграет сообщение. Прошу обратить внимание на параметр -r8k для сокса. Почему-то без параметров он неправильно выставляет рейт выходному файлу, и сообщение получается замедленным в два раза. Подробности самого Яндекс SpeechKit API и то, как получить ключ, есть в документации.

Основная часть на этом закончена. Но статья будет неполной без описания нюансов.

Подготовка сим-карты

Очевидно, чтобы всё это завелось, потребуется отдельный номер с Мультифоном. Вы покупаете сим-карту и…? Простой и очевидный путь – вставить её в телефон, набрать необходимые запросы и начать использовать. Но мы не ищем лёгких путей. У меня с давних времён валяется пачка 3G-модемов (знаменитый E1550 и чуть менее знаменитые E150), но нет ни одного свободного телефона. А использовать свой для таких операций я не люблю: лишний раз выключать, вскрывать. Итак, для получения и отправки СМС мы будем использовать давно и хорошо всем известный smstools. Настройку я описывать не буду, ибо боян. Только автодекодинг не включайте. А то будет вам мусор вместо тела сообщения. Итак, после приобретения сим-карты нужно сделать две вещи:

  • получить пароль для личного кабинета (ибо эти бабуины убили Сервис-гид, и теперь для каждого номера требуется собственный логин);
  • подключить Мультифон (ибо эти бабуины сломали веб-интерфейс, и без USSD не обойтись).

На этом можно было бы и завершить, но так как мы имеем дело с бабуинами, стоит упомянуть про…

Организационные моменты

  1. Обязательно укажите, чтобы новую сим-карту подключили на существующий лицевой счёт. Насколько я понял, отключение по неактивности не работает, если на все номера один баланс. Да и вообще удобнее. Когда был жив сервис-гид с возможностью управлять всеми номерами из-под одной учётной записи, этот совет был ещё актуальнее.
  2. В современном мире наебизнеса уже никому не надо объяснять, что сразу после покупки сим-карты необходимо отключать все условно-бесплатные опции (в том числе, «Кто звонил?», ага). Но! Бабуины пошли дальше и некоторые из условно-бесплатных опций не отображаются в личном кабинете. Отключить их можно только звонком в контакт-центр. Желательно подробно прочитать описание тарифа, чтобы выяснить, каких же замечательных вещей вам впарили продали.
  3. В качестве номера для отправки СМС я использую свой основной номер, потому что на нём есть предоплаченный пакет. Естественно, для этого Мультифон на нём тоже должен быть включен (но совершенно не обязательно держать его постоянно зарегистрированным). Дополнительный номер используется только для приёма звонков.

К сожалению, Мультифон не передаёт номер, переадресовавший звонок. Поэтому, если вы хотите подключить свой бонусный «Кто звонил?» друзьям/родным, придётся на каждого человека покупать отдельный номер под автоответчик. Ещё можно попробовать переадресацию с доп. набором (+79XXXXXXXXXpXX), но я не проверял. Если проверите, пишите.

📎📎📎📎📎📎📎📎📎📎