Intraservice API + Asterisk + cURL
Получим информацию при помощи curl запроса и используем ее в диалплане.
Запросы будем делать к API системы учета заявок IntraService
бизнес логика:
Абонент вводит номер заявки, Asterisk получает номер исполнителя по номеру заявки и соединяет с ним клиента.
Рис1. Настройки пользователя в интерфейсе IntraService
Легенда:
- Получим значение поля «Мобильный телефон», в примере: «88001234567»
- Запрос: curl -H "Authorization: Basic <BASE64>=" https://<YOURNAME>.intraservice.ru/api/task/"${task}"?include=User | json_pp | grep -e "\"MobilePhone\" : \".*\","
- Пояснения по телу запроса:
- <BASE64> - закодированная в BASE 64 пара: «login:password»
- <YOURNAME> - имя площадки
- ${task} - переменная с номером заявки.
- конструкция grep -e "\"MobilePhone\" : \".*\"," - выбирает нужное нам поле из json.* ниже рассмотрим вариант покрасивее
- получим что-то такое: "MobilePhone" : "88001234567",
- ${phone} - переменная с полученным номером
- в примере отправлена напрямую в транк, или же, например: goto(from-internal,${phone},1)
exten => _X.,1,noop(test) same => n,read(task,beep,,,4,15) ; получаем от абонента номер заявки same => n,set(output=${SHELL(curl -H "Authorization: Basic <BASE64>=" https://<YOURNAME>.intraservice.ru/api/task/"${task}"?include=User | json_pp| grep -e "\"MobilePhone\" : \".*\",")} ) ; отправляем зарос same => n,set(phone=${POP(output,: )}) ; препарируем данные, удаляем ключ и освобождаем от кавычек. same => n,set(phone=${SHIFT(phone)}) same => n,set(foo1=${POP(phone,",)}) same => n,set(foo2=${SHIFT(phone,",)}) same => n,dial(SIP/${phone}@sip_trunk,,r) ;используем полученные данные для вызова
Парсинг JSON из командной строки
Утилита jq позволит разобрать JSON при запросе и упростит диалплан.
curl -H "Authorization: Basic <BASE64>" https://TEST.intraservice.ru/api/task/149?include=User | jq '.'
А теперь только нужные данные - '.Users[1].MobilePhone':
curl -H "Authorization: Basic <BASE64>" https://TEST.intraservice.ru/api/task/149?include=User | jq -r '.Users[1].MobilePhone' | tr -d '\n' 88001234567
Диалплан
На этот раз запросим значение поля «Phone»:
exten => _X.,1,noop(test) same => n,read(task,beep,,,4,15) same => n,set(phone=${SHELL(curl -H "Authorization: Basic <BASE64>" https://TEST.intraservice.ru/api/task/"${task}"?include=User | jq -r '.Users[1].Phone' | tr -d '\n')} ) same => n,goto(from-internal,${phone},1)
Рис2. Вывод консоли Asterisk
Только авторизованные участники могут оставлять комментарии.