【Google Apps Script】 그 18 일본어로 말을 걸면 3개국어로 돌려주는 Chatwork bot를 만든다
본 어드벤트 캘린더는 @rt_p의 개인 프로젝트이지만, 필자는 Ateam Brides Inc. Advent Calendar 2017에도 참가하고 있습니다. 그쪽에서도 출장판 기사를 쓰고 있으므로, 들여다 주시면 기쁩니다.
소개
이번에는 Chatwork의 Webhook을 사용하여 내 채팅에서 발언하면 3개국어로 번역하여 반환하는 chatwork bot(과 같은 것)을 만들어 봅시다.
완성품은 내 채팅에 일본어를 발언하면 영어・중국어(간체자)・힌디어의 3개국어를 돌려줍니다(세계의 네이티브 스피커 인구 상위 3위의 언어입니다).
GAS 파일 만들기
이번에는 스프레드시트를 사용할 필요가 없으므로 Google Apps Script 파일을 직접 만들 수 있습니다.
Google 드라이브 새로 만들기 → 기타에서 만들 수 있습니다.
찾을 수 없으면 + 앱을 추가로 검색하십시오.
아래 코드를 입력합시다.
승인 필요 메시지가 나왔을 때의 조치를 모르는 경우
어드벤트 캘린더 첫날 Hello, world! 기사을 참조하십시오.
translation.gs// doPostのデバッグ用
function dummyPost() {
var webhookEvent = {
'webhook_event': {
'body': 'こんにちは'
}
};
var e = {
'postData': {
'contents': JSON.stringify(webhookEvent)
}
};
var res = doPost(e);
var postData = JSON.parse(res);
Logger.log(postData);
}
function doPost(e) {
var json = JSON.parse(e.postData.contents);
var body = json.webhook_event.body;
if (body.indexOf('[info][title]') === 0) { // エコー(無限ループ)状態を防ぐ為、[info][title]から始まっているメッセージは自動投稿と判定し処理しない
return;
}
var trans = translation(body);
return postToChatworkMessage(body, trans);
}
// 3ヶ国語に翻訳して返す
function translation(body) {
var en = LanguageApp.translate(body, 'ja', 'en'); // 英語
var china = LanguageApp.translate(body, 'ja', 'zh-CN'); // 中国語(簡体字)
var hindi = LanguageApp.translate(body, 'ja', 'hi'); // ヒンディー語
return "英語:" + en + "\r\n" + "中国語(簡体字):" + china + "\r\n" + 'ヒンディー語:' + hindi;
}
// chatworkにメッセージ投稿
function postToChatworkMessage(subject, body) {
var roomId = 'YOUR_ROOM_ID'; // ここに投稿したい部屋のIDを入力
var token = 'YOUR_TOKEN'; // ここにトークンを入力
var body = '[info][title]' + subject + '[/title]' + body + '[/info]';
var payload = {
'body': body
}
var headers = {
'X-ChatWorkToken': token
}
var options = {
'method' : 'POST',
'payload' : payload,
'headers' : headers
}
var url = 'https://api.chatwork.com/v2/rooms/' + roomId + '/messages';
return UrlFetchApp.fetch(url, options);
}
신출은 이 정도일까요?
translate(text, sourceLanguage, targetLanguage)
Google 번역을 사용하여 모든 언어로 번역할 수 있습니다.
슈퍼 편리!
var roomId = 'YOUR_ROOM_ID'; // ここに投稿したい部屋のIDを入力
var token = 'YOUR_TOKEN'; // ここにトークンを入力
roomId는 방의 ID입니다. URL의 #!ridXXXXX가 되고 있는, rid 이후의 수치입니다.
Chatwork 토큰을 얻는 방법은 16일째 기사을 참조하십시오.
Webhook의 파라미터가 어떻게 건너오는지는 공식 문서를 참조.
ぇぇぺぺr. 제대로 rk. 코 m/쟈/우ぇb 호오 k. HTML
dummyPost()
를 실행하면 doPost()
를 테스트할 수 있습니다.
실행하여 다음과 같은 메시지가 내 채팅에 도착하면 doPost()
정상적으로 작동합니다.
API 게시
공개 → 웹 애플리케이션으로 도입에서,
애플리케이션에 액세스할 수 있는 사용자: 모든 사용자(익명 사용자 포함)로 설정하고 게시합니다.
덧붙여 설정 후에는 당연히 이 API에 액세스에 누구라도 POST를 던질 수 있게 됩니다. 실수로 URL을 누설도하지 않는 한 괜찮아 괜찮을까 생각합니다만, 자기 책임으로 부탁드립니다.
Webhook 설정
Chatwork의 API 설정 링크에서 Webhook 설정 페이지로 이동하여 다음과 같이 새로 만듭니다.
설정이 문제 없으면 마이 채팅에 던진 발언이 3개 국어로 번역되어 즉시 반환됩니다.
중국어와 힌디어가 올바른지 모르겠지만 영어가 맞는 것 같아서 아마 괜찮을 것입니다!
여담이지만,
if (body.indexOf('[info][title]') === 0) { // エコー(無限ループ)状態を防ぐ為、[info][title]から始まっているメッセージは自動投稿と判定し処理しない
return;
}
이것 엄청 중요합니다 ...!
만약 이 처리가 없으면 어떻게 될까요?
정답은...
내 채팅에서 자신이 말하기
↓
Webhook이 발화하고 번역이 게시됨
↓
번역 게시물에 Webhook이 발화하고 번역 발언이 더 번역되어 게시된다
↓
…
라는 무한 루프가 발생하여 다음과 같은 상태가 됩니다.
요주의입니다.
결론
이번에는 Webhook과 GAS에서 bot을 만들었습니다만, 정교한 bot를 만들려면Hubot등이 일반적일까 생각합니다.
이 어드벤트 캘린더에서는 건드리지 않지만 관심이 있으시면 봐주세요.
내일
【Google Apps Script】 그 19 Chatwork Webhook을 사용해 스프레드시트에 발언을 모은다
됩니다.
이번에 사용한 Webhook을 스프레드 시트와도 연계시켜 보겠습니다.
이전 기사
【Google Apps Script】 그 17 데일리에서의 목표 진척을 Chatwork의 방명에 자동 반영한다
다음글
【Google Apps Script】 그 19 Chatwork Webhook을 사용해 스프레드시트에 발언을 모은다
Reference
이 문제에 관하여(【Google Apps Script】 그 18 일본어로 말을 걸면 3개국어로 돌려주는 Chatwork bot를 만든다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rf_p/items/28190b50d79195fec1ba
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
이번에는 스프레드시트를 사용할 필요가 없으므로 Google Apps Script 파일을 직접 만들 수 있습니다.
Google 드라이브 새로 만들기 → 기타에서 만들 수 있습니다.
찾을 수 없으면 + 앱을 추가로 검색하십시오.
아래 코드를 입력합시다.
승인 필요 메시지가 나왔을 때의 조치를 모르는 경우
어드벤트 캘린더 첫날 Hello, world! 기사을 참조하십시오.
translation.gs
// doPostのデバッグ用
function dummyPost() {
var webhookEvent = {
'webhook_event': {
'body': 'こんにちは'
}
};
var e = {
'postData': {
'contents': JSON.stringify(webhookEvent)
}
};
var res = doPost(e);
var postData = JSON.parse(res);
Logger.log(postData);
}
function doPost(e) {
var json = JSON.parse(e.postData.contents);
var body = json.webhook_event.body;
if (body.indexOf('[info][title]') === 0) { // エコー(無限ループ)状態を防ぐ為、[info][title]から始まっているメッセージは自動投稿と判定し処理しない
return;
}
var trans = translation(body);
return postToChatworkMessage(body, trans);
}
// 3ヶ国語に翻訳して返す
function translation(body) {
var en = LanguageApp.translate(body, 'ja', 'en'); // 英語
var china = LanguageApp.translate(body, 'ja', 'zh-CN'); // 中国語(簡体字)
var hindi = LanguageApp.translate(body, 'ja', 'hi'); // ヒンディー語
return "英語:" + en + "\r\n" + "中国語(簡体字):" + china + "\r\n" + 'ヒンディー語:' + hindi;
}
// chatworkにメッセージ投稿
function postToChatworkMessage(subject, body) {
var roomId = 'YOUR_ROOM_ID'; // ここに投稿したい部屋のIDを入力
var token = 'YOUR_TOKEN'; // ここにトークンを入力
var body = '[info][title]' + subject + '[/title]' + body + '[/info]';
var payload = {
'body': body
}
var headers = {
'X-ChatWorkToken': token
}
var options = {
'method' : 'POST',
'payload' : payload,
'headers' : headers
}
var url = 'https://api.chatwork.com/v2/rooms/' + roomId + '/messages';
return UrlFetchApp.fetch(url, options);
}
신출은 이 정도일까요?
translate(text, sourceLanguage, targetLanguage)
Google 번역을 사용하여 모든 언어로 번역할 수 있습니다.
슈퍼 편리!
var roomId = 'YOUR_ROOM_ID'; // ここに投稿したい部屋のIDを入力
var token = 'YOUR_TOKEN'; // ここにトークンを入力
roomId는 방의 ID입니다. URL의 #!ridXXXXX가 되고 있는, rid 이후의 수치입니다.
Chatwork 토큰을 얻는 방법은 16일째 기사을 참조하십시오.
Webhook의 파라미터가 어떻게 건너오는지는 공식 문서를 참조.
ぇぇぺぺr. 제대로 rk. 코 m/쟈/우ぇb 호오 k. HTML
dummyPost()
를 실행하면 doPost()
를 테스트할 수 있습니다.실행하여 다음과 같은 메시지가 내 채팅에 도착하면
doPost()
정상적으로 작동합니다.API 게시
공개 → 웹 애플리케이션으로 도입에서,
애플리케이션에 액세스할 수 있는 사용자: 모든 사용자(익명 사용자 포함)로 설정하고 게시합니다.
덧붙여 설정 후에는 당연히 이 API에 액세스에 누구라도 POST를 던질 수 있게 됩니다. 실수로 URL을 누설도하지 않는 한 괜찮아 괜찮을까 생각합니다만, 자기 책임으로 부탁드립니다.
Webhook 설정
Chatwork의 API 설정 링크에서 Webhook 설정 페이지로 이동하여 다음과 같이 새로 만듭니다.
설정이 문제 없으면 마이 채팅에 던진 발언이 3개 국어로 번역되어 즉시 반환됩니다.
중국어와 힌디어가 올바른지 모르겠지만 영어가 맞는 것 같아서 아마 괜찮을 것입니다!
여담이지만,
if (body.indexOf('[info][title]') === 0) { // エコー(無限ループ)状態を防ぐ為、[info][title]から始まっているメッセージは自動投稿と判定し処理しない
return;
}
이것 엄청 중요합니다 ...!
만약 이 처리가 없으면 어떻게 될까요?
정답은...
내 채팅에서 자신이 말하기
↓
Webhook이 발화하고 번역이 게시됨
↓
번역 게시물에 Webhook이 발화하고 번역 발언이 더 번역되어 게시된다
↓
…
라는 무한 루프가 발생하여 다음과 같은 상태가 됩니다.
요주의입니다.
결론
이번에는 Webhook과 GAS에서 bot을 만들었습니다만, 정교한 bot를 만들려면Hubot등이 일반적일까 생각합니다.
이 어드벤트 캘린더에서는 건드리지 않지만 관심이 있으시면 봐주세요.
내일
【Google Apps Script】 그 19 Chatwork Webhook을 사용해 스프레드시트에 발언을 모은다
됩니다.
이번에 사용한 Webhook을 스프레드 시트와도 연계시켜 보겠습니다.
이전 기사
【Google Apps Script】 그 17 데일리에서의 목표 진척을 Chatwork의 방명에 자동 반영한다
다음글
【Google Apps Script】 그 19 Chatwork Webhook을 사용해 스프레드시트에 발언을 모은다
Reference
이 문제에 관하여(【Google Apps Script】 그 18 일본어로 말을 걸면 3개국어로 돌려주는 Chatwork bot를 만든다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rf_p/items/28190b50d79195fec1ba
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Chatwork의 API 설정 링크에서 Webhook 설정 페이지로 이동하여 다음과 같이 새로 만듭니다.
설정이 문제 없으면 마이 채팅에 던진 발언이 3개 국어로 번역되어 즉시 반환됩니다.
중국어와 힌디어가 올바른지 모르겠지만 영어가 맞는 것 같아서 아마 괜찮을 것입니다!
여담이지만,
if (body.indexOf('[info][title]') === 0) { // エコー(無限ループ)状態を防ぐ為、[info][title]から始まっているメッセージは自動投稿と判定し処理しない
return;
}
이것 엄청 중요합니다 ...!
만약 이 처리가 없으면 어떻게 될까요?
정답은...
내 채팅에서 자신이 말하기
↓
Webhook이 발화하고 번역이 게시됨
↓
번역 게시물에 Webhook이 발화하고 번역 발언이 더 번역되어 게시된다
↓
…
라는 무한 루프가 발생하여 다음과 같은 상태가 됩니다.
요주의입니다.
결론
이번에는 Webhook과 GAS에서 bot을 만들었습니다만, 정교한 bot를 만들려면Hubot등이 일반적일까 생각합니다.
이 어드벤트 캘린더에서는 건드리지 않지만 관심이 있으시면 봐주세요.
내일
【Google Apps Script】 그 19 Chatwork Webhook을 사용해 스프레드시트에 발언을 모은다
됩니다.
이번에 사용한 Webhook을 스프레드 시트와도 연계시켜 보겠습니다.
이전 기사
【Google Apps Script】 그 17 데일리에서의 목표 진척을 Chatwork의 방명에 자동 반영한다
다음글
【Google Apps Script】 그 19 Chatwork Webhook을 사용해 스프레드시트에 발언을 모은다
Reference
이 문제에 관하여(【Google Apps Script】 그 18 일본어로 말을 걸면 3개국어로 돌려주는 Chatwork bot를 만든다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/rf_p/items/28190b50d79195fec1ba
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
【Google Apps Script】 그 19 Chatwork Webhook을 사용해 스프레드시트에 발언을 모은다
됩니다.
이번에 사용한 Webhook을 스프레드 시트와도 연계시켜 보겠습니다.
이전 기사
【Google Apps Script】 그 17 데일리에서의 목표 진척을 Chatwork의 방명에 자동 반영한다
다음글
【Google Apps Script】 그 19 Chatwork Webhook을 사용해 스프레드시트에 발언을 모은다
Reference
이 문제에 관하여(【Google Apps Script】 그 18 일본어로 말을 걸면 3개국어로 돌려주는 Chatwork bot를 만든다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/rf_p/items/28190b50d79195fec1ba텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)