2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

お題は不問!Qiita Engineer Festa 2024で記事投稿!
Qiita Engineer Festa20242024年7月17日まで開催中!

LINE BotへのメッセージをGoogle Homeに喋らせてみる

Last updated at Posted at 2024-07-15

System
LINE Botにメッセージを送るとGoogle Homeが送信内容を読み上げてくれるようにします。
パソコン上にサーバーをNode.jsで建てます。

GoogleHomeを喋らせる

人気だったGoogle Home Notifierが使えないので、Google Home Playerというものを使います。
まずnpmでGoogle Home Playerをインストールしましょう。

$ npm install google-home-player

Google Homeアプリを開き、デバイス情報の一番下からIPアドレスを確認しておきます。
HomeApp
以下のコードのIPアドレスを書き換えれば、もうGoogle Homeが喋ります。

// インポート
import HomePlayer from "google-home-player";

// 初期設定
const ip = "192.168.x.x"; // GoogleHomeのIPアドレス
const lang = "ja";
const Home = new HomePlayer(ip, lang);

// 読み上げ
Home.say("こんにちは");

LINEBot

LINEBotを作成

こちらのサイトからLINE Botを作成してください。
LINEBot
応答設定はすべてオフにしておきましょう。
また、「Messaging API」タブから「Messaging APIを利用する」を押して設定しておいてください。

LINEBotのコード

Node.jsでサーバーを建てられるExpressとLINEBotを操作する@line/bot-sdkライブラリを入れます。

npm install @line/bot-sdk express

上のサイトでトークンを取得しましょう。コンソールから現在のLINEBotを選択して「チャネル基本設定」タブからチャネルシークレットを、「Messaging API設定」タブからチャネルアクセストークンを発行してそれぞれ以下のコードに張り付けてください。

// インポート
import express from "express";
import { Client, middleware } from "@line/bot-sdk";

// トークン
const config = {
  channelSecret: "チャネルシークレット",
  channelAccessToken:
    "チャネルアクセストークン",
};
const client = new Client(config);

// Webhook
const PORT = process.env.PORT || 3000;
const app = express();
app.post("/", middleware(config), (req, res) => {
  Promise.all(req.body.events.map(handleEvent)).then((result) =>
    res.json(result)
  );
});
app.listen(PORT);

// 受け取り
function handleEvent(event) {
  let Message = event.message.text;
  console.log(Message);
}

サーバーを公開

現時点ではLINEBotとサーバーの紐づけができていないので、サーバーを公開します。
今回は一番楽なNgrokを使用します。

公式サイトでSignupしてくください。
Ngrok
Ngrokをダウンロードして、exeを実行して公式サイトでコピーしたシェルを実行してAuthtokenを追加してください。

$ ngrok config add-authtoken xxxxxxxxxxxxxxxxxxxxxxx

次にhttpでサーバーを公開します。今回はポート3000番を指定したので3000を公開します。

$ ngrok http 3000

「Forwarding」に表示されているURLを先ほどのLINE Developersから「Messaging API設定」タブの下の「Webhook URL」に設定します。「検証」を押して成功すれば完了です。「Webhookの利用」のスイッチをオンにしてください。
実際にLINEBotにメッセージを送ってみて、送ったメッセージがサーバーコンソールに表示されることを確認してください。

融合!

今まで書いたコードを融合させれば完成です。実際にLINEBotに送ったメッセージをGoogleHomeが読み上げてくれることがわかると思います。

index.js
import express from "express";
import { Client, middleware } from "@line/bot-sdk";
import HomePlayer from "google-home-player";

// 初期設定
const ip = "192.168.x.x"; // GoogleHomeのIPアドレス
const lang = "ja";
const Home = new HomePlayer(ip, lang);

// トークン
const config = {
  channelSecret: "チャネルシークレット",
  channelAccessToken:
    "チャネルアクセストークン",
};
const client = new Client(config);

// Webhook
const PORT = process.env.PORT || 3000;
const app = express();
app.post("/", middleware(config), (req, res) => {
  Promise.all(req.body.events.map(handleEvent)).then((result) =>
    res.json(result)
  );
});
app.listen(PORT);

// 読み上げ
function handleEvent(event) {
  if (event.message.type === "text") {
    let Message = event.message.text;
    Home.say(Message);
    console.log(Message);
  }
}

おまけ

音声も再生できるみたいなので、URLが送信された場合は音声を再生するようにします。
URLとして認識させてエラーを吐くかどうかで認識しています。

index.js
//省略

// 読み上げ
function handleEvent(event) {
  if (event.message.type === "text") {
    let Message = event.message.text;
-    Home.say(Message);
-    console.log(Message);
+    try {
+      new URL(Message);
+      Home.play(Message);
+      console.log("Play:" + Message);
+    } catch (err) {
+      Home.say(Message);
+      console.log("Say:" + Message);
+    }
  }
}

参考サイト

2
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?