Наверняка кто-то из вас хоть раз в жизни получал 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.
Надеюсь, что данный метод будет полезен и найдёт применение в ваших бизнес-процессах. Удачи!