Log

いろいろ

A3RT Talk APIに「こちらこそすみません」と送ると正常ステータスで空文字が返却される

Talk APIを実装して運用していたところ、早速エラーを吐いていました。 

matsuql.hatenablog.com

2020/02/15:追記 修正されました。

matsuql.hatenablog.com

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は進捗非表示のオプションです。パイプの渡し先のjqjsonフォーマッターで 、utf8のデコードもしてくれてます。初めて知ったのですがとても便利。

結果ですが、やはり応答メッセージが空文字ですね。そんなパターンあるんだなあと思ってAPI仕様を見たところ、そのパターンではステータスが2000で返却されるらしい。

No. status HTTPstatus message 返却条件
1 0 200 ok 正常応答
14 2000 200 empty reply 応答テキストが空

さきほどのレスポンスではステータスは0だったし謎。

少し文字列を変えたりして検証してみましたが、空文字の返答が来るのは「こちらこそすみません」のみでした。

生成された応答メッセージに問題があって、レスポンスを返すところで抜け落ちたりしているのかな。折角なので問い合わせてみたいと思います。こちらに問題があったら申し訳ない限りですが…

修正

このbotの利用者は一人しかいないので特に対応はしません。