Membatasi panggilan pengguna MSTeams Direct Routing ke kode area tertentu

Latar belakang

Ada permintaan dari sebuah perusahaan yang sudah menggunakan MSTeams Direct Routing untuk membatasi panggilan pengguna MSTeams Phone System di kantor cabang Lampung supaya hanya bisa melakukan panggilan ke seluruh kode area Lampung saja (yang menurut wikipedia, ada 9 kode area: 0721 s/d 0729), dan tidak memperbolehkan panggilan ke nomer selular.

Cara konfigurasi

Sebenarnya ada banyak cara yang dapat dilakukan. Jika ngobrol sama rekan-rekan kerja, ada yang suka menggunakan dialplan, ada juga yang lebih nyaman melakukan di level VoiceRoute. Tapi kali ini saya akan menggunakan PSTNUsages. Jadi cara apa pun ndak masalah yang penting tujuan utama tercapai, yaitu membatasi panggilan hanya ke seluruh kode area wilayah Lampung.

Langkah awal adalah membuat kompartemen PSTNUsage untuk menampung semua OnlineVoiceRoute untuk wilayah Lampung (semua perintah dijalankan via powershell:

PS> Set-CsOnlinePstnUsage -Identity Global -Usage @{Add="Lokal_Lampung"}

Setelah kompartemen dibuat, berikutnya adalah menentukan number pattern melalui OnlineVoiceRoute:

PS> CsOnlineVoiceRoute -Identity "Lokal_Lampung072X" -NumberPattern "^072[1-9](\d{5,})$" -OnlinePstnGatewayList sbc.directrouting.tld -OnlinePstnUsages Lokal_Lampung

PS> CsOnlineVoiceRoute -Identity "Lokal_Lampung+62" -NumberPattern "^\+6272[1-9](\d{5,})$" -OnlinePstnGatewayList sbc.directrouting.tld -OnlinePstnUsages Lokal_Lampung

Saya membuat dua pattern yang satu berawalan 0 dan satunya berawalan +62. Biasanya, pengguna yang melakukan panggilan dengan menekan numpad ke kode area, akan menggunakan awalan 0, sedangkan untuk panggilan dari phonebook, call history, dst, kadang ada awalan +62.

Setelah kedua VoiceRoute di atas tersimpan dalam satu PSTNUsage Lokal_Lampung, berikutnya kita buat VoiceRoutingPolicy seperti berikut:

PS> New-CsOnlineVoiceRoutingPolicy -Identity "Lokal_Lampung" -OnlinePstnUsages Lokal_Lampung

Jika kita memiliki lebih dari satu PSTNUsage bisa ditambahkan juga di baris atas dengan pemisah koma. Misal saya sudah pernah membuat PSTNUsage untuk panggilan emergency, dan saya beri nama Emergency, maka bisa ditambahkan sebagai berikut:

PS> New-CsOnlineVoiceRoutingPolicy -Identity "Lokal_Lampung" -OnlinePstnUsages Lokal_Lampung, Emergency

Jika tidak ada error yang muncul, maka sematkan policy dengan nama (kebetulan sama) “Lokal_Lampung” di atas ke pengguna, misal seperti berikut:

PS> Grant-CsOnlineVoiceRoutingPolicy -Identity "user@directrouting.tld" -PolicyName Lokal_Lampung

Selamat mencoba.

Pranala luar

  • https://docs.microsoft.com/en-us/powershell/module/skype/new-csonlinevoiceroutingpolicy
  • https://docs.microsoft.com/en-us/powershell/module/skype/set-csonlinepstnusage

Microsoft Teams Chat Bubbles

Jika mengikuti Roadmap Microsoft, baru-baru ini ada pengumuman di Roadmap ID 65948 yang bakal dirollout per akhir Juli 2021 ini, yaitu fitur chat bubbles ketika sedang konferensi video. Selama ini jika kita konferensi video di MSTeams, lalu ingin menambahkan informasi di dalam diskusi (misal tautan/pranala, atau mengkoreksi informasi yang disampaikan pembicara, dan lain sebagainya), peserta harus repot-repot membuka jendela chat terlebih dahulu untuk mengetik maupun membaca percakapan. Rencananya dengan chat bubbles ini, apa yang kita ketik di chat ketika orang lain sedang bicara akan muncul sebagai bubbles di jendela video wajah kita dari perspektif orang lain, yang kira-kira bakal seperti ini:

Chat bubbles

Jangan sampai dibuat ngomentarin orang lain yang ada di dalam pertemuan tersebut ya? Baik-baik jaga chat nya atau bakal malu keceplosan dilihat orang banyak. Lebih sial lagi jika ada yang sempat membuat tangkapan layar.

Fitur ini katanya bisa diaktifkan dengan menu elpisis di kanan atas, lalu ada pilihan Don’t show chat bubbles

Chat bubbles

ya kira-kira tujuannya untuk menghindarkan kejadian memalukan seperti yang dibahas di atas, jadi sebaiknya fitur tersebut dimatikan sama sekali.

Saya belum tau pasti seberapa membantunya fitur ini di pertemuan-pertemuan selanjutnya. Bisa jadi cukup membantu, atau bahkan bisa jadi menyebalkan, apalagi kalo berhadapan dengan netijen +62 wkwkwkwkwkw….

Calling Policy Busy on Busy (Busy Options)

Saat kita tengah melakukan panggilan MSTeams atau sedang di tengah pertemuan daring dengan MSTeams, kadang masih bisa menerima panggilan masuk. Dan ternyata di beberapa negara/budaya, hal ini termasuk tidak sopan. Jika kebetulan sedang bekerja sama dengan orang lain yang memiliki kebudayaan tersebut, alangkah baiknya kita mengatur panggilan masuk ditengah sedang menerima panggilan atau sedang tengah konferensi daring.

Busy on Busy ini dapat diaktifkan melalui web GUI portal MSTeams, dan juga bisa dilakukan melalui perintah powershell Set-CSTeamsCallingPolicy dengan opsi:

  • Enabled – yang akan langsung menolak panggilan jika ada panggillan kedua masuk ditengah kita sedang menerima panggilan lain atau sedang dalam pertemuan daring.
  • Unanswered – yang dikombinasikan dengan pengaturan berikutnya dengan mengalikan panggilan ke voicemail, atau ke pengguna lain sebagai perwakilan kita,
  • Disabled – ini adalah setting default.

Untuk setting dari TAC (Teams Admin Console), dapat melalui menu Voice -> Calling policies -> Global (Org-wide default).

Tautan:

Routing Dua SBC untuk Microsoft Teams Direct Routing

Jadi ada kebutuhan untuk menyambungkan Microsoft Teams ke Cloud PBX kantor, tapi sekaligus masih bisa menjalankan Demo untuk IVR yang full menggunakan “PBX” Microsoft Teams.

Saat ini ada dua SBC yang sudah terdaftar di OnlinePstnGateway kantor, yang satu untuk integrasi ke Cloud PBX, dan yang satu bener-benef full MSTeams Direct Routing yaitu sbc01.ofon.co.id dan sbc02.ofon.co.id, yang bisa dilihat dengan perintah Get-CsOnlinePstnGateway. Semua panggilan ke ekstensi (format nomer ekstensi 4 digit) CloudPBX akan dilewatkan sbc02.ofon.co.id, dan panggilan ke offnet (landline dan mobile) akan dilewatkan melalui kedua sbc tersebut.

Langkah-langkahnya seperti berikut:

  • Buat container baru dengan nama DualSBC untuk mengelompokkan rute panggilan di atas yang nantinya dijadikan satu ke OnlineVoiceRoutingPolicy baru.
Set-CsOnlinePstnUsage -Identity Global -Usage @{Add="DualSBC"}
  • Lalu buat rule baru dengan nama, misal, SBC2CloudPBX panggilan ke ekstensi (4 digit) untuk diarahkan ke sbc02.ofon.co.id (perhatikan format regexnya):
New-CsOnlineVoiceRoute -Identity "SBC2CloudPBX" -NumberPattern "^\d{4}$" -OnlinePstnGatewayList sbc02.ofon.co.id -Priority 0 -OnlinePstnUsages DualSBC
  • Dan untuk panggilan ke offnet kita buatkan rule baru dengan nama, misal, SBC2PSTN melaui sbc01.ofon.co.id dan sbc02.ofon.co.id:
New-CsOnlineVoiceRoute -Identity "SBC2PSTN" -NumberPattern ".*" -OnlinePstnGatewayList sbc01.ofon.co.id, sbc02.ofon.co.id -Priority 10 -OnlinePstnUsages "DualSBC"
  • Setelah itu kumpulkan kedua OnlineVoiceRoute di atas menjadi satu OnlineVoiceRoutingPolicy:
New-CsOnlineVoiceRoutingPolicy -Identity "DualSBC" -OnlinePstnUsages "DualSBC"
  • Dan terakhir, sematkan policy baru tersebut ke pengguna MSTeams Phone System:
Grant-CsOnlineVoiceRoutingPolicy -Identity user@domain.tld -PolicyName DualSBC
  • Test panggilan.

Pranala Luar:

  • https://docs.microsoft.com/en-us/powershell/module/skype/set-csonlinepstnusage?view=skype-ps
  • https://docs.microsoft.com/en-us/powershell/module/skype/new-csonlinevoiceroute?view=skype-ps
  • https://docs.microsoft.com/en-us/powershell/module/skype/new-csonlinevoiceroutingpolicy?view=skype-ps
  • https://blogs.perficient.com/2018/06/28/direct-routing-for-microsoft-teams-deep-dive-part-4/

[tips] Problem Perintah Connect-MicrosoftTeams Tidak Dikenali

Sering beberapa kali pada saat pindah laptop/PC untuk mengakses Microsoft Teams cmdlet mengalami kendala perintah tidak dikenali seperti berikut ini:

PS C:\windows\system32> Install-Module MicrosoftTEams
PS C:\windows\system32> Connect-MicrosoftTeams
Connect-MicrosoftTeams : The term 'Connect-MicrosoftTeams' is not recognized as the name of a cmdlet, function, script
file, or operable program. Check the spelling of the name, or if a path was included, verify that the path is correct
and try again.
At line:1 char:1
+ Connect-MicrosoftTeams
+ ~~~~~~~~~~~~~~~~~~~~~~
    + CategoryInfo          : ObjectNotFound: (Connect-MicrosoftTeams:String) [], CommandNotFoundException
    + FullyQualifiedErrorId : CommandNotFoundException

Kalau dibaca-baca di beberapa mailing-list, ini karena environment PowerShell untuk keamanan terhadap script yang tidak dikenal dan berbahaya. Tapi ya belum paham-paham banget detailnya bagaimana. Cuma dapat saran untuk menjalankan perintah berikut ini:

PS C:\windows\system32> Set-ExecutionPolicy -ExecutionPolicy RemoteSigned

Lalu pilih All jika muncul pertanyaan berikut:

Execution Policy Change
The execution policy helps protect you from scripts that you do not trust. Changing the execution policy might expose
you to the security risks described in the about_Execution_Policies help topic at
https:/go.microsoft.com/fwlink/?LinkID=135170. Do you want to change the execution policy?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): a

Setelah itu kita dapat menjalakan MSTeams CmdLet. Dari petunjuk tersebut juga diarahkan untuk membaca doc di https:/go.microsoft.com/fwlink/?LinkID=135170.

Bagaimana kalo di Ubuntu?

Jika menjalankan cmdlet Microsoft Teams dari powershell Ubuntu, tidak memerlukan setting policy seperti di atas. Setelah menginstall module, langsung bisa menjalankan Connect-MicrosoftTeams.

Tautan

Akses Microsoft Teams dari Powershell Ubuntu

Akhirnya module MicrosoftTeams yang untuk menggantikan SkypeOnlineConnector dapat juga digunakan di Linux, terutama distro Ubuntu. Setupnya cukup mudah seperti yang ada di postingan https://www.otakudang.org/?p=1097. Berikut tangkapan layar ketika menjalankan perintah Install-Module MicrosoftTeams:

Dan untuk login ke Microsoft Teams admin console dengan perintah Connect-MicrosoftTeams (akan muncul login tab di browser yang menanyakan informasi login admin):

Muncul beberapa warning tapi bisa diabaikan. Berikutnya test perintah , misal, untuk Direct Routing:

PS /home/godril> Get-CsOnlinePSTNGateway | Select-Object -Property Identity

Identity
--------
sbc01.ofon.biz
sbc02.ofon.biz
sbc03.ofon.biz

Siplah! Jadi ndak harus buka laptop Windows lagi jika sedang di station Ubuntu.

Module MicrosoftTeams sebagai pengganti SkypeOnlineConnector

Mungkin sehubungan dengan akan pensiunnya Skype for Business Online, module administrasi powershell untuk MSTeams juga akan diganti. Jika pernah membaca postingan persiapan setup Direct Routing di postingan Microsoft Teams Phone System (Tulisan 2) – otakudang.org (v2.0) , masih menggunkana modul SkypeOnlineConnector. Yang baru menurut postingan di Download and install the Skype for Business Online Connector module – Skype for Business Online | Microsoft Docs.

Cara installnya begini:

PS C:\WINDOWS\system32> Install-module microsoftteams                                                                                                                                                                                           NuGet provider is required to continue
PowerShellGet requires NuGet provider version '2.8.5.201' or newer to interact with NuGet-based repositories. The NuGet
 provider must be available in 'C:\Program Files\PackageManagement\ProviderAssemblies' or
'C:\Users\tunju\AppData\Local\PackageManagement\ProviderAssemblies'. You can also install the NuGet provider by running
 'Install-PackageProvider -Name NuGet -MinimumVersion 2.8.5.201 -Force'. Do you want PowerShellGet to install and
import the NuGet provider now?
[Y] Yes  [N] No  [S] Suspend  [?] Help (default is "Y"): yes

Untrusted repository
You are installing the modules from an untrusted repository. If you trust this repository, change its
InstallationPolicy value by running the Set-PSRepository cmdlet. Are you sure you want to install the modules from
'PSGallery'?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "N"): yes

Tautan:

Microsoft Teams Call Transfer

Karena pada dasarnya Microsoft Teams ini semacam PBX bermerk Microsoft, salah satu fiturnya tentu ada yang namanya call transfer, walaupun istilahnya agak berbeda sedikit dengan PBX pada umumnya. Di Microsoft Teams (selanjutnya saya sebut sebagai MSTeams saja biar ndak ribet ngetiknya), menyebutnya sebagai Transfer now untuk blind (call) transfer, dan Consult then transfer untuk attended (call) transfer. Kurang ribet gimana coba?

Transfer now

Blind (call) transfer adalah meneruskan panggilan ke nomor telepon atau ekstensi tujuan tanpa menanyakan terlebih dahulu apakah orang yang tertuju bersedia mengangkat telepon atau tidak. Jadi jika orang tertuju tidak ada di tempat, maka panggilan akan berdering terus sampai dengan ring timeout atau penelpon memutuskan untuk menutup telepon. Blind transfer biasanya terjadi jika:

  • panggilan terjadi di dalam satu organisasi saja, dan biasanya dengan peer.
  • Anda tipe BOFH.

Transfer now di Desktop app

Untuk melakukan Tranfer now di Desktop app cukup mudah. Ketika menerima panggilan masuk dan hendak mentransfer panggilan tersebut, klik ikon elipsis () di kiri atas, lalu pilih Transfer.

Lalu di bagian isian Invite someone or dial a number, isikan nama kontak yang hendak dituju. Jika nama kontak berada di tenant yang sama, menuliskan beberapa huruf depan saja akan memunculkan kemungkinan nama yang hendak dituju:

Jika nama sudah muncul dari kemungkinan yang ditampilkan, klik kontak tersebut. Jika belum, teruskan mengetik nama kontak. Jika sudah klik nama tersebut.

Selain dapat melakukan transfer, panggilan masuk juga dapat ditransfer ke voicemail nomer tertuju apabila orang yang tertuju sedang tidak di tempat (sedang cuti, atau tugas ke luar kota), sehingga pemanggil dapat meninggalkan pesan penting yang dapat didengarkan kembali oleh orang yang dituju melalui MSTeams atau surel.

Jika kita mengaktifkan Ring back if there’s no answer, maka panggilan tersebut akan kembali ke kita jika transfer tidak dijawab oleh orang tertuju dengan pesan seperti berikut:

Jika mengaktifkan Ring back if there’s no answer, maka kita tidak dapat transfer panggilan ke voicemail nomer tertuju.

Selain dapat melakukan transfer panggilan ke akun MSTeams di tenant yang sama, kita juga dapat melakukan transfer panggilan ke akun MSTeams tenant yang berbeda (beda organisasi), dengan catatan, MSTeams sudah dilakukan federation, yaitu memperbolehkan satu domain tenant berbicara dengan domain tenant lain di luar organisasi tersebut. Ijin akses ini harus dua arah. Misal, jika tenant MSTeams ofon.co.id memperbolehkan semua penggunanya menghubungi langsung ke pengguna di domain tenant microsoft.com, maka sebaliknya di MSTeams tenant microsoft.com juga harus memperbolehkan komunikasi dari MSTeams ofon.co.id.

Transfer panggilan lain yang diperbolehkan adalah ke nomer PSTN eksternal atau ke nomor mobile jika trunk operator memperbolehkan.

Apa maksudnya “jika trunk operator memperbolehkan?”

Salah satu implementasi yang pernah saya lakukan adalah menghubungkan MSTeams dengan nomer PSTN onpremise yang turun ke lokasi kantor pelanggan berupa satu line analog. Satu line analog ini berarti 1 conccurent call baik masuk ataupun keluar tapi tidak dua-duanya.

Jadi jika ada panggilan masuk ke nomer tersebut, maka line analog sudah terpakai, sehingga tidak memungkinkan melakukan transfer panggilan ke nomer PSTN atau nomor mobile di luar organisasi tersebut.

Untuk melakukan transfer panggilan ke nomor telepon lain di luar organisasi, cukup masukkan nomer telepon lengkap seperti berikut:

lalu klik Transfer.

Transfer now di mobile app

Ketika panggilan masuk ke mobile app, untuk melakukan transfer panggilan, pilih menu elpisis () di layar bagian bawah, lalu pilih Transfer.

Di bagian “Search for people” isikan nama kontak tertuju. Jika kontak tersebut ada di dalam MSTeams tenant, maka akan muncul secara otomatis:

Ketuk di daftar nama tersebut untuk mentrasnfer panggilan.

Atau, kita bisa memasukkan nomor telepon eksternal seperti berikut:

ketuk nomor telepon eksternal untuk mentransfer panggilan ke nomor tersebut. Jika tranfer berasil akan muncul status seperti berikut:

Consult then transfer

Attended (call) transfer adalah transfer panggilan yang agak sopan karena penerima telepon akan menanyakan terlebih dahulu ke orang tujuan apakah bersedia atau available untuk menerima panggilan atau tidak. Di MSTeams, kita dapat menanyakan dengan dua cara ketika melalui desktop app, yaitu dengan melakukan panggilan terlebih dahulu, atau mengirimkan pesan chat. Sedangkan untuk mobile app per tanggal tulisan ini, hanya dapat melakukan attended transfer dengan bertanya melalui chat saja, karena tidak ada menu panggilan suara. Mungkin nanti-nanti akan ada rilis untuk kemampuan tersebut.

Consult then transfer di Desktop App

Di dalam dekstop app kita dapat menanyakan telepon tertuju untuk transfer panggilan melalui panggilan suara atau pesan chat. Di menu elipsis () kanan atas, pilih Consult then transfer.

ketika memilih kontak tertuju, kita akan diberikan dua pilihan untuk memberitahukan melalui panggilan telepon atau via chat seperti berikut:

Di contoh ini kita pilihh Teams audio call. Jika nomer tertuju bersedia menerima panggilan telepon, maka untuk mentransfer panggilan cukup tekan Transfer :

Jika nomer tertuju tidak bersedia menerima telepon atau sedang tidak berada di tempat, maka pilih Leave, lalu di halaman penerimaan panggilan tekan Resume untuk kembali berbicara ke nomer pemanggil yang sebelumnya masuk hold.

Sedangkan pemberitahuan melalui Chat akan mengirimkan pesan otomatis seperti berikut:

jika nomer tertuju bersedia menerima panggilan, maka cukup tekan tombol Transfer di atas. Apabila tidak, kembali ke layar utama panggilan dan tekan Resume untuk berbicara kembali ke nomor pemanggil.

This image has an empty alt attribute; its file name is image-20.png

Consult then transfer dengan Mobile app

Untuk mobile app, pilih elipsis lalu pilih menu Transfer -> Consult first.

Karena pilihannya hanya pemberitahuan via Chat, maka otomatis akan digenerate pesan seperti berikut:

Perhatikan dua icon di kanan atas:

Icon handle telepon di sebelah kanan untuk melakukan transfer jika tertuju bersedia menerima telepon, dan gambar icon panah untuk melakukan Resume panggilan jika tidak tersambung dan kembali berbicara ke nomor pemanggil.

Mengaktifkan A2billing di Issabel

Saya tau ini ide buruk, bahkan developernya pun sudah mengingatkan bahwa A2billing ini memiliki flaw dan sudah dari 6 tahun yang lalu (saat tulisan ini dibuat) versi terakhihrnya keluar. Tapi karena suatu hal, situasi mengharuskan saya mengaktifkannya.

Karena alasan di atas, A2billing tidak akan ditemukan di laman Addons. Jadi kudu diinstall langsung dari yum:

yum install issabel-a2billing.noarch issabel-a2billing-callback_daemon.noarch -y

Setelah itu buat database baru di MariaDB dengan patokan credential di /etc/a2billing.conf. Ada baiknya diubah dulu agar tidak menggunakan nama db bawaan, username dan password. Tapi agar bisa jalan saja, kira-kira default cuplikan credential dari file di atas adalah sebagai berikut:

[database]
hostname = localhost
port = 3306
user = a2billinguser
password = a2billing
dbname = mya2billing
; dbtype setting can either be mysql or postgres
dbtype = mysql

Lalu login ke MariaDB dengan akun administrator (dalam contoh di sini saya menggunakan root, untuk membuat database mya2billing dan user a2billinguser dengan password a2billing.

CREATE DATABASE mya2billing;
GRANT ALL PRIVILEGES ON mya2billing.* TO 'a2billinguser '@'localhost' IDENTIFIED BY 'a2billing';
flush privileges;

Setelah itu masuk ke direktori /usr/share/a2billing/DataBase/mysql-5.x dan jalankan script install-db.sh:

cd /usr/share/a2billing/DataBase/mysql-5.x
./install-db.sh

isikan informasi database, user dan password sesuai dengan di atas.

Terakhir, reset semua password admin Issabel dan DB dengan perintah:

/usr/bin/change-passwords

Lalu login ke portal A2billing yang berlokasi di laman https://<url_issabel>/a2billing/admin/index.php dengan username/password admin Issabel.

Done.

2020

Sudah di pehujung tahun lagi. 2020 merupakan tahun yang benar-benar menguji. Bahkan sejak tanggal 1 Januari 2020 sebelum matahari terbit, langsung dihajar dengan banjir.

Tahun ini kami lebih siap, dan semoga tidak lengah.

SELAMAT TAHUN BARU 2021!