【初心者でも簡単】逆翻訳LINEbot【LINE API＋GAS＋スプレッドシート】

ちょっと前に、「逆翻訳やってるYouTuberの動画を楽しいよ」と教えてもらいました。

[バイヤー高橋チャンネル　逆翻訳で崩壊シリーズ](https://www.youtube.com/playlist?list=PLbNHOc8TI4QbPkurEjphiPcqPpmTtCTQN)

https://www.youtube.com/playlist?list=PLbNHOc8TI4QbPkurEjphiPcqPpmTtCTQN

簡単に説明すると

```
日本語→英語
英語→韓国語
韓国語→ドイツ語
ドイツ語→英語
英語→日本語
```

というように翻訳を何回か繰り返し
変な日本語が返ってくるのを楽しもう！という内容です。

試しに以下の文章を逆翻訳してみると

>むかしむかし、あるところにお爺さんとお婆さんがいました。

↓↓↓↓↓逆翻訳↓↓↓↓↓

>昔々、ある場所に老婆と老婆がいました。

おばあちゃんがふたりになった！？ｗ
というように誤訳を楽しみます。楽しんでください。楽しむ心を持ってください。

今までは、自分で楽しむときはGoogle翻訳で翻訳してはコピペして
言語を変えて、、、としていたようですが、
それであればLINEbotで返せば面白いかも？？
ということで作ってみました。

構築するのはGmailアカウントの登録だけで構築できる
スプレッドシートとGASで作ってみます。

まずはスプレッドシートを開きます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624933/5cef553d-14e8-74f4-5fd8-4febf8d0618d.png)


|セルの場所     |内容        |
|:-------:|:---------:|
|セルA1   |問い合わせ日時  |
|セルB1   |問い合わせ内容  |
| セルC1  |応答内容  |
|セルD1   |userID  |

　
と記載します。

そしてスクリプトエディタを立ち上げます。
スプレッドシートのタブから拡張機能⇒Apps Script
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624933/13db659d-73e7-6c8c-f978-5eb2f81a6094.png)

Apps Scriptが立ち上がってきますので以下のコードを記載します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624933/28056e88-ec11-cc83-4d7c-b6abc117a56b.png)


```Javascript:コード.gs
const CHANNEL_ACCESS_TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx';//ここにLINE Messaging APIのアクセストークンを記載
var SS = SpreadsheetApp.getActiveSpreadsheet(); //SpreadsheetのURL
var sheet = SS.getSheetByName("シート1"); //Spreadsheetのシート名（タブ名）


function doPost(request) {
 //POSTリクエストをJSONデータにパース
 const receiveJSON = JSON.parse(request.postData.contents);
 const event = receiveJSON.events[0];

var translate1 =""

text = event.message.text //event.message.textがLINEから受け取ったテキスト

translate1 = LanguageApp.translate(text, "ja", "en"); //受け取ったテキストを日本語から英語翻訳
translate2 = LanguageApp.translate(translate1, "en", "ko"); //英語から韓国語に翻訳
translate3 = LanguageApp.translate(translate2, "ko", "en"); //韓国語から英語に翻訳
translate4 = LanguageApp.translate(translate3, "en", "de"); //英語からドイツ語に翻訳
translate5 = LanguageApp.translate(translate4, "de", "en"); //ドイツ語から英語に翻訳
translate6 = LanguageApp.translate(translate5, "en", "ja"); //英語から日本語に翻訳

replyToUser(event.replyToken, translate6)  //下に記載してある、リプライのfunctionにリプライトークンと最後の英語から日本語に翻訳したテキストを送る

sheet.appendRow([getCurrentTime(),event.message.text,translate6,event.source.userId]);　//スプレッドシートに時間や内容を保存


}

//記録用の時間を日本時間で記録
function getCurrentTime() {
  return Utilities.formatDate(new Date(), "Asia/Tokyo", "yyyy/MM/dd HH:mm:ss");
}

//LINEへのリプライ用のfunction
function replyToUser(replyToken, text) {

    const replyText = {
        "replyToken": replyToken,
        "messages": [{
            "type": "text",
            "text": text,
        }]
    }

    const options = {
        "method": "post",
        "headers":
        {
            "Content-Type": "application/json",
            "Authorization": "Bearer " + CHANNEL_ACCESS_TOKEN,
        },
        "payload": JSON.stringify(replyText)
    };

    UrlFetchApp.fetch("https://api.line.me/v2/bot/message/reply", options);
}
```

記載が終わったら、保存ボタンをおして⇒デプロイ⇒新しいデプロイをします。

:::note
保存せずにデプロイすると、保存前のデータでデプロイしますのでご注意ください
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624933/ab41cdcd-a228-d964-a549-c59e7355fb28.png)

デプロイ後に出てくるウェブアプリのURLをコピーしてメモ帳などに記録しておいてください。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624933/ebe9dda2-3880-5b24-8717-1e8f05b4097d.png)

その後[LINEdeveloper](https://developers.line.biz/ja/)でwebhookに上記のアドレスを設定します。

:::note info
webhookの設定の仕方は下記の資料をご参考に、、、
(GASのデプロイで詰まった場合もこちらに詳しく記載しております。)
:::

https://specialman9999.github.io/20210511handson/#1




LINEdeveloperでwebhookに先ほど取得したウェブアプリのアドレスを設定してください。
その後、LINEdeveloperでリプライトークンを発行したら
先ほどのコードの
```const CHANNEL_ACCESS_TOKEN = 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'
```
のところのxxxのところに記載してください。( ' は残しておいてください。)

記入が終わりましたら保存⇒デプロイを管理

:::note warn
ここで新しいデプロイを選択してしまうとウェブアドレスがかわってしまい
LINEdeveloperで設定したwebhookも変更しなければならなくなるため、ご注意ください。
もし、新しいデプロイにしてしまった場合は、LINEdeveloperのwebhookのアドレスを
新しいウェブアプリのアドレスに変更してください。
:::

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624933/0b17c442-a709-8d13-247c-7987ca382df5.png)

編集ボタンを押し、バージョンを**新バージョン**に変更してからデプロイボタンを押してください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624933/5518f47b-04d3-a917-76b0-45d56bc998a8.png)


設定が完了しましたらLINEに話かけてみてください！
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624933/dd0c7c5b-88d0-a747-5036-90f6be939b68.png)
問い合わせした内容は先ほどのスプレッドシートに記録されます。

こんな感じで返ってきます。長い文章ほど変な翻訳が返ってきますので是非やってみてください！(童心に返ってから楽しむようにしてください。)

今回作成したLINEbotはこちらです。
お試しでどんなものか遊んでみたい方は是非ご登録お願いいたします。

逆翻訳
https://lin.ee/KsmDCuI
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624933/c0efa203-a2e0-7604-7429-adf5067fe1fc.png)

```
動かなかったときに確認すること
GAS側
・GASを保存してからデプロイをしているか
・新しいデプロイをしてウェブアドレスが変わってしまっていないか
・LINEdeveloperで発行したアクセストークンを記載しているか

LINEdeveloper側
・webhookにアドレスが設定されているか
・最新のGASのウェブアプリのアドレスがwebhookに設定されているか
・webhookがONになっているか
・アクセストークンが翻訳されたものになっていないか
(表示されている言語がEnglishになっていて、WEBページの翻訳をしてしまうとアクセストークンも変になってしまうので
LINEdeveloperの右下にある言語をEnglishから日本語に変更してからアクセストークンをコピーしてください
最後が【～～w1cDnyilFU=】になったら正解です。以下の画像をご参考にしてください。）

（これ以外にありましたら随時追記していきますので、もし詰まった場合はコメントいただけると助かります。）
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/624933/c3859b7c-7b60-ed59-9504-3fb51133715b.png)



ということで、初めてのQiita記事&アドベントカレンダーでした！
よかったらLGTMボタンをぽちっとお願いします！