Slackで投げたチャットをBotが受け取りGoogle Homeがしゃべる

ベースとなっているのはこの記事。この記事をSlackのOutgoing Webhookに対応しただけなので、この記事読んでから見てください。
[Python, ngrok, LINEを使ってgoogle homeを喋らせる。](https://qiita.com/TAMIYAN/items/23ad051a775df096b6f2)

この記事のLINEをSlackに置き換えただけなのだ。
もちろん、Windows10の上でflaskサーバーを立てているだけ。なのでこの記事では、立てるサーバーのソースのみ記述しておく。

それでは、やってみる。

## 実装!!

下記の2つのflaskを立ち上げておけば、とりあえずOK
あとはSlackのOutgoing Webhookの設定をしていくぅ

### Pythonのソース


```python:main.py
# 各種モジュールのインストール
from flask import Flask, request, abort
from flask_slackbot import SlackBot
import requests
import pychromecast
from gtts import gTTS
import time

# Flaskインスタンスの作成
app = Flask(__name__)

# Slack Outgoing WebhookのトークンIDを記述
app.config['SLACK_TOKEN'] = 'XXXXX'

googlehome_name = "Living Room"
chromecasts = pychromecast.get_chromecasts()
cast = next(cc for cc in chromecasts if cc.device.friendly_name == googlehome_name) 

@app.route('/slack', methods=['POST'])
def slack():
    text = request.form['text']

    print(text)
    readtext = "Slackのメッセージです。" + text
    tts = gTTS(text = readtext, lang = 'ja')

    tts.save('xxx/tmp.mp3') # mp3ファイルを保存するパスを指定
    time.sleep(3)

    cast.wait()
    mc = cast.media_controller
    mc.play_media('http://192.168.1.7:8000/tmp.mp3','audio/mp3')
    mc.block_until_active()
    return tmp.mp3

if __name__ == '__main__':
    app.run(host='127.0.0.1', port=5000)
```

```python:mp3server.py
import os
from flask import Flask, make_response
app = Flask(__name__)


@app.route("/<string:file_name>", methods=['GET'])
def getMP3File(file_name):
    response = make_response()

    if not os.path.exists(file_name):
        return response

    response.data = open(file_name, "rb").read()
    response.headers['Content-Disposition'] = 'attachment; filename=' + file_name
    response.mimetype = 'audio/mp3'
    return response

if __name__ == '__main__':
    app.run(debug=False, host='0.0.0.0', port=8000)
```

### Slack Outgoing Webhookの設定

Request URLの欄にngrok起動後に表示されているURLを入力しておくのだ。
ngrokについては、本記事トップのリンクから、Outgoint Webhookは、Slackの"Appディレクトリ"から"Outgoing Webhook"を作成してくれぇ!(自分のワークスペース作っちゃうのが早いよ)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/384111/02f2d002-e25e-2421-1dd0-86ce6ce68637.png)


## 参考サイト
[Flask-SlackBot — flask_slackbot 0.1.12 documentation](https://www.notion.so/0bd12407aec544e093efccb98f6cf057)
[Flask を始めよう — Flask Handson 1 documentation](https://www.notion.so/291c7be63caf42a8bc0286b07f01fe6e)
[PythonのslackbotライブラリでSlackボットを作る - Qiita](https://www.notion.so/99cd642dedbe43a5aa377e4598ba77c3)
[Google Homeで家族とSlackで会話する方法 - Smart Home](https://www.notion.so/bf4d74e1cf224f559c896637a1d01c56)
[Flaskにおける設定ファイルのベストプラクティス - Qiita](https://www.notion.so/42c890653291427a83adf17fc6159c58)
[Slack/MattermostのbotをPythonのFlaskで作ろう | Nobwak's Lair](https://www.notion.so/dfb8f7e62c774c03b2befbe183f6a36a)
[MattermostとPython+Flaskでシンプルなbotを作る - Qiita](https://www.notion.so/3364d33450e84e34a11572f7b3fcd3eb)
[Slack Botの種類と大まかな作り方 - Qiita](https://www.notion.so/7c1dbcf9908949c19b53f09a53c368da)
[SlackのボットをPythonで作ってみる #Pistatium](https://www.notion.so/1a37d101eb3a48bdbd0b24df7da7fa01)
[Google HomeをPythonで自在に喋らせてみた（VoiceTextを使ってるので声も選べます） - 自動化厨のプログラミングメモブログ│CODE-LIFE](https://www.notion.so/62261aebf27a4f63a803016886ede637)
[Flaskの簡単な使い方 - Qiita](https://www.notion.so/be021a7a1aba4f7287ecc1af1f54d80b)
[Flask入門 - Python学習講座](https://www.notion.so/e975619487c845ff98bbde5b3bbb1cd0)
[MattermostとPython+Flaskでシンプルなbotを作る - Qiita](https://www.notion.so/9bc022d74f32492fb5cc3c5e8fd30976)
[Google HomeをPythonで自在に喋らせてみた（VoiceTextを使ってるので声も選べます） - 自動化厨のプログラミングメモブログ│CODE-LIFE](https://www.notion.so/136c811ab50747f2be399fae350d74a6)
[SlackのボットをPythonで作ってみる #Pistatium](https://www.notion.so/4c299a51976247daae8aeb90f617a3cb)