基于freeswitch的开发的四种方式:

嵌入式脚本_lua

swig 介绍

嵌入式脚本_lua_02

freeswitch 中的嵌入式脚本

嵌入式脚本_lua_03

这些嵌入式脚本主要用于编写IVR类的应用,主要用来控制一路通话的呼叫流程。

嵌入式脚本_Lua_04

LUA

嵌入式脚本_Lua_05

嵌入式脚本_Lua_06

Lua模块的文档也是最全的。

Lua 语法简介

Lua 的语法非常简介易懂。

相似性

嵌入式脚本_lua_07

嵌入式脚本_python_08

嵌入式脚本_python_09

嵌入式脚本_Lua_10

嵌入式脚本_python_11

嵌入式脚本_Lua_12

嵌入式脚本_python_13

嵌入式脚本_python_14

区别

嵌入式脚本_Lua_15

嵌入式脚本_lua_16

嵌入式脚本_python_17

嵌入式脚本_lua_18

嵌入式脚本_python_19

嵌入式脚本_python_20

嵌入式脚本_Lua_21

嵌入式脚本_python_22

嵌入式脚本_python_23

其他

嵌入式脚本_python_24

将电话路由到 Lua 脚本

嵌入式脚本_Lua_25

Session 相关函数

嵌入式脚本_Lua_26

嵌入式脚本_Lua_27

嵌入式脚本_python_28

Session 相关的几个常用的函数:

嵌入式脚本_lua_29

嵌入式脚本_Lua_30

身份证号的例子用 Lua 改写:

嵌入式脚本_lua_31

Lua中的 read 比 Dialplan App中的read少了一个参数,因为session:read()能返回值。

嵌入式脚本_lua_32

timeout 是收齐所有号的超时值,digit_timeout是允许的两次按键之音的时间间隔最大值,transfer_on_failure 表示如果失败后是否转到 Dialplan 中的一个 Extension上;格式是 failed XML dialplan。

嵌入式脚本_Lua_33

嵌入式脚本_Lua_34

嵌入式脚本_lua_35

嵌入式脚本_lua_36

非 Session 函数和独立的 Lua脚本

嵌入式脚本_lua_37

Event 相关函数

嵌入式脚本_Lua_38

嵌入式脚本_lua_39

嵌入式脚本_Lua_40

嵌入式脚本_lua_41

一个完整的例子:

嵌入式脚本_Lua_42

嵌入式脚本_Lua_43

保存到 /tmp/event.lua 中,执行结果:

嵌入式脚本_Lua_44

嵌入式脚本_Lua_45

Chat 相关函数

嵌入式脚本_Lua_46

下面的 Lua脚本可以在 Chatplan 中执行,收到消息后先打印出来,然后修改目的号码和主机,并且发送出去。

嵌入式脚本_Lua_47

在 Chatplan中可以使用以下方法调用 Lua脚本:

嵌入式脚本_lua_48

Lua 拨号计划

嵌入式脚本_python_49

嵌入式脚本_lua_50

Dialplan 有三个要素:Extension、Context、Dialplan的名字,在 Lua Dialplan中,dialplan的名字是Lua,context是Lua脚本的路径。

把脚本另存为 /tmp/db.lua,使用originate测试:

嵌入式脚本_python_51

嵌入式脚本_python_52

originate 首先呼叫 uesr/1000,接听后,转入Lua Dialplan中的/tmp/dp.lua 这一 context 进行路由。

可以在 XML Dialplan 中转入 Lua dialplan:

嵌入式脚本_lua_53

执行 sofia profile internal rescan。如果是注册用户拨打,还需要修改 User Directory 中的 user_context,如 1000.xml:

嵌入式脚本_lua_54

连接数据库

嵌入式脚本_lua_55

嵌入式脚本_python_56

嵌入式脚本_Lua_57

执行结果:

嵌入式脚本_python_58

查看数据库:

嵌入式脚本_lua_59

嵌入式脚本_lua_60

其他脚本语言

JavaScript

是web浏览器上最主流的编程语言,最早用于配合HTML渲染页面,遵循EMCAScript标准。

通过加载 mod_v8 模块可以使用JavaScript解析器,该模块基于Google的V8 JavaScript库。

使用JavaScript(app)执行一个Session相关的脚本,或jsrun(api)执行一个非Session相关的脚本。

嵌入式脚本_Lua_61

嵌入式脚本_Lua_62

Python

嵌入式脚本_Lua_63

安装:

嵌入式脚本_Lua_64

在freeswitch的源代码目录中:

嵌入式脚本_python_65

嵌入式脚本_lua_66

可以将Lua或js脚本放到任意路径中,但python有自己的环境和Package/module机制,因而需要配置特殊的路径。/usr/lib/python2.7/dist-packages/。

嵌入式脚本_python_67

嵌入式脚本_Lua_68

嵌入式脚本_python_69

嵌入式脚本_python_70