Сегодня я покажу, как произвести настройку softphone клиента в лице MicroSIP (бесплатного) с Windows 10 Pro на изучаемый сервис АТС связки Ubuntu 24.04 LTS Server + Asterisk 22 ("Поднимаем дома Asterisk 22 на Ubuntu 24.04 Server"). У меня сейчас идет этап, когда я погрузился в адаптацию всех своих наработок и задумок, а поэтому стараюсь все записать в виде пошаговых заметок от и до дабы при новом ссылаться на заметки, т.е. все идет от и до.

Что предполагается, что уже сделано.

  • Развернута связка Ubuntu 24.04 LTS Server + Asterisk 22.
  • Развернута виртуальная машина с осью Windows 10 Pro.
  • В система с осью Windows 10 Pro у Вас есть учетная запись с правами Администратора.
  • С системы Windows 10 Pro у Вас есть выход в интернет для скачивания softphone клиента.
  • через pjsip_wizard.conf создан номер 2002, 2001 (это для Android в приложении GS Wave)

На заметку: Если на боевой рабочей станции устанавливать приложение, то следует продумать как к системе будет подключен микрофон и динамик, иначе при совершении звонка вы получите сообщение вида: "Требуются динамики и микрофон. Для совершения звонков в вашей системе должны быть устройства ввод и вывода звука".

Шаг №1: Авторизуюсь на Windows 10 Pro либо через консоль, либо подключившись к ней по RDP.

Шаг №2: С официального сайта www.microsip.org скачиваю клиент MicroSIP, на момент составления данной заметки версия 3.22.3 (https://www.microsip.org/download/MicroSIP-3.22.3.exe?1)

установка выполняется в каталог: C:\Users\ekzorchik\AppData\Local\MicroSIP

запускаю приложение MicroSIP через ярлык с рабочего стола

нажимаю на стрелочку вниз в правой части и выбираю "Общие настройки"

  • Активные кодеки: ставлю порядок G.711 u-law, G.711 A-law
  • Проверять обновления: Никогда
  • Автозагрузка при старте системы: Отмечаю галочкой

и нажимаю "Сохранить".

На заметку: С учетом увиденного как устанавливает приложение можно сделать вывод что права локального администратора не особо то и нужны.

Шаг №3: Перехожу к этапу добавления аккаунта:

запускаю приложение MicroSIP через ярлык с рабочего стола

нажимаю на стрелочку вниз в правой части и выбираю "Добавить аккаунт"

  • Название аккаунта: 2002
  • SIP-сервер: 172.33.33.11
  • Имя пользователя: 2002
  • Домен: 172.33.33.11
  • Логин: 2002
  • Пароль: Aa1234567aA
  • Отображаемое имя: 2002
  • Шифрование медиа: Отключено
  • Транспорт: UDP
  • Публичный адрес: Авто
  • Обновить регистр…: 300
  • Проверка доступн.: 15

и нажимаю "Сохранить", вижу, что каких-либо проблем с регистрацией клиента на Windows 10 Pro не возникло

Клиент MicroSIP успешно подключен с номером 2002 к Asterisk 22.

Шаг №4: Смотрю, что на открытой консоли Asterisk CLI в момент, когда я нажал "Сохранить" после ввода всех параметров добавления аккаунта в приложения MicroSIP на Windows 10 Pro:

ekzorchik@srv-s2404a:~$ sudo asterisk -rvvv

Asterisk 22.8.2, Copyright (C) 1999 - 2025, Sangoma Technologies Corporation and others.

Created by Mark Spencer <markster@digium.com>

Asterisk comes with ABSOLUTELY NO WARRANTY; type 'core show warranty' for details.

This is free software, with components licensed under the GNU General Public

License version 2 and other licenses; you are welcome to redistribute it under

certain conditions. Type 'core show license' for details.

=========================================================================

Running as user 'asterisk'

Running under group 'asterisk'

Connected to Asterisk 22.8.2 currently running on srv-s2404a (pid = 1604)

-- Added contact 'sip:2002@172.33.33.10:59842;ob' to AOR '2002' with expiration of 300 seconds

== Endpoint 2002 is now Reachable

srv-s2404a*CLI> srv-s2404a*CLI> pjsip show endpoints

Endpoint:  2002                                                 Not in use    0 of inf

InAuth:  2002-iauth/2002

Aor:  2002                                               1

Contact:  2002/sip:2002@172.33.33.10:59842;ob        6b2cd645d7 NonQual         nan

Transport:  transport-udp             udp      0      0  172.33.33.11:5060

Objects found: 2

Шаг №5: Можно получить более расширенную информацию по ENDPOINT, в текущем примере это по номеру 2002:

srv-s2404a*CLI> pjsip show endpoint 2002

Endpoint:  <Endpoint/CID.....................................>  <State.....>  <Channels.>

I/OAuth:  <AuthId/UserName...........................................................>

Aor:  <Aor............................................>  <MaxContact>

Contact:  <Aor/ContactUri..........................> <Hash....> <Status> <RTT(ms)..>

Transport:  <TransportId........>  <Type>  <cos>  <tos>  <BindAddress..................>

Identify:  <Identify/Endpoint.........................................................>

Match:  <criteria.........................>

Channel:  <ChannelId......................................>  <State.....>  <Time.....>

Exten: <DialedExten...........>  CLCID: <ConnectedLineCID.......>

==========================================================================================

Endpoint:  2002                                                 Not in use    0 of inf

InAuth:  2002-iauth/2002

Aor:  2002                                               1

Contact:  2002/sip:2002@172.33.33.10:59842;ob        6b2cd645d7 NonQual         nan

Transport:  transport-udp             udp      0      0  172.33.33.11:5060

ParameterName                      : ParameterValue

===================================================================================================

100rel                             : yes

@pjsip_wizard                      : 2002

accept_multiple_sdp_answers        : false

accountcode                        :

acl                                :

aggregate_mwi                      : true

allow                              : (ulaw|alaw)

allow_overlap                      : true

allow_subscribe                    : true

allow_transfer                     : true

allow_unauthenticated_options      : false

aors                               : 2002

asymmetric_rtp_codec               : false

auth                               : 2002-iauth

bind_rtp_to_media_address          : false

bundle                             : false

call_group                         :

callerid                           : <unknown>

callerid_privacy                   : allowed_not_screened

callerid_tag                       :

codec_prefs_incoming_answer        : prefer:pending, operation:intersect, keep:all, transcode:allow

codec_prefs_incoming_offer         : prefer:pending, operation:intersect, keep:all, transcode:allow

codec_prefs_outgoing_answer        : prefer:pending, operation:intersect, keep:all, transcode:allow

codec_prefs_outgoing_offer         : prefer:pending, operation:union, keep:all, transcode:allow

connected_line_method              : invite

contact_acl                        :

context                            : internal

cos_audio                          : 0

cos_video                          : 0

device_state_busy_at               : 0

direct_media                       : true

direct_media_glare_mitigation      : none

direct_media_method                : invite

disable_direct_media_on_nat        : false

dtls_auto_generate_cert            : No

dtls_ca_file                       :

dtls_ca_path                       :

dtls_cert_file                     :

dtls_cipher                        :

dtls_fingerprint                   : SHA-256

dtls_private_key                   :

dtls_rekey                         : 0

dtls_setup                         : active

dtls_verify                        : No

dtmf_mode                          : rfc4733

fax_detect                         : false

fax_detect_timeout                 : 0

follow_early_media_fork            : true

follow_redirect_methods            :

force_avp                          : false

force_rport                        : true

from_domain                        :

from_user                          :

g726_non_standard                  : false

geoloc_incoming_call_profile       :

geoloc_outgoing_call_profile       :

ice_support                        : false

identify_by                        : username,ip

ignore_183_without_sdp             : false

inband_progress                    : false

incoming_call_offer_pref           : local

incoming_mwi_mailbox               :

language                           :

mailboxes                          :

max_audio_streams                  : 1

max_video_streams                  : 1

media_address                      :

media_encryption                   : no

media_encryption_optimistic        : false

media_use_received_transport       : false

message_context                    :

moh_passthrough                    : false

moh_suggest                        : default

mwi_from_user                      :

mwi_subscribe_replaces_unsolicited : no

named_call_group                   :

named_pickup_group                 :

notify_early_inuse_ringing         : false

one_touch_recording                : false

outbound_auth                      :

outbound_proxy                     :

outgoing_call_offer_pref           : remote_merge

overlap_context                    :

pickup_group                       :

preferred_codec_only               : false

record_off_feature                 : automixmon

record_on_feature                  : automixmon

redirect_method                    : user

refer_blind_progress               : true

rewrite_contact                    : false

rpid_immediate                     : false

rtcp_mux                           : false

rtp_engine                         : asterisk

rtp_ipv6                           : false

rtp_keepalive                      : 0

rtp_symmetric                      : false

rtp_timeout                        : 0

rtp_timeout_hold                   : 0

sdp_owner                          : -

sdp_session                        : Asterisk

security_negotiation               : no

send_aoc                           : false

send_connected_line                : yes

send_diversion                     : true

send_history_info                  : false

send_pai                           : false

send_rpid                          : false

set_var                            :

srtp_tag_32                        : false

stir_shaken                        : no

stir_shaken_profile                :

sub_min_expiry                     : 0

subscribe_context                  :

suppress_moh_on_sendonly           : false

suppress_q850_reason_headers       : false

t38_bind_udptl_to_media_address    : false

t38_udptl                          : false

t38_udptl_ec                       : none

t38_udptl_ipv6                     : false

t38_udptl_maxdatagram              : 0

t38_udptl_nat                      : false

tenantid                           :

timers                             : yes

timers_min_se                      : 90

timers_sess_expires                : 1800

tone_zone                          :

tos_audio                          : 0

tos_video                          : 0

transport                          : transport-udp

trust_connected_line               : yes

trust_id_inbound                   : false

trust_id_outbound                  : false

use_avpf                           : false

use_ptime                          : false

user_eq_phone                      : false

voicemail_extension                :

webrtc                             : no

На заметку: к документируемости данного вывода я еще вернусь, это же интересно.

Итого, сейчас у меня есть два (2001 & 2002) зарегистрированных ENDPOINT на моем сервисе Asterisk 22.

Шаг №6: Пробую совершить звонок с 2002 на 2001 где установлено точно такое приложение, но получаю

Server Failure: 503 Сервис недоступен

2001

MicroSIP

Не идут звонки между клиентами MicroSIP.

в логах Asterisk cli

[Mar 10 14:26:45] ERROR[1628]: chan_pjsip.c:2697 request: Unable to create PJSIP channel - endpoint '{EXTEN}' was not found

[Mar 10 14:26:45] NOTICE[1918][C-00000004]: app_dial.c:2722 dial_exec_full: Unable to create channel of type 'PJSIP' (cause 3 - No route to destination)

== Everyone is busy/congested at this time (1:0/0/1)

-- Auto fallthrough, channel 'PJSIP/2002-00000003' status is 'CHANUNAVAIL'

srv-s2404a*CLI>

Внимательно проанализировав вывод и встроенные файлы примеров выявил, что в Asterisk переменные должны использовать синтаксис ${EXTEN}, а не {EXTEN} или Dial(PJSIP/'{EXTEN}'). У меня в extensions.conf было прописано:

ekzorchik@srv-s2404a:~$ sudo nano /etc/asterisk/extensions.conf

[internal]

exten => _20XX,1,Dial(PJSIP/{EXTEN})

и Asterisk читая воспринимает {EXTEN} как текст, ищет ENDPOINT с именем {EXTEN} которого нет, изменив на ${EXTEN}, а после сохранив внесенные изменения, перечитав содержимое extensions.conf:

srv-s2404a*CLI> dialplan reload

Шаг №7: Пробую совершить звонок с 2002 на 2001 и вызов инициируется:

-- Executing [2001@internal:1] Dial("PJSIP/2002-00000004", "PJSIP/2001") in new stack

-- Called PJSIP/2001

-- PJSIP/2001-00000005 is ringing

-- PJSIP/2001-00000005 answered PJSIP/2002-00000004

Поправив extensions.conf звонки между клиентами MicroSIP пошли.

На заметку: Два окна я получил, т.к. в приложении настроено поверх всех окон, с 2002 я позвонил на 2001 и после нажал принять вызов.

Также если с приложения GS Wave на Android (номер 2001) совершить звонок на 2002 (Windows 10 Pro) вызов проходит и соединение удается принять.

Если совершить звонок с 2002 (Windows 10 Pro) на 2001 (Android) то вызов не проходит, по всей видимости всему виной что номер 2001 через OpenVPN туннель и используется NAT до Asterisk - NAT (на смартфоне). Нужно разобраться как побороть.

Вот пока собственно и все в плане настройки SoftPhone на Windows 10 Pro, с уважением автор блога ekzorchik.