Sternchen 1.8 bis 16

Vor ungefähr 10 Jahren hatte unser Unternehmen eine Station ohne Sip-Unterstützung und der erste Asterisk 1.6 wurde über PRI-Streams verbunden. Anschließend wollte ich Weiterleitungen mit Nummernersetzung und Kategoriemanagement, und es wurde chan_ss7 von netfors gefunden, das nach dem Ablegen mit einer Datei alles kann. Die Zeit verging und PJSIP wurde in Version 13 von Aterisk veröffentlicht, und chan_ss7 wurde nur unter 1.8 kompiliert. Und regelmäßig, alle sechs Monate, gab es Probleme mit Unterbrechungen, die sich in der verschwindenden Stimme manifestierten. Sie erschienen und gingen von selbst vorbei.



Der Hauptbahnhof wurde ersetzt und lernte Schluck und es wurde beschlossen, Asterisk auf 16 zu aktualisieren.



Die Installation wurde auf Clean Debian 10 durchgeführt. Die Repositorys haben Version 16.2.1, daher werden wir aus Quellen erstellen. Laden Sie das neueste Asterisk 16 herunter, ich hatte es am 16.12.0:



cd /usr/src
wget http://downloads.asterisk.org/pub/telephony/asterisk/asterisk-16-current.tar.gz


Packen Sie es in einen Ordner aus und gehen Sie dorthin:



tar xzvf asterisk-16-current.tar.gz
cd asterisk-16.*


Lassen Sie uns nun alle erforderlichen Abhängigkeiten in Debian installieren. Es ist nicht erforderlich, sie manuell zu durchlaufen. Alle Abhängigkeiten werden in einem Skript gesammelt, das ausgeführt werden muss.



contrib/scripts/install_prereq install


Laden Sie als Nächstes die MP3-Quellen herunter, die zum Erstellen des MP3-Moduls erforderlich sind.



contrib/scripts/get_mp3_source.sh


Alle Abhängigkeiten sind installiert und Sie können mit der Assembly fortfahren.



./configure
make menuselect


Zu dem, was standardmäßig installiert ist, füge ich hinzu:



  • Auf der ersten Registerkarte format_mp3.
  • In Core Sound Packages gebe ich russische RU-WAV-Sounds an.
  • In Extras Sound Packages wähle ich Englisch EN-WAV, leider gibt es kein Russisch.


Nachdem Sie die Einstellungen akzeptiert haben, klicken Sie auf Speichern und beenden. Kompilieren:



./configure
make


Dann erstellen und installieren wir das Paket mit checkinstall:



checkinstall


Wir geben die Version, den Paketnamen usw. ein. Ich schreibe den Paketnamen asterisk-16, damit er nicht mit dem in den Repositorys in Konflikt steht.



checkinstall


Fügen Sie einen Benutzer hinzu, um Asterisk auszuführen und Ordnerberechtigungen zu erteilen:



adduser --system --group --home /var/lib/asterisk --no-create-home --gecos "Asterisk" asterisk
usermod -a -G dialout,audio asterisk
chown -R asterisk: /var/{lib,log,run,spool}/asterisk /usr/lib/asterisk /etc/asterisk


Wir konfigurieren Asterisk so, dass es unter diesem Benutzer ausgeführt wird. Fügen Sie dazu die Parameter zur Konfiguration / etc / default / asterisk hinzu:



AST_USER="asterisk"
AST_GROUP="asterisk"


Nach dem Bearbeiten von /etc/asterisk/modules.conf. Wir entfernen unnötige Dinge, zum Beispiel:



noload => chan_sip.so


Wir starten ein Sternchen in der Konsole und prüfen, ob keine Fehler vorliegen:



asterisk -cvvv


Wenn alles in Ordnung ist, fügen Sie den Dienst zum Start hinzu und führen Sie Folgendes aus:



systemctl enable asterisk
systemctl start asterisk


Damit ist die Installation abgeschlossen und Sie können mit der Einrichtung fortfahren.



In PJSIP hat sich die Syntax radikal geändert und es funktioniert nicht nur zum Kopieren der Konfiguration. Es gibt einen Konfigurationskonverter im Quellordner contrib / scripts / sip_to_pjsip / sip_to_pjsip.py, aber das Format mit separatem aor, identify usw. nicht bequem und eine Ausgabe wurde mit pjsip_wizard gefunden. Wir müssen nur einen Transport in /etc/asterisk/pjsip.conf erstellen.



[transport-udp]
type = transport
protocol = udp
bind = x.x.x.x
external_media_address = x.x.x.x
external_signaling_address = x.x.x.x


Ändern Sie xxxx in die IP-Adresse, die Sie abhören möchten.



Wir erstellen eine Vorlage für den Benutzer:



[main-template](!)
type=wizard
transport=transport-udp
accepts_auth = yes
accepts_registrations = yes
aor/qualify_frequency = 100
aor/max_contacts = 1
aor/remove_existing = yes
inbound_auth/auth_type = userpass
endpoint/disallow = all
endpoint/allow = alaw
endpoint/dtmf_mode = rfc4733
endpoint/deny = 0.0.0.0/0
endpoint/context = city_out
endpoint/direct_media = no
endpoint/device_state_busy_at = 1
endpoint/language = ru
endpoint/sdp_session = MySDp


Und dann hat ein gewöhnlicher Benutzer bereits eine Konfiguration:



[100](main-template)
endpoint/permit=192.168.100.1
inbound_auth/username=100
inbound_auth/password=P@$$Word123
endpoint/callerid='' <100>


Dies ist dem Format chan_sip bereits sehr ähnlich, und wir ändern die Namen der Parameter im Editor, indem wir die Wörter ersetzen.



Für Kunden hinter nat erstellen wir anstelle von nat = yes eine Hotelvorlage mit zusätzlichen Zeilen:



endpoint/rtp_symmetric=yes
endpoint/force_rport=yes
endpoint/rewrite_contact=yes


Damit sich pjsip wie chan_sip verhält, d.h. Fügen Sie ein Peer-One-Gerät hinzu. Einige chinesische Telefone senden manchmal aus irgendeinem Grund eine zweite Registrierung von einem anderen Port, wenn der erste in Kraft ist, und dies ermöglicht es Ihnen, diesen Fehler zu umgehen.



aor/max_contacts = 1
aor/remove_existing = yes


Eine der Funktionen von PJSIP ist die Mehrfachregistrierung, die in chan_sip nicht unterstützt wurde. Ändern Sie aor / max_contacts auf den erforderlichen Betrag und rufen Sie den Wählplan auf:



exten => _XXX,1,Dial(${PJSIP_DIAL_CONTACTS(${EXTEN})})


Es ist sehr praktisch geworden, dass Sie Abfanggruppen nach Namen und nicht nach Zahlen wie zuvor festlegen können:



endpoint/named_call_group = aveks
endpoint/named_pickup_group = aveks


Der alte chan_sip hatte einen Call-Limit-Parameter, der die Anzahl der Peer-Konversationen begrenzte. Das neue chan_pjsip hat dies nicht. In allen Chats wird empfohlen, Aufrufe durch den GROUP-Parameter zu begrenzen. Aus irgendeinem Grund wird nirgends in den Handbüchern der Parameter endpoint / device_state_busy_at verwendet und zur Datei extensions.conf zum eingehenden und ausgehenden Kontext hinzugefügt:



exten => _X.,1,GoSub(subDeviceBusy,s,1(${EXTEN},${CALLERID(num)}))
[subDeviceBusy]
exten => s,1,NoOp(PJSIP/${ARG1} has state ${DEVICE_STATE(PJSIP/${ARG1})})
exten => s,n,NoOp(CallerId is ${ARG2})
exten => s,n,ExecIf($["${DEVICE_STATE(PJSIP/${ARG1})}" = "BUSY"]?Hangup(17))
exten => s,n,Return


Sie können die Zeilen in der Asterisk-Konsole anzeigen:



pjsip show endpoint 100
Endpoint:  100/100                                      Not in use    0 of 1
     InAuth:  100-iauth/100
        Aor:  100                                            3
      Contact:  100/sip:100@192.168.0.10:5062       c34b4c2d4d Avail         7.981
  Transport:  transport-udp             udp      0      0  192.168.0.1:5060


Hier zeigt 0 von 1, wie viele Leitungen von den möglichen belegt sind.



Im Jahr 16 wurden Asterisk-Makros veraltet, sodass sie auf Gosub neu geschrieben werden mussten.



Um die Nummer des Anrufers beim Anrufen zu übertragen, fügen Sie beim Anruf den Umleitungsheader zu EINLADEN hinzu:



exten => 2222222,n,Dial(PJSIP/8XXXXXXXXXX@trunk,,tTb(add_diversion^${EXTEN}^1)
[add_diversion]
exten => _XXXXXXX,1,Set(PJSIP_HEADER(add,Diversion)=<sip:XXX${EXTEN}@x.x.x.x>\;reason=unconditional\;screen=yes\;privacy=off)
exten => _XXXXXXX,n,Return()


Hier ist 2222222 die Städtenummer, unter der die Umleitung erfolgt, 8XXXXXXXXXX ist die Nummer, an die die Weiterleitung erfolgt, und fügen Sie bei Bedarf die Vorwahl anstelle von XXX



hinzu.



Vergessen Sie nicht, die Dokumentation

pjsip_wizard.conf

pjsip.conf zu verwenden



All Articles