Перейти до вмісту
Двосторонній зв'язок

Двосторонній зв'язок

Номер, яким керує signal2sip, є повноцінним учасником обох світів - на нього можна подзвонити з будь-якого боку, і дзвінки, здійснені з будь-якого боку, доходять до іншого.

Дзвінок Signal → АТС

Коли хтось дзвонить на акаунт signal2sip у Signal, демон відповідає лише після того, як АТС справді підняла слухавку (він не перехоплює дзвінок у ваших інших реальних/зв’язаних пристроїв Signal завчасно), а потім з’єднує аудіо з тим призначенням, яке налаштоване для цього акаунта:

  • sip_bridge_destination - набрати конкретний екстеншн напряму.
  • sip_bridge_did - набрати DID і дозволити вхідному маршруту вашої АТС самому вирішити реальне призначення (черга дзвінків, IVR, часові умови, резервування) - корисно, якщо хочете, щоб ця логіка жила у конфігурації АТС, а не в signal2sip.

Дзвінок з АТС → Signal

Наберіть номер через власний SIP-екстеншн акаунта signal2sip, як будь-який інший вихідний дзвінок, і він розмістить справжній дзвінок у Signal на набраний номер. Призначення розпізнається через сервіс пошуку контактів Signal так само, як це робить справжній клієнт Signal, тож жодного ручного зіставлення номерів телефону з ідентичностями Signal не потрібно.

DTMF (набір цифр в IVR)

У власних застосунках Signal взагалі немає тонального набору під час дзвінка, тож signal2sip використовує той самий підхід, який уже доведений у спорідненому мосту цього проєкту для Telegram (tg2sip-webrtc), де та сама проблема: поки дзвінок із кимось триває, надішліть цифри звичайним текстовим повідомленням у той самий чат - воно зчитується і передається як справжня подія SIP DTMF (RFC 2833) у дзвінок, без потреби в інтерфейсі набору, якого в Signal просто немає. Працює будь-яка комбінація 0-9, *, # і A-D (регістр не важливий), до 32 символів на повідомлення.

Завершення дзвінка поширюється в обидва боки

Завершення дзвінка з будь-якого боку - Signal чи АТС - завершує його і з іншого боку, замість того, щоб залишати наполовину з’єднаний дзвінок висіти на одному плечі.

Здоров’я з’єднання: Signal - джерело істини, а не АТС

Залежність між двома сторонами навмисно однонаправлена:

  • Якщо з’єднання з Signal обривається, демон одразу знімає SIP-реєстрацію цього акаунта - чесний статус “не зареєстровано” кращий за застарілий “зареєстровано”, на який насправді нічого не можна замаршрутизувати. Він продовжує в фоні пробувати відновити з’єднання з Signal і автоматично відновлює SIP-реєстрацію, щойно воно повертається.
  • Якщо стає недоступною сторона SIP/АТС (перезапуск АТС, збій мережі), демон не чіпає з’єднання з Signal - акаунт залишається онлайн і доступним у Signal незалежно від цього, а окремий, незалежний watchdog самостійно продовжує пробувати відновити SIP-реєстрацію, доки АТС знову не стане доступною.

Ця асиметрія навмисна: мертве з’єднання з Signal означає, що акаунт взагалі не може зробити нічого корисного (без нього неможливий жоден дзвінок у будь-якому напрямку), тож прив’язка стану SIP до нього уникає ситуації, коли реєстрація виглядає здоровою, хоча насправді ні. А мертва АТС - це лише тимчасова недоступність вихідного плеча одного конкретного акаунта - вона не повинна обвалювати інакше здорове з’єднання з Signal, яке може досі обробляти повідомлення чи дзвінки інших акаунтів.