LINEBotを使ってお店の住所とか電話番号をさくっと調べよう！

※2024/4/30
加筆、修正いたしました

## 商品や書類を送りたいときに、住所がすぐにわからなかったら？

こんにちは:grin:！
200をはるかに超える店舗を持つ小売業の会社で働いています。

お仕事で商品や書類を送ったりするのに
店舗の住所とか電話番号を確認したいことって
よくありますよね！

そんなときに！

LINEで聞けばすぐに住所と電話番号か返ってくるっていうBotを作ってみました。

:point_down_tone2:こんなカンジ！

<blockquote class="twitter-tweet"><p lang="ja" dir="ltr">LINE Bot 完成！<br>Qiita記事用にUPです <a href="https://t.co/jjWYnScKrj">pic.twitter.com/jjWYnScKrj</a></p>&mdash; しゅう (@shuji012) <a href="https://twitter.com/shuji012/status/1783394633080619142?ref_src=twsrc%5Etfw">April 25, 2024</a></blockquote> <script async src="https://platform.twitter.com/widgets.js" charset="utf-8"></script>







今回はエリアの食品スーパーを10件にしぼって返事がくるように設定してます。
いろんな業種もできるのですが
業種コードの入力をしないといけないので
まずはわたくしのお仕事の食品スーパーに限定しました。


## 使用したツール
・LINE
・Make
・Yahoo!ローカルサーチAPI
　※Yahoo!のAPIは欧州のサーバーで使えないそうです。
　　Makeのアカウントを作る際に、サーバーを欧州かUSか選択できるので
　　USサーバーにしないと利用できないようです。
  
　※住所コード
　　日本の地方公共団体につけられたコード番号である
  　　[住所コード（日本工業規格（JIS） X 0401）](https://www.soumu.go.jp/denshijiti/code.html"総務省のページへ")を指定して、
　　都道府県や市区町村ごとの情報を検索できます。
　　都道府県は二桁、市区町村の場合は五桁で指定します。

　※業種コード
　　[YOLP業種コード](https://s.yimg.jp/dl/developer_network/sample/download/map/genre.zip)
　　Zip形式の圧縮ファイルです。
　　解凍して文字化けするときはテキストで表示してみてください。

## Makeの流れ
<details><summary>詳細</summary>

LINE（Watch Events）
↓
HTTPモジュール(Make a request)
ここにYahoo!ローカルサーチAPI
↓
JSONモジュール（Parse JSON）
↓
LINE（Send a Reply Message）

</details>

![make1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763781/e24a09b9-52f4-2277-9792-fbe5883ae00f.png)


## APIの中身

<details><summary>詳細</summary>

Item1：appid･･･Yahoo!APIのクライアントID（簡単に取得できます）
Item2：gc･･･業種コードです
　　　　　　こちらのコードを変更することで、スーパーだけじゃなく
　　　　　　レストランだったり病院だったり、いろいろ変更できます
Item3：ac･･･エリアコードです
　　　　　　ここはLINEにコードを入力するようにValueを設定しています
　　　　　　総務省が公開してるコードを5桁で入力すれば
　　　　　　そのエリアの店舗が返ってくる流れです
Item4：results･･･結果の数です
　　　　　　あまりたくさんの検索結果がでても無駄なので
　　　　　　10件に絞っています
　　　　　　（デフォルトでYahooの口コミが多い順にソートしています）
Item5:output･･･言語を何にするかですけど
　　　　　　デフォルトがxml形式でしたので、jsonに変換しています

</details>


![http1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763781/af5c12a4-16a1-93fe-e312-762f53d7186d.png)



## LINEReplyモジュールの中身
<details><summary>詳細</summary>

Item1：「トータルヒット件数」と「回答件数」を返します
Item2：1件目から5件目までの「店舗名」「住所」「電話番号」を返します
Item3：6件目から10件目までの「店舗名」「住所」「電話番号」を返します

</details>

![LINEリプライ1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3763781/45a22175-4984-b6f8-a803-11f2e92a7eac.png)



## 6.苦労した点
##### ①Yahoo!ローカルサーチAPIの使用
前述のように、Yahoo!のAPIは欧州サーバー(EU)だと使えないようで、
Makeのデフォルト設定だとサーバーがEUになっていて使えませんでした。
どうやったら使えるのか調べるのにすごく時間がかかってしまいました･･･
諦めて違うAPIで1から再構築しようかなって思ってた時に、
先生からのアドバイスをいただいて、無事使用できました！
Makeでアカウントを作る際に、EUサーバーとUSサーバーの選択ができるので
USサーバーにしてアカウントを作り直しました。
ホントにありがとうございます(*･ω･)*_ _)ﾍﾟｺﾘ

##### ②複数の回答をどうやったら返せるのか
10件分の店舗情報を返したかったのですが、
ヒットした最初の1番目しか返ってこないので、2番目以降を返すのにまた壁にあたりました。
Githubにて先輩方にお伺いしたところ、
`Feature[` `]:name` のカッコの中に「何番目の回答」を返すか数字を入力できると教えていただきました！
このカッコ、何か意味がありそうだし、
ここを変えればたぶんできるはずなんだけど･･･とは思っていたのですが
直接番号を入力すればいいだけだったなんて･･･＾＾；
こんな簡単なことなのに、何も知らない自分がちょっと恥ずかしい･･･

##### ③LINEのReplyは5件まで
返事は5件までっていう上限が設定されているので
じゃ、10件返すにはどうしたらいいか考えました。
でももともと想定はしていて、1件の返事に複数の回答を入れれば大丈夫だろうって＾＾
今回は1件の返事に5件分の回答を入れました。
これで何件でも表示することが理論上できるはずです！
（5000文字の制限はあります）


## 今後の課題

##### ①住所コードを入力しないといけないのでコードを調べないといけません･･･
市区町村名を入力したら、コードが返ってくるってBotもつくれるといいのですが
まだそこまで手が回らなかったです。

##### ②今回はすべてのスーパーを対象にしたのですが、自社の店舗に絞れば業務をしやすくなると思います。
Yahoo！ローカルサーチAPIのパラメータに「group」や「sort」というのがあって
同一店舗や適合度順に並び替えたりできるようです。
また、Googleスプレッドシートなどから引っ張ってくるやり方とかもありそうです。

:::note
2024/4/30
こちらはただ今作成中です！
流れはイメージできてるのですが、あとは知識と技術が足りないです･･･
:::

今回は最初の挑戦でしたので、
いろいろわからないことばかりで大変でした。
まさに未知の世界への第1歩です:runner_tone1:！
デジタル世界の深淵へ、ほんの1ﾐﾘだけ進んだのかなって思います:smile:
がんばるぞっ！