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

24 Янв
2012

Знакомство с использованием 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
По материалам Хабрахабр.



загрузка...

Комментарии:

Наверх