전체적인 소스 올려 드리고 내용 설명 들어가겠습니다~
전체적인 소스는 아래와 같습니다.
const scriptName = "고객확인봇";
const SQLiteDatabase = android.database.sqlite.SQLiteDatabase;
let db = null;
function updateDB(){
db = SQLiteDatabase.openDatabase("/storage/emulated/0/Download/20240927_members.db",null,SQLiteDatabase.CREATE_IF_NECESSARY);
}
updateDB();
function response(room, msg, sender, isGroupChat, replier, imageDB, packageName) {
let dash_chk = msg.charAt(0);
if (dash_chk!= "/"){
return 0;
}
let remove_dash = msg.substr(1);
member_data = db.rawQuery("SELECT * FROM memberslist where m_name='"+remove_dash+"'",null);
while(member_data.moveToNext()){
replier.reply(remove_dash+"님은 "+member_data.getString(1)+" 회원고객 입니다.///생년월일:"+member_data.getString(3)+"///휴대전화:"+member_data.getString(5)+"///집주소:"+member_data.getString(6));
}
let memcount = member_data.getCount();
if (memcount == 0){
replier.reply(remove_dash+"님은 비고객 입니다.");
}else {
replier.reply(remove_dash+"고객은 총"+member_data.getCount()+"명 입니다.");
}
}
하나하나 뜯어서 설명드릴게요.
일단 스마트폰 자체 내에 있는 db를 불러와야 하니까요
const scriptName = "고객확인봇";
const SQLiteDatabase = android.database.sqlite.SQLiteDatabase;
let db = null; /*db 함수를 선언 합니다.*/
function updateDB(){
db = SQLiteDatabase.openDatabase("/storage/emulated/0/Download/20240927_members.db",null,SQLiteDatabase.CREATE_IF_NECESSARY);
}
/*db 라는 함수에 스마트폰 에 있는 만든 db 파일을 불러와 줍니다.*/
updateDB();
저 경로를 잘 찾을 수 없다면, 해당 파일을 다운로드하시고 위치를 확인하신 다음에
/storage/emulated/0/ 뒷부분만 수정하시면 되더라고요 보통은 Download에 들어가니까 저 뒤에 해당 파일에 대한 파일명만 잘 작성해 주시면 될 것 같아요~~~~
아무튼 이렇게 updateDB라는 함수에 자료를 불러오고 나서
function response(room, msg, sender, isGroupChat, replier, imageDB, packageName) {
let dash_chk = msg.charAt(0); /* 입력 되어진 문차열의 첫번째 글자를 반환*/
if (dash_chk!= "/"){ /*만약 첫번째 글자가 / 가 아니면 */
return 0; /*강제로 프로그램 종료*/
} /* 그렇지 않으면 다음으로 진행*/
dash라고 "/"를 체크를 해줍니다.
이건 한 가지 안타까운 비화가 있는데요 ㅠㅠㅠㅠㅠ
처음에는 그냥 바로 이름만 치면 바로바로 그 사람 정보가 나오게 했더니
어느 날 제가 다른 고객님한테 자료 받을 게 있어서, 이 세컨드폰으로 카톡을 하라고 했더니, 그분이 저에게 톡을 한 것이었습니다.
근데 이 메신저봇 R이라는 게 상대방이 채팅을 해도 알림이 안되거든요... 그래서 당시상황은
"고객님 : 이렇게 자료 보내드리면 될까요?"
"본인 : 이렇게 자료 보내드리면 될까요? 는 비고객입니다."
"고객님 : 안 되나요?"
"본인 : 안되나요? 는 비고객입니다."
확인한 나 :......................................
아무튼 그 이후로 아... 저렇게 하면 안 되겠구나 싶어서 "/" 슬러쉬 기능으로 이름을 쳐야만 작동이 되도록 변경했는데요
간단하게 구현했습니다. 자바스크립트로 맨 첫 번째 문자열을 뽑아내고, 만약 "/"로 시작하면 함수를 진행하고 그렇지 않으면 강제 종료 하도록 했습니다.
let remove_dash = msg.substr(1);
/* "/" 로 이름이 카톡으로 오면 이제 / 를 제거하고 데이터 베이스에서 이름을 검색해야 하니까
먼저 remove_dash 에 msg 의 첫번째 문자('/' 슬러쉬)를 제거하고 그 다음문자부터
remove_dash변수 에 담아 줍니다.*/
member_data = db.rawQuery("SELECT * FROM memberslist where m_name='"+remove_dash+"'",null);
/*member_data 변수에 데이터 베이스 자료 전체를 다 담습니다. memeberslist 는 db 테이블명 이고요
m_name은 그 해당 테이블의 컬럼명 입니다. sql 쿼리문 그대로 차용 했습니다.*/
while(member_data.moveToNext()){
replier.reply(remove_dash+"님은 "+member_data.getString(1)+" 회원고객 입니다.///생년월일:"+member_data.getString(3)+"///휴대전화:"+member_data.getString(5)+"///집주소:"+member_data.getString(6));
}
/*데이터 자료를 하나씩 뽑아올대 getString(0) 하면 첫번째칼럼, 1을 쓰면 두번째 칼럼 부터 뽑아올수가 있습니다.*/
let memcount = member_data.getCount(); /*이름을 치면 그이름에 대한 고객수를 불러옵니다.*/
/*해당 고객이 아니면 고객수가 0명으로 나올것이고 동명이인일 경우 그 숫자가 나오게 됩니다.*/
if (memcount == 0){
replier.reply(remove_dash+"님은 비고객 입니다.");
}else {
replier.reply(remove_dash+"고객은 총"+member_data.getCount()+"명 입니다.");
}
}
/*해당 고객수가0명이면 비고객입니다를 출력하고 만약 동명이인이 있을수 있기에
총 고객수를 적어서 출려해줍니다.*/
너무 좋았던 점
이제는 PDF파일로 눈 아플 일이 없고, DB만 6개월에 한 번씩 업데이트해주면 편하게 카톡으로 고객을 알아볼 수 있습니다.
너무너무 아쉬운 점
고객명을 할 때 /// 로 문자를 나눈 건, 도저히 뭘 해도 엔터가 안 먹어서입니다...
/n, /\ , <br>, /원화표시 등등등.... 다 해보았는데 그냥 채팅창으로 그대로 나오더라고요...
언젠가 좀 더 고수가 된다면. 저것도 수정해보고 싶네요...
막상 써놓고 보니.. 어떻게 마무리해야 할지...??;;;
구현 모습 올리고 마무리 지겠습니다~! 즐거운 개발 하세요~
'작은 도전기들 > 카카오톡봇 만들어보기' 카테고리의 다른 글
02 카카오톡봇 선택 및 데이터 db파일로 변환하기 (6) | 2024.10.28 |
---|---|
01 자동응답 카카오톡봇 만들어보기 (1) | 2024.10.28 |