はじめに
本記事は、kintoneの複数のレコードを取得するAPIを使ってLINEメッセージを複数送る際に遭遇した、「[400] Invalid reply token」というエラーの回避方法を紹介します。 具体的には、MAKEでLINEとkintoneの配列のデータを扱う場合に使うAggregatorモジュール、さらにkintoneのデータをMAKEで取得する際に役に立つQueryの設定方法を案内します。

Invalid reply token エラーの原因
「[400] Invalid reply token」は、LINEの無効のReply Tokenを使って応答メッセージを送ろうとする時に返ってきます。筆者は、以前執筆した下記の記事を検証していた際にこの問題に遭遇しました。
kintoneで取得した情報を基に、1つのReply Tokenで複数のLINEメッセージを送ろうとした時に、このエラーが返されました。1件目のメッセージを送った後にReply Tokenが無効になったため、2件目以降の処理からはエラーが返されました。
Text Aggregator で回避する
Text Aggregator とは
取得したデータをそれぞれLINEメッセージで送るのではなく、情報を1つにまとめて1つのLINEメッセージで送ることにより、エラーの回避をすることにしました。
MAKEには、複数のデータを1つにまとめるAggregatorというモジュールがあります。今回の例では、配列のデータを1つの文字列にまとめるText Aggregatorモジュールを使います。

Text Aggregator の設定
kintoneとLINEモジュールの間に、ToolsのText aggregator モジュールを配置します。

Text Aggregator のアドバンス設定を表示すると、細かい設定が可能です。
| 項目 | 設定する値 | メモ |
|---|---|---|
| Source Module | kintoneで取得した複数レコード | |
| Row separator | New row | この設定をすると、 1行ずつまとめてくれる |
| text | Source Moduleから取得したい項目 |

LINEの設定
Text aggregator モジュールでまとめた文字列を、LINEの返信メッセージに設定します。

動作確認
LINEメッセージを起点に、kintoneが複数のレコード情報を配列として取得します。Text aggregator モジュールを通すことで、配列のデータが1つの文字列にまとまります。LINEのSend a Reply Messageで、まとまったデータが1つのLINEメッセージで送られます。これによりLINEで1件しかメッセージを送っていないので、「[400] Invalid reply token」のエラーを回避することが出来ました。

Queryオプションでkintoneからの取得データを調整する
kintoneのSearch Recordsモジュールはデフォルトで、絞り込みがされていないデータがレコード番号の降順で返ってきます。そのため、Text Aggregator を使用する前に、kintoneから取得したデータをある程度調整しなければならない場合があります。kintoneモジュールの Query オプションを設定することで、データの絞り込みやデータの順序を変更することが出来ます。
例として、日付フィールドの値が昨日の日付で、レコード番号の昇順にデータを返して欲しい場合は下記のようなクエリを準備します。
日付 = YESTERDAY() order by レコード番号 asc
kintone のクエリの詳細な設定方法に関してはcybozu develper networkのドキュメントを参照して下さい。
こちらのクエリをkintoneモジュールのQueryオプションに設定します。

これでMAKEを走らせると、クエリ通りの絞り込みと順序でデータが返されます。このデータを基にText aggregator を使用することで、kintoneとの連携がより効率良く行えます。
終わりに
本記事ではMAKEでLINEを扱う際の「[400] Invalid reply token」の原因、エラーの回避方法とkintoneのクエリの設定方法について案内しました。
MAKE、LINE APIやkintone APIの詳細の情報については、各サービスのドキュメントをご確認下さい。