NTT αNXでの通話履歴活用方法
NTT αNXでは、「通話履歴」をパソコンで取得することができる。
「Web通話履歴表示プログラム」と言うのがあり、マニュアルに沿ってセットアップすると、Web上で通話履歴が参照できるようになる。 ...のはずが、私のところでは、うまくいかずNTTの営業に対応してもらった。 どうもJAVAのバージョンが新しいと設定を変更してやる必要があるらしい。
で、この通話履歴を、SQL Serverなどのデータベースに登録しちゃえば、MS-Accessなどで簡単に共有できるようになるので試してみた。
「Web通話履歴表示プログラム」をセットアップすると、「call_histフォルダ」が出来るが、その中に 「call_info.log」があり、CSV形式で通話履歴が保存されている。
このファイルを参照してDBに登録するスクリプトを作成してみたので、メモっておきます。
ポイント:SQL文はスクリプト内では定義していません。SQL分を含むストアドプロシージャをSQL Server側に登録しておいて、スクリプトからストアドを呼び出す形にしています。この方式ならば、スクリプトの作成前に、SQL文のテストを済ますことができるので、結構スムースに作業できます。
◆SQL Serverへの通話履歴の登録スクリプト
Option Explicit Dim CN,RS,LASTNO,RECNO,objWshShell Dim StrSQL,StrProc,StrParam RECNO = "" Set CN = WScript.CreateObject("ADODB.Connection") CN.ConnectionString = "Provider=SQLOLEDB;Data Source=WINSVRxx\DBxx;Initial Catalog=通話履歴管理; User ID=xxxx;Password=xxxx" CN.Open '===================================================================== '最終番号の取得 '===================================================================== Set RS = WScript.CreateObject("ADODB.Recordset") StrSQL = "EXEC q40最終番号参照" RS.Open StrSQL, CN LASTNO = cint(RS(0)) RS.Close 'WScript.Echo LASTNO '===================================================================== '電話履歴の読込、DB登録 '===================================================================== Dim objFSO ' FileSystemObject Dim objFile ' ファイル読み込み用 Dim str,str2 Dim aryStr,aryStr2 Dim i,seq,IO Set objFSO = CreateObject("Scripting.FileSystemObject") Set objFile = objFSO.OpenTextFile("call_info.log") str = "" do while objFile.AtEndOfStream <> True aryStr = Split(objFile.ReadLine,",") i=1 for Each aryStr2 in aryStr if aryStr2 = "" then aryStr2 = "-" end if if i = 3 then select case aryStr2 case "I" IO = "I" case "O" IO = "O" case "R" IO = "R" case else IO = "" end select end if if i = 4 then if cint(aryStr2)+ reckey * 10000 <= LASTNO then exit for end if RECNO = cint(aryStr2)+ reckey * 10000 end if if IO = "I" then select case i case 4 str=str & "@d01=" & reckey & aryStr2 & "," case 5 str=str & "@d02=""" & replace(aryStr2,"-",":") & """," case 8 str=str & "@d03=""" & aryStr2 & """," case 9 str=str & "@d04=""" & aryStr2 & """," case 10 str=str & "@d05=""" & replace(aryStr2,"-",":") & """," case 11 str=str & "@d06=" & aryStr2 StrParam = str StrProc="q42着信情報登録" StrSQL = "EXEC " & StrProc 'WScript.Echo StrSQL & " " & StrParam '◆デバッグ用 CN.Execute StrSQL & " " & StrParam str = "" 'exit do end select end if if IO = "R" then select case i case 4 str=str & "@d01=" & reckey & aryStr2 & "," case 5 str=str & "@d02=""" & replace(aryStr2,"-",":") & """," case 8 str=str & "@d03=""未応答""," case 9 if aryStr2 = "" then str=str & "@d04=""空白""," else str=str & "@d04=""" & aryStr2 & """," end if case 10 str=str & "@d05=""" & replace(aryStr2,"-",":") & """," case 11 str=str & "@d06=" & aryStr2 StrParam = str StrProc="q42着信情報登録" StrSQL = "EXEC " & StrProc 'WScript.Echo StrSQL & " " & StrParam '◆デバッグ用 CN.Execute StrSQL & " " & StrParam str = "" 'exit do end select end if if IO = "O" then select case i case 4 str=str & "@d01=" & reckey & aryStr2 & "," case 5 str=str & "@d02=""" & replace(aryStr2,"-",":") & """," case 11 str=str & "@d03=""" & aryStr2 & """," case 13 str=str & "@d04=""" & aryStr2 & """," case 14 str=str & "@d05=""" & replace(aryStr2,"-",":") & """" StrParam = str StrProc="q43発信情報登録" StrSQL = "EXEC " & StrProc 'WScript.Echo StrSQL & " " & StrParam '◆デバッグ用 CN.Execute StrSQL & " " & StrParam str = "" 'exit do end select end if i=i+1 next loop objFile.Close Set objFile = Nothing Set objFSO = Nothing '===================================================================== '最終番号の更新 '===================================================================== if RECNO<>"" then StrSQL = "EXEC q41最終番号更新" StrParam = "@lastno = " & RECNO 'WScript.Echo StrSQL & " " & StrParam CN.Execute StrSQL & " " & StrParam Set objWshShell = WScript.CreateObject("WScript.Shell") objWshShell.Exec("cscript unyolog.vbs ""*" & RECNO & """") else 'Set objWshShell = WScript.CreateObject("WScript.Shell") 'objWshShell.Exec("cscript unyolog.vbs ""+" & LASTNO & """") end if CN.Close Set CN = Nothing Time2=Timer() 'MsgBox "登録完了 " & Time2-Time1 & "秒"
◆作成したストアドプロシージャは4個
-- ============================================= -- Description: 最終番号参照 -- ============================================= ALTER PROCEDURE [dbo].[q40最終番号参照] AS BEGIN SET NOCOUNT ON; SELECT [通話履歴管理].[dbo].[本社最終番号] () END ※[本社最終番号]はスカラ関数として登録 ALTER FUNCTION [dbo].[本社最終番号]() RETURNS int AS BEGIN RETURN ( SELECT [lastno] FROM [通話履歴管理].[dbo].[t20本社基本情報] WHERE [id] = 1 ) END -- ============================================= -- Description: 最終番号更新 -- ============================================= ALTER PROCEDURE [dbo].[q41最終番号更新] @lastno int AS BEGIN SET NOCOUNT ON; UPDATE [通話履歴管理].[dbo].[t20本社基本情報] SET [lastno] = @lastno WHERE [id] = 1 END -- ============================================= -- Description: 着信情報登録 -- ============================================= ALTER PROCEDURE [dbo].[q42着信情報登録] @d01 int,@d02 datetime,@d03 nvarchar(255),@d04 nvarchar(255),@d05 nvarchar(255),@d06 int AS BEGIN SET NOCOUNT ON; INSERT INTO [通話履歴管理].[dbo].[t21本社着信情報] ([REC番号] ,[通話開始日時] ,[内線] ,[相手先番号] ,[通話時間] ,[使用回線]) VALUES (@d01, @d02, @d03, @d04, @d05, @d06) END -- ============================================= -- Description: 発信情報登録 -- ============================================= ALTER PROCEDURE [dbo].[q43発信情報登録] @d01 int,@d02 datetime,@d03 nvarchar(255),@d04 nvarchar(255),@d05 nvarchar(255) AS BEGIN SET NOCOUNT ON; INSERT INTO [通話履歴管理].[dbo].[t22本社発信情報] ([REC番号] ,[通話開始日時] ,[内線] ,[相手番号] ,[通話時間]) VALUES (@d01, @d02, @d03, @d04, @d05) END
◆テーブル構造
DB名:通話履歴管理 テーブル名:t21本社着信情報 カラム名: REC番号 通話開始日時 内線 相手先番号 通話時間 使用回線 テーブル名:t22本社発信情報 カラム名: REC番号 通話開始日時 内線 相手番号 通話時間 ■create文 CREATE TABLE [dbo].[t21本社着信情報]( [REC番号] [int] NOT NULL, [通話開始日時] [datetime] NULL, [内線] [nvarchar](255) NULL, [相手先番号] [nvarchar](255) NULL, [通話時間] [nvarchar](255) NULL, [使用回線] [int] NULL, CONSTRAINT [aaaaa01_着信情報_PK] PRIMARY KEY NONCLUSTERED ( [REC番号] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[t22本社発信情報]( [REC番号] [int] NOT NULL, [通話開始日時] [datetime] NULL, [内線] [nvarchar](255) NULL, [相手番号] [nvarchar](255) NULL, [通話時間] [nvarchar](255) NULL, CONSTRAINT [aaaaa02_発信情報_PK] PRIMARY KEY NONCLUSTERED ( [REC番号] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY] CREATE TABLE [dbo].[t20本社基本情報]( [id] [nchar](10) NOT NULL, [lastno] [nchar](10) NULL, CONSTRAINT [PK_t22本社電話基本情報] PRIMARY KEY CLUSTERED ( [id] ASC )WITH (PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON) ON [PRIMARY] ) ON [PRIMARY]
2013/03/01追記
サーバを再起動した際に、毎回手作業でログオン操作が必要で、めんどくさかった。
自動でログインできるようにJavascriptを書いてみた。
各行にsleepを入れてアバウトに画面遷移の待ち時間を調整してます。
?<pre> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html lang="ja"> ? <head> ? <meta http-equiv="Content-Type" content="text/html; charset=shift-jis"> ? <meta http-equiv="Content-Style-Type" content="text/css"> ? <META NAME="robots" CONTENT="none"> ? <title>callhist</title> ? </head> <SCRIPT language="JavaScript"> <!-- var subWin; var elements; subWin = window.open("http://localhost/callhist.htm"); Sleep(1); subWin.frames[0].document.forms[0].elements[2].click(); Sleep(1); subWin.frames[1].document.form_dc.elements[0].checked = true; Sleep(1); elements = subWin.frames[1].document.getElementsByName("dc_ok"); Sleep(1); elements[0].click(); Sleep(1); elements = subWin.frames[1].document.getElementsByName("dc_cancel"); Sleep(1); elements[0].click(); Sleep(1); subWin.frames[0].document.getElementById('id_login').click(); Sleep(1); subWin.frames[1].document.getElementById('mylogin').click(); Sleep(1); //window.close(); function Sleep(T){ ?? var d1 = new Date().getTime(); ?? var d2 = new Date().getTime(); ?? while( d2 < d1+1000*T ){d2=new Date().getTime();} ?? return; } //--> </SCRIPT>
2013/04/08 追記
Type Mの通話履歴の画面を入手したので、Type Lの画像と合わせてアップしておきます。
同じくNXを持っていてやってみようとしたところ、Javaの設定ができていないようでした。
どのように設定するか教えていただけませんか?
確か、下記の手順だったと思います。お試しください。
ダメだった場合、NTTの営業に問い合わせれば対応してくれますよ。
・「スタート」>「コントロールパネル」>「Java コントロールパネル」>「詳細」タブ>「Java Plug-in」に移動
・「次世代の Java Plug-in を有効にする」のチェックボックスを「オフ」にし、PCを再起動
初めまして。検索で見つけてきました。
αNXとのことですが、Type Mでは対応できるのでしょうか?
「Web通話履歴表示プログラム」で検索すると1世代古いαGX
type LではIIS稼働で取得できるマニュアルを見つけました。
当方ではαNX Type MでNTTサイトから説明書をダウンロード
してもその記述を見つけられませんでした。ohishi様の場合は
どのタイプをお使いなのでしょうか?可能であれば、Type Mで
のプログラムの使用可否をご教授頂ければ幸いです。
どうぞよろしくお願い申し上げます。
cervoさん、コメントありがとうございます。
私んとこはTypeLでした。
TypeMの取説みてみましたが、Web通話履歴の記載はありませんね。
NTTの営業に相談されたらいいかもしれません。
結構、わがまま聞いてくれますよ。
はじめまして。Type M でもブラウザ上では表示可能です。
http://www.jourakuin.jp/pub/NX_TypeM_history.jpg
Skywalkerさん、情報ありがとうございます。
TypeMでもcsv形式の履歴は取得できるんですね。
参考に私んとこの履歴画面を後でアップしときます。