下面的一些笔记看起来会很混乱,因为我是边开发研究,顺手记录的。以后应该会做整理,也许不会233,

  • sudo asterisk -r -vvvvvvvvv 连接到控制台-cli
  • CLI命令

1.sip show peers 

2.module show [like xxx]

3.reload

  • GotoIfTime一个例子是:从上午 9 点到下午5:59,从周一到周五,一个月的任何一天,一年的任何一个月匹配。

GotoIfTime(times,days_of_week,days_of_month,months?label)

Exten =>s,1,GotoIfTime(09:00-17:59, mon-fri, *, *? Open,5,1)

解决freeradius-server安装报错,​​​

  • Feature Code Call Transfers 呼叫转接

两种模式:

Blind transfer

A blind or unsupervised transfer is where the initiating party is blind to what is happening after initiating the transfer. They are removed from the process as soon as they initiate the transfer. It is a sort of "fire and forget" transfer.

Attended transfer

An attended or supervised transfer happens when one party transfers another party to a new location by first dialing the transfer destination and only completing the transfer when ready. The initiating party is attending or supervising the transfer process by contacting the destination before completing the transfer. This is helpful if the transfer initiator wants to make sure someone answers or is ready at the destination.

以下推荐并介绍配置第二种:有人值守的呼叫转接

配置转接需要配置feature.conf和extension.conf

首先配置feature.conf

以下描述均针对被呼叫方
[general]
atxferabort = *3 终止有人值守呼叫转移,否则无法终止
atxfercomplete = *4 完成转接,类似转接员挂断电话,此时呼叫者和第三方接通
atxferthreeway = *5 完成转接,并与其他双方一起进入会话
atxferswap = *6 在完成呼叫转移前,可以用此切换与其他任一方通话

atxfernoanswertimeout = 15 转移操作超时限定
atxferdropcall = no 允许您更改默认回调行为。
默认值为“no”,这会导致Asterisk在提前挂断并且有人值守的传输超时时回拨传输的发起者。
如果设置为“是”,则一旦启动器挂断,传输目标通道将立即转移到正在传输的通道
atxferloopdelay = 10 设置回调重试之间等待的秒
atxfercallbackretries = 2 设置Asterisk尝试将失败的有人值守转移发送回发起者的次数

transferdigittimeout => 3 转接呼叫时,按键数字之间等待的秒数

[featuremap]
blindxfer => #1 ; Blind transfer (default is #) -- Make sure to
set the T and/or t option in the Dial() or Queue() app call!
;disconnect => *0 ; Disconnect (default is *) -- Make sure to se
t the H and/or h option in the Dial() or Queue() app call!
;automon => *1 ; One Touch Record a.k.a. Touch Monitor -- Make
sure to set the W and/or w option in the Dial() or Queue() app call!
atxfer => *2 ; Attended transfer -- Make sure to set the T a
nd/or t option in the Dial() or Queue() app call!
;parkcall => #72 ; Park call (one step parking) -- Make sure to
set the K and/or k option in the Dial() app call!
;automixmon => *3 ; One Touch Record a.k.a. Touch MixMonitor -- M
ake sure to set the X and/or x option in the Dial() or Queue() app call!

一些另外的选项

;xfersound = beep ; to indicate an attended transfer is complete
;xferfailsound = beeperr ; to indicate a failed transfer
;transferdialattempts = 3 ; Number of times that a transferer may attempt to dial an extension before
; being kicked back to the original call.
;transferretrysound = "beep" ; Sound to play when a transferer fails to dial a valid extension.
;transferinvalidsound = "beeperr" ; Sound to play when a transferer fails to dial a valid extension and is out of retries.

其次 extension.conf

exten => xxx,n,Dial(SIP/XXX,30,t) t:允许被叫方转移呼叫,T:允许主叫方转移呼叫

 

此外,这是针对dial的转移,可以将此应用到队列queue中。

asterisk gui

我使用的是2.0版本,学习并使用gui配置各种操作会让很快上手理解各种asterisk的操作。

  • AMI笔记

manager show commands 在cli输入该命令可以查看ami借口支持的命令等。

SipPeers 获取peer列表

ExtensionState 获取制定用户状态

ExtensionStateList 获取所有用户状态

Status状态代码:

-1 =扩展找不到0 =空闲1 =在使用2 =忙4 =不可用8 =振铃16 =正等待

  • 使用pgsql 记录通话,及cdr postgresql 

如果你完全没有或者不能使用这个功能,这个时候你不得不卸载asterisk,重新编译asterisk cdr_pgsql.so模块,

此时可以通过apt 安装pgsql 我验证9.4版本也能与asterisk13配合使用,我开始还担心版本问题,

如果你没有安装pgsql,在你运行./configure 之后,你搜索pg_con你会发现有 no。。什么的,这说明你没有安装pgsql你需要先安装pgsql。

如果你安装了pgsql,在你./configure之后 其实你搜索sql你会发现有两行信息

checking for pg_config... /usr/bin/pg_config
You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.
You need to install postgresql-server-dev-X.Y for building a server-side extension or libpq-dev for building a client-side application.

,如果你能看到类似的,你就选择安装它libpq-dev,之后重新./configure 你会发现会没有那条提示,并且make menuselect 之后,在call Detail Recording-》cdr_pgsql已经被选中或者可以被选中了。这时候你就可以make and make install,之后就是配置巴拉巴拉了。我懒得写了,你可以根据/etc/asterisk/cdr_pgsql.conf里的例子配置就能看出psql数据库需要创建什么角色之类的,请善用源码文档中的资源。。。具体​

其中需要注意的是,如果你完全修改成功之后,在拨打电话之后仍然有报错信息出现,你可以尝试完全停止asterisk 然后重启,这应该是让asterisk能完全初始化一些信息。你如果去google也应该能找到相应问题的解答方案。

你应该重新启动asterisk 已完成重新加载.so

  • pgsql 实时管理sip peers,什么realtime之类的

我这是占个坑,其实上一个工作完成之后,如果你没有看过上面关于pgsql的操作,你得去注意一下,相信后面这个问题也不大了。我应该会直接去创建对应的表。

先根据源码文件中的sql文件创建数据库表,然后可以试着插入一个user,有几个地方需要配置 extconfig.conf 这个应该是为某个配置文件配置一个数据库和对应的驱动 sippeers => pgsql,asterisk,在modules.conf中 load => res_config_pgsql.so,

在sip.conf 中rtupdate=yes 这个你看注释中的解释应该能明白他是干啥的,不过感觉有点子没测试出来作用。接下来你可以把users.conf 或者 sip.conf中的某个用户删除掉,也就是前面插入到数据库的那个user,应该能看到可以成功注册了,不过这时候你会发现 sip show peers 不会出现该用户。配置sip.conf 中rtcachefriends=yes,应该会出现,同时如果你也需要获取peers的

实时状态你就应该在他们的字段qualify=yes qualifyfreq =60这个数字越高它查询间隔越久。

你应该重新启动asterisk 已完成重新加载.so