| Bayonneサンプルについて |

Bayonneは、テレコムアプリケーションを作成するためのフリー(オープンソース)ソフトです。 Bayonneの正式名称は、GNU BayonneでLinuxプロジェクトを手がけている団体(GNU)に所属しています。
|
- ########################### Bayonneサンプルの全体説明 ###########################
- # '#' ラインコメントの開始
- サンプル1:電話の着信、ガイダンスの再生、1桁キー入力の受付
- CTIの最も基本である電話の着信、ガイダンスの再生、1桁キー入力による処理の分岐のサンプルです。
- このサンプルのコールフローは以下のようになります。
- 受話器をあげる
- ガイダンスメッセージの再生
- 入力されたキーを判断し、1なら在庫問い合わせ、9なら処理の終了を行う。
- 利用者がダイヤルを押した(キー入力)場合や、途中で電話を切った場合等にイベントが発生します。コールスクリプトでイベントを受け付ける場合は、「^xxx」と頭に「^」をつけ、続けてイベント名を定義します。このサンプルでは、利用者がダイヤルの「1」と「9」を押した場合と途中で電話を切った場合のイベントを受け取って処理を行っています。
- ---------------------------------------------------------------------------------
- #################################################################################
# 1.受話器をあげる
#
# ■ 処理概要
# 電話が掛かってくるのを待っているだけです。
#
# ■ ポイント
# 電話が掛かってきた場合は、自動的に処理が次の処理へと移動していきますのでここでは
# "answer.intercom"でダイヤル待ちと覚えてだけ覚えておけばよいです。
#################################################################################
# 'answer.intercom'コマンド 受信待ち状態 電話が掛かってくると自動的に自動応答モードに切り替ります。
# answer.intercom
#################################################################################
# 2.ガイダンスメッセージの再生
#
# ■ 処理概要
# ここでの処理では、電話を掛けてきた相手にガイダンスを流す処理を行います。相手に流れるガイダンス
#
# 「ようこそ、在庫問い合わせシステムへ 」
# 「在庫問い合わせは1を」
# 「終了は9を押してください」
#
# 以上のガイダンスをメッセージ毎にauファイルを作成してガイダンスを流します。
# ガイダンスを流した後にキー入力待ちで10秒程待ちます。
#
# ■ ポイント
- # 1.「au」ファイルとは、Windows系でいうところの「wav」ファイルと同じになります。Linux系では、auファイルの方が一般的です。au = wav ファイルとだけ覚えておいてください。
# 2. メッセージを作成する手順
# set %text "メッセージ" 「で流すメッセージを変数に設定する。」
# libexec 30 make_au.pl %text %sessionid 「メッセージファイルを作成する」
# play %aufile 「ガイダンスを流す」
# 3. ガイダンスを流した後にキー入力を要求しておりますのでキー入力待ちをする
#################################################################################
# %text変数にメッセージを代入
set %text "ようこそ、在庫問い合わせシステムへ"
# libexec コマンドは、bayonne より外部処理(perl)を起動するためのコマンドです。
# libexec [タイムアウト] [実行perl] [auファイルにするメッセージ] [セッションID]
# ここの処理では、%text変数に設定された「ようこそ、在庫問い合わせシステムへ」の
# メッセージをauファイルとして作成しております。ファイル名は、セッションID.auとして作成されます。
# make_au.plは、受け取ったメッセージをauファイルに落すPerlスクリプトです。
ibexec 30 make_au.pl %text %sessionid
# playコマンドは、「auファイル」を読上げるコマンドです。
# 直前で作成したauファイルを電話の向こうの相手に音声合成により応答します。
# この場合は、直前に作成した auファイルの内容が、"ようこそ、在庫問い合わせシステムへ"
# ですので電話の向こう側にいる人には、このガイダンスが流されます。
play %aufile
# %text変数にメッセージを代入
set %text "在庫問い合わせは1を"
# 上記メッセージの au ファイルを作成している。
# auファイルの中身は、"在庫問い合わせは1を"のファイルが作成されている。
libexec 30 make_au.pl %text %sessionid
# "在庫問い合わせは1を"のガイダンスを流す。
play %aufile
# %text変数にメッセージを代入
set %text "終了は9を押してください"
# 上記メッセージの au ファイルを作成している。
# auファイルの中身は、"終了は9を押してください" のファイルが作成されている。
libexec 30 make_au.pl %text %sessionid
# "終了は9を押してください" のガイダンスを流す。
play %aufile
# ガイダンスを流した後に10秒間キー受付待ち
sleep 10
#########################################################################
# 3.入力されたキーを判断し、1なら在庫問い合わせ、9なら処理の終了を行う。
#
# ■ 処理概要
# キー入力されたプッシュボタンに対して処理を実行します。
#
# ■ ポイント
# ^1 "1"のプッシュボダンが押された
# ^9 "9"のプッシュボダンが押された
# ^hangup 途中で電話が切られた
# ^error システム上何ならかエラーが発生した。
#
#########################################################################
##########################
#キー入力ハンドリング
##########################
^1
#####1が押されたので、在庫問い合わせ処理へ
redirect ::zaiko-toiawase
^9
#####9が押されたので処理を終了する。
exit
##########################
# イベントハンドリング
##########################
^hangup
#####電話が切れた
slog.info "--hangup"
exit
^error
#####エラー
slog.err "--error"
slog.err %script.error
exit
-------------------------------------------------------------------------
サンプル2 : 4桁ダイヤルの受付及びデータベースへの問い合わせ
サンプル1で利用者が「1」の在庫問い合わせを支持した場合の在庫問い合わせ処理です。
このサンプルのコールフローは以下のようになります。
- ガイダンスメッセージの再生。
- 4桁の商品コードを受け付ける。
- データベースに問い合わせを行う。
- 問い合わせ結果をお知らせする。
-------------------------------------------------------------------------
#########################
#在庫問い合わせ処理
#########################
::zaiko-toiawase
#####音声合成ソフトを使ってガイダンスメッセージの作成と再生を行う。
set %text %ttsmode "4桁の商品コードを押してください"
libexec 30 make_au.pl %text %sessionid
play %aufile
#####キー入力バッファをクリア
cleardigits
#####4桁の入力を受け付ける、*と#キーは押されても無視する。
collect count=4 timeout=10 ignore="*#"
#####入力された4桁の数字は、%session.digitsに格納される。
set %syouhin_cd %session.digits
#####入力した商品コードでデータベースを検索
#####実際の検索は、Perlで作成した商品検索モジュールで行う。
libexec 30 syouhin_query.pl %syouhin_cd
#####データベースの問い合わせ結果を判断する。
case %retval -eq 0
#####
#商品が存在した
#####
#####商品名の読み上げ
set %text %ttsmode %syouhin_name
libexec 30 make_au.pl %text %sessionid
play %aufile
set %text %ttsmode "在庫は残り" %zaiko_suu "こです"
libexec 30 make_au.pl %text %sessionid
play %aufile
#####コールスクリプトの頭に戻る
#####sample01はこのスクリプトのファイル名で、ファイルの先頭=処理の先頭を意味する。
goto ::sample01
case %retval -eq 1
#####
#商品が存在しない
#####
#####存在しないメッセージを再生する。
set %text %ttsmode "存在しない商品です"
libexec 30 make_au.pl %text %sessionid
play %aufile
#####再度商品コードの入力が行えるよう、この関数の頭に戻る。
#####sample01はこのスクリプトのファイル名で、ファイルの先頭=処理の先頭を意味する。
goto ::sample01
otherwise
#####
#エラー
#####
#####エラーメッセージを再生する。
set %text %ttsmode "在庫問い合わせに失敗しました。デモを終了します。"
libexec 30 make_au.pl %text %sessionid
play %aufile
#####エラーログを出力する
slog.error "syouhin_query.pl error return [" %retval "]"
#####処理を終了する
exit
endcase
exit
##########################
#キー入力ハンドリング
##########################
#####キー入力はcollectで受け取っているので
#####1桁キーの入力はここでは受け付けない
##########################
#イベントハンドリング
##########################
^timeout
#####4桁のキー入力の受付で入力がなかったためのタイムアウト
set %text %ttsmode "タイムアウトのため、デモを終了します。"
libexec 30 make_au.pl %text %sessionid
play %aufile
slog.error "--timeout"
exit
^hangup
#電話が切れた
slog.info "--hangup"
exit
^error
#エラー
slog.err "--error"
slog.err %script.error
exit
-------------------------------------------------------------------------
サンプル3:商品の問い合わせを行うPerlスクリプト
サンプル2で利用者が入力した商品コードでデータベースに問い合わせを行うPerlスクリプトです。
コールスクリプトからの受け取りは
$syouhin_cd = $TGI::QUERY{'syouhin_cd'};
コールスクリプトへのデータ渡しは
TGI::set("retval",$retval);で、行います。
-------------------------------------------------------------------------
use strict;
use lib '/usr/local/libexec/bayonne/'; # 1.2.x
use TGI;
use DBI;
&main;
sub main
{
my $db;
my $dns = 'DBI:Pg:dbname=CTI';
my $user = 'bayonne';
my $passwd = 'bayonne';
my $sqlString;
my @val;
my $retval;
my $syouhin_cd;
my $syouhin_name = " ";
my $zaiko_suu = " ";
my $i;
my $var
############################# 全体説明 ############################
# '#' ラインコメントの開始
サンプル1 : 電話の着信、ガイダンスの再生、1桁キー入力の受付
CTIの最も基本である電話の着信、ガイダンスの再生、1桁キー入力による処理の分岐のサンプルです。
このサンプルのコールフローは以下のようになります。
- 受話器をあげる
- ガイダンスメッセージの再生
- 入力されたキーを判断し、1なら在庫問い合わせ、9なら処理の終了を行う
利用者がダイヤルを押した(キー入力)場合や、途中で電話を切った場合等にイベントが発生します。コールスクリプトでイベントを受け付ける場合は、「^xxx」と頭に「^」をつけ、続けてイベント名を定義します。このサンプルでは、利用者がダイヤルの「1」と「9」を押した場合と途中で電話を切った場合のイベントを受け取って処理を行っています。
-------------------------------------------------------------------------
#########################################################################
# 1.受話器をあげる
#
# ■ 処理概要
# 電話が掛かってくるのを待っているだけです。
#
# ■ ポイント
# 電話が掛かってきた場合は、自動的に処理が次の処理へと移動していきますのでここでは"answer.intercom"でダイヤル待ちと覚えてだけ覚えておけばよいです。
#########################################################################
# 'answer.intercom'コマンド 受信待ち状態 電話が掛かってくると自動的に自動応答モードに切り替ります。
answer.intercom
#########################################################################
# 2.ガイダンスメッセージの再生
#
# ■ 処理概要
# ここでの処理では、電話を掛けてきた相手にガイダンスを流す処理を行います。
#
# 相手に流れるガイダンス
# 「ようこそ、在庫問い合わせシステムへ 」
# 「在庫問い合わせは1を」
# 「終了は9を押してください」
# 以上のガイダンスをメッセージ毎にauファイルを作成してガイダンスを流します。
# ガイダンスを流した後にキー入力待ちで10秒程待ちます。
#
# ■ ポイント
# 1.「au」ファイルとは、Windows系でいうところの「wav」ファイルと同じになります。Linux系では、auファイルの方が一般的です。au = wav ファイルとだけ覚えておいてください。
# 2. メッセージを作成する手順
# set %text "メッセージ" 「で流すメッセージを変数に設定する。」
# libexec 30 make_au.pl %text %sessionid 「メッセージファイルを作成する」
# play %aufile 「ガイダンスを流す」
# 3. ガイダンスを流した後にキー入力を要求しておりますのでキー入力待ちをする
#########################################################################
# %text変数にメッセージを代入
set %text "ようこそ、在庫問い合わせシステムへ"
# libexec コマンドは、bayonne より外部処理(perl)を起動するためのコマンドです。
# libexec [タイムアウト] [実行perl] [auファイルにするメッセージ] [セッションID]
# ここの処理では、%text変数に設定された「ようこそ、在庫問い合わせシステムへ」の
# メッセージをauファイルとして作成しております。ファイル名は、セッションID.auとして作成されます。
# make_au.plは、受け取ったメッセージをauファイルに落すPerlスクリプトです。
libexec 30 make_au.pl %text %sessionid
# playコマンドは、「auファイル」を読上げるコマンドです。
# 直前で作成したauファイルを電話の向こうの相手に音声合成により応答します。
# この場合は、直前に作成した auファイルの内容が、"ようこそ、在庫問い合わせシステムへ"
# ですので電話の向こう側にいる人には、このガイダンスが流されます。
play %aufile
# %text変数にメッセージを代入
set %text "在庫問い合わせは1を"
# 上記メッセージの au ファイルを作成している。
# auファイルの中身は、"在庫問い合わせは1を"のファイルが作成されている。
libexec 30 make_au.pl %text %sessionid
# "在庫問い合わせは1を"のガイダンスを流す。
play %aufile
# %text変数にメッセージを代入
set %text "終了は9を押してください"
# 上記メッセージの au ファイルを作成している。
# auファイルの中身は、"終了は9を押してください" のファイルが作成されている。
libexec 30 make_au.pl %text %sessionid
# "終了は9を押してください" のガイダンスを流す。
play %aufile
# ガイダンスを流した後に10秒間キー受付待ち
sleep 10
#########################################################################
# 3.入力されたキーを判断し、1なら在庫問い合わせ、9なら処理の終了を行う。
#
# ■ 処理概要
# キー入力されたプッシュボタンに対して処理を実行します。
#
# ■ ポイント
# ^1 "1"のプッシュボダンが押された
# ^9 "9"のプッシュボダンが押された
# ^hangup 途中で電話が切られた
# ^error システム上何ならかエラーが発生した。
#
#########################################################################
##########################
#キー入力ハンドリング
##########################
^1
#####1が押されたので、在庫問い合わせ処理へ
redirect ::zaiko-toiawase
^9
#####9が押されたので処理を終了する。
exit
##########################
# イベントハンドリング
##########################
^hangup
#####電話が切れた
slog.info "--hangup"
exit
^error
#####エラー
slog.err "--error"
slog.err %script.error
exit
-------------------------------------------------------------------------
サンプル2 : 4桁ダイヤルの受付及びデータベースへの問い合わせ
サンプル1で利用者が「1」の在庫問い合わせを支持した場合の在庫問い合わせ処理です。
このサンプルのコールフローは以下のようになります。
- ガイダンスメッセージの再生
- 4桁の商品コードを受け付ける。
- データベースに問い合わせを行う。
- 問い合わせ結果をお知らせする。
-------------------------------------------------------------------------
#########################
#在庫問い合わせ処理
#########################
::zaiko-toiawase
#####音声合成ソフトを使ってガイダンスメッセージの作成と再生を行う。
set %text %ttsmode "4桁の商品コードを押してください"
libexec 30 make_au.pl %text %sessionid
play %aufile
#####キー入力バッファをクリア
cleardigits
#####4桁の入力を受け付ける、*と#キーは押されても無視する。
collect count=4 timeout=10 ignore="*#"
#####入力された4桁の数字は、%session.digitsに格納される。
set %syouhin_cd %session.digits
#####入力した商品コードでデータベースを検索
#####実際の検索は、Perlで作成した商品検索モジュールで行う。
libexec 30 syouhin_query.pl %syouhin_cd
#####データベースの問い合わせ結果を判断する。
case %retval -eq 0
#####
#商品が存在した
#####
#####商品名の読み上げ
set %text %ttsmode %syouhin_name
libexec 30 make_au.pl %text %sessionid
play %aufile
set %text %ttsmode "在庫は残り" %zaiko_suu "こです"
libexec 30 make_au.pl %text %sessionid
play %aufile
#####コールスクリプトの頭に戻る
#####sample01はこのスクリプトのファイル名で、ファイルの先頭=処理の先頭を意味する。
goto ::sample01
case %retval -eq 1
#####
#商品が存在しない
#####
#####存在しないメッセージを再生する。
set %text %ttsmode "存在しない商品です"
libexec 30 make_au.pl %text %sessionid
play %aufile
#####再度商品コードの入力が行えるよう、この関数の頭に戻る。
#####sample01はこのスクリプトのファイル名で、ファイルの先頭=処理の先頭を意味する。
goto ::sample01
otherwise
#####
#エラー
#####
#####エラーメッセージを再生する。
set %text %ttsmode "在庫問い合わせに失敗しました。デモを終了します。"
libexec 30 make_au.pl %text %sessionid
play %aufile
#####エラーログを出力する
slog.error "syouhin_query.pl error return [" %retval "]"
#####処理を終了する
exit
endcase
exit
##########################
#キー入力ハンドリング
##########################
#####キー入力はcollectで受け取っているので
#####1桁キーの入力はここでは受け付けない
##########################
#イベントハンドリング
##########################
^timeout
#####4桁のキー入力の受付で入力がなかったためのタイムアウト
set %text %ttsmode "タイムアウトのため、デモを終了します。"
libexec 30 make_au.pl %text %sessionid
play %aufile
slog.error "--timeout"
exit
^hangup
#電話が切れた
slog.info "--hangup"
exit
^error
#エラー
slog.err "--error"
slog.err %script.error
exit
-------------------------------------------------------------------------
サンプル3 : 商品の問い合わせを行うPerlスクリプト
サンプル2で利用者が入力した商品コードでデータベースに問い合わせを行うPerlスクリプトです。
コールスクリプトからの受け取りは
$syouhin_cd = $TGI::QUERY{'syouhin_cd'};
コールスクリプトへのデータ渡しは
TGI::set("retval",$retval);で、行います。
-------------------------------------------------------------------------
use strict;
use lib '/usr/local/libexec/bayonne/'; # 1.2.x
use TGI;
use DBI;
&main;
sub main
{
my $db;
my $dns = 'DBI:Pg:dbname=CTI';
my $user = 'bayonne';
my $passwd = 'bayonne';
my $sqlString;
my @val;
my $retval;
my $syouhin_cd;
my $syouhin_name = " ";
my $zaiko_suu = " ";
my $i;
my $var;
#コールスクリプトからの入力引数
$syouhin_cd = $TGI::QUERY{'syouhin_cd'};
$db = DBI->connect($dns, $user, $passwd, {RaiseError => 1, AutoCommit => 0});
$sqlString = qq(
SELECT T1.商品コード,T1.商品名,T1.商品カナ名
,CASE WHEN T2.当月在庫数 IS NULL THEN 0 ELSE T2.当月在庫数 END
FROM 商品マスタ T1 LEFT JOIN
在庫マスタ T2 ON (T1.商品コード = T2.商品コード AND T2.年月 = TO_CHAR(CURRENT_DATE,'YYYYMM'))
WHERE T1.商品コード=?);
my $sth = $db->prepare($sqlString);
$sth->execute($syouhin_cd);
if($sth->rows() == 0) {
$retval = 1;
print "NO DATA FOUND\n";
} elsif ($sth->rows() > 1) {
$retval = 2;
print "TOO MANY ROWS\n";
} else {
$retval = 0;
@val = $sth->fetchrow_array;
$syouhin_name = $val[1];
$zaiko_suu = $val[3];}
$sth->finish;
$db->disconnect;
#コールスクリプトに検索結果、商品名、在庫数を返す。
TGI::set("retval",$retval);
TGI::set("syouhin_name",$syouhin_name);
TGI::set("zaiko_suu",$zaiko_suu);}
---------------------------------------------------------------------;----
#コールスクリプトからの入力引数
$syouhin_cd = $TGI::QUERY{'syouhin_cd'};
$db = DBI->connect($dns, $user, $passwd, {RaiseError => 1, AutoCommit => 0});
$sqlString = qq(
SELECT T1.商品コード,T1.商品名,T1.商品カナ名
CASE WHEN T2.当月在庫数 IS NULL THEN 0 ELSE T2.当月在庫数 END
FROM 商品マスタ T1 LEFT JOIN
在庫マスタ T2 ON (T1.商品コード = T2.商品コード AND T2.年月 = TO_CHAR(CURRENT_DATE,'YYYYMM'))
WHERE T1.商品コード=?);
my $sth = $db->prepare($sqlString);
$sth->execute($syouhin_cd);
if($sth->rows() == 0) {
$retval = 1;
print "NO DATA FOUND\n";
} elsif ($sth->rows() > 1) {
$retval = 2;
print "TOO MANY ROWS\n";
} else {
$retval = 0;
@val = $sth->fetchrow_array;
$syouhin_name = $val[1];
$zaiko_suu = $val[3];}
$sth->finish;
$db->disconnect;
#コールスクリプトに検索結果、商品名、在庫数を返す
TGI::set("retval",$retval);
TGI::set("syouhin_name",$syouhin_name);
TGI::set("zaiko_suu",$zaiko_suu);}
このサンプルについてお問合せは、こちら |
| TOPへ |
|
| Home | CTI | Download | What's New | Profile | Address |
株式会社オープンコム
〒102-0072 東京都千代田区飯田橋4-8-13 山商ビル9階
TEL: 03-3263-7885 FAX: 03-3263-7889
お問合せは webinfo@voice-com.netで。 |
最新更新日:
|
|
| (c) Copyright 2003 OC, Inc. All right reserved |
|
 |
「Linuxの新しい活用方法を発見」
このレポートの内容は以下になります。このレポートを無料で差し上げます。資料請求はこちら
■ はじめに
■ なぜLinux+Bayonneか
■ 弊社が提供するCTI構築
サービス
■ コスト削減が実現できるか
■ どういった使い方ができる
のか
■ 苦労しました
■ 弊社が提供するもの
■ 課題
■ お問い合わせ |
HOMEへ |