リクルートからA3RTのドメイン変更メールが来たのでline-botを修正する

# 注釈
[こちら](https://technowanko.com/posts/program/bot/fixed_linebot/)に移動しました。


#はじめに
今年の8月末にa3rtからメールが、、

```
A3RTご利用中の皆様

いつもご利用いただきありがとうございます。
引き続き旧ドメインを利用中の皆様に改めてのお知らせとなります。

1. ドメイン変更に伴うアプリ修正依頼
弊社組織変更に伴い、ドメインが変更となります。
　旧ドメイン）a3rt.recruit-tech.co.jp
　新ドメイン）a3rt.recruit.co.jp
2021年9月30日までは併用期間として両方使える状態ですが、
2021年10月1日以降、旧ドメインは廃止、新ドメインのみ利用可能となる予定です。
お手数ですが、ブックマーク、APIコール時のドメイン変更対応をお願いします。
なお、Image Influence, SQL Suggestの2サービスについては、旧ドメインのみ対応とし、新ドメインでの提供はいたしません。

2. Image Influence, SQL Suggest機能提供終了
上記機能は、2021年9月30日の旧ドメイン停止をもって提供を終了させていただきます。
以上、2点となります。

サービス側都合での修正依頼・提供終了となり申し訳ございませんが、ご対応のほどよろしくお願いいたします。
```
<br>


特に気にしていませんでしたが、10月から雑談line-botが応答しなくなったので、修正しました。


![スクリーンショット 2021-11-27 16.01.29.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2097948/db087e60-dd5c-7283-3412-6520359271e5.png)

（毎朝のチャットは機能してますね）
#####ちなみに毎朝、推しからメッセージを受け取る方法は[こちら](https://qiita.com/Geeryo/items/ac8d6a6499ef68f2b919)をご覧ください。


#ソースコードの修正

###修正前

```python
from flask import Flask,request,abort
from linebot import LineBotApi,WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent,TextMessage,TextSendMessage
import os
import requests
import pprint
# import pya3rt

app=Flask(__name__)
#環境変数の取得
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]
line_bot_api=LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler=WebhookHandler(YOUR_CHANNEL_SECRET)

@app.route("/bot/webhook",methods=["POST"])
def callback():
    signature=request.headers["X-Line-Signature"]

    body=request.get_data(as_text=True)
    app.logger.info("Request body"+body)

    try:
        handler.handle(body,signature)
    except InvalidSignatureError:
        abort(400)
    return "OK"

@handler.add(MessageEvent,message=TextMessage)
def handle_message(event):
    #入力された文字列を格納
    push_text = event.message.text

    #A3RTのTalkAPIにより応答
    reply_text = talkapi_response(push_text)

    #リプライ部分の記述
    line_bot_api.reply_message(event.reply_token,TextSendMessage(text=reply_text))

#A3RTのTalkAPIにより応答
def talkapi_response(text):
    apikey = os.environ["apikey"]
    data = {'apikey': apikey,'query': text}
    client = pya3rt.TalkClient(apikey)
    response = client.talk(text)
    return ((response['results'])[0])['reply']

if __name__=="__main__":
    port=int(os.getenv("PORT",5000))
    app.run(host="0.0.0.0",port=port)

```


###修正後

```python
from flask import Flask,request,abort
from linebot import LineBotApi,WebhookHandler
from linebot.exceptions import InvalidSignatureError
from linebot.models import MessageEvent,TextMessage,TextSendMessage
import os
import requests
import pprint

app=Flask(__name__)
#Herokuの環境変数取得
YOUR_CHANNEL_ACCESS_TOKEN = os.environ["YOUR_CHANNEL_ACCESS_TOKEN"]
YOUR_CHANNEL_SECRET = os.environ["YOUR_CHANNEL_SECRET"]
line_bot_api=LineBotApi(YOUR_CHANNEL_ACCESS_TOKEN)
handler=WebhookHandler(YOUR_CHANNEL_SECRET)

@app.route("/bot/webhook",methods=["POST"])
def callback():
    signature=request.headers["X-Line-Signature"]

    body=request.get_data(as_text=True)
    app.logger.info("Request body"+body)

    try:
        handler.handle(body,signature)
    except InvalidSignatureError:
        abort(400)
    return "OK"

@handler.add(MessageEvent,message=TextMessage)
def handle_message(event):
    #入力された文字列を格納
    push_text = event.message.text

    #A3RTのTalkAPIにより応答
    reply_text = talkapi_response(push_text)

    #リプライ部分の記述
    line_bot_api.reply_message(event.reply_token,TextSendMessage(text=reply_text))

#A3RTのTalkAPIにより応答
def talkapi_response(text):
    A3RT_Talk_api = 'https://api.a3rt.recruit.co.jp/talk/v1/smalltalk'
    apikey = os.environ["apikey"]
    data = {'apikey': apikey,'query': text}
    response = requests.post(A3RT_Talk_api, data = data)
    return response.json()['results'][0]['reply']

if __name__=="__main__":
    port=int(os.getenv("PORT",5000))
    app.run(host="0.0.0.0",port=port)

```

###修正箇所

```python
#A3RTのTalkAPIにより応答
def talkapi_response(text):
    A3RT_Talk_api = 'https://api.a3rt.recruit.co.jp/talk/v1/smalltalk'
    apikey = os.environ["apikey"]
    data = {'apikey': apikey,'query': text}
    response = requests.post(A3RT_Talk_api, data = data)
    return response.json()['results'][0]['reply']
```

**要は、py3rtが使用できなくなったようです。**

https://a3rt.recruit.co.jp/product/talkAPI/

公式サイトのサンプルリクエストを参考にコードを修正しています。

# Herokuへデプロイ
Herokuは、アプリケーションを実行するための環境を提供してくれます。
事前にCLIを[ダウンロードす](https://devcenter.heroku.com/articles/heroku-cli)る必要があります。

```
$ heroku login
$ heroku git:clone -a sample-name
$ cd sample-name
$ git add .
$ git commit -am "Improved"
$ git push heroku master
```

ちなみにgithubへpushしたことをトリガーにherokuへ自動デプロイすることも可能です。
Herokuコンソールへログインし、アプリケーションのデプロイタブより設定可能です。

# （参考）Herokuに環境変数を設定する方法
```
$ heroku login
$ heroku config #環境変数一覧の取得
$ heroku config:set 環境変数名=値　　#環境変数の設定
```
コンソールからも設定可能です。
この方の記事が大変わかりやすかったです。

https://qiita.com/mzmz__02/items/64db94b8fc67ee0a9068

#雑談botの修正完了

![スクリーンショット 2021-11-27 16.26.34.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2097948/868c3f27-03b9-2a53-8ec2-f4a7bb37ed7d.png)

やっぱ精度低いですね〜〜。