OpenERP+Asterisk (Часть 3) Получите имя вызывающего абонента на входящих телефонных звонках (click2dial)

Статья в процессе редакции


Оригинал статьи

OpenERP+Asterisk коннектор




Получите имя вызывающего абонента на входящих телефонных звонках


Техническое введение

Вот сценарий, который объясняет, как работает функция:

1. На поступающих телефонных звонках Asterisk dialplan выполняет AGI get_cid_name_timeout.sh.

2. get_cid_name_timeout.sh скрипт вызавает get_cid_name.py скрипт с коротким перерывом.

3. get_cid_name.py скрипт обращается с просьбой XML-RPC (или XML-RPC по SSL) на сервере OpenERP, чтобы попытаться найти имя человека, соответствующего номеру телефона представленный вызывающим абонентом.

4. Если он находит имя в OpenERP, имя используется в качестве названия CallerID вызова, так, чтобы пользователи могли видеть имя на экране их IP телефона.

Установка на стороне OpenERP

Удостоверьтесь, что у Вас есть недавняя версия asterisk_click2dial модуля с функцией get_name_from_phone_number в фаиле asterisk_click2dial.py.
Я рекомендую создать нового пользователя на OpenERP; например, мы назовем его Asterisk. Этот пользователь Asterisk назначен этой функции.. Для этого, добавьте этого пользователя Asterisk к группе Asterisk CallerID.

Установка на стороне Asterisk

Во-первых, удостоверьтесь, что доступен порт XML-RPC OpenERP от сервера Asterisk; если это не работает, проверьте свои параметры настройки сети и правила firewalling.
Во-вторых, проверьте, что перерыв команды доступен на Вашем сервере Asterisk:

— при Debian Lenny или ниже и Ubuntu Lucid или ниже, Вы должны установить пакет перерыва,

— под Debian Squeeze или выше и Ubuntu Maverick или выше, эта команда обеспечена пакетом coreutils, который установлен по умолчанию.

Тогда, скопируйте эти два файла get_cid_name.py и get_cid_name_timeout.sh в директорию /usr/local/bin/Вашего сервера Asterisk. Ниже вы найдете описание этих двух скриптов.

Во-первых, подлинник get_cid_name.py написан на Питоне, и это — то, которое “делает работу”:

— по его стандарту, вводить параметры, данных Asterisk, в функцию номер телефона,

— посылает запрос XML-RPC в OpenERP, чтобы спросить, можно ли найти номер телефона в адресах Партнера,

— пишет на его продукции стандарта некоторые инструкции для Asterisk, в особенности чтобы изменить название CallerID.

У этого скрипта есть некоторые варианты, в особенности информация, чтобы соединиться с OpenERP:

— DNS или IP-адрес сервера OpenERP,

— порт, на котором интерфейс XML-RPC слушает (порт 8069 по умолчанию),

— выбор использовать XML-RPC по SSL вместо XML-RPC,

— название базы данных OpenERP, чтобы использовать,

— ID пользователя OpenERP (в нашем примере, напишите ID пользователя Asterisk, которую мы создали в предыдущей секции),

— пароль.

get_cid_name.py, которым управляют-h, чтобы иметь синтаксис этих вариантов.
Тогда, есть скрипт get_cid_name_timeout.sh, который является коротким скриптом оболочки. Это — скрипт, который называют от Asterisk dialplan, и это вызывает скрипт get_cid_name.py с соответствующими вариантами. Почему мы нуждаемся в этом промежуточном скрипте? Фактически, этот промежуточный скрипт вызывает scriptget_cid_name.py с коротким перерывом 1 секунды по умолчанию; если у скрипта get_cid_name.py нет конца, это — работа после 1 секунды, это будет отменено. Важно установить такой перерыв, потому что скрипт вызывет Asterisk после каждого поступающего телефонного звонка; скрипт получает stucks, телефонный звонок, также получит stucks, и Вы пропустите вызов!

Отредактируйте скрипт get_cid_name_timeout.sh и поместите правильные варианты.
Проверьте скрипт с номером телефона, который присутствует в адресах Партнера OpenERP:

# echo "agi_callerid:141981242"| /usr/local/bin/get_cid_name_timeout.sh
Full AGI environnement :
agi_callerid = 141981242
VERBOSE "CallerID number = 141981242"
phone number sent to OpenERP = 141981242
VERBOSE "Starting XML-RPC request on OpenERP localhost:8069"
VERBOSE "End of XML-RPC request on OpenERP"
VERBOSE "CallerID Name = Alexis de Lattre"
SET CALLERID "Alexis de Lattre" <141981242>


Продукции скриипта некоторая информация об отладке о stderr и некоторые инструкции к OpenERP на stdout. В этом примере инструкции к OpenERP — линии, которые начинают с VERBOSE или SET CALLERID. Важная линия — последняя линия, у которой есть SET CALLERID инструкция: это скажет Asterisk заменять CallerID входящего вызова один данный после инструкции.

Если номер телефона не будет найден в адресах Партнера OpenERP, то последняя линия будет:
SET CALLERID «Not in OpenERP» <141981242>

Вы можете personnalize последовательность “Не в OpenERP”, редактируя скрипт get_cid_name.py.

Если тест скрипта — успешный, Вы можете идти дальше к последнему шагу: измените Asterisk dialplan, чтобы назвать скрипт на прием внешнего телефонного звонка. Если Вы написали Asterisk dialplan самостоятельно, отредактируйте dialplan (обычно /etc/asterisk/extensions.conf) и, в контексте, посвященном приему внешних телефонных звонков, вставьте расширение, которое выполнит функцию AGI с местоположением скрипта (/usr/local/bin/get_cid_name_timeout.sh) как параметр. Конечно, это расширение должно быть помещено перед Dial () функции, которая звонит IP телефон пользователя. Например:

[from-extern]
exten => _141981242,1,AGI(/usr/local/bin/get_cid_name_timeout.sh)
exten => _141981242,n,Dial(SIP/10, 30)
exten => _141981242,n,Answer()
exten => _141981242,n,Voicemail(10@default,u)
exten => _141981242,n,Hangup()


Затем, перезагрузите Asterisk diaplan:

asterisk*CLI> extensions reload


Если Вы не написали Asterisk dialplan самостоятельно, который имеет место пользователей, которые используют FreePBX или Xivo или любой другой интерфейс управления для Asterisk, Вы должны выяснить, как вставить расширение с скриптом AGI в функцию dialplan, которые управляют приемом внешних вызовов.

Вы теперь готовы получить свой первый телефонный звонок с поиском имени CallerID в OpenERP!

Установка ‘открытый вызывающий абонент’ особенность


Установка

Эта функция требует ту же самую конфигурацию как функция click2dial, которая объяснена выше.

Предупреждение: если Вы уже развернули функцию click2dial, и Вы модернизировали модуль, чтобы получить новую открытую функцию вызывающего абонента, Вы должны обновить свой /etc/asterisk/manager.conf файл, чтобы добавить, некоторые привилегии пользователю AMI, cf click2dial пункту выше.

Используйте функцию ‘открытого вызывающего абонента’
Вот типичный сценарий:

1. Вы поднимаете внешний запрос к Вашему телефону.

2. В то время как Вы говорите со своим кореспондентом, Вы идете в меню Sales> Адресная книга, и щелкаете два раза на Открытом партнере вызов.

3. OpenERP посылает Запрос о состоянии менеджеру по Asterisk Интерфэсу (AMI), чтобы получить список всех текущих телефонных звонков. Первый вызов, которое вовлекает Ваш номер телефона, и это восстанавливает представленный номер телефона.

4. OpenERP ищет представленный номер телефона в Телефонных и Мобильных областях адресов Партнера OpenERP (для этого, это использует тот же самый код в качестве



Того, чтобы получать имя вызывающего абонента на входящей функции телефонных звонков). Если находит, то открывается всплывающее окно, которое показывает представленный номер телефона, название соответствующего адреса Партнера и имя соответствующего Партнера:

У Вас теперь есть несколько вариантов, соответствующих кнопкам во всплывающем окне:

— откройте представление формы Партнера,

— откройте представление списка заказов продаж, связанных с Партнером,

— откройте представление списка счетов, связанных с Партнером.

Если нечего не находит, то открывается всплывающее окно, которое показывает представленный номер телефона, и предлагается создать новый контакт партнера или обновить существующий контакт партнера:


Поиск неисправностей

Если у Вас есть некоторые проблемы с модулем:
Запустите openerp-сервер с параметра командной строки --log-level=debug Вы получите сообщения о процессе переформатировавшего номера телефона.
также проверьте вход в систему стороны Asterisk: на Вашем сервере Asterisk, которым запущен:

% asterisk -rvvvvvvvvvvvv


если сервер OpenERP и Asterisk не общаются, используйте инструменты, такие как tcpdump или wireshark, чтобы проверить движение сети между этими двумя машинами.
для особенности “CallerID называют поиск в OpenERP на поступающих телефонных звонках”, Вы можете получить больше регистраций о выполнении подлинника AGI, управляя этой командой в пульте Asterisk:

asterisk*CLI> agi set debug on


Для отключения:

asterisk*CLI> agi set debug off

0 комментариев

Оставить комментарий