介绍
Asterisk是一款用于电话的OpenSource软件。该软件通常用于在公司内部运行IP PBX系统,并结合每个员工的IP电话和xDSL上的SIP中继或光纤链路或传统ISDN线路来访问公共电话网络。Asterisk根据GNU通用公共许可证提供,由美国公司Digium编辑。如果您想了解有关Asterisk的更多信息,请阅读其Wikipedia页面。
连接器的描述
Odoo-Asterisk连接器有三个主要功能。第一个主要功能是click2dial。下面是它的工作原理 :
- 在Odoo中,在具有电话/移动字段的表单视图中,用户单击电话号码(在v10及更低版本,他必须单击电话号码字段旁边的拨号按钮)。
- Asterisk使用户的电话响铃。
- 用户回答他自己的电话(如果他没有,则此过程在此处停止)。
- Asterisk拨打Odoo中的电话号码代替用户。
- 如果远程方应答,则用户可以与其通信方通话。
第二个主要功能是:如果电话号码出现在Odoo的合作伙伴,潜在客户或员工中,它会增加在来电和拨出电话上显示对应人姓名的功能。下面是它的工作原理 :
- 在拨入和拨出电话时,Asterisk拨号方案执行脚本。
- 此脚本将向Odoo服务器发出XML-RPC或JSON-RPC请求,以尝试查找与远程方的电话号码对应的人员的姓名。
- 如果找到名称,则更新呼叫信息,以便在用户的SIP电话上显示。
第三个主要特征是:只需点击一下即可获得与主叫方对应的合作伙伴/领导/员工/候选人。下面是它的工作原理 :
- 有人打电话给你。在接听电话之前或之后,您点击屏幕右上角的电话标识,在您的用户名旁边:Odoo向Asterisk Manager界面发送查询以获取当前电话呼叫的列表(振铃或通话) 。
- 如果发现涉及用户电话的电话,则会获得主叫方的电话号码
- 它搜索Odoo合作伙伴中主叫方的电话号码。如果记录匹配,则显示相关合作伙伴的名称并建议打开它,或打开其相关的销售订单或发票。如果没有匹配的记录,则建议创建一个新的联系人,其中显示的电话号码为“电话”或“移动”号码或更新现有合作伙伴。
其他可能性(独立于Asterisk,使用base_phone_popup模块):
- 当来电到达时,Asterisk会执行一个AGI脚本,其中包含有关应该接收弹出窗口的Odoo用户登录信息。此AGI脚本向Odoo发送XML-RPC或JSON-RPC请求。
- Odoo收到请求,其中包含应通知的Odoo用户的登录信息以及主叫方的电话号码。如果电话号码在Odoo中可用,则Odoo会显示一个通知弹出窗口,其中包含指向主叫合作伙伴/潜在客户/员工/候选人的表单视图的链接(或者,如果电话号码未知,则链接指向该号码找不到巫师)。
Akretion服务提供
部署Asterisk-Odoo连接器需要具备Odoo和Asterisk的专业知识。由于ERP和IP PBX系统是贵公司的两个关键组件,您可能更愿意将连接器的安装和配置委派给有经验的顾问。
作为Asterisk-Odoo连接器的作者,Akretion是寻找这种专业知识的最佳选择。Akretion为Asterisk-Odoo连接器提供服务包,其中包括:
- 如有必要,更新Asterisk-Odoo模块的模块代码,使其适用于您正在使用的Odoo版本,
- 如有必要,更新Asterisk端脚本的代码,使它们适用于您正在使用的Asterisk版本,
- 相关模块的安装和配置,
- 更新现有Asterisk IPBX的配置,使其与Odoo-Asterisk连接器配合使用,
- 关于模块的使用,
- 自安装模块之日起2个月内通过电子邮件提供技术支持并提供错误修复保修。此保修是对错误的错误修复保证,这些错误会改变Asterisk-Odoo连接器的行为,如本文档中所述。此保修要求远程访问Odoo和Asterisk服务器,或者客户应向Akretion提供在Akretion办公室重现该问题的方法。
此服务套餐的建议价格为400欧元,不含税。
此服务包不包括:
- 增强请求,
- 额外的Asterisk设置和配置,不需要使Odoo-Asterisk连接器工作,
- 自模块安装之日起2个月后的技术支持和错误修复保修,
- Odoo模块的技术支持和错误修复保证不属于Odoo-Asterisk连接器,也不属于不属于Odoo-Asterisk连接器的Asterisk端脚本。
安装模块
Odoo-Asterisk连接器由几个模块组成; 其中一些与Asterisk无关(所有名称中没有星号的模块都与Asterisk无关:base_phone,base_phone_popup,crm_phone,hr_phone等等),其中一个特定于Asterisk(asterisk_click2dial)。
这些模块应该像任何Odoo模块一样安装在Odoo上。该模块的源代码可在github上的Odoo社区协会(OCA)的连接器电话项目中找到。确保根据您的Odoo版本选择正确的分支。
这些模块需要两个额外的Python库:phonenumbers和py-Asterisk。要安装这些库,请运行:
% sudo pip install phonenumbers
% sudo pip install py-Asterisk
该PIP命令是安装Python库的官方工具。如果您的系统上没有此工具,请安装相应的软件包(Debian / Ubuntu系统上的软件包python-pip)。
设置click2dial功能
配置星号
对于click2dial功能,Odoo将通过Asterisk Manager Interface(AMI)与Asterisk通信。
所以第一步是配置AMI:
- 为Odoo创建一个新的AMI帐户
- 配置AMI接受来自Odoo的click2dial请求。
AMI的配置文件是/etc/asterisk/manager.conf
(根据您的Linux发行版,目录可能不同)。这是一个示例配置文件,其中我的注释内联:
; manager.conf file for the Asterisk Manager Interface (AMI)
; It starts with the “general” section first
[general]
; You must enable the AMI feature
enabled=yes
; TCP Port on which AMI will listen
port = 5038
; I suppose Asterisk and Odoo are on two different machines,
; so you must bind AMI on 0.0.0.0
bindaddr = 0.0.0.0
; We don’t need to activate the HTTP AMI interface : the module uses the native interface
webenabled = no
; Then, we create an AMI account for Odoo
[click2dial] ; This is the AMI login
secret = mypassword ; This is the AMI password
; We deny AMI access for everybody
deny = 0.0.0.0/0.0.0.0
; We accept AMI access for Odoo server (192.168.0.42)
permit = 192.168.0.42/255.255.255.255
; We give the minimum access rights required for the click2dial feature
; For Asterisk 1.4.x, you need the “call” rights (for both click2dial and the 'open calling party' feature)
;read =
;write = call
; For Asterisk 1.6.x and 1.8.x, you need the “originate” rights (for click2dial)
; and the 'reporting' rights (for the 'open calling party' feature)
read =
write = originate,reporting
警告:在较旧版本的Asterisk上,您需要重新启动Asterisk(检查手机上是否有人,因为重启Asterisk会停止所有正在进行的电话呼叫)。在较新版本的Asterisk上,只需在Asterisk CLI中键入manager reload即可。
现在检查您是否可以从Odoo服务器访问AMI:
% nc <asterisk_server_IP_address> 5038
它应该显示:
Asterisk Call Manager/<version of AMI>
配置Odoo
在Odoo上以管理员身份登录。
配置Asterisk服务器
首先,您必须创建一个或多个Asterisk服务器。该click2dial模块支持多种的Asterisk服务器(每个Odoo用户,您将配置他所连接的Asterisk服务器上)。
进入菜单设置>技术>电话>星号服务器。创建一个或多个Asterisk服务器。所有字段都有详细的上下文帮助,因此您应该能够通过阅读帮助了解如何设置每个参数。
一些参数需要额外的解释:
- Alert-Info SIP标题:您可以在下面的Aastra IP电话的Click2dial 安静click2dial和自动应答部分找到更多关于它的解释。你现在可以把它留空,这不是问题。
配置用户
进入菜单设置>用户>用户。对于需要click2dial功能的每个用户,您需要在Telephony选项卡中设置asterisk_click2dial模块添加的一些参数:
- 星号通道类型:用户手机的通道类型(如果用户有常规IP电话,请选择SIP)
- 资源名称:这是您选择的渠道类型的资源名称。如果通道类型为SIP,则资源名称是您在其中定义的实体的名称
/etc/asterisk/sip.conf
。例如,如果您使用[alexis] in 定义了实体sip.conf
,则资源名称为alexis(这也意味着您使用Dial(SIP / alexis)在Asterisk拨号方案中调用此用户)。对于SIP电话,内部电话号码通常用作资源名称。 - 内部号码:用户的内部电话号码
- 来电显示:此字段很重要。如果您不知道呼叫者ID是什么,您应该阅读有关Asterisk的更多文档。简而言之,它与提供给远程方的姓名和电话号码有关。当您通过click2dial呼叫某人时,将不会使用您所定义的IP电话的callerid参数
/etc/asterisk/sip.conf
(如果您有SIP电话); 将改为使用Odoo中定义的来电显示字段。您应该在Odoo中使用与调用者ID字段相同的语法,而不是Asterisk中的调用者字段,例如:Alexis de Lattre <141981242>
- 警报信息SIP标头:这与Asterisk服务器的参数相同,但与用户相关。你现在可以把它留空。
- 变量:此参数仅适用于高级Asterisk用户。暂时把它留空。
- 建议在click2dial之后在CRM中创建一个调用:仅当您安装了asterisk_click2dial_crm模块时,此选项才可用; 它默认激活。它也可以通过用户的首选项进行修改(这意味着用户可以自己修改此选项)。
- 星号服务器:选择用户IP电话注册的Asterisk服务器。如果您的公司只有一个Asterisk服务器,您可以将此字段留空:Odoo将使用在Odoo中创建的唯一Asterisk服务器。
就是这样,配置完成后,你就可以开始玩click2dial了!
使用click2dial功能
在Odoo中,转到任何可以访问合作伙伴并打开您要呼叫的合作伙伴的菜单。在v10上,在“ 电话”和“ 移动”字段旁边,您应该看到“ 拨号”按钮; 在v11 / 12上,只需使用电话号码本身的链接即可。
重要提示:Odoo中的电话号码应采用国际格式(E.164格式),例如: +33 1 41 98 12 42
以下是click2dial功能的完整使用方案:
- 单击要拨打的电话号码旁边的“ 拨号”按钮。
- Odoo重新格式化电话号码并连接到Asterisk Manager Interface并发送请求。
- Asterisk使用户的电话响铃。
- 用户回答他自己的电话。如果他没有接听电话,则此过程在此处停止,后续步骤不会执行。
- Asterisk拨打已重新格式化的电话号码,拨号后立即将用户的电话连接到呼叫(用户听到呼叫等待音,就像他自己拨打了电话号码一样)。
- 用户完全控制呼叫。
- 如果您未在用户表单上的click2dial或用户首选项后禁用“ 在CRM中创建呼叫 ”选项,则会出现一个建议在CRM中创建电话的弹出窗口:
安静的click2dial
想象一下,您与其他同事共享同一个工作室。当您的一位同事拨打电话时,工作室会保持安静,直到通话开始。现在,如果同事使用Odoo的click2dial功能,他的手机会在对话开始之前响起并打扰每个人!我认为这是一个重要的缺点。
希望有一个解决方案:当Asterisk“呼叫”用户时(在呼叫远程方之前),他应该告诉手机不要响铃。事实上,当我说“告诉手机不要响”时,我的意思是“告诉手机使用无声铃声”。SIP电话通常可以实现这一点。在SIP协议中,您可以使用Alert-Info标头告诉电话选择特定的铃声。此功能通常称为“特殊振铃”或“优先警报”。大多数SIP电话都支持Alert-Info标头,但是:
- 标题内容的确切语法可能因SIP电话制造商而异,
- 铃声的名称也可能因SIP电话制造商而异。
我已经与两个不同的手机制造商测试了这个功能:Technicolor,即Thomson的新名称(ST2030型号,它可能与其他型号的工作方式相同)和Aastra(6731i型号,我相信其他型号的工作方式相同)。我在下面详细说明; 如果您对其他手机有一些经验,请不要犹豫,发送电子邮件(akretion.com 上的 alexis.delattre)并分享您的知识。
Technicolor ST2030 IP电话
我想你用TFTP来配置手机。如果你编辑调用的系统旋律的默认配置文件Tone-RG.txt
,你会看到一个铃声静默定义如下:
Silent:d=32,o=5,b=160:8P,2D
使用这种配置,它是一种“安静”的铃声,但不是完全无声的铃声。要使其完全静音,请将此铃声的定义更改为:
Silent:d=32,o=5,b=160:P
注意:要使更改生效,请不要忘记更改铃声文件的名称并更新文件参数system_melodies中的<MAC_address>.inf
文件名。
然后,在Odoo中,在Asterisk服务器的配置中,您应该为Alert-info SIP标头提供以下值:
info=<Silent>
Aastra IP电话
根据Aastra文档,存在无声铃声,但它不能用于独特的铃声。我找到了一个解决方法:选择一个未使用但是默认的铃声,例如Bellcore-dr5(这是一个“安静”的铃声,但不是一个完全无声的铃声),并在配置文件中重新定义它(aastra.cfg
到为所有Aastra手机<MAC_address>.cfg
更改它,或仅为一部手机更改它:
bellcore cadence dr5: 0,-1
这会将铃声Bellcore-dr5转换为完全无声的铃声。
然后,在Odoo中Asterisk服务器的配置中,您应该为Alert-info SIP标头提供以下值:
info=<Bellcore-dr5>
注意:如果您混合使用Aastra和Technicolor手机,您可以使用用户表单上提供的用户特定的Alert-info SIP标头,或使用服务器范围的Alert-info SIP标头参数并重命名为Silent Thechnicolor IP电话铃声到Bellcore-dr5。
使用Aastra IP电话自动应答click2dial
如果您希望Aastra IP电话(其他IP电话也支持此功能)在click2dial上自动应答,请按以下步骤操作。
首先,您需要在Aastra IP电话上配置* Incoming intercom calls。以下是您应在Aastra配置文件中使用的参数:
sip allow auto answer: 1 # Allow auto-answer on incoming intercom calls
sip intercom warning tone: 1 # Activate warning tone on incoming intercom calls
sip intercom mute mic: 0 # Enable microphone on incoming intercom calls
然后,在Alert-info SIP标头中,输入:
info=alert-autoanswer
如果Alert-info SIP标头已有值,请注意,如果将它们与“;”分隔,则可以在此字段中放置多个值,例如:
info=<Bellcore-dr5>;info=alert-autoanswer
如果您希望自动应答是特定于用户的,请使用用户表单的Alert-info SIP标头 ; 如果您希望它适用于Asterisk服务器的所有用户,请使用Asterisk服务器表单的Alert-info SIP标头。设置用户表单的Alert-info SIP标头后,将忽略服务器表单上的等效字段。
现在,当您执行click2dial时,您的Aastra IP电话将自动应答呼叫并默认使用扬声器。
在来电时获取主叫方的姓名
技术介绍
这是一个解释该功能如何工作的场景:
- 在来电时,Asterisk拨号方案执行AGI
set_name_incoming_timeout.sh
- 该
set_name_incoming_timeout.sh
脚本set_name_agi.py
使用短暂超时调用脚本。 - 该
set_name_agi.py
脚本将在Odoo服务器上发出XML-RPC或JSON-RPC请求,以尝试查找与主叫方提供的电话号码对应的人员的姓名。 - 如果它在Odoo中找到该名称,则该名称将用作呼叫的CallerID名称,以便用户可以在其IP电话的屏幕上看到该名称。如果在Odoo中找不到任何匹配项,它可以将电话号码地理定位并将国家和城市名称显示为CallerID(如果您激活了特定选项)。
在Odoo方面设置
我建议在Odoo上创建一个新用户; 例如,我们将其称为星号。此星号用户将专用于此功能,并且只具有使用该功能所需的最低访问权限。为此,请将此星号用户添加到Asterisk CallerID组(该组仅具有使用该功能所需的最低访问权限)。
在星号侧设置
首先,确保您可以从Asterisk服务器访问Odoo的HTTP或HTTPS端口; 如果它不起作用,请检查您的网络设置和防火墙规则。
其次,检查timeout
您的Asterisk服务器上是否有shell命令:
- 在Debian Lenny或更低版本和Ubuntu Lucid 10.04或更低版本下,你必须安装超时包,
- 在Debian Squeeze或更高版本以及Ubuntu Maverick 10.10或更高版本下,此shell命令由默认安装的软件包coreutils提供。
然后,复制这两个文件set_name_agi.py
并复制到Asterisk服务器set_name_incoming_timeout.sh
的目录/usr/local/bin/
中。确保这两个脚本具有执行权限。您将在下面找到有关这两个脚本的一些详细信息。
安装pyst2库:
sudo pip install pyst2
该脚本set_name_agi.py
是用Python编写的,它是“完成工作” 的脚本:
- 它在标准输入上接收Asterisk给出的参数,特别是电话号码,
- 它向Odoo发送XML-RPC或JSON-RPC请求,询问它是否可以在合作伙伴地址中找到电话号码,
- 它在其标准输出上写了一些Asterisk的指令,特别是更改CallerID名称。
此脚本有一些选项:
- Odoo服务器的DNS或IP地址,
- Odoo服务器的端口,
- 通过SSL使用XML-RPC,JSON-RPC或XML-RPC的选项,
- 要使用的Odoo数据库的名称,
- 如果您使用XML-RPC ,则Odoo用户的ID(在我们的示例中,写入我们在上一节中创建的用户星号的ID ); 如果你使用JSON-RPC,Odoo用户的登录,
- 它的密码,
运行set_name_agi.py -h
以获得这些选项的语法。
然后,脚本set_name_incoming_timeout.sh
是一行shell脚本。这是从Asterisk拨号方案调用的脚本set_name_agi.py
,它使用适当的选项调用脚本。为什么我们需要这个中间脚本?set_name_agi.py
默认情况下,此中间脚本调用脚本的短暂超时为2秒; 如果脚本set_name_agi.py
在2秒后没有完成它的工作,它将被杀死。设置这样的超时非常重要,因为Asterisk会在每次拨打电话时调用脚本; 脚本卡住,电话也会卡住,你会错过电话!
编辑脚本set_name_incoming_timeout.sh
并输入正确的选项。
修改星号拨号方案,以便在接到外部电话时调用脚本。如果您自己编写了Asterisk拨号方案,请编辑拨号方案(通常/etc/asterisk/extensions.conf
),并在专用于接收外部电话呼叫的上下文中插入一个扩展,该扩展将执行AGI功能,并将脚本(/usr/local/bin/set_name_incoming_timeout.sh
)的位置作为参数。当然,此扩展必须放在拨打用户IP电话的Dial()功能之前。例如 :
[from-extern]
exten = _141981242,1,AGI(/usr/local/bin/set_name_incoming_timeout.sh)
same = n,Dial(SIP/10, 30)
same = n,141981242,n,Answer()
same = n,Voicemail(10@default,u)
same = n,Hangup()
然后,重新加载Asterisk diaplan:
asterisk*CLI> extensions reload
如果您没有自己编写Asterisk拨号方案,这是使用FreePBX或Wazo或Asterisk的任何其他管理界面的用户的情况,您需要弄清楚如何在管理的拨号方案功能中插入带有AGI脚本的扩展名接听外部电话。如果您需要帮助,请考虑Akretion的服务。
您现在已准备好在Odoo中使用CallerID名称查找接收您的第一个电话!
拨打电话也可以做同样的事情; 设置非常相似,您需要set_name_outgoing_timeout.sh
在拨号方案中使用脚本和一些额外的行。您将在脚本开头的注释中找到一个示例set_name_agi.py
。
设置“开放主叫方”功能
建立
此功能需要与click2dial功能相同的配置,如上所述。
警告:如果您已经部署了click2dial功能并升级了模块以获得新的开放主叫方功能,则应更新/etc/asterisk/manager.conf文件以向AMI用户添加一些写权限,cf click2dial以上部分。
使用“开放主叫方”功能
这是一个典型的场景:
- 你的手机响了
- 您单击屏幕右上角的电话徽标。
- Odoo向Asterisk Manager Interface(AMI)发送状态请求以获取所有当前电话呼叫的列表。它将获得涉及您的电话号码的第一个电话,并检索所显示的电话号码。
- Odoo在合作伙伴/潜在客户/员工/候选人/活动参与者上搜索所呈现的电话。如果找到匹配项,则会打开合作伙伴/潜在客户/员工/候选人/事件参与者的表单视图。
如果找不到匹配项,则会打开一个弹出窗口,显示所显示的电话号码,并建议创建新的合作伙伴/潜在客户或更新现有合作伙伴/潜在客户。
故障排除
如果您对模块有一些问题:
- 使用命令行选项启动odoo-bin
--log-level=debug
:您将获得有关电话号码重新格式化过程和与Asterisk Manager界面的连接的有用消息。 - 还要检查Asterisk端的日志:在Asterisk服务器上,运行:
% asterisk -rvvvvvvvvvvvv
- 如果Odoo服务器和Asterisk不通信,请使用tcpdump或wireshark等工具检查两台计算机之间的网络流量。运行例如:
% tcpdump -n -i eth0 -A -s 0 port 5038
- 对于“在来电时调用Odoo中的CallerID名称”功能,您可以通过在Asterisk控制台中运行此命令来获取有关AGI脚本执行的更多日志:
asterisk*CLI> agi set debug on
要禁用它:asterisk*CLI> agi set debug off
具体请参考原文链接:https://akretion.com/en/open-source-contributions/odoo-asterisk-voip-connector
Odoo-Asterisk connector插件地址下载:https://www.odoo.com/apps/modules/12.0/asterisk_click2dial/