По вашему запросу ничего не найдено :(
Убедитесь, что запрос написан правильно, или посмотрите другие
наши статьи:
Наверняка кто-то из вас хоть раз в жизни получал SMS после звонка в определенную компанию.
Обычно, это просьба оценить работу операторов. Так, например, это сделано у GSM операторов. Также это может быть SMS с благодарностью за обращение от компании или же об актуальных акциях и предложениях.
Сегодня я хотел бы рассказать о том, как Вы можете реализовать подобную функцию с использованием FreePBX
Статья написана по мотивам существующей на данном ресурсе публикации "Оценка оператора после звонка"
У данного метода есть один недостаток - для его работы нужен chan_dongle и тариф с безлимитными SMS. Для тех, у кого нет пресловутого chan_dоngle, есть другой метод, который я постараюсь объяснить.
Для особо нетерпеливых прошу Вас заглянуть в контакты, возможно, я уже там появился :)
В данном методе мы не будем ломать диалплан FreePBX и использовать тяжелую артиллерию в виде MySQL. Итак, приступим.
Для начала открываем конфигурационные файлы, а именно:
/etc/asterisk/extensions_custom.conf
Вносим в него такой кусочек диалплана. В коде я дал комментарии зачем нужны некоторые части:
[send-sms]
exten => _.,1,NoOp(Start sms)
exten => _.,n,DIAL(SIP/${EXTEN},,trg) ;опция g позволяет "проваливаться вниз". ВНИМАНИЕ агент должен использовать вашу технологию (sip или pjsip)
exten => _X.,n,GotoIf($[${DIALSTATUS}=BUSY]?busy:answered) //проверяем, был ли отвечен вызов, вот здесь мы или пропускаем клиента дальше если с ним уже говорили или нет.
exten => _X.,n(busy),Hangup()
exten => _X.,n(answered),Goto(sms,${EXTEN},1)
[sms]
exten => _X.,1,NoOp(Statrt SendSms)
exten => _X.,n,Answer()
same => n,Set(COUNT=1); установка счетчика. По идее, он тут не нужен, но сделан на всякий аварийный случай. Вдруг заклинит и клиента заспамит смс? :)
same => n,Set(RECIVER=Имя донгла в системе); если используете донгл
same => n,Set(RECIPIENT=${CALLERID(num)})
same => n,Set(TEXT="Спасибо что обратились в нашу компанию Рога и копыта"); текст смс
same => n,GotoIf($["${RECIPIENT:0:2}" != "79"]?end); это проверка на принадлежность к мобильным номерам. Уточните формат входящих CALLERID(num) на вашей АТС - с 7 или 8?
same => n,System(/usr/sbin/asterisk -rx 'dongle sms ${RECIVER} 7${RECIPIENT:1} ${TEXT}'); тут отправка с донгла.
same => n,Set(COUNT=$[${COUNT} + 1]); увеличение счетчика (который не нужен, а вдруг)
same => n,GotoIf($["${COUNT}" > "1"]?end); проверка и отправка на завершение
exten => _X.,n(end),Goto(macro-hangupcall,s,1); Конец
Обратите внимание на пометки в диалплане. В частности, Агент должен использовать вашу технологию подключения. Входящие форматы на ваши транки, 7 или 8. Если он еще не унифицирован, то рекомендую это сделать и привести в норму стандарта E164. Если входящие у вас содержат + то, вместо ${RECIPIENT:0:2} сделайте ${RECIPIENT:0:3}
На этом, настройка конфигурационного файла extensions_custom.conf закончена. Теперь открываем файл queues_post_custom.conf и вставляем туда такую строку:
member=Local/4015781@send-sms/n,0,4015781,hint:4015781@ext-local
Где 4015781 номер существующего Агента в очереди. После этого, закрываем файл, перезагружаем диалплан командой dialplan reload и тестируем.
Применять можно, например, для отправки благодарности клиенту с напоминанием времени работы или адреса компании.
Чтобы не огорчить тех, кто не использует донглы или использует GoIP или другие Gsm шлюзы, на мой взгляд, есть более "красивый" метод:
Идем в один из множества веб сервисов для SMS рассылок (названия писать не буду), регистрируемся у них и берем их готовые библиотеки для доступа к API. Я покажу на примере PHP API одной известной компании:
#!/usr/bin/php -q
<?php
#парсим данные из AGI
require(′phpagi.php′);
$agi = new AGI();
$phone = $agi->request[′agi_arg_1′];
text = $agi->request[′agi_arg_2′];
$sender = ′INFORM′;
// !!! Замените API-ключ на свой.
$apikey = ′XXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZXXXXXXXXXXXXYYYYYYYYYYYYZZZZZZZZ′;
$url = ′https://smspilot.ru/api.php′
′?send=′.urlencode( $text )
.′&to=′.urlencode( $phone )
.′&from=′.$sender
.′&apikey=′.$apikey
.′&format=json′;
$json = file_get_contents( $url );
echo $json.′′;
$j = json_decode( $json );
if ( !isset($j->error)) {
echo ′SMS успешно отправлена server_id=′.$j->send[0]->server_id;
} else {
trigger_error( $j->description_ru, E_USER_WARNING );
}
Используем AGI. И в представленном диалплане меняем одну строку, а именно:
same => n,System(/usr/sbin/asterisk -rx 'dongle sms ${RECIVER} ${TEXT}'); тут отправка с донгла.
на:
same => n,AGI(sendsms.php, 7${RECIPIENT:1}, "${TEXT}")
И на этом - все. Чем данный способ лучше? Могу точно сказать, что в подобных сервисах для компаний есть возможность в качестве отправителя зарегистрировать название организации – это явно плюс в копилку лояльности клиента :)
Это значит, что не нужен донг и SMS клиенту приходит не с безликих цифр, а от имени вашей компании в поле отправитель. Это, безусловно, повышает доверие и лояльность получателя SMS.
Надеюсь, что данный метод будет полезен и найдёт применение в ваших бизнес-процессах. Удачи!
Привет, дорогой читатель! Если ты когда-нибудь задавался вопросом – как перенести файл с хостовой машины на виртуальную в Hyper-V, то эта статья для тебя! Дело в том, что не всегда представляется возможным организовать сетевую связность между хостом и виртуальной машиной, а иногда это и вовсе не нужно. К счастью, в Hyper-V предусмотрена простая возможность переноса файлов прямо на виртуальные машины (как Windows так и Linux и другие) с помощью PowerShell и сейчас мы про неё расскажем.
Важно отметить, что данная функционал стал доступен только в 3 версии PowerShell. Поэтому проверьте установленную у себя версию. Для этого в консоли PowerShell введите команду $PSVersionTable
Процесс
Итак, сразу раскроем все карты. Для переноса файлов на гостевые (виртуальные) машины нужно использовать команду со следующим синтаксисом:
Copy-VMFile -Name “Имя виртуальной машины” -SourcePath ?Путь кфайлукоторыйхотим перенести? -DestinationPath ?Путь кпапке на виртуальной машинекуда хотимположить файл? -CreateFullPath -FileSource Host
Основой команды является часть Copy-VMFile, которая, в терминологии PowerShell, называется командлетом (Cmdlet) далее следуют ключи командлета, определяющие параметры и правила выполнения команды. Например, в примере выше, c помощью ключа -Name мы указываем имя виртуальной машины, на которую хотим скопировать файл, путь к которому указываем в ключе -SoucePath. Директория, в которую мы хотим поместить файл на виртуальной машине указывается в ключе -DestinationPath. Ключ -CreateFullPath создаст директорию, если её ещё нет. Ну и -FileSource Host означает, что источником, с которого мы переносим файл является хостовый сервер.
Однако, если вы выполните команду на текущем этапе без предварительной подготовки виртуальной машины, то получите следующую ошибку:
Чтобы этого избежать, необходимо предварительно включить в параметрах виртуальной машины поддержку гостевых сервисов (Guest Services). Для этого зайдите в параметры виртуальной машины, далее выберите Сервисы Интеграции (Integration Services) и поставьте галочку напротив Гостевые сервисы (Guest Services).
Или просто введите команду Enable-VMIntegrationService -Name ?Guest Service Interface? -VMName “Имя виртуальной машины”
После этого следует ввести команду Copy-VMFiles ещё раз, после чего начнётся копирование файлов с хоста в указанную директорию на виртуальной машине. Данный способ подходит для файлов любых размеров, ограничением является только используемое виртуальной машиной дисковое пространство.
В сегодняшней статье покажем пример настройки DMVPN – Dynamic Multipoint VPN, что является VPN решением компании Cisco. Данное решение используется, когда требуется высокая масштабируемость и легкость настройки при подключении филиалов к головному офису.
DMPVN одно из самых масштабируемых и эффективных решений VPN поддерживаемых компанией Cisco. В основном оно используется при топологии Hub-and-Spoke, где вы хотели бы видеть прямые VPN туннели Spoke-to-Spoke в дополнение к обычным Spoke-to-Hub туннелям. Это означает, что филиалы смогут общаться с друг другом напрямую, без необходимости прохождение трафика через HQ. Как уже упоминали, эта технология является проприетарной технологией Cisco.
Если вам необходимо подключить более десяти сайтов к головному офису, то DMPVN будет идеальным выбором. Кроме того, DMPVN поддерживает не только Hub-and-Spoke, но и Full-Mesh топологию, так как все сайты имеют между собой связность без необходимости настройки статических VPN туннелей между сайтами.
Некоторые характеристики DMVPN
Для начала перечислим важные характеристики данного способа организации Site-to-Site VPN для лучшего понимания:
Центральный маршрутизатор (HUB) - данный роутер работает как DMVPN сервер, и Spoke маршрутизаторы работают как DMVPN клиенты;
У данного маршрутизатора есть публичный статический IP-адрес на WAN интерфейсе;
У Spoke маршрутизаторов на WAN интерфейсах может как статический, так и динамический публичный IP-адрес;
У каждого филиала (Spoke) есть IPSEC туннель к головному офису (Hub);
Spoke-to-Spoke - туннели устанавливаются при возникновении необходимости, когда есть движение трафика между филиалами. Таким образом, трафик может не ходить через головной офис, а использовать прямые туннели между филиалами;
Все туннели используют Multipoint GRE c IPSEC;
NHRP (Next Hop Resolution Protocol) - данный протокол используется для установления соответствий между приватными IP туннельных интерфейсов с публичными WAN адресами
Описанные выше NHRP соответствия будут храниться на NHRP сервере, чем в нашем случае является HUB роутер. Каждый филиал устанавливает соединение с головным офисом и регистрирует свой публичный IP-адрес и его приватный IP-адрес тунеля;
Когда филиалу необходимо отправить пакеты в подсеть другого филиала, он запрашивает NHRP сервер для получения информации о внешнем публичном адресе целевого филиала;
Для лучшей масштабируемости советуем использовать один из протоколов динамический маршрутизации между всеми роутерами – например, EIGRP;
Еще раз кратко о технологиях, которые использует DMVPN:
Multipoint GRE;
IPSEC;
NHRP – Next Hop Resolution Protocol;
Статическая или динамическая маршрутизация;
Настройка маршрутизатора
Конкретно в нашем примере у нас будет HUB маршрутизатор и два филиала. И, как было описано ранее, HUB – это DMVPN cервер, а филиалы – DMPVN клиенты.
В нашем примере в качестве маршрутизатора используется CISCO1921/K9
Сначала настраиваем HUB маршрутизатор – ему необходимо присвоить статический IP – адрес на внешнем WAN-интерфейсе:
! Настраиваем интерфейсы
interface GigabitEthernet0/0
description to Internet-WAN
ip address 10.10.10.1 255.255.255.252
!
interface GigabitEthernet0/1
description to LAN
ip address 192.168.160.1 255.255.255.0
duplex auto
! Настраиваем туннельный интерфейс, который является улучшенным GRE (Multipoint GRE)
interface Tunnel1
description DMVPN Tunnel
ip address 172.16.1.1 255.255.255.0 // выбираем приватную подсеть для туннелей
no ip redirects
ip nhrp authentication nhrp1234 // аутентификация между маршрутизаторами
ip nhrp network-id 1 // сетевой идентификатор, который должен быть одинаковым на всех маршрутизаторах
load-interval 30
keepalive 5 10
tunnel source GigabitEthernet0/0 // назначаем источником туннеля WAN интерфейс
tunnel mode gre multipoint // определяем туннель как mGRE
tunnel protection ipsec profile protect-gre // шифруем трафик в туннеле с помощью IPSEC
ip mtu 1440 // уменьшаем MTU для того, чтобы разрешить оверхед на mGRE и IPSEC
ip nhrp map multicast dynamic // разрешаем форвардить мультикаст трафик между туннелями.
! Настраиваем IPSEC на главном роутере
crypto isakmp policy 1
encr 3des
hash md5
authentication pre-share
group 2
crypto isakmp key isakmp1234 address 0.0.0.0 0.0.0.0 // принимать соединения от любого источника при наличии динамических филиалов
!
crypto ipsec transform-set TS esp-3des esp-md5-hmac
mode tunnel
!
!
crypto ipsec profile protect-gre // профиль добавленный к mGRE туннелю для шифрования
set security-association lifetime seconds 86400
set transform-set TS
! Настраиваем статическую маршрутизацию на HUB маршрутизаторе
ip route 192.168.164.0 255.255.255.0 172.16.1.2 // удаленные подсети доступны через IP удаленного туннеля
ip route 192.168.161.0 255.255.255.0 172.16.1.3 // удаленные подсети доступны через IP удаленного туннеля
Затем настраиваем маршрутизаторы в филиалах (Spoke роутеры) - у одного маршрутизатора статический айпишник на WAN интерфейсе, и у другого динамический, получаемый по DHCP. Первый маршрутизатор в филиале, с динамическим IP:
interface GigabitEthernet0/0
description WAN to Internet
ip address dhcp
duplex auto
speed auto
interface GigabitEthernet0/1
description To LAN
ip address 192.168.164.1 255.255.255.0
duplex auto
speed auto
interface Tunnel1
ip address 172.16.1.2 255.255.255.0 // помещаем в ту же подсеть что и другие туннели
no ip redirects
ip nhrp map multicast dynamic // разрешаем форвардить мультикаст трафик между туннелями
tunnel source GigabitEthernet0/0 // “source”- WAN интерфейс
tunnel mode gre multipoint
tunnel protection ipsec profile protect-gre
ip nhrp authentication nhrp1234
ip nhrp map 172.16.1.1 10.10.10.1 // соответствие HUB адреса туннеля с HUB адресом WAN
ip nhrp network-id 1
ip nhrp nhs 172.16.1.1 // настройка NHRP
ip nhrp registration no-unique // если NHRP процесс завершился (поиск соответствия) для определенного IP, то больше данный процесс не запустится
ip nhrp map multicast 10.10.10.1 // Отправка milticast трафика только в Hub. Головной маршрутизатор будет получать весь мультикаст трафик (например, обновления протокола маршрутизации) и отправлять его всем Spoke маршрутизаторам
ip mtu 1440
load-interval 30
keepalive 5 10
crypto isakmp policy 1
encr 3des
hash md5
authentication pre-share
group 2
crypto isakmp key isakmp1234 address 0.0.0.0 0.0.0.0 // Филиалы должны разрешать подклюения с любого адреса для формирования IPSEC VPN туннелей с другими филиалами
!
!
crypto ipsec transform-set TS esp-3des esp-md5-hmac
mode tunnel
!
crypto ipsec profile protect-gre
set security-association lifetime seconds 86400
set transform-set TS
ip route 192.168.160.0 255.255.255.0 172.16.1.1 // Маршрут для HUB
ip route 192.168.161.0 255.255.255.0 172.16.1.3 // Маршрут для другого филиала Spoke site
Второй филиальный маршрутизатор, со статическим IP:
interface GigabitEthernet0/0
description TO Internet
ip address 10.10.10.9 255.255.255.252
duplex auto
speed auto
interface GigabitEthernet0/1
description To: LAN
ip address 192.168.161.1 255.255.255.0
duplex auto
speed auto
interface Tunnel1
ip address 172.16.1.3 255.255.255.0 // должен быть в той же подсети что и другие туннели
no ip redirects
ip nhrp map multicast dynamic // разрешаем форвард мульткастов между туннелями.
tunnel source GigabitEthernet0/0
tunnel mode gre multipoint
tunnel protection ipsec profile protect-gre
ip nhrp authentication nhrp1234
ip nhrp map 172.16.1.1 10.10.10.1 // мапируем адрес HUB тунеля к WAN адресу
ip nhrp network-id 1
ip nhrp nhs 172.16.1.1 // настраиваем NHRP клиент с указанием адреса сервера
ip nhrp registration no-unique
ip nhrp map multicast 10.10.10.1
ip mtu 1440
load-interval 30
keepalive 5 10
crypto isakmp policy 1
encr 3des
hash md5
authentication pre-share
group 2
crypto isakmp key isakmp1234 address 0.0.0.0 0.0.0.0
!
crypto ipsec transform-set TS esp-3des esp-md5-hmac
mode tunnel
!
!crypto ipsec profile protect-gre
set security-association lifetime seconds 86400
set transform-set TS
ip route 192.168.160.0 255.255.255.0 172.16.1.1 // маршрут до головного маршрутизатор
ip route 192.168.164.0 255.255.255.0 172.16.1.2 // маршрут до другого филиала
Переходим к тестированию:
show dmvpn // проверяем статус DMVPN и NHRP
show crypto isakmp sa // проверяем IPSEC cвязность между маршрутизаторами
ping 192.168.164.1 // пингуем для проверки
ping 192.168.1.1
В нашем примере использовалась статическая маршрутизация, но при большом количестве филиалов необходимо использовать протоколы динамический маршрутизации для уменьшения ручного труда и риска ошибки.