创建自己的 IVR 来访问数据库
Create own IVR that will access Database
我目前正在一家公司实习,任务是研究一些使用电话的方法。目标是让我们的客户能够通过 IVR-prompted 问题进行呼叫,获取信息。信息将来自我们的数据库。
我已经使用 Twilio 和一个小型 python 应用程序成功完成了这项工作。它完全符合我的要求,除了成本因素可能有点高,尤其是当我们有 30,000 多个客户要求会议结束时。
我的目标是找到一种方法来复制我在 Twilio 上所做的事情,但要在我们自己的服务器上进行。我找到了像 Asterisk 和 IncrediblePBX 这样的选项,但是由于我对 Linux 的了解有限,我 运行 遇到的每个错误都会导致在互联网上搜索答案。最后,我不确定我是否正朝着正确的方向前进。
这是我想要完成的示例:
客户拨入号码。他们被指示提供一个帐号(可能是他们的 phone 号码),届时它将获取此信息并与数据库对话。收集此信息后,它将向客户转发他们的帐户状态等。
问题:
我希望使用 Google 语音来路由类似于 Twilio 的呼叫,这可能吗?或者,我的公司可以切换到 VoIP 并做同样的事情吗?
如果我离开 Twilio,Asterisk 可以执行必要的任务吗?接听电话并运行启用应用程序以收集数据库信息。
Twilio 的当前代码,在 Python 中:
from flask import Flask, request, redirect
import twilio.twiml
import json
from urllib.request import urlopen
app = Flask(__name__)
callers = {
"+": "Nicholas",
}
@app.route("/", methods=['GET', 'POST'])
def initial():
# Get the caller's phone number from the incoming Twilio request
from_number = request.values.get('From', None)
resp = twilio.twiml.Response()
# if the caller is someone we know:
if from_number in callers:
# Greet the caller by name
caller = callers[from_number]
else:
caller = ""
resp = twilio.twiml.Response()
resp.say("Hello " + caller)
resp.say("Thank you for calling.")
your_number = list(from_number)
del your_number[0]
del your_number[0]
resp.say("You are calling from: ")
x = 0
while x < len(your_number):
resp.say(your_number[x])
x += 1
print("Please enter the neighborhood I.D. you're looking for.")
with resp.gather(numDigits=1, action="/handle-first", method="POST") as g:
g.say("Please enter the neighborhood I.D. you're looking for.")
return str(resp)
@app.route("/handle-first", methods=['GET', 'POST'])
def handle_key():
digit_pressed = request.values.get('Digits', '')
resp = twilio.twiml.Response()
url = 'http://localhost/...'
response = urlopen(url)
data = json.loads(response.readall().decode('utf-8'))
current = data['rows'][0]['Neighborhood']
print(current)
resp.say("You have chosen " + current + "as your neighborhood.")
with resp.gather(numDigits=1, action="/handle-second", method="POST") as h:
h.say("Press 1 to choose another Neighborhood?")
return str(resp)
@app.route("/handle-second", methods=['GET', 'POST'])
def handle_key2():
digit_pressed = request.values.get('Digits', '')
resp = twilio.twiml.Response()
if digit_pressed == "1":
return redirect("/")
else:
resp.say("Thank you for calling. Good-bye.")
return str(resp)
if __name__ == "__main__":
app.run(debug=True)
是的,asterisk 可以完成您可以编程的所有任务。它甚至有 api 用于访问原始流。
但是不行,您不能使用 SAME 代码。
对于google语音检查chan_motif代码。
对于数据库访问,使用 dialplan+realtime 或 func_odbc 或 fastagi/agi 接口。
Asterisk 与 Twilio 有着根本的不同,老实说它们有些相反。您正在寻求遵循的轨道是 Asterisk 拨号方案与 AGI 的组合。 AGI 是 Asterisk 网关接口,它将使您能够通过简单的脚本机制与 Asterisk 进行交互。 API 相当简单,您可以使用一整套现成的库。这么说吧,当涉及到 AGI 时,只需选择你的毒药 - PHP、Python、JAVA、Ruby - 都可用。
我个人最喜欢的,也是 Asterisk 世界中的许多人,是 PHP - 带有一个名为 PHP-AGI 的 LGPL 组件。它相当古老,已经存在多年,但适用于所有版本的 Asterisk。如果您希望走在最前沿并需要更强的呼叫控制,您可以使用 ARI(Asterisk REST 接口),但是,从您的要求来看 - 这太过分了。
您可以在 link:
阅读一些关于 PHP 的 AGI 开发
https://www.packtpub.com/books/content/asterisk-gateway-interface-scripting-php
(可耻的外挂-我写的书)
此外,您可以参考以下演示文稿以获取更多信息(同样,我自己的演示文稿) - 它有点旧,但在概念和用法方面仍然有效:
http://osdc.org.il/2006/html/Asterisk_AGI_Programming.ppt
祝你好运
您可能正在寻找开源 IVR 解决方案。我唯一知道的是 OpenVBX.
我绝不隶属于他们或 Twilio。
我目前正在一家公司实习,任务是研究一些使用电话的方法。目标是让我们的客户能够通过 IVR-prompted 问题进行呼叫,获取信息。信息将来自我们的数据库。
我已经使用 Twilio 和一个小型 python 应用程序成功完成了这项工作。它完全符合我的要求,除了成本因素可能有点高,尤其是当我们有 30,000 多个客户要求会议结束时。
我的目标是找到一种方法来复制我在 Twilio 上所做的事情,但要在我们自己的服务器上进行。我找到了像 Asterisk 和 IncrediblePBX 这样的选项,但是由于我对 Linux 的了解有限,我 运行 遇到的每个错误都会导致在互联网上搜索答案。最后,我不确定我是否正朝着正确的方向前进。
这是我想要完成的示例:
客户拨入号码。他们被指示提供一个帐号(可能是他们的 phone 号码),届时它将获取此信息并与数据库对话。收集此信息后,它将向客户转发他们的帐户状态等。
问题: 我希望使用 Google 语音来路由类似于 Twilio 的呼叫,这可能吗?或者,我的公司可以切换到 VoIP 并做同样的事情吗?
如果我离开 Twilio,Asterisk 可以执行必要的任务吗?接听电话并运行启用应用程序以收集数据库信息。
Twilio 的当前代码,在 Python 中:
from flask import Flask, request, redirect
import twilio.twiml
import json
from urllib.request import urlopen
app = Flask(__name__)
callers = {
"+": "Nicholas",
}
@app.route("/", methods=['GET', 'POST'])
def initial():
# Get the caller's phone number from the incoming Twilio request
from_number = request.values.get('From', None)
resp = twilio.twiml.Response()
# if the caller is someone we know:
if from_number in callers:
# Greet the caller by name
caller = callers[from_number]
else:
caller = ""
resp = twilio.twiml.Response()
resp.say("Hello " + caller)
resp.say("Thank you for calling.")
your_number = list(from_number)
del your_number[0]
del your_number[0]
resp.say("You are calling from: ")
x = 0
while x < len(your_number):
resp.say(your_number[x])
x += 1
print("Please enter the neighborhood I.D. you're looking for.")
with resp.gather(numDigits=1, action="/handle-first", method="POST") as g:
g.say("Please enter the neighborhood I.D. you're looking for.")
return str(resp)
@app.route("/handle-first", methods=['GET', 'POST'])
def handle_key():
digit_pressed = request.values.get('Digits', '')
resp = twilio.twiml.Response()
url = 'http://localhost/...'
response = urlopen(url)
data = json.loads(response.readall().decode('utf-8'))
current = data['rows'][0]['Neighborhood']
print(current)
resp.say("You have chosen " + current + "as your neighborhood.")
with resp.gather(numDigits=1, action="/handle-second", method="POST") as h:
h.say("Press 1 to choose another Neighborhood?")
return str(resp)
@app.route("/handle-second", methods=['GET', 'POST'])
def handle_key2():
digit_pressed = request.values.get('Digits', '')
resp = twilio.twiml.Response()
if digit_pressed == "1":
return redirect("/")
else:
resp.say("Thank you for calling. Good-bye.")
return str(resp)
if __name__ == "__main__":
app.run(debug=True)
是的,asterisk 可以完成您可以编程的所有任务。它甚至有 api 用于访问原始流。
但是不行,您不能使用 SAME 代码。
对于google语音检查chan_motif代码。
对于数据库访问,使用 dialplan+realtime 或 func_odbc 或 fastagi/agi 接口。
Asterisk 与 Twilio 有着根本的不同,老实说它们有些相反。您正在寻求遵循的轨道是 Asterisk 拨号方案与 AGI 的组合。 AGI 是 Asterisk 网关接口,它将使您能够通过简单的脚本机制与 Asterisk 进行交互。 API 相当简单,您可以使用一整套现成的库。这么说吧,当涉及到 AGI 时,只需选择你的毒药 - PHP、Python、JAVA、Ruby - 都可用。
我个人最喜欢的,也是 Asterisk 世界中的许多人,是 PHP - 带有一个名为 PHP-AGI 的 LGPL 组件。它相当古老,已经存在多年,但适用于所有版本的 Asterisk。如果您希望走在最前沿并需要更强的呼叫控制,您可以使用 ARI(Asterisk REST 接口),但是,从您的要求来看 - 这太过分了。
您可以在 link:
阅读一些关于 PHP 的 AGI 开发https://www.packtpub.com/books/content/asterisk-gateway-interface-scripting-php
(可耻的外挂-我写的书)
此外,您可以参考以下演示文稿以获取更多信息(同样,我自己的演示文稿) - 它有点旧,但在概念和用法方面仍然有效:
http://osdc.org.il/2006/html/Asterisk_AGI_Programming.ppt
祝你好运
您可能正在寻找开源 IVR 解决方案。我唯一知道的是 OpenVBX.
我绝不隶属于他们或 Twilio。