Asterisk AGI 调用

Asterisk 支持 AGI 接口,它支持多种语言,并提供多种语言 SDK,例如 Ruby,Java,PHP,Python,C++,.Net,nodejs,Go。

我使用的 Golang 语言,使用这个github.com/CyCoreSystems/agi AGI 库。

使用 go 编写的 agi 脚本

package main

import (
	"github.com/CyCoreSystems/agi"
)

func main() {
	a := agi.NewStdio()
	// 设置通道变量
	err := a.Set("MYVAR", "foo")
	if err != nil {
		panic("failed to set variable MYVAR")
	}

	m := a.Variables
	// 获取AGI参数
	callerid, ok := m["agi_callerid"]
	if !ok {
		a.Verbose("failed to get callerid", 1)
		panic("failed to get callerid")
	}
	// 打印日志
	a.Verbose(callerid, 4)
	// 播放音频文件
	a.StreamFile("bean", "", 0)
	a.StreamFile("thanks", "", 0)
}

我们需要将编译之后的脚本文件放在/var/lib/asterisk/agi-bin/目录中。 并执行chmod +x agidemo添加执行权限。