Pull to refresh

Asterisk название фирмы (CallerID name) из API ДубльГИС используя AGI

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


В базе ДубльГИС более 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
Tags:
Hubs:
You can’t comment this publication because its author is not yet a full member of the community. You will be able to contact the author only after he or she has been invited by someone in the community. Until then, author’s username will be hidden by an alias.