Собствен "Кой се обади", базиран на мултифон

На какви въпроси ще намерите отговори в тази статия:

  • защо се нуждаете от собствено "Кой се обади?".
Всеки разбира механизма на услуга, подобна на „Кой се обади?“: когато е недостъпно, обаждането отива на специален номер, получава се там, обаждащият се информира, че абонатът е недостъпен, и на абоната се изпраща SMS с информация за обаждането. Няма тънкости при получаване на обаждане от Multifon на Asterisk.

Първият въпрос, който стоеше пред мен в пълен растеж ...

Как да изпратите SMS?

Между другото, персонализираният потребителски агент, доколкото разбирам, първоначално напълно изключи възможността за изпращане чрез Asterisk. На пръв поглед всичко изглеждаше просто. Но съобщенията все още не изчезнаха. Включвайки отстраняването на грешки за sipsak, разбрах, че този звяр има набор от предварително дефинирани заглавки, които се дублират глупаво, ако бъдат дадени в командния ред. Трябваше да взема файл в ръцете си. След като обработих sipsack-а по такъв начин, че той разглежда персонализираните заглавия като приоритет и отхвърля дубликатите, най-накрая постигнах първия резултат. Но радостта ми би била непълна, ако сипсакът правилно кодира предаденото съобщение. Няма да описвам цялата епопея на вграждането в код, изграден върху низове с нулев край, UCS2-BE, веднага ще представя резултатите от моята работа на вашата преценка: https://github.com/wolandtel/sipsak. Увих процеса на изпращане на SMS в удобен скрипт. За комплекта най-новото хранилище има скрипт settings.sh, който опростява настройките за парола и маршрутизиране (SIP, GSM + SIP, GSM) на мултифона. Е, можем да изпратим SMS. Сега можете да персонализирате...

Телефонен секретар

AGI ще ни помогне тук. Веднага ще кажа, че поради естествен мързел не внедрих протокола AGI, а само направих такава емулация в скрипта,което ви позволява да изпълните задачата. А именно, скриптът трябва да изчака отговора от звездичката към командата STREAM FILE, така че възпроизвеждането да не приключи преждевременно.

Възможно е, разбира се, да се изпрати SMS от същия скрипт, който възпроизвежда съобщението, но от гледна точка на структурата на приложението е логично да ги разделим.

Всъщност абсолютно никакъв AGI. Просто правим каквото трябва и приключваме.

Тук също няма AGI. Просто чакаме отговор от Asterisk с командата read, за да не затворим, преди да възпроизведе съобщението. Моля, обърнете внимание на параметъра-r8k за чорапите. По някаква причина, без параметри, той неправилно задава скоростта на изходния файл и съобщението се забавя наполовина. Подробности за самия API на Yandex SpeechKit и как да получите ключа са в документацията.

Подготовка на SIM картата

  • вземете парола за личния си акаунт (защото тези бабуини убиха Сервизното ръководство и сега всеки номер изисква собствено влизане);
  • свържете Multifon (защото тези павиани разбиха уеб интерфейса и не можете без USSD).
И ако всичко е ясно с получаването на SMS, тогава USSD не е толкова прозрачно нещо. Преди да продължите, можете да разгледате хранилището на smstool добавки, които улесняват работата с SMS и USSD. В примерния раздел на хранилището има perl инструмент за работа с USSD, който използвах, за да разбера същността на кодирането / декодирането на знаци в USSD. Не е посочено авторство, няма и препратки, защото не помня откъде съм го взел. Можете да го използвате, но лично аз не разбирам perl и не харесвам техномагиите. Ето защо, за да почувствам контрол над ситуацията, написах помощните програми за кодиране и декодиране. Струва ми се, че C кодът е много по-лесен за разбиране, така че помощните програми ще бъдат полезни за тези, които също искат знания. Подозирам, че ако зададете друго кодиране с командата AT+CSCS, проблемът ще изчезне от само себе си, но ние не търсим ... В противен случай работата с USSD е проста: модемът регистрира три ttyUSB устройства. Пишем на първия, четем от последния. За да свържете личния си акаунт, просто изпратете 105:./ussd.sh '*105#' (приема се, че /dev/modem сочи към първия ttyUSB модем). Чакаме SMS с парола (най-удобният начин да направите това е с командатаls -lrt /var/spool/incoming ), след което гледаме./viewsms

. Мултифонът се свързва в две стъпки: стартирайтеcat /dev/ttyUSB2 и изпратете *137#. Копираме отговора и откриваме какво е написано там с помощта наdecode. И в отговор идва меню, където трябва да изберете елемент 1, за да се свържете.Изпълняваме./ussd 1 и получаваме парола в SMS.

Това може да е краят, но тъй като имаме работа с павиани, си струва да споменем за ...

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