PERCOBAAN 4 PEMROGRAMAN IVR OUTBOUND

dokumen-dokumen yang mirip
Percobaan 5. Pemrograman IVR dengan Database(Outbound)

PERCOBAAN 5 PEMROGRAMAN VOICE MAIL SERVER

PERCOBAAN 2 PEMROGRAMAN DASAR IVR (UNTUK LAYANAN INBOUND)

Percobaan 4. Pemrograman IVR dengan Database(Inbound)

Percobaan 2. Pemrograman IVR Dasar(Inbound)

PERCOBAAN 3 APLIKASI DATABASE UNTUK PEMROGRAMAN IVR

Percobaan 1. Pengenalan IVR (Interactive Voice Response) dan Sample Program

PERCOBAAN 1 INSTALASI IVR SERVER

Interactive Voice Response

Praktikum 1 Installation for OpenCV

INTERACTIVE VOICE RESPONSE (IVR) Prima K - PENS

PERCOBAAN 5 SERVICE RESTRICTION CLASS

Politeknik Elektronika Negeri Surabaya PENS INTERACTIVE VOICE RESPONSE (IVR) Modul 2 Jaringan Teleponi 1. Prima Kristalina PENS (Januari 2015)

Tahap Instalasi PostgreSQL di Windows

BAB III PERANCANGAN Gambaran Sistem

TUTORIAL CONTENT MANAGEMENT SYSTEM WEB HOSTING JOOMLA

PERCOBAAN 6 TELEPONI MULTIUSER

TUJUAN. Memahami Koneksi dan Pemrosesan Basis Data di Java Memahami JDBC Menggunakan MySQL pada program Java

MODUL 1 DASAR-DASAR PEMROGRAMAN C++

PERCOBAAN V Komunikasi Data AT COMMAND MODEM

Oleh: Mike Yuliana PENS-ITS

BAB IV PENGUJIAN DAN ANALISIS

9 LANGKAH MUDAH KONEKSIKAN VISUAL FOXPRO DENGAN MySQL

MEMBUAT LAPORAN DI JAVA DENGAN MENGGUNAKAN IREPORT

BAB 3 ANALISIS DAN PERANCANGAN. menentukan dan mengungkapkan kebutuhan sistem. Kebutuhan sistem terbagi menjadi

MANUAL VRE GATEWAY

PERCOBAAN 8 KONSEP CONTEXT DAN SETTING FITUR DENGAN ASTERISK

PERCOBAAN 4 PEMROGRAMAN PENOMORAN DI PABX

BAB III PERANCANGAN. 3.1 Perancangan Alat Kuisioner dengan Wireless Elektronika Berbasis

MODUL 8 Mengoperasikan Perangkat Lunak Basis Data

APLIKASI IVR (INTERACTIVE VOICE RESPONSE) SEBAGAI OPERATOR TELEPON OTOMATIS

visit :

Proxy Autentikasi dengan Program mysql_auth pada FreeBSD 6.0

1. Pendahuluan. 2. Tujuan. 3. Gambaran Disain. MODUL 1 Code Composer Studio Basic

E-trik Ajax. Database MySQL. Dedi Alnas

Flexi Conference Client User Manual

INSTALLATION CHECKING

PANDUAN CEPAT INSTALASI DAN MENJALANKAN MinGW DEVELOPER STUDIO Oleh wijanarto

M. Miftakul Amin

MANUAL PENGOPERASIAN JSTOCKINVENTORY Twitter

Dasar Pemrograman. Visual Studio Program C++ Sederhana. Yoannita, S.Kom.

BAB III PERANCANGAN 3.1. SPESIFIKASI SISTEM

MySQL Databases. Dasar-dasar MySQL dan Implementasi MySQL kedalam pemrograman PHP. Jakarta, 16 April 2011 Oleh: M. Awaludin, S.Kom

MySQL J A M K E T I G A

Pengenalan APLIKASI DATABASE

Langkah Langkah Membuat Blog Secara Offline Menggunakan Wordpress

PERCOBAAN 9 APLIKASI DATABASE UNTUK PEMROGRAMAN IVR

IMPLEMENTASI PEMROGRAMAN VISUAL BASIC DENGAN DATABASE ACCESS

SISTEM INFORMASI PENERIMAAN SISWA BARU SMP NEGERI 1 PRAMBANAN BERBASIS WEB

Setting SMS Gateway dengan GAMMU Private Training Web Development Padang. 11/2/2014

Gambar 2. 1 Kotak dialog Pilihan Bahasa

Mengenal Pemrograman PHP7 Database untuk Pemula

BAB 4 IMPLEMENTASI DAN EVALUASI. harus disediakan server, perangkat lunak (software), perangkat keras (hardware)

PEMBUATAN DATABASE DENGAN DBDESIGNER

PERCOBAAN 9 PEMROGRAMAN PENOMORAN ANTAR PABX

Pemrograman PHP & MySQL

PESAWAT TELEPON. Komponen-komponen Pesawat Telepon. Fungsi Pesawat Telepon. Basic Call Setup

Tutorial Jasper Report with JDBC Prerequisites: Jasper Report, ireport installed, MySQL installed, and NetBeans IDE

Otodidak. MySQL untuk Pemula

MODUL I PRAKTIKUM KPPL MS PROJECT

Membuat Aplikasi Tampil, Entri, Edit, Delete Mahasiswa

Instalasi Server ipat

SISTEM INFORMASI PENJUALAN HANDPHONE VELIN PHONE TANGERANG BERBASIS WEB

BAB IV HASIL DAN PEMBAHASAN

Gambar ini menunjukkan informasi pemilihan folder untuk melakukan instalasi software XAMPP.

BAB IV IMPLEMENTASI DAN PENGUJIAN

KONEKSI NETBEANS DENGAN DATABASE SQLITE

PROSEDUR MENJALANKAN PROGRAM. Berikut kami lampirkan bagaimana cara menjalankan program / aplikasi pendeteksian malaria kami.

White screen / Blank untuk PrestaShop 1.6

BAB 4 HASIL DAN PEMBAHASAN

SMK BHAKTI NUSANTARA BOJA

Batch Processing A. BATCH, ONLINE, REAL TIME PROCESSING

BAB IV IMPLEMENTASI DAN PENGUJIAN

Langkah-langkah Instalasi Openbiblio Indonesia Oleh : Arif Surachman /

REMINDER PREDIKSI HARGA SAHAM PERUSAHAAN PADA BURSA EFEK VIA SMS DAN IVR

Modul 3. Oleh : Mohammad Sholikin. 1

Website : Mobile : Twitter

BAB 4 IMPLEMENTASI SISTEM APLIKASI JAVA VIDEO CONFERENCE. 1. Prosesor 500 MHz atau lebih tinggi, MB RAM minimum, 3. 1 MB free hardisk space

MODUL 12 PHP&MYSQL RELATIONAL DATABASE

Petunjuk Instalasi Aplikasi

PETUNJUK INSTALASI RETAIL OPERATIONS

BAB 3 ANALISIS DAN PERANCANGAN SISTEM

SOAL C++ Created by Yuli Astuti,S.Kom Copyright 2009

Pengenalan Database Management System MySQL. Pokok Bahasan: Pengenalan DataBase Pembangunan database berbasis Client-Server Dasar-Dasar MySQL

BAB IV HASIL PENGUJIAN DAN PENGAMATAN. pengujian perangkat keras (hardware), perangkat lunak (software) dan kinerja

MENGOPI DAFTAR KONTAK

MODUL PRAKTIKUM BASIS DATA TEKNIK INFORMATIKA UIN SUNAN KALIJAGA YOGYAKARTA 2011 PENGENALAN DATABASE MYSQL

MODUL PEMOGRAMAN WEB II STMIK IM BANDUNG MODUL PEMOGRAMAN WEB II. Oleh: CHALIFA CHAZAR. Chalifa Chazar edu.script.id

INTERACTIVE VOICE RESPONSE (IVR)

Tipe Data, Variabel, Input/Output

BAB IV IMPLEMENTASI DAN EVALUASI. Berikut ini adalah daftar spesifikasi perangkat lunak yang

1. Desktop Microsoft Windows

Database. Danu Wira Pangestu 1. Mengenal Database. Lisensi Dokumen:

MODUL PRAKTIKUM PEMROGRAMAN BASIS DATA

Modul 3 : Query Penggabungan Tabel

INSTALASI WEB SERVER PADA MICROSOFT WINDOWS

BAB IV IMPLEMENTASI DAN PENGUJIAN. dan tempat implementasi dari perangkat lunak ini adalah sebagai berikut :

MODUL I PENGENALAN IDE C++, ALGORITMA DAN PEMROGRAMAN

MySQL AL AZHAR COMPUTER CLUB

PERCOBAAN 9 APLIKASI IVR DENGAN ASTERISK

Transkripsi:

PERCOBAAN 4 PEMROGRAMAN IVR OUTBOUND 4.1. Tujuan : Setelah melaksanakan praktikum ini mahasiswa diharapkan mampu : Mengerti prinsip kerja sistim reminder berbasis IVR Membuat program reminder dengan C++ Membuat database untuk pendukung layanan IVR menggunakan MySQL Membuat koneksi antara pemrograman Database dengan C++ Mengerti prinsip sinkronisasi waktu antara waktu server dengan waktu reminder 4.2. Peralatan : Hardware : PABX sebagai penyedia jalur analog 2 pesawat Telepon terminal 1 PC dilengkapi dengan Dialogic Card (D/4PCI-U) Software : Visual C++ Xampp yang mempunyai aplikasi MySQL MultiThread Sample Program, untuk perekaman suara (boleh menggunakan software perekaman suara yang lain, asal mempunyai format suara manusia, bukan musik) 4.3. Teori : Sistim Outbound adalah aplikasi layanan IVR dimana server bersifat aktif, dengan mengirimkan rekaman suara kepada user tertentu. Biasanya aplikasi layanan ini berbentuk reminder, yang mengingatkan user akan adanya sebuah event yang harus dihadiri atau pengingat janji mengadakan sebuah kegiatan tertentu. Reminder akan dikirim ke user pada saat tertentu, dimana waktu pengiriman sudah diatur terlebih dahulu dan disimpan bersama-sama dengan identitas user pada database pelanggan. Percobaan 4. 45

Cara kerja sistim Reminder adalah sebagai berikut : Server selalu mencocokkan jam yang sudah disimpan di database dengan jam pada sistim operasi server. Saat jam pada sistim operasi server menunjukkan nilai yang sama dengan jam yang disimpan di database, server akan membaca data nomor telepon pada baris yang sama dengan baris jam di tabel pelanggan. Selanjutnya, server melakukan dial ke nomor telepon yang didapat. Apabila jalur dari nomor yang di-dial sedang tidak sibuk dan user melakukan off-hook, maka user akan mendengar suara rekaman yang berisi informasi pengingat. Namun jika jalur dari nomor yang di-dial sedang sibuk, atau user tidak segera off-hook, maka pada perioda waktu tertentu server akan melakukan dial kembali ke nomor tersebut, hingga beberapa kali. Jika sampai beberapa kali panggilan tidak diangkat, tidak dilakukan panggilan lagi, dianggap pasien tidak ditempat. Flow chart dari sistim outbound IVR ditunjukkan pada gambar 4.1 Aplikasi outbound ini juga dapat dikombinasi dengan aplikasi inbound dalam hal pemilihan menu. Sebagai contoh, pada sebuah aplikasi reminder klinik, server akan melakukan dial reminder pada seorang pasien jika pasien tersebut berkeinginan untuk diingatkan kembali saat harus menjalani kontrol perawatan. Dial dilakukan satu hari sebelum jadwal kontrol, misal jam 07.00 pagi. Apabila setelah mendengar nada panggil, pasien segera mengangkat handset, maka dia akan mendengar reminder tentang jadwal kontrol yang sudah disepakati. Pasien dapat menyetujui, membatalkan atau mengubah jadwal dengan menekan tombol-tombol keypad telepon sesuai dengan petunjuk suara rekaman. Hasil dari pemilihan pasien ini akan digunakan untuk meng-update database jadwal kontrol pasien. Apabila panggilan tidak segera diangkat, server akan mengulang panggilan sampai 3 kali pada hari tersebut (periode panggilan bisa diatur). Jika sampai tiga kali panggilan tidak diangkat, dianggap pasien tidak di rumah dan jadwal kontrol dianggap disetujui pasien. Percobaan 4. 46

b START Search Database LocalTime = Waktu Database? Y Open Channel & Status OFF Hook Dial No. N b Y CR_CNT N Y CR_BUSY N Y CR_CEPT N CR_NOANS Nama.wav, reminder.wav ON Hook, Close Channel ON Hook, Close Channel Gambar 4.1. Fow Chart IVR Outbound Fungsi Dial Sebagai sebuah sistim reminder, IVR Outbound ini dilengkapi dengan fungsi pemanggil yang sudah disediakan oleh Dialogic (disertakan saat kita menginstall driver Dialogic). Fungsi ini diaktifkan saat waktu sudah menunjukkan saatnya reminder dibunyikan. Syntax dx_dial menjadi penggerak utama fungsi ini. Cara kerja fungsi tersebut sebagai berikut : saat waktu sudah sesuai dengan setting di database, server membaca kolom nomor telepon, kemudian men-set off-hook dirinya dan melakukan call kepada nomor tersebut dengan syntax dx_dial. Jika nomor tujuan onhook, maka reminder akan dibunyikan. Namun jika nomor tujuan sedang sibuk, tidak ada jawaban, tidak ada ringback tone dan tidak ada intercept, maka akan kanal ditutup kembali. Program selengkapnya ditunjukkan seperti di bawah. Percobaan 4. 47

void DialNotelp(int chdev, char notelp[5]) dx_clrcap(&capp); capp.ca_nbrdna=6; //bunyikan ringtone 6 kali if((cares=dx_dial(chdev,notelp,&capp,dx_callp EV_SYNC)) == -1 ) printf("error dial"); exit(0); switch(cares) case CR_CNCT: printf("dial"); goto lanjut; //fungsi memainkan reminder case CR_BUSY: printf("busy"); case CR_CEPT: printf("intercept"); case CR_NOANS: printf("no answer"); case CR_NODIALTONE: printf("no dial tone"); case CR_NORB: printf("no ringback"); default : printf("else"); Langkah-langkah yang diperlukan untuk menyiapkan aplikasi outbound IVR adalah : 1. Membuat Tabel pada Database 2. Men-set lingkungan C++ menjadi lingkungan Teleponi 3. Membuat pemrograman lengkap dengan C++ Percobaan 4. 48

4. Me-run program dan menginformasikan layanan melalui pesawat telepon 4.4. Prosedur Percobaan : Layanan yang akan dibuat adalah reminder untuk anggota sebuah perkumpulan Whatever You Want. Perkumpulan ini memuat orang-orang yang ingin diingatkan jika ada event tertentu yang harus dia jalani. Untuk bisa diberi reminder, orang-orang tersebut harus mendaftar dulu ke admin. Anggap anda adalah admin, yang menginputkan apa saja keperluan para anggota untk diingatkan. Langkah-langkah membuat program reminder ini adalah sebagai berikut : 1. Buat Tabel yang berisi informasi tentang member, hari,jam dan menit pengingat serta nomor telepon yang akan dihubungi. Gunakan MySQL (langkah-langkah membuat database dan tabel dengan MySQL sudah dibahas pada praktikum sebelumnya). Beri nama reminder pada tabel yang dibuat, dan nama database outbound. Struktur tabel seperti ditunjukkan pada gambar 4.2. Gambar 4.2. Stuktur Tabel reminder pada database outbound 2. Isi Tabel tersebut dengan informasi seperti ditunjukkan pada gambar 4.3 Gambar 4.3. Isi Tabel reminder 3. Siapkan file-file rekaman dengan isi seperti ditunjukkan pada Tabel 4.1. (Cara merekam file suara sudah djelaskan pada praktikum sebelumnya). Percobaan 4. 49

Tabel 4.1. Isi dari file rekaman Nama file Karina.wav Aditya.wav siang.wav remind1.wav remind2.wav terimakasih.wav Kalimat karina Aditya selamat siang waktunya latihan basket nih waktunya makan siang dik terima kasih 4. Bekerja dengan Visual C++ a. Buat Proyek baru File New Project pilih Win32 Console Application, lalu buat file.cpp baru dengan memilih File New C++ Source File, letakkan pada project yang sudah dibuat sebelumnya OK b. pilih project setting Tab: C/C++ [Category: Preprocessor] Additional include Directories <cari letak folder Include MySQL pada folder Include C++> Pastikan bahwa folder include dari MySQL sudah di-copy kan ke dalam folder include VC98 milik Visual C++ yang ada di Directory Program Files. [ Category: Code Generation ] Use run-time library: Multithreaded [ Category: Precompiled Headers ] Pilih 'Not using precompiled headers' Tab: Link [ Category: Input ] Object/library modules: (tambahkan) wsock32.lib mysqlclient.lib libmysql.lib mysys.lib Ignore libraries: (tulis) LIBCMTD.lib Percobaan 4. 50

Additional library path: <cari letak folder lib MySQL pada folder lib C++> Pastikan bahwa folder lib dari MySQL sudah di-copy kan ke dalam folder lib VC98 milik Visual C++ yang ada di Directory Program Files. [ Category: General ] Object/library modules: (tambahkan) libsrlmt.lib libdxxmt.lib c. Menambahkan Directory INC dan LIB Masih pada sheet Proyek Tools Options Directories Show Directories for : pilih Include file browse folder dimana Directory INC untuk Dialogic berada, sehingga didapatkan : C:\Program Files\Dialogic\INC. Show Directories for : pilih Library file browse folder dimana Directory LIB untuk Dialogic berada, sehingga didapatkan : C:\Program Files\Dialogic\LIB OK. d. Menambah header-header. #define W32_LEAN_AND_MEAN #include <winsock2.h> #include <include\mysql.h> #include <windows.h> #include <string.h> #include <fcntl.h> #include <srllib.h> #include <dxxxlib.h> #include <stdio.h> e. Mendefinisikan lokasi Tabel dalam Database #define TABLE_OF_INTEREST "reminder" #define SERVER_NAME "localhost" #define DB_USER "root" #define DB_USERPASS "" #define DB_base "outbound" f. Menambahkan prototype fungsi-fungsi yang diperlukan. //prototypes void hook(int chdev,int hook); void playsuara(int chdev,char fname[10]); Percobaan 4. 51

g. Mendefinisikan variabel public //definisi variabel public MYSQL *hnd=null; // mysql connection handle const char *sinf=null; // mysql server information MYSQL_RES *res=null; // result of querying for all rows in table MYSQL_ROW row; // one row returned char sql[1024]; // sql statement used to get all rows DWORD jm,min; SYSTEMTIME lt; int chdev,s,count,a1,cares; DX_CAP capp; h. Membuat fungsi-fungsi dan main program. //Fungsi sethook void hook(int chdev,int hook) if(hook == 1) if(dx_sethook(chdev,dx_offhook,ev_sync) == -1) printf("error off hook\n"); exit(1); printf("off hook success\n"); else if(hook == 0) if(dx_sethook(chdev,dx_onhook,ev_sync) == -1) printf("error onhook\n"); exit(1); printf("on hook success\n"); //Fungsi PlaySuara void playsuara(int chdev,char fname[10]) int fd; DX_IOTT iott; DV_TPT tpt; DX_XPB xpb; if((fd=dx_fileopen(fname,o_rdonly O_BINARY)) ==-1) tpt.tp_type =IO_EOT; tpt.tp_termno =DX_MAXDTMF; tpt.tp_length =1; tpt.tp_flags =TF_MAXDTMF; iott.io_fhandle =fd; iott.io_bufp =0; iott.io_offset =0; iott.io_length =-1; iott.io_type =IO_DEV IO_EOT; Percobaan 4. 52

xpb.wfileformat =FILE_FORMAT_WAVE; xpb.wdataformat =DATA_FORMAT_DIALOGIC_ADPCM; xpb.nsamplespersec =DRT_8KHZ; xpb.wbitspersample =4; if(dx_playiottdata(chdev,&iott,&tpt,&xpb,ev_sync)==-1) printf("error play.wav file\n"); exit(1); printf("play Wav File Success\n"); //Main Program void main(int argc, char* argv[]) SYSTEMTIME lt; GetLocalTime(&lt); hari=lt.wdayofweek; fprintf(stdout,"\t\t\tprogram REMINDER\n\n\n"); fprintf(stdout,"koneksi DATABASE STATUS : "); atas: hnd = mysql_init(null); while(1) GetLocalTime(&lt); if (NULL == mysql_real_connect(hnd,server_name,db_user,db_userpass,db_b ase,0,null,0)) fprintf(stderr,"terdapat masalah pada %s database user %s.\n",db_base,server_name); else fprintf(stdout,"koneksi ke %s database ke server %s dg user '%s'.\n",db_base,server_name,db_user); sinf = mysql_get_server_info(hnd); if (sinf!= NULL) fprintf(stdout,"\n\nmendapatkan informasi: '%s'\n",sinf); //Query and show while(1) Percobaan 4. 53 DWORD hr,jm,min; GetLocalTime(&lt); hr=lt.wdayofweek; jm=lt.whour; min=lt.wminute; printf("cari hari, jam dan menit = %d %d:%d:%d\n",hr,jm,min,lt.wsecond);

sprintf(sql,"select * from %s where hari=%d and jam=%d and menit=%d",table_of_interest,hr,jm,min); fprintf(stdout,"using sql statement: '%s' to extract all rows from the specified table.\n",sql); if (!mysql_query(hnd,sql)) res = mysql_use_result(hnd); if (res) row = mysql_fetch_row(res); fprintf(stdout,"rows returned:\n\n"); senin: while(row) s=1; if((chdev = dx_open("dxxxb1c2",null))== -1) printf("error open channel\n"); exit(1); printf("open channel success\n"); hook(chdev,1); dx_clrcap(&capp); capp.ca_nbrdna=6; if((cares=dx_dial(chdev,row[5],&capp,dx_callp EV_SYNC)) == -1 ) printf("error dial"); exit(0); goto bawah; //row = mysql_fetch_row(res); Sleep(1000); printf("\nend of rows\n"); mysql_free_result(res); Sleep(1000); bawah: switch(cares) case CR_CNCT: printf("dial nomor =>%s",row[5]); goto lanjut; Percobaan 4. 54

case CR_BUSY: printf("busy\n"); case CR_CEPT: printf("intercept\n"); case CR_NOANS: printf("no answer\n"); case CR_NODIALTONE: printf("no dial tone\n"); case CR_NORB: printf("no ringback\n"); default : printf("else\n"); lanjut: if(a1==1) count++; if(count>3) goto atas; else if(s==1) Sleep(5000); goto senin; playsuara(chdev,"siang.wav"); playsuara(chdev,row[1]); playsuara(chdev,"remind2.wav"); playsuara(chdev,"terimakasih.wav"); Percobaan 4. 55

mysql_close(hnd); Sleep(60000); goto atas; //end of while(1) 4.5. Analisa : 1. Jika program sudah free error, pastikan bahwa tidak ada kesalahan dalam membunyikan file rekaman wav. Periksa juga kanal yang dibuka, yang akan anda pakai untuk melakukan komunikasi layanan reminder. 2. Ubah-ubah jam dan menit untuk bisa menyesuaikan dengan waktu yang ingin digunakan untuk membunyikan reminder. Dengan dua nama user yang tersedia dan dua nomor tujuan yang berbeda, pemanggilan antara kedua user tersebut memerlukan waktu tunda sekian detik. Mengapa panggilan tidak bisa dilakukan dalam waktu yang bersama-sama? 3. Apa gunanya syntax sleep pada program di atas? Coba ubah dua buah nilai sleep(1000), menjadi sleep(500). Apa yang terjadi? Ubah juga nilai sleep(60000) menjadi sleep(40000). Apa yang terjadi pada program di atas? Hitung delay yang diperlukan antara pemanggilan user pertama dengan kedua. Petunjuk singkat : Program yang dibuat masih bersifat Single Thread, namun sudah disiapkan menjadi Multi Thread dengan pengesetan pada Category : Code Generation pada Tab C/C++. 4.6. Pertanyaan & Tugas : Buat sebuah reminder untuk guru SMA jurusan IPA (ekstensi 1000) dan IPS (ekstensi 2000), dimana jadwal UAS hari ke 1 adalah Bahasa Indonesia, hari ke 2 Bahasa Inggris, hari ke 3 Matematika (untuk IPA dan IPS), hari ke 4 Ekonomi dan Sejarah(IPS) dan Kimia dan Fisika (IPA), hari ke 5 Akuntansi (IPS) dan TIK (IPA). Jalankan pada 2 kanal berbeda, dan buatlah 2 Tabel berbeda masing-masing untuk IPA dan IPS dalam Database yang sama. Percobaan 4. 56