Документ описывает способ объединения локального asterisk сервера (13 версии) с облаком webitel. В указанном примере внутренние номера пользователей на стороне webitel начинаются на 33 и имеют длину в 4 символа. Все остальные 4-х значные номера находятся на стороне asterisk:

Реализация

Реализация объединения двух внутренних номерных планов asterisk и webitel:

  1. Создаем SIP регистрацию для сервера Webitel:

    sip.conf
    [webitel]
    type=friend
    host=dynamic
    port=5080
    username=webitel
    secret=webitel-secret-pss
    disallow=all
    allow=alaw
    allow=ulaw
    insecure=invite,port
    canreinvite=no
    trustrpid=yes
    sendrpid=yes
    context=from-webitel
  2. Разрешаем со стороны Webitel звонить на любой внутренний номер asterisk:

    extensions.conf
    [from-webitel]
    exten => _X.,1,Dial(SIP/${EXTEN})
    exten => _X.,n,Hangup
  3. Что бы избежать возможное пересечение внутренних номеров на облачной площадке webitel, все звонки направляем на выделенный в public номер, к примерк 100100, а в заголовке SIP пакета передаем номер, с которым необходимо будет соединить.
    Создаем правило для звонков на внутренние номер webitel, которые начинаются на 33 и содержат 4 знака:

    extensions.conf
    exten => _33XX,1,SIPAddHeader(X-Webitel-To:${EXTEN})
    exten => _33XX,2,Dial(SIP/webitel/100100)
    exten => _33XX,n,Hangup
  4. Применяем настройке на сервере asterisk и создаем в webitel шлюз:
  5. Создаем в default схему для исходящей маршрутизации. Все 4-х значные короткие номера отправляем на сторону сервера asterisk:
    Number: ^(\d{4})$

    default callflow
    [
    	{
    		"ringback": {
    			"call": {
    				"name": "$${ru-ring}",
    				"type": "tone"
    			},
    			"transfer": {
    				"name": "$${ru-ring}",
    				"type": "tone"
    			}
    		}
    	},
    	{
    		"recordSession": {
    			"action": "start",
    			"type": "mp3",
    			"stereo": false
    		}
    	},
    	{
    		"setVar": [
    			"hangup_after_bridge=true"
    		]
    	},
    	{
    		"bridge": {
    			"codecs": [
    				"PCMA",
    				"PCMU"
    			],
    			"endpoints": [
    				{
    					"type": "sipGateway",
    					"dialString": "&reg0.$1",
    					"name": "asterisk",
    					"parameters": [
    						"origination_caller_id_number=${caller_id_number}"
    					]
    				}
    			]
    		}
    	},
    	{
    		"hangup": ""
    	}
    ]


  6. Создаем в public схему для входящей маршрутизации. Все звонки на номер 100100 будут проверяться на наличие заголовке SIP пакетах и переводиться на внутренний номер в webitel.
    Number: 100100

    public callflow
    [
    	{
    		"if": {
    			"expression": "${sip_h_X-Webitel-To}",
    			"then": [
    				{
    					"goto": "default:${sip_h_X-Webitel-To}"
    				}
    			],
    			"else": [
    				{
    					"hangup": "INCOMING_CALL_BARRED"
    				}
    			]
    		}
    	}
    ]
  7. Проверяем звонки.

 

Это один из примеров реализации объединения номерных планов для облачного Webitel. В схеме on-site возможны и другие способы без использования SIP заголовков.