Интеграция Roistat с Asterisk

Интеграция Roistat с Asterisk

Как известно, Asterisk обладает широкими возможностями по интеграции со сторонним программным обеспечением. Одному из наших клиентов потребовалось реализовать интеграцию Asterisk с системой сквозной бизнес аналитики Roistat. Roistat обладает хорошо документированным API, поэтому проблем с интеграцией не возникло.

Приступем

Принцип работы коллтрекинга подразумевает, что у вас имеется несколько телефонных номеров. Система чередует выдачу этих номеров, и таким образом появляется возможность определить, откуда приходят клиенты.

Итак, нам требуется, чтобы в разделе коллтрекинг системы Roistat фиксировались входящие звонки, которые поступают на нашу АТС Asterisk. Переходим на страницу документации API Roistat и находим метод:
POST/project/phone-call
С помощью данного метода можно создать запись в истории звонков в проекте Roistat. Данный метод мы будем использовать при поступлении входящего звонка в Asterisk.
Напишем скрипт, который будет принимать значения от Asterisk и передавать Roistat:


#!/bin/bash
#
# API-key и ID проекта
apiKey=YOUR_API_KEY
idProject=YOUR_ID_PROJECT
#
# Определяем текущее время
curDATE=`date +%Y-%m-%dT%H:%M:%S+0000 —utc`
#
case "$1" in
create)
# Создание записи о звонке
# $2 — На какой номер поступил вызов, $3 — От кого поступил вызов
RESULT=`curl --request POST \
--url 'https://cloud.roistat.com/api/v1/project/phone-call?key='$apiKey'&project='$idProject \
--header 'content-type: application/json' \
--data '{"callee":"'$2'","caller":"'$3'","date":"'$curDATE'","duration":null,"marker":null,"order_id":null,"save_to_crm":"0","status":null,"visit_id":null,"comment":null,"answer_duration":null}'`
#
# Result
idCall=`echo $RESULT | jq '.phoneCall.id' | tr -d \"`
echo $idCall
;;
esac

Добавим во входящий контекст Asterisk вызов данного скрипта:


[incoming]
; Первый номер
exten => 71234567890,1,Set(CALLE=4567890)
exten => 71234567890,n,Goto(,s,1)
; Второй номер
exten => 71234567891,1,Set(CALLE=4567891)
exten => 71234567891,n,Goto(,s,1)
; Третий номер
exten => 71234567892,1,Set(CALLE=4567892)
exten => 71234567892,n,Goto(,s,1)
;
exten => s,1,Answer()
exten => s,n,Set(CALLID=${SHELL(/usr/local/bin/calltracking.sh create ${CALLE} ${CALLERID(num)})})
exten => s,n,Dial(SIP/101,180,mtT)
exten=>s,n,Hangup

Если все сделано верно, то на странице История звонков раздела Коллтрекинг появится запись о поступлении входящего звонка.

Но в данной записи не содержится информации о статусе звонка (принят, пропущен) и длительности разговора. Для добавления этих данных используем метод:
POST/project/calltracking/call/update.

Добавим в скрипт данную возможность:


#!/bin/bash
#
# API-key и ID проекта
apiKey=YOUR_API_KEY
idProject=YOUR_ID_PROJECT
#
# Определяем текущее время
curDATE=`date +%Y-%m-%dT%H:%M:%S+0000 —utc`
#
case "$1" in
create)
# Создание записи о звонке
# $2 — На какой номер поступил вызов, $3 — От кого поступил вызов
RESULT=`curl --request POST \
--url 'https://cloud.roistat.com/api/v1/project/phone-call?key='$apiKey'&project='$idProject \
--header 'content-type: application/json' \
--data '{"callee":"'$2'","caller":"'$3'","date":"'$curDATE'","duration":null,"marker":null,"order_id":null,"save_to_crm":"0","status":null,"visit_id":null,"comment":null,"answer_duration":null}'`
#
# Result
idCall=`echo $RESULT | jq '.phoneCall.id' | tr -d \"`
echo $idCall
;;
update)
# Обновление информации о звонке
# $2 - Call ID, $3 - Длительность, $4 — Время разговора, $5 - Статус
idCall=`echo $2 | tr -d '\r\n\"'`
if [ "$5" == "ANSWERED" ];
then
CALLSTATUS="ANSWER"
elif [ "$5" == "NO ANSWER" ];
then
CALLSTATUS="NOANSWER"
else
CALLSTATUS=$5
fi
#
RESULT=`curl --request POST \
--url 'https://cloud.roistat.com/api/v1/project/calltracking/call/update?key='$apiKey'&project='$idProject \
--header 'content-type: application/json' \
--data '{"id":'$idCall',"comment":null,"duration":"'$3'","answer_duration":"'$4'","status":"'$CALLSTATUS'"}'`
echo $RESULT
;;
esac

Добавляем во входящий контекст вызов скрипта по завершению разговора:


[incoming]
; Первый номер
exten => 71234567890,1,Set(CALLE=4567890)
exten => 71234567890,n,Goto(,s,1)
; Второй номер
exten => 71234567891,1,Set(CALLE=4567891)
exten => 71234567891,n,Goto(,s,1)
; Третий номер
exten => 71234567892,1,Set(CALLE=4567892)
exten => 71234567892,n,Goto(,s,1)
;
exten => s,1,Answer()
exten => s,n,Set(CALLID=${SHELL(/usr/local/bin/calltracking.sh create ${CALLE} ${CALLERID(num)})})
exten => s,n,Dial(SIP/101,180,mtT)
exten=>s,n,Hangup
exten => h,1,AGI(/usr/local/bin/calltracking.sh,update,"${CALLID}","${CDR(duration)}","${CDR(billsec)}","${CDR(disposition)}")

В итоге, вся информация о звонке поступает в систему Roistat. Данный скрипт для интеграции Asterisk с Roistat можно скачать по ссылке.

Если у вас возникли проблемы с настройкой интеграции с Roistat или какой-либо другой системой, наши специалисты всегда готовы помочь вам.

Добавить комментарий