LINEで投稿した内容をしゃべる装置を簡単に作る方法を紹介します

**2022年7月20日にenebularのエージェント実行環境の機能がリリースされました**

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/4b724a60-54f4-498a-fede-bbe0aa689861.png)

これまで、enebularとデバイスをつなぐためには、AWS IoTの環境を準備する必要がありましたが、それが必要なくなりました。
enebularの無料アカウントでも、enebularとデバイスをつなぎ、遠隔でデバイスへのフローのデプロイやログの確認、リモートメンテナンスが利用できるようになりました。

詳しい機能は、以下のenebularブログを確認ください。

https://blog.enebular.com/function/practical-usage-of-the-agent-execution-environment/


さらに！ 

**2022年10月26日にクラウド実行環境とエージェント実行環境間の通信機能がリリースされました**

これは、クラウド実行環境とエージェント実行環境の間で、相互にデータをやり取りできる機能です。
専用のノードを使い、送信先のIDをプロパティで指定するだけで、セキュアにクラウド実行環境からエージェント実行環境へ、エージェント実行環境からクラウド実行環境へと128KBまでのJSONデータが送れます。

設定とフローの作り方のイメージは以下のとおりです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/e029f901-1157-f30b-1024-7570c1764b8b.png)

詳細な使い方は、enebularのドキュメントを確認ください

https://docs.enebular.com/ja/AgentConnect/Overview.html

# LINEで投稿した内容を しゃべる装置を簡単に 作る方法を紹介します
ここで、本題です。
今回は、紹介した2つの機能を使って、LINEbotに対して送った文章をそのまま喋ってくれるデバイスを作ってみました。

クラウド実行環境を使って、LINEbotが簡単に作れることは、[以前の記事](https://qiita.com/jksoft/items/e05392bff71b7f153cdc)で書いたとおりです。

## クラウド実行環境のフロー
LINEから受け取ったメッセージはそのまま返しているので、LINEbot上はオウム返しです。
エージェント実行環境へ送るノードにはLINEで受け取ったメッセージ部分をchangeノードで抽出し、入力しています。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/a34b1bd8-7e23-264b-c598-8154a4d0dcde.png)

```
[{"id":"8eb8ce522b2c37fb","type":"tab","label":"フロー 1","disabled":false,"info":"","env":[]},{"id":"8596b3c580bdc832","type":"ReplyMessage","z":"8eb8ce522b2c37fb","name":"","replyMessage":"","x":820,"y":280,"wires":[]},{"id":"4ef3f75ce070d72a","type":"LCDP-in","z":"8eb8ce522b2c37fb","name":"","x":430,"y":280,"wires":[["8596b3c580bdc832","10f6ed765b757d78"]]},{"id":"89a0fdc46be5f2da","type":"agent-ee-output","z":"8eb8ce522b2c37fb","name":"","destination":"","propertyType":"str","x":830,"y":180,"wires":[[]]},{"id":"5751c99149339c2a","type":"complete","z":"8eb8ce522b2c37fb","name":"","scope":["8596b3c580bdc832"],"uncaught":false,"x":630,"y":380,"wires":[["bc7087e8495a55d4"]]},{"id":"bc7087e8495a55d4","type":"LCDP-out","z":"8eb8ce522b2c37fb","name":"","x":790,"y":380,"wires":[]},{"id":"10f6ed765b757d78","type":"change","z":"8eb8ce522b2c37fb","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"payload.events[0]message.text","tot":"msg"}],"action":"","property":"","from":"","to":"","reg":false,"x":640,"y":180,"wires":[["89a0fdc46be5f2da"]]},{"id":"07c2421ea7ac5449","type":"comment","z":"8eb8ce522b2c37fb","name":"デバイスに送る","info":"","x":820,"y":140,"wires":[]},{"id":"d8a8aa533320e97c","type":"comment","z":"8eb8ce522b2c37fb","name":"LINEに返信","info":"","x":810,"y":240,"wires":[]}]
```

## エージェント実行環境のフロー
フローは単純です。
メッセージの文字列から音声にするのは、[AquesTalk Pi](https://www.a-quest.com/products/aquestalkpi.html)を利用しています。
[AquesTalk Pi](https://www.a-quest.com/products/aquestalkpi.html)からダウンロードしたパッケージを展開しておきます。

```
tar -xzvf aquestalkpi-YYYYMMDD.tgz
```
＊YYYYMMDDはダウンロードしたファイル名に合わせる

クラウド実行環境から受け取ったメッセージをexeノードに渡し、AquesTalk Piを実行するだけでしゃべります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/41b08c90-9bb6-07da-d754-1fa54d721d80.png)

# 動作確認
無事、LINEで何かメッセージを送るとラズパイにつなげたスピーカーからメッセージが流れました。
（写真は、Raspberry Pi Zero2にReSpeaker HATを載せてスピーカーにつなげていますが、Raspberry Pi 4とかであれば、そのままイヤフォンジャックにスピーカーを繋げば良いと思います）
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/109992/7dc18e3e-cc39-df3a-50fc-2c8c7c31e836.png)

デバイス側からのアクションや音声もLINEで返せるようになるといろいろ活用できそうなので、さらにブラッシュアップしてみたいと思います。