写真を送ると文字起こしして返信してくれる LINE Bot ”OCR ちゃん”

送信した画像ファイルを解析して、OCR 処理した結果をトークで返信してくれる LINE Bot を Microsoft FLOW でサクっと作ります。

コーディング不要です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/06f49cef-d35f-5e40-0414-c23003e10dfc.png)


画像解析は Microsoft Azure Cognitive Services の Computer Vision を使います。
https://azure.microsoft.com/ja-jp/services/cognitive-services/computer-vision/

##LINE Developers コンソール

LINE Messaging API を利用するため、LINE Developers コンソールでチャネルを作成しましょう。こちらのドキュメントを参照します。

TITLE: Messaging APIを利用するには
URL: https://developers.line.biz/ja/docs/messaging-api/getting-started/

"自動応答メッセージ" は "利用しない" に設定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/035bfa1d-c281-413b-3236-4775b008799f.png)


##Microsoft Flow
Microsoft Flow で Bot を作成します。
https://flow.microsoft.com/ja-jp/

Microsoft Flow の概要や使い方はこちらが参考になります。
https://docs.microsoft.com/ja-jp/learn/modules/get-started-with-flow/

###フローの作成
"HTTP 要求の受信時" をトリガーに指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/27dcf45b-f789-5d70-d039-527484736623.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/e0336eab-f2bf-2dde-a94e-0403db986e2e.png)

"サンプルのペイロードを使用してスキーマを生成する" をクリックします。

サンプルとして、こちらのドキュメントにあるペイロードを利用します。
https://developers.line.biz/ja/reference/messaging-api/

"Webhookイベントオブジェクトの例" を用います。

```
{
  "destination": "xxxxxxxxxx", 
  "events": [
    {
      "replyToken": "0f3779fba3b349968c5d07db31eab56f",
      "type": "message",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U4af4980629..."
      },
      "message": {
        "id": "325708",
        "type": "text",
        "text": "Hello, world"
      }
    },
    {
      "replyToken": "8cf9239d56244f4197887e939187e19e",
      "type": "follow",
      "timestamp": 1462629479859,
      "source": {
        "type": "user",
        "userId": "U4af4980629..."
      }
    }
  ]
}
```
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/405db5c1-d069-2ea0-16fd-f8a58f57eb6e.png)

"+ 新しいステップ" をクリック。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/4c4646b7-cad9-8439-bfd1-3e6d798cfeaf.png)

"HTTP" をアクションに指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/49feb8d1-4c14-82d9-3c26-99e24e0fb79b.png)

こちらのドキュメントの情報を基に送信された画像を取得するため、"HTTP" アクションのパラメータを設定します。
https://developers.line.biz/ja/reference/messaging-api/#get-content

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/15bdba02-08ff-9b08-8ca3-2a2eb33ba25b.png)

方法: GET
URI: https://api.line.me/v2/bot/message/{messageId}/content
ヘッダー: 
Authorization Bearer {channel access token}

URI の {messageId} は、トリガーに指定した "HTTP 要求の受信時" に関連した動的なコンテンツから指定します。この指定により "Apply to each" が自動的に追加されます。

{channel access token} は LINE Developers Console で生成したアクセス トークンを記述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/3922713d-d2f3-4787-8f5a-f04ced731ebe.png)


![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/eaa5ed2f-06b4-04bb-9e08-05d3c1395443.png)

"アクションの追加" をクリックします。

"Computer Vision API" の "Optical Character Recognition (OCR) to Text" を指定します。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/055b46ab-1b37-2fd5-24e3-7819ca8b0ea3.png)

"Image Source" は "Image Content" を選択、"Image Content" は、前のアクションに指定した "HTTP" に関連した動的なコンテンツから "本文" を指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/09f448bb-550b-04a7-1528-2bf734e50735.png)

"アクションの追加" をクリックします。
"HTTP" を次のアクションに指定します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/d070edac-0f7a-3e49-111f-cc4580ae2f38.png)

こちらのドキュメントの情報を基に "HTTP" アクションのパラメータを設定します。
https://developers.line.biz/ja/reference/messaging-api/#send-reply-message

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/5269a9b5-3cb7-94bf-ba85-e3ff04899770.png)

方法: POST
URI: https://api.line.me/v2/bot/message/reply
ヘッダー: 
Content-Type application/json
Authorization Bearer {channel access token}

{channel access token} は、前の HTTP アクションと同様です。

本文:
JSON ペイロードは、前述の URL のページの情報を基に記述します。

```
{
    "replyToken":"[replyToken]}",
    "messages":[
        {
            "type":"text",
            "text":"[text]}"
        }
    ]
}
```

[replyToken] と [text] は、"HTTP 要求の受信時" と "Optical Character Recognition (OCR) to Text" に関連した動的なコンテンツから指定します。

"保存" をクリックします。

"HTTP 要求の受信時" の HTTP POST の URL が生成されます。この URL を LINE Developers コンソールで "Webhook送信" を "利用する" に変更し、"Webhook URL" を記述します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/e2826b87-6993-092b-0e00-ba3bffcb24cb.png)

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/28a51f4a-3732-b6a0-d559-cc49a2747733.png)

## 動作確認

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/38462ed6-6dd1-c8e9-1758-145f641cd7f2.png)

LINE Developers の QR コードを読み取って、友達に追加します。

画像ファイルを送って、Bot から返信があることを確認します。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/396107/06f49cef-d35f-5e40-0414-c23003e10dfc.png)