{"id":1524,"date":"2024-04-18T17:47:00","date_gmt":"2024-04-18T15:47:00","guid":{"rendered":"https:\/\/blog.kolatzek.org\/wblog\/?p=1524"},"modified":"2024-04-19T17:59:50","modified_gmt":"2024-04-19T15:59:50","slug":"wenn-from-pstn-toheader-ohne-did-und-ohne-to-auskommen-muss","status":"publish","type":"post","link":"https:\/\/blog.kolatzek.org\/wblog\/1524\/wenn-from-pstn-toheader-ohne-did-und-ohne-to-auskommen-muss","title":{"rendered":"Wenn from-pstn-toheader ohne &#8222;DID&#8220; und ohne &#8222;to&#8220; auskommen muss"},"content":{"rendered":"\n<p>Zur Abwechslung ein Post zu Telefonanlagen auf <a href=\"https:\/\/www.asterisk.org\/\">Asterisk<\/a>-Basis wie der (teil-)opens-source-L\u00f6sung <a href=\"https:\/\/www.freepbx.org\/\">FreePBX<\/a>. Einige Leser erahnen sicher schon, worum es geht: um b\u00f6se, b\u00f6se, b\u00f6se gratis-Telefondienstanbieter wie die von <a href=\"https:\/\/www.sipgate.de\/blog\/kategorie\/sipgate-basic\">Sipgate Basic<\/a> oder <a href=\"https:\/\/kundenkonto.fonial.de\/signup\/register\/4\">Fonial Free<\/a>. Man kann dort mehrere Telefonnummern bekommen, aber wenn man die einzelnen Trunks anmeldet, bekommt man gar nicht mit, \u00fcber welchen ein Gespr\u00e4ch eingegangen ist, weil die Zielrufnummer nicht mitgeliefert wird. Ohne diese hat die Telefonanlage (die einen solchen Anruf annimmt) gar keine Chance, zu unterscheiden, f\u00fcr wen der Anruf gilt. Doch es gibt eine L\u00f6sung!<\/p>\n\n\n\n<!--more-->\n\n\n\n<p>Ich bin ein gro\u00dfer Fan von Herrn Griebsch, der in seiner &#8222;<a href=\"https:\/\/blog.griebsch.de\/category\/voip\/\">Themenreihe FreePBX<\/a>&#8220; mit einem echt netten s\u00e4chsischen Dialekt in vielen Videos erkl\u00e4rt, wie diese L\u00f6sung funktioniert oder welche Bedeutung einige Einstellungen haben. Bei ihm habe ich mehr oder weniger die Handhabung von FreePBX gelernt. Er hat auch eine gute <a href=\"https:\/\/blog.griebsch.de\/themenreihe-freepbx-15-asterisk-16-teil-2-5-registrieren-am-sipgate-basic-anschluss\/\">Anleitung f\u00fcr Sipgate Basic<\/a> erstellt, in der mein Problem das erste Mal erw\u00e4hnt wurde. Wenn im SIP-Protokoll der Benutzername als Adressat genannt wird und nicht die Zielrufnummer, kann der Anruf f\u00fcr jeden gelten. Bei einem einfachen Telefon ist das kein Problem, denn es klingelt bei jedem ankommenden Anruf. Eine Telefonanlage darf es sich aber nicht leisten, alle angeschlossenen Telefone klingeln zu lassen. Wenn man bei Sipgate Basic nur eine Telefonnummer nutzt (zul\u00e4ssig w\u00e4ren zwei aber nur ein Benutzer, der immer angeklingelt wird), ist die Sache recht einfach.<\/p>\n\n\n\n<p>In mein Beispiel wird die Sipgate-Rufnummer <strong>0123456789<\/strong> angerufen. Ich setze sie mir in __DID f\u00fcr sp\u00e4tere Verwendung. Doch zuerst muss ich den Kontext erweitern, in dem die Anrufe des Trunks ankommen. In der Konfiguration des Trunks f\u00fcr Sipgate (im Adminbereich unter <em>connectivity<\/em> -&gt; <em>trunks<\/em>) wechselt man in den Reiter &#8222;<em>pjsip settings<\/em>&#8220; und uns setzt im Unterrreiter &#8222;<em>general<\/em>&#8220; in der Zeile &#8222;<em>context<\/em>&#8220; einen erfunden aber eindeutigen Namen des Trunks ein. In unserem Fall ist es <strong>from-trunk-pjsip-Sipgate-phone-custom<\/strong>. Damit leiten wir alles um, war \u00fcber die Sipgate-Registrierung geht (dem sog. Trunk) in den Kontext, den wir nach Belieben an einer anderen Stelle erweitern k\u00f6nnen. Die Einstellungen, die nicht aus dem Web-GUI von FreePBX stammen und mit etwas Sachkenntnis frei programmiert werden k\u00f6nnen, werden nicht in <em>extensions.conf<\/em> oder <em>extensions_additional.conf<\/em> gespeichert, denn diese sind f\u00fcr den Benutzer Tabu! Im Adminbereich im Men\u00fc <em>admin<\/em> gibt es den Unterpunkt <em>config edit<\/em> wo solche &#8222;custom&#8220;-Konfigurationsdateien bearbeitet werden k\u00f6nnen, darunter die <strong>extensions_custom.conf<\/strong> welche am beste daf\u00fcr geeignet w\u00e4re. Dort trage ich ein:<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;from-trunk-pjsip-Sipgate-phone-custom]\nexten => _.,1,Set(__DID=\"0123456789\")\n same => n,NoOp(${CONTEXT} -> ${EXTEN} -> ${DID} as defined in  extensions_custom.conf)\n same => n,Morsecode(hallo)\n same => n,Answer()\n same => n(dest-ext),Goto(from-pstn,0123456789,1)<\/code><\/pre>\n\n\n\n<p>Die bereits erw\u00e4hnte eingespeicherte Variable DID dient uns nun in der Folgezeile dazu, einen Log-Eintrag mit interessanten Daten zu erzeugen. Danach wird zu Test-Zwecken per Morse-Code ein &#8222;hallo&#8220; gepiept und getuutet. Danach beantwortet die Anlage den Anruf gegen\u00fcber Sipgate (Sipgate wei\u00df nun, dass unsere Telefonanlage den Anruf \u00fcbernommen hat) und in der letzten Zeile (&#8222;<strong>n<\/strong>&#8220; ist eine fortlaufende Nummer aber die &#8222;<strong>dest-ext<\/strong>&#8220; ist f\u00fcr andere Scripte eine namentlich adressierbare Zeile) wird mit &#8222;<strong>Goto<\/strong>&#8220; auf den Kontext &#8222;<strong>from-pstn<\/strong>&#8220; umgeleitet und die <strong>Zielrufnummer 0123456789<\/strong> mitgegeben.<\/p>\n\n\n\n<p>Damit kann die Telefonanlage schon was anfangen. Im Kontext <strong>from-pstn<\/strong>, der f\u00fcr die eingehende Anrufe zust\u00e4ndig ist, wird dann geschaut, welche Regel f\u00fcr diese Telefonnummer gilt. (Das -toheader w\u00fcrde selbst versuchen die Rufnummer zu ermittelt aber genau diese wird ja nicht mitgeliefert!) Diese Regeln nennt man im Englischen &#8222;<strong>Inbound Routes<\/strong>&#8220; und im FreePBX-Admin findet man sie im Men\u00fc &#8222;Connectivity&#8220; (da wo auch die Trunks waren). Hier muss man in einer Regel die &#8222;<strong>DID number<\/strong>&#8220; eintragen. Und ratet mal, welche das ist? Die 0123456789 nat\u00fcrlich &#8211; aber nur in diesem Beispiel. Bei Euch ist es die Sipgate-Teleonnummer (und zwar \u00fcberall an stelle von 0123456789).<\/p>\n\n\n\n<p>Was ich mache, ist:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Alle Anrufe aus Sipgate-Trunk  in einen eigenen Kontext (&#8222;Arbeitsbereich&#8220; oder &#8222;Abteilung&#8220; wenn man so will) umleiten<\/li>\n\n\n\n<li>Eine Variable bei diesem &#8222;Anruf&#8220; (man spricht fachm\u00e4nnisch von &#8222;Channels&#8220;) hinterlegen<\/li>\n\n\n\n<li>Den Anruf von Sipgate \u00fcbernehmen (&#8222;ich k\u00fcmmere mich darum&#8220;)<\/li>\n\n\n\n<li>Und den Anruf mit der richtigen Zielrufnummer wieder in den &#8222;Eingang&#8220; umleiten, damit die Eingang-Regeln eingesetzt werden k\u00f6nnen<\/li>\n<\/ul>\n\n\n\n<p>Das l\u00e4sst sich nat\u00fcrlich steigern und im <a href=\"https:\/\/blog.kolatzek.org\/wblog\/1538\/drei-rufnummern-drei-trunks-null-zusammenhang\" data-type=\"post\" data-id=\"1538\">Folgebeitrag<\/a> werde ich zeigen, wie man mit mehreren Nummer ohne to-header umgehen kann.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Zur Abwechslung ein Post zu Telefonanlagen auf Asterisk-Basis wie der (teil-)opens-source-L\u00f6sung FreePBX. Einige Leser erahnen sicher schon, worum es geht: um b\u00f6se, b\u00f6se, b\u00f6se gratis-Telefondienstanbieter wie die von Sipgate Basic oder Fonial Free. Man kann dort mehrere Telefonnummern bekommen, aber wenn man die einzelnen Trunks anmeldet, bekommt man gar nicht mit, \u00fcber welchen ein Gespr\u00e4ch [&hellip;]<\/p>\n","protected":false},"author":2,"featured_media":1531,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"_sitemap_exclude":false,"_sitemap_priority":"","_sitemap_frequency":"","ocean_post_layout":"","ocean_both_sidebars_style":"","ocean_both_sidebars_content_width":0,"ocean_both_sidebars_sidebars_width":0,"ocean_sidebar":"","ocean_second_sidebar":"","ocean_disable_margins":"enable","ocean_add_body_class":"","ocean_shortcode_before_top_bar":"","ocean_shortcode_after_top_bar":"","ocean_shortcode_before_header":"","ocean_shortcode_after_header":"","ocean_has_shortcode":"","ocean_shortcode_after_title":"","ocean_shortcode_before_footer_widgets":"","ocean_shortcode_after_footer_widgets":"","ocean_shortcode_before_footer_bottom":"","ocean_shortcode_after_footer_bottom":"","ocean_display_top_bar":"default","ocean_display_header":"default","ocean_header_style":"","ocean_center_header_left_menu":"","ocean_custom_header_template":"","ocean_custom_logo":0,"ocean_custom_retina_logo":0,"ocean_custom_logo_max_width":0,"ocean_custom_logo_tablet_max_width":0,"ocean_custom_logo_mobile_max_width":0,"ocean_custom_logo_max_height":0,"ocean_custom_logo_tablet_max_height":0,"ocean_custom_logo_mobile_max_height":0,"ocean_header_custom_menu":"","ocean_menu_typo_font_family":"","ocean_menu_typo_font_subset":"","ocean_menu_typo_font_size":0,"ocean_menu_typo_font_size_tablet":0,"ocean_menu_typo_font_size_mobile":0,"ocean_menu_typo_font_size_unit":"px","ocean_menu_typo_font_weight":"","ocean_menu_typo_font_weight_tablet":"","ocean_menu_typo_font_weight_mobile":"","ocean_menu_typo_transform":"","ocean_menu_typo_transform_tablet":"","ocean_menu_typo_transform_mobile":"","ocean_menu_typo_line_height":0,"ocean_menu_typo_line_height_tablet":0,"ocean_menu_typo_line_height_mobile":0,"ocean_menu_typo_line_height_unit":"","ocean_menu_typo_spacing":0,"ocean_menu_typo_spacing_tablet":0,"ocean_menu_typo_spacing_mobile":0,"ocean_menu_typo_spacing_unit":"","ocean_menu_link_color":"","ocean_menu_link_color_hover":"","ocean_menu_link_color_active":"","ocean_menu_link_background":"","ocean_menu_link_hover_background":"","ocean_menu_link_active_background":"","ocean_menu_social_links_bg":"","ocean_menu_social_hover_links_bg":"","ocean_menu_social_links_color":"","ocean_menu_social_hover_links_color":"","ocean_disable_title":"default","ocean_disable_heading":"default","ocean_post_title":"","ocean_post_subheading":"","ocean_post_title_style":"","ocean_post_title_background_color":"","ocean_post_title_background":0,"ocean_post_title_bg_image_position":"","ocean_post_title_bg_image_attachment":"","ocean_post_title_bg_image_repeat":"","ocean_post_title_bg_image_size":"","ocean_post_title_height":0,"ocean_post_title_bg_overlay":0.5,"ocean_post_title_bg_overlay_color":"","ocean_disable_breadcrumbs":"default","ocean_breadcrumbs_color":"","ocean_breadcrumbs_separator_color":"","ocean_breadcrumbs_links_color":"","ocean_breadcrumbs_links_hover_color":"","ocean_display_footer_widgets":"default","ocean_display_footer_bottom":"default","ocean_custom_footer_template":"","ocean_post_oembed":"","ocean_post_self_hosted_media":"","ocean_post_video_embed":"","ocean_link_format":"","ocean_link_format_target":"self","ocean_quote_format":"","ocean_quote_format_link":"post","ocean_gallery_link_images":"on","ocean_gallery_id":[],"footnotes":""},"categories":[8],"tags":[182,183,96,101,184],"class_list":["post-1524","post","type-post","status-publish","format-standard","has-post-thumbnail","hentry","category-software","tag-asterisk","tag-freepbx","tag-server","tag-software-co","tag-telefonie","entry","has-media"],"_links":{"self":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts\/1524","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/users\/2"}],"replies":[{"embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/comments?post=1524"}],"version-history":[{"count":5,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts\/1524\/revisions"}],"predecessor-version":[{"id":1546,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/posts\/1524\/revisions\/1546"}],"wp:featuredmedia":[{"embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/media\/1531"}],"wp:attachment":[{"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/media?parent=1524"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/categories?post=1524"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/blog.kolatzek.org\/wblog\/wp-json\/wp\/v2\/tags?post=1524"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}