TR EN DE AZ
GitHub Repository mhrgl.com
Ana Səhifə / İnteqrasiyalar / Microsoft Teams Direct Routing
💼 Enterprise Hybrid Telephony · Microsoft 365

💼 Microsoft Teams İnteqrasiyası & Direct Routing SBC Gateway

AiPBX Asterisk 22 mühərrikini birbaşa Microsoft 365 Teams Phone System buludu ilə birləşdirin. Mövcud operator SIP trunk xətlərinizi dəyişmədən, baha Microsoft zəng tariflərinə dözmədən Teams istifadəçilərini təşkilat daxili santral sisteminizlə ucdan-uca birləşdirin.

1. Ümumi Baxış & Niyə Direct Routing?

Microsoft Teams bu gün korporativ dünyada ən geniş istifadə olunan əməkdaşlıq alətidir. Lakin korporativ telefon danışıqlarına gəldikdə Microsoft-un təqdim etdiyi yerli zəng paketləri (Calling Plans) həm çox bahadır, həm də bir çox ölkədə yerli nömrə köçürmə və tənzimləmə maneələri ilə qarşılaşır.

AiPBX Direct Routing Gateway həlli ilə AiPBX Microsoft Teams Phone System üçün Session Border Controller (SBC) rolunu öhdəsinə götürür. Bunun sayəsində:

  • Operator Azadlığı: Mövcud SIP trunk provayderlərinizdən (Aztelekom, Azercell, Bakcell və ya digər) olduğu kimi istifadə etməyə davam edirsiniz.
  • 70%-ə Qədər Xərc Qənaəti: Microsoft-un istifadəçi başına aylıq yüksək beynəlxalq/yerli zəng paketləri əvəzinə mövcud yerli operator tarifinizdən faydalanırsınız.
  • Hibrid Kommunikasiya: Microsoft Teams istifadə edən ofis işçiləri ilə sahədə Android/iOS AiPBX softphone istifadə edənlər, fabrik/anbardakı analoq daxili telefonlar və masaüstü IP telefonlar arasında pulsuz 3-4 rəqəmli daxili zəng həyata keçirilir.
  • Təkmil Santral İmkanları: Teams müştəriləri AiPBX-in çoxsəviyyəli IVR səsli cavab sisteminə, çağrı mərkəzi ACD növbələrinə (*22/*23 fasilə kodları daxil), səs yazısı arxivinə və T.38 rəqəmsal faks serverinə inteqrasiya olunur.
Müqayisə Meyarı Microsoft Yerli Calling Plan AiPBX Direct Routing (Tövsiyə olunur)
Aylıq Operator Xərci İstifadəçi başına 12$ - 24$ / ay 0$ Əlavə Ödəniş (Mövcud SIP trunk tarifi)
Daxili Telefon & IP Phone Dəstəyi Yalnız baha Teams sertifikatlı IP telefonlar Bütün standart SIP telefonlar (Yealink, Grandstream, Fanvil və s.) + WebRTC
Çağrı Mərkəzi & Fasilə İzlənməsi Sadə növbə, fasilə kodları və ətraflı hesabat yoxdur Tam funksional ACD, *22/*23 fasilə kodları, SLA wallboard & *90 dinləmə
Gələn & Çıxan Faks (T.38) Dəstəklənmir T.38 və SpanDSP dəstəkli daxili faks serveri

2. Arxitektura Sxemi & İş Prinsipi

Microsoft Teams Direct Routing siqnalizasiyası SIP over TLS (Port 5061) üzərindən, səs axınları isə SRTP (Secure Real-time Transport Protocol - SDES) üzərindən şifrəli şəkildə daşınır. AiPBX serveri Microsoft-un bulud proksiləri ilə yerli şəbəkəniz arasında təhlükəsiz körpü (SBC) yaradır:

Direct Routing Şəbəkə Topologiyası TLS 1.2 · SRTP · Port 5061
┌─────────────────────────────────────────────────────────────────────────────┐
│                    MICROSOFT 365 CLOUD INFRASTRUCTURE                       │
│                                                                             │
│   [ Teams Desktop ]       [ Teams Mobile (iOS/Android) ]      [ Teams Web ]  │
│           │                               │                        │        │
│           └───────────────────────┬───────┴────────────────────────┘        │
│                                   ▼                                         │
│                 Microsoft Teams Phone System Core                           │
│                                   │                                         │
│                sip.pstnhub.microsoft.com (EU / Primary)                     │
│                sip2.pstnhub.microsoft.com (US / Secondary)                  │
│                sip3.pstnhub.microsoft.com (APAC / Tertiary)                 │
└───────────────────────────────────┬─────────────────────────────────────────┘
                                    │
                                    │  SIP over TLS (Port 5061)
                                    │  SRTP Media (UDP 10000-20000)
                                    │  Trusted CA SSL (Let's Encrypt / DigiCert)
                                    ▼
┌─────────────────────────────────────────────────────────────────────────────┐
│                    AiPBX SESSION BORDER CONTROLLER (SBC)                    │
│                                                                             │
│   FQDN: sbc.yourdomain.com / IP: 212.147.x.x                                │
│   ┌─────────────────────────────────────────────────────────────────────┐   │
│   │ Asterisk 22 PJSIP Signaling & Media Engine                          │   │
│   │  • TLS Transport (Port 5061) - Strict Cipher Suites (AES256/GCM)    │   │
│   │  • SDES-SRTP Audio Transcoding (SILK, Opus, G.711a, G.711u)         │   │
│   │  • Bi-directional SIP OPTIONS Heartbeat Monitoring (60s Keepalive)  │   │
│   │  • E.164 Inbound/Outbound Route Normalization & Dialplan            │   │
│   └──────────────────────────────────┬──────────────────────────────────┘   │
└──────────────────────────────────────┼──────────────────────────────────────┘
                                       │
           ┌───────────────────────────┼───────────────────────────┐
           ▼                           ▼                           ▼
┌─────────────────────┐     ┌─────────────────────┐     ┌─────────────────────┐
│  OFFICE EXTENSIONS  │     │  CALL CENTER & IVR  │     │   CARRIER TRUNKS    │
│  • Yealink/Fanvil   │     │  • ACD Queues       │     │  • Türk Telekom     │
│  • AiPBX WebRTC Web │     │  • *22/*23 Breaks   │     │  • Turkcell / Voda  │
│  • Android/iOS Apps │     │  • Recording & SLA  │     │  • Any SIP Provider │
└─────────────────────┘     └─────────────────────┘     └─────────────────────┘
💡
SIP OPTIONS Nəbz (Heartbeat) Mexanizmi: Microsoft Teams Phone System və AiPBX trunk xəttinin canlı olduğunu təsdiqləmək üçün qarşılıqlı olaraq hər 60 saniyədə bir SIP OPTIONS paketi göndərir. AiPBX PJSIP konfiqurasiyasında qualify_frequency=60 aktivləşdirildikdə Microsoft 365 İdarəetmə Mərkəzində SBC statusu dərhal "Active (Aktiv)" olaraq yaşıla dönür.

3. İlkin Şərtlər & Lisenziya Tələbləri

AiPBX Microsoft Teams Direct Routing quraşdırmasını həyata keçirməzdən əvvəl aşağıdakı komponentlərin hazır olduğuna əmin olun:

  1. Microsoft 365 Lisenziyası: Zəng edəcək hər Teams istifadəçisi üçün Teams Phone Standard (köhnə adı Phone System) əlavə lisenziyası və ya bu funksiyanı ehtiva edən Microsoft 365 E5 lisenziyası tələb olunur.
  2. Təsdiqlənmiş Domen (FQDN): Microsoft 365 Tenant-ınızda təsdiqlənmiş domen altında SBC üçün xüsusi alt domen (məsələn sbc.sirketiniz.az və ya teams.sirketiniz.az). Qeyd: Domen Microsoft 365 idarəetmə panelində "Domenlər (Domains)" siyahısında olmalıdır.
  3. Etibarlı İctimai SSL Sertifikatı: Microsoft Teams yalnız öz etibar zəncirində olan ictimai CA-ları (Sectigo, DigiCert, GlobalSign və ya Let's Encrypt ISRG Root X1) qəbul edir. Sertifikatın Ümumi Adı (CN) və ya SAN qeydi SBC FQDN-inizlə tam uyğun olmalıdır.
  4. Statik İctimai IPv4 Ünvanı: AiPBX serverinizin internetə birbaşa açıq və ya 1:1 NAT ilə uyğunlaşdırılmış sabit ictimai IP ünvanı olmalıdır.

4. Şəbəkə & Təhlükəsizlik Divarı Port Qaydaları

Microsoft Teams Direct Routing siqnalizasiyası və səs trafiki üçün AiPBX serverinizdə aşağıdakı portlar açıq olmalıdır. AiPBX təhlükəsizlik divarını firewalld ilə idarə edir; 5061/tcp və 10000-20000/udp quraşdırma ilə birlikdə açılır:

Protokol & Port Mənbə / Hədəf IP Diapazonu Trafik Növü & Təsvir
TCP 5061 52.114.0.0/16, 52.112.0.0/14 SIP over TLS Siqnalizasiyası: Microsoft PSTN Hub proksiləri ilə ikitərəfli SIP zəng qurulması və OPTIONS nəbz yoxlamaları.
UDP 10000:20000 52.112.0.0/14, 52.120.0.0/14 SRTP Təhlükəsiz Səs Axını: Teams istifadəçiləri ilə AiPBX arasındakı şifrəli media paketləri.
TCP 443 Genel / Any HTTPS Webhook & Let's Encrypt: Sertifikatın yenilənməsi və Teams kanallarına gedən Adaptive Card bildirişləri.
bash — firewalld Qaydaları (Microsoft 365 Diapazonları)
# AiPBX manages the firewall with firewalld (install.sh disables ufw);
# the portal's Firewall page edits the same rules.
# 5061/tcp and 10000-20000/udp are already open after install.
# Optional: accept SIP TLS only from Microsoft 365 (only if no desk phone
# or other trunk uses SIP TLS on 5061).
sudo firewall-cmd --permanent --remove-port=5061/tcp
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="52.112.0.0/14" port port="5061" protocol="tcp" accept'
sudo firewall-cmd --permanent --add-rich-rule='rule family="ipv4" source address="52.120.0.0/14" port port="5061" protocol="tcp" accept'

# Apply and review
sudo firewall-cmd --reload
sudo firewall-cmd --list-all

5. Asterisk 22 & PJSIP Konfiqurasiyası

Asterisk 22 PJSIP mühərriki Microsoft Teams Direct Routing-in tələb etdiyi TLS 1.2+ şifrələməsini, SDES-SRTP media qorunmasını və E.164 nömrə formatlarını yerli olaraq dəstəkləyir. Aşağıdakı konfiqurasiya bloklarını /etc/asterisk/pjsip.conf və /etc/asterisk/extensions.conf fayllarına əlavə edin:

A. /etc/asterisk/pjsip.conf — Trunk & Transport Ayarları

ini — /etc/asterisk/pjsip.conf (Teams Direct Routing)
; ====================================================================
; 1. TLS TRANSPORT (PORT 5061 - Microsoft Teams SBC)
; ====================================================================
[transport-tls-msteams]
type=transport
protocol=tls
bind=0.0.0.0:5061
cert_file=/etc/letsencrypt/live/sbc.yourdomain.com/fullchain.pem
priv_key_file=/etc/letsencrypt/live/sbc.yourdomain.com/privkey.pem
method=tlsv1_2
cipher=ECDHE-RSA-AES256-GCM-SHA384,ECDHE-RSA-AES128-GCM-SHA256,ECDHE-RSA-AES256-SHA384
verify_client=no
verify_server=yes
require_client_cert=no

; ====================================================================
; 2. MS TEAMS ENDPOINT
; ====================================================================
[msteams-trunk]
type=endpoint
transport=transport-tls-msteams
context=from-msteams
disallow=all
allow=alaw,ulaw,opus,g722
direct_media=no
media_encryption=sdes
rtp_symmetric=yes
force_rport=yes
rewrite_contact=yes
trust_id_inbound=yes
send_rpid=yes
send_pai=yes
timers=yes
timers_sess_expires=1800
aors=msteams-aor

; ====================================================================
; 3. MS TEAMS AOR & QUALIFY (OPTIONS heartbeat)
; ====================================================================
[msteams-aor]
type=aor
contact=sip:sip.pstnhub.microsoft.com:5061;transport=tls
qualify_frequency=60
qualify_timeout=3.0

; ====================================================================
; 4. IDENTIFY (match inbound calls to Microsoft IPs)
; ====================================================================
[msteams-identify]
type=identify
endpoint=msteams-trunk
match=52.114.148.0, 52.114.132.74, 52.114.75.24, 52.114.76.76, 52.114.7.24, 52.114.14.70, 52.114.16.74, 52.114.20.29, sip.pstnhub.microsoft.com, sip2.pstnhub.microsoft.com, sip3.pstnhub.microsoft.com

B. /etc/asterisk/extensions.conf — Zəng Marşrutlaşdırması (Dialplan)

ini — /etc/asterisk/extensions.conf (from-msteams & to-msteams)
; ====================================================================
; 1. CALLS COMING FROM MICROSOFT TEAMS (from-msteams)
; ====================================================================
[from-msteams]
; Teams user dials a 3-4 digit extension (e.g. 105)
exten => _[1-9]XX,1,NoOp(Teams -> Extension: ${CALLERID(num)} -> ${EXTEN})
 same => n,Dial(PJSIP/${EXTEN},30,tTkK)
 same => n,Hangup()

exten => _[1-9]XXX,1,NoOp(Teams -> 4-digit Extension: ${CALLERID(num)} -> ${EXTEN})
 same => n,Dial(PJSIP/${EXTEN},30,tTkK)
 same => n,Hangup()

; Teams user calls the call-center queue (e.g. 800)
exten => 800,1,NoOp(Teams -> Support Queue)
 same => n,Answer()
 same => n,Queue(support_queue,tTkK,,,180)
 same => n,Hangup()

; Teams user dials an external PSTN number (05xx / 02xx / +90...)
exten => _0[2-5]XXXXXXXXX,1,NoOp(Teams -> Carrier Trunk Outbound: ${EXTEN})
 same => n,Dial(PJSIP/${EXTEN}@carrier-trunk,60,tTkK)
 same => n,Hangup()

; ====================================================================
; 2. CALLS FROM AIPBX EXTENSIONS TO TEAMS (to-msteams)
; Routes to the E.164 numbers assigned to Teams users (+90212XXXXXXX)
; ====================================================================
[to-msteams]
exten => _+.,1,NoOp(AiPBX -> Teams Direct Routing: ${EXTEN})
 same => n,Set(CALLERID(num)=+902129990000) ; your company main number
 same => n,Dial(PJSIP/${EXTEN}@msteams-trunk,60,tTkK)
 same => n,Hangup()

; Short code to reach a Teams user (e.g. 7105 -> +902129997105)
exten => _7XXX,1,NoOp(Extension -> Teams User 7${EXTEN:1})
 same => n,Dial(PJSIP/+90212999${EXTEN}@msteams-trunk,45,tTkK)
 same => n,Hangup()
bash — Asterisk Konfiqurasiyasının Canlı Yenidən Yüklənməsi
# Reload the Asterisk modules live
sudo asterisk -rx "pjsip reload"
sudo asterisk -rx "dialplan reload"

# Verify the Teams trunk status and OPTIONS heartbeat
sudo asterisk -rx "pjsip show endpoints"
sudo asterisk -rx "pjsip show aor msteams-aor"

6. Microsoft 365 PowerShell Konfiqurasiyası

Microsoft Teams Direct Routing quraşdırmasının Microsoft bulud tərəfi rəsmi MicrosoftTeams PowerShell modulu üzərindən bir neçə əmrlə tamamlanır. Administrator (Global Admin və ya Teams Admin) səlahiyyəti olan kompüterdə aşağıdakı addımları ardıcıllıqla icra edin:

powershell — Microsoft Teams PowerShell Konfiqurasiyası
# ====================================================================
# STEP 1: Install the module and connect to your Microsoft 365 tenant
# ====================================================================
Install-Module -Name MicrosoftTeams -Force -AllowClobber
Connect-MicrosoftTeams

# ====================================================================
# STEP 2: Register the AiPBX SBC gateway
# ====================================================================
New-CsOnlinePSTNGateway `
    -Fqdn "sbc.yourdomain.com" `
    -SipSignalingPort 5061 `
    -CodecPriorityList SILK,G711A,G711U `
    -MaxConcurrentSessions 100 `
    -Enabled $true

# ====================================================================
# STEP 3: Create the PSTN usage and voice route
# ====================================================================
# Define a PSTN usage tag
Set-CsOnlinePstnUsage -Identity Global -Usage @{Add="AiPBX-Local"}

# Voice route sending all outbound calls to the AiPBX SBC
New-CsOnlineVoiceRoute `
    -Name "AiPBX-PSTN-Route" `
    -NumberPattern ".*" `
    -OnlinePstnGatewayList "sbc.yourdomain.com" `
    -Priority 1 `
    -OnlinePstnUsages "AiPBX-Local"

# Create the voice routing policy
New-CsOnlineVoiceRoutingPolicy `
    -Identity "AiPBX-Voice-Policy" `
    -OnlinePstnUsages "AiPBX-Local" `
    -Description "AiPBX Direct Routing policy"

# ====================================================================
# STEP 4: Assign a number to the user and apply the policy
# ====================================================================
# Assign an E.164 phone number and enable Enterprise Voice
Set-CsPhoneNumberAssignment `
    -Identity "ahmet.yilmaz@yourdomain.com" `
    -PhoneNumber "+902129991001" `
    -PhoneNumberType DirectRouting

# Attach the AiPBX voice policy to the user
Grant-CsOnlineVoiceRoutingPolicy `
    -Identity "ahmet.yilmaz@yourdomain.com" `
    -PolicyName "AiPBX-Voice-Policy"
✅
Yığım Klaviaturasının (Dial Pad) Aktivləşdirilməsi: Yuxarıdakı PowerShell addımları tamamlandıqdan sonra Microsoft 365 bulud replikasiyası adətən 15-30 dəqiqə çəkir. Replikasiya bitdikdə istifadəçinin Microsoft Teams müştərisindəki "Zənglər (Calls)" bölməsində avtomatik olaraq telefon nömrəsi klaviaturası (Dial Pad) görünəcək.

7. Zəng Ssenariləri & Korporativ İş Axınları

AiPBX və Microsoft Teams inteqrasiyası tamamlandıqda müəssisəniz hibrid santral strukturuna malik olur. Sistem aşağıdakı ssenariləri tam uyğunluqla dəstəkləyir:

1. Teams ➔ Masaüstü Telefon / Daxili

Teams istifadəçisi zəng ekranında 105 yığdıqda zəng TLS 5061 üzərindən AiPBX-ə çatır. Asterisk daxili nömrəni masaüstü IP telefonda və mobil tətbiqdə dərhal zəng çaldırır.

2. PSTN Xarici Xətt ➔ IVR ➔ Teams

Müştəri şirkətinizin şəhər nömrəsinə zəng edir. AiPBX IVR menyusu açılır ("Satış üçün 1-i basın"). Yığım edildikdə zəng birbaşa müvafiq Teams istifadəçisinə düşür.

3. Teams ➔ Xarici Dünya (PSTN Zəngi)

Teams istifadəçisi mobil nömrə yığdıqda zəng AiPBX üzərindən şirkətin mövcud SIP trunk operatoruna yönləndirilir və yerli tariflə hesablanır.

4. Teams İstifadəçisi Zəng Növbəsində

Dəstək komandasındakı Teams istifadəçiləri AiPBX ACD növbələrinə dinamik üzv kimi əlavə edilə bilər. Gələn müştəri zəngləri növbə ilə Teams ekranlarına pop-up kimi düşür.

8. Microsoft Teams Webhook & Kanal Bildirişləri

Direct Routing səs inteqrasiyasına əlavə olaraq AiPBX buraxılan zəngləri, santral təhlükəsizlik xəbərdarlıqlarını, gələn faks sənədlərini və çağrı mərkəzi SLA aşımı bildirişlərini Microsoft Teams kanallarına Adaptive Cards formatında ani webhook ilə göndərə bilər.

bash — Buraxılan Zəng üçün Teams Webhook Göndərişi (cURL & Adaptive Card)
curl -X POST -H "Content-Type: application/json" -d '{
  "type": "message",
  "attachments": [
    {
      "contentType": "application/vnd.microsoft.card.adaptive",
      "content": {
        "$schema": "http://adaptivecards.io/schemas/adaptive-card.json",
        "type": "AdaptiveCard",
        "version": "1.4",
        "body": [
          {
            "type": "TextBlock",
            "text": "📞 AiPBX — Missed Call Alert",
            "weight": "Bolder",
            "size": "Medium",
            "color": "Attention"
          },
          {
            "type": "FactSet",
            "facts": [
              { "title": "Caller:", "value": "+90 532 123 45 67" },
              { "title": "Target Queue:", "value": "Support Queue (*800)" },
              { "title": "Wait Time:", "value": "48 seconds" },
              { "title": "Time:", "value": "2026-09-18 11:42:15" }
            ]
          }
        ],
        "actions": [
          {
            "type": "Action.OpenUrl",
            "title": "Open in AiPBX",
            "url": "https://aipbx.bid/cdr-reports"
          }
        ]
      }
    }
  ]
}' "https://yourtenant.webhook.office.com/webhookb2/..."

9. Problemlərin Həlli & Diaqnostika Əmrləri

Direct Routing quraşdırmasında ən çox rast gəlinən problemlər və həll addımları:

Xəta / Əlamət Ehtimal Olunan Səbəb Həll Yolu
SIP OPTIONS Cavabsız / SBC Down Port 5061 təhlükəsizlik divarında bağlıdır və ya TLS sertifikatının adı uyğun gəlmir. firewall-cmd --list-all ilə 5061 portunu yoxlayın. Let's Encrypt sertifikatında FQDN-in düzgün olduğunu certbot certificates ilə təsdiqləyin.
488 Not Acceptable Here Kodek və ya SRTP media şifrələməsi uyğunsuzluğu. PJSIP endpoint ayarlarında media_encryption=sdes və allow=alaw,ulaw,opus sətirlərinin olduğuna əmin olun.
403 Forbidden Microsoft 365 Tenant-da səs siyasəti təyin edilməyib və ya nömrə yoxdur. PowerShell üzərindən Get-CsOnlineUser ahmet@domain.com əmri ilə EnterpriseVoiceEnabled: True olduğunu yoxlayın.
Birtərəfli Səs UDP 10000:20000 portları təhlükəsizlik divarında bloklanıb və ya NAT external_media_address yoxdur. PJSIP transport tərifinə external_media_address=YOUR_PUBLIC_IP əlavə edin və UDP portlarını açın.
bash — Canlı SIP Trafikinin İzlənməsi (Debug)
# Attach to the Asterisk console and enable the PJSIP SIP packet logger
sudo asterisk -rvvv
pjsip set logger on

# To capture only Microsoft Teams traffic, in a shell:
sudo tcpdump -n -i any port 5061 -vv