Знакомство с использованием AGI интерфейса Asterisk. На примере получения названия фирмы по номеру входящего звонка из API справочника ДубльГИС.

В базе ДубльГИС более 850 000 компаний, совсем недавно появилась возможность поиска фирмы по номеру телефона.
Требования к рабочему окружению:
С помощью простого GET запроса, мы получаем данные о фирме в JSON формате, живой пример — http://demo.api.2gis.ru/apiClient/firmsList
Для того чтобы получить название фирмы по номеру телефона из API, используем python скрипт:
Город и ключ доступа укажите свои.
Шлюзовый интерфейс ASTERISK (AGI) позволяет управлять диалпланом сторонним приложением. Обмен данными осуществляется по каналам STDIN, STDOUT и STDERR. По STDIN передаются переменный окружения, сценарий возвращает команды по STDOUT.
Для работы с agi существуют разные библиотеки (pyst,py-Asterisk,pyastre), мой выбор пал случайно на pyagi github.com/rdegges/pyagi/tree/develop (в стадии разработки!).
Создадим скрипт /tmp/2gis/callerid.py, который читает переменную agi_callerid из Asterisk и возвращает переменную calleridname с тестовым названием фирмы.
Для вызов из диалплана нашего AGI сценария /tmp/2gis/callerid.py, следует добавить функцию AGI(/tmp/2gis/callerid.py):
После вызова CALLERID(name) меняется на 'testname'.
Теперь остается заменить строку 'testname' на название фирмы полученное из API 2GIS. Итоговый вариант callerid.py:
Данная статья всего лишь вводный обзор возможностей API ДубльГИС и AGI интерфейса Asterisk.
API ДубльГИС — http://api.2gis.ru/
Меггелен Дж., Мадсен Л., Смит Дж. — Asterisk. будущее телефонии
Asterisk AGI — voip-info.org

В базе ДубльГИС более 850 000 компаний, совсем недавно появилась возможность поиска фирмы по номеру телефона.
Требования к рабочему окружению:
- запущенный asterisk;
- ключ доступа API 2gis.
Получаем данные из API ДубльГИС
С помощью простого GET запроса, мы получаем данные о фирме в JSON формате, живой пример — http://demo.api.2gis.ru/apiClient/firmsList
Для того чтобы получить название фирмы по номеру телефона из API, используем python скрипт:
import urllib
import simplejson
number = u'308877'
query_url = ("http://catalog.api.2gis.ru/search?what={0}&version=1.3"\
"&where=омск&pagesize=5&key=1&lang=ru").format(number)
result = simplejson.load(urllib.urlopen(query_url))
print result['result'][0]['name']
Город и ключ доступа укажите свои.
Указываем CallerID name используя AGI
Шлюзовый интерфейс ASTERISK (AGI) позволяет управлять диалпланом сторонним приложением. Обмен данными осуществляется по каналам STDIN, STDOUT и STDERR. По STDIN передаются переменный окружения, сценарий возвращает команды по STDOUT.
Для работы с agi существуют разные библиотеки (pyst,py-Asterisk,pyastre), мой выбор пал случайно на pyagi github.com/rdegges/pyagi/tree/develop (в стадии разработки!).
Создадим скрипт /tmp/2gis/callerid.py, который читает переменную agi_callerid из Asterisk и возвращает переменную calleridname с тестовым названием фирмы.
from pyagi.pyagi import AGI
agi = AGI()
number = agi.env["agi_callerid"]
agi.set_variable('calleridname', 'testname')
Для вызов из диалплана нашего AGI сценария /tmp/2gis/callerid.py, следует добавить функцию AGI(/tmp/2gis/callerid.py):
[sip-dialin]
exten => s,1,AGI(/tmp/2gis/callerid.py)
exten => s,n,Set(CALLERID(name)=${calleridname})
exten => s,n,Dial(SIP/phone1)
После вызова CALLERID(name) меняется на 'testname'.
Заключение
Теперь остается заменить строку 'testname' на название фирмы полученное из API 2GIS. Итоговый вариант callerid.py:
#!/usr/bin/python
# -*- coding: utf-8 -*-
import urllib
import simplejson
from pyagi.pyagi import AGI
agi = AGI()
number = agi.env["agi_callerid"]
query_url = ("http://catalog.api.2gis.ru/search?what={0}&version=1.3"\
"&where=омск&pagesize=5&key=1&lang=ru").format(number)
result = simplejson.load(urllib.urlopen(query_url))
agi.set_variable('calleridname', result['result'][0]['name'].encode('utf8'))
Внимание, disclaimer
Данная статья всего лишь вводный обзор возможностей API ДубльГИС и AGI интерфейса Asterisk.
- лицензионные соглашение использования API ДубльГИС не рассмотрено;
- нет обработки неизвестных номеров.
Что дальше
API ДубльГИС — http://api.2gis.ru/
Меггелен Дж., Мадсен Л., Смит Дж. — Asterisk. будущее телефонии
Asterisk AGI — voip-info.org