Talk APIを実装して運用していたところ、早速エラーを吐いていました。
2020/02/15:追記 修正されました。
LINE botのエラー内容
herokuのログ抜粋&整形。
2020-01-11T07:33:53.404186+00:00 app[web.1]: linebot.exceptions.LineBotApiError: LineBotApiError: status_code=400, request_id=xxxxxxxx, error_response={ "details": [{ "message": "May not be empty", "property": "messages[0].text" }], "message": "The request body has 1 error(s)" }, (以下略)
LINE botのリプライに空文字を設定しているためエラーが起きています。
リプライに設定するメッセージはTalk APIより取得しているため、おそらくそこで空文字が返却されているのでしょう。
LINE botに送られてきたメッセージを確認すると「こちらこそすみません」でした。curl
でレスポンスを確認してみます。
Talk APIの調査
curl -s -X POST https://api.a3rt.recruit-tech.co.jp/talk/v1/smalltalk \ > -F "apikey={APIキー}" \ > -F "query=こちらこそすみません" \ > | jq . { "status": 0, "message": "ok", "results": [ { "perplexity": 1.9135245437520036, "reply": "" } ] }
-s
は進捗非表示のオプションです。パイプの渡し先のjq
はjsonフォーマッターで 、utf8のデコードもしてくれてます。初めて知ったのですがとても便利。
結果ですが、やはり応答メッセージが空文字ですね。そんなパターンあるんだなあと思ってAPI仕様を見たところ、そのパターンではステータスが2000
で返却されるらしい。
No. | status | HTTPstatus | message | 返却条件 |
---|---|---|---|---|
1 | 0 | 200 | ok | 正常応答 |
14 | 2000 | 200 | empty reply | 応答テキストが空 |
さきほどのレスポンスではステータスは0
だったし謎。
少し文字列を変えたりして検証してみましたが、空文字の返答が来るのは「こちらこそすみません」のみでした。
生成された応答メッセージに問題があって、レスポンスを返すところで抜け落ちたりしているのかな。折角なので問い合わせてみたいと思います。こちらに問題があったら申し訳ない限りですが…
修正
このbotの利用者は一人しかいないので特に対応はしません。