Permalink
Browse files

Version 1.2

See README.md
  • Loading branch information...
rutoru committed May 25, 2014
1 parent 4211cca commit 0e7bdb3cf1227cd8e6febaa20d33a0a5886d88f5
View
@@ -8,7 +8,7 @@ Runa-CCAは、[Twilio](http://twilio.kddi-web.com)を使った、やや本格的
[Twilio](http://twilio.kddi-web.com)調査中というのと、プログラミング勉強中というのとで、いろいろといまいちです。バージョンアップしていきます。
最新はVersion 1.1。バージョンについてはREADME最後の方で説明しています。
最新はVersion 1.2。バージョンについてはREADME最後の方で説明しています。
概要
------
@@ -19,7 +19,9 @@ Runa-CCAは、[Twilio](http://twilio.kddi-web.com)を使った、やや本格的
+ Twilioソフトフォン
+ ログイン認証(SystemAdmin,Supervisor,Operator権限)
+ 発信・着信
+ キューへの発信・着信待機(オペレータの所属するキューの一覧より)
+ キューへの発信・着信待機(オペレータの所属するキューの一覧より発信可能)
+ ミュート/ミュート解除(Version 1.2〜)
+ DTMF送信用ダイヤルパッド(Version 1.2〜)
+ 管理機能
+ ログイン認証(SystemAdmin,Supervisor,Operator権限)
+ オペレータ管理(追加・一覧表示・削除・変更)
@@ -30,6 +32,8 @@ Runa-CCAは、[Twilio](http://twilio.kddi-web.com)を使った、やや本格的
+ 音声ガイダンス
+ キューイング(待ち順番アナウンス付き)
+ ヒストリカルレポート収集
+ レポート
+ ウォールボード(オペレータの所属するキュー情報を表示)(Version 1.1〜)
### Webクライアント(Twilioソフトフォン) ###
[flickrに画面イメージを上げておきました](https://www.flickr.com/x/t/0093009/photos/40853659@N06/sets/72157644527599345/)。
@@ -54,6 +58,7 @@ MySQLのテーブルに格納されます。レポートの参照は、MySQLの
------
#### Version 0.8 ####
プレリリース版です。
#### Version 1.0 ####
リリース版です。
@@ -73,6 +78,21 @@ MySQLのテーブルに格納されます。レポートの参照は、MySQLの
+ TwiML出力方法の変更。Webクライアント側と合わせてTwigを利用するようにしました。
+ 不要ファイルの削除と、細かなバグ修正を実施。
#### Version 1.2 ####
ソフトフォンの機能追加を行いました。
+ ソフトフォン
+ ミュート/ミュート解除、ダイヤルパッド(DTMF送信用)ボタンを追加。
+ ボタンの表示・非表示を追加(通話設立前はHangUpボタン非表示等)。
+ ソフトフォン小型化。
+ ソフトフォン起動前に、オペレータが持っているキュー情報を更新する仕様に変更。
+ Webクライアント
+ キューID(TwilioのFriendly Name)の空白を非許容に変更(CSSと相性悪いので)。a-Z0-9に加えて#_-を許容。
+ キューを持っていないオペレータの表示がエラーになっていたので、エラーにならないように修正。
+ その他
+ サンプルSQLのキュー作成部分を削除(Webクライアントからキューを作成してください)。
ライセンス
----------
@@ -157,6 +157,4 @@ ENGINE InnoDB;
*/
INSERT INTO `twilio`.`operator_level` (`operator_level_id`, `operator_level_name`) VALUES (1, 'SystemAdmin'),(2, 'Supervisor'), (3, 'Operator');
INSERT INTO `twilio`.`operator` (`operator_id`, `password`, `last_name`, `first_name`, `client_name`, `telnum`, `operator_level_id`) VALUES('admin', '$2y$10$XWdgTixMOjWgn5SRXekSv.j8oBXkgZIlNfLxLpXBJUccar3jyQ8ay', 'admin', 'admin', 'admin', '+815099998888', 1);
INSERT INTO `queue` (`queue_id`, `queue_name`, `action_url`, `wait_url`, `guidance_url`, `twilio_queue_id`) VALUES ('sample', 'sample', 'http://localhost/runa-cca/twilio/callflow/newservice/enqueaction', '/runa-cca/twilio/callflow/newservice/wait', '/runa-cca/twilio/callflow/newservice/guidance', NULL);
INSERT INTO `twilio`.`operator_queue` (`id`, `operator_id`, `queue_id`) VALUES ('1', 'admin', 'sample');
@@ -503,6 +503,9 @@ static function modOperator($app,$params){
}else{
// Declar for the operator who doesn't have any queues.
$selectedQueues = array();
// DB Connection
$dbConn = (new \Runa_CCA\Model\DB())->getIlluminateConnection();
@@ -39,6 +39,12 @@ static function portal(){
// Create and Set Twilio Information.
$token = (new \Runa_CCA\Model\Twilio())->getTwilioToken($_SESSION['client_name']);
// DB Connection
$dbConn = (new \Runa_CCA\Model\DB())->getIlluminateConnection();
// Update queues the operator has.
$_SESSION['operator_queue'] = \Runa_CCA\Model\Database\Operator::find($_SESSION['operator_id'])->queue;
// Set Session Data as global in Twig Template.
$twig = $app->view()->getEnvironment();
$twig->addGlobal("session", $_SESSION);
@@ -12,7 +12,7 @@ class Conf {
/**
* Constants
*/
const QUEUE = "twilio MiniCC";
const QUEUE = "twilio_MiniCC";
const INFO_URL = "/runa-cca/twilio/callflow/newservice/info";
const MOH_LONG = "http://com.twilio.sounds.music.s3.amazonaws.com/MARKOVICHAMP-Borghestral.mp3";
const MOH_SHORT = "";
@@ -66,9 +66,10 @@ static function validateOperator(array $params){
static function validateQueue(array $params){
$error_list = [];
$additionalChars = "#_-";
if(!static::notEmpty()->alnum()->length(1,20)->validate($params["queue_id"])){
$error_list["queue_id"] = "20字以内の半角の英数文字のみにしてください";
if(!static::notEmpty()->noWhitespace()->alnum($additionalChars)->length(1,20)->validate($params["queue_id"])){
$error_list["queue_id"] = "20字以内の半角の英数文字のみで、空白は入れないでください。特殊文字は{$additionalChars}のみです";
}
if(!static::notEmpty()->length(1,32)->validate($params["queue_name"])){
@@ -40,6 +40,15 @@
);
newWin.focus();
}
function popup_softphone(url){
var newWin2 = window.open(
url,
"softphone",
"width=1000, height=300, location=no, menubar=no, toolbar=no, scrollbars=yes"
);
newWin2.focus();
}
</script>
</head>
@@ -91,7 +100,7 @@
<ul class="nav navbar-nav navbar-right">
<li><a href="#" onClick="popup_wb('/runa-cca/report/wallboard')">ウォールボード</a></li>
<li><a data-toggle="modal" href="#softphoneModal">ソフトフォン</a></li>
<li><a href="#" onClick="popup_softphone('/runa-cca/softphone')">ソフトフォン</a></li>
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">{{session.operator_name}}さん<b class="caret"></b></a>
<ul class="dropdown-menu">
@@ -134,24 +143,6 @@
</div>
</div>
</footer>
<div class="modal" id="softphoneModal">
<div class="modal-dialog">
<div class="modal-content">
<div class="modal-header">
<button type="button" class="close" data-dismiss="modal" aria-hidden="true">×</button>
<h4 class="modal-title">ソフトフォン起動確認</h4>
</div>
<div class="modal-body">
<p>ソフトフォンを別画面に開きます。よろしいですか?</p>
</div>
<div class="modal-footer">
<button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
<button type="button" class="btn btn-primary" data-dismiss="modal" onClick="window.open('/runa-cca/softphone');">OK</button>
</div>
</div>
</div>
</div>
</div>
@@ -10,14 +10,21 @@
{% block twilio_setup %}
{% autoescape true %}
Twilio.Device.setup("{{twilio_token}}");
Twilio.Device.setup("{{twilio_token}}");
{% endautoescape %}
{% endblock twilio_setup %}
{% block queues %}
{% autoescape true %}
{% for queue in session.operator_queue %}
queues.push("{{queue.queue_id}}");
{% endfor %}
{% endautoescape %}
{% endblock queues %}
{% block message %}
{% autoescape true %}
<div class="alert alert-dismissable alert-info" id="twilio_message">
<H4>Twilioメッセージ</H4>
<p id="log">Twilioに接続中です。</p>
</div>
{% endautoescape %}
@@ -26,21 +33,7 @@
{% block twilio_queues %}
{% autoescape true %}
{% for queue in session.operator_queue %}
<li><a href="#" onclick="loginQueue('{{queue.queue_id}}');" id="queue_number" name="queue_number">{{queue.queue_id}}</a></li>
<li><a href="#" id="queue_{{queue.queue_id}}">{{queue.queue_id}}</a></li>
{% endfor %}
{% endautoescape %}
{% endblock twilio_queues %}
{% block dropdown_message %}
{% autoescape true %}
<ul class="nav navbar-nav navbar-right">
<li class="dropdown">
<a href="#" class="dropdown-toggle" data-toggle="dropdown">{{session.operator_name}}さん<b class="caret"></b></a>
<ul class="dropdown-menu">
<li class="divider"></li>
<li><a href="/runa-cca/logout">Logout</a></li>
</ul>
</li>
</ul>
{% endautoescape %}
{% endblock dropdown_message %}
Oops, something went wrong.

0 comments on commit 0e7bdb3

Please sign in to comment.